<?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>26041</bug_id>
          
          <creation_ts>2009-05-27 03:26:26 -0700</creation_ts>
          <short_desc>Allow adding resource source to frame asynchronously</short_desc>
          <delta_ts>2009-05-28 09:23:02 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123259</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-27 03:26:26 -0700</bug_when>
    <thetext>Chromium&apos;s async/out-of-process version of WebInspector needs to add resource source to WebInspector.SourceView asynchronously since the source is retrieved from the inspected process asynchronously.

Current implementation of InspectorController::addResourceSourceToFrame supports only synchronous execution. The idea is to change it into asynchronous method that invokes a callback when the source is added to notify the caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123292</commentid>
    <comment_count>1</comment_count>
      <attachid>30709</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-27 08:39:36 -0700</bug_when>
    <thetext>Created attachment 30709
Change addResourceSourceToFrame so that it invokes callback when the source is loaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123294</commentid>
    <comment_count>2</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-27 09:15:46 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=30709) [review]
&gt; Change addResourceSourceToFrame so that it invokes callback when the source is
&gt; loaded.
&gt; 

The patch changes WebInspector front-end so that it expects InspectorController.addResourceSourceToFrame to add the script source asynchronously. When the source is loaded the front-end is notified by call to InspectorFrontend::didAddResourceSourceToFrame which will execute SourceView.addResourceSourceToFrameCallback for the resource to run all delayed actions including syntax highlight, reveal and highlight line. 

Custom implementations of addSourceToFrame and addResourceSourceToFrame can now be merged into a common one. 

There is an issue with resource identifier passed as long value to InspectorController.addResourceSourceToFrame.  A short introduction: all resources loaded not from cache will have identifiers of type &apos;unsigned long&apos;. Resources loaded from memory cache will have no identifiers. To work with both types of resources uniformly InspecorController.didLoadResourceFromMemoryCache assigns some surrogate identifiers to the cached resources. The identifiers are always negative to guarantee that they don&apos;t clash with existing ones. To fit both types of identifiers InspectorResource.m_identifier has type &apos;long long&apos;. However JavaScript Number cannot fit all &apos;long long&apos; values that is why in InspectorController.idl I couldn&apos;t declare  addResourceSourceToFrame as accepting &apos;long long indetifier&apos;. &apos;double&apos; type would be big enough to fit all the values but it looks ugly when an argument with name &apos;identifier&apos; has &apos;double&apos; type. In C++ code it can be mitigated by using &apos;typdef double ResourceId&apos; but we would still need to decalre it as double in the .idl  In the current version the ids are passed as &apos;long&apos; to the javascript code which may lead to loss of accuracy. Any thoughts on that?


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123326</commentid>
    <comment_count>3</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-05-27 14:27:18 -0700</bug_when>
    <thetext>Why can&apos;t we just use a load event listener on the iframe? I am pretty sure we do that already in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123378</commentid>
    <comment_count>4</comment_count>
      <attachid>30732</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-28 02:37:57 -0700</bug_when>
    <thetext>Created attachment 30732
Complete source frame loading in iframe &apos;load&apos; event listener.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123381</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-28 02:43:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Why can&apos;t we just use a load event listener on the iframe? I am pretty sure we
&gt; do that already in one place.
&gt; 
Done. I&apos;ve added &apos;content loaded&apos; event to SourceFrame so that it has a chance to perform its own &apos;load&apos; event handling when iframe is loaded before its clients are notified. 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123383</commentid>
    <comment_count>6</comment_count>
      <attachid>30732</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-05-28 03:18:08 -0700</bug_when>
    <thetext>Comment on attachment 30732
Complete source frame loading in iframe &apos;load&apos; event listener.

Seems odd addSourceToFrame returns a bool and addResourceSourceToFrame does not. Can addResourceSourceToFrame still return a bool? If the resource isn&apos;t found retuen false and retuen the result of addSourceToFrame.

+        delete this._frameNeedsSetup;

You shouldn&apos;t need this sine _frameNeedsSetup was deleted in setupSourceFrameIfNeeded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123385</commentid>
    <comment_count>7</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-28 03:37:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 30732 [review])
&gt; Seems odd addSourceToFrame returns a bool and addResourceSourceToFrame does
&gt; not. Can addResourceSourceToFrame still return a bool? If the resource isn&apos;t
&gt; found retuen false and retuen the result of addSourceToFrame.
&gt; 
addSourceToFrame always work sinchronously because all data it may need are passed in the arguments while addResourceSourceToFrame in case of Chrome may need to request script source for given identifier from the inspected process. Until response is received we cannot tell whether the source adding succeeded or not. That is the reason why addResourceSourceToFrame doesn&apos;t return &apos;bool&apos; anymore. Instead if the source is added successfuly the iframe will generate &apos;load&apos; event.



&gt; +        delete this._frameNeedsSetup;
&gt; 
&gt; You shouldn&apos;t need this sine _frameNeedsSetup was deleted in
&gt; setupSourceFrameIfNeeded.
&gt; 
In the asynchronous case the following scenario is possible:
- setupSourceFrameIfNeeded calls addResourceSourceToFrame which sends request for the source and returns
- _resourceLoadingFinished is called and sets this._frameNeedsSetup to true
- response to the source request is received, content is loaded and _frameNeedsSetup is not cleared which causes one extra frame loading in the next call to setupSourceFrameIfNeeded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123409</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-28 08:36:38 -0700</bug_when>
    <thetext>I&apos;ll land once Tim agrees/disagrees w/Yuri&apos;s last comment :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123416</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-05-28 09:07:57 -0700</bug_when>
    <thetext>Yury, makes sense. This is good to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123419</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-05-28 09:15:34 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/44230.

Yury, in the future patches, don&apos;t forget to:

* set your EMAIL_ADDRESS environment variable
* add URL of the bug to the ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123423</commentid>
    <comment_count>11</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-05-28 09:23:02 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Landed as http://trac.webkit.org/changeset/44230.
&gt; 
&gt; Yury, in the future patches, don&apos;t forget to:
&gt; 
&gt; * set your EMAIL_ADDRESS environment variable
&gt; * add URL of the bug to the ChangeLog entry.
&gt; 
Sorry about that.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30709</attachid>
            <date>2009-05-27 08:39:36 -0700</date>
            <delta_ts>2009-05-28 02:37:57 -0700</delta_ts>
            <desc>Change addResourceSourceToFrame so that it invokes callback when the source is loaded.</desc>
            <filename>source-frame-async.patch</filename>
            <type>text/plain</type>
            <size>16698</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDE4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDUtMjcgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWxsb3cgYWRkaW5nIHJlc291cmNlIHNvdXJjZSB0byBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUgYXN5bmNocm5vdXNseS4KKwkJCisJCVByb3ZpZGUgY29tbW9uIGltcGxlbWVudGF0aW9uIGZv
ciBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUgYW5kCisJCUlu
c3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJhbWUgbWV0aG9kcy4KKwkJCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRG
dW5jdGlvbkNhbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0RnVuY3Rpb25DYWxsOjph
cHBlbmRBcmd1bWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxs
Lmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJvbGxlckN1
c3RvbS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VU
b0ZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RnJvbnRlbmQ6OmRpZEFkZFJlc291cmNlU291cmNlVG9GcmFtZSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9S
ZXNvdXJjZXNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZXNQYW5lbC5w
cm90b3R5cGUuZXhpc3RpbmdSZXNvdXJjZVZpZXdGb3JSZXNvdXJjZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUucmV2ZWFsTGluZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLmhpZ2hsaWdodExpbmUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fbG9hZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2lzQ29udGVudExvYWRlZCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZVZpZXcucHJvdG90eXBlLnNldHVwU291cmNlRnJhbWVJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1l
Q2FsbGJhY2spOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLmRpZEFkZFJlc291cmNlU291cmNlVG9GcmFtZSk6CisKIDIw
MDktMDUtMjcgIEZyaWRyaWNoIFN0cmJhICA8ZnJpZHJpY2guc3RyYmFAYmx1ZXdpbi5jaD4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lv
biA0NDE4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNDUgKzg3LDYgQEAgSlNWYWx1ZSBKU0luc3Bl
Y3RvckNvbnRyb2xsZXI6OmhpZ2hsaWdodAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQog
Ci1KU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1l
KEV4ZWNTdGF0ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgp
IDwgMikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBkb3VibGUgbnVtYmVy
OwotICAgIGlmICghYXJncy5hdCgwKS5nZXROdW1iZXIobnVtYmVyKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBsb25nIGxvbmcgaWRlbnRpZmllciA9IHN0YXRpY19jYXN0
PGxvbmcgbG9uZz4gKG51bWJlcik7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yUmVzb3VyY2U+IHJl
c291cmNlID0gaW1wbCgpLT5yZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJU
KHJlc291cmNlKTsKLSAgICBpZiAoIXJlc291cmNlKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLQotICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5n
KCk7Ci0gICAgaWYgKHNvdXJjZVN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgcmV0dXJuIGpzQm9vbGVhbihpbXBsKCktPmFkZFNvdXJjZVRvRnJh
bWUocmVzb3VyY2UtPm1pbWVUeXBlKCksIHNvdXJjZVN0cmluZywgdG9Ob2RlKGFyZ3MuYXQoMSkp
KSk7Ci19Ci0KLUpTVmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjphZGRTb3VyY2VUb0ZyYW1l
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5z
aXplKCkgPCAzKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBt
aW1lVHlwZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIFN0cmluZyBz
b3VyY2VTdHJpbmcgPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICByZXR1
cm4ganNCb29sZWFuKGltcGwoKS0+YWRkU291cmNlVG9GcmFtZShtaW1lVHlwZSwgc291cmNlU3Ry
aW5nLCB0b05vZGUoYXJncy5hdCgyKSkpKTsKLX0KLQogSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRy
b2xsZXI6OmdldFJlc291cmNlRG9jdW1lbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICBpZiAoYXJncy5zaXplKCkgPCAxKQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0RnVuY3Rpb25DYWxsLmNwcAkocmV2aXNpb24gNDQxODEpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDYgKzg2LDEyIEBAIHZvaWQgU2NyaXB0RnVuY3Rpb25DYWxsOjphcHBlbmRBcmd1bWVu
dCgKICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIobV9leGVjLCBhcmd1bWVudCkpOwog
fQogCit2b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBhcmd1bWVu
dCkKK3sKKyAgICBKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgbV9hcmd1bWVudHMuYXBwZW5kKGpz
TnVtYmVyKG1fZXhlYywgYXJndW1lbnQpKTsKK30KKyAgICAKIHZvaWQgU2NyaXB0RnVuY3Rpb25D
YWxsOjphcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQgYXJndW1lbnQpCiB7CiAgICAgSlNMb2Nr
IGxvY2soZmFsc2UpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRGdW5jdGlvbkNh
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEZ1bmN0aW9uQ2Fs
bC5oCShyZXZpc2lvbiA0NDE4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RnVuY3Rp
b25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IFN0cmluZyYpOwogICAgICAg
ICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0IEpTQzo6VVN0cmluZyYpOwogICAgICAgICB2b2lk
IGFwcGVuZEFyZ3VtZW50KEpTQzo6SlNWYWx1ZSk7CisgICAgICAgIHZvaWQgYXBwZW5kQXJndW1l
bnQobG9uZyk7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQobG9uZyBsb25nKTsKICAgICAg
ICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1bnNpZ25lZCBpbnQpOwogICAgICAgICB2b2lkIGFwcGVu
ZEFyZ3VtZW50KGludCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdEZ1bmN0aW9u
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRGdW5jdGlv
bkNhbGwuY3BwCShyZXZpc2lvbiA0NDE4MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsMTMgQEAgdm9pZCBT
Y3JpcHRGdW5jdGlvbkNhbGw6OmFwcGVuZEFyZ3VtZW50KAogICAgIFNjcmlwdFNjb3BlIHNjb3Bl
KG1fc2NyaXB0U3RhdGUpOwogICAgIG1fYXJndW1lbnRzLmFwcGVuZCh2OFN0cmluZyhhcmd1bWVu
dCkpOwogfQotCisJCit2b2lkIFNjcmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9u
ZyBhcmd1bWVudCkKK3sKKwlTY3JpcHRTY29wZSBzY29wZShtX3NjcmlwdFN0YXRlKTsKKwltX2Fy
Z3VtZW50cy5hcHBlbmQodjg6Ok51bWJlcjo6TmV3KGFyZ3VtZW50KSk7Cit9CisJCiB2b2lkIFNj
cmlwdEZ1bmN0aW9uQ2FsbDo6YXBwZW5kQXJndW1lbnQobG9uZyBsb25nIGFyZ3VtZW50KQogewog
ICAgIFNjcmlwdFNjb3BlIHNjb3BlKG1fc2NyaXB0U3RhdGUpOwpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRGdW5jdGlvbkNhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdEZ1bmN0aW9uQ2FsbC5oCShyZXZpc2lvbiA0NDE4MSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0RnVuY3Rpb25DYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50
KGNvbnN0IFNjcmlwdFN0cmluZyYpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGNvbnN0
IFNjcmlwdFZhbHVlJik7CiAgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgICAgIHZvaWQgYXBwZW5kQXJndW1lbnQobG9uZyk7CiAgICAgICAgIHZvaWQgYXBw
ZW5kQXJndW1lbnQobG9uZyBsb25nKTsKICAgICAgICAgdm9pZCBhcHBlbmRBcmd1bWVudCh1bnNp
Z25lZCBpbnQpOwogICAgICAgICB2b2lkIGFwcGVuZEFyZ3VtZW50KGludCk7CkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJv
bGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDQ0MTgxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNjAgKzY2LDYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJIaQog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JDb250cm9sbGVyQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKQotewotICAgIElOQ19TVEFU
UygiSW5zcGVjdG9yQ29udHJvbGxlci5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoKSIpOwotCi0g
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotCi0gICAgaWYgKCFhcmdzWzBdLT5Jc051bWJlcigpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotCi0gICAgbG9uZyBsb25nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KGFyZ3NbMF0tPk51bWJlclZhbHVlKCkpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PEluc3BlY3Rv
ckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IGluc3BlY3Rv
ckNvbnRyb2xsZXItPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQocmVz
b3VyY2UpOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Ci0KLSAgICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3VyY2UtPnNvdXJjZVN0cmluZygp
OwotICAgIGlmIChzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJnc1sxXSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotCi0gICAgcmV0dXJuIHY4Qm9vbGVhbihpbnNwZWN0b3JDb250cm9sbGVyLT5hZGRT
b3VyY2VUb0ZyYW1lKHJlc291cmNlLT5taW1lVHlwZSgpLCBzb3VyY2VTdHJpbmcsIG5vZGUpKTsK
LX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJBZGRTb3VyY2VUb0Zy
YW1lKQotewotICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5hZGRTb3VyY2VUb0Zy
YW1lKCkiKTsKLQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLQotICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotCi0g
ICAgU3RyaW5nIG1pbWVUeXBlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBd
KTsKLSAgICBpZiAobWltZVR5cGUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1
Z2h0KCkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgc291
cmNlU3RyaW5nID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKTsKLSAgICBp
ZiAoc291cmNlU3RyaW5nLmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgp
KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IFY4
UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sxXSk7Ci0gICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxl
ciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PEluc3BlY3Rv
ckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xk
ZXIoKSk7Ci0gICAgcmV0dXJuIHY4Qm9vbGVhbihpbnNwZWN0b3JDb250cm9sbGVyLT5hZGRTb3Vy
Y2VUb0ZyYW1lKG1pbWVUeXBlLCBzb3VyY2VTdHJpbmcsIG5vZGUpKTsKLX0KLQogQ0FMTEJBQ0tf
RlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJHZXRSZXNvdXJjZURvY3VtZW50Tm9kZSkKIHsK
ICAgICBJTkNfU1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UmVzb3VyY2VEb2N1bWVudE5v
ZGUoKSIpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDQ0MTgxKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MSw2ICs0ODEsMjIgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjp0b2dnbGVTZWFyY2hGbwogICAgICAgICBoaWRlSGlnaGxpZ2h0KCk7CiB9CiAK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcg
aWRlbnRpZmllciwgTm9kZSogZnJhbWUpCit7CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJv
bnRlbmQpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAg
UmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IHJlc291cmNlcygpLmdldChpZGVu
dGlmaWVyKTsKKyAgICBpZiAocmVzb3VyY2UpIHsKKyAgICAgICAgU3RyaW5nIHNvdXJjZVN0cmlu
ZyA9IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFzb3VyY2VTdHJpbmcu
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gYWRkU291cmNlVG9GcmFtZShyZXNvdXJj
ZS0+bWltZVR5cGUoKSwgc291cmNlU3RyaW5nLCBmcmFtZSk7CisgICAgfQorCisgICAgbV9mcm9u
dGVuZC0+ZGlkQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGlkZW50aWZpZXIsIHJlc3VsdCk7Cit9
CisKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29u
c3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCkKIHsKICAgICBpZiAoIWVuYWJsZWQo
KSB8fCAhbV9zZWFyY2hpbmdGb3JOb2RlKQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaAkocmV2aXNpb24gNDQxODEpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7CiAgICAgdm9pZCBzZXRXaW5kb3dWaXNpYmxl
KGJvb2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQgPSBmYWxzZSk7CiAKKyAgICB2b2lk
IGFkZFJlc291cmNlU291cmNlVG9GcmFtZShsb25nIGlkZW50aWZpZXIsIE5vZGUqIGZyYW1lKTsK
ICAgICBib29sIGFkZFNvdXJjZVRvRnJhbWUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3Qg
U3RyaW5nJiBzb3VyY2UsIE5vZGUqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVz
c2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBTY3JpcHRDYWxsU3RhY2sqKTsKICAgICB2b2lkIGFk
ZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQp
OwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwJKHJldmlz
aW9uIDQ0MTgxKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBb
SW1wbGVtZW50YXRpb25GdW5jdGlvbj13aW5kb3dWaXNpYmxlXSBib29sZWFuIGlzV2luZG93Vmlz
aWJsZSgpOwogICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1zZWFyY2hpbmdGb3JOb2Rl
SW5QYWdlXSBib29sZWFuIHNlYXJjaGluZ0Zvck5vZGUoKTsKIAotICAgICAgICBbQ3VzdG9tXSB2
b2lkIGFkZFJlc291cmNlU291cmNlVG9GcmFtZShpbiBsb25nIGxvbmcgaWRlbnRpZmllciwgaW4g
Tm9kZSBmcmFtZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgYWRkU291cmNlVG9GcmFtZShpbiBE
T01TdHJpbmcgbWltZVR5cGUsIGluIERPTVN0cmluZyBzb3VyY2VWYWx1ZSwgaW4gTm9kZSBmcmFt
ZSk7CisgICAgICAgIHZvaWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGluIGxvbmcgaWRlbnRp
ZmllciwgaW4gTm9kZSBmcmFtZSk7CisgICAgICAgIGJvb2xlYW4gYWRkU291cmNlVG9GcmFtZShp
biBET01TdHJpbmcgbWltZVR5cGUsIGluIERPTVN0cmluZyBzb3VyY2VWYWx1ZSwgaW4gTm9kZSBm
cmFtZSk7CiAgICAgICAgIFtDdXN0b21dIE5vZGUgZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUoaW4g
bG9uZyBsb25nIGlkZW50aWZpZXIpOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHNlYXJjaChpbiBO
b2RlIG5vZGUsIGluIERPTVN0cmluZyBxdWVyeSk7CiAjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJB
U0UpICYmIEVOQUJMRV9EQVRBQkFTRQpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kLmNwcAkocmV2aXNpb24gNDQxODEpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JGcm9udGVuZDo6cmVtb3ZlUmVzb3VyY2UobAogICAgIGZ1bmN0aW9uLT5jYWxsKCk7
CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEFkZFJlc291cmNlU291cmNlVG9GcmFt
ZShsb25nIGlkZW50aWZpZXIsIGJvb2wgaXNTdWNjZXNzZnVsKSAKK3sKKyAgICBPd25QdHI8U2Ny
aXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoImRpZEFkZFJlc291cmNl
U291cmNlVG9GcmFtZSIpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoaWRlbnRpZmll
cik7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KGlzU3VjY2Vzc2Z1bCk7CisgICAgZnVu
Y3Rpb24tPmNhbGwoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6dXBkYXRlRm9jdXNl
ZE5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBTY3JpcHRPYmplY3QgcXVhcmFudGluZWROb2RlOwpJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCShyZXZpc2lvbiA0NDE4MSkK
KysrIFdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHVwZGF0
ZVJlc291cmNlKGxvbmcgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBKU09OT2JqZWN0JiByZXNvdXJj
ZU9iaik7CiAgICAgICAgIHZvaWQgcmVtb3ZlUmVzb3VyY2UobG9uZyBsb25nIGlkZW50aWZpZXIp
OwogCisgICAgICAgIHZvaWQgZGlkQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRp
ZmllciwgYm9vbCBpc1N1Y2Nlc3NmdWwpOworCiAgICAgICAgIHZvaWQgdXBkYXRlRm9jdXNlZE5v
ZGUoTm9kZSogbm9kZSk7CiAgICAgICAgIHZvaWQgc2V0QXR0YWNoZWRXaW5kb3coYm9vbCBhdHRh
Y2hlZCk7CiAgICAgICAgIHZvaWQgaW5zcGVjdGVkV2luZG93U2NyaXB0T2JqZWN0Q2xlYXJlZChG
cmFtZSogZnJhbWUpOwpJbmRleDogV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
c1BhbmVsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNv
dXJjZXNQYW5lbC5qcwkocmV2aXNpb24gNDQxODEpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUmVzb3VyY2VzUGFuZWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksMTQg
QEAgV2ViSW5zcGVjdG9yLlJlc291cmNlc1BhbmVsLnByb3RvdHlwZSA9IAogCiAgICAgICAgIHRo
aXMuX3VwZGF0ZVNpZGViYXJXaWR0aCgpOwogICAgIH0sCi0KKyAgICAKKyAgICBleGlzdGluZ1Jl
c291cmNlVmlld0ZvclJlc291cmNlOiBmdW5jdGlvbihyZXNvdXJjZSkKKyAgICB7CisgICAgICAg
IGlmICghcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJu
IHJlc291cmNlLl9yZXNvdXJjZXNWaWV3OworICAgIH0sCisgICAgCiAgICAgcmVzb3VyY2VWaWV3
Rm9yUmVzb3VyY2U6IGZ1bmN0aW9uKHJlc291cmNlKQogICAgIHsKICAgICAgICAgaWYgKCFyZXNv
dXJjZSkKSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMJ
KHJldmlzaW9uIDQ0MTgxKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZy
YW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDExIEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICByZXZlYWxMaW5lOiBmdW5jdGlvbihsaW5l
TnVtYmVyKQogICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9pc0NvbnRlbnRMb2FkZWQoKSkgewor
ICAgICAgICAgICAgdGhpcy5fbGluZU51bWJlclRvUmV2ZWFsID0gbGluZU51bWJlcjsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIAogICAgICAgICB2YXIgcm93ID0gdGhpcy5z
b3VyY2VSb3cobGluZU51bWJlcik7CiAgICAgICAgIGlmIChyb3cpCiAgICAgICAgICAgICByb3cu
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCh0cnVlKTsKQEAgLTE3Miw2ICsxNzcsMTEgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgIGhpZ2hsaWdodExpbmU6IGZ1
bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgeworICAgICAgICBpZiAoIXRoaXMuX2lzQ29udGVudExv
YWRlZCgpKSB7CisgICAgICAgICAgICB0aGlzLl9saW5lTnVtYmVyVG9IaWdobGlnaHQgPSBsaW5l
TnVtYmVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgdmFyIHNv
dXJjZVJvdyA9IHRoaXMuc291cmNlUm93KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAoIXNvdXJj
ZVJvdykKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzOCw2ICsyNDgsMjEgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBpZiAodGhpcy5hdXRvU2l6
ZXNUb0ZpdENvbnRlbnRIZWlnaHQpCiAgICAgICAgICAgICB0aGlzLnNpemVUb0ZpdENvbnRlbnRI
ZWlnaHQoKTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAodGhpcy5fbGluZU51bWJlclRvUmV2
ZWFsKSB7CisgICAgICAgICAgICB0aGlzLnJldmVhbExpbmUodGhpcy5fbGluZU51bWJlclRvUmV2
ZWFsKTsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9saW5lTnVtYmVyVG9SZXZlYWw7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgaWYgKHRoaXMuX2xpbmVOdW1iZXJUb0hpZ2hsaWdodCkgewor
ICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRMaW5lKHRoaXMuX2xpbmVOdW1iZXJUb0hpZ2hsaWdo
dCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGluZU51bWJlclRvSGlnaGxpZ2h0OworICAg
ICAgICB9CisgICAgfSwKKyAgICAKKyAgICBfaXNDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIGRvYyA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQ7CisgICAgICAg
IHJldHVybiBkb2MgJiYgZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdOwogICAg
IH0sCiAKICAgICBfd2luZG93UmVzaXplZDogZnVuY3Rpb24oZXZlbnQpCkluZGV4OiBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwkocmV2aXNpb24gNDQxODEpCisrKyBX
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpA
QCAtOTUsOCArOTUsMTcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewog
CiAgICAgICAgIHRoaXMuYXR0YWNoKCk7CiAKLSAgICAgICAgaWYgKCFJbnNwZWN0b3JDb250cm9s
bGVyLmFkZFJlc291cmNlU291cmNlVG9GcmFtZSh0aGlzLnJlc291cmNlLmlkZW50aWZpZXIsIHRo
aXMuc291cmNlRnJhbWUuZWxlbWVudCkpCisgICAgICAgIGlmICh0aGlzLl9yZXNvdXJjZVNvdXJj
ZVJlcXVlc3RlZCkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2VT
b3VyY2VSZXF1ZXN0ZWQgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgSW5zcGVjdG9yQ29udHJv
bGxlci5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0
aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQpOworICAgIH0sCisgICAgCisgICAgYWRkUmVzb3VyY2VT
b3VyY2VUb0ZyYW1lQ2FsbGJhY2s6IGZ1bmN0aW9uKGlzU3VjY2Vzc2Z1bCkKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9yZXNvdXJjZVNvdXJjZVJlcXVlc3RlZDsKKyAgICAgICAgaWYgKCFp
c1N1Y2Nlc3NmdWwpIHJldHVybjsKIAogICAgICAgICBkZWxldGUgdGhpcy5fZnJhbWVOZWVkc1Nl
dHVwOwogCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMJKHJl
dmlzaW9uIDQ0MTgxKQorKysgV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwkod29ya2luZyBjb3B5KQpAQCAtODYxLDYgKzg2MSwyMSBAQCBXZWJJbnNwZWN0b3IucmVtb3Zl
UmVzb3VyY2UgPSBmdW5jdGlvbihpCiAgICAgICAgIHRoaXMucGFuZWxzLnJlc291cmNlcy5yZW1v
dmVSZXNvdXJjZShyZXNvdXJjZSk7CiB9CiAKK1dlYkluc3BlY3Rvci5kaWRBZGRSZXNvdXJjZVNv
dXJjZVRvRnJhbWUgPSBmdW5jdGlvbihpZGVudGlmaWVyLCBpc1N1Y2Nlc3NmdWwpCit7CisgICAg
dmFyIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZXNbaWRlbnRpZmllcl07CisgICAgaWYgKCFyZXNv
dXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNv
dXJjZXMpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgc291cmNlVmlldyA9IFdlYkluc3BlY3Rv
ci5wYW5lbHMucmVzb3VyY2VzLmV4aXN0aW5nUmVzb3VyY2VWaWV3Rm9yUmVzb3VyY2UocmVzb3Vy
Y2UpOworICAgIGlmICghc291cmNlVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghc291
cmNlVmlldy5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWVDYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworICAgIHNvdXJjZVZpZXcuYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lQ2FsbGJhY2soaXNTdWNj
ZXNzZnVsKTsKK307CisKIFdlYkluc3BlY3Rvci5hZGREYXRhYmFzZSA9IGZ1bmN0aW9uKHBheWxv
YWQpCiB7CiAgICAgdmFyIGRhdGFiYXNlID0gbmV3IFdlYkluc3BlY3Rvci5EYXRhYmFzZSgK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30732</attachid>
            <date>2009-05-28 02:37:57 -0700</date>
            <delta_ts>2009-05-28 03:18:08 -0700</delta_ts>
            <desc>Complete source frame loading in iframe &apos;load&apos; event listener.</desc>
            <filename>source-frame-onload.patch</filename>
            <type>text/plain</type>
            <size>10839</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NDIyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMDktMDUtMjggIFl1cnkgU2VtaWtoYXRza3kgIDxzZXQgRU1BSUxf
QUREUkVTUyBlbnZpcm9ubWVudCB2YXJpYWJsZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBhZGRpbmcgcmVzb3VyY2Ugc291cmNlIHRvIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZSBhc3luY2hybm91c2x5LgorCisgICAgICAgIFByb3ZpZGUg
Y29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRSZXNvdXJj
ZVNvdXJjZVRvRnJhbWUgYW5kCisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJj
ZVRvRnJhbWUgbWV0aG9kcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29u
dHJvbGxlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVj
dG9yQ29udHJvbGxlckN1c3RvbS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6YWRk
UmVzb3VyY2VTb3VyY2VUb0ZyYW1lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5yZXZlYWxMaW5lKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuaGlnaGxpZ2h0TGluZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9sb2FkZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5faXNDb250ZW50TG9hZGVkKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZVZpZXcuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUuc2V0dXBTb3VyY2VGcmFtZUlmTmVlZGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZS5fY29udGVudExv
YWRlZCk6CisKIDIwMDktMDUtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW5zcGVjdG9yQ29udHJvbGxlckN1c3RvbS5jcHAJKHJldmlzaW9uIDQ0
MjI1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0luc3BlY3RvckNvbnRyb2xsZXJDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw0NSArODcsNiBAQCBKU1ZhbHVlIEpTSW5zcGVjdG9y
Q29udHJvbGxlcjo6aGlnaGxpZ2h0CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpT
VmFsdWUgSlNJbnNwZWN0b3JDb250cm9sbGVyOjphZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoRXhl
Y1N0YXRlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgPCAy
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIGRvdWJsZSBudW1iZXI7Ci0g
ICAgaWYgKCFhcmdzLmF0KDApLmdldE51bWJlcihudW1iZXIpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLQotICAgIGxvbmcgbG9uZyBpZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPiAobnVtYmVyKTsKLQotICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3Vy
Y2UgPSBpbXBsKCktPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQocmVz
b3VyY2UpOwotICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotCi0gICAgU3RyaW5nIHNvdXJjZVN0cmluZyA9IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKTsK
LSAgICBpZiAoc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0KLSAgICByZXR1cm4ganNCb29sZWFuKGltcGwoKS0+YWRkU291cmNlVG9GcmFtZShy
ZXNvdXJjZS0+bWltZVR5cGUoKSwgc291cmNlU3RyaW5nLCB0b05vZGUoYXJncy5hdCgxKSkpKTsK
LX0KLQotSlNWYWx1ZSBKU0luc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNvdXJjZVRvRnJhbWUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIGlmIChhcmdzLnNpemUo
KSA8IDMpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIG1pbWVU
eXBlID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgU3RyaW5nIHNvdXJj
ZVN0cmluZyA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIHJldHVybiBq
c0Jvb2xlYW4oaW1wbCgpLT5hZGRTb3VyY2VUb0ZyYW1lKG1pbWVUeXBlLCBzb3VyY2VTdHJpbmcs
IHRvTm9kZShhcmdzLmF0KDIpKSkpOwotfQotCiBKU1ZhbHVlIEpTSW5zcGVjdG9yQ29udHJvbGxl
cjo6Z2V0UmVzb3VyY2VEb2N1bWVudE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yQ29udHJvbGxlckN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ0MjI1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJ
bnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNjAgKzY2
LDYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJIaQogICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250
cm9sbGVyQWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKQotewotICAgIElOQ19TVEFUUygiSW5zcGVj
dG9yQ29udHJvbGxlci5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoKSIpOwotCi0gICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPCAyKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAg
aWYgKCFhcmdzWzBdLT5Jc051bWJlcigpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotCi0gICAgbG9uZyBsb25nIGlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KGFy
Z3NbMF0tPk51bWJlclZhbHVlKCkpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xs
ZXI+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvclJlc291cmNlPiByZXNvdXJjZSA9IGluc3BlY3RvckNvbnRyb2xs
ZXItPnJlc291cmNlcygpLmdldChpZGVudGlmaWVyKTsKLSAgICBBU1NFUlQocmVzb3VyY2UpOwot
ICAgIGlmICghcmVzb3VyY2UpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAg
ICBTdHJpbmcgc291cmNlU3RyaW5nID0gcmVzb3VyY2UtPnNvdXJjZVN0cmluZygpOwotICAgIGlm
IChzb3VyY2VTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OwotCi0gICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJn
c1sxXSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwot
Ci0gICAgcmV0dXJuIHY4Qm9vbGVhbihpbnNwZWN0b3JDb250cm9sbGVyLT5hZGRTb3VyY2VUb0Zy
YW1lKHJlc291cmNlLT5taW1lVHlwZSgpLCBzb3VyY2VTdHJpbmcsIG5vZGUpKTsKLX0KLQotQ0FM
TEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJBZGRTb3VyY2VUb0ZyYW1lKQotewot
ICAgIElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5hZGRTb3VyY2VUb0ZyYW1lKCkiKTsK
LQotICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKLQotICAgIHY4OjpUcnlDYXRjaCBleGNlcHRpb25DYXRjaGVyOwotCi0gICAgU3RyaW5n
IG1pbWVUeXBlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKLSAgICBp
ZiAobWltZVR5cGUuaXNFbXB0eSgpIHx8IGV4Y2VwdGlvbkNhdGNoZXIuSGFzQ2F1Z2h0KCkpCi0g
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0KLSAgICBTdHJpbmcgc291cmNlU3RyaW5n
ID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKTsKLSAgICBpZiAoc291cmNl
U3RyaW5nLmlzRW1wdHkoKSB8fCBleGNlcHRpb25DYXRjaGVyLkhhc0NhdWdodCgpKQotICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OkRP
TVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sxXSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlciA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xs
ZXI+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7Ci0g
ICAgcmV0dXJuIHY4Qm9vbGVhbihpbnNwZWN0b3JDb250cm9sbGVyLT5hZGRTb3VyY2VUb0ZyYW1l
KG1pbWVUeXBlLCBzb3VyY2VTdHJpbmcsIG5vZGUpKTsKLX0KLQogQ0FMTEJBQ0tfRlVOQ19ERUNM
KEluc3BlY3RvckNvbnRyb2xsZXJHZXRSZXNvdXJjZURvY3VtZW50Tm9kZSkKIHsKICAgICBJTkNf
U1RBVFMoIkluc3BlY3RvckNvbnRyb2xsZXIuZ2V0UmVzb3VyY2VEb2N1bWVudE5vZGUoKSIpOwpJ
bmRleDogV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDQ0MjI1KQorKysgV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4MSw2ICs0ODEsMTkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojp0b2dnbGVTZWFyY2hGbwogICAgICAgICBoaWRlSGlnaGxpZ2h0KCk7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6YWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmll
ciwgTm9kZSogZnJhbWUpCit7CisgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fZnJvbnRlbmQpCisg
ICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2Ug
PSByZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAg
ICAgIFN0cmluZyBzb3VyY2VTdHJpbmcgPSByZXNvdXJjZS0+c291cmNlU3RyaW5nKCk7CisgICAg
ICAgIGlmICghc291cmNlU3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFkZFNvdXJjZVRv
RnJhbWUocmVzb3VyY2UtPm1pbWVUeXBlKCksIHNvdXJjZVN0cmluZywgZnJhbWUpOworICAgIH0K
K30KKwogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptb3VzZURpZE1vdmVPdmVyRWxlbWVudChj
b25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkKQogewogICAgIGlmICghZW5hYmxl
ZCgpIHx8ICFtX3NlYXJjaGluZ0Zvck5vZGUpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCShyZXZpc2lvbiA0NDIyNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDYgKzE2NCw3IEBAIHB1
YmxpYzoKICAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKICAgICB2b2lkIHNldFdpbmRvd1Zpc2li
bGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNlKTsKIAorICAgIHZv
aWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGxvbmcgaWRlbnRpZmllciwgTm9kZSogZnJhbWUp
OwogICAgIGJvb2wgYWRkU291cmNlVG9GcmFtZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSwgTm9kZSopOwogICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayopOwogICAgIHZvaWQg
YWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCk7CkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlkbAkocmV2
aXNpb24gNDQyMjUpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAg
IFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXdpbmRvd1Zpc2libGVdIGJvb2xlYW4gaXNXaW5kb3dW
aXNpYmxlKCk7CiAgICAgICAgIFtJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPXNlYXJjaGluZ0Zvck5v
ZGVJblBhZ2VdIGJvb2xlYW4gc2VhcmNoaW5nRm9yTm9kZSgpOwogCi0gICAgICAgIFtDdXN0b21d
IHZvaWQgYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKGluIGxvbmcgbG9uZyBpZGVudGlmaWVyLCBp
biBOb2RlIGZyYW1lKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRTb3VyY2VUb0ZyYW1lKGlu
IERPTVN0cmluZyBtaW1lVHlwZSwgaW4gRE9NU3RyaW5nIHNvdXJjZVZhbHVlLCBpbiBOb2RlIGZy
YW1lKTsKKyAgICAgICAgdm9pZCBhZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUoaW4gbG9uZyBpZGVu
dGlmaWVyLCBpbiBOb2RlIGZyYW1lKTsKKyAgICAgICAgYm9vbGVhbiBhZGRTb3VyY2VUb0ZyYW1l
KGluIERPTVN0cmluZyBtaW1lVHlwZSwgaW4gRE9NU3RyaW5nIHNvdXJjZVZhbHVlLCBpbiBOb2Rl
IGZyYW1lKTsKICAgICAgICAgW0N1c3RvbV0gTm9kZSBnZXRSZXNvdXJjZURvY3VtZW50Tm9kZShp
biBsb25nIGxvbmcgaWRlbnRpZmllcik7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgc2VhcmNoKGlu
IE5vZGUgbm9kZSwgaW4gRE9NU3RyaW5nIHF1ZXJ5KTsKICNpZiBkZWZpbmVkKEVOQUJMRV9EQVRB
QkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUZyYW1lLmpzCShyZXZpc2lvbiA0NDIyNSkKKysrIFdlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCwx
MSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgcmV2ZWFs
TGluZTogZnVuY3Rpb24obGluZU51bWJlcikKICAgICB7CisgICAgICAgIGlmICghdGhpcy5faXND
b250ZW50TG9hZGVkKCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2xpbmVOdW1iZXJUb1JldmVhbCA9
IGxpbmVOdW1iZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAKICAgICAg
ICAgdmFyIHJvdyA9IHRoaXMuc291cmNlUm93KGxpbmVOdW1iZXIpOwogICAgICAgICBpZiAocm93
KQogICAgICAgICAgICAgcm93LnNjcm9sbEludG9WaWV3SWZOZWVkZWQodHJ1ZSk7CkBAIC0xNzIs
NiArMTc3LDExIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAg
ICBoaWdobGlnaHRMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9pc0NvbnRlbnRMb2FkZWQoKSkgeworICAgICAgICAgICAgdGhpcy5fbGluZU51bWJl
clRvSGlnaGxpZ2h0ID0gbGluZU51bWJlcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCiAgICAgICAgIHZhciBzb3VyY2VSb3cgPSB0aGlzLnNvdXJjZVJvdyhsaW5lTnVtYmVyKTsK
ICAgICAgICAgaWYgKCFzb3VyY2VSb3cpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMzgsNiAr
MjQ4LDIzIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgaWYgKHRoaXMuYXV0b1NpemVzVG9GaXRDb250ZW50SGVpZ2h0KQogICAgICAgICAgICAgdGhp
cy5zaXplVG9GaXRDb250ZW50SGVpZ2h0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKHRo
aXMuX2xpbmVOdW1iZXJUb1JldmVhbCkgeworICAgICAgICAgICAgdGhpcy5yZXZlYWxMaW5lKHRo
aXMuX2xpbmVOdW1iZXJUb1JldmVhbCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fbGluZU51
bWJlclRvUmV2ZWFsOworICAgICAgICB9CisgICAgCisgICAgICAgIGlmICh0aGlzLl9saW5lTnVt
YmVyVG9IaWdobGlnaHQpIHsKKyAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0TGluZSh0aGlzLl9s
aW5lTnVtYmVyVG9IaWdobGlnaHQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2xpbmVOdW1i
ZXJUb0hpZ2hsaWdodDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGhpcy5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoImNvbnRlbnQgbG9hZGVkIik7CisgICAgfSwKKyAgICAKKyAgICBf
aXNDb250ZW50TG9hZGVkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGRvYyA9IHRoaXMuZWxl
bWVudC5jb250ZW50RG9jdW1lbnQ7CisgICAgICAgIHJldHVybiBkb2MgJiYgZG9jLmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdOwogICAgIH0sCiAKICAgICBfd2luZG93UmVzaXplZDog
ZnVuY3Rpb24oZXZlbnQpCkluZGV4OiBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNl
Vmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNl
Vmlldy5qcwkocmV2aXNpb24gNDQyMjUpCisrKyBXZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDE1IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmF0dGFjaCgpOwog
Ci0gICAgICAgIGlmICghSW5zcGVjdG9yQ29udHJvbGxlci5hZGRSZXNvdXJjZVNvdXJjZVRvRnJh
bWUodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU5lZWRzU2V0
dXA7CisgICAgICAgIHRoaXMuc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigiY29udGVudCBs
b2FkZWQiLCB0aGlzLl9jb250ZW50TG9hZGVkLCB0aGlzKTsKKyAgICAgICAgSW5zcGVjdG9yQ29u
dHJvbGxlci5hZGRSZXNvdXJjZVNvdXJjZVRvRnJhbWUodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVy
LCB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQpOworICAgIH0sCisgICAgCisgICAgX2NvbnRlbnRM
b2FkZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9mcmFtZU5lZWRz
U2V0dXA7CisgICAgICAgIHRoaXMuc291cmNlRnJhbWUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29u
dGVudCBsb2FkZWQiLCB0aGlzLl9jb250ZW50TG9hZGVkLCB0aGlzKTsKIAogICAgICAgICBpZiAo
dGhpcy5yZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQp
IHsKICAgICAgICAgICAgIHRoaXMuc291cmNlRnJhbWUuYWRkRXZlbnRMaXN0ZW5lcigic3ludGF4
IGhpZ2hsaWdodGluZyBjb21wbGV0ZSIsIHRoaXMuX3N5bnRheEhpZ2hsaWdodGluZ0NvbXBsZXRl
LCB0aGlzKTsK
</data>
<flag name="review"
          id="15581"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>