<?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>86426</bug_id>
          
          <creation_ts>2012-05-14 18:59:32 -0700</creation_ts>
          <short_desc>Refactor SVG parts of Node::addEventListener/removeEventListener</short_desc>
          <delta_ts>2012-05-15 10:04:30 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Rob Buis">rwlbuis</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>623561</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-14 18:59:32 -0700</bug_when>
    <thetext>The SVG code in  Node::addEventListener/removeEventListener does not seem to have to be in Node.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623562</commentid>
    <comment_count>1</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-14 19:02:43 -0700</bug_when>
    <thetext>Benefits of this approach:

- code in Node::addEventListener/removeEventListener is easier to read
- SVG parts can be hosted in svg/, much more intuitive
- no SVG includes in Node.cpp
- SVGElement() checks not needed anymore, since it is called from SVGElement.

Drawback is losing the static on tryAddEventListener/tryRemoveEventListener, not sure that would lead to performance loss though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623567</commentid>
    <comment_count>2</comment_count>
      <attachid>141842</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-14 19:11:17 -0700</bug_when>
    <thetext>Created attachment 141842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623570</commentid>
    <comment_count>3</comment_count>
      <attachid>141842</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-14 19:26:24 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

Attachment 141842 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12701297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623572</commentid>
    <comment_count>4</comment_count>
      <attachid>141842</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-14 19:33:49 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

Attachment 141842 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12679764</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623592</commentid>
    <comment_count>5</comment_count>
      <attachid>141842</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-14 20:25:36 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

Attachment 141842 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12684662</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623601</commentid>
    <comment_count>6</comment_count>
      <attachid>141842</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-14 20:35:50 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

Attachment 141842 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12680757</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623648</commentid>
    <comment_count>7</comment_count>
      <attachid>141842</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-14 22:37:03 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

Attachment 141842 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12705297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623728</commentid>
    <comment_count>8</comment_count>
      <attachid>141842</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-05-15 00:11:09 -0700</bug_when>
    <thetext>Comment on attachment 141842
Patch

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

Great patch, long time nobody looked at this piece of code! You need to look into the build issues, reported by EWS, and I have some further suggestions:

&gt; Source/WebCore/svg/SVGElement.cpp:351
&gt; +static inline HashSet&lt;SVGElementInstance*&gt; instancesForSVGElement(Node* node)

While you&apos;re at it: stop copying the HashSet, instead pass it as reference. Also use SVGElement* as parameter, instead of Node*.
static inline void collectInstancesForSVGElement(SVGElement* element, HashSet&lt;SVGElementInstance*&gt;&amp; instances)

&gt; Source/WebCore/svg/SVGElement.cpp:369
&gt; +extern inline bool tryAddEventListener(Node* targetNode, const AtomicString&amp; eventType, PassRefPtr&lt;EventListener&gt;, bool useCapture);

I&apos;d rather expose tryAddEventListener as protected method in Node.h. But make sure its still inlined, so there&apos;s no performance regression for Node::addEventLIstener.

&gt; Source/WebCore/svg/SVGElement.cpp:398
&gt; +extern inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&amp; eventType, EventListener*, bool useCapture);

Ditto.

&gt; Source/WebCore/svg/SVGElement.h:117
&gt; +    virtual bool addEventListener(const AtomicString&amp; eventType, PassRefPtr&lt;EventListener&gt;, bool useCapture);
&gt; +    virtual bool removeEventListener(const AtomicString&amp; eventType, EventListener*, bool useCapture);

I think you should mark them as OVERRIDE, that seems to be new idiom when overriding parent classes virtual functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623950</commentid>
    <comment_count>9</comment_count>
      <attachid>141938</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-15 05:54:35 -0700</bug_when>
    <thetext>Created attachment 141938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624006</commentid>
    <comment_count>10</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-15 06:42:38 -0700</bug_when>
    <thetext>Hi Niko,

(In reply to comment #8)
&gt; (From update of attachment 141842 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141842&amp;action=review
&gt; 
&gt; Great patch, long time nobody looked at this piece of code! You need to look into the build issues, reported by EWS, and I have some further suggestions:
&gt; 
&gt; &gt; Source/WebCore/svg/SVGElement.cpp:351
&gt; &gt; +static inline HashSet&lt;SVGElementInstance*&gt; instancesForSVGElement(Node* node)
&gt; 
&gt; While you&apos;re at it: stop copying the HashSet, instead pass it as reference. Also use SVGElement* as parameter, instead of Node*.
&gt; static inline void collectInstancesForSVGElement(SVGElement* element, HashSet&lt;SVGElementInstance*&gt;&amp; instances)
&gt; 
&gt; &gt; Source/WebCore/svg/SVGElement.cpp:369
&gt; &gt; +extern inline bool tryAddEventListener(Node* targetNode, const AtomicString&amp; eventType, PassRefPtr&lt;EventListener&gt;, bool useCapture);
&gt; 
&gt; I&apos;d rather expose tryAddEventListener as protected method in Node.h. But make sure its still inlined, so there&apos;s no performance regression for Node::addEventLIstener.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGElement.cpp:398
&gt; &gt; +extern inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&amp; eventType, EventListener*, bool useCapture);
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/svg/SVGElement.h:117
&gt; &gt; +    virtual bool addEventListener(const AtomicString&amp; eventType, PassRefPtr&lt;EventListener&gt;, bool useCapture);
&gt; &gt; +    virtual bool removeEventListener(const AtomicString&amp; eventType, EventListener*, bool useCapture);
&gt; 
&gt; I think you should mark them as OVERRIDE, that seems to be new idiom when overriding parent classes virtual functions.


Good points! I think all of the above is fixed now with my latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624012</commentid>
    <comment_count>11</comment_count>
      <attachid>141938</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-15 06:46:42 -0700</bug_when>
    <thetext>Comment on attachment 141938
Patch

Attachment 141938 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12679933</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624018</commentid>
    <comment_count>12</comment_count>
      <attachid>141938</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-15 06:52:07 -0700</bug_when>
    <thetext>Comment on attachment 141938
Patch

Attachment 141938 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12704407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624029</commentid>
    <comment_count>13</comment_count>
      <attachid>141938</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-15 06:57:29 -0700</bug_when>
    <thetext>Comment on attachment 141938
Patch

Attachment 141938 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12701485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624072</commentid>
    <comment_count>14</comment_count>
      <attachid>141938</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-15 07:38:28 -0700</bug_when>
    <thetext>Comment on attachment 141938
Patch

Attachment 141938 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12709079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624085</commentid>
    <comment_count>15</comment_count>
      <attachid>141938</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-15 07:48:04 -0700</bug_when>
    <thetext>Comment on attachment 141938
Patch

Attachment 141938 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12680885</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624161</commentid>
    <comment_count>16</comment_count>
      <attachid>141985</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-15 09:07:14 -0700</bug_when>
    <thetext>Created attachment 141985
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624190</commentid>
    <comment_count>17</comment_count>
      <attachid>141985</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2012-05-15 09:47:38 -0700</bug_when>
    <thetext>Comment on attachment 141985
Patch

r=me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624206</commentid>
    <comment_count>18</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2012-05-15 10:04:30 -0700</bug_when>
    <thetext>Committed r117086: &lt;http://trac.webkit.org/changeset/117086&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141842</attachid>
            <date>2012-05-14 19:11:17 -0700</date>
            <delta_ts>2012-05-15 05:53:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86426-20120514221105.patch</filename>
            <type>text/plain</type>
            <size>12999</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2OTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmM1YmExNjljMGY0ODdi
ZDUwODBlMDNlNjQwMzg3MmI4NzNkMGMxMi4uYjJhYThiMzE0YjJkNmQzZTAxMGNjNzY0OGQwMDRj
NDhjMmZiOTQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA1LTE0ICBSb2Ig
QnVpcyAgPHJidWlzQHJpbS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU1ZHIHBhcnRzIG9mIE5v
ZGU6OmFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0ZW5lcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY0MjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIFNWRyBwYXJ0cyBvZiBOb2RlOjph
ZGRFdmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIgaW50byBzdmcvCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBzaW5jZSBubyBjaGFuZ2UgaW4gYmVoYXZpb3IsIGp1c3QgcmVmYWN0b3Jp
bmcuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0cnlBZGRF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmFkZEV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAoV2ViQ29yZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbnN0YW5jZXNGb3JTVkdFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YWRkRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjpyZW1vdmVFdmVudExpc3Rl
bmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAoU1ZHRWxlbWVudCk6
CisKIDIwMTItMDUtMTMgIFJvYiBCdWlzICA8cmJ1aXNAcmltLmNvbT4KIAogICAgICAgICBVc2Ug
ZW1wdHlTdHJpbmcgaW5zdGVhZCBvZiBTdHJpbmcoIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggYjA3
NjBhM2U2MjczYmIzNzMzMGVjMWQ0MWIxZWI0Nzg2MTlmYzk3Yy4uZmJjMTg0Njc3MzY4NjViYjdk
YzVmNjc1NWM0MjkzMDQwZWM4MjY1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTEyLDExICsxMTIs
NiBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNlbmRpZgogCi0jaWYgRU5B
QkxFKFNWRykKLSNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2UuaCIKLSNpbmNsdWRlICJTVkdV
c2VFbGVtZW50LmgiCi0jZW5kaWYKLQogI2lmIFVTRShKU0MpCiAjaW5jbHVkZSA8cnVudGltZS9K
U0dsb2JhbERhdGEuaD4KICNlbmRpZgpAQCAtMjQyNSwyNyArMjQyMCw3IEBAIHZvaWQgTm9kZTo6
ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KQogI2VuZGlmCiB9CiAK
LSNpZiBFTkFCTEUoU1ZHKQotc3RhdGljIGlubGluZSBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5j
ZSo+IGluc3RhbmNlc0ZvclNWR0VsZW1lbnQoTm9kZSogbm9kZSkKLXsKLSAgICBIYXNoU2V0PFNW
R0VsZW1lbnRJbnN0YW5jZSo+IGluc3RhbmNlczsKLSAKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAg
aWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSB8fCBub2RlLT5zaGFkb3dUcmVlUm9vdE5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4oKTsKLQotICAgIFNW
R0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4obm9kZSk7Ci0gICAg
aWYgKCFlbGVtZW50LT5pc1N0eWxlZCgpKQotICAgICAgICByZXR1cm4gSGFzaFNldDxTVkdFbGVt
ZW50SW5zdGFuY2UqPigpOwotCi0gICAgU1ZHU3R5bGVkRWxlbWVudCogc3R5bGVkRWxlbWVudCA9
IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVtZW50KTsKLSAgICBBU1NFUlQoIXN0
eWxlZEVsZW1lbnQtPmluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSk7Ci0KLSAgICByZXR1cm4gc3R5
bGVkRWxlbWVudC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBp
bmxpbmUgYm9vbCB0cnlBZGRFdmVudExpc3RlbmVyKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
LCBib29sIHVzZUNhcHR1cmUpCitpbmxpbmUgYm9vbCB0cnlBZGRFdmVudExpc3RlbmVyKE5vZGUq
IHRhcmdldE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAgaWYgKCF0YXJn
ZXROb2RlLT5FdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVy
LCB1c2VDYXB0dXJlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ2MywzOSArMjQzOCwx
MCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJnZXRO
b2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZQogCiBib29sIE5vZGU6OmFkZEV2ZW50TGlzdGVu
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4gbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSNpZiAhRU5BQkxFKFNWRykKICAgICBy
ZXR1cm4gdHJ5QWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VD
YXB0dXJlKTsKLSNlbHNlCi0gICAgaWYgKCFpc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IHRyeUFkZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVy
ZSk7Ci0KLSAgICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IGluc3RhbmNlcyA9IGluc3Rh
bmNlc0ZvclNWR0VsZW1lbnQodGhpcyk7Ci0gICAgaWYgKGluc3RhbmNlcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiB0cnlBZGRFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVu
ZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9y
UmVndWxhclRyZWUgPSBsaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXJGb3JTaGFkb3dUcmVlID0gbGlzdGVuZXJGb3JSZWd1bGFyVHJlZTsKLQotICAgIC8vIEFkZCBl
dmVudCBsaXN0ZW5lciB0byByZWd1bGFyIERPTSBlbGVtZW50Ci0gICAgaWYgKCF0cnlBZGRFdmVu
dExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXJGb3JSZWd1bGFyVHJlZS5yZWxlYXNl
KCksIHVzZUNhcHR1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGQgZXZl
bnQgbGlzdGVuZXIgdG8gYWxsIHNoYWRvdyB0cmVlIERPTSBlbGVtZW50IGluc3RhbmNlcwotICAg
IGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewotICAgICAgICBBU1NFUlQoKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCkpOwotICAgICAgICBB
U1NFUlQoKCppdCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gdGhpcyk7Ci0KLSAgICAgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9yQ3VycmVudFNoYWRvd1RyZWVFbGVtZW50
ID0gbGlzdGVuZXJGb3JTaGFkb3dUcmVlOwotICAgICAgICBib29sIHJlc3VsdCA9IHRyeUFkZEV2
ZW50TGlzdGVuZXIoKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCksIGV2ZW50VHlwZSwgbGlzdGVu
ZXJGb3JDdXJyZW50U2hhZG93VHJlZUVsZW1lbnQucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci0jZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92ZUV2ZW50TGlz
dGVuZXIoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2
ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCitpbmxpbmUgYm9vbCB0cnlS
ZW1vdmVFdmVudExpc3RlbmVyKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewog
ICAgIGlmICghdGFyZ2V0Tm9kZS0+RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZl
bnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTI1MTQsNTUgKzI0NjAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0
ZW5lcihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmCiAKIGJvb2wgTm9kZTo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSNpZiAhRU5BQkxFKFNWRykK
ICAgICByZXR1cm4gdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsKLSNlbHNlCi0gICAgaWYgKCFpc1NWR0VsZW1lbnQoKSkKLSAgICAg
ICAgcmV0dXJuIHRyeVJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5l
ciwgdXNlQ2FwdHVyZSk7Ci0KLSAgICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IGluc3Rh
bmNlcyA9IGluc3RhbmNlc0ZvclNWR0VsZW1lbnQodGhpcyk7Ci0gICAgaWYgKGluc3RhbmNlcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIGV2
ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgLy8gRXZlbnRUYXJnZXQ6OnJl
bW92ZUV2ZW50TGlzdGVuZXIgY3JlYXRlcyBhIFBhc3NSZWZQdHIgYXJvdW5kIHRoZSBnaXZlbiBF
dmVudExpc3RlbmVyCi0gICAgLy8gb2JqZWN0IHdoZW4gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgUmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIgb2JqZWN0IHVzZWQgdG8gbG9vayB1cCB0aGUKLSAgICAvLyBl
dmVudCBsaXN0ZW5lciBpbiBhIGNhY2hlLiBJZiB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY2FsbCBy
ZW1vdmVFdmVudExpc3RlbmVyKCkgbXVsdGlwbGUKLSAgICAvLyB0aW1lcyBvbiBkaWZmZXJlbnQg
bm9kZXMsIHdlIGhhdmUgdG8gZGVsYXkgaXRzIGltbWVkaWF0ZSBkZXN0cnVjdGlvbiwgd2hpY2gg
d291bGQgaGFwcGVuCi0gICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgYmVsb3cuCi0gICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IHByb3RlY3RvcihsaXN0ZW5lcik7Ci0KLSAgICAvLyBSZW1vdmUg
ZXZlbnQgbGlzdGVuZXIgZnJvbSByZWd1bGFyIERPTSBlbGVtZW50Ci0gICAgaWYgKCF0cnlSZW1v
dmVFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJv
bSBhbGwgc2hhZG93IHRyZWUgRE9NIGVsZW1lbnQgaW5zdGFuY2VzCi0gICAgY29uc3QgSGFzaFNl
dDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEFT
U0VSVCgoKml0KS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0aGlzKTsKLQotICAgICAgICBT
VkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgp
OwotICAgICAgICBBU1NFUlQoc2hhZG93VHJlZUVsZW1lbnQpOwotCi0gICAgICAgIGlmICh0cnlS
ZW1vdmVFdmVudExpc3RlbmVyKHNoYWRvd1RyZWVFbGVtZW50LCBldmVudFR5cGUsIGxpc3RlbmVy
LCB1c2VDYXB0dXJlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRoaXMg
Y2FzZSBjYW4gb25seSBiZSBoaXQgZm9yIGV2ZW50IGxpc3RlbmVycyBjcmVhdGVkIGZyb20gbWFy
a3VwCi0gICAgICAgIEFTU0VSVChsaXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSk7Ci0K
LSAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGxpc3RlbmVyICdsaXN0ZW5lcicgaGFzIGJlZW4gY3Jl
YXRlZCBmcm9tIG1hcmt1cCBhbmQgaGFzIGJlZW4gZmlyZWQgYmVmb3JlCi0gICAgICAgIC8vIHRo
ZW4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBt
X2pzRnVuY3Rpb24gb2YgdGhhdCBsaXN0ZW5lcgotICAgICAgICAvLyBoYXMgYmVlbiBjcmVhdGVk
IChyZWFkOiBpdCdzIG5vdCAwIGFueW1vcmUpLiBEdXJpbmcgc2hhZG93IHRyZWUgY3JlYXRpb24s
IHRoZSBldmVudAotICAgICAgICAvLyBsaXN0ZW5lciBET00gYXR0cmlidXRlIGhhcyBiZWVuIGNs
b25lZCwgYW5kIGFub3RoZXIgZXZlbnQgbGlzdGVuZXIgaGFzIGJlZW4gc2V0dXAgaW4KLSAgICAg
ICAgLy8gdGhlIHNoYWRvdyB0cmVlLiBJZiB0aGF0IGV2ZW50IGxpc3RlbmVyIGhhcyBub3QgYmVl
biB1c2VkIHlldCwgbV9qc0Z1bmN0aW9uIGlzIHN0aWxsIDAsCi0gICAgICAgIC8vIGFuZCB0cnlS
ZW1vdmVFdmVudExpc3RlbmVyKCkgYWJvdmUgd2lsbCBmYWlsLiBXb3JrIGFyb3VuZCB0aGF0IHZl
cnkgc2VsZG9tIHByb2JsZW0uCi0gICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IHNoYWRv
d1RyZWVFbGVtZW50LT5ldmVudFRhcmdldERhdGEoKTsKLSAgICAgICAgQVNTRVJUKGRhdGEpOwot
Ci0gICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlRmlyc3RFdmVudExpc3RlbmVy
Q3JlYXRlZEZyb21NYXJrdXAoZXZlbnRUeXBlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LSNlbmRpZgogfQogCiBFdmVudFRhcmdldERhdGEqIE5vZGU6OmV2ZW50VGFyZ2V0RGF0YSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggZGUzODIwOWRlMDI1Y2NlMTkyOGU4YWNhNzg0
ZGY4OThkODQxN2QyOS4uZmE5YzlhMTc5Yzc4YzAzMzZkNjA1YmRlNmYwNmZjMTE1YzdlMzEyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtMzQ4LDYgKzM0OCwxMDEgQEAgYm9vbCBT
VkdFbGVtZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKQogICAgIHJldHVybiB0cnVl
OwogfQogCitzdGF0aWMgaW5saW5lIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4gaW5zdGFu
Y2VzRm9yU1ZHRWxlbWVudChOb2RlKiBub2RlKQoreworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudElu
c3RhbmNlKj4gaW5zdGFuY2VzOworCisgICAgQVNTRVJUKG5vZGUpOworICAgIGlmIChub2RlLT5z
aGFkb3dUcmVlUm9vdE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIEhhc2hTZXQ8U1ZHRWxlbWVudElu
c3RhbmNlKj4oKTsKKworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdF
bGVtZW50Kj4obm9kZSk7CisgICAgaWYgKCFlbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICBy
ZXR1cm4gSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPigpOworCisgICAgU1ZHU3R5bGVkRWxl
bWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICBBU1NFUlQoIXN0eWxlZEVsZW1lbnQtPmluc3RhbmNlVXBkYXRlc0Jsb2NrZWQo
KSk7CisKKyAgICByZXR1cm4gc3R5bGVkRWxlbWVudC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpOwor
fQorCitleHRlcm4gaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJnZXRO
b2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKworYm9vbCBTVkdFbGVtZW50OjphZGRFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgSGFzaFNldDxTVkdFbGVtZW50
SW5zdGFuY2UqPiBpbnN0YW5jZXMgPSBpbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMpOworICAg
IGlmIChpbnN0YW5jZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ5QWRkRXZlbnRMaXN0
ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKKworICAgIFJlZlB0
cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lckZvclJlZ3VsYXJUcmVlID0gbGlzdGVuZXI7CisgICAg
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9yU2hhZG93VHJlZSA9IGxpc3RlbmVyRm9y
UmVndWxhclRyZWU7CisKKyAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gcmVndWxhciBET00g
ZWxlbWVudAorICAgIGlmICghdHJ5QWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxp
c3RlbmVyRm9yUmVndWxhclRyZWUucmVsZWFzZSgpLCB1c2VDYXB0dXJlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyIHRvIGFsbCBzaGFkb3cgdHJl
ZSBET00gZWxlbWVudCBpbnN0YW5jZXMKKyAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0
YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5zaGFk
b3dUcmVlRWxlbWVudCgpKTsKKyAgICAgICAgQVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxl
bWVudCgpID09IHRoaXMpOworCisgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5l
ckZvckN1cnJlbnRTaGFkb3dUcmVlRWxlbWVudCA9IGxpc3RlbmVyRm9yU2hhZG93VHJlZTsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSB0cnlBZGRFdmVudExpc3RlbmVyKCgqaXQpLT5zaGFkb3dUcmVl
RWxlbWVudCgpLCBldmVudFR5cGUsIGxpc3RlbmVyRm9yQ3VycmVudFNoYWRvd1RyZWVFbGVtZW50
LnJlbGVhc2UoKSwgdXNlQ2FwdHVyZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCBy
ZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitleHRlcm4gaW5saW5lIGJv
b2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisKK2Jv
b2wgU1ZHRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAg
ICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IGluc3RhbmNlcyA9IGluc3RhbmNlc0ZvclNW
R0VsZW1lbnQodGhpcyk7CisgICAgaWYgKGluc3RhbmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOworCisgICAgLy8gRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIgY3Jl
YXRlcyBhIFBhc3NSZWZQdHIgYXJvdW5kIHRoZSBnaXZlbiBFdmVudExpc3RlbmVyCisgICAgLy8g
b2JqZWN0IHdoZW4gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIg
b2JqZWN0IHVzZWQgdG8gbG9vayB1cCB0aGUKKyAgICAvLyBldmVudCBsaXN0ZW5lciBpbiBhIGNh
Y2hlLiBJZiB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY2FsbCByZW1vdmVFdmVudExpc3RlbmVyKCkg
bXVsdGlwbGUKKyAgICAvLyB0aW1lcyBvbiBkaWZmZXJlbnQgbm9kZXMsIHdlIGhhdmUgdG8gZGVs
YXkgaXRzIGltbWVkaWF0ZSBkZXN0cnVjdGlvbiwgd2hpY2ggd291bGQgaGFwcGVuCisgICAgLy8g
YWZ0ZXIgdGhlIGZpcnN0IGNhbGwgYmVsb3cuCisgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHBy
b3RlY3RvcihsaXN0ZW5lcik7CisKKyAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbSBy
ZWd1bGFyIERPTSBlbGVtZW50CisgICAgaWYgKCF0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRoaXMs
IGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbSBhbGwgc2hhZG93IHRyZWUgRE9N
IGVsZW1lbnQgaW5zdGFuY2VzCisgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2Uq
Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEFTU0VSVCgoKml0KS0+Y29ycmVzcG9u
ZGluZ0VsZW1lbnQoKSA9PSB0aGlzKTsKKworICAgICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVl
RWxlbWVudCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpOworICAgICAgICBBU1NFUlQoc2hh
ZG93VHJlZUVsZW1lbnQpOworCisgICAgICAgIGlmICh0cnlSZW1vdmVFdmVudExpc3RlbmVyKHNo
YWRvd1RyZWVFbGVtZW50LCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFRoaXMgY2FzZSBjYW4gb25seSBiZSBoaXQg
Zm9yIGV2ZW50IGxpc3RlbmVycyBjcmVhdGVkIGZyb20gbWFya3VwCisgICAgICAgIEFTU0VSVChs
aXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAoKSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGV2
ZW50IGxpc3RlbmVyICdsaXN0ZW5lcicgaGFzIGJlZW4gY3JlYXRlZCBmcm9tIG1hcmt1cCBhbmQg
aGFzIGJlZW4gZmlyZWQgYmVmb3JlCisgICAgICAgIC8vIHRoZW4gSlNMYXp5RXZlbnRMaXN0ZW5l
cjo6cGFyc2VDb2RlKCkgaGFzIGJlZW4gY2FsbGVkIGFuZCBtX2pzRnVuY3Rpb24gb2YgdGhhdCBs
aXN0ZW5lcgorICAgICAgICAvLyBoYXMgYmVlbiBjcmVhdGVkIChyZWFkOiBpdCdzIG5vdCAwIGFu
eW1vcmUpLiBEdXJpbmcgc2hhZG93IHRyZWUgY3JlYXRpb24sIHRoZSBldmVudAorICAgICAgICAv
LyBsaXN0ZW5lciBET00gYXR0cmlidXRlIGhhcyBiZWVuIGNsb25lZCwgYW5kIGFub3RoZXIgZXZl
bnQgbGlzdGVuZXIgaGFzIGJlZW4gc2V0dXAgaW4KKyAgICAgICAgLy8gdGhlIHNoYWRvdyB0cmVl
LiBJZiB0aGF0IGV2ZW50IGxpc3RlbmVyIGhhcyBub3QgYmVlbiB1c2VkIHlldCwgbV9qc0Z1bmN0
aW9uIGlzIHN0aWxsIDAsCisgICAgICAgIC8vIGFuZCB0cnlSZW1vdmVFdmVudExpc3RlbmVyKCkg
YWJvdmUgd2lsbCBmYWlsLiBXb3JrIGFyb3VuZCB0aGF0IHZlcnkgc2VsZG9tIHByb2JsZW0uCisg
ICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9IHNoYWRvd1RyZWVFbGVtZW50LT5ldmVudFRh
cmdldERhdGEoKTsKKyAgICAgICAgQVNTRVJUKGRhdGEpOworCisgICAgICAgIGRhdGEtPmV2ZW50
TGlzdGVuZXJNYXAucmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoZXZl
bnRUeXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgaGFz
TG9hZExpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgaWYgKGVsZW1lbnQtPmhhc0V2
ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmgKaW5kZXggNWM5YTNkY2MzNzE2MmRkNTkyNTMwZmRmZTE1NmE4NzZiMDU3MWQ1OC4uYTNiYzc5
MDA0ZDM5MjNkYjRhNjA5YmNhZmM2NWEzNzVhYzA2YmUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5oCkBAIC0xMTMsNiArMTEzLDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGhhdmVM
b2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwogCisgICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlU1ZHRWxlbWVudCk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141938</attachid>
            <date>2012-05-15 05:54:35 -0700</date>
            <delta_ts>2012-05-15 09:07:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86426-20120515085422.patch</filename>
            <type>text/plain</type>
            <size>13785</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDY1NzkzODdmYWFkYjFl
YWZkNzViY2NhOTg0MzE5Zjk4NjhjMWQ0Zi4uZWExNDZkM2MwNjc4YzBjNjQxMmM1MmUyMTc1OTA2
OGJhODI1MzhkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA1LTE1ICBSb2Ig
QnVpcyAgPHJidWlzQHJpbS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU1ZHIHBhcnRzIG9mIE5v
ZGU6OmFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0ZW5lcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY0MjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIFNWRyBwYXJ0cyBvZiBOb2RlOjph
ZGRFdmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIgaW50byBzdmcvLiBOb3cgd2UgZG8g
bm90CisgICAgICAgIGhhdmUgdG8gY2hlY2sgaW4gTm9kZTo6YWRkRXZlbnRMaXN0ZW5lci9yZW1v
dmVFdmVudExpc3RlbmVyIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gU1ZHCisgICAgICAgIGVs
ZW1lbnQuIE1ha2UgdHJ5QWRkRXZlbnRMaXN0ZW5lci90cnlSZW1vdmVFdmVudExpc3RlbmVyIHBy
b3RlY3RlZCBtZXRob2RzIG9uIE5vZGUgdG8gYmUgYWJsZSB0byB1c2UKKyAgICAgICAgaXQgaW4g
U1ZHRWxlbWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIG5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogZG9tL05vZGUu
aDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3RJbnN0YW5jZXNGb3JTVkdFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0VsZW1lbnQ6OmFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgICogc3ZnL1NWR0VsZW1l
bnQuaDoKKyAgICAgICAgKFNWR0VsZW1lbnQpOgorCiAyMDEyLTA1LTE1ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1lcmdl
IHNob3cgbmF2aWdhdG9yIHdpdGggcGluIG5hdmlnYXRvciBidXR0b25zLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CmluZGV4IGUwY2M1NmZjNDgzZWMxOGNiNWIzN2JmYWQ4ZjM1YzFhZjI2OTMwZGEuLjJjMGY0ZjRj
ZWQ0ZTVmY2Q4YTQ5NTA1YzA0ZDUyYTRlZmEwMDliNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTEx
MiwxMSArMTEyLDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjZW5kaWYK
IAotI2lmIEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiU1ZHRWxlbWVudEluc3RhbmNlLmgiCi0jaW5j
bHVkZSAiU1ZHVXNlRWxlbWVudC5oIgotI2VuZGlmCi0KICNpZiBVU0UoSlNDKQogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg+CiAjZW5kaWYKQEAgLTI0NDMsMjcgKzI0MzgsNyBAQCB2
b2lkIE5vZGU6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKICNl
bmRpZgogfQogCi0jaWYgRU5BQkxFKFNWRykKLXN0YXRpYyBpbmxpbmUgSGFzaFNldDxTVkdFbGVt
ZW50SW5zdGFuY2UqPiBpbnN0YW5jZXNGb3JTVkdFbGVtZW50KE5vZGUqIG5vZGUpCi17Ci0gICAg
SGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiBpbnN0YW5jZXM7Ci0gCi0gICAgQVNTRVJUKG5v
ZGUpOwotICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgbm9kZS0+c2hhZG93VHJlZVJv
b3ROb2RlKCkpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+KCk7
Ci0KLSAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KG5v
ZGUpOwotICAgIGlmICghZWxlbWVudC0+aXNTdHlsZWQoKSkKLSAgICAgICAgcmV0dXJuIEhhc2hT
ZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4oKTsKLQotICAgIFNWR1N0eWxlZEVsZW1lbnQqIHN0eWxl
ZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAg
QVNTRVJUKCFzdHlsZWRFbGVtZW50LT5pbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKCkpOwotCi0gICAg
cmV0dXJuIHN0eWxlZEVsZW1lbnQtPmluc3RhbmNlc0ZvckVsZW1lbnQoKTsKLX0KLSNlbmRpZgot
Ci1zdGF0aWMgaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJnZXROb2Rl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQoraW5saW5lIGJvb2wgTm9kZTo6dHJ5QWRkRXZl
bnRMaXN0ZW5lcihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQog
ewogICAgIGlmICghdGFyZ2V0Tm9kZS0+RXZlbnRUYXJnZXQ6OmFkZEV2ZW50TGlzdGVuZXIoZXZl
bnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTI0ODEsMzkgKzI0NTYsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVu
ZXIoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmUKIAogYm9vbCBOb2Rl
OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0jaWYgIUVO
QUJMRShTVkcpCiAgICAgcmV0dXJuIHRyeUFkZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBl
LCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0jZWxzZQotICAgIGlmICghaXNTVkdFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiB0cnlBZGRFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlz
dGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiBp
bnN0YW5jZXMgPSBpbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMpOwotICAgIGlmIChpbnN0YW5j
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ5QWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBl
dmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBsaXN0ZW5lckZvclJlZ3VsYXJUcmVlID0gbGlzdGVuZXI7Ci0gICAgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGxpc3RlbmVyRm9yU2hhZG93VHJlZSA9IGxpc3RlbmVyRm9yUmVndWxhclRyZWU7
Ci0KLSAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gcmVndWxhciBET00gZWxlbWVudAotICAg
IGlmICghdHJ5QWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyRm9yUmVn
dWxhclRyZWUucmVsZWFzZSgpLCB1c2VDYXB0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVyIHRvIGFsbCBzaGFkb3cgdHJlZSBET00gZWxlbWVu
dCBpbnN0YW5jZXMKLSAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNWR0Vs
ZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQVNTRVJUKCgqaXQpLT5zaGFkb3dUcmVlRWxlbWVu
dCgpKTsKLSAgICAgICAgQVNTRVJUKCgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IHRo
aXMpOwotCi0gICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lckZvckN1cnJlbnRT
aGFkb3dUcmVlRWxlbWVudCA9IGxpc3RlbmVyRm9yU2hhZG93VHJlZTsKLSAgICAgICAgYm9vbCBy
ZXN1bHQgPSB0cnlBZGRFdmVudExpc3RlbmVyKCgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpLCBl
dmVudFR5cGUsIGxpc3RlbmVyRm9yQ3VycmVudFNoYWRvd1RyZWVFbGVtZW50LnJlbGVhc2UoKSwg
dXNlQ2FwdHVyZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQpOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCB0
cnlSZW1vdmVFdmVudExpc3RlbmVyKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQor
aW5saW5lIGJvb2wgTm9kZTo6dHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJnZXROb2Rl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIs
IGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBpZiAoIXRhcmdldE5vZGUtPkV2ZW50VGFyZ2V0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNTMyLDU1ICsyNDc4LDcgQEAgc3RhdGljIGlubGluZSBi
b29sIHRyeVJlbW92ZUV2ZW50TGlzdGVuZXIoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgQXRvbWlj
U3RyaW5nJgogCiBib29sIE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUp
CiB7Ci0jaWYgIUVOQUJMRShTVkcpCiAgICAgcmV0dXJuIHRyeVJlbW92ZUV2ZW50TGlzdGVuZXIo
dGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0jZWxzZQotICAgIGlmICgh
aXNTVkdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRo
aXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgSGFzaFNldDxTVkdF
bGVtZW50SW5zdGFuY2UqPiBpbnN0YW5jZXMgPSBpbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMp
OwotICAgIGlmIChpbnN0YW5jZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ5UmVtb3Zl
RXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLQot
ICAgIC8vIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyIGNyZWF0ZXMgYSBQYXNzUmVm
UHRyIGFyb3VuZCB0aGUgZ2l2ZW4gRXZlbnRMaXN0ZW5lcgotICAgIC8vIG9iamVjdCB3aGVuIGNy
ZWF0aW5nIGEgdGVtcG9yYXJ5IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIG9iamVjdCB1c2VkIHRv
IGxvb2sgdXAgdGhlCi0gICAgLy8gZXZlbnQgbGlzdGVuZXIgaW4gYSBjYWNoZS4gSWYgd2Ugd2Fu
dCB0byBiZSBhYmxlIHRvIGNhbGwgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIG11bHRpcGxlCi0gICAg
Ly8gdGltZXMgb24gZGlmZmVyZW50IG5vZGVzLCB3ZSBoYXZlIHRvIGRlbGF5IGl0cyBpbW1lZGlh
dGUgZGVzdHJ1Y3Rpb24sIHdoaWNoIHdvdWxkIGhhcHBlbgotICAgIC8vIGFmdGVyIHRoZSBmaXJz
dCBjYWxsIGJlbG93LgotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBwcm90ZWN0b3IobGlzdGVu
ZXIpOwotCi0gICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20gcmVndWxhciBET00gZWxl
bWVudAotICAgIGlmICghdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUmVt
b3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20gYWxsIHNoYWRvdyB0cmVlIERPTSBlbGVtZW50IGluc3Rh
bmNlcwotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudElu
c3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBBU1NFUlQoKCppdCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkg
PT0gdGhpcyk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0
KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1RyZWVFbGVtZW50
KTsKLQotICAgICAgICBpZiAodHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcihzaGFkb3dUcmVlRWxlbWVu
dCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICAvLyBUaGlzIGNhc2UgY2FuIG9ubHkgYmUgaGl0IGZvciBldmVudCBsaXN0
ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cAotICAgICAgICBBU1NFUlQobGlzdGVuZXItPndhc0Ny
ZWF0ZWRGcm9tTWFya3VwKCkpOwotCi0gICAgICAgIC8vIElmIHRoZSBldmVudCBsaXN0ZW5lciAn
bGlzdGVuZXInIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSBtYXJrdXAgYW5kIGhhcyBiZWVuIGZpcmVk
IGJlZm9yZQotICAgICAgICAvLyB0aGVuIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgp
IGhhcyBiZWVuIGNhbGxlZCBhbmQgbV9qc0Z1bmN0aW9uIG9mIHRoYXQgbGlzdGVuZXIKLSAgICAg
ICAgLy8gaGFzIGJlZW4gY3JlYXRlZCAocmVhZDogaXQncyBub3QgMCBhbnltb3JlKS4gRHVyaW5n
IHNoYWRvdyB0cmVlIGNyZWF0aW9uLCB0aGUgZXZlbnQKLSAgICAgICAgLy8gbGlzdGVuZXIgRE9N
IGF0dHJpYnV0ZSBoYXMgYmVlbiBjbG9uZWQsIGFuZCBhbm90aGVyIGV2ZW50IGxpc3RlbmVyIGhh
cyBiZWVuIHNldHVwIGluCi0gICAgICAgIC8vIHRoZSBzaGFkb3cgdHJlZS4gSWYgdGhhdCBldmVu
dCBsaXN0ZW5lciBoYXMgbm90IGJlZW4gdXNlZCB5ZXQsIG1fanNGdW5jdGlvbiBpcyBzdGlsbCAw
LAotICAgICAgICAvLyBhbmQgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcigpIGFib3ZlIHdpbGwgZmFp
bC4gV29yayBhcm91bmQgdGhhdCB2ZXJ5IHNlbGRvbSBwcm9ibGVtLgotICAgICAgICBFdmVudFRh
cmdldERhdGEqIGRhdGEgPSBzaGFkb3dUcmVlRWxlbWVudC0+ZXZlbnRUYXJnZXREYXRhKCk7Ci0g
ICAgICAgIEFTU0VSVChkYXRhKTsKLQotICAgICAgICBkYXRhLT5ldmVudExpc3RlbmVyTWFwLnJl
bW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGV2ZW50VHlwZSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBOb2Rl
OjpldmVudFRhcmdldERhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggNDIyNzFlN2QxOTAzMjJmMTY2NDA1
NDU3OGI5MDFiNThkZWU2MDM1Yy4uYTQ1YTk1NDM3OTZjNjM3Y2M5NWJiZDYwMWFlNzMxY2YwZmY2
Yzg2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oCkBAIC03NDUsNiArNzQ1LDkgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc2V0SGFzQ3VzdG9tU3R5bGVGb3JSZW5kZXJlcigpIHsgc2V0RmxhZyh0cnVlLCBIYXNDdXN0
b21TdHlsZUZvclJlbmRlcmVyRmxhZyk7IH0KICAgICB2b2lkIGNsZWFySGFzQ3VzdG9tU3R5bGVG
b3JSZW5kZXJlcigpIHsgY2xlYXJGbGFnKEhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXJGbGFnKTsg
fQogCisgICAgYm9vbCB0cnlBZGRFdmVudExpc3RlbmVyKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29s
IHVzZUNhcHR1cmUpOworICAgIGJvb2wgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcihOb2RlKiB0YXJn
ZXROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJv
b2wgdXNlQ2FwdHVyZSk7CisKIHByaXZhdGU6CiAgICAgLy8gVGhlc2UgQVBJIHNob3VsZCBiZSBv
bmx5IHVzZWQgZm9yIGEgdHJlZSBzY29wZSBtaWdyYXRpb24uCiAgICAgLy8gc2V0VHJlZVNjb3Bl
KCkgcmV0dXJucyBOb2RlUmFyZURhdGEgdG8gc2F2ZSBleHRyYSBub2RlUmFyZURhdGEoKSBpbnZv
Y2F0aW9ucyBvbiB0aGUgY2FsbGVyIHNpdGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5k
ZXggZGUzODIwOWRlMDI1Y2NlMTkyOGU4YWNhNzg0ZGY4OThkODQxN2QyOS4uNDdhZTI4YzdkMzc1
M2M4NjBlN2RlNzI0ZWEzZjMzMDU0M2FhODI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cApAQCAtMzQ4LDYgKzM0OCw5NiBAQCBib29sIFNWR0VsZW1lbnQ6OmhhdmVMb2FkZWRSZXF1aXJl
ZFJlc291cmNlcygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b2xsZWN0SW5zdGFuY2VzRm9yU1ZHRWxlbWVudChTVkdFbGVtZW50KiBlbGVtZW50LCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXMpCit7CisgICAgQVNTRVJUKGVsZW1lbnQp
OworICAgIGlmIChlbGVtZW50LT5zaGFkb3dUcmVlUm9vdE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFlbGVtZW50LT5pc1N0eWxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVk
RWxlbWVudCo+KGVsZW1lbnQpOworICAgIEFTU0VSVCghc3R5bGVkRWxlbWVudC0+aW5zdGFuY2VV
cGRhdGVzQmxvY2tlZCgpKTsKKworICAgIGluc3RhbmNlcyA9IHN0eWxlZEVsZW1lbnQtPmluc3Rh
bmNlc0ZvckVsZW1lbnQoKTsKK30KKworYm9vbCBTVkdFbGVtZW50OjphZGRFdmVudExpc3RlbmVy
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+
IGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCit7CisgICAgSGFzaFNldDxTVkdFbGVtZW50SW5z
dGFuY2UqPiBpbnN0YW5jZXM7CisgICAgY29sbGVjdEluc3RhbmNlc0ZvclNWR0VsZW1lbnQodGhp
cywgaW5zdGFuY2VzKTsKKyAgICBpZiAoaW5zdGFuY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRyeUFkZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2Fw
dHVyZSk7CisKKyAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJGb3JSZWd1bGFyVHJl
ZSA9IGxpc3RlbmVyOworICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lckZvclNoYWRv
d1RyZWUgPSBsaXN0ZW5lckZvclJlZ3VsYXJUcmVlOworCisgICAgLy8gQWRkIGV2ZW50IGxpc3Rl
bmVyIHRvIHJlZ3VsYXIgRE9NIGVsZW1lbnQKKyAgICBpZiAoIXRyeUFkZEV2ZW50TGlzdGVuZXIo
dGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lckZvclJlZ3VsYXJUcmVlLnJlbGVhc2UoKSwgdXNlQ2Fw
dHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEFkZCBldmVudCBsaXN0ZW5l
ciB0byBhbGwgc2hhZG93IHRyZWUgRE9NIGVsZW1lbnQgaW5zdGFuY2VzCisgICAgY29uc3QgSGFz
aFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFuY2Vz
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEFTU0VSVCgoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKSk7CisgICAgICAgIEFTU0VSVCgoKml0
KS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0aGlzKTsKKworICAgICAgICBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXJGb3JDdXJyZW50U2hhZG93VHJlZUVsZW1lbnQgPSBsaXN0ZW5l
ckZvclNoYWRvd1RyZWU7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ5QWRkRXZlbnRMaXN0ZW5l
cigoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKSwgZXZlbnRUeXBlLCBsaXN0ZW5lckZvckN1cnJl
bnRTaGFkb3dUcmVlRWxlbWVudC5yZWxlYXNlKCksIHVzZUNhcHR1cmUpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTVkdFbGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQor
eworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4gaW5zdGFuY2VzOworICAgIGNvbGxl
Y3RJbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMsIGluc3RhbmNlcyk7CisgICAgaWYgKGluc3Rh
bmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRo
aXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworCisgICAgLy8gRXZlbnRUYXJn
ZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIgY3JlYXRlcyBhIFBhc3NSZWZQdHIgYXJvdW5kIHRoZSBn
aXZlbiBFdmVudExpc3RlbmVyCisgICAgLy8gb2JqZWN0IHdoZW4gY3JlYXRpbmcgYSB0ZW1wb3Jh
cnkgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIgb2JqZWN0IHVzZWQgdG8gbG9vayB1cCB0aGUKKyAg
ICAvLyBldmVudCBsaXN0ZW5lciBpbiBhIGNhY2hlLiBJZiB3ZSB3YW50IHRvIGJlIGFibGUgdG8g
Y2FsbCByZW1vdmVFdmVudExpc3RlbmVyKCkgbXVsdGlwbGUKKyAgICAvLyB0aW1lcyBvbiBkaWZm
ZXJlbnQgbm9kZXMsIHdlIGhhdmUgdG8gZGVsYXkgaXRzIGltbWVkaWF0ZSBkZXN0cnVjdGlvbiwg
d2hpY2ggd291bGQgaGFwcGVuCisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgYmVsb3cuCisg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHByb3RlY3RvcihsaXN0ZW5lcik7CisKKyAgICAvLyBS
ZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbSByZWd1bGFyIERPTSBlbGVtZW50CisgICAgaWYgKCF0
cnlSZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVu
ZXIgZnJvbSBhbGwgc2hhZG93IHRyZWUgRE9NIGVsZW1lbnQgaW5zdGFuY2VzCisgICAgY29uc3Qg
SGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaW5zdGFu
Y2VzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIEFTU0VSVCgoKml0KS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0aGlzKTsKKworICAg
ICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxl
bWVudCgpOworICAgICAgICBBU1NFUlQoc2hhZG93VHJlZUVsZW1lbnQpOworCisgICAgICAgIGlm
ICh0cnlSZW1vdmVFdmVudExpc3RlbmVyKHNoYWRvd1RyZWVFbGVtZW50LCBldmVudFR5cGUsIGxp
c3RlbmVyLCB1c2VDYXB0dXJlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8v
IFRoaXMgY2FzZSBjYW4gb25seSBiZSBoaXQgZm9yIGV2ZW50IGxpc3RlbmVycyBjcmVhdGVkIGZy
b20gbWFya3VwCisgICAgICAgIEFTU0VSVChsaXN0ZW5lci0+d2FzQ3JlYXRlZEZyb21NYXJrdXAo
KSk7CisKKyAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGxpc3RlbmVyICdsaXN0ZW5lcicgaGFzIGJl
ZW4gY3JlYXRlZCBmcm9tIG1hcmt1cCBhbmQgaGFzIGJlZW4gZmlyZWQgYmVmb3JlCisgICAgICAg
IC8vIHRoZW4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6cGFyc2VDb2RlKCkgaGFzIGJlZW4gY2FsbGVk
IGFuZCBtX2pzRnVuY3Rpb24gb2YgdGhhdCBsaXN0ZW5lcgorICAgICAgICAvLyBoYXMgYmVlbiBj
cmVhdGVkIChyZWFkOiBpdCdzIG5vdCAwIGFueW1vcmUpLiBEdXJpbmcgc2hhZG93IHRyZWUgY3Jl
YXRpb24sIHRoZSBldmVudAorICAgICAgICAvLyBsaXN0ZW5lciBET00gYXR0cmlidXRlIGhhcyBi
ZWVuIGNsb25lZCwgYW5kIGFub3RoZXIgZXZlbnQgbGlzdGVuZXIgaGFzIGJlZW4gc2V0dXAgaW4K
KyAgICAgICAgLy8gdGhlIHNoYWRvdyB0cmVlLiBJZiB0aGF0IGV2ZW50IGxpc3RlbmVyIGhhcyBu
b3QgYmVlbiB1c2VkIHlldCwgbV9qc0Z1bmN0aW9uIGlzIHN0aWxsIDAsCisgICAgICAgIC8vIGFu
ZCB0cnlSZW1vdmVFdmVudExpc3RlbmVyKCkgYWJvdmUgd2lsbCBmYWlsLiBXb3JrIGFyb3VuZCB0
aGF0IHZlcnkgc2VsZG9tIHByb2JsZW0uCisgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9
IHNoYWRvd1RyZWVFbGVtZW50LT5ldmVudFRhcmdldERhdGEoKTsKKyAgICAgICAgQVNTRVJUKGRh
dGEpOworCisgICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlRmlyc3RFdmVudExp
c3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoZXZlbnRUeXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgaGFzTG9hZExpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQtPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5sb2Fk
RXZlbnQpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggNWM5YTNkY2MzNzE2MmRkNTkyNTMw
ZmRmZTE1NmE4NzZiMDU3MWQ1OC4uMDFlMDAyMTkzMzMyZjdlYzg1ZGJlMDg1ZTkxNGVlMGU3ZTk4
MjQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC0xMTMsNiArMTEzLDkgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBib29sIGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwogCisg
ICAgdmlydHVhbCBib29sIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpIE9WRVJSSURF
OworCiBwcm90ZWN0ZWQ6CiAgICAgU1ZHRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqLCBDb25zdHJ1Y3Rpb25UeXBlID0gQ3JlYXRlU1ZHRWxlbWVudCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141985</attachid>
            <date>2012-05-15 09:07:14 -0700</date>
            <delta_ts>2012-05-15 09:47:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86426-20120515120748.patch</filename>
            <type>text/plain</type>
            <size>12853</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE3MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDMyZDVjYTIwY2I4MWEw
MGE3MmI5NDE1ZmZjNzNmZjQ2Zjc2Yzc3ZS4uN2NkZDIwYjQ1MjZlZWZkODYyNGM1NjE5ZjQ0ZTgx
N2Q3YjBiMThjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA1LTE1ICBSb2Ig
QnVpcyAgPHJidWlzQHJpbS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgU1ZHIHBhcnRzIG9mIE5v
ZGU6OmFkZEV2ZW50TGlzdGVuZXIvcmVtb3ZlRXZlbnRMaXN0ZW5lcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY0MjYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIFNWRyBwYXJ0cyBvZiBOb2RlOjph
ZGRFdmVudExpc3RlbmVyL3JlbW92ZUV2ZW50TGlzdGVuZXIgaW50byBzdmcvLiBOb3cgd2UgZG8g
bm90CisgICAgICAgIGhhdmUgdG8gY2hlY2sgaW4gTm9kZTo6YWRkRXZlbnRMaXN0ZW5lci9yZW1v
dmVFdmVudExpc3RlbmVyIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gU1ZHCisgICAgICAgIGVs
ZW1lbnQuIE1ha2UgdHJ5QWRkRXZlbnRMaXN0ZW5lci90cnlSZW1vdmVFdmVudExpc3RlbmVyIHBy
b3RlY3RlZCBtZXRob2RzIG9uIE5vZGUgdG8gYmUgYWJsZSB0byB1c2UKKyAgICAgICAgaXQgaW4g
U1ZHRWxlbWVudC4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHNpbmNlIG5vIGNoYW5nZSBpbiBi
ZWhhdmlvciwganVzdCByZWZhY3RvcmluZy4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRyeUFkZEV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjp0cnlSZW1vdmVFdmVu
dExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIp
OgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxl
Y3RJbnN0YW5jZXNGb3JTVkdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFbGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBzdmcvU1ZHRWxl
bWVudC5oOgorICAgICAgICAoU1ZHRWxlbWVudCk6CisKIDIwMTItMDUtMTUgIFBhdmVsIEZlbGRt
YW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWRk
IHNob3cvaGlkZSBkZWJ1Z2dlciBzaWRlYmFyIGJ1dHRvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBl
MGNjNTZmYzQ4M2VjMThjYjViMzdiZmFkOGYzNWMxYWYyNjkzMGRhLi4xYzk3OWM3ZWM0YjNmMzVi
MThhYTVjY2Y0OWYzOTQzNmFmZTc5ZWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xMTIsMTEgKzEx
Miw2IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2VuZGlmCiAKLSNpZiBF
TkFCTEUoU1ZHKQotI2luY2x1ZGUgIlNWR0VsZW1lbnRJbnN0YW5jZS5oIgotI2luY2x1ZGUgIlNW
R1VzZUVsZW1lbnQuaCIKLSNlbmRpZgotCiAjaWYgVVNFKEpTQykKICNpbmNsdWRlIDxydW50aW1l
L0pTR2xvYmFsRGF0YS5oPgogI2VuZGlmCkBAIC0yNDQzLDI2ICsyNDM4LDYgQEAgdm9pZCBOb2Rl
OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiAjZW5kaWYKIH0K
IAotI2lmIEVOQUJMRShTVkcpCi1zdGF0aWMgaW5saW5lIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3Rh
bmNlKj4gaW5zdGFuY2VzRm9yU1ZHRWxlbWVudChOb2RlKiBub2RlKQotewotICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudEluc3RhbmNlKj4gaW5zdGFuY2VzOwotIAotICAgIEFTU0VSVChub2RlKTsKLSAg
ICBpZiAoIW5vZGUtPmlzU1ZHRWxlbWVudCgpIHx8IG5vZGUtPnNoYWRvd1RyZWVSb290Tm9kZSgp
KQotICAgICAgICByZXR1cm4gSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPigpOwotCi0gICAg
U1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihub2RlKTsKLSAg
ICBpZiAoIWVsZW1lbnQtPmlzU3R5bGVkKCkpCi0gICAgICAgIHJldHVybiBIYXNoU2V0PFNWR0Vs
ZW1lbnRJbnN0YW5jZSo+KCk7Ci0KLSAgICBTVkdTdHlsZWRFbGVtZW50KiBzdHlsZWRFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpOwotICAgIEFTU0VSVCgh
c3R5bGVkRWxlbWVudC0+aW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgpKTsKLQotICAgIHJldHVybiBz
dHlsZWRFbGVtZW50LT5pbnN0YW5jZXNGb3JFbGVtZW50KCk7Ci19Ci0jZW5kaWYKLQogc3RhdGlj
IGlubGluZSBib29sIHRyeUFkZEV2ZW50TGlzdGVuZXIoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBpZiAoIXRhcmdldE5vZGUtPkV2ZW50VGFyZ2V0
OjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQpAQCAt
MjQ3NSw0MiArMjQ1MCwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdHJ5QWRkRXZlbnRMaXN0ZW5l
cihOb2RlKiB0YXJnZXROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZQogICAgICAgICBlbHNl
IGlmIChldmVudE5hbWVzKCkuaXNUb3VjaEV2ZW50VHlwZShldmVudFR5cGUpKQogICAgICAgICAg
ICAgZG9jdW1lbnQtPmRpZEFkZFRvdWNoRXZlbnRIYW5kbGVyKCk7CiAgICAgfQotICAgICAgICAK
KwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIE5vZGU6OmFkZEV2ZW50TGlzdGVuZXIoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKLSNpZiAhRU5BQkxFKFNWRykKICAgICByZXR1cm4g
dHJ5QWRkRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJl
KTsKLSNlbHNlCi0gICAgaWYgKCFpc1NWR0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRyeUFk
ZEV2ZW50TGlzdGVuZXIodGhpcywgZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0K
LSAgICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+IGluc3RhbmNlcyA9IGluc3RhbmNlc0Zv
clNWR0VsZW1lbnQodGhpcyk7Ci0gICAgaWYgKGluc3RhbmNlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiB0cnlBZGRFdmVudExpc3RlbmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOwotCi0gICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9yUmVndWxh
clRyZWUgPSBsaXN0ZW5lcjsKLSAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJGb3JT
aGFkb3dUcmVlID0gbGlzdGVuZXJGb3JSZWd1bGFyVHJlZTsKLQotICAgIC8vIEFkZCBldmVudCBs
aXN0ZW5lciB0byByZWd1bGFyIERPTSBlbGVtZW50Ci0gICAgaWYgKCF0cnlBZGRFdmVudExpc3Rl
bmVyKHRoaXMsIGV2ZW50VHlwZSwgbGlzdGVuZXJGb3JSZWd1bGFyVHJlZS5yZWxlYXNlKCksIHVz
ZUNhcHR1cmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBZGQgZXZlbnQgbGlz
dGVuZXIgdG8gYWxsIHNoYWRvdyB0cmVlIERPTSBlbGVtZW50IGluc3RhbmNlcwotICAgIGNvbnN0
IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3Rh
bmNlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICBBU1NFUlQoKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCkpOwotICAgICAgICBBU1NFUlQo
KCppdCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gdGhpcyk7Ci0KLSAgICAgICAgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9yQ3VycmVudFNoYWRvd1RyZWVFbGVtZW50ID0gbGlz
dGVuZXJGb3JTaGFkb3dUcmVlOwotICAgICAgICBib29sIHJlc3VsdCA9IHRyeUFkZEV2ZW50TGlz
dGVuZXIoKCppdCktPnNoYWRvd1RyZWVFbGVtZW50KCksIGV2ZW50VHlwZSwgbGlzdGVuZXJGb3JD
dXJyZW50U2hhZG93VHJlZUVsZW1lbnQucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci0jZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSBib29sIHRyeVJlbW92ZUV2ZW50TGlzdGVuZXIo
Tm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCkBAIC0yNTI2LDYxICsyNDcyLDEzIEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCB0cnlSZW1vdmVFdmVudExpc3RlbmVyKE5vZGUqIHRhcmdldE5v
ZGUsIGNvbnN0IEF0b21pY1N0cmluZyYKICAgICAgICAgZWxzZSBpZiAoZXZlbnROYW1lcygpLmlz
VG91Y2hFdmVudFR5cGUoZXZlbnRUeXBlKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5kaWRSZW1v
dmVUb3VjaEV2ZW50SGFuZGxlcigpOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7Ci0j
aWYgIUVOQUJMRShTVkcpCiAgICAgcmV0dXJuIHRyeVJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcywg
ZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7Ci0jZWxzZQotICAgIGlmICghaXNTVkdF
bGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnlSZW1vdmVFdmVudExpc3RlbmVyKHRoaXMsIGV2
ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwotCi0gICAgSGFzaFNldDxTVkdFbGVtZW50
SW5zdGFuY2UqPiBpbnN0YW5jZXMgPSBpbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMpOwotICAg
IGlmIChpbnN0YW5jZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ5UmVtb3ZlRXZlbnRM
aXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKLQotICAgIC8v
IEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyIGNyZWF0ZXMgYSBQYXNzUmVmUHRyIGFy
b3VuZCB0aGUgZ2l2ZW4gRXZlbnRMaXN0ZW5lcgotICAgIC8vIG9iamVjdCB3aGVuIGNyZWF0aW5n
IGEgdGVtcG9yYXJ5IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyIG9iamVjdCB1c2VkIHRvIGxvb2sg
dXAgdGhlCi0gICAgLy8gZXZlbnQgbGlzdGVuZXIgaW4gYSBjYWNoZS4gSWYgd2Ugd2FudCB0byBi
ZSBhYmxlIHRvIGNhbGwgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIG11bHRpcGxlCi0gICAgLy8gdGlt
ZXMgb24gZGlmZmVyZW50IG5vZGVzLCB3ZSBoYXZlIHRvIGRlbGF5IGl0cyBpbW1lZGlhdGUgZGVz
dHJ1Y3Rpb24sIHdoaWNoIHdvdWxkIGhhcHBlbgotICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBjYWxs
IGJlbG93LgotICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBwcm90ZWN0b3IobGlzdGVuZXIpOwot
Ci0gICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20gcmVndWxhciBET00gZWxlbWVudAot
ICAgIGlmICghdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLCBldmVudFR5cGUsIGxpc3RlbmVy
LCB1c2VDYXB0dXJlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gUmVtb3ZlIGV2
ZW50IGxpc3RlbmVyIGZyb20gYWxsIHNoYWRvdyB0cmVlIERPTSBlbGVtZW50IGluc3RhbmNlcwot
ICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBBU1NFUlQoKCppdCktPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gdGhp
cyk7Ci0KLSAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hh
ZG93VHJlZUVsZW1lbnQoKTsKLSAgICAgICAgQVNTRVJUKHNoYWRvd1RyZWVFbGVtZW50KTsKLQot
ICAgICAgICBpZiAodHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcihzaGFkb3dUcmVlRWxlbWVudCwgZXZl
bnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBUaGlzIGNhc2UgY2FuIG9ubHkgYmUgaGl0IGZvciBldmVudCBsaXN0ZW5lcnMg
Y3JlYXRlZCBmcm9tIG1hcmt1cAotICAgICAgICBBU1NFUlQobGlzdGVuZXItPndhc0NyZWF0ZWRG
cm9tTWFya3VwKCkpOwotCi0gICAgICAgIC8vIElmIHRoZSBldmVudCBsaXN0ZW5lciAnbGlzdGVu
ZXInIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSBtYXJrdXAgYW5kIGhhcyBiZWVuIGZpcmVkIGJlZm9y
ZQotICAgICAgICAvLyB0aGVuIEpTTGF6eUV2ZW50TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGhhcyBi
ZWVuIGNhbGxlZCBhbmQgbV9qc0Z1bmN0aW9uIG9mIHRoYXQgbGlzdGVuZXIKLSAgICAgICAgLy8g
aGFzIGJlZW4gY3JlYXRlZCAocmVhZDogaXQncyBub3QgMCBhbnltb3JlKS4gRHVyaW5nIHNoYWRv
dyB0cmVlIGNyZWF0aW9uLCB0aGUgZXZlbnQKLSAgICAgICAgLy8gbGlzdGVuZXIgRE9NIGF0dHJp
YnV0ZSBoYXMgYmVlbiBjbG9uZWQsIGFuZCBhbm90aGVyIGV2ZW50IGxpc3RlbmVyIGhhcyBiZWVu
IHNldHVwIGluCi0gICAgICAgIC8vIHRoZSBzaGFkb3cgdHJlZS4gSWYgdGhhdCBldmVudCBsaXN0
ZW5lciBoYXMgbm90IGJlZW4gdXNlZCB5ZXQsIG1fanNGdW5jdGlvbiBpcyBzdGlsbCAwLAotICAg
ICAgICAvLyBhbmQgdHJ5UmVtb3ZlRXZlbnRMaXN0ZW5lcigpIGFib3ZlIHdpbGwgZmFpbC4gV29y
ayBhcm91bmQgdGhhdCB2ZXJ5IHNlbGRvbSBwcm9ibGVtLgotICAgICAgICBFdmVudFRhcmdldERh
dGEqIGRhdGEgPSBzaGFkb3dUcmVlRWxlbWVudC0+ZXZlbnRUYXJnZXREYXRhKCk7Ci0gICAgICAg
IEFTU0VSVChkYXRhKTsKLQotICAgICAgICBkYXRhLT5ldmVudExpc3RlbmVyTWFwLnJlbW92ZUZp
cnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFya3VwKGV2ZW50VHlwZSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKIH0KIAogRXZlbnRUYXJnZXREYXRhKiBOb2RlOjpldmVu
dFRhcmdldERhdGEoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4IGRlMzgyMDlkZTAy
NWNjZTE5MjhlOGFjYTc4NGRmODk4ZDg0MTdkMjkuLjBmZDZkMjY2ZDM2ZDNjZGFmYzc2YzU1NDZh
OTk0ZTE0OTRlMmJiMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKQEAgLTM0OCw2ICsz
NDgsOTYgQEAgYm9vbCBTVkdFbGVtZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY29sbGVjdEluc3RhbmNl
c0ZvclNWR0VsZW1lbnQoU1ZHRWxlbWVudCogZWxlbWVudCwgSGFzaFNldDxTVkdFbGVtZW50SW5z
dGFuY2UqPiYgaW5zdGFuY2VzKQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBpZiAoZWxl
bWVudC0+c2hhZG93VHJlZVJvb3ROb2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
ZWxlbWVudC0+aXNTdHlsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU1ZHU3R5bGVkRWxl
bWVudCogc3R5bGVkRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICBBU1NFUlQoIXN0eWxlZEVsZW1lbnQtPmluc3RhbmNlVXBkYXRlc0Jsb2NrZWQo
KSk7CisKKyAgICBpbnN0YW5jZXMgPSBzdHlsZWRFbGVtZW50LT5pbnN0YW5jZXNGb3JFbGVtZW50
KCk7Cit9CisKK2Jvb2wgU1ZHRWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciwgYm9v
bCB1c2VDYXB0dXJlKQoreworICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4gaW5zdGFu
Y2VzOworICAgIGNvbGxlY3RJbnN0YW5jZXNGb3JTVkdFbGVtZW50KHRoaXMsIGluc3RhbmNlcyk7
CisgICAgaWYgKGluc3RhbmNlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBOb2RlOjphZGRF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOworCisgICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyRm9yUmVndWxhclRyZWUgPSBsaXN0ZW5lcjsKKyAg
ICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXJGb3JTaGFkb3dUcmVlID0gbGlzdGVuZXJG
b3JSZWd1bGFyVHJlZTsKKworICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lciB0byByZWd1bGFyIERP
TSBlbGVtZW50CisgICAgaWYgKCFOb2RlOjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlz
dGVuZXJGb3JSZWd1bGFyVHJlZS5yZWxlYXNlKCksIHVzZUNhcHR1cmUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgdG8gYWxsIHNoYWRvdyB0cmVl
IERPTSBlbGVtZW50IGluc3RhbmNlcworICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3Rh
bmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBU1NFUlQoKCppdCktPnNoYWRv
d1RyZWVFbGVtZW50KCkpOworICAgICAgICBBU1NFUlQoKCppdCktPmNvcnJlc3BvbmRpbmdFbGVt
ZW50KCkgPT0gdGhpcyk7CisKKyAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVy
Rm9yQ3VycmVudFNoYWRvd1RyZWVFbGVtZW50ID0gbGlzdGVuZXJGb3JTaGFkb3dUcmVlOworICAg
ICAgICBib29sIHJlc3VsdCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpLT5Ob2RlOjphZGRF
dmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXJGb3JDdXJyZW50U2hhZG93VHJlZUVsZW1l
bnQucmVsZWFzZSgpLCB1c2VDYXB0dXJlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU1ZHRWxlbWVu
dDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKK3sKKyAgICBIYXNoU2V0PFNW
R0VsZW1lbnRJbnN0YW5jZSo+IGluc3RhbmNlczsKKyAgICBjb2xsZWN0SW5zdGFuY2VzRm9yU1ZH
RWxlbWVudCh0aGlzLCBpbnN0YW5jZXMpOworICAgIGlmIChpbnN0YW5jZXMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gTm9kZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3Rl
bmVyLCB1c2VDYXB0dXJlKTsKKworICAgIC8vIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3Rl
bmVyIGNyZWF0ZXMgYSBQYXNzUmVmUHRyIGFyb3VuZCB0aGUgZ2l2ZW4gRXZlbnRMaXN0ZW5lcgor
ICAgIC8vIG9iamVjdCB3aGVuIGNyZWF0aW5nIGEgdGVtcG9yYXJ5IFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyIG9iamVjdCB1c2VkIHRvIGxvb2sgdXAgdGhlCisgICAgLy8gZXZlbnQgbGlzdGVuZXIg
aW4gYSBjYWNoZS4gSWYgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNhbGwgcmVtb3ZlRXZlbnRMaXN0
ZW5lcigpIG11bHRpcGxlCisgICAgLy8gdGltZXMgb24gZGlmZmVyZW50IG5vZGVzLCB3ZSBoYXZl
IHRvIGRlbGF5IGl0cyBpbW1lZGlhdGUgZGVzdHJ1Y3Rpb24sIHdoaWNoIHdvdWxkIGhhcHBlbgor
ICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBjYWxsIGJlbG93LgorICAgIFJlZlB0cjxFdmVudExpc3Rl
bmVyPiBwcm90ZWN0b3IobGlzdGVuZXIpOworCisgICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVy
IGZyb20gcmVndWxhciBET00gZWxlbWVudAorICAgIGlmICghTm9kZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB1c2VDYXB0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZyb20gYWxsIHNoYWRvdyB0cmVl
IERPTSBlbGVtZW50IGluc3RhbmNlcworICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3Rh
bmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBBU1NFUlQoKCppdCktPmNvcnJl
c3BvbmRpbmdFbGVtZW50KCkgPT0gdGhpcyk7CisKKyAgICAgICAgU1ZHRWxlbWVudCogc2hhZG93
VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKKyAgICAgICAgQVNTRVJU
KHNoYWRvd1RyZWVFbGVtZW50KTsKKworICAgICAgICBpZiAoc2hhZG93VHJlZUVsZW1lbnQtPk5v
ZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUaGlzIGNhc2UgY2FuIG9ubHkg
YmUgaGl0IGZvciBldmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cAorICAgICAgICBB
U1NFUlQobGlzdGVuZXItPndhc0NyZWF0ZWRGcm9tTWFya3VwKCkpOworCisgICAgICAgIC8vIElm
IHRoZSBldmVudCBsaXN0ZW5lciAnbGlzdGVuZXInIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSBtYXJr
dXAgYW5kIGhhcyBiZWVuIGZpcmVkIGJlZm9yZQorICAgICAgICAvLyB0aGVuIEpTTGF6eUV2ZW50
TGlzdGVuZXI6OnBhcnNlQ29kZSgpIGhhcyBiZWVuIGNhbGxlZCBhbmQgbV9qc0Z1bmN0aW9uIG9m
IHRoYXQgbGlzdGVuZXIKKyAgICAgICAgLy8gaGFzIGJlZW4gY3JlYXRlZCAocmVhZDogaXQncyBu
b3QgMCBhbnltb3JlKS4gRHVyaW5nIHNoYWRvdyB0cmVlIGNyZWF0aW9uLCB0aGUgZXZlbnQKKyAg
ICAgICAgLy8gbGlzdGVuZXIgRE9NIGF0dHJpYnV0ZSBoYXMgYmVlbiBjbG9uZWQsIGFuZCBhbm90
aGVyIGV2ZW50IGxpc3RlbmVyIGhhcyBiZWVuIHNldHVwIGluCisgICAgICAgIC8vIHRoZSBzaGFk
b3cgdHJlZS4gSWYgdGhhdCBldmVudCBsaXN0ZW5lciBoYXMgbm90IGJlZW4gdXNlZCB5ZXQsIG1f
anNGdW5jdGlvbiBpcyBzdGlsbCAwLAorICAgICAgICAvLyBhbmQgdHJ5UmVtb3ZlRXZlbnRMaXN0
ZW5lcigpIGFib3ZlIHdpbGwgZmFpbC4gV29yayBhcm91bmQgdGhhdCB2ZXJ5IHNlbGRvbSBwcm9i
bGVtLgorICAgICAgICBFdmVudFRhcmdldERhdGEqIGRhdGEgPSBzaGFkb3dUcmVlRWxlbWVudC0+
ZXZlbnRUYXJnZXREYXRhKCk7CisgICAgICAgIEFTU0VSVChkYXRhKTsKKworICAgICAgICBkYXRh
LT5ldmVudExpc3RlbmVyTWFwLnJlbW92ZUZpcnN0RXZlbnRMaXN0ZW5lckNyZWF0ZWRGcm9tTWFy
a3VwKGV2ZW50VHlwZSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBi
b29sIGhhc0xvYWRMaXN0ZW5lcihFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50
LT5oYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkubG9hZEV2ZW50KSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5oCmluZGV4IDVjOWEzZGNjMzcxNjJkZDU5MjUzMGZkZmUxNTZhODc2YjA1NzFkNTgu
LjAxZTAwMjE5MzMzMmY3ZWM4NWRiZTA4NWU5MTRlZTBlN2U5ODI0NWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuaApAQCAtMTEzLDYgKzExMyw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBhZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9v
bCByZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKiwgYm9vbCB1c2VDYXB0dXJlKSBPVkVSUklERTsKKwogcHJvdGVjdGVkOgogICAg
IFNWR0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgQ29uc3RydWN0aW9u
VHlwZSA9IENyZWF0ZVNWR0VsZW1lbnQpOwogCg==
</data>
<flag name="review"
          id="148204"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>