<?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>144107</bug_id>
          
          <creation_ts>2015-04-23 10:34:14 -0700</creation_ts>
          <short_desc>Web Inspector: Inspector hangs when trying to view a large XHR resource</short_desc>
          <delta_ts>2016-04-07 12:30:54 -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</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1087877</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-04-23 10:34:14 -0700</bug_when>
    <thetext>Steps to reproduce:

1. Go to https://build.webkit.org/dashboard/metrics.html
2. Request a month&apos;s worth of data.
3. Open the inspector.
4. Select one of the XHR resources labelled &apos;_all&apos; (Should be &gt;6MB in size)
5. :hang:

I&apos;m not sure what&apos;s going on here, Codemirror should be able to display a resource that large without much trouble. (Right?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087878</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-23 10:34:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/20669463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166061</commentid>
    <comment_count>2</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2016-02-18 09:49:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/19882575&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181600</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-06 23:11:59 -0700</bug_when>
    <thetext>I created a test page that loads a 9MB JSON Resource (an Object with 300000 properties. 

Before my changes selecting the resource in Web Inspector&apos;s Resource sidebar we took about 10 seconds to show the resource with the UI being completely frozen for about 9s.

After, we load the resource in under 0.5s, with the UI being hung for maybe 100ms. Most of the time is loading the content from the backend. Formatting is done async in a worker. We avoid asking CodeMirror to layout multiple times. We avoid trying to create CodeMirror markers for colors/gradients etc.

I will use this bug for the final part of the work. Hooking up the async formatter in TextEditor/SourceCodeTextEditor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181602</commentid>
    <comment_count>4</comment_count>
      <attachid>275869</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-06 23:37:27 -0700</bug_when>
    <thetext>Created attachment 275869
[PATCH] Proposed Fix

Here we go!

There is one known issue right now. When reloading with a breakpoint selected, the content does not reveal the breakpoint line in the center of the screen like it is supposed to. I want to investigate that before landing.

There is one possible issue. The BreakpointTreeElement being in the UI even though it&apos;s Breakpoint.sourceCodeLocation.sourceCode being null is new to this patch. I haven&apos;t investigated the root cause of this regression, but I painted over it with the changes to ContentView / NavigationBar restoration. It would be nice to understand what changed here but I&apos;m not as concerned about this compared to the previous issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181676</commentid>
    <comment_count>5</comment_count>
      <attachid>275869</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2016-04-07 08:21:40 -0700</bug_when>
    <thetext>Comment on attachment 275869
[PATCH] Proposed Fix

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

&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:141
&gt; +        this._format(formatted).then(callback).catch(handlePromiseException);

Why make this be a callback and not return the promise so callers can chain?

&gt; Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js:206
&gt; +        this._textEditor.setFormatted(activated);

Maybe keep the setter for the non-callback cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181712</commentid>
    <comment_count>6</comment_count>
      <attachid>275869</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2016-04-07 10:20:51 -0700</bug_when>
    <thetext>Comment on attachment 275869
[PATCH] Proposed Fix

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

Great work!

&gt; Source/WebInspectorUI/UserInterface/Views/ContentView.js:157
&gt; +        if (!resolvedRepresentedObject)

I would add a comment here to summarize when we could expect this to fail (and not be a bug).

&gt; Source/WebInspectorUI/UserInterface/Views/NavigationSidebarPanel.js:207
&gt; +        let contentView = this.contentBrowser.showContentViewForRepresentedObject(treeElement.representedObject);

Or here.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:141
&gt;&gt; +        this._format(formatted).then(callback).catch(handlePromiseException);
&gt; 
&gt; Why make this be a callback and not return the promise so callers can chain?

I was going to comment the same. And, maybe call it updateFormattedState so it doesn&apos;t look like a setter. It seems weird that a setter has a callback or promise.

&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:740
&gt; +                this._undoFormatting(beforePrettyPrintState, resolve);

Aw man, I was expecting it to be promises all the way down! I guess you&apos;d have to change WorkerFormatter, so this is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181785</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-07 12:14:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 275869 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275869&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:141
&gt; &gt; +        this._format(formatted).then(callback).catch(handlePromiseException);
&gt; 
&gt; Why make this be a callback and not return the promise so callers can chain?

I made this return the promise. By using a single then here we could catch any errors with this one catch handler. Otherwise we&apos;d have to add a catch handler everywhere we add a then, which is kinda unfortunate, since there is no `window.onerror` for Promise exceptions.

I&apos;ve considered making something like this to ensure we always have a catch handler. Its a dirty kind of Promise.oncatch, but the problem is what if we reject a promise intentionally, then we get the uncaught exception dialog incorrectly...

    (function() {
        let originalThen = Promise.prototype.then;
        Promise.prototype.then = function(resolveHandler, rejectHandler) {
            if (!rejectHandler)
                return originalThen.call(this, resolveHandler, handlePromiseException);
            return originalThen.call(this, resolveHandler, rejectHandler);
        }
    })();



(In reply to comment #6)
&gt; Comment on attachment 275869 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; &gt;&gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:141
&gt; &gt;&gt; +        this._format(formatted).then(callback).catch(handlePromiseException);
&gt; &gt; 
&gt; &gt; Why make this be a callback and not return the promise so callers can chain?
&gt; 
&gt; I was going to comment the same. And, maybe call it updateFormattedState so
&gt; it doesn&apos;t look like a setter. It seems weird that a setter has a callback
&gt; or promise.

Yeah, the name here was pretty bad. I used your suggestion.

&gt; &gt; Source/WebInspectorUI/UserInterface/Views/TextEditor.js:740
&gt; &gt; +                this._undoFormatting(beforePrettyPrintState, resolve);
&gt; 
&gt; Aw man, I was expecting it to be promises all the way down! I guess you&apos;d
&gt; have to change WorkerFormatter, so this is fine.

It could be, I just didn&apos;t trust myself to do it. And given it is all internal code at this point, it seemed fine to not do it.

I wonder what the effect will be of adding all these micro tasks where there weren&apos;t any before. Until I better understand microtask checkpoints and Promise chaining, I&apos;m going to stick to what I know works. This patch was already taking me a long time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181793</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-04-07 12:30:54 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/199169</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275869</attachid>
            <date>2016-04-06 23:37:27 -0700</date>
            <delta_ts>2016-04-07 08:21:40 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>async-formatters.patch</filename>
            <type>text/plain</type>
            <size>40088</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGI0NzhjNmYuLjZiNDE1MjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExNCBAQAorMjAxNi0wNC0wNiAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3Bl
Y3RvciBoYW5ncyB3aGVuIHRyeWluZyB0byB2aWV3IGEgbGFyZ2UgWEhSIHJlc291cmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQxMDcKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzIwNjY5NDYzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHkgYXV0byBmb3JtYXR0aW5nIChpbml0aWFs
bHkgcHJldHR5IHByaW50IHNvdXJjZSBjb2RlKSBpbiBUZXh0RWRpdG9yCisgICAgICAgIHdhcyBk
b25lIHN5bmNocm9ub3VzbHkgaW4gdGhpcyBvcmRlcjoKKyAgICAgICAgCisgICAgICAgICAgKDEp
IHJldmVhbGluZyB0aGUgRWRpdG9yIGFzIHNvb24gYXMgd2UgaGF2ZSBjb250ZW50CisgICAgICAg
ICAgKDIpIHNldCB0aGUgQ29kZU1pcnJvciB2YWx1ZQorICAgICAgICAgICgzKSBwcmV0dHkgcHJp
bnQgd2l0aCB0aGUgQ29kZU1pcnJvciBlZGl0b3IKKyAgICAgICAgICAoNCkgc2V0IHRoZSBDb2Rl
TWlycm9yIHZhbHVlCisgICAgICAgICAgICAgID0+IExheW91dAorICAgICAgICAgIAorICAgICAg
ICBBdCB0aGUgZW5kLCBDb2RlTWlycm9yIHdvdWxkIGxheW91dCBvbmNlIHdpdGggdGhlIG5ldyBj
b250ZW50LiBUaGlzIGFwcHJvYWNoCisgICAgICAgIHBlcmZvcm1zIHZlcnkgcG9vcmx5IHdoZW4g
c3RlcCAoMykgaXMgYW4gYXN5bmNocm9ub3VzIGFjdGlvbiwgYmVjYXVzZSBpdCB3b3VsZAorICAg
ICAgICBtZWFuIENvZGVNaXJyb3Igd291bGQgbGF5b3V0IGZvciBib3RoICgyKSBhbmQgYXQgdGhl
IGVuZCAoNCkgYW5kIHRoZSBsYXlvdXQKKyAgICAgICAgaXRzZWxmIGNhbiBiZSB2ZXJ5IGNvc3Rs
eSBpZiB0aGUgY29udGVudCBpcyBtaW5pZmllZCBhbmQgc28gaGFzIHZlcnkgbG9uZworICAgICAg
ICBsaW5lcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIHRoYXQgbmVlZCB0byBiZSBzeW50YXggaGln
aGxpZ2h0ZWQgYW5kIHZpc2libGUKKyAgICAgICAgc2luY2Ugd2UgZG8gbm90IHdyYXAuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIHRvIGJlbmVm
aXQgYXN5bmNocm9ub3VzIGZvcm1hdHRpbmcuCisgICAgICAgIFdoZW4gU291cmNlQ29kZVRleHRF
ZGl0b3IgZGV0ZXJtaW5lcyB0aGF0IGl0IGNhbiBhdXRvZm9ybWF0IGl0OgorCisgICAgICAgICAg
KDEpIHNldCB0aGUgQ29kZU1pcnJvciB2YWx1ZQorICAgICAgICAgICgyKSBwcmV0dHkgcHJpbnQg
dG8gc291cmNlIHRleHQKKyAgICAgICAgICAoMykgcmV2ZWFsIHRoZSBFZGl0b3Igd2hlbiBwcmV0
dHkgcHJpbnRpbmcgaXMgZG9uZQorICAgICAgICAgICg0KSBzZXQgdGhlIENvZGVNaXJyb3IgdmFs
dWUKKyAgICAgICAgICAgICAgPT4gTGF5b3V0CisKKyAgICAgICAgVGhpcyBtYWludGFpbnMgdGhl
IGZhY3QgdGhhdCB0byB1bmRvIHByZXR0eSBwcmludGluZyB3ZSBjYW4ganVzdCAidW5kbyIgdGhl
CisgICAgICAgIGVkaXRvciB0byBnZXQgdGhlIG9yaWdpbmFsIHRleHQuIFRoaXMgYWxzbyBtZWFu
cyB3ZSBvbmx5IGRvIGEgc2luZ2xlCisgICAgICAgIENvZGVNaXJyb3IgbGF5b3V0LCB3aXRoIHRo
ZSBwcmV0dHkgcHJpbnRlZCBhbmQgdGhlcmVmb3JlIG1vcmUgbWFuYWdlYWJsZQorICAgICAgICBz
b3VyY2UgdGV4dCBmb3IgaGlnaGxpZ2h0aW5nLiBJdCBhbHNvIG1lYW5zIHdlIGNvbnRpbnVlIHRv
IHNob3cgYSBsb2FkaW5nCisgICAgICAgIGluZGljYXRvciBpbiB0aGUgZWRpdG9yIHdoaWxlIHdl
IGFyZSBwcmV0dHkgcHJpbnRpbmcuIElmIHRoaXMgaXMgdHJ1ZWx5CisgICAgICAgIGRvbmUgYXN5
bmNocm9ub3VzbHksIHdoaWNoIGlzIHRoZSBjYXNlIGZvciBKYXZhU2NyaXB0IHdpdGggRm9ybWF0
dGVyV29ya2VyLAorICAgICAgICB0aGVuIHRoZSBsb2FkaW5nIGluZGljYXRvciB3aWxsIGFuaW1h
dGUgc21vb3RobHkuCisKKyAgICAgICAgVGhpcyBzZXF1ZW5jZSBhbHNvIHdvcmtzIHdpdGggdGhl
IHRyYWRpdGlvbmFsIHN5bmNocm9ub3VzIGZvcm1hdHRlcnMsCisgICAgICAgIHdoaWNoIHdlIHN0
aWxsIGhhdmUgZm9yIENTUy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29udGVu
dFZpZXcuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcuY29udGVudFZpZXdG
b3JSZXByZXNlbnRlZE9iamVjdCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9OYXZp
Z2F0aW9uU2lkZWJhclBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25T
aWRlYmFyUGFuZWwucHJvdG90eXBlLnNob3dEZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVu
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTmF2aWdhdGlvblNpZGViYXJQYW5lbC5wcm90b3R5
cGUuX2NoZWNrRWxlbWVudHNGb3JQZW5kaW5nVmlld1N0YXRlQ29va2llKToKKyAgICAgICAgQnJl
YWtwb2ludFRyZWVFbGVtZW50cyBjYW4gbm93IGJlIHJlc3RvcmVkIGFuZCByZXNlbGVjdGVkIHdo
ZW4gaXRzCisgICAgICAgIHNvdXJjZSBjb2RlIGlzIG51bGwuIEF2b2lkIGRlbGV0aW5nIHRoZSBw
ZW5kaW5nIGNvb2tpZSBkYXRhIGlmIGEKKyAgICAgICAgQ29udGVudFZpZXcgd2FzIG5vdCBzaG93
biBmb3IgdGhlIHJlc291cmNlLiBXaGVuIHRoZSBCcmVha3BvaW50CisgICAgICAgIGFuZCBTb3Vy
Y2VDb2RlIGdldCBob29rZWQgdXAsIHRoaXMgY29kZSB3aWxsIHJ1biBhZ2FpbiBhbmQgd29yay4K
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0Q29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVQ
cmV0dHlQcmludCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UZXh0UmVzb3VyY2VD
b250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UmVzb3VyY2VDb250ZW50
Vmlldy5wcm90b3R5cGUuX3RvZ2dsZVByZXR0eVByaW50KToKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL1RleHRDb250ZW50Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
Q29udGVudFZpZXcucHJvdG90eXBlLl90b2dnbGVQcmV0dHlQcmludCk6CisgICAgICAgIE5ldyBB
UEkgZm9yIHRvZ2dsaW5nIGZvcm1hdHRpbmcsIG5vdyB0aGF0IGl0IGlzIGFuIGFzeW5jIG9wZXJh
dGlvbi4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0
b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50b2dnbGVU
eXBlQW5ub3RhdGlvbnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRp
dG9yLnByb3RvdHlwZS5wcmV0dHlQcmludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhDb250ZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Byb2NlZWRQb3B1
bGF0ZVdpdGhDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUuX3ByZXBhcmVFZGl0b3JGb3JJbml0aWFsQ29udGVudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdp
dGhJbmxpbmVTY3JpcHRDb250ZW50LnNjcmlwdENvbnRlbnRBdmFpbGFibGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fcG9wdWxhdGVXaXRo
SW5saW5lU2NyaXB0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRl
eHRFZGl0b3IucHJvdG90eXBlLl9wb3B1bGF0ZVdpdGhTY3JpcHRDb250ZW50KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudGV4dEVkaXRvclVw
ZGF0ZWRGb3JtYXR0aW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVk
aXRvci5wcm90b3R5cGUuX2NvbnRlbnRXaWxsUG9wdWxhdGUpOiBEZWxldGVkLgorICAgICAgICBN
b3ZlIGF1dG8gZm9ybWF0dGluZyBsb2dpYyBpbnRvIFNvdXJjZUNvZGVUZXh0RWRpdG9yLCBiZWNh
dXNlIGl0CisgICAgICAgIGRldGVybWluZXMgaWYgY29udGVudCBzaG91bGQgYmUgYXV0byBmb3Jt
YXR0ZWQsIGFuZCBpdCBsb2FkcyB0aGUKKyAgICAgICAgaW5pdGlhbCBjb250ZW50IHNvIGl0IGNh
biBkZXRlcm1pbmUgd2hlbiB0byBzaG93IHRoZSBlZGl0b3IgZm9yCisgICAgICAgIHRoZSBmaXJz
dCB0aW1lLgorCisgICAgICAgIFdoZW4gd2UgZ2V0IHRoZSBpbml0aWFsIGNvbnRlbnQgYW5kIGRl
dGVybWluZSB3ZSBoYXZlIHRvIGF1dG9mb3JtYXQsCisgICAgICAgIHNldHVwIHRoZSBUZXh0RWRp
dG9yLCBidXQgZG9uJ3QgcHJvY2VlZCB3aXRoIFdpbGxQb3B1bGF0ZS9EaWRQb3B1bGF0ZQorICAg
ICAgICB1bnRpbCBhZnRlciB3ZSBoYXZlIGZvcm1hdHRlZCB0ZXh0LgorCisgICAgICAgICogVXNl
ckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Iuc2V0IHN0cmluZy51
cGRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldCBz
dHJpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLnNldEZv
cm1hdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuaGFz
Rm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5f
Zm9ybWF0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5wcmV0
dHlQcmludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2Nh
blVzZUZvcm1hdHRlcldvcmtlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5w
cm90b3R5cGUuX3N0YXJ0V29ya2VyUHJldHR5UHJpbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3IucHJvdG90eXBlLl9zdGFydENvZGVNaXJyb3JQcmV0dHlQcmludCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuX2ZpbmlzaFByZXR0eVByaW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yLnByb3RvdHlwZS5fdW5kb0Zvcm1h
dHRpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IucHJvdG90eXBlLl91cGRh
dGVBZnRlckZvcm1hdHRpbmcpOgorICAgICAgICBCcmVhayB1cCB0aGUgc3luY2hyb25vdXMgcHJl
dHR5IHByaW50aW5nIGNvZGUgaW50byBtdWx0aXBsZSBzdGVwcy4KKyAgICAgICAgT25lIHBhdGgg
Y2FuIGJlIGFzeW5jaHJvbm91cyBmb3JtYXR0aW5nIHZpYSBGb3JtYXR0ZXJXb3JrZXIsIGFub3Ro
ZXIKKyAgICAgICAgcGF0aCBtYXkgYmUgc3luY2hyb25vdXMgZm9ybWF0dGluZyB1c2luZyB0aGUg
Q29kZU1pcnJvciBmb3JtYXR0ZXJzLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ci5wcm90b3R5cGUuc2V0IGZvcm1hdHRlZCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSB0aGUg
c3luY2hyb25vdXMgYHNldCBmb3JtYXR0ZWRgIHNldHRlci4gUmVwbGFjZSB3aXRoIHNldEZvcm1h
dHRlZCgpLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUuc2V0
IGF1dG9Gb3JtYXQpOiBEZWxldGVkLgorICAgICAgICBSZW1vdmUgdGhlIFRleHRFZGl0b3IncyBh
dXRvZm9ybWF0LiBTaW5jZSBmb3JtYXR0aW5nIGNhbiBiZSBhc3luYywgaGF2aW5nCisgICAgICAg
IHRoZSBUZXh0RWRpdG9yIHNob3dpbmcgYW5kIGFzeW5jaHJvbm91c2x5IGZvcm1hdCBpdHMgaW5p
dGlhbCBjb250ZW50cyBpcworICAgICAgICBhIHJlY2lwZSBmb3IgcG9vciBwZXJmb3JtYW5jZSBj
YXVzaW5nIG11bHRpcGxlIGxheW91dHMgb2YgZGlmZmVyZW50IGNvbnRlbnQuCisgICAgICAgIElu
c3RlYWQsIGF1dG9mb3JtYXR0aW5nIGlzIGhhbmRsZWQgYnkgU291cmNlQ29kZVRleHRFZGl0b3Is
IGFuZCBUZXh0RWRpdG9yCisgICAgICAgIGNhbiB0aGVuIGJlIHNob3duIHdoZW4gaXQgaGFzIHRo
ZSByaWdodCBkYXRhLgorCiAyMDE2LTA0LTA0ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW1wcm92ZSBKYXZhU2NyaXB0IHBy
ZXR0eSBwcmludGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9Db250ZW50Vmlldy5qcwppbmRleCBmNGY0ZGUwLi5kMGFlMzk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db250ZW50
Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9D
b250ZW50Vmlldy5qcwpAQCAtMTU0LDYgKzE1NCw5IEBAIFdlYkluc3BlY3Rvci5Db250ZW50Vmll
dyA9IGNsYXNzIENvbnRlbnRWaWV3IGV4dGVuZHMgV2ViSW5zcGVjdG9yLlZpZXcKICAgICAgICAg
Y29uc29sZS5hc3NlcnQocmVwcmVzZW50ZWRPYmplY3QpOwogCiAgICAgICAgIGxldCByZXNvbHZl
ZFJlcHJlc2VudGVkT2JqZWN0ID0gV2ViSW5zcGVjdG9yLkNvbnRlbnRWaWV3LnJlc29sdmVkUmVw
cmVzZW50ZWRPYmplY3RGb3JSZXByZXNlbnRlZE9iamVjdChyZXByZXNlbnRlZE9iamVjdCk7Cisg
ICAgICAgIGlmICghcmVzb2x2ZWRSZXByZXNlbnRlZE9iamVjdCkKKyAgICAgICAgICAgIHJldHVy
biBudWxsOworCiAgICAgICAgIGxldCBleGlzdGluZ0NvbnRlbnRWaWV3ID0gcmVzb2x2ZWRSZXBy
ZXNlbnRlZE9iamVjdFtXZWJJbnNwZWN0b3IuQ29udGVudFZpZXcuQ29udGVudFZpZXdGb3JSZXBy
ZXNlbnRlZE9iamVjdFN5bWJvbF07CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCFleGlzdGluZ0Nv
bnRlbnRWaWV3IHx8IGV4aXN0aW5nQ29udGVudFZpZXcgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
Q29udGVudFZpZXcpOwogICAgICAgICBpZiAoZXhpc3RpbmdDb250ZW50VmlldykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL05hdmlnYXRpb25T
aWRlYmFyUGFuZWwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9OYXZpZ2F0aW9uU2lkZWJhclBhbmVsLmpzCmluZGV4IDg4Y2QyNjEuLmY5ZDJjMDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL05hdmlnYXRp
b25TaWRlYmFyUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvTmF2aWdhdGlvblNpZGViYXJQYW5lbC5qcwpAQCAtMjAyLDEwICsyMDIsMTQgQEAg
V2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwgPSBjbGFzcyBOYXZpZ2F0aW9uU2lk
ZWJhclBhbmVsIGV4dGVuZHMgV2ViSW4KICAgICAgICAgY29uc29sZS5hc3NlcnQodHJlZUVsZW1l
bnQpOwogICAgICAgICBjb25zb2xlLmFzc2VydCh0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVj
dCk7CiAgICAgICAgIGlmICghdHJlZUVsZW1lbnQgfHwgIXRyZWVFbGVtZW50LnJlcHJlc2VudGVk
T2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGxldCBjb250ZW50VmlldyA9IHRoaXMuY29udGVudEJyb3dzZXIuc2hvd0NvbnRl
bnRWaWV3Rm9yUmVwcmVzZW50ZWRPYmplY3QodHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3Qp
OworICAgICAgICBpZiAoIWNvbnRlbnRWaWV3KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIHRoaXMuY29udGVudEJyb3dzZXIuc2hvd0NvbnRlbnRWaWV3Rm9yUmVwcmVzZW50
ZWRPYmplY3QodHJlZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QpOwogICAgICAgICB0cmVlRWxl
bWVudC5yZXZlYWxBbmRTZWxlY3QodHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBzYXZlU3RhdGVUb0Nvb2tpZShjb29raWUpCkBAIC03
NDAsNyArNzQ0LDkgQEAgV2ViSW5zcGVjdG9yLk5hdmlnYXRpb25TaWRlYmFyUGFuZWwgPSBjbGFz
cyBOYXZpZ2F0aW9uU2lkZWJhclBhbmVsIGV4dGVuZHMgV2ViSW4KICAgICAgICAgfSwgdGhpcyk7
CiAKICAgICAgICAgaWYgKG1hdGNoZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICB0aGlzLnNob3dE
ZWZhdWx0Q29udGVudFZpZXdGb3JUcmVlRWxlbWVudChtYXRjaGVkRWxlbWVudCk7CisgICAgICAg
ICAgICBsZXQgZGlkU2hvd0NvbnRlbnRWaWV3ID0gdGhpcy5zaG93RGVmYXVsdENvbnRlbnRWaWV3
Rm9yVHJlZUVsZW1lbnQobWF0Y2hlZEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKCFkaWRTaG93
Q29udGVudFZpZXcpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICB0aGlz
Ll9wZW5kaW5nVmlld1N0YXRlQ29va2llID0gbnVsbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2NyaXB0Q29udGVudFZpZXcuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmll
dy5qcwppbmRleCAxZjdiMWZmLi43ZTg0ODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5qcworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TY3JpcHRDb250ZW50Vmlldy5q
cwpAQCAtMjA5LDcgKzIwOSw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRDb250ZW50VmlldyA9IGNs
YXNzIFNjcmlwdENvbnRlbnRWaWV3IGV4dGVuZHMgV2ViSW5zcGVjdG9yLkNvCiAgICAgX3RvZ2ds
ZVByZXR0eVByaW50KGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGFjdGl2YXRlZCA9ICF0aGlz
Ll9wcmV0dHlQcmludEJ1dHRvbk5hdmlnYXRpb25JdGVtLmFjdGl2YXRlZDsKLSAgICAgICAgdGhp
cy5fdGV4dEVkaXRvci5mb3JtYXR0ZWQgPSBhY3RpdmF0ZWQ7CisgICAgICAgIHRoaXMuX3RleHRF
ZGl0b3Iuc2V0Rm9ybWF0dGVkKGFjdGl2YXRlZCk7CiAgICAgfQogCiAgICAgX3RvZ2dsZVR5cGVB
bm5vdGF0aW9ucyhldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKaW5kZXgg
OGU0N2M4Ny4uODVkYTZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0b3IuanMKQEAg
LTQwLDExICs0MCwxMyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFz
cyBTb3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAgICB0aGlzLl9j
b250ZW50UG9wdWxhdGVkID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX2ludmFsaWRMaW5lTnVtYmVy
cyA9IHswOiB0cnVlfTsKICAgICAgICAgdGhpcy5faWdub3JlQ29udGVudERpZENoYW5nZSA9IDA7
CisgICAgICAgIHRoaXMuX3JlcXVlc3RpbmdTY3JpcHRDb250ZW50ID0gZmFsc2U7CiAKICAgICAg
ICAgdGhpcy5fdHlwZVRva2VuU2Nyb2xsSGFuZGxlciA9IG51bGw7CiAgICAgICAgIHRoaXMuX3R5
cGVUb2tlbkFubm90YXRvciA9IG51bGw7CiAgICAgICAgIHRoaXMuX2Jhc2ljQmxvY2tBbm5vdGF0
b3IgPSBudWxsOwogCisgICAgICAgIHRoaXMuX2F1dG9Gb3JtYXQgPSBmYWxzZTsKICAgICAgICAg
dGhpcy5faXNQcm9iYWJseU1pbmlmaWVkID0gZmFsc2U7CiAKICAgICAgICAgLy8gRklYTUU6IEN1
cnJlbnRseSB0aGlzIGp1c3QganVtcHMgYmV0d2VlbiByZXNvdXJjZXMgYW5kIHJlbGF0ZWQgc291
cmNlIG1hcCByZXNvdXJjZXMuIEl0IGRvZXNuJ3QgImp1bXAgdG8gc3ltYm9sIiB5ZXQuCkBAIC0y
NjAsOCArMjYyLDEyIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGNsYXNz
IFNvdXJjZUNvZGVUZXh0RWRpdG9yIGV4dGVuZHMgV2ViSW5zcGVjCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgdmFyIG5ld0FjdGl2YXRlZFN0YXRlID0gIXRoaXMuX3R5cGVU
b2tlbkFubm90YXRvci5pc0FjdGl2ZSgpOwotICAgICAgICBpZiAobmV3QWN0aXZhdGVkU3RhdGUg
JiYgdGhpcy5faXNQcm9iYWJseU1pbmlmaWVkICYmICF0aGlzLmZvcm1hdHRlZCkKLSAgICAgICAg
ICAgIHRoaXMuZm9ybWF0dGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld0FjdGl2YXRlZFN0YXRl
ICYmIHRoaXMuX2lzUHJvYmFibHlNaW5pZmllZCAmJiAhdGhpcy5mb3JtYXR0ZWQpIHsKKyAgICAg
ICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkKHRydWUsICgpID0+IHsKKyAgICAgICAgICAgICAgICB0
aGlzLl9zZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUobmV3QWN0aXZhdGVkU3RhdGUp
OworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAg
ICAgICB0aGlzLl9zZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUobmV3QWN0aXZhdGVk
U3RhdGUpOwogICAgICAgICByZXR1cm4gbmV3QWN0aXZhdGVkU3RhdGU7CkBAIC0yOTgsMTYgKzMw
NCwxNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IgPSBjbGFzcyBTb3VyY2VD
b2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAgICBpZiAoc2hvdWxkUmVzdW1l
VHlwZVRva2VuQW5ub3RhdG9yIHx8IHNob3VsZFJlc3VtZUJhc2ljQmxvY2tBbm5vdGF0b3IpCiAg
ICAgICAgICAgICB0aGlzLl9zZXRUeXBlVG9rZW5Bbm5vdGF0b3JFbmFibGVkU3RhdGUoZmFsc2Up
OwogCi0gICAgICAgIHN1cGVyLnByZXR0eVByaW50KHByZXR0eSk7Ci0KLSAgICAgICAgaWYgKHBy
ZXR0eSB8fCAhdGhpcy5faXNQcm9iYWJseU1pbmlmaWVkKSB7Ci0gICAgICAgICAgICBpZiAoc2hv
dWxkUmVzdW1lVHlwZVRva2VuQW5ub3RhdG9yIHx8IHNob3VsZFJlc3VtZUJhc2ljQmxvY2tBbm5v
dGF0b3IpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0VHlwZVRva2VuQW5ub3RhdG9yRW5hYmxl
ZFN0YXRlKHRydWUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uc29sZS5hc3Nl
cnQoIXByZXR0eSAmJiB0aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQpOwotICAgICAgICAgICAgaWYg
KHRoaXMuX3R5cGVUb2tlbkFubm90YXRvciB8fCB0aGlzLl9iYXNpY0Jsb2NrQW5ub3RhdG9yKQot
ICAgICAgICAgICAgICAgIHRoaXMuX3NldFR5cGVUb2tlbkFubm90YXRvckVuYWJsZWRTdGF0ZShm
YWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN1cGVyLnByZXR0eVByaW50KHByZXR0
eSkudGhlbigoKSA9PiB7CisgICAgICAgICAgICBpZiAocHJldHR5IHx8ICF0aGlzLl9pc1Byb2Jh
Ymx5TWluaWZpZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzdW1lVHlwZVRva2Vu
QW5ub3RhdG9yIHx8IHNob3VsZFJlc3VtZUJhc2ljQmxvY2tBbm5vdGF0b3IpCisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX3NldFR5cGVUb2tlbkFubm90YXRvckVuYWJsZWRTdGF0ZSh0cnVlKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXBy
ZXR0eSAmJiB0aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQpOworICAgICAgICAgICAgICAgIGlmICh0
aGlzLl90eXBlVG9rZW5Bbm5vdGF0b3IgfHwgdGhpcy5fYmFzaWNCbG9ja0Fubm90YXRvcikKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VHlwZVRva2VuQW5ub3RhdG9yRW5hYmxlZFN0YXRl
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogCiAgICAgLy8gUHJp
dmF0ZQpAQCAtMzU4LDQwICszNjQsNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IgPSBjbGFzcyBTb3VyY2VDb2RlVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlYwogICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRNYXBbbGluZUluZm8ubGluZU51bWJlcl07CiAg
ICAgfQogCi0gICAgX2NvbnRlbnRXaWxsUG9wdWxhdGUoY29udGVudCkKLSAgICB7Ci0gICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5FdmVudC5Db250ZW50V2lsbFBvcHVsYXRlKTsKLQotICAgICAgICAvLyBXZSBvbmx5
IGRvIHRoZSByZXN0IG9mIHRoaXMgd29yayBiZWZvcmUgdGhlIGZpcnN0IHBvcHVsYXRlLgotICAg
ICAgICBpZiAodGhpcy5fY29udGVudFBvcHVsYXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAodGhpcy5fc3VwcG9ydHNEZWJ1Z2dpbmcpIHsKLSAgICAgICAgICAgIHRoaXMu
X2JyZWFrcG9pbnRNYXAgPSB7fTsKLQotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5icmVha3BvaW50c0ZvclNvdXJjZUNvZGUodGhpcy5f
c291cmNlQ29kZSk7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3Bv
aW50c1tpXTsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9tYXRjaGVzQnJl
YWtwb2ludChicmVha3BvaW50KSk7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVJbmZvID0gdGhp
cy5fZWRpdG9yTGluZUluZm9Gb3JTb3VyY2VDb2RlTG9jYXRpb24oYnJlYWtwb2ludC5zb3VyY2VD
b2RlTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnRXaXRoRWRp
dG9yTGluZUluZm8oYnJlYWtwb2ludCwgbGluZUluZm8pOwotICAgICAgICAgICAgICAgIHRoaXMu
c2V0QnJlYWtwb2ludEluZm9Gb3JMaW5lQW5kQ29sdW1uKGxpbmVJbmZvLmxpbmVOdW1iZXIsIGxp
bmVJbmZvLmNvbHVtbk51bWJlciwgdGhpcy5fYnJlYWtwb2ludEluZm9Gb3JCcmVha3BvaW50KGJy
ZWFrcG9pbnQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlz
Ll9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlc291cmNlKQotICAgICAgICAg
ICAgdGhpcy5taW1lVHlwZSA9IHRoaXMuX3NvdXJjZUNvZGUuc3ludGhldGljTUlNRVR5cGU7Ci0g
ICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
U2NyaXB0KQotICAgICAgICAgICAgdGhpcy5taW1lVHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwot
Ci0gICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgZm9ybWF0IHRoZSBjb250ZW50IGlmIGl0IGxvb2tz
IG1pbmlmaWVkIGFuZCBpdCBjYW4gYmUgZm9ybWF0dGVkLgotICAgICAgICBjb25zb2xlLmFzc2Vy
dCghdGhpcy5mb3JtYXR0ZWQpOwotICAgICAgICBpZiAodGhpcy5jYW5CZUZvcm1hdHRlZCgpICYm
IHRoaXMuX2lzTGlrZWx5TWluaWZpZWQoY29udGVudCkpIHsKLSAgICAgICAgICAgIHRoaXMuYXV0
b0Zvcm1hdCA9IHRydWU7Ci0gICAgICAgICAgICB0aGlzLl9pc1Byb2JhYmx5TWluaWZpZWQgPSB0
cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgX2lzTGlrZWx5TWluaWZpZWQoY29udGVudCkK
ICAgICB7CiAgICAgICAgIGxldCB3aGl0ZVNwYWNlQ291bnQgPSAwOwpAQCAtNDEyLDI2ICszODQs
MzAgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3MgU291cmNlQ29k
ZVRleHRFZGl0b3IgZXh0ZW5kcyBXZWJJbnNwZWMKICAgICAgICAgcmV0dXJuIHJhdGlvIDwgMC4x
OwogICAgIH0KIAotICAgIF9jb250ZW50RGlkUG9wdWxhdGUoKQotICAgIHsKLSAgICAgICAgdGhp
cy5fY29udGVudFBvcHVsYXRlZCA9IHRydWU7Ci0KLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLkV2ZW50LkNvbnRl
bnREaWRQb3B1bGF0ZSk7Ci0KLSAgICAgICAgLy8gV2UgYWRkIHRoZSBpc3N1ZXMgZWFjaCB0aW1l
IGNvbnRlbnQgaXMgcG9wdWxhdGVkLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGxpbmVzIG1pZ2h0
IG5vdCBleGlzdAotICAgICAgICAvLyBpZiB3ZSB0cmllZCBhZGRlZCB0aGVtIGJlZm9yZSB3aGVu
IHRoZSBmdWxsIGNvbnRlbnQgd2Fzbid0IGF2YWlsYWJsZS4gKFdoZW4gcG9wdWxhdGluZyB3aXRo
Ci0gICAgICAgIC8vIHBhcnRpYWwgc2NyaXB0IGNvbnRlbnQgdGhpcyBjYW4gYmUgY2FsbGVkIG11
bHRpcGxlIHRpbWVzLikKLQotICAgICAgICB0aGlzLl9yZWluc2VydEFsbElzc3VlcygpOwotCi0g
ICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlTWFya2VycygpOwotICAgIH0KLQogICAgIF9wb3B1
bGF0ZVdpdGhDb250ZW50KGNvbnRlbnQpCiAgICAgewogICAgICAgICBjb250ZW50ID0gY29udGVu
dCB8fCAiIjsKIAotICAgICAgICB0aGlzLl9jb250ZW50V2lsbFBvcHVsYXRlKGNvbnRlbnQpOwor
ICAgICAgICB0aGlzLl9wcmVwYXJlRWRpdG9yRm9ySW5pdGlhbENvbnRlbnQoY29udGVudCk7CisK
KyAgICAgICAgLy8gSWYgd2UgY2FuIGF1dG8gZm9ybWF0LCBmb3JtYXQgdGhlIFRleHRFZGl0b3Ig
YmVmb3JlIHNob3dpbmcgaXQuCisgICAgICAgIGlmICh0aGlzLl9hdXRvRm9ybWF0KSB7CisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5mb3JtYXR0ZWQpOworICAgICAgICAgICAgdGhp
cy5fYXV0b0Zvcm1hdCA9IGZhbHNlOworICAgICAgICAgICAgdGhpcy5zdHJpbmcgPSBjb250ZW50
OworICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWQodHJ1ZSwgKCkgPT4geworICAgICAgICAg
ICAgICAgIHRoaXMuX3Byb2NlZWRQb3B1bGF0ZVdpdGhDb250ZW50KHRoaXMuc3RyaW5nKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5fcHJvY2VlZFBvcHVsYXRlV2l0aENvbnRlbnQoY29udGVudCk7CisgICAgfQorCisgICAg
X3Byb2NlZWRQb3B1bGF0ZVdpdGhDb250ZW50KGNvbnRlbnQpCisgICAgeworICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0
b3IuRXZlbnQuQ29udGVudFdpbGxQb3B1bGF0ZSk7CisKICAgICAgICAgdGhpcy5zdHJpbmcgPSBj
b250ZW50OwogCiAgICAgICAgIHRoaXMuX21ha2VUeXBlVG9rZW5Bbm5vdGF0b3IoKTsKQEAgLTQ0
NSw2ICs0MjEsNTMgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3Mg
U291cmNlQ29kZVRleHRFZGl0b3IgZXh0ZW5kcyBXZWJJbnNwZWMKICAgICAgICAgdGhpcy5fY29u
dGVudERpZFBvcHVsYXRlKCk7CiAgICAgfQogCisgICAgX2NvbnRlbnREaWRQb3B1bGF0ZSgpCisg
ICAgeworICAgICAgICB0aGlzLl9jb250ZW50UG9wdWxhdGVkID0gdHJ1ZTsKKworICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRF
ZGl0b3IuRXZlbnQuQ29udGVudERpZFBvcHVsYXRlKTsKKworICAgICAgICAvLyBXZSBhZGQgdGhl
IGlzc3VlcyBlYWNoIHRpbWUgY29udGVudCBpcyBwb3B1bGF0ZWQuIFRoaXMgaXMgbmVlZGVkIGJl
Y2F1c2UgbGluZXMgbWlnaHQgbm90IGV4aXN0CisgICAgICAgIC8vIGlmIHdlIHRyaWVkIGFkZGVk
IHRoZW0gYmVmb3JlIHdoZW4gdGhlIGZ1bGwgY29udGVudCB3YXNuJ3QgYXZhaWxhYmxlLiAoV2hl
biBwb3B1bGF0aW5nIHdpdGgKKyAgICAgICAgLy8gcGFydGlhbCBzY3JpcHQgY29udGVudCB0aGlz
IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuKQorCisgICAgICAgIHRoaXMuX3JlaW5zZXJ0
QWxsSXNzdWVzKCk7CisKKyAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVNYXJrZXJzKCk7Cisg
ICAgfQorCisgICAgX3ByZXBhcmVFZGl0b3JGb3JJbml0aWFsQ29udGVudChjb250ZW50KQorICAg
IHsKKyAgICAgICAgLy8gT25seSBkbyB0aGlzIHdvcmsgYmVmb3JlIHRoZSBmaXJzdCBwb3B1bGF0
ZS4KKyAgICAgICAgaWYgKHRoaXMuX2NvbnRlbnRQb3B1bGF0ZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHRoaXMuX3N1cHBvcnRzRGVidWdnaW5nKSB7CisgICAgICAgICAg
ICB0aGlzLl9icmVha3BvaW50TWFwID0ge307CisKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50
cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNGb3JTb3VyY2VDb2Rl
KHRoaXMuX3NvdXJjZUNvZGUpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVh
a3BvaW50cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0g
YnJlYWtwb2ludHNbaV07CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fbWF0
Y2hlc0JyZWFrcG9pbnQoYnJlYWtwb2ludCkpOworICAgICAgICAgICAgICAgIHZhciBsaW5lSW5m
byA9IHRoaXMuX2VkaXRvckxpbmVJbmZvRm9yU291cmNlQ29kZUxvY2F0aW9uKGJyZWFrcG9pbnQu
c291cmNlQ29kZUxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50
V2l0aEVkaXRvckxpbmVJbmZvKGJyZWFrcG9pbnQsIGxpbmVJbmZvKTsKKyAgICAgICAgICAgICAg
ICB0aGlzLnNldEJyZWFrcG9pbnRJbmZvRm9yTGluZUFuZENvbHVtbihsaW5lSW5mby5saW5lTnVt
YmVyLCBsaW5lSW5mby5jb2x1bW5OdW1iZXIsIHRoaXMuX2JyZWFrcG9pbnRJbmZvRm9yQnJlYWtw
b2ludChicmVha3BvaW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAodGhpcy5fc291cmNlQ29kZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZXNvdXJjZSkKKyAg
ICAgICAgICAgIHRoaXMubWltZVR5cGUgPSB0aGlzLl9zb3VyY2VDb2RlLnN5bnRoZXRpY01JTUVU
eXBlOworICAgICAgICBlbHNlIGlmICh0aGlzLl9zb3VyY2VDb2RlIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlNjcmlwdCkKKyAgICAgICAgICAgIHRoaXMubWltZVR5cGUgPSAidGV4dC9qYXZhc2Ny
aXB0IjsKKworICAgICAgICAvLyBEZWNpZGUgdG8gYXV0b21hdGljYWxseSBmb3JtYXQgdGhlIGNv
bnRlbnQgaWYgaXQgbG9va3MgbWluaWZpZWQgYW5kIGl0IGNhbiBiZSBmb3JtYXR0ZWQuCisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLmZvcm1hdHRlZCk7CisgICAgICAgIGlmICh0aGlzLmNh
bkJlRm9ybWF0dGVkKCkgJiYgdGhpcy5faXNMaWtlbHlNaW5pZmllZChjb250ZW50KSkgeworICAg
ICAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdCA9IHRydWU7CisgICAgICAgICAgICB0aGlzLl9pc1By
b2JhYmx5TWluaWZpZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgX2NvbnRlbnRB
dmFpbGFibGUocGFyYW1ldGVycykKICAgICB7CiAgICAgICAgIC8vIFJldHVybiBpZiByZXNvdXJj
ZSBpcyBub3QgYXZhaWxhYmxlLgpAQCAtNjYyLDcgKzY4NSw3IEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlVGV4dEVkaXRvciA9IGNsYXNzIFNvdXJjZUNvZGVUZXh0RWRpdG9yIGV4dGVuZHMgV2Vi
SW5zcGVjCiAgICAgICAgICAgICBpZiAoLS1wZW5kaW5nUmVxdWVzdENvdW50KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JlcXVlc3RpbmdTY3Jp
cHRDb250ZW50OworICAgICAgICAgICAgdGhpcy5fcmVxdWVzdGluZ1NjcmlwdENvbnRlbnQgPSBm
YWxzZTsKIAogICAgICAgICAgICAgLy8gQWJvcnQgaWYgdGhlIGZ1bGwgY29udGVudCBwb3B1bGF0
ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlc2UgYXN5bmMgY2FsbGJhY2tzLgogICAgICAgICAgICAg
aWYgKHRoaXMuX2Z1bGxDb250ZW50UG9wdWxhdGVkKQpAQCAtNzI3LDcgKzc1MCw3IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvciA9IGNsYXNzIFNvdXJjZUNvZGVUZXh0RWRpdG9y
IGV4dGVuZHMgV2ViSW5zcGVjCiAgICAgICAgIGZ1bmN0aW9uIHNjcmlwdENvbnRlbnRBdmFpbGFi
bGUocGFyYW1ldGVycykKICAgICAgICAgewogICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBwYXJh
bWV0ZXJzLmNvbnRlbnQ7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5fcmVxdWVzdGluZ1Njcmlw
dENvbnRlbnQ7CisgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0aW5nU2NyaXB0Q29udGVudCA9IGZh
bHNlOwogCiAgICAgICAgICAgICAvLyBBYm9ydCBpZiB0aGUgZnVsbCBjb250ZW50IHBvcHVsYXRl
ZCB3aGlsZSB3YWl0aW5nIGZvciB0aGlzIGFzeW5jIGNhbGxiYWNrLgogICAgICAgICAgICAgaWYg
KHRoaXMuX2Z1bGxDb250ZW50UG9wdWxhdGVkKQpAQCAtMTEzNyw3ICsxMTYwLDcgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yID0gY2xhc3MgU291cmNlQ29kZVRleHRFZGl0b3Ig
ZXh0ZW5kcyBXZWJJbnNwZWMKICAgICB7CiAgICAgICAgIHRoaXMuX2lnbm9yZUFsbEJyZWFrcG9p
bnRMb2NhdGlvblVwZGF0ZXMgPSB0cnVlOwogICAgICAgICB0aGlzLl9zb3VyY2VDb2RlLmZvcm1h
dHRlclNvdXJjZU1hcCA9IHRoaXMuZm9ybWF0dGVyU291cmNlTWFwOwotICAgICAgICBkZWxldGUg
dGhpcy5faWdub3JlQWxsQnJlYWtwb2ludExvY2F0aW9uVXBkYXRlczsKKyAgICAgICAgdGhpcy5f
aWdub3JlQWxsQnJlYWtwb2ludExvY2F0aW9uVXBkYXRlcyA9IGZhbHNlOwogCiAgICAgICAgIC8v
IEFsd2F5cyBwdXQgdGhlIHNvdXJjZSBtYXAgb24gYm90aCB0aGUgU2NyaXB0IGFuZCBSZXNvdXJj
ZSBpZiBib3RoIGV4aXN0LiBGb3IgZXhhbXBsZSwKICAgICAgICAgLy8gaWYgdGhpcyBTb3VyY2VD
b2RlIGlzIGEgUmVzb3VyY2UsIHRoZW4gdGhlcmUgbWlnaHQgYWxzbyBiZSBhIFNjcmlwdC4gSW4g
dGhlIGRlYnVnZ2VyLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvVGV4dENvbnRlbnRWaWV3LmpzCmluZGV4IGQzYTVlNTkuLjQ1MWZh
OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1RleHRDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9UZXh0Q29udGVudFZpZXcuanMKQEAgLTE1Miw3ICsxNTIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dENvbnRlbnRWaWV3ID0gY2xhc3MgVGV4dENvbnRlbnRWaWV3IGV4dGVuZHMgV2Vi
SW5zcGVjdG9yLkNvbnRlbgogICAgIF90b2dnbGVQcmV0dHlQcmludChldmVudCkKICAgICB7CiAg
ICAgICAgIHZhciBhY3RpdmF0ZWQgPSAhdGhpcy5fcHJldHR5UHJpbnRCdXR0b25OYXZpZ2F0aW9u
SXRlbS5hY3RpdmF0ZWQ7Ci0gICAgICAgIHRoaXMuX3RleHRFZGl0b3IuZm9ybWF0dGVkID0gYWN0
aXZhdGVkOworICAgICAgICB0aGlzLl90ZXh0RWRpdG9yLnNldEZvcm1hdHRlZChmb3JtYXR0ZWQp
OwogICAgIH0KIAogICAgIF90ZXh0RWRpdG9yRm9ybWF0dGluZ0RpZENoYW5nZShldmVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRF
ZGl0b3IuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0
RWRpdG9yLmpzCmluZGV4IDQ5MmJkMDEuLjJjNTgyNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qcwpAQCAtNjQs
NiArNjQsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvciA9IGNsYXNzIFRleHRFZGl0b3IgZXh0
ZW5kcyBXZWJJbnNwZWN0b3IuVmlldwogICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29u
dGVudERpZENoYW5nZUV2ZW50ID0gMDsKIAogICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgdGhpcy5fZm9ybWF0dGluZ1Byb21pc2UgPSBudWxsOwogICAgICAgICB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOwogCiAgICAgICAgIHRoaXMuX2RlbGVnYXRlID0g
ZGVsZWdhdGUgfHwgbnVsbDsKQEAgLTg5LDIwICs5MCwxOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvciA9IGNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuVmlldwogICAgICAg
ICAgICAgaWYgKHRoaXMuX2luaXRpYWxTdHJpbmdOb3RTZXQpCiAgICAgICAgICAgICAgICAgdGhp
cy5fY29kZU1pcnJvci5yZW1vdmVMaW5lQ2xhc3MoMCwgIndyYXAiKTsKIAotICAgICAgICAgICAg
dGhpcy5fY29kZU1pcnJvci5zZXRWYWx1ZShuZXdTdHJpbmcpOwotICAgICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5zdHJpbmcubGVuZ3RoID09PSBuZXdTdHJpbmcubGVuZ3RoLCAiQSBsb3Qg
b2Ygb3VyIGNvZGUgZGVwZW5kcyBvbiBwcmVjaXNlIHRleHQgb2Zmc2V0cywgc28gdGhlIHN0cmlu
ZyBzaG91bGQgcmVtYWluIHRoZSBzYW1lLiIpOworICAgICAgICAgICAgaWYgKHRoaXMuX2NvZGVN
aXJyb3IuZ2V0VmFsdWUoKSAhPT0gbmV3U3RyaW5nKSB7CisgICAgICAgICAgICAgICAgdGhpcy5f
Y29kZU1pcnJvci5zZXRWYWx1ZShuZXdTdHJpbmcpOworICAgICAgICAgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuc3RyaW5nLmxlbmd0aCA9PT0gbmV3U3RyaW5nLmxlbmd0aCwgIkEgbG90IG9m
IG91ciBjb2RlIGRlcGVuZHMgb24gcHJlY2lzZSB0ZXh0IG9mZnNldHMsIHNvIHRoZSBzdHJpbmcg
c2hvdWxkIHJlbWFpbiB0aGUgc2FtZS4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRW5zdXJlIHdlIGF0IGRpc3BsYXkgY29udGVudCBldmVuIGlmIHRoZSB2YWx1
ZSBkaWQgbm90IGNoYW5nZS4gVGhpcyBvZnRlbiBoYXBwZW5zIHdoZW4gYXV0byBmb3JtYXR0aW5n
LgorICAgICAgICAgICAgICAgIHRoaXMubGF5b3V0KCk7CisgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICh0aGlzLl9pbml0aWFsU3RyaW5nTm90U2V0KSB7CiAgICAgICAgICAgICAgICAg
dGhpcy5fY29kZU1pcnJvci5jbGVhckhpc3RvcnkoKTsKICAgICAgICAgICAgICAgICB0aGlzLl9j
b2RlTWlycm9yLm1hcmtDbGVhbigpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9pbml0
aWFsU3RyaW5nTm90U2V0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBdXRvbWF0
aWNhbGx5IGZvcm1hdCB0aGUgY29udGVudC4KLSAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvRm9y
bWF0KSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIXRoaXMuZm9ybWF0dGVkKTsK
LSAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2F1dG9Gb3JtYXQ7CisgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbFN0
cmluZ05vdFNldCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBVcGRh
dGUgdGhlIGV4ZWN1dGlvbiBsaW5lIG5vdyB0aGF0IHdlIG1pZ2h0IGhhdmUgY29udGVudCBmb3Ig
dGhhdCBsaW5lLgpAQCAtMTM3LDM5ICsxMzYsMTUgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3Ig
PSBjbGFzcyBUZXh0RWRpdG9yIGV4dGVuZHMgV2ViSW5zcGVjdG9yLlZpZXcKICAgICAgICAgcmV0
dXJuIHRoaXMuX2Zvcm1hdHRlZDsKICAgICB9CiAKLSAgICBzZXQgZm9ybWF0dGVkKGZvcm1hdHRl
ZCkKKyAgICBzZXRGb3JtYXR0ZWQoZm9ybWF0dGVkLCBjYWxsYmFjaykKICAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9mb3JtYXR0ZWQgPT09IGZvcm1hdHRlZCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBjb25zb2xlLmFzc2VydCghZm9ybWF0dGVkIHx8IHRoaXMuY2FuQmVGb3JtYXR0
ZWQoKSk7Ci0gICAgICAgIGlmIChmb3JtYXR0ZWQgJiYgIXRoaXMuY2FuQmVGb3JtYXR0ZWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29u
dGVudERpZENoYW5nZUV2ZW50Kys7Ci0gICAgICAgIHRoaXMucHJldHR5UHJpbnQoZm9ybWF0dGVk
KTsKLSAgICAgICAgdGhpcy5faWdub3JlQ29kZU1pcnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudC0t
OwotICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9pZ25vcmVDb2RlTWlycm9yQ29udGVudERp
ZENoYW5nZUV2ZW50ID49IDApOwotCi0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZCA9IGZvcm1hdHRl
ZDsKLQotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvci5FdmVudC5Gb3JtYXR0aW5nRGlkQ2hhbmdlKTsKLSAgICB9Ci0KLSAgICBzZXQg
YXV0b0Zvcm1hdChhdXRvKQotICAgIHsKLSAgICAgICAgdGhpcy5fYXV0b0Zvcm1hdCA9IGF1dG87
CisgICAgICAgIHRoaXMuX2Zvcm1hdChmb3JtYXR0ZWQpLnRoZW4oY2FsbGJhY2spLmNhdGNoKGhh
bmRsZVByb21pc2VFeGNlcHRpb24pOwogICAgIH0KIAogICAgIGhhc0Zvcm1hdHRlcigpCiAgICAg
ewotICAgICAgICB2YXIgc3VwcG9ydGVkTW9kZXMgPSB7Ci0gICAgICAgICAgICAiamF2YXNjcmlw
dCI6IHRydWUsCi0gICAgICAgICAgICAiY3NzIjogdHJ1ZSwKLSAgICAgICAgfTsKLQotICAgICAg
ICB2YXIgbW9kZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0TW9kZSgpOwotICAgICAgICByZXR1cm4g
bW9kZS5uYW1lIGluIHN1cHBvcnRlZE1vZGVzOworICAgICAgICBsZXQgbW9kZSA9IHRoaXMuX2Nv
ZGVNaXJyb3IuZ2V0TW9kZSgpLm5hbWU7CisgICAgICAgIHJldHVybiBtb2RlID09PSAiamF2YXNj
cmlwdCIgfHwgbW9kZSA9PT0gImNzcyI7CiAgICAgfQogCiAgICAgY2FuQmVGb3JtYXR0ZWQoKQpA
QCAtNDY0LDggKzQzOSw5IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0gY2xhc3MgVGV4dEVk
aXRvciBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8g
dW5mb3JtYXQsIHJldmVhbCB0aGUgbGluZSBhZnRlciBhIHdhaXQuCiAgICAgICAgIC8vIE90aGVy
d2lzZSB0aGUgbGluZSBoaWdobGlnaHQgZG9lc24ndCB3b3JrIHByb3Blcmx5LgogICAgICAgICBp
ZiAodGhpcy5fZm9ybWF0dGVkICYmIGZvcmNlVW5mb3JtYXR0ZWQpIHsKLSAgICAgICAgICAgIHRo
aXMuZm9ybWF0dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMucmV2ZWFs
UG9zaXRpb24uYmluZCh0aGlzKSwgMCwgcG9zaXRpb24sIHRleHRSYW5nZVRvU2VsZWN0KTsKKyAg
ICAgICAgICAgIHRoaXMuc2V0Rm9ybWF0dGVkKGZhbHNlLCAoKSA9PiB7CisgICAgICAgICAgICAg
ICAgc2V0VGltZW91dCh0aGlzLnJldmVhbFBvc2l0aW9uLmJpbmQodGhpcyksIDAsIHBvc2l0aW9u
LCB0ZXh0UmFuZ2VUb1NlbGVjdCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC03MjEsMTAxICs2OTcsMTg2IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yID0gY2xhc3MgVGV4dEVkaXRvciBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAg
ICAgICAgICB0aGlzLl9jb2RlTWlycm9yLnJlZnJlc2goKTsKICAgICB9CiAKKyAgICBfZm9ybWF0
KGZvcm1hdHRlZCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZWQgPT09IGZvcm1h
dHRlZCkKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9ybWF0dGVk
KTsKKworICAgICAgICBjb25zb2xlLmFzc2VydCghZm9ybWF0dGVkIHx8IHRoaXMuY2FuQmVGb3Jt
YXR0ZWQoKSk7CisgICAgICAgIGlmIChmb3JtYXR0ZWQgJiYgIXRoaXMuY2FuQmVGb3JtYXR0ZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9ybWF0dGVkKTsK
KworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGluZ1Byb21pc2UpCisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fZm9ybWF0dGluZ1Byb21pc2U7CisKKyAgICAgICAgdGhpcy5faWdub3JlQ29kZU1p
cnJvckNvbnRlbnREaWRDaGFuZ2VFdmVudCsrOworICAgICAgICB0aGlzLl9mb3JtYXR0aW5nUHJv
bWlzZSA9IHRoaXMucHJldHR5UHJpbnQoZm9ybWF0dGVkKS50aGVuKCgpID0+IHsKKyAgICAgICAg
ICAgIHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hhbmdlRXZlbnQtLTsKKyAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2lnbm9yZUNvZGVNaXJyb3JDb250ZW50RGlkQ2hh
bmdlRXZlbnQgPj0gMCk7CisKKyAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRpbmdQcm9taXNlID0g
bnVsbDsKKworICAgICAgICAgICAgbGV0IG9yaWdpbmFsRm9ybWF0dGVkID0gdGhpcy5fZm9ybWF0
dGVkOworICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkID0gISF0aGlzLl9mb3JtYXR0ZXJTb3Vy
Y2VNYXA7CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZWQgIT09IG9yaWdpbmFsRm9y
bWF0dGVkKQorICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yLkV2ZW50LkZvcm1hdHRpbmdEaWRDaGFuZ2UpOworCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVkOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gdGhpcy5fZm9ybWF0dGluZ1Byb21pc2U7CisgICAgfQorCiAgICAgcHJldHR5UHJpbnQo
cHJldHR5KQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gcHJldHR5UHJpbnRBbmRVcGRhdGVFZGl0
b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgc3RhcnQgPSB7bGluZTogMCwgY2g6IDB9
OwotICAgICAgICAgICAgdmFyIGVuZCA9IHtsaW5lOiB0aGlzLl9jb2RlTWlycm9yLmxpbmVDb3Vu
dCgpIC0gMX07Ci0KLSAgICAgICAgICAgIHZhciBvbGRTZWxlY3Rpb25BbmNob3IgPSB0aGlzLl9j
b2RlTWlycm9yLmdldEN1cnNvcigiYW5jaG9yIik7Ci0gICAgICAgICAgICB2YXIgb2xkU2VsZWN0
aW9uSGVhZCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0Q3Vyc29yKCJoZWFkIik7Ci0gICAgICAgICAg
ICB2YXIgbmV3U2VsZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOwotICAgICAgICAgICAg
dmFyIG5ld0V4ZWN1dGlvbkxvY2F0aW9uID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHByZXR0
eSkgewotICAgICAgICAgICAgICAgIC8vIDxyZGFyOi8vcHJvYmxlbS8xMDU5Mzk0OD4gUHJvdmlk
ZSBhIHdheSB0byBjaGFuZ2UgdGhlIHRhYiB3aWR0aCBpbiB0aGUgV2ViIEluc3BlY3RvcgotICAg
ICAgICAgICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSAiICAgICI7Ci0gICAgICAgICAgICAgICAg
dmFyIGJ1aWxkZXIgPSBuZXcgRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIoaW5kZW50U3RyaW5nKTsK
LSAgICAgICAgICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZXIodGhpcy5fY29kZU1pcnJvciwgYnVpbGRlcik7Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVy
LmZvcm1hdChzdGFydCwgZW5kKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcCA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAuZnJvbVNvdXJjZU1hcERh
dGEoYnVpbGRlci5zb3VyY2VNYXBEYXRhKTsKLQotICAgICAgICAgICAgICAgIHRoaXMuX2NvZGVN
aXJyb3Iuc2V0VmFsdWUoYnVpbGRlci5mb3JtYXR0ZWRDb250ZW50KTsKLQotICAgICAgICAgICAg
ICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZh
ciBuZXdSZXZlYWxQb3NpdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRv
Rm9ybWF0dGVkKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwubGluZU51bWJlciwgdGhpcy5fcG9zaXRp
b25Ub1JldmVhbC5jb2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3Np
dGlvblRvUmV2ZWFsID0gbmV3IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlUG9zaXRpb24obmV3UmV2
ZWFsUG9zaXRpb24ubGluZU51bWJlciwgbmV3UmV2ZWFsUG9zaXRpb24uY29sdW1uTnVtYmVyKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dFJhbmdl
VG9TZWxlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBlZFJldmVhbFNlbGVjdGlv
blN0YXJ0ID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQodGhp
cy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5z
dGFydENvbHVtbik7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rp
b25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlz
Ll90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRD
b2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCA9IG5l
dyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmxpbmVO
dW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51bWJlciwgbWFwcGVkUmV2
ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvbkVuZC5jb2x1
bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNO
YU4odGhpcy5fZXhlY3V0aW9uTGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c29sZS5hc3NlcnQoIWlzTmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcikpOwotICAgICAg
ICAgICAgICAgICAgICBuZXdFeGVjdXRpb25Mb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJj
ZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIsIHRoaXMu
X2V4ZWN1dGlvbkNvbHVtbk51bWJlcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgdmFyIG1hcHBlZEFuY2hvckxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFw
Lm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uQW5jaG9yLmxpbmUsIG9sZFNlbGVjdGlv
bkFuY2hvci5jaCk7Ci0gICAgICAgICAgICAgICAgdmFyIG1hcHBlZEhlYWRMb2NhdGlvbiA9IHRo
aXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKG9sZFNlbGVjdGlvbkhl
YWQubGluZSwgb2xkU2VsZWN0aW9uSGVhZC5jaCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0
aW9uQW5jaG9yID0ge2xpbmU6IG1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOiBt
YXBwZWRBbmNob3JMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OwotICAgICAgICAgICAgICAgIG5ld1Nl
bGVjdGlvbkhlYWQgPSB7bGluZTogbWFwcGVkSGVhZExvY2F0aW9uLmxpbmVOdW1iZXIsIGNoOiBt
YXBwZWRIZWFkTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5fcG9zaXRpb25Ub1JldmVhbCkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
bmV3UmV2ZWFsUG9zaXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9P
cmlnaW5hbCh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmxpbmVOdW1iZXIsIHRoaXMuX3Bvc2l0aW9u
VG9SZXZlYWwuY29sdW1uTnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRp
b25Ub1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVh
bFBvc2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRSYW5nZVRv
U2VsZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBtYXBwZWRSZXZlYWxTZWxlY3Rpb25T
dGFydCA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5mb3JtYXR0ZWRUb09yaWdpbmFsKHRoaXMu
X3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3Rh
cnRDb2x1bW4pOwotICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGVkUmV2ZWFsU2VsZWN0aW9u
RW5kID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5f
dGV4dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kQ29s
dW1uKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRSYW5nZShtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5saW5lTnVt
YmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydC5jb2x1bW5OdW1iZXIsIG1hcHBlZFJldmVh
bFNlbGVjdGlvbkVuZC5saW5lTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQuY29sdW1u
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlzTmFO
KHRoaXMuX2V4ZWN1dGlvbkxpbmVOdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KCFpc05hTih0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VN
YXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl9leGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9l
eGVjdXRpb25Db2x1bW5OdW1iZXIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHZhciBtYXBwZWRBbmNob3JMb2NhdGlvbiA9IHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcC5m
b3JtYXR0ZWRUb09yaWdpbmFsKG9sZFNlbGVjdGlvbkFuY2hvci5saW5lLCBvbGRTZWxlY3Rpb25B
bmNob3IuY2gpOwotICAgICAgICAgICAgICAgIHZhciBtYXBwZWRIZWFkTG9jYXRpb24gPSB0aGlz
Ll9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25IZWFk
LmxpbmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlv
bkFuY2hvciA9IHtsaW5lOiBtYXBwZWRBbmNob3JMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDogbWFw
cGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKLSAgICAgICAgICAgICAgICBuZXdTZWxl
Y3Rpb25IZWFkID0ge2xpbmU6IG1hcHBlZEhlYWRMb2NhdGlvbi5saW5lTnVtYmVyLCBjaDogbWFw
cGVkSGVhZExvY2F0aW9uLmNvbHVtbk51bWJlcn07Ci0KLSAgICAgICAgICAgICAgICB0aGlzLl9m
b3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOworICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJl
c29sdmUsIHJlamVjdCkgPT4geworICAgICAgICAgICAgbGV0IGJlZm9yZVByZXR0eVByaW50U3Rh
dGUgPSB7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uQW5jaG9yOiB0aGlzLl9jb2RlTWlycm9y
LmdldEN1cnNvcigiYW5jaG9yIiksCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uSGVhZDogdGhp
cy5fY29kZU1pcnJvci5nZXRDdXJzb3IoImhlYWQiKSwKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIGlmICghcHJldHR5KQorICAgICAgICAgICAgICAgIHRoaXMuX3VuZG9Gb3JtYXR0aW5n
KGJlZm9yZVByZXR0eVByaW50U3RhdGUsIHJlc29sdmUpOworICAgICAgICAgICAgZWxzZSBpZiAo
dGhpcy5fY2FuVXNlRm9ybWF0dGVyV29ya2VyKCkpCisgICAgICAgICAgICAgICAgdGhpcy5fc3Rh
cnRXb3JrZXJQcmV0dHlQcmludChiZWZvcmVQcmV0dHlQcmludFN0YXRlLCByZXNvbHZlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aGlzLl9zdGFydENvZGVNaXJyb3JQcmV0
dHlQcmludChiZWZvcmVQcmV0dHlQcmludFN0YXRlLCByZXNvbHZlKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgX2NhblVzZUZvcm1hdHRlcldvcmtlcigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCkubmFtZSA9PT0gImphdmFzY3JpcHQiOworICAg
IH0KKworICAgIF9zdGFydFdvcmtlclByZXR0eVByaW50KGJlZm9yZVByZXR0eVByaW50U3RhdGUs
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgLy8gPHJkYXI6Ly9wcm9ibGVtLzEwNTkzOTQ4PiBQ
cm92aWRlIGEgd2F5IHRvIGNoYW5nZSB0aGUgdGFiIHdpZHRoIGluIHRoZSBXZWIgSW5zcGVjdG9y
CisgICAgICAgIGxldCBpbmRlbnRTdHJpbmcgPSAiICAgICI7CisgICAgICAgIGxldCBzb3VyY2VU
ZXh0ID0gdGhpcy5fY29kZU1pcnJvci5nZXRWYWx1ZSgpOworICAgICAgICBsZXQgaW5jbHVkZVNv
dXJjZU1hcERhdGEgPSB0cnVlOworCisgICAgICAgIGxldCB3b3JrZXJQcm94eSA9IFdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZXJXb3JrZXJQcm94eS5zaW5nbGV0b24oKTsKKyAgICAgICAgd29ya2VyUHJv
eHkuZm9ybWF0SmF2YVNjcmlwdChzb3VyY2VUZXh0LCBpbmRlbnRTdHJpbmcsIGluY2x1ZGVTb3Vy
Y2VNYXBEYXRhLCAoe2Zvcm1hdHRlZFRleHQsIHNvdXJjZU1hcERhdGF9KSA9PiB7CisgICAgICAg
ICAgICAvLyBIYW5kbGUgaWYgZm9ybWF0dGluZyBmYWlsZWQsIHdoaWNoIGlzIHBvc3NpYmxlIGZv
ciBpbnZhbGlkIHByb2dyYW1zLgorICAgICAgICAgICAgaWYgKGZvcm1hdHRlZFRleHQgPT09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuX2ZpbmlzaFByZXR0eVByaW50KGJl
Zm9yZVByZXR0eVByaW50U3RhdGUsIGZvcm1hdHRlZFRleHQsIHNvdXJjZU1hcERhdGEsIGNhbGxi
YWNrKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgX3N0YXJ0Q29kZU1pcnJvclByZXR0eVBy
aW50KGJlZm9yZVByZXR0eVByaW50U3RhdGUsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgLy8g
PHJkYXI6Ly9wcm9ibGVtLzEwNTkzOTQ4PiBQcm92aWRlIGEgd2F5IHRvIGNoYW5nZSB0aGUgdGFi
IHdpZHRoIGluIHRoZSBXZWIgSW5zcGVjdG9yCisgICAgICAgIGxldCBpbmRlbnRTdHJpbmcgPSAi
ICAgICI7CisgICAgICAgIGxldCBzdGFydCA9IHtsaW5lOiAwLCBjaDogMH07CisgICAgICAgIGxl
dCBlbmQgPSB7bGluZTogdGhpcy5fY29kZU1pcnJvci5saW5lQ291bnQoKSAtIDF9OworICAgICAg
ICBsZXQgYnVpbGRlciA9IG5ldyBGb3JtYXR0ZXJDb250ZW50QnVpbGRlcihpbmRlbnRTdHJpbmcp
OworICAgICAgICBsZXQgZm9ybWF0dGVyID0gbmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXIodGhp
cy5fY29kZU1pcnJvciwgYnVpbGRlcik7CisgICAgICAgIGZvcm1hdHRlci5mb3JtYXQoc3RhcnQs
IGVuZCk7CisKKyAgICAgICAgbGV0IGZvcm1hdHRlZFRleHQgPSBidWlsZGVyLmZvcm1hdHRlZENv
bnRlbnQ7CisgICAgICAgIGxldCBzb3VyY2VNYXBEYXRhID0gYnVpbGRlci5zb3VyY2VNYXBEYXRh
OworICAgICAgICB0aGlzLl9maW5pc2hQcmV0dHlQcmludChiZWZvcmVQcmV0dHlQcmludFN0YXRl
LCBmb3JtYXR0ZWRUZXh0LCBzb3VyY2VNYXBEYXRhLCBjYWxsYmFjayk7CisgICAgfQorCisgICAg
X2ZpbmlzaFByZXR0eVByaW50KGJlZm9yZVByZXR0eVByaW50U3RhdGUsIGZvcm1hdHRlZFRleHQs
IHNvdXJjZU1hcERhdGEsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJv
ci5vcGVyYXRpb24oKCkgPT4geworICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVyU291cmNlTWFw
ID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcC5mcm9tU291cmNlTWFwRGF0YShzb3Vy
Y2VNYXBEYXRhKTsKKyAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0VmFsdWUoZm9ybWF0
dGVkVGV4dCk7CisgICAgICAgICAgICB0aGlzLl91cGRhdGVBZnRlckZvcm1hdHRpbmcodHJ1ZSwg
YmVmb3JlUHJldHR5UHJpbnRTdGF0ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNhbGxiYWNr
KCk7CisgICAgfQorCisgICAgX3VuZG9Gb3JtYXR0aW5nKGJlZm9yZVByZXR0eVByaW50U3RhdGUs
IGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGhpcy5fY29kZU1pcnJvci5vcGVyYXRpb24oKCkg
PT4geworICAgICAgICAgICAgdGhpcy5fY29kZU1pcnJvci51bmRvKCk7CisgICAgICAgICAgICB0
aGlzLl91cGRhdGVBZnRlckZvcm1hdHRpbmcoZmFsc2UsIGJlZm9yZVByZXR0eVByaW50U3RhdGUp
OworICAgICAgICB9KTsKKworICAgICAgICBjYWxsYmFjaygpOworICAgIH0KKworICAgIF91cGRh
dGVBZnRlckZvcm1hdHRpbmcocHJldHR5LCBiZWZvcmVQcmV0dHlQcmludFN0YXRlKQorICAgIHsK
KyAgICAgICAgbGV0IG9sZFNlbGVjdGlvbkFuY2hvciA9IGJlZm9yZVByZXR0eVByaW50U3RhdGUu
c2VsZWN0aW9uQW5jaG9yOworICAgICAgICBsZXQgb2xkU2VsZWN0aW9uSGVhZCA9IGJlZm9yZVBy
ZXR0eVByaW50U3RhdGUuc2VsZWN0aW9uSGVhZDsgICAgICAgIAorICAgICAgICBsZXQgbmV3U2Vs
ZWN0aW9uQW5jaG9yLCBuZXdTZWxlY3Rpb25IZWFkOworICAgICAgICBsZXQgbmV3RXhlY3V0aW9u
TG9jYXRpb24gPSBudWxsOworCisgICAgICAgIGlmIChwcmV0dHkpIHsKKyAgICAgICAgICAgIGlm
ICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7CisgICAgICAgICAgICAgICAgbGV0IG5ld1JldmVh
bFBvc2l0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQo
dGhpcy5fcG9zaXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFs
LmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAgICAgdGhpcy5fcG9zaXRpb25Ub1JldmVhbCA9
IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBvc2l0aW9uKG5ld1JldmVhbFBvc2l0aW9uLmxp
bmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdCkgeworICAgICAgICAg
ICAgICAgIGxldCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25TdGFydCA9IHRoaXMuX2Zvcm1hdHRlclNv
dXJjZU1hcC5vcmlnaW5hbFRvRm9ybWF0dGVkKHRoaXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0
TGluZSwgdGhpcy5fdGV4dFJhbmdlVG9TZWxlY3Quc3RhcnRDb2x1bW4pOworICAgICAgICAgICAg
ICAgIGxldCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VN
YXAub3JpZ2luYWxUb0Zvcm1hdHRlZCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRMaW5lLCB0
aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5lbmRDb2x1bW4pOworICAgICAgICAgICAgICAgIHRoaXMu
X3RleHRSYW5nZVRvU2VsZWN0ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UobWFwcGVkUmV2
ZWFsU2VsZWN0aW9uU3RhcnQubGluZU51bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQu
Y29sdW1uTnVtYmVyLCBtYXBwZWRSZXZlYWxTZWxlY3Rpb25FbmQubGluZU51bWJlciwgbWFwcGVk
UmV2ZWFsU2VsZWN0aW9uRW5kLmNvbHVtbk51bWJlcik7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHRoaXMuX3Njcm9sbEludG9WaWV3Q2VudGVyZWQobmV3U2VsZWN0aW9uQW5jaG9yKTsK
LSAgICAgICAgICAgIHRoaXMuX2NvZGVNaXJyb3Iuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbkFu
Y2hvciwgbmV3U2VsZWN0aW9uSGVhZCk7CisgICAgICAgICAgICBpZiAoIWlzTmFOKHRoaXMuX2V4
ZWN1dGlvbkxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoIWlz
TmFOKHRoaXMuX2V4ZWN1dGlvbkNvbHVtbk51bWJlcikpOworICAgICAgICAgICAgICAgIG5ld0V4
ZWN1dGlvbkxvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3Jt
YXR0ZWQodGhpcy5fZXhlY3V0aW9uTGluZU51bWJlciwgdGhpcy5fZXhlY3V0aW9uQ29sdW1uTnVt
YmVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGV0IG1hcHBlZEFuY2hvckxvY2F0
aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFsVG9Gb3JtYXR0ZWQob2xkU2Vs
ZWN0aW9uQW5jaG9yLmxpbmUsIG9sZFNlbGVjdGlvbkFuY2hvci5jaCk7CisgICAgICAgICAgICBs
ZXQgbWFwcGVkSGVhZExvY2F0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9yaWdpbmFs
VG9Gb3JtYXR0ZWQob2xkU2VsZWN0aW9uSGVhZC5saW5lLCBvbGRTZWxlY3Rpb25IZWFkLmNoKTsK
KyAgICAgICAgICAgIG5ld1NlbGVjdGlvbkFuY2hvciA9IHtsaW5lOiBtYXBwZWRBbmNob3JMb2Nh
dGlvbi5saW5lTnVtYmVyLCBjaDogbWFwcGVkQW5jaG9yTG9jYXRpb24uY29sdW1uTnVtYmVyfTsK
KyAgICAgICAgICAgIG5ld1NlbGVjdGlvbkhlYWQgPSB7bGluZTogbWFwcGVkSGVhZExvY2F0aW9u
LmxpbmVOdW1iZXIsIGNoOiBtYXBwZWRIZWFkTG9jYXRpb24uY29sdW1uTnVtYmVyfTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvblRvUmV2ZWFsKSB7Cisg
ICAgICAgICAgICAgICAgbGV0IG5ld1JldmVhbFBvc2l0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291
cmNlTWFwLmZvcm1hdHRlZFRvT3JpZ2luYWwodGhpcy5fcG9zaXRpb25Ub1JldmVhbC5saW5lTnVt
YmVyLCB0aGlzLl9wb3NpdGlvblRvUmV2ZWFsLmNvbHVtbk51bWJlcik7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcG9zaXRpb25Ub1JldmVhbCA9IG5ldyBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVBv
c2l0aW9uKG5ld1JldmVhbFBvc2l0aW9uLmxpbmVOdW1iZXIsIG5ld1JldmVhbFBvc2l0aW9uLmNv
bHVtbk51bWJlcik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChuZXdFeGVjdXRp
b25Mb2NhdGlvbikgewotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9leGVjdXRpb25MaW5l
SGFuZGxlOwotICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uQ29sdW1uTnVtYmVyID0gbmV3
RXhlY3V0aW9uTG9jYXRpb24uY29sdW1uTnVtYmVyOwotICAgICAgICAgICAgICAgIHRoaXMuZXhl
Y3V0aW9uTGluZU51bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmxpbmVOdW1iZXI7CisgICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QpIHsKKyAgICAgICAgICAgICAgICBs
ZXQgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uU3RhcnQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAu
Zm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl90ZXh0UmFuZ2VUb1NlbGVjdC5zdGFydExpbmUsIHRo
aXMuX3RleHRSYW5nZVRvU2VsZWN0LnN0YXJ0Q29sdW1uKTsKKyAgICAgICAgICAgICAgICBsZXQg
bWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLmZvcm1h
dHRlZFRvT3JpZ2luYWwodGhpcy5fdGV4dFJhbmdlVG9TZWxlY3QuZW5kTGluZSwgdGhpcy5fdGV4
dFJhbmdlVG9TZWxlY3QuZW5kQ29sdW1uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl90ZXh0UmFu
Z2VUb1NlbGVjdCA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKG1hcHBlZFJldmVhbFNlbGVj
dGlvblN0YXJ0LmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNlbGVjdGlvblN0YXJ0LmNvbHVtbk51
bWJlciwgbWFwcGVkUmV2ZWFsU2VsZWN0aW9uRW5kLmxpbmVOdW1iZXIsIG1hcHBlZFJldmVhbFNl
bGVjdGlvbkVuZC5jb2x1bW5OdW1iZXIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAv
LyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzEzMTI5OTU1PiBGaW5kQmFubmVyOiBOZXcgc2VhcmNo
ZXMgc2hvdWxkIG5vdCBsb3NlIHNlYXJjaCBwb3NpdGlvbiAoc3RhcnQgZnJvbSBjdXJyZW50IHNl
bGVjdGlvbi9jYXJldCkKLSAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeSkg
ewotICAgICAgICAgICAgICAgIHZhciBzZWFyY2hRdWVyeSA9IHRoaXMuY3VycmVudFNlYXJjaFF1
ZXJ5OwotICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoQ2xlYXJlZCgpOwotICAgICAgICAgICAg
ICAgIC8vIFNldCB0aW1lb3V0IHNvIHRoYXQgdGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBjdXJyZW50
IENvZGVNaXJyb3Igb3BlcmF0aW9uLgotICAgICAgICAgICAgICAgIC8vIFRoZSBlZGl0b3IgaGFz
IHRvIHVwZGF0ZSBmb3IgdGhlIHZhbHVlIGFuZCBzZWxlY3Rpb24gY2hhbmdlcy4KLSAgICAgICAg
ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKHF1ZXJ5KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHRoaXMucGVyZm9ybVNlYXJjaChzZWFyY2hRdWVyeSk7Ci0gICAgICAgICAgICAgICAgfS5iaW5k
KHRoaXMpLCAwKTsKKyAgICAgICAgICAgIGlmICghaXNOYU4odGhpcy5fZXhlY3V0aW9uTGluZU51
bWJlcikpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydCghaXNOYU4odGhpcy5fZXhl
Y3V0aW9uQ29sdW1uTnVtYmVyKSk7CisgICAgICAgICAgICAgICAgbmV3RXhlY3V0aW9uTG9jYXRp
b24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbCh0aGlzLl9l
eGVjdXRpb25MaW5lTnVtYmVyLCB0aGlzLl9leGVjdXRpb25Db2x1bW5OdW1iZXIpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMu
X2RlbGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyA9PT0gImZ1bmN0aW9uIikKLSAg
ICAgICAgICAgICAgICB0aGlzLl9kZWxlZ2F0ZS50ZXh0RWRpdG9yVXBkYXRlZEZvcm1hdHRpbmco
dGhpcyk7CisgICAgICAgICAgICBsZXQgbWFwcGVkQW5jaG9yTG9jYXRpb24gPSB0aGlzLl9mb3Jt
YXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRTZWxlY3Rpb25BbmNob3IubGlu
ZSwgb2xkU2VsZWN0aW9uQW5jaG9yLmNoKTsKKyAgICAgICAgICAgIGxldCBtYXBwZWRIZWFkTG9j
YXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVkVG9PcmlnaW5hbChvbGRT
ZWxlY3Rpb25IZWFkLmxpbmUsIG9sZFNlbGVjdGlvbkhlYWQuY2gpOworICAgICAgICAgICAgbmV3
U2VsZWN0aW9uQW5jaG9yID0ge2xpbmU6IG1hcHBlZEFuY2hvckxvY2F0aW9uLmxpbmVOdW1iZXIs
IGNoOiBtYXBwZWRBbmNob3JMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworICAgICAgICAgICAgbmV3
U2VsZWN0aW9uSGVhZCA9IHtsaW5lOiBtYXBwZWRIZWFkTG9jYXRpb24ubGluZU51bWJlciwgY2g6
IG1hcHBlZEhlYWRMb2NhdGlvbi5jb2x1bW5OdW1iZXJ9OworCisgICAgICAgICAgICB0aGlzLl9m
b3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fc2Ny
b2xsSW50b1ZpZXdDZW50ZXJlZChuZXdTZWxlY3Rpb25BbmNob3IpOworICAgICAgICB0aGlzLl9j
b2RlTWlycm9yLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb25BbmNob3IsIG5ld1NlbGVjdGlvbkhl
YWQpOworCisgICAgICAgIGlmIChuZXdFeGVjdXRpb25Mb2NhdGlvbikgeworICAgICAgICAgICAg
dGhpcy5fZXhlY3V0aW9uTGluZUhhbmRsZSA9IG51bGw7CisgICAgICAgICAgICB0aGlzLmV4ZWN1
dGlvbkNvbHVtbk51bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9uLmNvbHVtbk51bWJlcjsKKyAg
ICAgICAgICAgIHRoaXMuZXhlY3V0aW9uTGluZU51bWJlciA9IG5ld0V4ZWN1dGlvbkxvY2F0aW9u
LmxpbmVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzEzMTI5OTU1PiBGaW5kQmFubmVyOiBOZXcgc2VhcmNoZXMgc2hvdWxkIG5vdCBsb3NlIHNl
YXJjaCBwb3NpdGlvbiAoc3RhcnQgZnJvbSBjdXJyZW50IHNlbGVjdGlvbi9jYXJldCkKKyAgICAg
ICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFF1ZXJ5KSB7CisgICAgICAgICAgICBsZXQgc2VhcmNo
UXVlcnkgPSB0aGlzLmN1cnJlbnRTZWFyY2hRdWVyeTsKKyAgICAgICAgICAgIHRoaXMuc2VhcmNo
Q2xlYXJlZCgpOworICAgICAgICAgICAgLy8gU2V0IHRpbWVvdXQgc28gdGhhdCB0aGlzIGhhcHBl
bnMgYWZ0ZXIgdGhlIGN1cnJlbnQgQ29kZU1pcnJvciBvcGVyYXRpb24uCisgICAgICAgICAgICAv
LyBUaGUgZWRpdG9yIGhhcyB0byB1cGRhdGUgZm9yIHRoZSB2YWx1ZSBhbmQgc2VsZWN0aW9uIGNo
YW5nZXMuCisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5wZXJmb3JtU2VhcmNo
KHNlYXJjaFF1ZXJ5KSB9LCAwKTsKICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX2NvZGVNaXJy
b3Iub3BlcmF0aW9uKHByZXR0eVByaW50QW5kVXBkYXRlRWRpdG9yLmJpbmQodGhpcykpOworICAg
ICAgICBpZiAodGhpcy5fZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuX2RlbGVnYXRlLnRleHRFZGl0
b3JVcGRhdGVkRm9ybWF0dGluZyA9PT0gImZ1bmN0aW9uIikKKyAgICAgICAgICAgIHRoaXMuX2Rl
bGVnYXRlLnRleHRFZGl0b3JVcGRhdGVkRm9ybWF0dGluZyh0aGlzKTsKICAgICB9CiAKICAgICAv
LyBQcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9UZXh0UmVzb3VyY2VDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCmluZGV4IGY0
YzE5OGMuLjc2ZjVhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RleHRSZXNvdXJjZUNvbnRlbnRWaWV3Lmpz
CkBAIC0yMDMsNyArMjAzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRSZXNvdXJjZUNvbnRlbnRWaWV3
ID0gY2xhc3MgVGV4dFJlc291cmNlQ29udGVudFZpZXcgZXh0ZW5kcyBXZWIKICAgICBfdG9nZ2xl
UHJldHR5UHJpbnQoZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYWN0aXZhdGVkID0gIXRoaXMu
X3ByZXR0eVByaW50QnV0dG9uTmF2aWdhdGlvbkl0ZW0uYWN0aXZhdGVkOwotICAgICAgICB0aGlz
Ll90ZXh0RWRpdG9yLmZvcm1hdHRlZCA9IGFjdGl2YXRlZDsKKyAgICAgICAgdGhpcy5fdGV4dEVk
aXRvci5zZXRGb3JtYXR0ZWQoYWN0aXZhdGVkKTsKICAgICB9CiAKICAgICBfdG9nZ2xlVHlwZUFu
bm90YXRpb25zKGV2ZW50KQo=
</data>
<flag name="review"
          id="300157"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>