<?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>25496</bug_id>
          
          <creation_ts>2009-04-30 16:08:10 -0700</creation_ts>
          <short_desc>Switch V8EventListenerList to a hashtable implementation</short_desc>
          <delta_ts>2009-05-05 22:23:44 -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="Antony Sargent">asargent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>119536</commentid>
    <comment_count>0</comment_count>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-04-30 16:08:10 -0700</bug_when>
    <thetext>This avoids some tricky issues with event listener removal in the current implmentation and has slightly better performance.

http://codereview.chromium.org/79059</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119537</commentid>
    <comment_count>1</comment_count>
      <attachid>29925</attachid>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-04-30 16:15:07 -0700</bug_when>
    <thetext>Created attachment 29925
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119555</commentid>
    <comment_count>2</comment_count>
      <attachid>29933</attachid>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-04-30 18:43:21 -0700</bug_when>
    <thetext>Created attachment 29933
patch v2

A few fixes to comply with WebKit style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119605</commentid>
    <comment_count>3</comment_count>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-05-01 10:58:44 -0700</bug_when>
    <thetext>I&apos;ll be uploading a new version in a little while with one more small change based on offline discussion with dglazkov.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119641</commentid>
    <comment_count>4</comment_count>
      <attachid>29950</attachid>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-05-01 15:45:43 -0700</bug_when>
    <thetext>Created attachment 29950
patch v3

Changed the iterator from being a nested class to it&apos;s own standalone class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119652</commentid>
    <comment_count>5</comment_count>
      <attachid>29950</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-01 18:46:21 -0700</bug_when>
    <thetext>Comment on attachment 29950
patch v3

You did good! Just a few comments below.

&gt; +        No new functionality so no new tests.
&gt; +
&gt; +        * bindings/v8/V8EventListenerList.cpp:
&gt; +        (WebCore::V8EventListenerListIterator::V8EventListenerListIterator):
&gt; +        (WebCore::V8EventListenerListIterator::~V8EventListenerListIterator):
&gt; +        (WebCore::V8EventListenerListIterator::operator++):
&gt; +        (WebCore::V8EventListenerListIterator::operator==):
&gt; +        (WebCore::V8EventListenerListIterator::operator!=):
&gt; +        (WebCore::V8EventListenerListIterator::operator*):
&gt; +        (WebCore::V8EventListenerListIterator::seekToEnd):
&gt; +        (WebCore::V8EventListenerList::V8EventListenerList):
&gt; +        (WebCore::V8EventListenerList::~V8EventListenerList):
&gt; +        (WebCore::V8EventListenerList::begin):
&gt; +        (WebCore::V8EventListenerList::end):
&gt; +        (WebCore::getKey):
&gt; +        (WebCore::V8EventListenerList::add):
&gt; +        (WebCore::V8EventListenerList::remove):
&gt; +        (WebCore::V8EventListenerList::clear):
&gt; +        (WebCore::V8EventListenerList::find):

No need to leave all these hanging. Can just say:

 +        * bindings/v8/V8EventListenerList.cpp: Added V8EventListenerListIterator.

&gt; +int getKey(v8::Local&lt;v8::Object&gt; object)

static int getKey(...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119875</commentid>
    <comment_count>6</comment_count>
      <attachid>29995</attachid>
    <who name="Antony Sargent">asargent</who>
    <bug_when>2009-05-04 13:48:18 -0700</bug_when>
    <thetext>Created attachment 29995
patch v4

New Patch in response to Dmitri&apos;s last comments. Contains less verbose ChangeLog comment, and switched getKey function to static.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119893</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-04 16:41:24 -0700</bug_when>
    <thetext>Dimitri - Would you like to land this, or should I?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120061</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-05 22:23:44 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/V8EventListenerList.cpp
	M	WebCore/bindings/v8/V8EventListenerList.h
	M	WebCore/bindings/v8/WorkerContextExecutionProxy.cpp
Committed r43277</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29925</attachid>
            <date>2009-04-30 16:15:07 -0700</date>
            <delta_ts>2009-04-30 18:43:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>12305</size>
            <attacher name="Antony Sargent">asargent</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMTAz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDQt
MzAgIEFudG9ueSBTYXJnZW50ICA8YXNhcmdlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBWOEV2ZW50TGlzdGVu
ZXJMaXN0ZSB0byBhIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXZvaWRzIHNvbWUgdHJpY2t5IGlzc3VlcyB3aXRoIGV2ZW50IGxpc3RlbmVyIHJlbW92
YWwgaW4gdGhlIAorICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBoYXMgc2xpZ2h0
bHkgYmV0dGVyIHBlcmZvcm1hbmNlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTQ5NgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMg
QURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVy
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6aXRl
cmF0b3I6On5pdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0
OjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVu
ZXJMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50
TGlzdGVuZXJMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpW
OEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yOjpzZWVrVG9FbmQpOgorICAgICAgICAo
V2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6VjhFdmVudExpc3RlbmVyTGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0Ojp+VjhFdmVudExpc3RlbmVyTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0OjpiZWdpbik6CisgICAgICAg
IChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0OjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0OjpyZW1vdmUpOgorICAgICAgICAo
V2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
VjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhFdmVu
dExpc3RlbmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6
c2l6ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5p
dENvbnRleHRJZk5lZWRlZCk6CisKIDIwMDktMDQtMzAgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6
a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5k
ZXg6IGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJp
bmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuY3BwCShyZXZpc2lvbiA0MzEwMikKKysrIGJp
bmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5
MyArMzUsMTQ2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotVjhFdmVudExpc3RlbmVyTGlz
dDo6VjhFdmVudExpc3RlbmVyTGlzdChjb25zdCBjaGFyKiBuYW1lKQorVjhFdmVudExpc3RlbmVy
TGlzdDo6aXRlcmF0b3I6Oml0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QgKmxpc3QpCisgICAg
OiBtX2xpc3QobGlzdCksIG1fdmVjdG9ySW5kZXgoMCksIG1faXRlcihsaXN0LT5tX3RhYmxlLmJl
Z2luKCkpCiB7Ci0gICAgQVNTRVJUKHN0cmxlbihuYW1lKSA8PSBtYXhLZXlOYW1lTGVuZ3RoKTsK
LSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Cit9CisKK1Y4RXZlbnRMaXN0ZW5lckxp
c3Q6Oml0ZXJhdG9yOjppdGVyYXRvcihWOEV2ZW50TGlzdGVuZXJMaXN0ICpsaXN0LCBib29sIHNo
b3VsZFNlZWtUb0VuZCkKKyAgICA6IG1fbGlzdChsaXN0KSwgbV92ZWN0b3JJbmRleCgwKSwgbV9p
dGVyKGxpc3QtPm1fdGFibGUuYmVnaW4oKSkKK3sKKyAgICBpZiAoc2hvdWxkU2Vla1RvRW5kKQor
ICAgICAgICBzZWVrVG9FbmQoKTsKK30KKworVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6
On5pdGVyYXRvcigpIHt9CisKK3ZvaWQgVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6Om9w
ZXJhdG9yKysoKQoreworICAgIGlmIChtX2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7
CisgICAgICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gKCptX2l0ZXIpLnNl
Y29uZDsKKyAgICAgICAgaWYgKG1fdmVjdG9ySW5kZXggKyAxIDwgdmVjdG9yLT5zaXplKCkpIHsK
KyAgICAgICAgICAgIG1fdmVjdG9ySW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX3ZlY3RvckluZGV4ID0gMDsKKyAgICAgICAgKyttX2l0ZXI7CisgICAg
fQorfQorCitib29sIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikKK3sKKyAgICByZXR1cm4gb3RoZXIubV9pdGVyID09IG1faXRl
ciAmJiBvdGhlci5tX3ZlY3RvckluZGV4ID09IG1fdmVjdG9ySW5kZXggJiYgb3RoZXIubV9saXN0
ID09IG1fbGlzdDsKK30KKworYm9vbCBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvcjo6b3Bl
cmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpCit7CisgICAgcmV0dXJuICFvcGVyYXRvcj09
KG90aGVyKTsKK30KKworVjhFdmVudExpc3RlbmVyKiBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVy
YXRvcjo6b3BlcmF0b3IqKCkKK3sKKyAgICBpZiAobV9pdGVyICE9IG1fbGlzdC0+bV90YWJsZS5l
bmQoKSkgeworICAgICAgICBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9ICgqbV9p
dGVyKS5zZWNvbmQ7CisgICAgICAgIGlmIChtX3ZlY3RvckluZGV4IDwgdmVjdG9yLT5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm4gdmVjdG9yLT5hdChtX3ZlY3RvckluZGV4KTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6OnNl
ZWtUb0VuZCgpCit7CisgICAgbV9pdGVyID0gbV9saXN0LT5tX3RhYmxlLmVuZCgpOworICAgIG1f
dmVjdG9ySW5kZXggPSAwOworfQorCiAKLSAgICAvLyBXcml0ZSB0aGUgbmFtZSBpbnRvIGEgdGVt
cG9yYXJ5IGJ1ZmZlciwgbGVhdmluZyAxIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcKLSAgICAvLyBm
b3IgYSBwcmVmaXggd2UnbGwgdmFyeSBiZXR3ZWVuIHRoZSBpbmxpbmUgYW5kIG5vbi1pbmxpbmUg
a2V5cy4KLSAgICBjaGFyIGtleUJ1ZmZlclttYXhLZXlOYW1lTGVuZ3RoICsgMl0gPSB7IDAgfTsK
LSAgICBzdHJuY3B5KGtleUJ1ZmZlciArIDEsIG5hbWUsIG1heEtleU5hbWVMZW5ndGgpOwotICAg
IGtleUJ1ZmZlclswXSA9ICcxJzsKLSAgICBtX2lubGluZUtleSA9IHY4OjpQZXJzaXN0ZW50PHY4
OjpTdHJpbmc+OjpOZXcodjg6OlN0cmluZzo6TmV3KGtleUJ1ZmZlcikpOwotICAgIGtleUJ1ZmZl
clswXSA9ICcyJzsKLSAgICBtX25vbklubGluZUtleSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJp
bmc+OjpOZXcodjg6OlN0cmluZzo6TmV3KGtleUJ1ZmZlcikpOworVjhFdmVudExpc3RlbmVyTGlz
dDo6VjhFdmVudExpc3RlbmVyTGlzdCgpCit7CiB9CiAKIFY4RXZlbnRMaXN0ZW5lckxpc3Q6On5W
OEV2ZW50TGlzdGVuZXJMaXN0KCkKIHsKLSAgICBtX2lubGluZUtleS5EaXNwb3NlKCk7Ci0gICAg
bV9ub25JbmxpbmVLZXkuRGlzcG9zZSgpOwogfQogCiBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVy
YXRvciBWOEV2ZW50TGlzdGVuZXJMaXN0OjpiZWdpbigpCiB7Ci0gICAgcmV0dXJuIG1fbGlzdC5i
ZWdpbigpOworICAgIHJldHVybiBpdGVyYXRvcih0aGlzKTsKIH0KIAogVjhFdmVudExpc3RlbmVy
TGlzdDo6aXRlcmF0b3IgVjhFdmVudExpc3RlbmVyTGlzdDo6ZW5kKCkKIHsKLSAgICByZXR1cm4g
bV9saXN0LmVuZCgpOworICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCB0cnVlKTsKIH0KIAotdjg6
OkhhbmRsZTx2ODo6U3RyaW5nPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpnZXRLZXkoYm9vbCBpc0lu
bGluZSkKKworaW50IGdldEtleSh2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0KQogewotICAg
IHJldHVybiBpc0lubGluZSA/IG1faW5saW5lS2V5IDogbV9ub25JbmxpbmVLZXk7CisgICAgLy8g
MCBpcyBhIHNlbnRpbmVsIHZhbHVlIGZvciB0aGUgSGFzaE1hcCBrZXksIHNvIHdlIG1hcCBpdCB0
byAxCisgICAgaW50IGhhc2ggPSBvYmplY3QtPkdldElkZW50aXR5SGFzaCgpOworICAgIGlmICho
YXNoID09IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiBoYXNoOwog
fQogCi0vLyBTZWUgY29tbWVudCBpbiAuaCBmaWxlIGZvciB0aGlzIGZ1bmN0aW9uLCBhbmQgdXBk
YXRlIGFjY29yZGluZ2x5IGlmIGltcGxlbWVudGF0aW9uIGRldGFpbHMgY2hhbmdlIGhlcmUuCiB2
b2lkIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmFkZChWOEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQog
ewogICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpOwotICAgIG1fbGlzdC5hcHBl
bmQobGlzdGVuZXIpOwotCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCiAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVj
dCgpOwotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gdjg6OkV4dGVybmFsOjpXcmFw
KGxpc3RlbmVyKTsKLSAgICBvYmplY3QtPlNldEhpZGRlblZhbHVlKGdldEtleShsaXN0ZW5lci0+
aXNBdHRyaWJ1dGUoKSksIHZhbHVlKTsKKyAgICBpbnQga2V5ID0gZ2V0S2V5KG9iamVjdCk7Cisg
ICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiB2ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOwor
ICAgIGlmICghdmVjdG9yKSB7CisgICAgICAgIHZlY3RvciA9IG5ldyBWZWN0b3I8VjhFdmVudExp
c3RlbmVyKj4oKTsKKyAgICAgICAgbV90YWJsZS5zZXQoa2V5LCB2ZWN0b3IpOworICAgIH0KKyAg
ICB2ZWN0b3ItPmFwcGVuZChsaXN0ZW5lcik7CisgICAgbV9yZXZlcnNlVGFibGUuc2V0KGxpc3Rl
bmVyLCBrZXkpOwogfQogCiB2b2lkIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OnJlbW92ZShWOEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyKQogewotICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0
KCkpOwotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IGtleSA9IGdldEtleShsaXN0ZW5lci0+aXNBdHRyaWJ1dGUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgVjhFdmVu
dExpc3RlbmVyKiBlbGVtZW50ID0gbV9saXN0LmF0KGkpOwotICAgICAgICBpZiAoZWxlbWVudC0+
aXNBdHRyaWJ1dGUoKSA9PSBsaXN0ZW5lci0+aXNBdHRyaWJ1dGUoKSAmJiBlbGVtZW50ID09IGxp
c3RlbmVyKSB7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gbGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FKGFzYXJn
ZW50KSB0aGlzIGNoZWNrIGZvciBoaWRkZW4gdmFsdWUgYmVpbmcgIWVtcHR5IGlzIGEgd29ya2Fy
b3VuZCBmb3IKLSAgICAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1
ZXMvZGV0YWlsP2lkPTMwMAotICAgICAgICAgICAgLy8gT25jZSB0aGUgZml4IGZvciB0aGF0IGlz
IHB1bGxlZCBpbnRvIGNocm9taXVtIHdlIGNhbiByZW1vdmUgdGhlIGNoZWNrIGhlcmUuCi0gICAg
ICAgICAgICBpZiAoIW9iamVjdC0+R2V0SGlkZGVuVmFsdWUoa2V5KS5Jc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgb2JqZWN0LT5EZWxldGVIaWRkZW5WYWx1ZShnZXRLZXkobGlzdGVuZXItPmlz
QXR0cmlidXRlKCkpKTsKLSAgICAgICAgICAgIG1fbGlzdC5yZW1vdmUoaSk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICBpZiAobV9yZXZlcnNlVGFibGUuY29udGFpbnMobGlzdGVuZXIpKSB7Cisg
ICAgICAgIGludCBrZXkgPSBtX3JldmVyc2VUYWJsZS5nZXQobGlzdGVuZXIpOworICAgICAgICBW
ZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9IG1fdGFibGUuZ2V0KGtleSk7CisgICAg
ICAgIGlmICghdmVjdG9yKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBmb3IgKHNpemVf
dCBqID0gMDsgaiA8IHZlY3Rvci0+c2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIGlmICh2ZWN0
b3ItPmF0KGopID09IGxpc3RlbmVyKSB7CisgICAgICAgICAgICAgICAgdmVjdG9yLT5yZW1vdmUo
aik7CisgICAgICAgICAgICAgICAgaWYgKHZlY3Rvci0+c2l6ZSgpID09IDApCisgICAgICAgICAg
ICAgICAgICAgIG1fdGFibGUucmVtb3ZlKGtleSk7CisKKyAgICAgICAgICAgICAgICBtX3JldmVy
c2VUYWJsZS5yZW1vdmUobGlzdGVuZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0
OjpjbGVhcigpCiB7Ci0gICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVudCA9
IG1fbGlzdC5hdChpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGVs
ZW1lbnQtPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIG9iamVjdC0+RGVsZXRlSGlkZGVu
VmFsdWUoZ2V0S2V5KGVsZW1lbnQtPmlzQXR0cmlidXRlKCkpKTsKLSAgICB9Ci0gICAgbV9saXN0
LmNsZWFyKCk7CisgICAgbV90YWJsZS5jbGVhcigpOworICAgIG1fcmV2ZXJzZVRhYmxlLmNsZWFy
KCk7CiB9CiAKLVY4RXZlbnRMaXN0ZW5lciogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZCh2ODo6
TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCBib29sIGlzSW5saW5lKQorVjhFdmVudExpc3RlbmVy
KiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3Qs
IGJvb2wgaXNBdHRyaWJ1dGUpCiB7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBv
YmplY3QtPkdldEhpZGRlblZhbHVlKGdldEtleShpc0lubGluZSkpOwotICAgIGlmICh2YWx1ZS5J
c0VtcHR5KCkpCisgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAgaW50
IGtleSA9IGdldEtleShvYmplY3QpOworCisgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiB2
ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOworICAgIGlmICghdmVjdG9yKQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOEV2ZW50TGlzdGVuZXIqPih2ODo6
RXh0ZXJuYWw6OlVud3JhcCh2YWx1ZSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
ZWN0b3ItPnNpemUoKTsgaSsrKSB7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVudCA9
IHZlY3Rvci0+YXQoaSk7CisgICAgICAgIGlmIChpc0F0dHJpYnV0ZSA9PSBlbGVtZW50LT5pc0F0
dHJpYnV0ZSgpICYmIG9iamVjdCA9PSBlbGVtZW50LT5nZXRMaXN0ZW5lck9iamVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCShyZXZp
c2lvbiA0MzEwMikKKysrIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDYxIEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyOwogCi0gICAgLy8gVGhpcyBpcyBhIGNv
bnRhaW5lciBmb3IgVjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCBhbHNvIGRvZXMgc29tZSBj
YWNoaW5nIHRvIHNwZWVkIHVwIGZpbmRpbmcgZW50cmllcyBieSB2ODo6T2JqZWN0LgorICAgIC8v
IFRoaXMgaXMgYSBjb250YWluZXIgZm9yIFY4RXZlbnRMaXN0ZW5lciBvYmplY3RzIHRoYXQgdXNl
cyB0aGUgaWRlbnRpdHkgaGFzaCBvZiB0aGUgdjg6Ok9iamVjdCB0bworICAgIC8vIHNwZWVkIHVw
IGxvb2t1cHMKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0IHsKICAgICBwdWJsaWM6Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5TmFtZUxlbmd0aCA9IDI1NDsKKyAgICAg
ICAgLy8gQmVjYXVzZSB2ODo6T2JqZWN0IGlkZW50aXR5IGhhc2hlcyBhcmUgbm90IGd1YXJhbnRl
ZWQgdG8gYmUgdW5pcXVlLCB3ZSB1bmZvcnR1bmF0ZWx5IGNhbid0IGp1c3QgbWFwCisgICAgICAg
IC8vIGFuIGludCB0byBWOEV2ZW50TGlzdGVuZXIuIEluc3RlYWQgd2UgZGVmaW5lIGEgSGFzaE1h
cCBvZiBpbnQgdG8gVmVjdG9yIG9mIFY4RXZlbnRMaXN0ZW5lcgorICAgICAgICAvLyBjYWxsZWQg
YSBMaXN0ZW5lck11bHRpTWFwLgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxWOEV2ZW50TGlzdGVu
ZXIqPiogVmFsdWVzOworICAgICAgICBzdHJ1Y3QgVmFsdWVzVHJhaXRzIDogSGFzaFRyYWl0czxW
YWx1ZXM+IHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOworICAgICAgICB9OworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWYWx1ZXMs
IERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiwgVmFsdWVzVHJhaXRzPiBM
aXN0ZW5lck11bHRpTWFwOwogCi0gICAgICAgIC8vIFRoZSBuYW1lIHNob3VsZCBiZSBkaXN0aW5j
dCBmcm9tIGFueSBvdGhlciBWOEV2ZW50TGlzdGVuZXJMaXN0IHdpdGhpbiB0aGUgc2FtZSBwcm9j
ZXNzLCBhbmQgPD0gbWF4S2V5TmFtZUxlbmd0aCBjaGFyYWN0ZXJzLgotICAgICAgICBleHBsaWNp
dCBWOEV2ZW50TGlzdGVuZXJMaXN0KGNvbnN0IGNoYXIqIG5hbWUpOworICAgICAgICBWOEV2ZW50
TGlzdGVuZXJMaXN0KCk7CiAgICAgICAgIH5WOEV2ZW50TGlzdGVuZXJMaXN0KCk7CiAKLSAgICAg
ICAgdHlwZWRlZiBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj46Oml0ZXJhdG9yIGl0ZXJhdG9yOwot
ICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBiZWdpbigpOworICAgICAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0
ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yKFY4RXZl
bnRMaXN0ZW5lckxpc3QqLCBib29sIHNob3VsZFNlZWtUb0VuZCk7CisgICAgICAgICAgICB+aXRl
cmF0b3IoKTsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpOworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcik7CisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKTsKKyAgICAgICAgICAgIFY4RXZlbnRMaXN0
ZW5lciogb3BlcmF0b3IqKCk7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQg
c2Vla1RvRW5kKCk7CisKKyAgICAgICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIG1fbGlzdDsK
KyAgICAgICAgICAgIExpc3RlbmVyTXVsdGlNYXA6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAg
ICAgIHNpemVfdCBtX3ZlY3RvckluZGV4OworICAgICAgICB9OworICAgICAgICBmcmllbmQgY2xh
c3MgaXRlcmF0b3I7CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKTsKICAgICAgICAgaXRlcmF0
b3IgZW5kKCk7CiAKLSAgICAgICAgLy8gSW4gYWRkaXRpb24gdG8gYWRkaW5nIHRoZSBsaXN0ZW5l
ciB0byB0aGlzIGxpc3QsIHRoaXMgYWxzbyBjYWNoZXMgdGhlIFY4RXZlbnRMaXN0ZW5lciBhcyBh
IGhpZGRlbiBwcm9wZXJ0eSBvbiBpdHMgd3JhcHBlZAotICAgICAgICAvLyB2OCBsaXN0ZW5lciBv
YmplY3QsIHNvIHdlIGNhbiBxdWlja2x5IGxvb2sgaXQgdXAgbGF0ZXIuCiAgICAgICAgIHZvaWQg
YWRkKFY4RXZlbnRMaXN0ZW5lciopOwogICAgICAgICB2b2lkIHJlbW92ZShWOEV2ZW50TGlzdGVu
ZXIqKTsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyKiBmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiwgYm9vbCBpc0lubGluZSk7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZmluZCh2ODo6TG9j
YWw8djg6Ok9iamVjdD4sIGJvb2wgaXNBdHRyaWJ1dGUpOwogICAgICAgICB2b2lkIGNsZWFyKCk7
Ci0gICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgICAg
ICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGdldEtleShib29sIGlzSW5saW5lKTsK
LSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gbV9pbmxpbmVLZXk7Ci0gICAgICAg
IHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IG1fbm9uSW5saW5lS2V5OwotICAgICAgICBWZWN0
b3I8VjhFdmVudExpc3RlbmVyKj4gbV9saXN0OworICAgICAgICBMaXN0ZW5lck11bHRpTWFwIG1f
dGFibGU7CisKKyAgICAgICAgLy8gd2UgYWxzbyBrZWVwIGEgcmV2ZXJzZSBtYXBwaW5nIG9mIFY4
RXZlbnRMaXN0ZW5lciB0byB2ODo6T2JqZWN0IGlkZW50aXR5IGhhc2gsCisgICAgICAgIC8vIGlu
IG9yZGVyIHRvIHNwZWVkIHVwIHJlbW92YWwgYnkgVjhFdmVudExpc3RlbmVyCisgICAgICAgIEhh
c2hNYXA8VjhFdmVudExpc3RlbmVyKiwgaW50PiBtX3JldmVyc2VUYWJsZTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAJKHJldmlzaW9uIDQzMTAyKQorKysgYmluZGluZ3MvdjgvV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3
IEBAIHZvaWQgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q28KICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGdsb2JhbE9iamVjdCA9IG1fY29udGV4dC0+R2xvYmFsKCk7CiAgICAg
Z2xvYmFsT2JqZWN0LT5TZXQoaW1wbGljaXRQcm90b1N0cmluZywganNXb3JrZXJDb250ZXh0KTsK
IAotICAgIG1fbGlzdGVuZXJzLnNldChuZXcgVjhFdmVudExpc3RlbmVyTGlzdCgibV9saXN0ZW5l
cnMiKSk7CisgICAgbV9saXN0ZW5lcnMuc2V0KG5ldyBWOEV2ZW50TGlzdGVuZXJMaXN0KCkpOwog
fQogCiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OkdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29933</attachid>
            <date>2009-04-30 18:43:21 -0700</date>
            <delta_ts>2009-05-01 15:45:43 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>patch_v2.txt</filename>
            <type>text/plain</type>
            <size>12296</size>
            <attacher name="Antony Sargent">asargent</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMTAz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDQt
MzAgIEFudG9ueSBTYXJnZW50ICA8YXNhcmdlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBWOEV2ZW50TGlzdGVu
ZXJMaXN0ZSB0byBhIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXZvaWRzIHNvbWUgdHJpY2t5IGlzc3VlcyB3aXRoIGV2ZW50IGxpc3RlbmVyIHJlbW92
YWwgaW4gdGhlIAorICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBoYXMgc2xpZ2h0
bHkgYmV0dGVyIHBlcmZvcm1hbmNlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTQ5NgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNv
IG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6
Oml0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJh
dG9yOjp+aXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6
aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVy
TGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExp
c3RlbmVyTGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6VjhF
dmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvcjo6c2Vla1RvRW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OlY4RXZlbnRMaXN0ZW5lckxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6flY4RXZlbnRMaXN0ZW5lckxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6YmVnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dEtleSk6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0OjphZGQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6cmVtb3ZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRM
aXN0ZW5lckxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OnNp
emUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRD
b250ZXh0SWZOZWVkZWQpOgorCiAyMDA5LTA0LTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtv
dkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4
OiBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5k
aW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAkocmV2aXNpb24gNDMxMDIpCisrKyBiaW5k
aW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOTMg
KzM1LDE0OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVY4RXZlbnRMaXN0ZW5lckxpc3Q6
OlY4RXZlbnRMaXN0ZW5lckxpc3QoY29uc3QgY2hhciogbmFtZSkKK1Y4RXZlbnRMaXN0ZW5lckxp
c3Q6Oml0ZXJhdG9yOjppdGVyYXRvcihWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0KQorICAgIDog
bV9saXN0KGxpc3QpCisgICAgLCBtX3ZlY3RvckluZGV4KDApCisgICAgLCBtX2l0ZXIobGlzdC0+
bV90YWJsZS5iZWdpbigpKQogewotICAgIEFTU0VSVChzdHJsZW4obmFtZSkgPD0gbWF4S2V5TmFt
ZUxlbmd0aCk7Ci0gICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworfQorCitWOEV2ZW50
TGlzdGVuZXJMaXN0OjppdGVyYXRvcjo6aXRlcmF0b3IoVjhFdmVudExpc3RlbmVyTGlzdCogbGlz
dCwgYm9vbCBzaG91bGRTZWVrVG9FbmQpCisgICAgOiBtX2xpc3QobGlzdCkKKyAgICAsIG1fdmVj
dG9ySW5kZXgoMCkKKyAgICAsIG1faXRlcihsaXN0LT5tX3RhYmxlLmJlZ2luKCkpCit7CisgICAg
aWYgKHNob3VsZFNlZWtUb0VuZCkKKyAgICAgICAgc2Vla1RvRW5kKCk7Cit9CisKK1Y4RXZlbnRM
aXN0ZW5lckxpc3Q6Oml0ZXJhdG9yOjp+aXRlcmF0b3IoKSB7IH0KKwordm9pZCBWOEV2ZW50TGlz
dGVuZXJMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgICAgaWYgKG1faXRlciAhPSBt
X2xpc3QtPm1fdGFibGUuZW5kKCkpIHsKKyAgICAgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+
KiB2ZWN0b3IgPSBtX2l0ZXItPnNlY29uZDsKKyAgICAgICAgaWYgKG1fdmVjdG9ySW5kZXggKyAx
IDwgdmVjdG9yLT5zaXplKCkpIHsKKyAgICAgICAgICAgIG1fdmVjdG9ySW5kZXgrKzsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3ZlY3RvckluZGV4ID0gMDsKKyAg
ICAgICAgKyttX2l0ZXI7CisgICAgfQorfQorCitib29sIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0
ZXJhdG9yOjpvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKK3sKKyAgICByZXR1cm4g
b3RoZXIubV9pdGVyID09IG1faXRlciAmJiBvdGhlci5tX3ZlY3RvckluZGV4ID09IG1fdmVjdG9y
SW5kZXggJiYgb3RoZXIubV9saXN0ID09IG1fbGlzdDsKK30KKworYm9vbCBWOEV2ZW50TGlzdGVu
ZXJMaXN0OjppdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpCit7Cisg
ICAgcmV0dXJuICFvcGVyYXRvcj09KG90aGVyKTsKK30KIAotICAgIC8vIFdyaXRlIHRoZSBuYW1l
IGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyLCBsZWF2aW5nIDEgc3BhY2UgYXQgdGhlIGJlZ2lubmlu
ZwotICAgIC8vIGZvciBhIHByZWZpeCB3ZSdsbCB2YXJ5IGJldHdlZW4gdGhlIGlubGluZSBhbmQg
bm9uLWlubGluZSBrZXlzLgotICAgIGNoYXIga2V5QnVmZmVyW21heEtleU5hbWVMZW5ndGggKyAy
XSA9IHsgMCB9OwotICAgIHN0cm5jcHkoa2V5QnVmZmVyICsgMSwgbmFtZSwgbWF4S2V5TmFtZUxl
bmd0aCk7Ci0gICAga2V5QnVmZmVyWzBdID0gJzEnOwotICAgIG1faW5saW5lS2V5ID0gdjg6OlBl
cnNpc3RlbnQ8djg6OlN0cmluZz46Ok5ldyh2ODo6U3RyaW5nOjpOZXcoa2V5QnVmZmVyKSk7Ci0g
ICAga2V5QnVmZmVyWzBdID0gJzInOwotICAgIG1fbm9uSW5saW5lS2V5ID0gdjg6OlBlcnNpc3Rl
bnQ8djg6OlN0cmluZz46Ok5ldyh2ODo6U3RyaW5nOjpOZXcoa2V5QnVmZmVyKSk7CitWOEV2ZW50
TGlzdGVuZXIqIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yOjpvcGVyYXRvciooKQorewor
ICAgIGlmIChtX2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7CisgICAgICAgIFZlY3Rv
cjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5zZWNvbmQ7CisgICAgICAgIGlm
IChtX3ZlY3RvckluZGV4IDwgdmVjdG9yLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdmVj
dG9yLT5hdChtX3ZlY3RvckluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
VjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0b3I6OnNlZWtUb0VuZCgpCit7CisgICAgbV9pdGVy
ID0gbV9saXN0LT5tX3RhYmxlLmVuZCgpOworICAgIG1fdmVjdG9ySW5kZXggPSAwOworfQorCisK
K1Y4RXZlbnRMaXN0ZW5lckxpc3Q6OlY4RXZlbnRMaXN0ZW5lckxpc3QoKQorewogfQogCiBWOEV2
ZW50TGlzdGVuZXJMaXN0Ojp+VjhFdmVudExpc3RlbmVyTGlzdCgpCiB7Ci0gICAgbV9pbmxpbmVL
ZXkuRGlzcG9zZSgpOwotICAgIG1fbm9uSW5saW5lS2V5LkRpc3Bvc2UoKTsKIH0KIAogVjhFdmVu
dExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgVjhFdmVudExpc3RlbmVyTGlzdDo6YmVnaW4oKQogewot
ICAgIHJldHVybiBtX2xpc3QuYmVnaW4oKTsKKyAgICByZXR1cm4gaXRlcmF0b3IodGhpcyk7CiB9
CiAKIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0ZXJhdG9yIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmVu
ZCgpCiB7Ci0gICAgcmV0dXJuIG1fbGlzdC5lbmQoKTsKKyAgICByZXR1cm4gaXRlcmF0b3IodGhp
cywgdHJ1ZSk7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlN0cmluZz4gVjhFdmVudExpc3RlbmVyTGlz
dDo6Z2V0S2V5KGJvb2wgaXNJbmxpbmUpCisKK2ludCBnZXRLZXkodjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IG9iamVjdCkKIHsKLSAgICByZXR1cm4gaXNJbmxpbmUgPyBtX2lubGluZUtleSA6IG1fbm9u
SW5saW5lS2V5OworICAgIC8vIDAgaXMgYSBzZW50aW5lbCB2YWx1ZSBmb3IgdGhlIEhhc2hNYXAg
a2V5LCBzbyB3ZSBtYXAgaXQgdG8gMS4KKyAgICBpbnQgaGFzaCA9IG9iamVjdC0+R2V0SWRlbnRp
dHlIYXNoKCk7CisgICAgaWYgKCFoYXNoKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4g
aGFzaDsKIH0KIAotLy8gU2VlIGNvbW1lbnQgaW4gLmggZmlsZSBmb3IgdGhpcyBmdW5jdGlvbiwg
YW5kIHVwZGF0ZSBhY2NvcmRpbmdseSBpZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGNoYW5nZSBo
ZXJlLgogdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjphZGQoVjhFdmVudExpc3RlbmVyKiBsaXN0
ZW5lcikKIHsKICAgICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKLSAgICBtX2xp
c3QuYXBwZW5kKGxpc3RlbmVyKTsKLQogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
KwogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSBsaXN0ZW5lci0+Z2V0TGlzdGVu
ZXJPYmplY3QoKTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHY4OjpFeHRlcm5h
bDo6V3JhcChsaXN0ZW5lcik7Ci0gICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShnZXRLZXkobGlz
dGVuZXItPmlzQXR0cmlidXRlKCkpLCB2YWx1ZSk7CisgICAgaW50IGtleSA9IGdldEtleShvYmpl
Y3QpOworICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQo
a2V5KTsKKyAgICBpZiAoIXZlY3RvcikgeworICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yPFY4
RXZlbnRMaXN0ZW5lcio+KCk7CisgICAgICAgIG1fdGFibGUuc2V0KGtleSwgdmVjdG9yKTsKKyAg
ICB9CisgICAgdmVjdG9yLT5hcHBlbmQobGlzdGVuZXIpOworICAgIG1fcmV2ZXJzZVRhYmxlLnNl
dChsaXN0ZW5lciwga2V5KTsKIH0KIAogdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpyZW1vdmUo
VjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKLSAgICBBU1NFUlQodjg6OkNvbnRleHQ6Oklu
Q29udGV4dCgpKTsKLSAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBrZXkgPSBnZXRLZXkobGlzdGVuZXItPmlzQXR0cmlidXRlKCkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IFY4RXZlbnRMaXN0ZW5lciogZWxlbWVudCA9IG1fbGlzdC5hdChpKTsKLSAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzQXR0cmlidXRlKCkgPT0gbGlzdGVuZXItPmlzQXR0cmlidXRlKCkgJiYgZWxlbWVu
dCA9PSBsaXN0ZW5lcikgewotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVj
dCA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwotCi0gICAgICAgICAgICAvLyBGSVhN
RShhc2FyZ2VudCkgdGhpcyBjaGVjayBmb3IgaGlkZGVuIHZhbHVlIGJlaW5nICFlbXB0eSBpcyBh
IHdvcmthcm91bmQgZm9yCi0gICAgICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
djgvaXNzdWVzL2RldGFpbD9pZD0zMDAKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIGZpeCBmb3Ig
dGhhdCBpcyBwdWxsZWQgaW50byBjaHJvbWl1bSB3ZSBjYW4gcmVtb3ZlIHRoZSBjaGVjayBoZXJl
LgotICAgICAgICAgICAgaWYgKCFvYmplY3QtPkdldEhpZGRlblZhbHVlKGtleSkuSXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIG9iamVjdC0+RGVsZXRlSGlkZGVuVmFsdWUoZ2V0S2V5KGxpc3Rl
bmVyLT5pc0F0dHJpYnV0ZSgpKSk7Ci0gICAgICAgICAgICBtX2xpc3QucmVtb3ZlKGkpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgaWYgKG1fcmV2ZXJzZVRhYmxlLmNvbnRhaW5zKGxpc3RlbmVy
KSkgeworICAgICAgICBpbnQga2V5ID0gbV9yZXZlcnNlVGFibGUuZ2V0KGxpc3RlbmVyKTsKKyAg
ICAgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiB2ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkp
OworICAgICAgICBpZiAoIXZlY3RvcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCB2ZWN0b3ItPnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBp
ZiAodmVjdG9yLT5hdChqKSA9PSBsaXN0ZW5lcikgeworICAgICAgICAgICAgICAgIHZlY3Rvci0+
cmVtb3ZlKGopOworICAgICAgICAgICAgICAgIGlmICghdmVjdG9yLT5zaXplKCkpCisgICAgICAg
ICAgICAgICAgICAgIG1fdGFibGUucmVtb3ZlKGtleSk7CisKKyAgICAgICAgICAgICAgICBtX3Jl
dmVyc2VUYWJsZS5yZW1vdmUobGlzdGVuZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBWOEV2ZW50TGlzdGVuZXJM
aXN0OjpjbGVhcigpCiB7Ci0gICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0g
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVu
dCA9IG1fbGlzdC5hdChpKTsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9
IGVsZW1lbnQtPmdldExpc3RlbmVyT2JqZWN0KCk7Ci0gICAgICAgIG9iamVjdC0+RGVsZXRlSGlk
ZGVuVmFsdWUoZ2V0S2V5KGVsZW1lbnQtPmlzQXR0cmlidXRlKCkpKTsKLSAgICB9Ci0gICAgbV9s
aXN0LmNsZWFyKCk7CisgICAgbV90YWJsZS5jbGVhcigpOworICAgIG1fcmV2ZXJzZVRhYmxlLmNs
ZWFyKCk7CiB9CiAKLVY4RXZlbnRMaXN0ZW5lciogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZCh2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCBib29sIGlzSW5saW5lKQorVjhFdmVudExpc3Rl
bmVyKiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmpl
Y3QsIGJvb2wgaXNBdHRyaWJ1dGUpCiB7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUg
PSBvYmplY3QtPkdldEhpZGRlblZhbHVlKGdldEtleShpc0lubGluZSkpOwotICAgIGlmICh2YWx1
ZS5Jc0VtcHR5KCkpCisgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAg
aW50IGtleSA9IGdldEtleShvYmplY3QpOworCisgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+
KiB2ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOworICAgIGlmICghdmVjdG9yKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWOEV2ZW50TGlzdGVuZXIqPih2
ODo6RXh0ZXJuYWw6OlVud3JhcCh2YWx1ZSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZWN0b3ItPnNpemUoKTsgaSsrKSB7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVu
dCA9IHZlY3Rvci0+YXQoaSk7CisgICAgICAgIGlmIChpc0F0dHJpYnV0ZSA9PSBlbGVtZW50LT5p
c0F0dHJpYnV0ZSgpICYmIG9iamVjdCA9PSBlbGVtZW50LT5nZXRMaXN0ZW5lck9iamVjdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCShy
ZXZpc2lvbiA0MzEwMikKKysrIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMzYgKzMzLDYxIEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVyOwogCi0gICAgLy8gVGhpcyBpcyBh
IGNvbnRhaW5lciBmb3IgVjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCBhbHNvIGRvZXMgc29t
ZSBjYWNoaW5nIHRvIHNwZWVkIHVwIGZpbmRpbmcgZW50cmllcyBieSB2ODo6T2JqZWN0LgorICAg
IC8vIFRoaXMgaXMgYSBjb250YWluZXIgZm9yIFY4RXZlbnRMaXN0ZW5lciBvYmplY3RzIHRoYXQg
dXNlcyB0aGUgaWRlbnRpdHkgaGFzaCBvZiB0aGUgdjg6Ok9iamVjdCB0bworICAgIC8vIHNwZWVk
IHVwIGxvb2t1cHMKICAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0IHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4S2V5TmFtZUxlbmd0aCA9IDI1NDsKKyAg
ICAgICAgLy8gQmVjYXVzZSB2ODo6T2JqZWN0IGlkZW50aXR5IGhhc2hlcyBhcmUgbm90IGd1YXJh
bnRlZWQgdG8gYmUgdW5pcXVlLCB3ZSB1bmZvcnR1bmF0ZWx5IGNhbid0IGp1c3QgbWFwCisgICAg
ICAgIC8vIGFuIGludCB0byBWOEV2ZW50TGlzdGVuZXIuIEluc3RlYWQgd2UgZGVmaW5lIGEgSGFz
aE1hcCBvZiBpbnQgdG8gVmVjdG9yIG9mIFY4RXZlbnRMaXN0ZW5lcgorICAgICAgICAvLyBjYWxs
ZWQgYSBMaXN0ZW5lck11bHRpTWFwLgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxWOEV2ZW50TGlz
dGVuZXIqPiogVmFsdWVzOworICAgICAgICBzdHJ1Y3QgVmFsdWVzVHJhaXRzIDogSGFzaFRyYWl0
czxWYWx1ZXM+IHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOworICAgICAgICB9OworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWYWx1
ZXMsIERlZmF1bHRIYXNoPGludD46Okhhc2gsIEhhc2hUcmFpdHM8aW50PiwgVmFsdWVzVHJhaXRz
PiBMaXN0ZW5lck11bHRpTWFwOwogCi0gICAgICAgIC8vIFRoZSBuYW1lIHNob3VsZCBiZSBkaXN0
aW5jdCBmcm9tIGFueSBvdGhlciBWOEV2ZW50TGlzdGVuZXJMaXN0IHdpdGhpbiB0aGUgc2FtZSBw
cm9jZXNzLCBhbmQgPD0gbWF4S2V5TmFtZUxlbmd0aCBjaGFyYWN0ZXJzLgotICAgICAgICBleHBs
aWNpdCBWOEV2ZW50TGlzdGVuZXJMaXN0KGNvbnN0IGNoYXIqIG5hbWUpOworICAgICAgICBWOEV2
ZW50TGlzdGVuZXJMaXN0KCk7CiAgICAgICAgIH5WOEV2ZW50TGlzdGVuZXJMaXN0KCk7CiAKLSAg
ICAgICAgdHlwZWRlZiBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj46Oml0ZXJhdG9yIGl0ZXJhdG9y
OwotICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBiZWdpbigpOworICAgICAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGV4cGxpY2l0
IGl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqKTsKKyAgICAgICAgICAgIGl0ZXJhdG9yKFY4
RXZlbnRMaXN0ZW5lckxpc3QqLCBib29sIHNob3VsZFNlZWtUb0VuZCk7CisgICAgICAgICAgICB+
aXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IrKygpOworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJik7CisgICAgICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImKTsKKyAgICAgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogb3Bl
cmF0b3IqKCk7CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHZvaWQgc2Vla1RvRW5k
KCk7CisKKyAgICAgICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIG1fbGlzdDsKKyAgICAgICAg
ICAgIExpc3RlbmVyTXVsdGlNYXA6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgICAgIHNpemVf
dCBtX3ZlY3RvckluZGV4OworICAgICAgICB9OworICAgICAgICBmcmllbmQgY2xhc3MgaXRlcmF0
b3I7CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKTsKICAgICAgICAgaXRlcmF0b3IgZW5kKCk7
CiAKLSAgICAgICAgLy8gSW4gYWRkaXRpb24gdG8gYWRkaW5nIHRoZSBsaXN0ZW5lciB0byB0aGlz
IGxpc3QsIHRoaXMgYWxzbyBjYWNoZXMgdGhlIFY4RXZlbnRMaXN0ZW5lciBhcyBhIGhpZGRlbiBw
cm9wZXJ0eSBvbiBpdHMgd3JhcHBlZAotICAgICAgICAvLyB2OCBsaXN0ZW5lciBvYmplY3QsIHNv
IHdlIGNhbiBxdWlja2x5IGxvb2sgaXQgdXAgbGF0ZXIuCiAgICAgICAgIHZvaWQgYWRkKFY4RXZl
bnRMaXN0ZW5lciopOwogICAgICAgICB2b2lkIHJlbW92ZShWOEV2ZW50TGlzdGVuZXIqKTsKLSAg
ICAgICAgVjhFdmVudExpc3RlbmVyKiBmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiwgYm9vbCBp
c0lubGluZSk7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZmluZCh2ODo6TG9jYWw8djg6Ok9i
amVjdD4sIGJvb2wgaXNBdHRyaWJ1dGUpOwogICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAg
IHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgICAgICBzaXplX3Qg
c2l6ZSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGdldEtleShib29sIGlzSW5saW5lKTsKLSAgICAgICAg
djg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gbV9pbmxpbmVLZXk7Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpTdHJpbmc+IG1fbm9uSW5saW5lS2V5OwotICAgICAgICBWZWN0b3I8VjhFdmVu
dExpc3RlbmVyKj4gbV9saXN0OworICAgICAgICBMaXN0ZW5lck11bHRpTWFwIG1fdGFibGU7CisK
KyAgICAgICAgLy8gd2UgYWxzbyBrZWVwIGEgcmV2ZXJzZSBtYXBwaW5nIG9mIFY4RXZlbnRMaXN0
ZW5lciB0byB2ODo6T2JqZWN0IGlkZW50aXR5IGhhc2gsCisgICAgICAgIC8vIGluIG9yZGVyIHRv
IHNwZWVkIHVwIHJlbW92YWwgYnkgVjhFdmVudExpc3RlbmVyCisgICAgICAgIEhhc2hNYXA8VjhF
dmVudExpc3RlbmVyKiwgaW50PiBtX3JldmVyc2VUYWJsZTsKICAgICB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5jcHAJKHJldmlzaW9uIDQzMTAyKQorKysgYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQg
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q28KICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGdsb2JhbE9iamVjdCA9IG1fY29udGV4dC0+R2xvYmFsKCk7CiAgICAgZ2xvYmFsT2Jq
ZWN0LT5TZXQoaW1wbGljaXRQcm90b1N0cmluZywganNXb3JrZXJDb250ZXh0KTsKIAotICAgIG1f
bGlzdGVuZXJzLnNldChuZXcgVjhFdmVudExpc3RlbmVyTGlzdCgibV9saXN0ZW5lcnMiKSk7Cisg
ICAgbV9saXN0ZW5lcnMuc2V0KG5ldyBWOEV2ZW50TGlzdGVuZXJMaXN0KCkpOwogfQogCiB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkdldENvbnN0
cnVjdG9yKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29950</attachid>
            <date>2009-05-01 15:45:43 -0700</date>
            <delta_ts>2009-05-01 18:46:21 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>patch_v3.txt</filename>
            <type>text/plain</type>
            <size>12753</size>
            <attacher name="Antony Sargent">asargent</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMTIx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDUt
MDEgIEFudG9ueSBTYXJnZW50ICA8YXNhcmdlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBWOEV2ZW50TGlzdGVu
ZXJMaXN0ZSB0byBhIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXZvaWRzIHNvbWUgdHJpY2t5IGlzc3VlcyB3aXRoIGV2ZW50IGxpc3RlbmVyIHJlbW92
YWwgaW4gdGhlIAorICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBoYXMgc2xpZ2h0
bHkgYmV0dGVyIHBlcmZvcm1hbmNlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTQ5NgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNv
IG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxp
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpW
OEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yOjp+VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6b3BlcmF0b3IrKyk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6b3Bl
cmF0b3IqKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6
c2Vla1RvRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OlY4RXZl
bnRMaXN0ZW5lckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6
flY4RXZlbnRMaXN0ZW5lckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVy
TGlzdDo6YmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlzdDo6ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEtleSk6CisgICAgICAgIChXZWJDb3JlOjpWOEV2ZW50
TGlzdGVuZXJMaXN0OjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVudExpc3RlbmVyTGlz
dDo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmQpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4RXZlbnRMaXN0ZW5lckxpc3Q6OnNpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRDb250ZXh0SWZOZWVkZWQpOgorCiAyMDA5LTA1LTAxICBE
aW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAko
cmV2aXNpb24gNDMxMjEpCisrKyBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOTMgKzM1LDE0OSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVY4RXZlbnRMaXN0ZW5lckxpc3Q6OlY4RXZlbnRMaXN0ZW5lckxpc3QoY29uc3QgY2hhciog
bmFtZSkKK1Y4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjo6VjhFdmVudExpc3RlbmVyTGlzdEl0
ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxpc3QpCisgICAgOiBtX2xpc3QobGlzdCkKKyAg
ICAsIG1fdmVjdG9ySW5kZXgoMCkKKyAgICAsIG1faXRlcihsaXN0LT5tX3RhYmxlLmJlZ2luKCkp
CiB7Ci0gICAgQVNTRVJUKHN0cmxlbihuYW1lKSA8PSBtYXhLZXlOYW1lTGVuZ3RoKTsKLSAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Cit9CisKK1Y4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcjo6VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKFY4RXZlbnRMaXN0ZW5lckxpc3QqIGxp
c3QsIGJvb2wgc2hvdWxkU2Vla1RvRW5kKQorICAgIDogbV9saXN0KGxpc3QpCisgICAgLCBtX3Zl
Y3RvckluZGV4KDApCisgICAgLCBtX2l0ZXIobGlzdC0+bV90YWJsZS5iZWdpbigpKQoreworICAg
IGlmIChzaG91bGRTZWVrVG9FbmQpCisgICAgICAgIHNlZWtUb0VuZCgpOworfQorCitWOEV2ZW50
TGlzdGVuZXJMaXN0SXRlcmF0b3I6On5WOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IoKSB7IH0K
Kwordm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yKysoKQoreworICAg
IGlmIChtX2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxW
OEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmICht
X3ZlY3RvckluZGV4ICsgMSA8IHZlY3Rvci0+c2l6ZSgpKSB7CisgICAgICAgICAgICBtX3ZlY3Rv
ckluZGV4Kys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV92ZWN0
b3JJbmRleCA9IDA7CisgICAgICAgICsrbV9pdGVyOworICAgIH0KK30KKworYm9vbCBWOEV2ZW50
TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlz
dEl0ZXJhdG9yJiBvdGhlcikKK3sKKyAgICByZXR1cm4gb3RoZXIubV9pdGVyID09IG1faXRlciAm
JiBvdGhlci5tX3ZlY3RvckluZGV4ID09IG1fdmVjdG9ySW5kZXggJiYgb3RoZXIubV9saXN0ID09
IG1fbGlzdDsKK30KKworYm9vbCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6Om9wZXJhdG9y
IT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJiBvdGhlcikKK3sKKyAgICByZXR1
cm4gIW9wZXJhdG9yPT0ob3RoZXIpOworfQogCi0gICAgLy8gV3JpdGUgdGhlIG5hbWUgaW50byBh
IHRlbXBvcmFyeSBidWZmZXIsIGxlYXZpbmcgMSBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nCi0gICAg
Ly8gZm9yIGEgcHJlZml4IHdlJ2xsIHZhcnkgYmV0d2VlbiB0aGUgaW5saW5lIGFuZCBub24taW5s
aW5lIGtleXMuCi0gICAgY2hhciBrZXlCdWZmZXJbbWF4S2V5TmFtZUxlbmd0aCArIDJdID0geyAw
IH07Ci0gICAgc3RybmNweShrZXlCdWZmZXIgKyAxLCBuYW1lLCBtYXhLZXlOYW1lTGVuZ3RoKTsK
LSAgICBrZXlCdWZmZXJbMF0gPSAnMSc7Ci0gICAgbV9pbmxpbmVLZXkgPSB2ODo6UGVyc2lzdGVu
dDx2ODo6U3RyaW5nPjo6TmV3KHY4OjpTdHJpbmc6Ok5ldyhrZXlCdWZmZXIpKTsKLSAgICBrZXlC
dWZmZXJbMF0gPSAnMic7Ci0gICAgbV9ub25JbmxpbmVLZXkgPSB2ODo6UGVyc2lzdGVudDx2ODo6
U3RyaW5nPjo6TmV3KHY4OjpTdHJpbmc6Ok5ldyhrZXlCdWZmZXIpKTsKK1Y4RXZlbnRMaXN0ZW5l
ciogVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpvcGVyYXRvciooKQoreworICAgIGlmICht
X2l0ZXIgIT0gbV9saXN0LT5tX3RhYmxlLmVuZCgpKSB7CisgICAgICAgIFZlY3RvcjxWOEV2ZW50
TGlzdGVuZXIqPiogdmVjdG9yID0gbV9pdGVyLT5zZWNvbmQ7CisgICAgICAgIGlmIChtX3ZlY3Rv
ckluZGV4IDwgdmVjdG9yLT5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdmVjdG9yLT5hdCht
X3ZlY3RvckluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yOjpzZWVrVG9FbmQoKQoreworICAgIG1faXRlciA9IG1fbGlzdC0+
bV90YWJsZS5lbmQoKTsKKyAgICBtX3ZlY3RvckluZGV4ID0gMDsKK30KKworCitWOEV2ZW50TGlz
dGVuZXJMaXN0OjpWOEV2ZW50TGlzdGVuZXJMaXN0KCkKK3sKIH0KIAogVjhFdmVudExpc3RlbmVy
TGlzdDo6flY4RXZlbnRMaXN0ZW5lckxpc3QoKQogewotICAgIG1faW5saW5lS2V5LkRpc3Bvc2Uo
KTsKLSAgICBtX25vbklubGluZUtleS5EaXNwb3NlKCk7CiB9CiAKLVY4RXZlbnRMaXN0ZW5lckxp
c3Q6Oml0ZXJhdG9yIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmJlZ2luKCkKK1Y4RXZlbnRMaXN0ZW5l
ckxpc3RJdGVyYXRvciBWOEV2ZW50TGlzdGVuZXJMaXN0OjpiZWdpbigpCiB7Ci0gICAgcmV0dXJu
IG1fbGlzdC5iZWdpbigpOworICAgIHJldHVybiBpdGVyYXRvcih0aGlzKTsKIH0KIAotVjhFdmVu
dExpc3RlbmVyTGlzdDo6aXRlcmF0b3IgVjhFdmVudExpc3RlbmVyTGlzdDo6ZW5kKCkKK1Y4RXZl
bnRMaXN0ZW5lckxpc3RJdGVyYXRvciBWOEV2ZW50TGlzdGVuZXJMaXN0OjplbmQoKQogewotICAg
IHJldHVybiBtX2xpc3QuZW5kKCk7CisgICAgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHRydWUpOwog
fQogCi12ODo6SGFuZGxlPHY4OjpTdHJpbmc+IFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmdldEtleShi
b29sIGlzSW5saW5lKQorCitpbnQgZ2V0S2V5KHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3Qp
CiB7Ci0gICAgcmV0dXJuIGlzSW5saW5lID8gbV9pbmxpbmVLZXkgOiBtX25vbklubGluZUtleTsK
KyAgICAvLyAwIGlzIGEgc2VudGluZWwgdmFsdWUgZm9yIHRoZSBIYXNoTWFwIGtleSwgc28gd2Ug
bWFwIGl0IHRvIDEuCisgICAgaW50IGhhc2ggPSBvYmplY3QtPkdldElkZW50aXR5SGFzaCgpOwor
ICAgIGlmICghaGFzaCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIGhhc2g7CiB9CiAK
LS8vIFNlZSBjb21tZW50IGluIC5oIGZpbGUgZm9yIHRoaXMgZnVuY3Rpb24sIGFuZCB1cGRhdGUg
YWNjb3JkaW5nbHkgaWYgaW1wbGVtZW50YXRpb24gZGV0YWlscyBjaGFuZ2UgaGVyZS4KIHZvaWQg
VjhFdmVudExpc3RlbmVyTGlzdDo6YWRkKFY4RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAg
ICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAgbV9saXN0LmFwcGVuZChs
aXN0ZW5lcik7Ci0KICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisKICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7
Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSB2ODo6RXh0ZXJuYWw6OldyYXAobGlz
dGVuZXIpOwotICAgIG9iamVjdC0+U2V0SGlkZGVuVmFsdWUoZ2V0S2V5KGxpc3RlbmVyLT5pc0F0
dHJpYnV0ZSgpKSwgdmFsdWUpOworICAgIGludCBrZXkgPSBnZXRLZXkob2JqZWN0KTsKKyAgICBW
ZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3RvciA9IG1fdGFibGUuZ2V0KGtleSk7CisgICAg
aWYgKCF2ZWN0b3IpIHsKKyAgICAgICAgdmVjdG9yID0gbmV3IFZlY3RvcjxWOEV2ZW50TGlzdGVu
ZXIqPigpOworICAgICAgICBtX3RhYmxlLnNldChrZXksIHZlY3Rvcik7CisgICAgfQorICAgIHZl
Y3Rvci0+YXBwZW5kKGxpc3RlbmVyKTsKKyAgICBtX3JldmVyc2VUYWJsZS5zZXQobGlzdGVuZXIs
IGtleSk7CiB9CiAKIHZvaWQgVjhFdmVudExpc3RlbmVyTGlzdDo6cmVtb3ZlKFY4RXZlbnRMaXN0
ZW5lciogbGlzdGVuZXIpCiB7Ci0gICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7
Ci0gICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIHY4OjpIYW5kbGU8djg6OlN0
cmluZz4ga2V5ID0gZ2V0S2V5KGxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fbGlzdC5zaXplKCk7IGkrKykgewotICAgICAgICBWOEV2ZW50TGlz
dGVuZXIqIGVsZW1lbnQgPSBtX2xpc3QuYXQoaSk7Ci0gICAgICAgIGlmIChlbGVtZW50LT5pc0F0
dHJpYnV0ZSgpID09IGxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpICYmIGVsZW1lbnQgPT0gbGlzdGVu
ZXIpIHsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSBsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLQotICAgICAgICAgICAgLy8gRklYTUUoYXNhcmdlbnQp
IHRoaXMgY2hlY2sgZm9yIGhpZGRlbiB2YWx1ZSBiZWluZyAhZW1wdHkgaXMgYSB3b3JrYXJvdW5k
IGZvcgotICAgICAgICAgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9k
ZXRhaWw/aWQ9MzAwCi0gICAgICAgICAgICAvLyBPbmNlIHRoZSBmaXggZm9yIHRoYXQgaXMgcHVs
bGVkIGludG8gY2hyb21pdW0gd2UgY2FuIHJlbW92ZSB0aGUgY2hlY2sgaGVyZS4KLSAgICAgICAg
ICAgIGlmICghb2JqZWN0LT5HZXRIaWRkZW5WYWx1ZShrZXkpLklzRW1wdHkoKSkKLSAgICAgICAg
ICAgICAgICBvYmplY3QtPkRlbGV0ZUhpZGRlblZhbHVlKGdldEtleShsaXN0ZW5lci0+aXNBdHRy
aWJ1dGUoKSkpOwotICAgICAgICAgICAgbV9saXN0LnJlbW92ZShpKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX3JldmVyc2VUYWJsZS5jb250YWlucyhsaXN0ZW5lcikpIHsKKyAgICAg
ICAgaW50IGtleSA9IG1fcmV2ZXJzZVRhYmxlLmdldChsaXN0ZW5lcik7CisgICAgICAgIFZlY3Rv
cjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKKyAgICAgICAg
aWYgKCF2ZWN0b3IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgdmVjdG9yLT5zaXplKCk7IGorKykgeworICAgICAgICAgICAgaWYgKHZlY3Rvci0+
YXQoaikgPT0gbGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICB2ZWN0b3ItPnJlbW92ZShqKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXZlY3Rvci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBtX3RhYmxlLnJlbW92ZShrZXkpOworCisgICAgICAgICAgICAgICAgbV9yZXZlcnNlVGFibGUu
cmVtb3ZlKGxpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgVjhFdmVudExpc3RlbmVyTGlzdDo6Y2xlYXIo
KQogewotICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpOwotICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdC5z
aXplKCk7IGkrKykgewotICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIGVsZW1lbnQgPSBtX2xpc3Qu
YXQoaSk7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSBlbGVtZW50LT5n
ZXRMaXN0ZW5lck9iamVjdCgpOwotICAgICAgICBvYmplY3QtPkRlbGV0ZUhpZGRlblZhbHVlKGdl
dEtleShlbGVtZW50LT5pc0F0dHJpYnV0ZSgpKSk7Ci0gICAgfQotICAgIG1fbGlzdC5jbGVhcigp
OworICAgIG1fdGFibGUuY2xlYXIoKTsKKyAgICBtX3JldmVyc2VUYWJsZS5jbGVhcigpOwogfQog
Ci1WOEV2ZW50TGlzdGVuZXIqIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmZpbmQodjg6OkxvY2FsPHY4
OjpPYmplY3Q+IG9iamVjdCwgYm9vbCBpc0lubGluZSkKK1Y4RXZlbnRMaXN0ZW5lciogVjhFdmVu
dExpc3RlbmVyTGlzdDo6ZmluZCh2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0LCBib29sIGlz
QXR0cmlidXRlKQogewotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gb2JqZWN0LT5H
ZXRIaWRkZW5WYWx1ZShnZXRLZXkoaXNJbmxpbmUpKTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgp
KQorICAgIEFTU0VSVCh2ODo6Q29udGV4dDo6SW5Db250ZXh0KCkpOworICAgIGludCBrZXkgPSBn
ZXRLZXkob2JqZWN0KTsKKworICAgIFZlY3RvcjxWOEV2ZW50TGlzdGVuZXIqPiogdmVjdG9yID0g
bV90YWJsZS5nZXQoa2V5KTsKKyAgICBpZiAoIXZlY3RvcikKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VjhFdmVudExpc3RlbmVyKj4odjg6OkV4dGVybmFs
OjpVbndyYXAodmFsdWUpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLT5z
aXplKCk7IGkrKykgeworICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIGVsZW1lbnQgPSB2ZWN0b3It
PmF0KGkpOworICAgICAgICBpZiAoaXNBdHRyaWJ1dGUgPT0gZWxlbWVudC0+aXNBdHRyaWJ1dGUo
KSAmJiBvYmplY3QgPT0gZWxlbWVudC0+Z2V0TGlzdGVuZXJPYmplY3QoKSkKKyAgICAgICAgICAg
IHJldHVybiBlbGVtZW50OworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaAkocmV2aXNpb24gNDMx
MjEpCisrKyBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDM2ICszMyw2NCBAQAogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0
SXRlcmF0b3I7CiAKLSAgICAvLyBUaGlzIGlzIGEgY29udGFpbmVyIGZvciBWOEV2ZW50TGlzdGVu
ZXIgb2JqZWN0cyB0aGF0IGFsc28gZG9lcyBzb21lIGNhY2hpbmcgdG8gc3BlZWQgdXAgZmluZGlu
ZyBlbnRyaWVzIGJ5IHY4OjpPYmplY3QuCisgICAgLy8gVGhpcyBpcyBhIGNvbnRhaW5lciBmb3Ig
VjhFdmVudExpc3RlbmVyIG9iamVjdHMgdGhhdCB1c2VzIHRoZSBpZGVudGl0eSBoYXNoIG9mIHRo
ZSB2ODo6T2JqZWN0IHRvCisgICAgLy8gc3BlZWQgdXAgbG9va3VwcwogICAgIGNsYXNzIFY4RXZl
bnRMaXN0ZW5lckxpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhLZXlOYW1lTGVuZ3RoID0gMjU0OworICAgICAgICAvLyBCZWNhdXNlIHY4OjpPYmplY3Qg
aWRlbnRpdHkgaGFzaGVzIGFyZSBub3QgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUsIHdlIHVuZm9y
dHVuYXRlbHkgY2FuJ3QganVzdCBtYXAKKyAgICAgICAgLy8gYW4gaW50IHRvIFY4RXZlbnRMaXN0
ZW5lci4gSW5zdGVhZCB3ZSBkZWZpbmUgYSBIYXNoTWFwIG9mIGludCB0byBWZWN0b3Igb2YgVjhF
dmVudExpc3RlbmVyCisgICAgICAgIC8vIGNhbGxlZCBhIExpc3RlbmVyTXVsdGlNYXAuCisgICAg
ICAgIHR5cGVkZWYgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiBWYWx1ZXM7CisgICAgICAgIHN0
cnVjdCBWYWx1ZXNUcmFpdHMgOiBIYXNoVHJhaXRzPFZhbHVlcz4geworICAgICAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgICAgIH07CisgICAg
ICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFZhbHVlcywgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwg
SGFzaFRyYWl0czxpbnQ+LCBWYWx1ZXNUcmFpdHM+IExpc3RlbmVyTXVsdGlNYXA7CiAKLSAgICAg
ICAgLy8gVGhlIG5hbWUgc2hvdWxkIGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIFY4RXZlbnRM
aXN0ZW5lckxpc3Qgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MsIGFuZCA8PSBtYXhLZXlOYW1lTGVu
Z3RoIGNoYXJhY3RlcnMuCi0gICAgICAgIGV4cGxpY2l0IFY4RXZlbnRMaXN0ZW5lckxpc3QoY29u
c3QgY2hhciogbmFtZSk7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QoKTsKICAgICAgICAg
flY4RXZlbnRMaXN0ZW5lckxpc3QoKTsKIAotICAgICAgICB0eXBlZGVmIFZlY3RvcjxWOEV2ZW50
TGlzdGVuZXIqPjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lckxp
c3Q6Oml0ZXJhdG9yIGJlZ2luKCk7CisgICAgICAgIGZyaWVuZCBjbGFzcyBWOEV2ZW50TGlzdGVu
ZXJMaXN0SXRlcmF0b3I7CisgICAgICAgIHR5cGVkZWYgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJh
dG9yIGl0ZXJhdG9yOyAgICAgICAgCisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKTsKICAgICAg
ICAgaXRlcmF0b3IgZW5kKCk7CiAKLSAgICAgICAgLy8gSW4gYWRkaXRpb24gdG8gYWRkaW5nIHRo
ZSBsaXN0ZW5lciB0byB0aGlzIGxpc3QsIHRoaXMgYWxzbyBjYWNoZXMgdGhlIFY4RXZlbnRMaXN0
ZW5lciBhcyBhIGhpZGRlbiBwcm9wZXJ0eSBvbiBpdHMgd3JhcHBlZAotICAgICAgICAvLyB2OCBs
aXN0ZW5lciBvYmplY3QsIHNvIHdlIGNhbiBxdWlja2x5IGxvb2sgaXQgdXAgbGF0ZXIuCiAgICAg
ICAgIHZvaWQgYWRkKFY4RXZlbnRMaXN0ZW5lciopOwogICAgICAgICB2b2lkIHJlbW92ZShWOEV2
ZW50TGlzdGVuZXIqKTsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyKiBmaW5kKHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiwgYm9vbCBpc0lubGluZSk7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZmlu
ZCh2ODo6TG9jYWw8djg6Ok9iamVjdD4sIGJvb2wgaXNBdHRyaWJ1dGUpOwogICAgICAgICB2b2lk
IGNsZWFyKCk7Ci0gICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQorICAgICAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBMaXN0ZW5lck11bHRpTWFwIG1fdGFibGU7CiAKKyAgICAgICAg
Ly8gd2UgYWxzbyBrZWVwIGEgcmV2ZXJzZSBtYXBwaW5nIG9mIFY4RXZlbnRMaXN0ZW5lciB0byB2
ODo6T2JqZWN0IGlkZW50aXR5IGhhc2gsCisgICAgICAgIC8vIGluIG9yZGVyIHRvIHNwZWVkIHVw
IHJlbW92YWwgYnkgVjhFdmVudExpc3RlbmVyCisgICAgICAgIEhhc2hNYXA8VjhFdmVudExpc3Rl
bmVyKiwgaW50PiBtX3JldmVyc2VUYWJsZTsKKyAgICB9OworCisgICAgY2xhc3MgVjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIH5WOEV2ZW50TGlzdGVu
ZXJMaXN0SXRlcmF0b3IoKTsKKyAgICAgICAgdm9pZCBvcGVyYXRvcisrKCk7CisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3ImKTsKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciYpOwor
ICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIG9wZXJhdG9yKigpOwogICAgIHByaXZhdGU6Ci0gICAg
ICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gZ2V0S2V5KGJvb2wgaXNJbmxpbmUpOwotICAgICAg
ICB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiBtX2lubGluZUtleTsKLSAgICAgICAgdjg6OlBl
cnNpc3RlbnQ8djg6OlN0cmluZz4gbV9ub25JbmxpbmVLZXk7Ci0gICAgICAgIFZlY3RvcjxWOEV2
ZW50TGlzdGVuZXIqPiBtX2xpc3Q7CisgICAgICAgIGZyaWVuZCBjbGFzcyBWOEV2ZW50TGlzdGVu
ZXJMaXN0OworICAgICAgICBleHBsaWNpdCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IoVjhF
dmVudExpc3RlbmVyTGlzdCopOworICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3Io
VjhFdmVudExpc3RlbmVyTGlzdCosIGJvb2wgc2hvdWxkU2Vla1RvRW5kKTsKKyAgICAgICAgdm9p
ZCBzZWVrVG9FbmQoKTsKKworICAgICAgICBWOEV2ZW50TGlzdGVuZXJMaXN0KiBtX2xpc3Q7Cisg
ICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3Q6Okxpc3RlbmVyTXVsdGlNYXA6Oml0ZXJhdG9yIG1f
aXRlcjsKKyAgICAgICAgc2l6ZV90IG1fdmVjdG9ySW5kZXg7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwCShyZXZpc2lvbiA0MzEyMSkKKysrIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lk
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6aW5pdENvCiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnbG9iYWxPYmplY3QgPSBtX2NvbnRleHQtPkdsb2JhbCgpOwogICAgIGdsb2JhbE9i
amVjdC0+U2V0KGltcGxpY2l0UHJvdG9TdHJpbmcsIGpzV29ya2VyQ29udGV4dCk7CiAKLSAgICBt
X2xpc3RlbmVycy5zZXQobmV3IFY4RXZlbnRMaXN0ZW5lckxpc3QoIm1fbGlzdGVuZXJzIikpOwor
ICAgIG1fbGlzdGVuZXJzLnNldChuZXcgVjhFdmVudExpc3RlbmVyTGlzdCgpKTsKIH0KIAogdjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpHZXRDb25z
dHJ1Y3RvcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkK
</data>
<flag name="review"
          id="15010"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29995</attachid>
            <date>2009-05-04 13:48:18 -0700</date>
            <delta_ts>2009-05-04 13:48:18 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>patch_v4.txt</filename>
            <type>text/plain</type>
            <size>11888</size>
            <attacher name="Antony Sargent">asargent</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMTky
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDktMDUt
MDQgIEFudG9ueSBTYXJnZW50ICA8YXNhcmdlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBWOEV2ZW50TGlzdGVu
ZXJMaXN0ZSB0byBhIGhhc2h0YWJsZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXZvaWRzIHNvbWUgdHJpY2t5IGlzc3VlcyB3aXRoIGV2ZW50IGxpc3RlbmVyIHJlbW92
YWwgaW4gdGhlIAorICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIGFuZCBoYXMgc2xpZ2h0
bHkgYmV0dGVyIHBlcmZvcm1hbmNlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yNTQ5NgorCisgICAgICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNv
IG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxp
c3QuY3BwOiBBZGRlZCBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IuCisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VjhFdmVu
dExpc3RlbmVyTGlzdDo6c2l6ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCk6CisKIDIwMDktMDUtMDQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpJbmRleDogYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAJKHJldmlzaW9uIDQzMTkyKQor
KysgYmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDkzICszNSwxNDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1WOEV2ZW50TGlzdGVu
ZXJMaXN0OjpWOEV2ZW50TGlzdGVuZXJMaXN0KGNvbnN0IGNoYXIqIG5hbWUpCitWOEV2ZW50TGlz
dGVuZXJMaXN0SXRlcmF0b3I6OlY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlz
dGVuZXJMaXN0KiBsaXN0KQorICAgIDogbV9saXN0KGxpc3QpCisgICAgLCBtX3ZlY3RvckluZGV4
KDApCisgICAgLCBtX2l0ZXIobGlzdC0+bV90YWJsZS5iZWdpbigpKQogewotICAgIEFTU0VSVChz
dHJsZW4obmFtZSkgPD0gbWF4S2V5TmFtZUxlbmd0aCk7Ci0gICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOworfQorCitWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3I6OlY4RXZlbnRMaXN0
ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlzdGVuZXJMaXN0KiBsaXN0LCBib29sIHNob3VsZFNl
ZWtUb0VuZCkKKyAgICA6IG1fbGlzdChsaXN0KQorICAgICwgbV92ZWN0b3JJbmRleCgwKQorICAg
ICwgbV9pdGVyKGxpc3QtPm1fdGFibGUuYmVnaW4oKSkKK3sKKyAgICBpZiAoc2hvdWxkU2Vla1Rv
RW5kKQorICAgICAgICBzZWVrVG9FbmQoKTsKK30KKworVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJh
dG9yOjp+VjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yKCkgeyB9CisKK3ZvaWQgVjhFdmVudExp
c3RlbmVyTGlzdEl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKK3sKKyAgICBpZiAobV9pdGVyICE9IG1f
bGlzdC0+bV90YWJsZS5lbmQoKSkgeworICAgICAgICBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4q
IHZlY3RvciA9IG1faXRlci0+c2Vjb25kOworICAgICAgICBpZiAobV92ZWN0b3JJbmRleCArIDEg
PCB2ZWN0b3ItPnNpemUoKSkgeworICAgICAgICAgICAgbV92ZWN0b3JJbmRleCsrOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fdmVjdG9ySW5kZXggPSAwOworICAg
ICAgICArK21faXRlcjsKKyAgICB9Cit9CisKK2Jvb2wgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJh
dG9yOjpvcGVyYXRvcj09KGNvbnN0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciYgb3RoZXIp
Cit7CisgICAgcmV0dXJuIG90aGVyLm1faXRlciA9PSBtX2l0ZXIgJiYgb3RoZXIubV92ZWN0b3JJ
bmRleCA9PSBtX3ZlY3RvckluZGV4ICYmIG90aGVyLm1fbGlzdCA9PSBtX2xpc3Q7Cit9CisKK2Jv
b2wgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IFY4RXZlbnRM
aXN0ZW5lckxpc3RJdGVyYXRvciYgb3RoZXIpCit7CisgICAgcmV0dXJuICFvcGVyYXRvcj09KG90
aGVyKTsKK30KIAotICAgIC8vIFdyaXRlIHRoZSBuYW1lIGludG8gYSB0ZW1wb3JhcnkgYnVmZmVy
LCBsZWF2aW5nIDEgc3BhY2UgYXQgdGhlIGJlZ2lubmluZwotICAgIC8vIGZvciBhIHByZWZpeCB3
ZSdsbCB2YXJ5IGJldHdlZW4gdGhlIGlubGluZSBhbmQgbm9uLWlubGluZSBrZXlzLgotICAgIGNo
YXIga2V5QnVmZmVyW21heEtleU5hbWVMZW5ndGggKyAyXSA9IHsgMCB9OwotICAgIHN0cm5jcHko
a2V5QnVmZmVyICsgMSwgbmFtZSwgbWF4S2V5TmFtZUxlbmd0aCk7Ci0gICAga2V5QnVmZmVyWzBd
ID0gJzEnOwotICAgIG1faW5saW5lS2V5ID0gdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz46Ok5l
dyh2ODo6U3RyaW5nOjpOZXcoa2V5QnVmZmVyKSk7Ci0gICAga2V5QnVmZmVyWzBdID0gJzInOwot
ICAgIG1fbm9uSW5saW5lS2V5ID0gdjg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz46Ok5ldyh2ODo6
U3RyaW5nOjpOZXcoa2V5QnVmZmVyKSk7CitWOEV2ZW50TGlzdGVuZXIqIFY4RXZlbnRMaXN0ZW5l
ckxpc3RJdGVyYXRvcjo6b3BlcmF0b3IqKCkKK3sKKyAgICBpZiAobV9pdGVyICE9IG1fbGlzdC0+
bV90YWJsZS5lbmQoKSkgeworICAgICAgICBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIHZlY3Rv
ciA9IG1faXRlci0+c2Vjb25kOworICAgICAgICBpZiAobV92ZWN0b3JJbmRleCA8IHZlY3Rvci0+
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHZlY3Rvci0+YXQobV92ZWN0b3JJbmRleCk7Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRv
cjo6c2Vla1RvRW5kKCkKK3sKKyAgICBtX2l0ZXIgPSBtX2xpc3QtPm1fdGFibGUuZW5kKCk7Cisg
ICAgbV92ZWN0b3JJbmRleCA9IDA7Cit9CisKKworVjhFdmVudExpc3RlbmVyTGlzdDo6VjhFdmVu
dExpc3RlbmVyTGlzdCgpCit7CiB9CiAKIFY4RXZlbnRMaXN0ZW5lckxpc3Q6On5WOEV2ZW50TGlz
dGVuZXJMaXN0KCkKIHsKLSAgICBtX2lubGluZUtleS5EaXNwb3NlKCk7Ci0gICAgbV9ub25Jbmxp
bmVLZXkuRGlzcG9zZSgpOwogfQogCi1WOEV2ZW50TGlzdGVuZXJMaXN0OjppdGVyYXRvciBWOEV2
ZW50TGlzdGVuZXJMaXN0OjpiZWdpbigpCitWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IgVjhF
dmVudExpc3RlbmVyTGlzdDo6YmVnaW4oKQogewotICAgIHJldHVybiBtX2xpc3QuYmVnaW4oKTsK
KyAgICByZXR1cm4gaXRlcmF0b3IodGhpcyk7CiB9CiAKLVY4RXZlbnRMaXN0ZW5lckxpc3Q6Oml0
ZXJhdG9yIFY4RXZlbnRMaXN0ZW5lckxpc3Q6OmVuZCgpCitWOEV2ZW50TGlzdGVuZXJMaXN0SXRl
cmF0b3IgVjhFdmVudExpc3RlbmVyTGlzdDo6ZW5kKCkKIHsKLSAgICByZXR1cm4gbV9saXN0LmVu
ZCgpOworICAgIHJldHVybiBpdGVyYXRvcih0aGlzLCB0cnVlKTsKIH0KIAotdjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiBWOEV2ZW50TGlzdGVuZXJMaXN0OjpnZXRLZXkoYm9vbCBpc0lubGluZSkKKwor
c3RhdGljIGludCBnZXRLZXkodjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsKLSAgICBy
ZXR1cm4gaXNJbmxpbmUgPyBtX2lubGluZUtleSA6IG1fbm9uSW5saW5lS2V5OworICAgIC8vIDAg
aXMgYSBzZW50aW5lbCB2YWx1ZSBmb3IgdGhlIEhhc2hNYXAga2V5LCBzbyB3ZSBtYXAgaXQgdG8g
MS4KKyAgICBpbnQgaGFzaCA9IG9iamVjdC0+R2V0SWRlbnRpdHlIYXNoKCk7CisgICAgaWYgKCFo
YXNoKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gaGFzaDsKIH0KIAotLy8gU2VlIGNv
bW1lbnQgaW4gLmggZmlsZSBmb3IgdGhpcyBmdW5jdGlvbiwgYW5kIHVwZGF0ZSBhY2NvcmRpbmds
eSBpZiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGNoYW5nZSBoZXJlLgogdm9pZCBWOEV2ZW50TGlz
dGVuZXJMaXN0OjphZGQoVjhFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICBBU1NFUlQo
djg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKLSAgICBtX2xpc3QuYXBwZW5kKGxpc3RlbmVyKTsK
LQogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKwogICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBvYmplY3QgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKLSAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IHY4OjpFeHRlcm5hbDo6V3JhcChsaXN0ZW5lcik7Ci0g
ICAgb2JqZWN0LT5TZXRIaWRkZW5WYWx1ZShnZXRLZXkobGlzdGVuZXItPmlzQXR0cmlidXRlKCkp
LCB2YWx1ZSk7CisgICAgaW50IGtleSA9IGdldEtleShvYmplY3QpOworICAgIFZlY3RvcjxWOEV2
ZW50TGlzdGVuZXIqPiogdmVjdG9yID0gbV90YWJsZS5nZXQoa2V5KTsKKyAgICBpZiAoIXZlY3Rv
cikgeworICAgICAgICB2ZWN0b3IgPSBuZXcgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KCk7Cisg
ICAgICAgIG1fdGFibGUuc2V0KGtleSwgdmVjdG9yKTsKKyAgICB9CisgICAgdmVjdG9yLT5hcHBl
bmQobGlzdGVuZXIpOworICAgIG1fcmV2ZXJzZVRhYmxlLnNldChsaXN0ZW5lciwga2V5KTsKIH0K
IAogdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpyZW1vdmUoVjhFdmVudExpc3RlbmVyKiBsaXN0
ZW5lcikKIHsKLSAgICBBU1NFUlQodjg6OkNvbnRleHQ6OkluQ29udGV4dCgpKTsKLSAgICB2ODo6
SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkhhbmRsZTx2ODo6U3RyaW5nPiBrZXkg
PSBnZXRLZXkobGlzdGVuZXItPmlzQXR0cmlidXRlKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9saXN0LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxl
bWVudCA9IG1fbGlzdC5hdChpKTsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzQXR0cmlidXRlKCkg
PT0gbGlzdGVuZXItPmlzQXR0cmlidXRlKCkgJiYgZWxlbWVudCA9PSBsaXN0ZW5lcikgewotICAg
ICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGxpc3RlbmVyLT5nZXRMaXN0
ZW5lck9iamVjdCgpOwotCi0gICAgICAgICAgICAvLyBGSVhNRShhc2FyZ2VudCkgdGhpcyBjaGVj
ayBmb3IgaGlkZGVuIHZhbHVlIGJlaW5nICFlbXB0eSBpcyBhIHdvcmthcm91bmQgZm9yCi0gICAg
ICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0z
MDAKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIGZpeCBmb3IgdGhhdCBpcyBwdWxsZWQgaW50byBj
aHJvbWl1bSB3ZSBjYW4gcmVtb3ZlIHRoZSBjaGVjayBoZXJlLgotICAgICAgICAgICAgaWYgKCFv
YmplY3QtPkdldEhpZGRlblZhbHVlKGtleSkuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG9i
amVjdC0+RGVsZXRlSGlkZGVuVmFsdWUoZ2V0S2V5KGxpc3RlbmVyLT5pc0F0dHJpYnV0ZSgpKSk7
Ci0gICAgICAgICAgICBtX2xpc3QucmVtb3ZlKGkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
aWYgKG1fcmV2ZXJzZVRhYmxlLmNvbnRhaW5zKGxpc3RlbmVyKSkgeworICAgICAgICBpbnQga2V5
ID0gbV9yZXZlcnNlVGFibGUuZ2V0KGxpc3RlbmVyKTsKKyAgICAgICAgVmVjdG9yPFY4RXZlbnRM
aXN0ZW5lcio+KiB2ZWN0b3IgPSBtX3RhYmxlLmdldChrZXkpOworICAgICAgICBpZiAoIXZlY3Rv
cikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2
ZWN0b3ItPnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICBpZiAodmVjdG9yLT5hdChqKSA9PSBs
aXN0ZW5lcikgeworICAgICAgICAgICAgICAgIHZlY3Rvci0+cmVtb3ZlKGopOworICAgICAgICAg
ICAgICAgIGlmICghdmVjdG9yLT5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIG1fdGFibGUu
cmVtb3ZlKGtleSk7CisKKyAgICAgICAgICAgICAgICBtX3JldmVyc2VUYWJsZS5yZW1vdmUobGlz
dGVuZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIH0KIAogdm9pZCBWOEV2ZW50TGlzdGVuZXJMaXN0OjpjbGVhcigpCiB7Ci0gICAg
QVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7Ci0gICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0LnNpemUoKTsgaSsr
KSB7Ci0gICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVudCA9IG1fbGlzdC5hdChpKTsKLSAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IGVsZW1lbnQtPmdldExpc3RlbmVy
T2JqZWN0KCk7Ci0gICAgICAgIG9iamVjdC0+RGVsZXRlSGlkZGVuVmFsdWUoZ2V0S2V5KGVsZW1l
bnQtPmlzQXR0cmlidXRlKCkpKTsKLSAgICB9Ci0gICAgbV9saXN0LmNsZWFyKCk7CisgICAgbV90
YWJsZS5jbGVhcigpOworICAgIG1fcmV2ZXJzZVRhYmxlLmNsZWFyKCk7CiB9CiAKLVY4RXZlbnRM
aXN0ZW5lciogVjhFdmVudExpc3RlbmVyTGlzdDo6ZmluZCh2ODo6TG9jYWw8djg6Ok9iamVjdD4g
b2JqZWN0LCBib29sIGlzSW5saW5lKQorVjhFdmVudExpc3RlbmVyKiBWOEV2ZW50TGlzdGVuZXJM
aXN0OjpmaW5kKHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QsIGJvb2wgaXNBdHRyaWJ1dGUp
CiB7Ci0gICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUgPSBvYmplY3QtPkdldEhpZGRlblZh
bHVlKGdldEtleShpc0lubGluZSkpOwotICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkpCisgICAgQVNT
RVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CisgICAgaW50IGtleSA9IGdldEtleShvYmpl
Y3QpOworCisgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+KiB2ZWN0b3IgPSBtX3RhYmxlLmdl
dChrZXkpOworICAgIGlmICghdmVjdG9yKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxWOEV2ZW50TGlzdGVuZXIqPih2ODo6RXh0ZXJuYWw6OlVud3JhcCh2
YWx1ZSkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3ItPnNpemUoKTsgaSsr
KSB7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lciogZWxlbWVudCA9IHZlY3Rvci0+YXQoaSk7Cisg
ICAgICAgIGlmIChpc0F0dHJpYnV0ZSA9PSBlbGVtZW50LT5pc0F0dHJpYnV0ZSgpICYmIG9iamVj
dCA9PSBlbGVtZW50LT5nZXRMaXN0ZW5lck9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGVs
ZW1lbnQ7CisgICAgfQorICAgIHJldHVybiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBiaW5kaW5ncy92OC9WOEV2ZW50TGlzdGVuZXJMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
YmluZGluZ3MvdjgvVjhFdmVudExpc3RlbmVyTGlzdC5oCShyZXZpc2lvbiA0MzE5MikKKysrIGJp
bmRpbmdzL3Y4L1Y4RXZlbnRMaXN0ZW5lckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzYg
KzMzLDY0IEBACiAKICNpbmNsdWRlIDx2OC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
VjhFdmVudExpc3RlbmVyOworICAgIGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcjsK
IAotICAgIC8vIFRoaXMgaXMgYSBjb250YWluZXIgZm9yIFY4RXZlbnRMaXN0ZW5lciBvYmplY3Rz
IHRoYXQgYWxzbyBkb2VzIHNvbWUgY2FjaGluZyB0byBzcGVlZCB1cCBmaW5kaW5nIGVudHJpZXMg
Ynkgdjg6Ok9iamVjdC4KKyAgICAvLyBUaGlzIGlzIGEgY29udGFpbmVyIGZvciBWOEV2ZW50TGlz
dGVuZXIgb2JqZWN0cyB0aGF0IHVzZXMgdGhlIGlkZW50aXR5IGhhc2ggb2YgdGhlIHY4OjpPYmpl
Y3QgdG8KKyAgICAvLyBzcGVlZCB1cCBsb29rdXBzCiAgICAgY2xhc3MgVjhFdmVudExpc3RlbmVy
TGlzdCB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heEtleU5h
bWVMZW5ndGggPSAyNTQ7CisgICAgICAgIC8vIEJlY2F1c2Ugdjg6Ok9iamVjdCBpZGVudGl0eSBo
YXNoZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIHVuaXF1ZSwgd2UgdW5mb3J0dW5hdGVseSBj
YW4ndCBqdXN0IG1hcAorICAgICAgICAvLyBhbiBpbnQgdG8gVjhFdmVudExpc3RlbmVyLiBJbnN0
ZWFkIHdlIGRlZmluZSBhIEhhc2hNYXAgb2YgaW50IHRvIFZlY3RvciBvZiBWOEV2ZW50TGlzdGVu
ZXIKKyAgICAgICAgLy8gY2FsbGVkIGEgTGlzdGVuZXJNdWx0aU1hcC4KKyAgICAgICAgdHlwZWRl
ZiBWZWN0b3I8VjhFdmVudExpc3RlbmVyKj4qIFZhbHVlczsKKyAgICAgICAgc3RydWN0IFZhbHVl
c1RyYWl0cyA6IEhhc2hUcmFpdHM8VmFsdWVzPiB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPGludCwgVmFsdWVzLCBEZWZhdWx0SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRz
PGludD4sIFZhbHVlc1RyYWl0cz4gTGlzdGVuZXJNdWx0aU1hcDsKIAotICAgICAgICAvLyBUaGUg
bmFtZSBzaG91bGQgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgVjhFdmVudExpc3RlbmVyTGlz
dCB3aXRoaW4gdGhlIHNhbWUgcHJvY2VzcywgYW5kIDw9IG1heEtleU5hbWVMZW5ndGggY2hhcmFj
dGVycy4KLSAgICAgICAgZXhwbGljaXQgVjhFdmVudExpc3RlbmVyTGlzdChjb25zdCBjaGFyKiBu
YW1lKTsKKyAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdCgpOwogICAgICAgICB+VjhFdmVudExp
c3RlbmVyTGlzdCgpOwogCi0gICAgICAgIHR5cGVkZWYgVmVjdG9yPFY4RXZlbnRMaXN0ZW5lcio+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICAgICAgVjhFdmVudExpc3RlbmVyTGlzdDo6aXRlcmF0
b3IgYmVnaW4oKTsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcjsKKyAgICAgICAgdHlwZWRlZiBWOEV2ZW50TGlzdGVuZXJMaXN0SXRlcmF0b3IgaXRlcmF0
b3I7ICAgICAgICAKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpOwogICAgICAgICBpdGVyYXRv
ciBlbmQoKTsKIAotICAgICAgICAvLyBJbiBhZGRpdGlvbiB0byBhZGRpbmcgdGhlIGxpc3RlbmVy
IHRvIHRoaXMgbGlzdCwgdGhpcyBhbHNvIGNhY2hlcyB0aGUgVjhFdmVudExpc3RlbmVyIGFzIGEg
aGlkZGVuIHByb3BlcnR5IG9uIGl0cyB3cmFwcGVkCi0gICAgICAgIC8vIHY4IGxpc3RlbmVyIG9i
amVjdCwgc28gd2UgY2FuIHF1aWNrbHkgbG9vayBpdCB1cCBsYXRlci4KICAgICAgICAgdm9pZCBh
ZGQoVjhFdmVudExpc3RlbmVyKik7CiAgICAgICAgIHZvaWQgcmVtb3ZlKFY4RXZlbnRMaXN0ZW5l
ciopOwotICAgICAgICBWOEV2ZW50TGlzdGVuZXIqIGZpbmQodjg6OkxvY2FsPHY4OjpPYmplY3Q+
LCBib29sIGlzSW5saW5lKTsKKyAgICAgICAgVjhFdmVudExpc3RlbmVyKiBmaW5kKHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiwgYm9vbCBpc0F0dHJpYnV0ZSk7CiAgICAgICAgIHZvaWQgY2xlYXIoKTsK
LSAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgICAg
IHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV90YWJsZS5zaXplKCk7IH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIExpc3RlbmVyTXVsdGlNYXAgbV90YWJsZTsKIAorICAgICAgICAvLyB3ZSBhbHNv
IGtlZXAgYSByZXZlcnNlIG1hcHBpbmcgb2YgVjhFdmVudExpc3RlbmVyIHRvIHY4OjpPYmplY3Qg
aWRlbnRpdHkgaGFzaCwKKyAgICAgICAgLy8gaW4gb3JkZXIgdG8gc3BlZWQgdXAgcmVtb3ZhbCBi
eSBWOEV2ZW50TGlzdGVuZXIKKyAgICAgICAgSGFzaE1hcDxWOEV2ZW50TGlzdGVuZXIqLCBpbnQ+
IG1fcmV2ZXJzZVRhYmxlOworICAgIH07CisKKyAgICBjbGFzcyBWOEV2ZW50TGlzdGVuZXJMaXN0
SXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgflY4RXZlbnRMaXN0ZW5lckxpc3RJdGVy
YXRvcigpOworICAgICAgICB2b2lkIG9wZXJhdG9yKysoKTsKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvciYpOworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVjhFdmVudExpc3RlbmVyTGlzdEl0ZXJhdG9yJik7CisgICAgICAgIFY4
RXZlbnRMaXN0ZW5lciogb3BlcmF0b3IqKCk7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgdjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiBnZXRLZXkoYm9vbCBpc0lubGluZSk7Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpTdHJpbmc+IG1faW5saW5lS2V5OwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBtX25vbklubGluZUtleTsKLSAgICAgICAgVmVjdG9yPFY4RXZlbnRMaXN0ZW5l
cio+IG1fbGlzdDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0ZW5lckxpc3Q7Cisg
ICAgICAgIGV4cGxpY2l0IFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlzdGVu
ZXJMaXN0Kik7CisgICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3RJdGVyYXRvcihWOEV2ZW50TGlz
dGVuZXJMaXN0KiwgYm9vbCBzaG91bGRTZWVrVG9FbmQpOworICAgICAgICB2b2lkIHNlZWtUb0Vu
ZCgpOworCisgICAgICAgIFY4RXZlbnRMaXN0ZW5lckxpc3QqIG1fbGlzdDsKKyAgICAgICAgVjhF
dmVudExpc3RlbmVyTGlzdDo6TGlzdGVuZXJNdWx0aU1hcDo6aXRlcmF0b3IgbV9pdGVyOworICAg
ICAgICBzaXplX3QgbV92ZWN0b3JJbmRleDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJ
KHJldmlzaW9uIDQzMTkyKQorKysgYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q28KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGds
b2JhbE9iamVjdCA9IG1fY29udGV4dC0+R2xvYmFsKCk7CiAgICAgZ2xvYmFsT2JqZWN0LT5TZXQo
aW1wbGljaXRQcm90b1N0cmluZywganNXb3JrZXJDb250ZXh0KTsKIAotICAgIG1fbGlzdGVuZXJz
LnNldChuZXcgVjhFdmVudExpc3RlbmVyTGlzdCgibV9saXN0ZW5lcnMiKSk7CisgICAgbV9saXN0
ZW5lcnMuc2V0KG5ldyBWOEV2ZW50TGlzdGVuZXJMaXN0KCkpOwogfQogCiB2ODo6TG9jYWw8djg6
OkZ1bmN0aW9uPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkdldENvbnN0cnVjdG9yKFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>