<?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>64414</bug_id>
          
          <creation_ts>2011-07-12 17:32:36 -0700</creation_ts>
          <short_desc>CompositeEditCommand should not be kept alive for undo and redo</short_desc>
          <delta_ts>2011-12-10 17:10:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>64416</dependson>
    
    <dependson>73984</dependson>
          <blocked>74059</blocked>
    
    <blocked>74249</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>gregsimon</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>leviw</cc>
    
    <cc>sullivan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>436110</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-12 17:32:36 -0700</bug_when>
    <thetext>As discussed on webkit-dev, we should make CompositeEditCommand a temporary object that exits only to execute a command.  To reduce the memory footage and to support persistent positions, we should not keep it for undo and redo purposes.

We can instead generate a EditCommandComposition that outlives CompositeEditCommand to implement undo and redo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436762</commentid>
    <comment_count>1</comment_count>
      <attachid>100729</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-13 16:37:25 -0700</bug_when>
    <thetext>Created attachment 100729
outdated work in progress patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517259</commentid>
    <comment_count>2</comment_count>
      <attachid>118349</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 02:03:53 -0800</bug_when>
    <thetext>Created attachment 118349
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517265</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 02:07:39 -0800</bug_when>
    <thetext>My current plan:
1. Land this patch
2. Change the argument type of registerCommandForUndo, registerCommandForRedo, and clearUndoRedoOperations from EditCommand* to EditCommandComposition* (perhaps a better name like DOMTransaction).
3. Make CompositeEditCommand not inherit from EditCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517266</commentid>
    <comment_count>4</comment_count>
      <attachid>118352</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 02:11:39 -0800</bug_when>
    <thetext>Created attachment 118352
Updated for ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517462</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 09:10:43 -0800</bug_when>
    <thetext>Ping reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517508</commentid>
    <comment_count>6</comment_count>
      <attachid>118352</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-08 10:08:41 -0800</bug_when>
    <thetext>Comment on attachment 118352
Updated for ToT

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:138
&gt; +    RefPtr&lt;EditCommand&gt; command = prpCommand;

Why do you need this assignment? Do you need to keep a reference while executing the code below? Can apply() change something?

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:150
&gt; +    RefPtr&lt;CompositeEditCommand&gt; command = prpCommand;

Ditto. (Here I don&apos;t see the need for the reference at all).

&gt; Source/WebCore/editing/CompositeEditCommand.h:154
&gt; +{

Should we at least assert the command is not null?

&gt; Source/WebCore/editing/CompositeEditCommand.h:159
&gt; +inline CompositeEditCommand* toCompositeEditCommand(EditCommand* command)

Ditto.

&gt; Source/WebCore/editing/EditCommand.h:104
&gt; +{

I would add an ASSERT that command is not null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517541</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 10:43:36 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 118352 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118352&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:138
&gt; &gt; +    RefPtr&lt;EditCommand&gt; command = prpCommand;
&gt; 
&gt; Why do you need this assignment? Do you need to keep a reference while executing the code below? Can apply() change something?

prpCommand is a pass ref ptr so calling composition()-&gt;append or m_command.append will clear prpCommand :( I could call get() but that seemed ugly.

&gt; &gt; Source/WebCore/editing/CompositeEditCommand.cpp:150
&gt; &gt; +    RefPtr&lt;CompositeEditCommand&gt; command = prpCommand;
&gt; 
&gt; Ditto. (Here I don&apos;t see the need for the reference at all).

Ditto.

&gt; &gt; Source/WebCore/editing/CompositeEditCommand.h:154
&gt; &gt; +{
&gt; 
&gt; Should we at least assert the command is not null?
&gt;
&gt; &gt; Source/WebCore/editing/CompositeEditCommand.h:159
&gt; &gt; +inline CompositeEditCommand* toCompositeEditCommand(EditCommand* command)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/editing/EditCommand.h:104
&gt; &gt; +{
&gt; 
&gt; I would add an ASSERT that command is not null.

Sure. Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517568</commentid>
    <comment_count>8</comment_count>
      <attachid>118352</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2011-12-08 10:59:47 -0800</bug_when>
    <thetext>Comment on attachment 118352
Updated for ToT

thanks for the clarification. R=me with the additional ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517608</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-08 11:32:22 -0800</bug_when>
    <thetext>Committed r102357: &lt;http://trac.webkit.org/changeset/102357&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100729</attachid>
            <date>2011-07-13 16:37:25 -0700</date>
            <delta_ts>2011-12-08 02:03:46 -0800</delta_ts>
            <desc>outdated work in progress patch</desc>
            <filename>wip64414</filename>
            <type>text/plain</type>
            <size>6188</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA4OTYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw3IEBACiAKIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQp
CiAgICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCkKKyAgICAsIG1fY29tcG9zaXRpb24oRWRpdENv
bW1hbmRDb21wb3NpdGlvbjo6Y3JlYXRlKCkpCiB7CiB9CiAKQEAgLTc5LDE0ICs4MCwxNCBAQAog
ewogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkb1VuYXBwbHkoKQordm9pZCBFZGl0
Q29tbWFuZENvbXBvc2l0aW9uOjpkb1VuYXBwbHkoKQogewogICAgIHNpemVfdCBzaXplID0gbV9j
b21tYW5kcy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IHNpemU7IGkgIT0gMDsgLS1pKQog
ICAgICAgICBtX2NvbW1hbmRzW2kgLSAxXS0+dW5hcHBseSgpOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpkb1JlYXBwbHkoKQordm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpk
b1JlYXBwbHkoKQogewogICAgIHNpemVfdCBzaXplID0gbV9jb21tYW5kcy5zaXplKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgIT0gc2l6ZTsgKytpKQpAQCAtOTYsMTEgKzk3LDExIEBACiAv
LwogLy8gc3VnYXJ5LXN3ZWV0IGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBoZWxwIGNyZWF0ZSBh
bmQgYXBwbHkgZWRpdCBjb21tYW5kcyBpbiBjb21wb3NpdGUgY29tbWFuZHMKIC8vCi12b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVmUHRyPEVk
aXRDb21tYW5kPiBjbWQpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseUNvbW1hbmRU
b0NvbXBvc2l0ZShQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjb21tYW5kKQogewotICAgIGNtZC0+
c2V0UGFyZW50KHRoaXMpOwotICAgIGNtZC0+YXBwbHkoKTsKLSAgICBtX2NvbW1hbmRzLmFwcGVu
ZChjbWQpOworICAgIGNvbW1hbmQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBjb21tYW5kLT5hcHBs
eSgpOworICAgIG1fY29tcG9zaXRpb24tPmFwcGVuZChjb21tYW5kKTsKIH0KIAogdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CShyZXZpc2lvbiA4OTYwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU2LDYgKzE1NiwxOSBAQAogICAgICAgICBjLT5oYW5kbGVJbnB1
dE1ldGhvZEtleWRvd24oZXZlbnQpOwogfQogCitJbnNlcnRUZXh0Q29tbWFuZCogRWRpdG9yOjps
YXN0SW5zZXJ0VGV4dENvbW1hbmQoKQoreworICAgIEVkaXRDb21tYW5kKiBsYXN0Q29tbWFuZCA9
IGxhc3RFZGl0Q29tbWFuZCgpOworICAgIGlmICghbGFzdENvbW1hbmQgfHwgIWxhc3RDb21tYW5k
LT5sYXN0Q2hpbGRDb21tYW5kcygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEVkaXRDb21t
YW5kKiBsYXN0Q29tbWFuZCA9IGxhc3RDb21tYW5kLT5tX2NvbW1hbmRzLmxhc3QoKS5nZXQoKTsK
KyAgICBpZiAoIWxhc3RDb21tYW5kLT5pc0luc2VydFRleHRDb21tYW5kKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc2VydFRleHRDb21tYW5kKj4obGFz
dENvbW1hbmQpOworfQorCiBib29sIEVkaXRvcjo6aGFuZGxlVGV4dEV2ZW50KFRleHRFdmVudCog
ZXZlbnQpCiB7CiAgICAgLy8gRGVmYXVsdCBldmVudCBoYW5kbGluZyBmb3IgRHJhZyBhbmQgRHJv
cCB3aWxsIGJlIGhhbmRsZWQgYnkgRHJhZ0NvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gODk2MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsOSAr
MjgwLDggQEAKICAgICBpZiAoIWVuZGluZ1NlbGVjdGlvbigpLmlzTm9uT3JwaGFuZWRDYXJldE9y
UmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBpZiAobV9jb21tYW5kVHlw
ZSA9PSBEZWxldGVLZXkpCi0gICAgICAgIGlmIChtX2NvbW1hbmRzLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIG1fb3BlbmVkQnlCYWNrd2FyZERlbGV0ZSA9IHRydWU7CisgICAgaWYgKG1fY29tbWFu
ZFR5cGUgPT0gRGVsZXRlS2V5ICYmICFoYXNDaGlsZENvbW1hbmRzKCkpCisgICAgICAgIG1fb3Bl
bmVkQnlCYWNrd2FyZERlbGV0ZSA9IHRydWU7CiAKICAgICBzd2l0Y2ggKG1fY29tbWFuZFR5cGUp
IHsKICAgICBjYXNlIERlbGV0ZVNlbGVjdGlvbjoKQEAgLTM5Miw4ICszOTEsOSBAQAogdm9pZCBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0UnVuV2l0aG91dE5ld2xpbmVzKGNvbnN0IFN0cmluZyAm
dGV4dCwgYm9vbCBzZWxlY3RJbnNlcnRlZFRleHQpCiB7CiAgICAgUmVmUHRyPEluc2VydFRleHRD
b21tYW5kPiBjb21tYW5kOwotICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnR5cGluZ1N0eWxlKCkgJiYgIW1fY29tbWFuZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEVk
aXRDb21tYW5kKiBsYXN0Q29tbWFuZCA9IG1fY29tbWFuZHMubGFzdCgpLmdldCgpOworICAgIGlm
ICghZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkgJiYgaGFz
Q2hpbGRDb21tYW5kcygpKSB7CisgICAgICAgIEFTU0VSVChkb2N1bWVudCgpLT5lZGl0b3IoKS0+
bGFzdEVkaXRDb21tYW5kKCkgPT0gdGhpcyk7CisgICAgICAgIEVkaXRDb21tYW5kKiBsYXN0Q29t
bWFuZCA9IG1fY29tcG9zaXRpb24ubV9jb21tYW5kcy5sYXN0KCkuZ2V0KCk7CiAgICAgICAgIGlm
IChsYXN0Q29tbWFuZC0+aXNJbnNlcnRUZXh0Q29tbWFuZCgpKQogICAgICAgICAgICAgY29tbWFu
ZCA9IHN0YXRpY19jYXN0PEluc2VydFRleHRDb21tYW5kKj4obGFzdENvbW1hbmQpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAkocmV2aXNpb24gODk2MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBA
CiBjbGFzcyBGcmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsK
K2NsYXNzIEluc2VydFRleHRDb21tYW5kOwogY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQYXN0ZWJv
YXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CkBAIC04OCw2ICs4OSw3IEBACiAgICAgRnJhbWUq
IGZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZTsgfQogICAgIERlbGV0ZUJ1dHRvbkNvbnRy
b2xsZXIqIGRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuZ2V0KCk7IH0KICAgICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5k
KCkgeyByZXR1cm4gbV9sYXN0RWRpdENvbW1hbmQuZ2V0KCk7IH0KKyAgICBJbnNlcnRUZXh0Q29t
bWFuZCogbGFzdEluc2VydFRleHRDb21tYW5kKCk7CiAKICAgICB2b2lkIGhhbmRsZUtleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3du
KEtleWJvYXJkRXZlbnQqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRl
RWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDg5NjAwKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcs
MzEgQEAKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBUZXh0OwogCitjbGFzcyBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8RWRpdENvbW1hbmRDb21wb3NpdGlv
bj4geworcHVibGljOgorICAgIHZpcnR1YWwgfkVkaXRDb21tYW5kQ29tcG9zaXRpb24oKSB7IH0K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgRWRpdENvbW1hbmRDb21wb3NpdGlvbik7IH0KKworICAgIGJv
b2wgaXNGaXJzdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpIGNvbnN0IHsgcmV0dXJuICFt
X2NvbW1hbmRzLmlzRW1wdHkoKSAmJiBtX2NvbW1hbmRzLmZpcnN0KCkgPT0gY29tbWFuZDsgfQor
CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY29tbWFuZCkgeyBtX2Nv
bW1hbmRzLmFwcGVuZChjb21tYW5kKTsgfQorICAgIGJvb2wgaGFzQ2hpbGRDb21tYW5kcygpIGNv
bnN0IHsgcmV0dXJuICFtX2NvbW1hbmRzLmlzRW1wdHkoKTsgfQorCisgICAgdmlydHVhbCB2b2lk
IGRvVW5hcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBkb1JlYXBwbHkoKTsKKworcHJpdmF0ZToK
KyAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCk7CisgICAgVmVjdG9yPFJlZlB0cjxFZGl0Q29t
bWFuZD4gPiBtX2NvbW1hbmRzOworfTsKKyAgICAKIGNsYXNzIENvbXBvc2l0ZUVkaXRDb21tYW5k
IDogcHVibGljIEVkaXRDb21tYW5kIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db21wb3NpdGVF
ZGl0Q29tbWFuZCgpOwogCi0gICAgYm9vbCBpc0ZpcnN0Q29tbWFuZChFZGl0Q29tbWFuZCogY29t
bWFuZCkgeyByZXR1cm4gIW1fY29tbWFuZHMuaXNFbXB0eSgpICYmIG1fY29tbWFuZHMuZmlyc3Qo
KSA9PSBjb21tYW5kOyB9CisgICAgYm9vbCBpc0ZpcnN0Q29tbWFuZChFZGl0Q29tbWFuZCogY29t
bWFuZCkgY29uc3QgeyByZXR1cm4gbV9jb21wb3NpdGlvbi0+aXNGaXJzdENvbW1hbmQoY29tbWFu
ZCk7IH0KKyAgICBib29sIGhhc0NoaWxkQ29tbWFuZHMoKSBjb25zdCB7IHJldHVybiBtX2NvbXBv
c2l0aW9uLT5oYXNDaGlsZENvbW1hbmRzKCk7IH0KKyAgICBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
KiBjb21wb3NpdGlvbigpIHsgcmV0dXJuIG1fY29tcG9zaXRpb24uZ2V0KCk7IH0KIAogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IENvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50Kik7CkBAIC0x
MTksMTEgKzEzOSwxMCBAQAogICAgIAogICAgIFBhc3NSZWZQdHI8Tm9kZT4gc3BsaXRUcmVlVG9O
b2RlKE5vZGUqLCBOb2RlKiwgYm9vbCBzcGxpdEFuY2VzdG9yID0gZmFsc2UpOwogCi0gICAgVmVj
dG9yPFJlZlB0cjxFZGl0Q29tbWFuZD4gPiBtX2NvbW1hbmRzOwotCiBwcml2YXRlOgotICAgIHZp
cnR1YWwgdm9pZCBkb1VuYXBwbHkoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7Cisg
ICAgUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IG1fY29tcG9zaXRpb247CisgICAgdmly
dHVhbCB2b2lkIGRvVW5hcHBseSgpIHsgbV9jb21wb3NpdGlvbi0+ZG9VbmFwcGx5KCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCkgeyBtX2NvbXBvc2l0aW9uLT5kb1JlYXBwbHkoKTsg
fQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118349</attachid>
            <date>2011-12-08 02:03:53 -0800</date>
            <delta_ts>2011-12-08 02:11:35 -0800</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-64414-20111208020352.patch</filename>
            <type>text/plain</type>
            <size>21432</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDExLTEyLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5k
IHNob3VsZCBub3QgYmUga2VwdCBhbGl2ZSBmb3IgdW5kbyBhbmQgcmVkbworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
RWRpdENvbW1hbmRDb21wb3NpdGlvbiB0aGF0IHJlcGxhY2VzIENvbXBvc2l0ZUVkaXRDb21tYW5k
IGZvcgorICAgICAgICB1bmRvIGFuZCByZWRvIHB1cnBvc2VzLiBGdXJ0aGVybW9yZSwgd2Ugbm93
IGtlZXAgYSBsaXN0IG9mIGNvbW1hbmRzIGluc3RlYWQgb2YgYSB0cmVlIG9mIGNvbW1hbmRzCisg
ICAgICAgIHRvIHVuYXBwbHkgYW5kIHJlYXBwbHkgZWRpdCBjb21tYW5kcyB0aGF0IGNvbXBvc2Vz
IGFuIHVuZG9hYmxlIGFjdGlvbi4KKworICAgICAgICBFYWNoIHRvcC1sZXZlbCBDb21wb3NpdGVF
ZGl0Q29tbWFuZCBob2xkcyBhIHJlZi1wb2ludGVyIHRvIEVkaXRDb21tYW5kQ29tcG9zaXRpb24s
CisgICAgICAgIGFuZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSBhZGRzIG5ldyBTaW1wbGVFZGl0
Q29tbWFuZHMgdG8gdGhlIGxpc3QuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpkb0FwcGx5
KTogTmV2ZXIgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246
OmRvVW5hcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpk
b1JlYXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRl
RWRpdENvbW1hbmQpOiBBZGQgYW4gYXNzZXJ0aW9uIHRvIGVuc3VyZSB3ZSBkaWRuJ3QgY3JlYXRl
CisgICAgICAgIGEgY29tcG9zaXRpb24gZm9yIENvbXBvc2l0ZUVkaXRDb21tYW5kcyB0aGF0IGhh
dmUgcGFyZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkb1Vu
YXBwbHkpOiBOZXZlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRvUmVhcHBseSk6IE5ldmVyIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZW5zdXJlQ29tcG9zaXRpb24pOiBDcmVhdGVzIGFuZCBhdHRhY2hlcyBhIEVk
aXRDb21tYW5kQ29tcG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUpOiBBcHBlbmQgYSBTaW1wbGVFZGl0Q29tbWFu
ZCB0byB0aGUgY29tcG9zaXRpb24uCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpFZGl0
Q29tbWFuZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpjb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b0VkaXRDb21tYW5kQ29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9Db21wb3NpdGVFZGl0Q29tbWFuZCk6CisKKyAg
ICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOiBXcmFwIFJlbW92ZU5v
ZGVDb21tYW5kIGluIFJlbW92ZVRhcmdldENvbW1hbmQgc2luY2UgdG9wIGxldmVsCisgICAgICAg
IGNvbW1hbmRzIGFyZSBub3cgcmVxdWlyZWQgdG8gYmUgYSBDb21wb3NpdGVFZGl0Q29tbWFuZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZVRhcmdldENvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW1vdmVUYXJnZXRDb21tYW5kOjpSZW1vdmVUYXJnZXRDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbW92ZVRhcmdldENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6ZGVsZXRlVGFyZ2V0KToKKworICAgICAg
ICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OkVkaXRDb21tYW5kKTogTmV3IGNvbnN0cnVjdG9yOyB1c2VkIGJ5IEVkaXRDb21tYW5kQ29t
cG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6YXBwbHkpOiBDcmVhdGUg
YSBjb21wb3NpdGlvbiBmb3IgYSB0b3AtbGV2ZWwgY29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kOjp1bmFwcGx5KTogU2luY2Ugd2UgY2xlYXIgbV9wYXJlbnQgb2YgU2ltcGxl
RWRpdENvbW1hbmQgYXMgc29vbiBhcyB0aGV5IGFyZQorICAgICAgICBhZGRlZCB0byBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uLCB3ZSBjYW4ndCB1c2UgaXNUb3BMZXZlbENvbW1hbmQoKSB0byBkaWZm
ZXJlbnRpYXRlIEVkaXRDb21tYW5kQ29tcG9zaXRpb24KKyAgICAgICAgZnJvbSBTaW1wbGVFZGl0
Q29tbWFuZC4gVXNlIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGluc3RlYWQuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cmVhcHBseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcG9zaXRpb25JZlBvc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5k
OjpzZXRTdGFydGluZ1NlbGVjdGlvbik6IFVwZGF0ZSB0aGUgc3RhcnRpbmcgc2VsZWN0aW9uIG9m
IEVkaXRDb21tYW5kQ29tcG9zaXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OnNldEVuZGluZ1NlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OnNldFBhcmVudCk6IEFjY2VwdHMgYSBudWxsIHBvaW50ZXIgaW4gb3JkZXIgdG8gYXZvaWQg
a2VlcGluZyBhIHN0YWxlIHBvaW50ZXIgaW4KKyAgICAgICAgbV9wYXJlbnQgaW5zaWRlIFNpbXBs
ZUVkaXRDb21tYW5kIHdoZW4gQ29tcG9zaXRlRWRpdENvbW1hbmQgZ29lcyBhd2F5LgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OmlzU2ltcGxlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OmlzQ29tcG9zaXRlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OmlzRWRpdENvbW1hbmRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFu
ZDo6cGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2ltcGxlRWRpdENvbW1hbmQpOgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBsaWVkRWRpdGluZyk6IFJlZ2lzdGVyIGEgRWRpdENvbW1hbmRDb21wb3NpdGlvbiwgaW5zdGVh
ZCBvZiBhIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAgIHRvIHRoZSB1bmRvIHN0YWNrLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKTogVW5hcHBsaWVkIG9y
IHJlYXBwbGllZCBjb21tYW5kcyBhcmUgbm93IGFsd2F5cyBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorCiAyMDExLTEyLTA4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmUgc2NhbGVQYWdlQnkgZnJvbSBldmVudFNlbmRl
ciB0byB3aW5kb3cuaW50ZXJuYWxzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyMjI3KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDQ4ICs3MCw5NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLUNvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWFuZChE
b2N1bWVudCAqZG9jdW1lbnQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCkKK1Bhc3NSZWZQ
dHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGlu
Z1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24pCiB7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKGRvY3VtZW50LCBz
dGFydGluZ1NlbGVjdGlvbiwgZW5kaW5nU2VsZWN0aW9uKSk7CiB9CiAKLUNvbXBvc2l0ZUVkaXRD
b21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQordm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uOjpkb0FwcGx5KCkKIHsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6ZG9VbmFwcGx5KCkKK3ZvaWQgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjo6ZG9VbmFwcGx5KCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpICE9IDA7IC0taSkKICAgICAgICAgbV9jb21t
YW5kc1tpIC0gMV0tPnVuYXBwbHkoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZG9SZWFwcGx5KCkKK3ZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6ZG9SZWFwcGx5KCkKIHsK
ICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpICE9IHNpemU7ICsraSkKICAgICAgICAgbV9jb21tYW5kc1tpXS0+cmVhcHBseSgpOwog
fQogCit2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmFwcGVuZChTaW1wbGVFZGl0Q29tbWFu
ZCogY29tbWFuZCkKK3sKKyAgICBtX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKTsKK30KKworQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OkNvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50ICpkb2N1bWVu
dCkKKyAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KQoreworfQorCitDb21wb3NpdGVFZGl0Q29t
bWFuZDo6fkNvbXBvc2l0ZUVkaXRDb21tYW5kKCkKK3sKKyAgICBBU1NFUlQoaXNUb3BMZXZlbENv
bW1hbmQoKSB8fCAhbV9jb21wb3NpdGlvbik7Cit9CisKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRvVW5hcHBseSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK0VkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjplbnN1cmVDb21wb3NpdGlvbigpCit7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1h
bmQgPSB0aGlzOworICAgIHdoaWxlIChjb21tYW5kICYmIGNvbW1hbmQtPnBhcmVudCgpKQorICAg
ICAgICBjb21tYW5kID0gY29tbWFuZC0+cGFyZW50KCk7CisgICAgaWYgKCFjb21tYW5kLT5tX2Nv
bXBvc2l0aW9uKQorICAgICAgICBjb21tYW5kLT5tX2NvbXBvc2l0aW9uID0gRWRpdENvbW1hbmRD
b21wb3NpdGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0aW5nU2VsZWN0aW9uKCksIGVuZGlu
Z1NlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gY29tbWFuZC0+bV9jb21wb3NpdGlvbi5nZXQoKTsK
K30KKwogLy8KIC8vIHN1Z2FyeS1zd2VldCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGVscCBj
cmVhdGUgYW5kIGFwcGx5IGVkaXQgY29tbWFuZHMgaW4gY29tcG9zaXRlIGNvbW1hbmRzCiAvLwot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4gY21kKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gcHJwQ29tbWFuZCkKIHsK
LSAgICBjbWQtPnNldFBhcmVudCh0aGlzKTsKLSAgICBjbWQtPmFwcGx5KCk7Ci0gICAgbV9jb21t
YW5kcy5hcHBlbmQoY21kKTsKKyAgICBSZWZQdHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQgPSBwcnBD
b21tYW5kOworICAgIGNvbW1hbmQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBjb21tYW5kLT5hcHBs
eSgpOworICAgIGlmIChjb21tYW5kLT5pc1NpbXBsZUVkaXRDb21tYW5kKCkpIHsKKyAgICAgICAg
Y29tbWFuZC0+c2V0UGFyZW50KDApOworICAgICAgICBlbnN1cmVDb21wb3NpdGlvbigpLT5hcHBl
bmQodG9TaW1wbGVFZGl0Q29tbWFuZChjb21tYW5kLmdldCgpKSk7CisgICAgfQorICAgIG1fY29t
bWFuZHMuYXBwZW5kKGNvbW1hbmQucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0
Q29tbWFuZD4gY29tbWFuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQordm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0
cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gcHJwQ29tbWFuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKQogeworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY29tbWFu
ZCA9IHBycENvbW1hbmQ7CiAgICAgY29tbWFuZC0+c2V0UGFyZW50KHRoaXMpOwogICAgIGlmIChz
ZWxlY3Rpb24gIT0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpIHsKICAgICAgICAgY29tbWFu
ZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICAgICAgY29tbWFuZC0+c2V0
RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgfQogICAgIGNvbW1hbmQtPmFwcGx5KCk7
Ci0gICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7CisgICAgaWYgKGNvbW1hbmQtPmlzU2lt
cGxlRWRpdENvbW1hbmQoKSkgeworICAgICAgICBjb21tYW5kLT5zZXRQYXJlbnQoMCk7CisgICAg
ICAgIGVuc3VyZUNvbXBvc2l0aW9uKCktPmFwcGVuZCh0b1NpbXBsZUVkaXRDb21tYW5kKGNvbW1h
bmQuZ2V0KCkpKTsKKyAgICB9CisgICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZC5yZWxlYXNl
KCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKGNvbnN0IEVk
aXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDEw
MjIyNykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDMxIEBAIGNsYXNzIEhUTUxFbGVtZW50OwogY2xh
c3MgU3R5bGVkRWxlbWVudDsKIGNsYXNzIFRleHQ7CiAKK2NsYXNzIEVkaXRDb21tYW5kQ29tcG9z
aXRpb24gOiBwdWJsaWMgRWRpdENvbW1hbmQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkb1JlYXBwbHkoKSBPVkVSUklERTsKKyAgICB2b2lkIGFw
cGVuZChTaW1wbGVFZGl0Q29tbWFuZCopOworCitwcml2YXRlOgorICAgIEVkaXRDb21tYW5kQ29t
cG9zaXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFy
dGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQor
ICAgICAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50LCBzdGFydGluZ1NlbGVjdGlvbiwgZW5kaW5n
U2VsZWN0aW9uKQorICAgIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb21tYW5kQ29tcG9z
aXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBWZWN0b3I8UmVm
UHRyPFNpbXBsZUVkaXRDb21tYW5kPiA+IG1fY29tbWFuZHM7Cit9OworCiBjbGFzcyBDb21wb3Np
dGVFZGl0Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+Q29tcG9zaXRlRWRpdENvbW1hbmQoKTsKIAogICAgIGJvb2wgaXNGaXJzdENvbW1hbmQoRWRp
dENvbW1hbmQqIGNvbW1hbmQpIHsgcmV0dXJuICFtX2NvbW1hbmRzLmlzRW1wdHkoKSAmJiBtX2Nv
bW1hbmRzLmZpcnN0KCkgPT0gY29tbWFuZDsgfQorICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24q
IGNvbXBvc2l0aW9uKCkgeyByZXR1cm4gbV9jb21wb3NpdGlvbi5nZXQoKTsgfQorICAgIEVkaXRD
b21tYW5kQ29tcG9zaXRpb24qIGVuc3VyZUNvbXBvc2l0aW9uKCk7CiAKIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBDb21wb3NpdGVFZGl0Q29tbWFuZChEb2N1bWVudCopOwpAQCAtMTI0LDggKzE0
NCwyNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7CisKKyAgICBib29sIGlzQ29tcG9zaXRl
RWRpdENvbW1hbmQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBSZWZQ
dHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlvbjsKIH07CiAKK2lubGluZSBF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uKiB0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24oRWRpdENvbW1h
bmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNvbW1hbmQtPmlzRWRpdENvbW1hbmRDb21wb3Np
dGlvbigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWRpdENvbW1hbmRDb21wb3NpdGlvbio+
KGNvbW1hbmQpOworfQorCitpbmxpbmUgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHRvQ29tcG9zaXRl
RWRpdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNvbW1hbmQt
PmlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBv
c2l0ZUVkaXRDb21tYW5kKj4oY29tbWFuZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIENvbXBvc2l0ZUVkaXRDb21tYW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAy
MjI3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogI2luY2x1
ZGUgIkRlbGV0ZUJ1dHRvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRp
dG9yLmgiCkBAIC0zNjAsMTkgKzM2MSw0MCBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6
OmRpc2FibGUoKQogICAgIG1fZGlzYWJsZVN0YWNrKys7CiB9CiAKK2NsYXNzIFJlbW92ZVRhcmdl
dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbW92ZVRhcmdldENvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW1vdmVUYXJnZXRDb21tYW5kKGRvY3VtZW50LCB0YXJnZXQpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVtb3ZlVGFyZ2V0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQs
IFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5k
KGRvY3VtZW50KQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7IH0KKworICAgIHZv
aWQgZG9BcHBseSgpCisgICAgeworICAgICAgICByZW1vdmVOb2RlKG1fdGFyZ2V0KTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKwogdm9pZCBEZWxl
dGVCdXR0b25Db250cm9sbGVyOjpkZWxldGVUYXJnZXQoKQogewogICAgIGlmICghZW5hYmxlZCgp
IHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE5vZGU+IGVsZW1l
bnQgPSBtX3RhcmdldDsKICAgICBoaWRlKCk7CiAKICAgICAvLyBCZWNhdXNlIHRoZSBkZWxldGlv
biBVSSBvbmx5IGFwcGVhcnMgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGVudGlyZWx5CiAgICAgLy8g
d2l0aGluIHRoZSB0YXJnZXQsIHdlIHVuY29uZGl0aW9uYWxseSB1cGRhdGUgdGhlIHNlbGVjdGlv
biB0byBiZQogICAgIC8vIGEgY2FyZXQgd2hlcmUgdGhlIHRhcmdldCBoYWQgYmVlbi4KLSAgICBQ
b3NpdGlvbiBwb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbGVtZW50LmdldCgpKTsK
LSAgICBhcHBseUNvbW1hbmQoUmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LnJlbGVh
c2UoKSkpOworICAgIFBvc2l0aW9uIHBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1f
dGFyZ2V0LmdldCgpKTsKKyAgICBhcHBseUNvbW1hbmQoUmVtb3ZlVGFyZ2V0Q29tbWFuZDo6Y3Jl
YXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fdGFyZ2V0KSk7CiAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24ocG9zKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDIyMjcpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpIAorRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3Bh
cmVudCgwKQogewpAQCAtNTAsNiArNTAsMTYgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERv
Y3VtZW50KiBkb2N1bQogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9u
KTsKIH0KIAorRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAg
LCBtX3BhcmVudCgwKQoreworICAgIEFTU0VSVChtX2RvY3VtZW50KTsKKyAgICBBU1NFUlQobV9k
b2N1bWVudC0+ZnJhbWUoKSk7CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc3RhcnRpbmdTZWxl
Y3Rpb24pOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24pOworfQorCiBF
ZGl0Q29tbWFuZDo6fkVkaXRDb21tYW5kKCkKIHsKIH0KQEAgLTYyLDYgKzcyLDcgQEAgdm9pZCBF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1l
KCk7CiAgICAgCiAgICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5kKCkpIHsKKyAgICAgICAgQVNTRVJU
KGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CiAgICAgICAgIGlmICghZW5kaW5nU2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICAgICAgc3dpdGNoIChlZGl0
aW5nQWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEVkaXRBY3Rpb25UeXBpbmc6CkBA
IC03Niw2ICs4Nyw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5KCkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHRvQ29tcG9z
aXRlRWRpdENvbW1hbmQodGhpcyktPmVuc3VyZUNvbXBvc2l0aW9uKCk7CiAgICAgfQogICAgIAog
ICAgIC8vIENoYW5nZXMgdG8gdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0
aGUgbGFzdCBlZGl0aW5nIG9wZXJhdGlvbiB0aGF0IApAQCAtOTQsMTAgKzEwNiwxMSBAQCB2b2lk
IEVkaXRDb21tYW5kOjphcHBseSgpCiAgICAgfQogCiAgICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5k
KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CiAgICAgICAg
IC8vIE9ubHkgbmVlZCB0byBjYWxsIGFwcGxpZWRFZGl0aW5nIGZvciB0b3AtbGV2ZWwgY29tbWFu
ZHMsIGFuZCBUeXBpbmdDb21tYW5kcyBkbyBpdCBvbiB0aGVpcgogICAgICAgICAvLyBvd24gKHNl
ZSBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQpLgogICAgICAgICBpZiAo
IWlzVHlwaW5nQ29tbWFuZCgpKQotICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5hcHBsaWVk
RWRpdGluZyh0aGlzKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbGllZEVkaXRp
bmcodG9Db21wb3NpdGVFZGl0Q29tbWFuZCh0aGlzKSk7CiAgICAgfQogCiAgICAgc2V0U2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoZmFsc2UpOwpAQCAtMTIyLDggKzEzNSw4IEBA
IHZvaWQgRWRpdENvbW1hbmQ6OnVuYXBwbHkoKQogICAgIGRvVW5hcHBseSgpOwogICAgIGRlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXItPmVuYWJsZSgpOwogCi0gICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5k
KCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5hcHBsaWVkRWRpdGluZyh0aGlzKTsKKyAg
ICBpZiAoaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkpCisgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+dW5hcHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOwogfQog
CiB2b2lkIEVkaXRDb21tYW5kOjpyZWFwcGx5KCkKQEAgLTE0NSw4ICsxNTgsOCBAQCB2b2lkIEVk
aXRDb21tYW5kOjpyZWFwcGx5KCkKICAgICBkb1JlYXBwbHkoKTsKICAgICBkZWxldGVCdXR0b25D
b250cm9sbGVyLT5lbmFibGUoKTsKIAotICAgIGlmIChpc1RvcExldmVsQ29tbWFuZCgpKQotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBwbGllZEVkaXRpbmcodGhpcyk7CisgICAgaWYgKGlz
RWRpdENvbW1hbmRDb21wb3NpdGlvbigpKQorICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBw
bGllZEVkaXRpbmcodG9FZGl0Q29tbWFuZENvbXBvc2l0aW9uKHRoaXMpKTsKIH0KIAogdm9pZCBF
ZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKQEAgLTE1OSwxMCArMTcyLDIyIEBAIEVkaXRBY3Rpb24g
RWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSAKICAgICByZXR1cm4gRWRpdEFjdGlvblVuc3Bl
Y2lmaWVkOwogfQogCitzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZCkKK3sKKyAgICBpZiAoIWNvbW1h
bmQtPmlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHRvQ29tcG9zaXRlRWRpdENvbW1hbmQoY29tbWFuZCktPmNvbXBvc2l0aW9uKCk7Cit9CisK
IHZvaWQgRWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IHMucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGZvciAoRWRpdENvbW1hbmQqIGNtZCA9IHRoaXM7IDsgY21kID0gY21kLT5tX3BhcmVu
dCkgeworICAgICAgICBpZiAoRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb24gPSBj
b21wb3NpdGlvbklmUG9zc2libGUoY21kKSkgeworICAgICAgICAgICAgQVNTRVJUKGNtZC0+aXNU
b3BMZXZlbENvbW1hbmQoKSk7CisgICAgICAgICAgICBjb21wb3NpdGlvbi0+bV9zdGFydGluZ1Nl
bGVjdGlvbiA9IHM7CisgICAgICAgICAgICBjb21wb3NpdGlvbi0+bV9zdGFydGluZ1Jvb3RFZGl0
YWJsZUVsZW1lbnQgPSByb290OworICAgICAgICB9CiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1Nl
bGVjdGlvbiA9IHM7CiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQg
PSByb290OwogICAgICAgICBpZiAoIWNtZC0+bV9wYXJlbnQgfHwgY21kLT5tX3BhcmVudC0+aXNG
aXJzdENvbW1hbmQoY21kKSkKQEAgLTE3NCw2ICsxOTksMTEgQEAgdm9pZCBFZGl0Q29tbWFuZDo6
c2V0RW5kaW5nU2VsZWN0aW9uKGNvbgogewogICAgIEVsZW1lbnQqIHJvb3QgPSBzLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKICAgICBmb3IgKEVkaXRDb21tYW5kKiBjbWQgPSB0aGlzOyBjbWQ7IGNt
ZCA9IGNtZC0+bV9wYXJlbnQpIHsKKyAgICAgICAgaWYgKEVkaXRDb21tYW5kQ29tcG9zaXRpb24q
IGNvbXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKGNtZCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkpOworICAgICAgICAgICAgY29tcG9zaXRp
b24tPm1fZW5kaW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX2Vu
ZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQgPSByb290OworICAgICAgICB9CiAgICAgICAgIGNtZC0+
bV9lbmRpbmdTZWxlY3Rpb24gPSBzOwogICAgICAgICBjbWQtPm1fZW5kaW5nUm9vdEVkaXRhYmxl
RWxlbWVudCA9IHJvb3Q7CiAgICAgfQpAQCAtMjEwLDEzICsyNDAsMTUgQEAgdm9pZCBFZGl0Q29t
bWFuZDo6dXBkYXRlTGF5b3V0KCkgY29uc3QKIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0UGFyZW50
KENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQpCiB7Ci0gICAgQVNTRVJUKHBhcmVudCk7Ci0g
ICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgQVNTRVJUKChwYXJlbnQgJiYgIW1fcGFyZW50KSB8
fCAoIXBhcmVudCAmJiBtX3BhcmVudCkpOworICAgIEFTU0VSVCghcGFyZW50IHx8ICFpc0NvbXBv
c2l0ZUVkaXRDb21tYW5kKCkgfHwgIXRvQ29tcG9zaXRlRWRpdENvbW1hbmQodGhpcyktPmNvbXBv
c2l0aW9uKCkpOwogICAgIG1fcGFyZW50ID0gcGFyZW50OwotICAgIG1fc3RhcnRpbmdTZWxlY3Rp
b24gPSBwYXJlbnQtPm1fZW5kaW5nU2VsZWN0aW9uOwotICAgIG1fZW5kaW5nU2VsZWN0aW9uID0g
cGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKLSAgICBtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxl
bWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50OwotICAgIG1fZW5kaW5n
Um9vdEVkaXRhYmxlRWxlbWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50
OworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgbV9zdGFydGluZ1NlbGVjdGlvbiA9IHBhcmVu
dC0+bV9lbmRpbmdTZWxlY3Rpb247CisgICAgICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gcGFyZW50
LT5tX2VuZGluZ1NlbGVjdGlvbjsKKyAgICAgICAgbV9zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQgPSBwYXJlbnQtPm1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudDsKKyAgICAgICAgbV9lbmRp
bmdSb290RWRpdGFibGVFbGVtZW50ID0gcGFyZW50LT5tX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQ7CisgICAgfQogfQogCiB2b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5k
PiBjb21tYW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAkocmV2aXNp
b24gMTAyMjI3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTMgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCogc3Rh
cnRpbmdSb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KICAgICBFbGVtZW50KiBlbmRpbmdSb290RWRpdGFibGVF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50LmdldCgp
OyB9Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaW1wbGVFZGl0Q29tbWFuZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tcG9zaXRlRWRpdENvbW1h
bmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb21t
YW5kQ29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDcmVhdGVMaW5r
Q29tbWFuZCgpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGlu
Z1N0eWxlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVG9wTGV2ZWxDb21tYW5kKCkgY29uc3QgeyBy
ZXR1cm4gIW1fcGFyZW50OyB9CkBAIC02NSw4ICs2OCwxMCBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCopOworICAgIEVkaXRDb21tYW5kKERvY3VtZW50
KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAog
ICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7
IH0KKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnQ7IH0KIAogICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKTsKQEAgLTkxLDggKzk2LDE2IEBAIHByaXZhdGU6CiBjbGFzcyBTaW1wbGVFZGl0Q29t
bWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwcm90ZWN0ZWQ6CiAgICAgU2ltcGxlRWRpdENv
bW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KSA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSB7IH0KK3By
aXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU2ltcGxlRWRpdENvbW1hbmQoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiB0cnVlOyB9CiB9OwogCitpbmxpbmUgU2ltcGxlRWRpdENvbW1hbmQqIHRv
U2ltcGxlRWRpdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNv
bW1hbmQtPmlzU2ltcGxlRWRpdENvbW1hbmQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNp
bXBsZUVkaXRDb21tYW5kKj4oY29tbWFuZCk7Cit9CisKIHZvaWQgYXBwbHlDb21tYW5kKFBhc3NS
ZWZQdHI8RWRpdENvbW1hbmQ+KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTAyMjI3KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNyArODY1LDcgQEAg
c3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZwogICAgICAgICBlbmRSb290
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOwogfQogCi12b2lkIEVkaXRv
cjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQordm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNtZCkK
IHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIApAQCAtODg4LDEy
ICs4ODgsMTIgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RQogICAg
ICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCBjb21tYW5kCiAgICAgICAgIG1fbGFzdEVk
aXRDb21tYW5kID0gY21kOwogICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICBjbGll
bnQoKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhtX2xhc3RFZGl0Q29tbWFuZCk7CisgICAgICAg
ICAgICBjbGllbnQoKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyh0b0NvbXBvc2l0ZUVkaXRDb21t
YW5kKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpKS0+ZW5zdXJlQ29tcG9zaXRpb24oKSk7CiAgICAg
fQogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi12b2lk
IEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCit2
b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9z
aXRpb24+IGNtZCkKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
ICAgICAKQEAgLTkwOSw3ICs5MDksNyBAQCB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyCiAgICAgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9
CiAKLXZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+
IGNtZCkKK3ZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmRDb21wb3NpdGlvbj4gY21kKQogewogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dCgpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAxMDIy
MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw5ICs0OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVj
bGFyYXRpb247CiBjbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOworY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBEZWxldGVCdXR0b25D
b250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xhc3MgRWRpdG9ySW50ZXJuYWxDb21tYW5kOwog
Y2xhc3MgRnJhbWU7CkBAIC02MCwxMSArNjEsMTIgQEAgY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQ
YXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBTcGVsbENoZWNrZXI7Citj
bGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOwogY2xhc3MgVGV4dDsKIGNsYXNzIFRl
eHRDaGVja2VyQ2xpZW50OwogY2xhc3MgVGV4dENoZWNraW5nUGFyYWdyYXBoOwotc3RydWN0IFRl
eHRDaGVja2luZ1Jlc3VsdDsKIGNsYXNzIFRleHRFdmVudDsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQ7CiAKIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGluZSB7CiAgICAgQ29tcG9zaXRpb25V
bmRlcmxpbmUoKSAKQEAgLTE2NSw5ICsxNjcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVN0
eWxlVG9TZWxlY3Rpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiosIEVkaXRBY3Rpb24pOwogICAgIHZv
aWQgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qLCBF
ZGl0QWN0aW9uKTsKIAotICAgIHZvaWQgYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29t
bWFuZD4pOwotICAgIHZvaWQgdW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5k
Pik7Ci0gICAgdm9pZCByZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsK
KyAgICB2b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+
KTsKKyAgICB2b2lkIHVuYXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBv
c2l0aW9uPik7CisgICAgdm9pZCByZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmRDb21wb3NpdGlvbj4pOwogICAgIHZvaWQgdW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKTsKIAogICAgIHZvaWQgc2V0U2hvdWxk
U3R5bGVXaXRoQ1NTKGJvb2wgZmxhZykgeyBtX3Nob3VsZFN0eWxlV2l0aENTUyA9IGZsYWc7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118352</attachid>
            <date>2011-12-08 02:11:39 -0800</date>
            <delta_ts>2011-12-08 10:59:47 -0800</delta_ts>
            <desc>Updated for ToT</desc>
            <filename>bug-64414-20111208021138.patch</filename>
            <type>text/plain</type>
            <size>21402</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjMyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDExLTEyLTA4ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5k
IHNob3VsZCBub3QgYmUga2VwdCBhbGl2ZSBmb3IgdW5kbyBhbmQgcmVkbworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ0MTQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGludHJvZHVjZXMg
RWRpdENvbW1hbmRDb21wb3NpdGlvbiB0aGF0IHJlcGxhY2VzIENvbXBvc2l0ZUVkaXRDb21tYW5k
IGZvcgorICAgICAgICB1bmRvIGFuZCByZWRvIHB1cnBvc2VzLiBGdXJ0aGVybW9yZSwgd2Ugbm93
IGtlZXAgYSBsaXN0IG9mIGNvbW1hbmRzIGluc3RlYWQgb2YgYSB0cmVlIG9mIGNvbW1hbmRzCisg
ICAgICAgIHRvIHVuYXBwbHkgYW5kIHJlYXBwbHkgZWRpdCBjb21tYW5kcyB0aGF0IGNvbXBvc2Vz
IGFuIHVuZG9hYmxlIGFjdGlvbi4KKworICAgICAgICBFYWNoIHRvcC1sZXZlbCBDb21wb3NpdGVF
ZGl0Q29tbWFuZCBob2xkcyBhIHJlZi1wb2ludGVyIHRvIEVkaXRDb21tYW5kQ29tcG9zaXRpb24s
CisgICAgICAgIGFuZCBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZSBhZGRzIG5ldyBTaW1wbGVFZGl0
Q29tbWFuZHMgdG8gdGhlIGxpc3QuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpkb0FwcGx5
KTogTmV2ZXIgdXNlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5kQ29tcG9zaXRpb246
OmRvVW5hcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpk
b1JlYXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmRDb21wb3NpdGlvbjo6YXBw
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjp+Q29tcG9zaXRl
RWRpdENvbW1hbmQpOiBBZGQgYW4gYXNzZXJ0aW9uIHRvIGVuc3VyZSB3ZSBkaWRuJ3QgY3JlYXRl
CisgICAgICAgIGEgY29tcG9zaXRpb24gZm9yIENvbXBvc2l0ZUVkaXRDb21tYW5kcyB0aGF0IGhh
dmUgcGFyZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkb1Vu
YXBwbHkpOiBOZXZlciB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRvUmVhcHBseSk6IE5ldmVyIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZW5zdXJlQ29tcG9zaXRpb24pOiBDcmVhdGVzIGFuZCBhdHRhY2hlcyBhIEVk
aXRDb21tYW5kQ29tcG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUpOiBBcHBlbmQgYSBTaW1wbGVFZGl0Q29tbWFu
ZCB0byB0aGUgY29tcG9zaXRpb24uCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZENvbXBvc2l0aW9uOjpFZGl0
Q29tbWFuZENvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpjb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b0VkaXRDb21tYW5kQ29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9Db21wb3NpdGVFZGl0Q29tbWFuZCk6CisKKyAg
ICAgICAgKiBlZGl0aW5nL0RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwOiBXcmFwIFJlbW92ZU5v
ZGVDb21tYW5kIGluIFJlbW92ZVRhcmdldENvbW1hbmQgc2luY2UgdG9wIGxldmVsCisgICAgICAg
IGNvbW1hbmRzIGFyZSBub3cgcmVxdWlyZWQgdG8gYmUgYSBDb21wb3NpdGVFZGl0Q29tbWFuZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZVRhcmdldENvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW1vdmVUYXJnZXRDb21tYW5kOjpSZW1vdmVUYXJnZXRDb21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbW92ZVRhcmdldENvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6ZGVsZXRlVGFyZ2V0KToKKworICAgICAg
ICAqIGVkaXRpbmcvRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OkVkaXRDb21tYW5kKTogTmV3IGNvbnN0cnVjdG9yOyB1c2VkIGJ5IEVkaXRDb21tYW5kQ29t
cG9zaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6YXBwbHkpOiBDcmVhdGUg
YSBjb21wb3NpdGlvbiBmb3IgYSB0b3AtbGV2ZWwgY29tbWFuZC4KKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRDb21tYW5kOjp1bmFwcGx5KTogU2luY2Ugd2UgY2xlYXIgbV9wYXJlbnQgb2YgU2ltcGxl
RWRpdENvbW1hbmQgYXMgc29vbiBhcyB0aGV5IGFyZQorICAgICAgICBhZGRlZCB0byBFZGl0Q29t
bWFuZENvbXBvc2l0aW9uLCB3ZSBjYW4ndCB1c2UgaXNUb3BMZXZlbENvbW1hbmQoKSB0byBkaWZm
ZXJlbnRpYXRlIEVkaXRDb21tYW5kQ29tcG9zaXRpb24KKyAgICAgICAgZnJvbSBTaW1wbGVFZGl0
Q29tbWFuZC4gVXNlIGlzRWRpdENvbW1hbmRDb21wb3NpdGlvbigpIGluc3RlYWQuCisgICAgICAg
IChXZWJDb3JlOjpFZGl0Q29tbWFuZDo6cmVhcHBseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcG9zaXRpb25JZlBvc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRDb21tYW5k
OjpzZXRTdGFydGluZ1NlbGVjdGlvbik6IFVwZGF0ZSB0aGUgc3RhcnRpbmcgc2VsZWN0aW9uIG9m
IEVkaXRDb21tYW5kQ29tcG9zaXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OnNldEVuZGluZ1NlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OnNldFBhcmVudCk6IEFjY2VwdHMgYSBudWxsIHBvaW50ZXIgaW4gb3JkZXIgdG8gYXZvaWQg
a2VlcGluZyBhIHN0YWxlIHBvaW50ZXIgaW4KKyAgICAgICAgbV9wYXJlbnQgaW5zaWRlIFNpbXBs
ZUVkaXRDb21tYW5kIHdoZW4gQ29tcG9zaXRlRWRpdENvbW1hbmQgZ29lcyBhd2F5LgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1h
bmQ6OmlzU2ltcGxlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OmlzQ29tcG9zaXRlRWRpdENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdENvbW1hbmQ6
OmlzRWRpdENvbW1hbmRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0Q29tbWFu
ZDo6cGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2ltcGxlRWRpdENvbW1hbmQpOgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBsaWVkRWRpdGluZyk6IFJlZ2lzdGVyIGEgRWRpdENvbW1hbmRDb21wb3NpdGlvbiwgaW5zdGVh
ZCBvZiBhIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAgIHRvIHRoZSB1bmRvIHN0YWNrLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp1bmFwcGxpZWRFZGl0aW5nKTogVW5hcHBsaWVkIG9y
IHJlYXBwbGllZCBjb21tYW5kcyBhcmUgbm93IGFsd2F5cyBFZGl0Q29tbWFuZENvbXBvc2l0aW9u
LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKToKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorCiAyMDExLTEyLTA4ICBGYWR5IFNhbXVlbCAgPGZzYW11ZWxA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1vdmUgc2NhbGVQYWdlQnkgZnJvbSBldmVudFNlbmRl
ciB0byB3aW5kb3cuaW50ZXJuYWxzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTAyMzIzKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDQ4ICs3MCw5NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CiAKLUNvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWFuZChE
b2N1bWVudCAqZG9jdW1lbnQpCi0gICAgOiBFZGl0Q29tbWFuZChkb2N1bWVudCkKK1Bhc3NSZWZQ
dHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6Y3JlYXRl
KERvY3VtZW50KiBkb2N1bWVudCwKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFydGlu
Z1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiBlbmRpbmdTZWxlY3Rpb24pCiB7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFZGl0Q29tbWFuZENvbXBvc2l0aW9uKGRvY3VtZW50LCBz
dGFydGluZ1NlbGVjdGlvbiwgZW5kaW5nU2VsZWN0aW9uKSk7CiB9CiAKLUNvbXBvc2l0ZUVkaXRD
b21tYW5kOjp+Q29tcG9zaXRlRWRpdENvbW1hbmQoKQordm9pZCBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uOjpkb0FwcGx5KCkKIHsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6ZG9VbmFwcGx5KCkKK3ZvaWQgRWRpdENvbW1hbmRDb21wb3Np
dGlvbjo6ZG9VbmFwcGx5KCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSBzaXplOyBpICE9IDA7IC0taSkKICAgICAgICAgbV9jb21t
YW5kc1tpIC0gMV0tPnVuYXBwbHkoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
ZG9SZWFwcGx5KCkKK3ZvaWQgRWRpdENvbW1hbmRDb21wb3NpdGlvbjo6ZG9SZWFwcGx5KCkKIHsK
ICAgICBzaXplX3Qgc2l6ZSA9IG1fY29tbWFuZHMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpICE9IHNpemU7ICsraSkKICAgICAgICAgbV9jb21tYW5kc1tpXS0+cmVhcHBseSgpOwog
fQogCit2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmFwcGVuZChTaW1wbGVFZGl0Q29tbWFu
ZCogY29tbWFuZCkKK3sKKyAgICBtX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKTsKK30KKworQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OkNvbXBvc2l0ZUVkaXRDb21tYW5kKERvY3VtZW50ICpkb2N1bWVu
dCkKKyAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50KQoreworfQorCitDb21wb3NpdGVFZGl0Q29t
bWFuZDo6fkNvbXBvc2l0ZUVkaXRDb21tYW5kKCkKK3sKKyAgICBBU1NFUlQoaXNUb3BMZXZlbENv
bW1hbmQoKSB8fCAhbV9jb21wb3NpdGlvbik7Cit9CisKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRvVW5hcHBseSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK0VkaXRDb21tYW5kQ29tcG9zaXRpb24qIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjplbnN1cmVDb21wb3NpdGlvbigpCit7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQqIGNvbW1h
bmQgPSB0aGlzOworICAgIHdoaWxlIChjb21tYW5kICYmIGNvbW1hbmQtPnBhcmVudCgpKQorICAg
ICAgICBjb21tYW5kID0gY29tbWFuZC0+cGFyZW50KCk7CisgICAgaWYgKCFjb21tYW5kLT5tX2Nv
bXBvc2l0aW9uKQorICAgICAgICBjb21tYW5kLT5tX2NvbXBvc2l0aW9uID0gRWRpdENvbW1hbmRD
b21wb3NpdGlvbjo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0aW5nU2VsZWN0aW9uKCksIGVuZGlu
Z1NlbGVjdGlvbigpKTsKKyAgICByZXR1cm4gY29tbWFuZC0+bV9jb21wb3NpdGlvbi5nZXQoKTsK
K30KKwogLy8KIC8vIHN1Z2FyeS1zd2VldCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gaGVscCBj
cmVhdGUgYW5kIGFwcGx5IGVkaXQgY29tbWFuZHMgaW4gY29tcG9zaXRlIGNvbW1hbmRzCiAvLwot
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1Jl
ZlB0cjxFZGl0Q29tbWFuZD4gY21kKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gcHJwQ29tbWFuZCkKIHsK
LSAgICBjbWQtPnNldFBhcmVudCh0aGlzKTsKLSAgICBjbWQtPmFwcGx5KCk7Ci0gICAgbV9jb21t
YW5kcy5hcHBlbmQoY21kKTsKKyAgICBSZWZQdHI8RWRpdENvbW1hbmQ+IGNvbW1hbmQgPSBwcnBD
b21tYW5kOworICAgIGNvbW1hbmQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBjb21tYW5kLT5hcHBs
eSgpOworICAgIGlmIChjb21tYW5kLT5pc1NpbXBsZUVkaXRDb21tYW5kKCkpIHsKKyAgICAgICAg
Y29tbWFuZC0+c2V0UGFyZW50KDApOworICAgICAgICBlbnN1cmVDb21wb3NpdGlvbigpLT5hcHBl
bmQodG9TaW1wbGVFZGl0Q29tbWFuZChjb21tYW5kLmdldCgpKSk7CisgICAgfQorICAgIG1fY29t
bWFuZHMuYXBwZW5kKGNvbW1hbmQucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0cjxDb21wb3NpdGVFZGl0
Q29tbWFuZD4gY29tbWFuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQordm9p
ZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUGFzc1JlZlB0
cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gcHJwQ29tbWFuZCwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKQogeworICAgIFJlZlB0cjxDb21wb3NpdGVFZGl0Q29tbWFuZD4gY29tbWFu
ZCA9IHBycENvbW1hbmQ7CiAgICAgY29tbWFuZC0+c2V0UGFyZW50KHRoaXMpOwogICAgIGlmIChz
ZWxlY3Rpb24gIT0gY29tbWFuZC0+ZW5kaW5nU2VsZWN0aW9uKCkpIHsKICAgICAgICAgY29tbWFu
ZC0+c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uKTsKICAgICAgICAgY29tbWFuZC0+c2V0
RW5kaW5nU2VsZWN0aW9uKHNlbGVjdGlvbik7CiAgICAgfQogICAgIGNvbW1hbmQtPmFwcGx5KCk7
Ci0gICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCk7CisgICAgaWYgKGNvbW1hbmQtPmlzU2lt
cGxlRWRpdENvbW1hbmQoKSkgeworICAgICAgICBjb21tYW5kLT5zZXRQYXJlbnQoMCk7CisgICAg
ICAgIGVuc3VyZUNvbXBvc2l0aW9uKCktPmFwcGVuZCh0b1NpbXBsZUVkaXRDb21tYW5kKGNvbW1h
bmQuZ2V0KCkpKTsKKyAgICB9CisgICAgbV9jb21tYW5kcy5hcHBlbmQoY29tbWFuZC5yZWxlYXNl
KCkpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKGNvbnN0IEVk
aXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJKHJldmlzaW9uIDEw
MjMyMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDMxIEBAIGNsYXNzIEhUTUxFbGVtZW50OwogY2xh
c3MgU3R5bGVkRWxlbWVudDsKIGNsYXNzIFRleHQ7CiAKK2NsYXNzIEVkaXRDb21tYW5kQ29tcG9z
aXRpb24gOiBwdWJsaWMgRWRpdENvbW1hbmQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEVkaXRDb21tYW5kQ29tcG9zaXRpb24+IGNyZWF0ZShEb2N1bWVudCosIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBkb0FwcGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRvVW5hcHBseSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkb1JlYXBwbHkoKSBPVkVSUklERTsKKyAgICB2b2lkIGFw
cGVuZChTaW1wbGVFZGl0Q29tbWFuZCopOworCitwcml2YXRlOgorICAgIEVkaXRDb21tYW5kQ29t
cG9zaXRpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzdGFy
dGluZ1NlbGVjdGlvbiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZW5kaW5nU2VsZWN0aW9uKQor
ICAgICAgICA6IEVkaXRDb21tYW5kKGRvY3VtZW50LCBzdGFydGluZ1NlbGVjdGlvbiwgZW5kaW5n
U2VsZWN0aW9uKQorICAgIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb21tYW5kQ29tcG9z
aXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBWZWN0b3I8UmVm
UHRyPFNpbXBsZUVkaXRDb21tYW5kPiA+IG1fY29tbWFuZHM7Cit9OworCiBjbGFzcyBDb21wb3Np
dGVFZGl0Q29tbWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+Q29tcG9zaXRlRWRpdENvbW1hbmQoKTsKIAogICAgIGJvb2wgaXNGaXJzdENvbW1hbmQoRWRp
dENvbW1hbmQqIGNvbW1hbmQpIHsgcmV0dXJuICFtX2NvbW1hbmRzLmlzRW1wdHkoKSAmJiBtX2Nv
bW1hbmRzLmZpcnN0KCkgPT0gY29tbWFuZDsgfQorICAgIEVkaXRDb21tYW5kQ29tcG9zaXRpb24q
IGNvbXBvc2l0aW9uKCkgeyByZXR1cm4gbV9jb21wb3NpdGlvbi5nZXQoKTsgfQorICAgIEVkaXRD
b21tYW5kQ29tcG9zaXRpb24qIGVuc3VyZUNvbXBvc2l0aW9uKCk7CiAKIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBDb21wb3NpdGVFZGl0Q29tbWFuZChEb2N1bWVudCopOwpAQCAtMTI0LDggKzE0
NCwyNCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBkb1VuYXBwbHko
KTsKICAgICB2aXJ0dWFsIHZvaWQgZG9SZWFwcGx5KCk7CisKKyAgICBib29sIGlzQ29tcG9zaXRl
RWRpdENvbW1hbmQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBSZWZQ
dHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlvbjsKIH07CiAKK2lubGluZSBF
ZGl0Q29tbWFuZENvbXBvc2l0aW9uKiB0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24oRWRpdENvbW1h
bmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNvbW1hbmQtPmlzRWRpdENvbW1hbmRDb21wb3Np
dGlvbigpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWRpdENvbW1hbmRDb21wb3NpdGlvbio+
KGNvbW1hbmQpOworfQorCitpbmxpbmUgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHRvQ29tcG9zaXRl
RWRpdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNvbW1hbmQt
PmlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBv
c2l0ZUVkaXRDb21tYW5kKj4oY29tbWFuZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIENvbXBvc2l0ZUVkaXRDb21tYW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlQnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTAy
MzIzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb21wb3NpdGVFZGl0Q29tbWFuZC5oIgogI2luY2x1
ZGUgIkRlbGV0ZUJ1dHRvbi5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRWRp
dG9yLmgiCkBAIC0zNjAsMTkgKzM2MSw0MCBAQCB2b2lkIERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6
OmRpc2FibGUoKQogICAgIG1fZGlzYWJsZVN0YWNrKys7CiB9CiAKK2NsYXNzIFJlbW92ZVRhcmdl
dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbW92ZVRhcmdldENvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW1vdmVUYXJnZXRDb21tYW5kKGRvY3VtZW50LCB0YXJnZXQpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVtb3ZlVGFyZ2V0Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQs
IFBhc3NSZWZQdHI8Tm9kZT4gdGFyZ2V0KQorICAgICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5k
KGRvY3VtZW50KQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7IH0KKworICAgIHZv
aWQgZG9BcHBseSgpCisgICAgeworICAgICAgICByZW1vdmVOb2RlKG1fdGFyZ2V0KTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fdGFyZ2V0OworfTsKKwogdm9pZCBEZWxl
dGVCdXR0b25Db250cm9sbGVyOjpkZWxldGVUYXJnZXQoKQogewogICAgIGlmICghZW5hYmxlZCgp
IHx8ICFtX3RhcmdldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPE5vZGU+IGVsZW1l
bnQgPSBtX3RhcmdldDsKICAgICBoaWRlKCk7CiAKICAgICAvLyBCZWNhdXNlIHRoZSBkZWxldGlv
biBVSSBvbmx5IGFwcGVhcnMgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGVudGlyZWx5CiAgICAgLy8g
d2l0aGluIHRoZSB0YXJnZXQsIHdlIHVuY29uZGl0aW9uYWxseSB1cGRhdGUgdGhlIHNlbGVjdGlv
biB0byBiZQogICAgIC8vIGEgY2FyZXQgd2hlcmUgdGhlIHRhcmdldCBoYWQgYmVlbi4KLSAgICBQ
b3NpdGlvbiBwb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShlbGVtZW50LmdldCgpKTsK
LSAgICBhcHBseUNvbW1hbmQoUmVtb3ZlTm9kZUNvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LnJlbGVh
c2UoKSkpOworICAgIFBvc2l0aW9uIHBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKG1f
dGFyZ2V0LmdldCgpKTsKKyAgICBhcHBseUNvbW1hbmQoUmVtb3ZlVGFyZ2V0Q29tbWFuZDo6Y3Jl
YXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIG1fdGFyZ2V0KSk7CiAgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFNlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24ocG9zKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMDIzMjMpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVkaXRDb21tYW5kOjpFZGl0
Q29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQpIAorRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgLCBtX3Bh
cmVudCgwKQogewpAQCAtNTAsNiArNTAsMTYgQEAgRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERv
Y3VtZW50KiBkb2N1bQogICAgIHNldEVuZGluZ1NlbGVjdGlvbihtX3N0YXJ0aW5nU2VsZWN0aW9u
KTsKIH0KIAorRWRpdENvbW1hbmQ6OkVkaXRDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc3RhcnRpbmdTZWxlY3Rpb24sIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIGVuZGluZ1NlbGVjdGlvbikKKyAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAg
LCBtX3BhcmVudCgwKQoreworICAgIEFTU0VSVChtX2RvY3VtZW50KTsKKyAgICBBU1NFUlQobV9k
b2N1bWVudC0+ZnJhbWUoKSk7CisgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc3RhcnRpbmdTZWxl
Y3Rpb24pOworICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24pOworfQorCiBF
ZGl0Q29tbWFuZDo6fkVkaXRDb21tYW5kKCkKIHsKIH0KQEAgLTYyLDYgKzcyLDcgQEAgdm9pZCBF
ZGl0Q29tbWFuZDo6YXBwbHkoKQogICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1l
KCk7CiAgICAgCiAgICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5kKCkpIHsKKyAgICAgICAgQVNTRVJU
KGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CiAgICAgICAgIGlmICghZW5kaW5nU2VsZWN0aW9u
KCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICAgICAgc3dpdGNoIChlZGl0
aW5nQWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEVkaXRBY3Rpb25UeXBpbmc6CkBA
IC03Niw2ICs4Nyw3IEBAIHZvaWQgRWRpdENvbW1hbmQ6OmFwcGx5KCkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHRvQ29tcG9z
aXRlRWRpdENvbW1hbmQodGhpcyktPmVuc3VyZUNvbXBvc2l0aW9uKCk7CiAgICAgfQogICAgIAog
ICAgIC8vIENoYW5nZXMgdG8gdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0
aGUgbGFzdCBlZGl0aW5nIG9wZXJhdGlvbiB0aGF0IApAQCAtOTQsMTAgKzEwNiwxMSBAQCB2b2lk
IEVkaXRDb21tYW5kOjphcHBseSgpCiAgICAgfQogCiAgICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5k
KCkpIHsKKyAgICAgICAgQVNTRVJUKGlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSk7CiAgICAgICAg
IC8vIE9ubHkgbmVlZCB0byBjYWxsIGFwcGxpZWRFZGl0aW5nIGZvciB0b3AtbGV2ZWwgY29tbWFu
ZHMsIGFuZCBUeXBpbmdDb21tYW5kcyBkbyBpdCBvbiB0aGVpcgogICAgICAgICAvLyBvd24gKHNl
ZSBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQpLgogICAgICAgICBpZiAo
IWlzVHlwaW5nQ29tbWFuZCgpKQotICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5hcHBsaWVk
RWRpdGluZyh0aGlzKTsKKyAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+YXBwbGllZEVkaXRp
bmcodG9Db21wb3NpdGVFZGl0Q29tbWFuZCh0aGlzKSk7CiAgICAgfQogCiAgICAgc2V0U2hvdWxk
UmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoZmFsc2UpOwpAQCAtMTIyLDggKzEzNSw4IEBA
IHZvaWQgRWRpdENvbW1hbmQ6OnVuYXBwbHkoKQogICAgIGRvVW5hcHBseSgpOwogICAgIGRlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXItPmVuYWJsZSgpOwogCi0gICAgaWYgKGlzVG9wTGV2ZWxDb21tYW5k
KCkpCi0gICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+dW5hcHBsaWVkRWRpdGluZyh0aGlzKTsKKyAg
ICBpZiAoaXNFZGl0Q29tbWFuZENvbXBvc2l0aW9uKCkpCisgICAgICAgIGZyYW1lLT5lZGl0b3Io
KS0+dW5hcHBsaWVkRWRpdGluZyh0b0VkaXRDb21tYW5kQ29tcG9zaXRpb24odGhpcykpOwogfQog
CiB2b2lkIEVkaXRDb21tYW5kOjpyZWFwcGx5KCkKQEAgLTE0NSw4ICsxNTgsOCBAQCB2b2lkIEVk
aXRDb21tYW5kOjpyZWFwcGx5KCkKICAgICBkb1JlYXBwbHkoKTsKICAgICBkZWxldGVCdXR0b25D
b250cm9sbGVyLT5lbmFibGUoKTsKIAotICAgIGlmIChpc1RvcExldmVsQ29tbWFuZCgpKQotICAg
ICAgICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBwbGllZEVkaXRpbmcodGhpcyk7CisgICAgaWYgKGlz
RWRpdENvbW1hbmRDb21wb3NpdGlvbigpKQorICAgICAgICBmcmFtZS0+ZWRpdG9yKCktPnJlYXBw
bGllZEVkaXRpbmcodG9FZGl0Q29tbWFuZENvbXBvc2l0aW9uKHRoaXMpKTsKIH0KIAogdm9pZCBF
ZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKQEAgLTE1OSwxMCArMTcyLDIyIEBAIEVkaXRBY3Rpb24g
RWRpdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSAKICAgICByZXR1cm4gRWRpdEFjdGlvblVuc3Bl
Y2lmaWVkOwogfQogCitzdGF0aWMgaW5saW5lIEVkaXRDb21tYW5kQ29tcG9zaXRpb24qIGNvbXBv
c2l0aW9uSWZQb3NzaWJsZShFZGl0Q29tbWFuZCogY29tbWFuZCkKK3sKKyAgICBpZiAoIWNvbW1h
bmQtPmlzQ29tcG9zaXRlRWRpdENvbW1hbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHRvQ29tcG9zaXRlRWRpdENvbW1hbmQoY29tbWFuZCktPmNvbXBvc2l0aW9uKCk7Cit9CisK
IHZvaWQgRWRpdENvbW1hbmQ6OnNldFN0YXJ0aW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHMpCiB7CiAgICAgRWxlbWVudCogcm9vdCA9IHMucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgIGZvciAoRWRpdENvbW1hbmQqIGNtZCA9IHRoaXM7IDsgY21kID0gY21kLT5tX3BhcmVu
dCkgeworICAgICAgICBpZiAoRWRpdENvbW1hbmRDb21wb3NpdGlvbiogY29tcG9zaXRpb24gPSBj
b21wb3NpdGlvbklmUG9zc2libGUoY21kKSkgeworICAgICAgICAgICAgQVNTRVJUKGNtZC0+aXNU
b3BMZXZlbENvbW1hbmQoKSk7CisgICAgICAgICAgICBjb21wb3NpdGlvbi0+bV9zdGFydGluZ1Nl
bGVjdGlvbiA9IHM7CisgICAgICAgICAgICBjb21wb3NpdGlvbi0+bV9zdGFydGluZ1Jvb3RFZGl0
YWJsZUVsZW1lbnQgPSByb290OworICAgICAgICB9CiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1Nl
bGVjdGlvbiA9IHM7CiAgICAgICAgIGNtZC0+bV9zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQg
PSByb290OwogICAgICAgICBpZiAoIWNtZC0+bV9wYXJlbnQgfHwgY21kLT5tX3BhcmVudC0+aXNG
aXJzdENvbW1hbmQoY21kKSkKQEAgLTE3NCw2ICsxOTksMTEgQEAgdm9pZCBFZGl0Q29tbWFuZDo6
c2V0RW5kaW5nU2VsZWN0aW9uKGNvbgogewogICAgIEVsZW1lbnQqIHJvb3QgPSBzLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKTsKICAgICBmb3IgKEVkaXRDb21tYW5kKiBjbWQgPSB0aGlzOyBjbWQ7IGNt
ZCA9IGNtZC0+bV9wYXJlbnQpIHsKKyAgICAgICAgaWYgKEVkaXRDb21tYW5kQ29tcG9zaXRpb24q
IGNvbXBvc2l0aW9uID0gY29tcG9zaXRpb25JZlBvc3NpYmxlKGNtZCkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChjbWQtPmlzVG9wTGV2ZWxDb21tYW5kKCkpOworICAgICAgICAgICAgY29tcG9zaXRp
b24tPm1fZW5kaW5nU2VsZWN0aW9uID0gczsKKyAgICAgICAgICAgIGNvbXBvc2l0aW9uLT5tX2Vu
ZGluZ1Jvb3RFZGl0YWJsZUVsZW1lbnQgPSByb290OworICAgICAgICB9CiAgICAgICAgIGNtZC0+
bV9lbmRpbmdTZWxlY3Rpb24gPSBzOwogICAgICAgICBjbWQtPm1fZW5kaW5nUm9vdEVkaXRhYmxl
RWxlbWVudCA9IHJvb3Q7CiAgICAgfQpAQCAtMjEwLDEzICsyNDAsMTUgQEAgdm9pZCBFZGl0Q29t
bWFuZDo6dXBkYXRlTGF5b3V0KCkgY29uc3QKIAogdm9pZCBFZGl0Q29tbWFuZDo6c2V0UGFyZW50
KENvbXBvc2l0ZUVkaXRDb21tYW5kKiBwYXJlbnQpCiB7Ci0gICAgQVNTRVJUKHBhcmVudCk7Ci0g
ICAgQVNTRVJUKCFtX3BhcmVudCk7CisgICAgQVNTRVJUKChwYXJlbnQgJiYgIW1fcGFyZW50KSB8
fCAoIXBhcmVudCAmJiBtX3BhcmVudCkpOworICAgIEFTU0VSVCghcGFyZW50IHx8ICFpc0NvbXBv
c2l0ZUVkaXRDb21tYW5kKCkgfHwgIXRvQ29tcG9zaXRlRWRpdENvbW1hbmQodGhpcyktPmNvbXBv
c2l0aW9uKCkpOwogICAgIG1fcGFyZW50ID0gcGFyZW50OwotICAgIG1fc3RhcnRpbmdTZWxlY3Rp
b24gPSBwYXJlbnQtPm1fZW5kaW5nU2VsZWN0aW9uOwotICAgIG1fZW5kaW5nU2VsZWN0aW9uID0g
cGFyZW50LT5tX2VuZGluZ1NlbGVjdGlvbjsKLSAgICBtX3N0YXJ0aW5nUm9vdEVkaXRhYmxlRWxl
bWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50OwotICAgIG1fZW5kaW5n
Um9vdEVkaXRhYmxlRWxlbWVudCA9IHBhcmVudC0+bV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50
OworICAgIGlmIChwYXJlbnQpIHsKKyAgICAgICAgbV9zdGFydGluZ1NlbGVjdGlvbiA9IHBhcmVu
dC0+bV9lbmRpbmdTZWxlY3Rpb247CisgICAgICAgIG1fZW5kaW5nU2VsZWN0aW9uID0gcGFyZW50
LT5tX2VuZGluZ1NlbGVjdGlvbjsKKyAgICAgICAgbV9zdGFydGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQgPSBwYXJlbnQtPm1fZW5kaW5nUm9vdEVkaXRhYmxlRWxlbWVudDsKKyAgICAgICAgbV9lbmRp
bmdSb290RWRpdGFibGVFbGVtZW50ID0gcGFyZW50LT5tX2VuZGluZ1Jvb3RFZGl0YWJsZUVsZW1l
bnQ7CisgICAgfQogfQogCiB2b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPEVkaXRDb21tYW5k
PiBjb21tYW5kKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuaAkocmV2aXNp
b24gMTAyMzIzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwxMCArNTIsMTMgQEAgcHVibGljOgogCiAgICAgRWxlbWVudCogc3Rh
cnRpbmdSb290RWRpdGFibGVFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydGluZ1Jvb3RF
ZGl0YWJsZUVsZW1lbnQuZ2V0KCk7IH0KICAgICBFbGVtZW50KiBlbmRpbmdSb290RWRpdGFibGVF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbmRpbmdSb290RWRpdGFibGVFbGVtZW50LmdldCgp
OyB9Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTaW1wbGVFZGl0Q29tbWFuZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tcG9zaXRlRWRpdENvbW1h
bmQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VkaXRDb21t
YW5kQ29tcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1R5cGluZ0NvbW1hbmQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDcmVhdGVMaW5r
Q29tbWFuZCgpIGNvbnN0OwotICAgIAorCiAgICAgdmlydHVhbCBib29sIHByZXNlcnZlc1R5cGlu
Z1N0eWxlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVG9wTGV2ZWxDb21tYW5kKCkgY29uc3QgeyBy
ZXR1cm4gIW1fcGFyZW50OyB9CkBAIC02NSw4ICs2OCwxMCBAQCBwdWJsaWM6CiAKIHByb3RlY3Rl
ZDoKICAgICBFZGl0Q29tbWFuZChEb2N1bWVudCopOworICAgIEVkaXRDb21tYW5kKERvY3VtZW50
KiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIAog
ICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7
IH0KKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnQ7IH0KIAogICAgIHZvaWQgc2V0U3RhcnRpbmdTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYpOwogICAgIHZvaWQgc2V0RW5kaW5nU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKTsKQEAgLTkxLDggKzk2LDE2IEBAIHByaXZhdGU6CiBjbGFzcyBTaW1wbGVFZGl0Q29t
bWFuZCA6IHB1YmxpYyBFZGl0Q29tbWFuZCB7CiBwcm90ZWN0ZWQ6CiAgICAgU2ltcGxlRWRpdENv
bW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50KSA6IEVkaXRDb21tYW5kKGRvY3VtZW50KSB7IH0KK3By
aXZhdGU6CisgICAgdmlydHVhbCBib29sIGlzU2ltcGxlRWRpdENvbW1hbmQoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiB0cnVlOyB9CiB9OwogCitpbmxpbmUgU2ltcGxlRWRpdENvbW1hbmQqIHRv
U2ltcGxlRWRpdENvbW1hbmQoRWRpdENvbW1hbmQqIGNvbW1hbmQpCit7CisgICAgQVNTRVJUKGNv
bW1hbmQtPmlzU2ltcGxlRWRpdENvbW1hbmQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNp
bXBsZUVkaXRDb21tYW5kKj4oY29tbWFuZCk7Cit9CisKIHZvaWQgYXBwbHlDb21tYW5kKFBhc3NS
ZWZQdHI8RWRpdENvbW1hbmQ+KTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTAyMzIzKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NjUsNyArODY1LDcgQEAg
c3RhdGljIHZvaWQgZGlzcGF0Y2hFZGl0YWJsZUNvbnRlbnRDaGFuZwogICAgICAgICBlbmRSb290
LT5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmtpdEVkaXRhYmxl
Q29udGVudENoYW5nZWRFdmVudCwgZmFsc2UsIGZhbHNlKSwgZWMpOwogfQogCi12b2lkIEVkaXRv
cjo6YXBwbGllZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4gY21kKQordm9pZCBFZGl0
b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+IGNtZCkK
IHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIApAQCAtODg4LDEy
ICs4ODgsMTIgQEAgdm9pZCBFZGl0b3I6OmFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RQogICAg
ICAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgbGFzdCBjb21tYW5kCiAgICAgICAgIG1fbGFzdEVk
aXRDb21tYW5kID0gY21kOwogICAgICAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgICAgICBjbGll
bnQoKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhtX2xhc3RFZGl0Q29tbWFuZCk7CisgICAgICAg
ICAgICBjbGllbnQoKS0+cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyh0b0NvbXBvc2l0ZUVkaXRDb21t
YW5kKG1fbGFzdEVkaXRDb21tYW5kLmdldCgpKS0+ZW5zdXJlQ29tcG9zaXRpb24oKSk7CiAgICAg
fQogICAgIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cyhuZXdTZWxlY3Rpb24pOwogfQogCi12b2lk
IEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPiBjbWQpCit2
b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kQ29tcG9z
aXRpb24+IGNtZCkKIHsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
ICAgICAKQEAgLTkwOSw3ICs5MDksNyBAQCB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkRWRpdGluZyhQ
YXNzUmVmUHRyCiAgICAgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKG5ld1NlbGVjdGlvbik7CiB9
CiAKLXZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+
IGNtZCkKK3ZvaWQgRWRpdG9yOjpyZWFwcGxpZWRFZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1h
bmRDb21wb3NpdGlvbj4gY21kKQogewogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxh
eW91dCgpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCShyZXZpc2lvbiAxMDIz
MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OCw5ICs0OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1N0eWxlRGVj
bGFyYXRpb247CiBjbGFzcyBDbGlwYm9hcmQ7Ci1jbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyOworY2xhc3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7CiBjbGFzcyBEZWxldGVCdXR0b25D
b250cm9sbGVyOwogY2xhc3MgRWRpdENvbW1hbmQ7CitjbGFzcyBFZGl0Q29tbWFuZENvbXBvc2l0
aW9uOwogY2xhc3MgRWRpdG9yQ2xpZW50OwogY2xhc3MgRWRpdG9ySW50ZXJuYWxDb21tYW5kOwog
Y2xhc3MgRnJhbWU7CkBAIC02MCwxMCArNjEsMTEgQEAgY2xhc3MgS2lsbFJpbmc7CiBjbGFzcyBQ
YXN0ZWJvYXJkOwogY2xhc3MgU2ltcGxlRm9udERhdGE7CiBjbGFzcyBTcGVsbENoZWNrZXI7Citj
bGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyOwogY2xhc3MgVGV4dDsKIGNsYXNzIFRl
eHRDaGVja2VyQ2xpZW50Owotc3RydWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIGNsYXNzIFRleHRF
dmVudDsKK3N0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKIHN0cnVjdCBDb21wb3NpdGlvblVu
ZGVybGluZSB7CiAgICAgQ29tcG9zaXRpb25VbmRlcmxpbmUoKSAKQEAgLTE2NCw5ICsxNjYsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVN0eWxlVG9TZWxlY3Rpb24oQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIEVkaXRBY3Rpb24pOwogICAgIHZvaWQgYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0
aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uKTsKIAotICAgIHZvaWQgYXBwbGll
ZEVkaXRpbmcoUGFzc1JlZlB0cjxFZGl0Q29tbWFuZD4pOwotICAgIHZvaWQgdW5hcHBsaWVkRWRp
dGluZyhQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCByZWFwcGxpZWRFZGl0aW5n
KFBhc3NSZWZQdHI8RWRpdENvbW1hbmQ+KTsKKyAgICB2b2lkIGFwcGxpZWRFZGl0aW5nKFBhc3NS
ZWZQdHI8Q29tcG9zaXRlRWRpdENvbW1hbmQ+KTsKKyAgICB2b2lkIHVuYXBwbGllZEVkaXRpbmco
UGFzc1JlZlB0cjxFZGl0Q29tbWFuZENvbXBvc2l0aW9uPik7CisgICAgdm9pZCByZWFwcGxpZWRF
ZGl0aW5nKFBhc3NSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4pOwogICAgIHZvaWQgdW5h
cHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9m
Q29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uKTsKIAogICAgIHZvaWQgc2V0U2hvdWxkU3R5bGVXaXRoQ1NTKGJvb2wgZmxhZykgeyBtX3No
b3VsZFN0eWxlV2l0aENTUyA9IGZsYWc7IH0K
</data>
<flag name="review"
          id="118074"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>