<?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>54965</bug_id>
          
          <creation_ts>2011-02-22 09:06:06 -0800</creation_ts>
          <short_desc>Web Inspector: factor search logic out of inspector.js</short_desc>
          <delta_ts>2011-03-03 07:46:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Andrey Kosyakov">caseq</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>355318</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-22 09:06:06 -0800</bug_when>
    <thetext>inspector.js is quite overcrowded, getting search logic moved to a separate class might get it a bit more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355331</commentid>
    <comment_count>1</comment_count>
      <attachid>83332</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-22 09:17:04 -0800</bug_when>
    <thetext>Created attachment 83332
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>355395</commentid>
    <comment_count>2</comment_count>
      <attachid>83332</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-22 10:48:09 -0800</bug_when>
    <thetext>Comment on attachment 83332
patch

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

&gt; Source/WebCore/inspector/front-end/Object.js:92
&gt; +WebInspector.declareSingleton = function(constructor)

I don&apos;t see why search controller is different from domAgent, debuggerAgent, etc. We should simply initialize it onload.

&gt; Source/WebCore/inspector/front-end/ScriptsPanel.js:-1029
&gt; -        WebInspector.updateSearchMatchesCount(0, this);

I think this call is still needed.

&gt; Source/WebCore/inspector/front-end/SearchController.js:198
&gt; +            for (var panelName in this.panels) {

I don&apos;t think your controller has panels. Please test this change thoroughly.

&gt; Source/WebCore/inspector/front-end/SearchController.js:224
&gt; +        this.currentQuery = query;

Could you encapsulate this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357138</commentid>
    <comment_count>3</comment_count>
      <attachid>83677</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-24 10:22:12 -0800</bug_when>
    <thetext>Created attachment 83677
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357140</commentid>
    <comment_count>4</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-24 10:23:12 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 83332 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83332&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/Object.js:92
&gt; &gt; +WebInspector.declareSingleton = function(constructor)
&gt; 
&gt; I don&apos;t see why search controller is different from domAgent, debuggerAgent, etc. We should simply initialize it onload.

done.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ScriptsPanel.js:-1029
&gt; &gt; -        WebInspector.updateSearchMatchesCount(0, this);
&gt; 
&gt; I think this call is still needed.

Yup, indeed -- we&apos;re still calling it directly. Brought it back.

&gt; &gt; Source/WebCore/inspector/front-end/SearchController.js:198
&gt; &gt; +            for (var panelName in this.panels) {
&gt; 
&gt; I don&apos;t think your controller has panels. Please test this change thoroughly.

Thanks, fixed!

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/SearchController.js:224
&gt; &gt; +        this.currentQuery = query;
&gt; 
&gt; Could you encapsulate this?

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357150</commentid>
    <comment_count>5</comment_count>
      <attachid>83677</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-24 10:38:34 -0800</bug_when>
    <thetext>Comment on attachment 83677
patch

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

&gt; Source/WebCore/WebCore.gypi:4772
&gt; +            &apos;inspector/front-end/SearchController.js&apos;,

Sc &lt; Se

&gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:66104
&gt; +					RelativePath=&quot;..\inspector\front-end\SearchController.js&quot;

ditto

&gt; Source/WebCore/inspector/front-end/inspector.js:244
&gt; +        if (!this._initializationComplete)

Why do we need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357746</commentid>
    <comment_count>6</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-25 00:21:41 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 83677 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83677&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gypi:4772
&gt; &gt; +            &apos;inspector/front-end/SearchController.js&apos;,
&gt; 
&gt; Sc &lt; Se
&gt; 
&gt; &gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:66104
&gt; &gt; +					RelativePath=&quot;..\inspector\front-end\SearchController.js&quot;
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/inspector.js:244
&gt; &gt; +        if (!this._initializationComplete)
&gt; 
&gt; Why do we need this?

we create bulk of WebInspector objects in doLoadedDone, and set attached() is occasionally called before that. We used to check for individual fields there, but as their number is growing, I thought we&apos;d better replace it with a single check for initialization being complete (thought we discussed it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>357790</commentid>
    <comment_count>7</comment_count>
      <attachid>83788</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-02-25 02:24:39 -0800</bug_when>
    <thetext>Created attachment 83788
patch

- removed calls to resize() methods from set attached() (resize is supposed to be called along with set attached() in case we change attach mode)
- fixed files ordering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>361615</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-03-03 07:46:05 -0800</bug_when>
    <thetext>Manually committed r80102: http://trac.webkit.org/changeset/80102</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83332</attachid>
            <date>2011-02-22 09:17:04 -0800</date>
            <delta_ts>2011-02-24 10:22:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>search-controller.diff</filename>
            <type>text/plain</type>
            <size>30219</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3NzE1OGEzLi41ZDM4NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDItMjIgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBmYWN0b3Igc2VhcmNoIGxvZ2ljIG91dCBvZiBpbnNwZWN0b3IuanMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY1CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5zd2l0Y2hUb0FuZEZv
Y3VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5fdXBk
YXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kZWNsYXJlU2luZ2xldG9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGFuZWwu
cHJvdG90eXBlLnBlcmZvcm1TZWFyY2gudXBkYXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZmluaXNoZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5wZXJmb3Jt
U2VhcmNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NlYXJjaENvbnRyb2xsZXIu
anM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVNob3J0
Y3V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5w
ZXJmb3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnBy
b3RvdHlwZS5fY2FuY2VsU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250
cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5fZm9jdXNTZWFyY2hGaWVsZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRl
U2VhcmNoTGFiZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJv
dG90eXBlLl9vblNlYXJjaEZpZWxkTWFudWFsRm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLl9vblNlYXJjaEtleURvd24pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLl9wZXJmb3JtU2VhcmNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5hY3RpdmVQ
YW5lbENoYW5nZWQucGVyZm9ybVBhbmVsU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
ZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5hY3RpdmVQYW5lbENoYW5nZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLmNhbmNlbFNlYXJjaCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0IGN1cnJlbnRQYW5l
bCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0IGF0dGFjaGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5kb2N1bWVudEtleURvd24pOgorCiAyMDExLTAyLTIyICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXou
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggNGEwN2I4MS4uMjRmNjNlMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDc2OSw2ICs0NzY5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVHJlZU1vZGVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TZWFyY2hDb250
cm9sbGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Njb3BlQ2hhaW5T
aWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpz
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NThlMjIxMS4uYzA0NTY2ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTY2MTAxLDYgKzY2MTAxLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNl
YXJjaENvbnRyb2xsZXIuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdHNQYW5lbC5qcyIKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCAzNmRiODFlLi5iN2Y1N2FiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBA
IC0yMjIsOCArMjIyLDYgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNoUXVlcnk7CiAgICAgICAgIHRoaXMuX2hpZGVT
ZWFyY2hIaWdobGlnaHRzKCk7CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1h
dGNoZXNDb3VudCgwLCB0aGlzKTsKLQogICAgICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0
SW5kZXggPSAwOwogICAgICAgICB0aGlzLl9zZWFyY2hSZXN1bHRzID0gW107CiAgICAgICAgIERP
TUFnZW50LnNlYXJjaENhbmNlbGVkKCk7CkBAIC0yNjQsMTQgKzI2MiwxNCBAQCBXZWJJbnNwZWN0
b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgc3dpdGNoVG9BbmRGb2N1czogZnVu
Y3Rpb24obm9kZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHNlYXJjaCByZXN0b3JlLgotICAg
ICAgICBXZWJJbnNwZWN0b3IuY2FuY2VsU2VhcmNoKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5T
ZWFyY2hDb250cm9sbGVyLmNhbmNlbFNlYXJjaCgpOwogICAgICAgICBXZWJJbnNwZWN0b3IuY3Vy
cmVudFBhbmVsID0gdGhpczsKICAgICAgICAgdGhpcy5mb2N1c2VkRE9NTm9kZSA9IG5vZGU7CiAg
ICAgfSwKIAogICAgIF91cGRhdGVNYXRjaGVzQ291bnQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2VhcmNoUmVz
dWx0cy5sZW5ndGgsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxl
ci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgsIHRo
aXMpOwogICAgICAgICB0aGlzLl9tYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKICAg
ICAgICAgdGhpcy5fdXBkYXRlZE1hdGNoQ291bnRPbmNlID0gdHJ1ZTsKICAgICB9LApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3QuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5qcwppbmRleCA1ODcyYjhiLi5k
ZTQ2ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09i
amVjdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5q
cwpAQCAtODgsMyArODgsMTcgQEAgV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkOwogICAgIH0KIH0KKworV2ViSW5z
cGVjdG9yLmRlY2xhcmVTaW5nbGV0b24gPSBmdW5jdGlvbihjb25zdHJ1Y3RvcikKK3sKKyAgICBm
dW5jdGlvbiBpbnN0YW5jZSgpCisgICAgeworICAgICAgICBpZiAoIWNvbnN0cnVjdG9yLl9pbnN0
YW5jZSkgeworICAgICAgICAgICAgY29uc3RydWN0b3IuX2luc3RhbmNlID0geyBfX3Byb3RvX186
IGNvbnN0cnVjdG9yLnByb3RvdHlwZSB9OworICAgICAgICAgICAgY29uc3RydWN0b3IuYXBwbHko
Y29uc3RydWN0b3IuX2luc3RhbmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb25z
dHJ1Y3Rvci5faW5zdGFuY2U7CisgICAgfQorICAgIGNvbnN0cnVjdG9yLl9fZGVmaW5lR2V0dGVy
X18oImluc3RhbmNlIiwgaW5zdGFuY2UpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUGFuZWwuanMKaW5kZXggNzU4YzU2ZC4uY2EwOTlhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0xMTAsOCArMTEwLDYgQEAgV2Vi
SW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoMCwgdGhpcyk7
Ci0KICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmll
cikgewogICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLl9jdXJyZW50U2VhcmNoQ2h1bmtJ
bnRlcnZhbElkZW50aWZpZXIpOwogICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRTZWFy
Y2hDaHVua0ludGVydmFsSWRlbnRpZmllcjsKQEAgLTEzOSw3ICsxMzcsNyBAQCBXZWJJbnNwZWN0
b3IuUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZU1hdGNoZXND
b3VudCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hN
YXRjaGVzQ291bnQodGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzLCB0aGlzKTsKKyAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCh0
aGlzLl90b3RhbFNlYXJjaE1hdGNoZXMsIHRoaXMpOwogICAgICAgICAgICAgbWF0Y2hlc0NvdW50
VXBkYXRlVGltZW91dCA9IG51bGw7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBhMjk5ZTc2Li4zMTk0
MWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Njcmlw
dHNQYW5lbC5qcwpAQCAtNDM5LDcgKzQzOSw2IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnZpc2libGVWaWV3ID0gbnVsbDsKIAogICAgICAg
ICBkZWxldGUgdGhpcy5jdXJyZW50UXVlcnk7Ci0gICAgICAgIHRoaXMuc2VhcmNoQ2FuY2VsZWQo
KTsKIAogICAgICAgICB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQoKTsKIApAQCAtMTAyNiw4ICsxMDI1
LDYgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICBzZWFy
Y2hDYW5jZWxlZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKLQogICAgICAgICBpZiAodGhpcy5fc2VhcmNo
VmlldykKICAgICAgICAgICAgIHRoaXMuX3NlYXJjaFZpZXcuc2VhcmNoQ2FuY2VsZWQoKTsKIApA
QCAtMTA1MSw3ICsxMDQ4LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICBpZiAoIXNlYXJjaE1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50
KHNlYXJjaE1hdGNoZXMsIHRoaXMpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLlNlYXJjaENv
bnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KHNlYXJjaE1hdGNoZXMsIHRoaXMpOwog
ICAgICAgICAgICAgdmlldy5qdW1wVG9GaXJzdFNlYXJjaFJlc3VsdCgpOwogICAgICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VhcmNoQ29u
dHJvbGxlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VhcmNoQ29u
dHJvbGxlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjY3MTFhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZWFy
Y2hDb250cm9sbGVyLmpzCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgTWF0dCBMaWxlayAocGV3dGVybW9vc2VAZ21haWwuY29tKS4KKyAqIENv
cHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5TZWFyY2hDb250cm9s
bGVyID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzZWFyY2giKTsKKyAgICB0aGlzLl9tYXRjaGVzRWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIik7CisgICAgdGhpcy5fdG9vbGJh
ckxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2gtdG9vbGJhci1s
YWJlbCIpOworCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlYXJjaCIsIHRo
aXMucGVyZm9ybVNlYXJjaC5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIHdoZW4gdGhlIHNlYXJjaCBp
cyBlbXB0aWVkCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHRoaXMuX29uU2VhcmNoRmllbGRNYW51YWxGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIHdo
ZW4gdGhlIHNlYXJjaCBmaWVsZCBpcyBtYW51YWxseSBzZWxlY3RlZAorICAgIHRoaXMuZWxlbWVu
dC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25TZWFyY2hLZXlEb3duLmJpbmQo
dGhpcyksIHRydWUpOworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90b3R5
cGUgPSB7CisgICAgaGFuZGxlU2hvcnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAg
ICAgdmFyIGlzTWFjID0gV2ViSW5zcGVjdG9yLmlzTWFjKCk7CisKKyAgICAgICAgc3dpdGNoIChl
dmVudC5rZXlJZGVudGlmaWVyKSB7CisgICAgICAgICAgICBjYXNlICJVKzAwNDYiOiAvLyBGIGtl
eQorICAgICAgICAgICAgICAgIGlmIChpc01hYykKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlz
RmluZEtleSA9IGV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtl
eSAmJiAhZXZlbnQuc2hpZnRLZXk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB2YXIgaXNGaW5kS2V5ID0gZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAm
JiAhZXZlbnQuYWx0S2V5ICYmICFldmVudC5zaGlmdEtleTsKKworICAgICAgICAgICAgICAgIGlm
IChpc0ZpbmRLZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNTZWFyY2hGaWVs
ZCgpOworICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKworICAgICAgICAgICAgY2FzZSAi
RjMiOgorICAgICAgICAgICAgICAgIGlmICghaXNNYWMpIHsKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fZm9jdXNTZWFyY2hGaWVsZCgpOworICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5k
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGNhc2UgIlUrMDA0NyI6IC8vIEcga2V5CisgICAgICAgICAgICAgICAgdmFy
IGN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWw7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaXNNYWMgJiYgZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZl
bnQuYWx0S2V5KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91c1Nl
YXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFuZWwuanVt
cFRvUHJldmlvdXNTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjdXJyZW50UGFuZWwuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRQYW5lbC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGV2ZW50LmhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBwZXJmb3JtU2VhcmNo
OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBmb3JjZVNlYXJjaCA9IGV2ZW50
LmtleUlkZW50aWZpZXIgPT09ICJFbnRlciI7CisgICAgICAgIHRoaXMuX3BlcmZvcm1TZWFyY2go
ZXZlbnQudGFyZ2V0LnZhbHVlLCBmb3JjZVNlYXJjaCwgZXZlbnQuc2hpZnRLZXksIGZhbHNlKTsK
KyAgICB9LAorCisgICAgX2NhbmNlbFNlYXJjaDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
dGhpcy5fc2VhcmNoRmllbGRFbGVtZW50LnZhbHVlID0gIiI7CisgICAgICAgIHRoaXMuX3BlcmZv
cm1TZWFyY2goIiIpOworICAgIH0sCisKKyAgICBfdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50OiBm
dW5jdGlvbihtYXRjaGVzKQorICAgIHsKKyAgICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkgewor
ICAgICAgICAgICAgdGhpcy5fbWF0Y2hlc0VsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hlcykg
eworICAgICAgICAgICAgaWYgKG1hdGNoZXMgPT09IDEpCisgICAgICAgICAgICAgICAgdmFyIG1h
dGNoZXNTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIjEgbWF0Y2giKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlc1N0cmluZyA9IFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiJWQgbWF0Y2hlcyIsIG1hdGNoZXMpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHZhciBtYXRjaGVzU3RyaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOb3QgRm91
bmQiKTsKKworICAgICAgICB0aGlzLl9tYXRjaGVzRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJo
aWRkZW4iKTsKKyAgICAgICAgdGhpcy5fbWF0Y2hlc0VsZW1lbnQudGV4dENvbnRlbnQgPSBtYXRj
aGVzU3RyaW5nOworICAgICAgICBXZWJJbnNwZWN0b3IudG9vbGJhci5yZXNpemUoKTsKKyAgICB9
LAorCisgICAgX2ZvY3VzU2VhcmNoRmllbGQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRo
aXMuZWxlbWVudC5mb2N1cygpOworICAgICAgICB0aGlzLmVsZW1lbnQuc2VsZWN0KCk7CisgICAg
fSwKKworICAgIHVwZGF0ZVNlYXJjaExhYmVsOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgcGFuZWxOYW1lID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbCAmJiBXZWJJbnNwZWN0b3Iu
Y3VycmVudFBhbmVsLnRvb2xiYXJJdGVtTGFiZWw7CisgICAgICAgIGlmICghcGFuZWxOYW1lKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbmV3TGFiZWwgPSBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlNlYXJjaCAlcyIsIHBhbmVsTmFtZSk7CisgICAgICAgIGlmIChXZWJJbnNwZWN0
b3IuYXR0YWNoZWQpCisgICAgICAgICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJwbGFj
ZWhvbGRlciIsIG5ld0xhYmVsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0aGlzLmVs
ZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpOworICAgICAgICAgICAgdGhpcy5f
dG9vbGJhckxhYmVsRWxlbWVudC50ZXh0Q29udGVudCA9IG5ld0xhYmVsOworICAgICAgICB9Cisg
ICAgfSwKKworICAgIF9vblNlYXJjaEZpZWxkTWFudWFsRm9jdXM6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBldmVudC50
YXJnZXQ7CisgICAgfSwKKworICAgIF9vblNlYXJjaEtleURvd246IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIHsKKyAgICAgICAgLy8gRXNjYXBlIEtleSB3aWxsIGNsZWFyIHRoZSBmaWVsZCBhbmQgY2xl
YXIgdGhlIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJ
bnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlKSB7CisgICAgICAgICAgICAv
LyBJZiBmb2N1cyBiZWxvbmdzIGhlcmUgYW5kIHRleHQgaXMgZW1wdHkgLSBub3RoaW5nIHRvIGRv
LCByZXR1cm4gdW5oYW5kbGVkLgorICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9
PT0gIiIgJiYgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50ID09PSB0aGlzLnByZXZpb3VzRm9jdXNF
bGVtZW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAg
ICAgICAgIC8vIFdoZW4gc2VhcmNoIHdhcyBzZWxlY3RlZCBtYW51YWxseSBhbmQgaXMgY3VycmVu
dGx5IGJsYW5rLCB3ZSdkIGxpa2UgRXNjIHN0YXkgdW5oYW5kbGVkCisgICAgICAgICAgICAvLyBh
bmQgaGl0IGNvbnNvbGUgZHJhd2VyIGhhbmRsZXIuCisgICAgICAgICAgICBldmVudC50YXJnZXQu
dmFsdWUgPSAiIjsKKworICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKGV2ZW50KTsKKyAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9y
LnByZXZpb3VzRm9jdXNFbGVtZW50OworICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5jdXJy
ZW50Rm9jdXNFbGVtZW50ID09PSBldmVudC50YXJnZXQpCisgICAgICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQuY3VycmVudEZvY3VzRWxlbWVudC5zZWxlY3QoKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNF
bnRlcktleShldmVudCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8g
U2VsZWN0IGFsbCBvZiB0aGUgdGV4dCBzbyB0aGUgdXNlciBjYW4gZWFzaWx5IHR5cGUgYW4gZW50
aXJlbHkgbmV3IHF1ZXJ5LgorICAgICAgICBldmVudC50YXJnZXQuc2VsZWN0KCk7CisKKyAgICAg
ICAgLy8gT25seSBjYWxsIHBlcmZvcm1TZWFyY2ggaWYgdGhlIEVudGVyIGtleSB3YXMgcHJlc3Nl
ZC4gT3RoZXJ3aXNlIHRoZSBzZWFyY2gKKyAgICAgICAgLy8gcGVyZm9ybWFuY2UgaXMgcG9vciBi
ZWNhdXNlIG9mIHNlYXJjaGluZyBvbiBldmVyeSBrZXkuIFRoZSBzZWFyY2ggZmllbGQgaGFzCisg
ICAgICAgIC8vIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgc2V0LCBzbyB3ZSBzdGlsbCBnZXQg
aW5jcmVtZW50YWwgc2VhcmNoZXMuCisgICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaChldmVudCk7
CisKKyAgICAgICAgLy8gQ2FsbCBwcmV2ZW50RGVmYXVsdCBzaW5jZSB0aGlzIHdhcyB0aGUgRW50
ZXIga2V5LiBUaGlzIHByZXZlbnRzIGEgInNlYXJjaCIgZXZlbnQKKyAgICAgICAgLy8gZnJvbSBm
aXJpbmcgZm9yIGtleSBkb3duLiBUaGlzIHN0b3BzIHBlcmZvcm1TZWFyY2ggZnJvbSBiZWluZyBj
YWxsZWQgdHdpY2UgaW4gYSByb3cuCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cisg
ICAgfSwKKworICAgIF9wZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSwgZm9yY2VTZWFyY2gs
IGlzQmFja3dhcmRTZWFyY2gsIHJlcGVhdFNlYXJjaCkKKyAgICB7CisgICAgICAgIHZhciBpc1No
b3J0U2VhcmNoID0gKHF1ZXJ5Lmxlbmd0aCA8IDMpOworCisgICAgICAgIC8vIENsZWFyIGEgbGVm
dG92ZXIgc2hvcnQgc2VhcmNoIGZsYWcgZHVlIHRvIGEgbm9uLWNvbmZsaWN0aW5nIGZvcmNlZCBz
ZWFyY2guCisgICAgICAgIGlmIChpc1Nob3J0U2VhcmNoICYmIHRoaXMuX3Nob3J0U2VhcmNoV2Fz
Rm9yY2VkQnlLZXlFdmVudCAmJiB0aGlzLmN1cnJlbnRRdWVyeSAhPT0gcXVlcnkpCisgICAgICAg
ICAgICBkZWxldGUgdGhpcy5fc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50OworCisgICAg
ICAgIC8vIEluZGljYXRlIHRoaXMgd2FzIGEgZm9yY2VkIHNlYXJjaCBvbiBhIHNob3J0IHF1ZXJ5
LgorICAgICAgICBpZiAoaXNTaG9ydFNlYXJjaCAmJiBmb3JjZVNlYXJjaCkKKyAgICAgICAgICAg
IHRoaXMuX3Nob3J0U2VhcmNoV2FzRm9yY2VkQnlLZXlFdmVudCA9IHRydWU7CisKKyAgICAgICAg
aWYgKCFxdWVyeSB8fCAhcXVlcnkubGVuZ3RoIHx8ICghZm9yY2VTZWFyY2ggJiYgaXNTaG9ydFNl
YXJjaCkpIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY2xvYmJlcmluZyBhIHNob3J0IHNlYXJj
aCBmb3JjZWQgYnkgdGhlIHVzZXIuCisgICAgICAgICAgICBpZiAodGhpcy5fc2hvcnRTZWFyY2hX
YXNGb3JjZWRCeUtleUV2ZW50KSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3Nob3J0
U2VhcmNoV2FzRm9yY2VkQnlLZXlFdmVudDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRRdWVyeTsKKworICAg
ICAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1lIGluIHRoaXMucGFuZWxzKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxOYW1lXTsKKyAgICAgICAgICAgICAg
ICB2YXIgaGFkQ3VycmVudFF1ZXJ5ID0gISFwYW5lbC5jdXJyZW50UXVlcnk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIHBhbmVsLmN1cnJlbnRRdWVyeTsKKyAgICAgICAgICAgICAgICBpZiAoaGFk
Q3VycmVudFF1ZXJ5ICYmIHBhbmVsLnNlYXJjaENhbmNlbGVkKQorICAgICAgICAgICAgICAgICAg
ICBwYW5lbC5zZWFyY2hDYW5jZWxlZCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0
aGlzLl91cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoKTsKKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgdmFyIGN1cnJlbnRQYW5lbCA9IFdlYkluc3BlY3Rvci5jdXJy
ZW50UGFuZWw7CisgICAgICAgIGlmICghcmVwZWF0U2VhcmNoICYmIHF1ZXJ5ID09PSBjdXJyZW50
UGFuZWwuY3VycmVudFF1ZXJ5ICYmIGN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgPT09IHRoaXMu
Y3VycmVudFF1ZXJ5KSB7CisgICAgICAgICAgICAvLyBXaGVuIHRoaXMgaXMgdGhlIHNhbWUgcXVl
cnkgYW5kIGEgZm9yY2VkIHNlYXJjaCwganVtcCB0byB0aGUgbmV4dAorICAgICAgICAgICAgLy8g
c2VhcmNoIHJlc3VsdCBmb3IgYSBnb29kIHVzZXIgZXhwZXJpZW5jZS4KKyAgICAgICAgICAgIGlm
IChmb3JjZVNlYXJjaCkgeworICAgICAgICAgICAgICAgIGlmICghaXNCYWNrd2FyZFNlYXJjaCAm
JiBjdXJyZW50UGFuZWwuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFBhbmVsLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChpc0JhY2t3YXJkU2VhcmNoICYmIGN1cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91
c1NlYXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhbmVsLmp1bXBUb1By
ZXZpb3VzU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5OworCisgICAg
ICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgpOworCisgICAgICAgIGlmICghY3Vy
cmVudFBhbmVsLnBlcmZvcm1TZWFyY2gpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5OworICAgICAgICBjdXJyZW50UGFuZWwu
cGVyZm9ybVNlYXJjaChxdWVyeSk7CisgICAgfSwKKworICAgIGFjdGl2ZVBhbmVsQ2hhbmdlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hMYWJlbCgpOworCisg
ICAgICAgIGlmICghdGhpcy5jdXJyZW50UXVlcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAKKyAgICAgICAgcGFuZWwgPSBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsOworICAgICAg
ICBpZiAocGFuZWwucGVyZm9ybVNlYXJjaCkgeworICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9y
bVBhbmVsU2VhcmNoKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRh
dGVTZWFyY2hNYXRjaGVzQ291bnQoKTsKKworICAgICAgICAgICAgICAgIHBhbmVsLmN1cnJlbnRR
dWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5OworICAgICAgICAgICAgICAgIHBhbmVsLnBlcmZvcm1T
ZWFyY2godGhpcy5jdXJyZW50UXVlcnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBQZXJmb3JtIHRoZSBzZWFyY2ggb24gYSB0aW1lb3V0IHNvIHRoZSBwYW5lbCBzd2l0Y2hlcyBm
YXN0LgorICAgICAgICAgICAgc2V0VGltZW91dChwZXJmb3JtUGFuZWxTZWFyY2guYmluZCh0aGlz
KSwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgdG8gc2hvdyBO
b3QgZm91bmQgZm9yIHBhbmVscyB0aGF0IGNhbid0IGJlIHNlYXJjaGVkLgorICAgICAgICAgICAg
dGhpcy5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1dlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCA9
IGZ1bmN0aW9uKG1hdGNoZXMsIHBhbmVsKQoreworICAgIGlmICghcGFuZWwpCisgICAgICAgIHBh
bmVsID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbDsKKworICAgIHBhbmVsLmN1cnJlbnRTZWFy
Y2hNYXRjaGVzID0gbWF0Y2hlczsKKworICAgIGlmIChwYW5lbCA9PT0gV2ViSW5zcGVjdG9yLmN1
cnJlbnRQYW5lbCkKKyAgICAgICAgV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIuaW5zdGFu
Y2UuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudChXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsLmN1
cnJlbnRRdWVyeSAmJiBtYXRjaGVzKTsKK30KKworV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xs
ZXIuY2FuY2VsU2VhcmNoID0gZnVuY3Rpb24oKQoreworICAgIFdlYkluc3BlY3Rvci5TZWFyY2hD
b250cm9sbGVyLmluc3RhbmNlLl9jYW5jZWxTZWFyY2goKTsKK30KKworV2ViSW5zcGVjdG9yLmRl
Y2xhcmVTaW5nbGV0b24oV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGYzNGQ3MDQuLjkx
ZDcyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2Vi
S2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5x
cmMKQEAgLTg3LDYgKzg3LDcgQEAKICAgICA8ZmlsZT5TY3JpcHRGb3JtYXR0ZXIuanM8L2ZpbGU+
CiAgICAgPGZpbGU+U2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzPC9maWxlPgogICAgIDxmaWxlPlNj
cmlwdHNQYW5lbC5qczwvZmlsZT4KKyAgICA8ZmlsZT5TZWFyY2hDb250cm9sbGVyLmpzPC9maWxl
PgogICAgIDxmaWxlPlNlY3Rpb24uanM8L2ZpbGU+CiAgICAgPGZpbGU+U2V0dGluZ3MuanM8L2Zp
bGU+CiAgICAgPGZpbGU+U2hvcnRjdXRzSGVscC5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDdjNDZiYTAuLmQ2
YzgxMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbApAQCAtMTU3LDYgKzE1Nyw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iSEFSRW50cnkuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvb2tpZVBhcnNlci5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9vbGJhci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2VhcmNoQ29u
dHJvbGxlci5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iZGV0YWNoZWQiPgog
ICAgIDxkaXYgaWQ9InRvb2xiYXIiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcwppbmRleCAxNmFhZTFlLi5jYmM5MTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTUzLDMwICsx
NTMsMTAgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50UGFu
ZWwgPSB4OwogCi0gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGFiZWwoKTsKLQogICAgICAgICBp
ZiAoeCkgewogICAgICAgICAgICAgeC5zaG93KCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLmN1
cnJlbnRRdWVyeSkgewotICAgICAgICAgICAgICAgIGlmICh4LnBlcmZvcm1TZWFyY2gpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9ybVBhbmVsU2VhcmNoKCkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hN
YXRjaGVzQ291bnQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgeC5jdXJyZW50UXVlcnkg
PSB0aGlzLmN1cnJlbnRRdWVyeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgucGVyZm9ybVNl
YXJjaCh0aGlzLmN1cnJlbnRRdWVyeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBzZWFyY2ggb24gYSB0aW1lb3V0IHNvIHRoZSBw
YW5lbCBzd2l0Y2hlcyBmYXN0LgotICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBlcmZv
cm1QYW5lbFNlYXJjaC5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdG8gc2hvdyBOb3QgZm91bmQgZm9yIHBhbmVs
cyB0aGF0IGNhbid0IGJlIHNlYXJjaGVkLgotICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLmluc3RhbmNlLmFjdGl2
ZVBhbmVsQ2hhbmdlZCgpOwogICAgICAgICB9Ci0KICAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1l
IGluIFdlYkluc3BlY3Rvci5wYW5lbHMpIHsKICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iu
cGFuZWxzW3BhbmVsTmFtZV0gPT09IHgpIHsKICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iu
c2V0dGluZ3MubGFzdEFjdGl2ZVBhbmVsID0gcGFuZWxOYW1lOwpAQCAtMjQ4LDcgKzIyOCw3IEBA
IHZhciBXZWJJbnNwZWN0b3IgPSB7CiAKICAgICAgICAgdGhpcy5fYXR0YWNoZWQgPSB4OwogCi0g
ICAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGFiZWwoKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlNl
YXJjaENvbnRyb2xsZXIuaW5zdGFuY2UudXBkYXRlU2VhcmNoTGFiZWwoKTsKIAogICAgICAgICB2
YXIgZG9ja1RvZ2dsZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJkb2NrLXN0YXR1
cy1iYXItaXRlbSIpOwogICAgICAgICB2YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CkBAIC01MzQs
MTEgKzUxNCw2IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpCiAgICAg
ZXJyb3JXYXJuaW5nQ291bnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLnNob3dDb25z
b2xlLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl91cGRhdGVFcnJvckFuZFdhcm5pbmdD
b3VudHMoKTsKIAotICAgIHZhciBzZWFyY2hGaWVsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzZWFyY2giKTsKLSAgICBzZWFyY2hGaWVsZC5hZGRFdmVudExpc3RlbmVyKCJzZWFyY2giLCB0
aGlzLnBlcmZvcm1TZWFyY2guYmluZCh0aGlzKSwgZmFsc2UpOyAvLyB3aGVuIHRoZSBzZWFyY2gg
aXMgZW1wdGllZAotICAgIHNlYXJjaEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIs
IHRoaXMuX3NlYXJjaEZpZWxkTWFudWFsRm9jdXMuYmluZCh0aGlzKSwgZmFsc2UpOyAvLyB3aGVu
IHRoZSBzZWFyY2ggZmllbGQgaXMgbWFudWFsbHkgc2VsZWN0ZWQKLSAgICBzZWFyY2hGaWVsZC5h
ZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fc2VhcmNoS2V5RG93bi5iaW5kKHRoaXMp
LCB0cnVlKTsKLQogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLmluaXRFeHRlbnNpb25zKCk7CiAK
ICAgICBmdW5jdGlvbiBvblBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCkBAIC03NzQsNiArNzQ5LDEy
IEBAIFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICAg
ICAgfQogICAgIH0KIAorICAgIFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLmluc3RhbmNl
LmhhbmRsZVNob3J0Y3V0KGV2ZW50KTsKKyAgICBpZiAoZXZlbnQuaGFuZGxlZCkgeworICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
dmFyIGlzTWFjID0gV2ViSW5zcGVjdG9yLmlzTWFjKCk7CiAgICAgc3dpdGNoIChldmVudC5rZXlJ
ZGVudGlmaWVyKSB7CiAgICAgICAgIGNhc2UgIkxlZnQiOgpAQCAtODAwLDM2ICs3ODEsNiBAQCBX
ZWJJbnNwZWN0b3IuZG9jdW1lbnRLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgICAg
ICB0aGlzLmRyYXdlci52aXNpYmxlID0gIXRoaXMuZHJhd2VyLnZpc2libGU7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlICJVKzAwNDYiOiAvLyBGIGtleQotICAgICAgICAgICAg
aWYgKGlzTWFjKQotICAgICAgICAgICAgICAgIHZhciBpc0ZpbmRLZXkgPSBldmVudC5tZXRhS2V5
ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5Owot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhciBpc0ZpbmRLZXkgPSBldmVudC5j
dHJsS2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0
S2V5OwotCi0gICAgICAgICAgICBpZiAoaXNGaW5kS2V5KSB7Ci0gICAgICAgICAgICAgICAgV2Vi
SW5zcGVjdG9yLmZvY3VzU2VhcmNoRmllbGQoKTsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSAiRjMiOgotICAgICAgICAgICAgaWYgKCFpc01hYykgewotICAgICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5mb2N1c1NlYXJjaEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgIlUrMDA0NyI6IC8vIEcga2V5Ci0gICAgICAgICAgICBpZiAoaXNNYWMgJiYg
ZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh0aGlzLmN1cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVz
dWx0KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYW5lbC5qdW1w
VG9OZXh0U2VhcmNoUmVzdWx0KQotICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5l
bC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAg
IC8vIFdpbmRvd3MgYW5kIE1hYyBoYXZlIHR3byBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgWywg
c28gYWNjZXB0IGJvdGguCiAgICAgICAgIGNhc2UgIlUrMDA1QiI6CiAgICAgICAgIGNhc2UgIlUr
MDBEQiI6IC8vIFsga2V5CkBAIC05OTYsMjcgKzk0Nyw2IEBAIFdlYkluc3BlY3Rvci5hbmltYXRl
U3R5bGUgPSBmdW5jdGlvbihhbmltYXRpb25zLCBkdXJhdGlvbiwgY2FsbGJhY2spCiAgICAgfTsK
IH0KIAotV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaExhYmVsID0gZnVuY3Rpb24oKQotewotICAg
IGlmICghdGhpcy5jdXJyZW50UGFuZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBuZXdM
YWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiU2VhcmNoICVzIiwgdGhpcy5jdXJyZW50UGFu
ZWwudG9vbGJhckl0ZW1MYWJlbCk7Ci0gICAgaWYgKHRoaXMuYXR0YWNoZWQpCi0gICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2giKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVy
IiwgbmV3TGFiZWwpOwotICAgIGVsc2UgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgic2VhcmNoIikucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpOwotICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoLXRvb2xiYXItbGFiZWwiKS50ZXh0Q29udGVudCA9
IG5ld0xhYmVsOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLmZvY3VzU2VhcmNoRmllbGQgPSBm
dW5jdGlvbigpCi17Ci0gICAgdmFyIHNlYXJjaEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInNlYXJjaCIpOwotICAgIHNlYXJjaEZpZWxkLmZvY3VzKCk7Ci0gICAgc2VhcmNoRmllbGQu
c2VsZWN0KCk7Ci19Ci0KIFdlYkluc3BlY3Rvci50b2dnbGVBdHRhY2ggPSBmdW5jdGlvbigpCiB7
CiAgICAgaWYgKCF0aGlzLmF0dGFjaGVkKQpAQCAtMTQ1NywxMTcgKzEzODcsNiBAQCBXZWJJbnNw
ZWN0b3IuYWRkTWFpbkV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24oZG9jKQogICAgIGRvYy5hZGRF
dmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuZG9jdW1lbnRDbGljay5iaW5kKHRoaXMpLCB0cnVl
KTsKIH0KIAotV2ViSW5zcGVjdG9yLl9zZWFyY2hGaWVsZE1hbnVhbEZvY3VzID0gZnVuY3Rpb24o
ZXZlbnQpCi17Ci0gICAgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50ID0gZXZlbnQudGFyZ2V0Owot
ICAgIHRoaXMuX3ByZXZpb3VzRm9jdXNFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwotfQotCi1XZWJJ
bnNwZWN0b3IuX3NlYXJjaEtleURvd24gPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICAvLyBFc2Nh
cGUgS2V5IHdpbGwgY2xlYXIgdGhlIGZpZWxkIGFuZCBjbGVhciB0aGUgc2VhcmNoIHJlc3VsdHMK
LSAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQu
S2V5cy5Fc2MuY29kZSkgewotICAgICAgICAvLyBJZiBmb2N1cyBiZWxvbmdzIGhlcmUgYW5kIHRl
eHQgaXMgZW1wdHkgLSBub3RoaW5nIHRvIGRvLCByZXR1cm4gdW5oYW5kbGVkLgotICAgICAgICBp
ZiAoZXZlbnQudGFyZ2V0LnZhbHVlID09PSAiIiAmJiB0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQg
PT09IHRoaXMucHJldmlvdXNGb2N1c0VsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOwotICAgICAgICAvLyBXaGVuIHNlYXJjaCB3YXMgc2VsZWN0ZWQgbWFudWFsbHkgYW5kIGlz
IGN1cnJlbnRseSBibGFuaywgd2UnZCBsaWtlIEVzYyBzdGF5IHVuaGFuZGxlZAotICAgICAgICAv
LyBhbmQgaGl0IGNvbnNvbGUgZHJhd2VyIGhhbmRsZXIuCi0gICAgICAgIGV2ZW50LnRhcmdldC52
YWx1ZSA9ICIiOwotCi0gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaChldmVudCk7Ci0gICAgICAg
IHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJldmlvdXNGb2N1c0VsZW1lbnQ7Ci0g
ICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkKLSAg
ICAgICAgICAgIHRoaXMuY3VycmVudEZvY3VzRWxlbWVudC5zZWxlY3QoKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFbnRlcktleShldmVudCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNlbGVjdCBhbGwgb2YgdGhlIHRleHQgc28gdGhlIHVz
ZXIgY2FuIGVhc2lseSB0eXBlIGFuIGVudGlyZWx5IG5ldyBxdWVyeS4KLSAgICBldmVudC50YXJn
ZXQuc2VsZWN0KCk7Ci0KLSAgICAvLyBPbmx5IGNhbGwgcGVyZm9ybVNlYXJjaCBpZiB0aGUgRW50
ZXIga2V5IHdhcyBwcmVzc2VkLiBPdGhlcndpc2UgdGhlIHNlYXJjaAotICAgIC8vIHBlcmZvcm1h
bmNlIGlzIHBvb3IgYmVjYXVzZSBvZiBzZWFyY2hpbmcgb24gZXZlcnkga2V5LiBUaGUgc2VhcmNo
IGZpZWxkIGhhcwotICAgIC8vIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgc2V0LCBzbyB3ZSBz
dGlsbCBnZXQgaW5jcmVtZW50YWwgc2VhcmNoZXMuCi0gICAgdGhpcy5wZXJmb3JtU2VhcmNoKGV2
ZW50KTsKLQotICAgIC8vIENhbGwgcHJldmVudERlZmF1bHQgc2luY2UgdGhpcyB3YXMgdGhlIEVu
dGVyIGtleS4gVGhpcyBwcmV2ZW50cyBhICJzZWFyY2giIGV2ZW50Ci0gICAgLy8gZnJvbSBmaXJp
bmcgZm9yIGtleSBkb3duLiBUaGlzIHN0b3BzIHBlcmZvcm1TZWFyY2ggZnJvbSBiZWluZyBjYWxs
ZWQgdHdpY2UgaW4gYSByb3cuCi0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0KLQotV2Vi
SW5zcGVjdG9yLnBlcmZvcm1TZWFyY2ggPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICB2YXIgZm9y
Y2VTZWFyY2ggPSBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwotICAgIHRoaXMuZG9Q
ZXJmb3JtU2VhcmNoKGV2ZW50LnRhcmdldC52YWx1ZSwgZm9yY2VTZWFyY2gsIGV2ZW50LnNoaWZ0
S2V5LCBmYWxzZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5jYW5jZWxTZWFyY2ggPSBmdW5jdGlvbigp
Ci17Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaCIpLnZhbHVlID0gIiI7Ci0g
ICAgdGhpcy5kb1BlcmZvcm1TZWFyY2goIiIpOwotfQotCi1XZWJJbnNwZWN0b3IuZG9QZXJmb3Jt
U2VhcmNoID0gZnVuY3Rpb24ocXVlcnksIGZvcmNlU2VhcmNoLCBpc0JhY2t3YXJkU2VhcmNoLCBy
ZXBlYXRTZWFyY2gpCi17Ci0gICAgdmFyIGlzU2hvcnRTZWFyY2ggPSAocXVlcnkubGVuZ3RoIDwg
Myk7Ci0KLSAgICAvLyBDbGVhciBhIGxlZnRvdmVyIHNob3J0IHNlYXJjaCBmbGFnIGR1ZSB0byBh
IG5vbi1jb25mbGljdGluZyBmb3JjZWQgc2VhcmNoLgotICAgIGlmIChpc1Nob3J0U2VhcmNoICYm
IHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50ICYmIHRoaXMuY3VycmVudFF1ZXJ5
ICE9PSBxdWVyeSkKLSAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtl
eUV2ZW50OwotCi0gICAgLy8gSW5kaWNhdGUgdGhpcyB3YXMgYSBmb3JjZWQgc2VhcmNoIG9uIGEg
c2hvcnQgcXVlcnkuCi0gICAgaWYgKGlzU2hvcnRTZWFyY2ggJiYgZm9yY2VTZWFyY2gpCi0gICAg
ICAgIHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50ID0gdHJ1ZTsKLQotICAgIGlm
ICghcXVlcnkgfHwgIXF1ZXJ5Lmxlbmd0aCB8fCAoIWZvcmNlU2VhcmNoICYmIGlzU2hvcnRTZWFy
Y2gpKSB7Ci0gICAgICAgIC8vIFByZXZlbnQgY2xvYmJlcmluZyBhIHNob3J0IHNlYXJjaCBmb3Jj
ZWQgYnkgdGhlIHVzZXIuCi0gICAgICAgIGlmICh0aGlzLnNob3J0U2VhcmNoV2FzRm9yY2VkQnlL
ZXlFdmVudCkgewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRC
eUtleUV2ZW50OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVs
ZXRlIHRoaXMuY3VycmVudFF1ZXJ5OwotCi0gICAgICAgIGZvciAodmFyIHBhbmVsTmFtZSBpbiB0
aGlzLnBhbmVscykgewotICAgICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxO
YW1lXTsKLSAgICAgICAgICAgIHZhciBoYWRDdXJyZW50UXVlcnkgPSAhIXBhbmVsLmN1cnJlbnRR
dWVyeTsKLSAgICAgICAgICAgIGRlbGV0ZSBwYW5lbC5jdXJyZW50UXVlcnk7Ci0gICAgICAgICAg
ICBpZiAoaGFkQ3VycmVudFF1ZXJ5ICYmIHBhbmVsLnNlYXJjaENhbmNlbGVkKQotICAgICAgICAg
ICAgICAgIHBhbmVsLnNlYXJjaENhbmNlbGVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlz
LnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIXJlcGVhdFNlYXJjaCAmJiBxdWVyeSA9PT0gdGhpcy5jdXJyZW50UGFuZWwuY3Vy
cmVudFF1ZXJ5ICYmIHRoaXMuY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSA9PT0gdGhpcy5jdXJy
ZW50UXVlcnkpIHsKLSAgICAgICAgLy8gV2hlbiB0aGlzIGlzIHRoZSBzYW1lIHF1ZXJ5IGFuZCBh
IGZvcmNlZCBzZWFyY2gsIGp1bXAgdG8gdGhlIG5leHQKLSAgICAgICAgLy8gc2VhcmNoIHJlc3Vs
dCBmb3IgYSBnb29kIHVzZXIgZXhwZXJpZW5jZS4KLSAgICAgICAgaWYgKGZvcmNlU2VhcmNoKSB7
Ci0gICAgICAgICAgICBpZiAoIWlzQmFja3dhcmRTZWFyY2ggJiYgdGhpcy5jdXJyZW50UGFuZWwu
anVtcFRvTmV4dFNlYXJjaFJlc3VsdCkKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5l
bC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0JhY2t3
YXJkU2VhcmNoICYmIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0
KQotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNo
UmVzdWx0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRoaXMu
Y3VycmVudFF1ZXJ5ID0gcXVlcnk7Ci0KLSAgICB0aGlzLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3Vu
dCgpOwotCi0gICAgaWYgKCF0aGlzLmN1cnJlbnRQYW5lbC5wZXJmb3JtU2VhcmNoKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB0aGlzLmN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgPSBxdWVyeTsK
LSAgICB0aGlzLmN1cnJlbnRQYW5lbC5wZXJmb3JtU2VhcmNoKHF1ZXJ5KTsKLX0KLQogV2ViSW5z
cGVjdG9yLmZyb250ZW5kUmV1c2VkID0gZnVuY3Rpb24oKQogewogICAgIHRoaXMubmV0d29ya01h
bmFnZXIucmVzZXQoKTsKQEAgLTE1NzksMzQgKzEzOTgsNiBAQCBXZWJJbnNwZWN0b3IuYWRkTm9k
ZXNUb1NlYXJjaFJlc3VsdCA9IGZ1bmN0aW9uKG5vZGVJZHMpCiAgICAgV2ViSW5zcGVjdG9yLnBh
bmVscy5lbGVtZW50cy5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOwogfQogCi1XZWJJ
bnNwZWN0b3IudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50ID0gZnVuY3Rpb24obWF0Y2hlcywgcGFu
ZWwpCi17Ci0gICAgaWYgKCFwYW5lbCkKLSAgICAgICAgcGFuZWwgPSB0aGlzLmN1cnJlbnRQYW5l
bDsKLQotICAgIHBhbmVsLmN1cnJlbnRTZWFyY2hNYXRjaGVzID0gbWF0Y2hlczsKLQotICAgIGlm
IChwYW5lbCAhPT0gdGhpcy5jdXJyZW50UGFuZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghdGhpcy5jdXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5KSB7Ci0gICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIikuYWRkU3R5bGVDbGFzcygiaGlk
ZGVuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobWF0Y2hlcykgewotICAg
ICAgICBpZiAobWF0Y2hlcyA9PT0gMSkKLSAgICAgICAgICAgIHZhciBtYXRjaGVzU3RyaW5nID0g
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIxIG1hdGNoIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHZhciBtYXRjaGVzU3RyaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBtYXRjaGVz
IiwgbWF0Y2hlcyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhciBtYXRjaGVzU3RyaW5nID0gV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCJOb3QgRm91bmQiKTsKLQotICAgIHZhciBtYXRjaGVzVG9vbGJh
ckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoLXJlc3VsdHMtbWF0Y2hl
cyIpOwotICAgIG1hdGNoZXNUb29sYmFyRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4i
KTsKLSAgICBtYXRjaGVzVG9vbGJhckVsZW1lbnQudGV4dENvbnRlbnQgPSBtYXRjaGVzU3RyaW5n
OwotfQotCiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcpCiB7CiAgICAg
aWYgKHdpbmRvdy5sb2NhbGl6ZWRTdHJpbmdzICYmIHN0cmluZyBpbiB3aW5kb3cubG9jYWxpemVk
U3RyaW5ncykK
</data>
<flag name="review"
          id="75120"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="75121"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83677</attachid>
            <date>2011-02-24 10:22:12 -0800</date>
            <delta_ts>2011-02-25 02:24:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>search-controller.diff</filename>
            <type>text/plain</type>
            <size>30381</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYWIyNjRlLi43MGQ5NTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMDItMjIgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBmYWN0b3Igc2VhcmNoIGxvZ2ljIG91dCBvZiBpbnNwZWN0b3IuanMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY1CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5zd2l0Y2hUb0FuZEZv
Y3VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5fdXBk
YXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdC5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5kZWNsYXJlU2luZ2xldG9uKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBhbmVs
LnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGFuZWwu
cHJvdG90eXBlLnBlcmZvcm1TZWFyY2gudXBkYXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnJlc2V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2guZmluaXNoZWRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5wZXJmb3Jt
U2VhcmNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NlYXJjaENvbnRyb2xsZXIu
anM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVNob3J0
Y3V0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5w
ZXJmb3JtU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnBy
b3RvdHlwZS5fY2FuY2VsU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250
cm9sbGVyLnByb3RvdHlwZS5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5fZm9jdXNTZWFyY2hGaWVsZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRl
U2VhcmNoTGFiZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJv
dG90eXBlLl9vblNlYXJjaEZpZWxkTWFudWFsRm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLl9vblNlYXJjaEtleURvd24pOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLl9wZXJmb3JtU2VhcmNoKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5hY3RpdmVQ
YW5lbENoYW5nZWQucGVyZm9ybVBhbmVsU2VhcmNoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
ZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZS5hY3RpdmVQYW5lbENoYW5nZWQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLmNhbmNlbFNlYXJjaCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0IGN1cnJlbnRQYW5l
bCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc2V0IGF0dGFjaGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5kb2N1bWVudEtleURvd24pOgorCiAyMDExLTAyLTIyICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXou
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggZGM0ZDA0MC4uODhjYWY0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDc2OSw2ICs0NzY5LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVHJlZU1vZGVsLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVmlldy5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJj
ZXNQYW5lbC5qcycsCisgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TZWFyY2hDb250
cm9sbGVyLmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5kL1Njb3BlQ2hhaW5T
aWRlYmFyUGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQu
anMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpz
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
NThlMjIxMS4uYzA0NTY2ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKQEAgLTY2MTAxLDYgKzY2MTAxLDEwIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+
CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNl
YXJjaENvbnRyb2xsZXIuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNjcmlwdHNQYW5lbC5qcyIKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCAzNmRiODFlLi41ZGQ5Yzg5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBA
IC0yMjIsNyArMjIyLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICBkZWxldGUgdGhpcy5fc2VhcmNoUXVlcnk7CiAgICAgICAgIHRoaXMuX2hpZGVT
ZWFyY2hIaWdobGlnaHRzKCk7CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1h
dGNoZXNDb3VudCgwLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xs
ZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KDAsIHRoaXMpOwogCiAgICAgICAgIHRoaXMuX2N1
cnJlbnRTZWFyY2hSZXN1bHRJbmRleCA9IDA7CiAgICAgICAgIHRoaXMuX3NlYXJjaFJlc3VsdHMg
PSBbXTsKQEAgLTI2NCwxNCArMjY0LDE0IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnBy
b3RvdHlwZSA9IHsKICAgICBzd2l0Y2hUb0FuZEZvY3VzOiBmdW5jdGlvbihub2RlKQogICAgIHsK
ICAgICAgICAgLy8gUmVzZXQgc2VhcmNoIHJlc3RvcmUuCi0gICAgICAgIFdlYkluc3BlY3Rvci5j
YW5jZWxTZWFyY2goKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIuY2Fu
Y2VsU2VhcmNoKCk7CiAgICAgICAgIFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWwgPSB0aGlzOwog
ICAgICAgICB0aGlzLmZvY3VzZWRET01Ob2RlID0gbm9kZTsKICAgICB9LAogCiAgICAgX3VwZGF0
ZU1hdGNoZXNDb3VudDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVw
ZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCwgdGhpcyk7
CisgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNo
ZXNDb3VudCh0aGlzLl9zZWFyY2hSZXN1bHRzLmxlbmd0aCwgdGhpcyk7CiAgICAgICAgIHRoaXMu
X21hdGNoZXNDb3VudFVwZGF0ZVRpbWVvdXQgPSBudWxsOwogICAgICAgICB0aGlzLl91cGRhdGVk
TWF0Y2hDb3VudE9uY2UgPSB0cnVlOwogICAgIH0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9QYW5lbC5qcwppbmRleCA3NThjNTZkLi5kOWI1NGQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMKQEAgLTExMCw3ICsxMTAsNyBAQCBX
ZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlz
KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0
Y2hlc0NvdW50KDAsIHRoaXMpOwogCiAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50U2VhcmNoQ2h1
bmtJbnRlcnZhbElkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5f
Y3VycmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKTsKQEAgLTEzOSw3ICsxMzksNyBA
QCBXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIHVw
ZGF0ZU1hdGNoZXNDb3VudCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci51
cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzLCB0aGlzKTsK
KyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1h
dGNoZXNDb3VudCh0aGlzLl90b3RhbFNlYXJjaE1hdGNoZXMsIHRoaXMpOwogICAgICAgICAgICAg
bWF0Y2hlc0NvdW50VXBkYXRlVGltZW91dCA9IG51bGw7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCA5
N2VlZTA2Li45NDQ4MWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtOTc5LDggKzk3OSw2IEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgc2VhcmNoQ2FuY2VsZWQ6IGZ1bmN0aW9u
KCkKICAgICB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQo
MCwgdGhpcyk7Ci0KICAgICAgICAgaWYgKHRoaXMuX3NlYXJjaFZpZXcpCiAgICAgICAgICAgICB0
aGlzLl9zZWFyY2hWaWV3LnNlYXJjaENhbmNlbGVkKCk7CiAKQEAgLTk5MCw2ICs5ODgsOCBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIHBlcmZvcm1TZWFy
Y2g6IGZ1bmN0aW9uKHF1ZXJ5KQogICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENv
bnRyb2xsZXIudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KDAsIHRoaXMpOworCiAgICAgICAgIGlm
ICghdGhpcy52aXNpYmxlVmlldykKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMTAwNCw3ICsx
MDA0LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBpZiAoIXNlYXJjaE1hdGNoZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KHNlYXJjaE1hdGNo
ZXMsIHRoaXMpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRyb2xsZXIudXBk
YXRlU2VhcmNoTWF0Y2hlc0NvdW50KHNlYXJjaE1hdGNoZXMsIHRoaXMpOwogICAgICAgICAgICAg
dmlldy5qdW1wVG9GaXJzdFNlYXJjaFJlc3VsdCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VhcmNoQ29udHJvbGxlci5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VhcmNoQ29udHJvbGxlci5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzVjNDI0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZWFyY2hDb250cm9sbGVy
LmpzCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgTWF0dCBMaWxlayAocGV3dGVybW9vc2VAZ21haWwuY29tKS4KKyAqIENvcHlyaWdodCAoQykg
MjAwOSBKb3NlcGggUGVjb3Jhcm8KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKK1dlYkluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyID0gZnVuY3Rp
b24oKQoreworICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFy
Y2giKTsKKyAgICB0aGlzLl9tYXRjaGVzRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIik7CisgICAgdGhpcy5fdG9vbGJhckxhYmVsRWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2gtdG9vbGJhci1sYWJlbCIpOworCisg
ICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlYXJjaCIsIHRoaXMuX29uU2VhcmNo
LmJpbmQodGhpcyksIGZhbHNlKTsgLy8gd2hlbiB0aGUgc2VhcmNoIGlzIGVtcHRpZWQKKyAgICB0
aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25TZWFyY2hG
aWVsZE1hbnVhbEZvY3VzLmJpbmQodGhpcyksIGZhbHNlKTsgLy8gd2hlbiB0aGUgc2VhcmNoIGZp
ZWxkIGlzIG1hbnVhbGx5IHNlbGVjdGVkCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVu
ZXIoImtleWRvd24iLCB0aGlzLl9vbktleURvd24uYmluZCh0aGlzKSwgdHJ1ZSk7Cit9CisKK1dl
Ykluc3BlY3Rvci5TZWFyY2hDb250cm9sbGVyLnByb3RvdHlwZSA9IHsKKyAgICB1cGRhdGVTZWFy
Y2hNYXRjaGVzQ291bnQ6IGZ1bmN0aW9uKG1hdGNoZXMsIHBhbmVsKQorICAgIHsKKyAgICAgICAg
aWYgKCFwYW5lbCkKKyAgICAgICAgICAgIHBhbmVsID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5l
bDsKKworICAgICAgICBwYW5lbC5jdXJyZW50U2VhcmNoTWF0Y2hlcyA9IG1hdGNoZXM7CisKKyAg
ICAgICAgaWYgKHBhbmVsID09PSBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsKQorICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KFdlYkluc3BlY3Rvci5jdXJyZW50UGFu
ZWwuY3VycmVudFF1ZXJ5ICYmIG1hdGNoZXMpOworICAgIH0sCisKKyAgICB1cGRhdGVTZWFyY2hM
YWJlbDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHBhbmVsTmFtZSA9IFdlYkluc3Bl
Y3Rvci5jdXJyZW50UGFuZWwgJiYgV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbC50b29sYmFySXRl
bUxhYmVsOworICAgICAgICBpZiAoIXBhbmVsTmFtZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgdmFyIG5ld0xhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWFyY2ggJXMiLCBw
YW5lbE5hbWUpOworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmF0dGFjaGVkKQorICAgICAgICAg
ICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgicGxhY2Vob2xkZXIiLCBuZXdMYWJlbCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgi
cGxhY2Vob2xkZXIiKTsKKyAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJMYWJlbEVsZW1lbnQudGV4
dENvbnRlbnQgPSBuZXdMYWJlbDsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBjYW5jZWxTZWFy
Y2g6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC52YWx1ZSA9ICIiOwor
ICAgICAgICB0aGlzLl9wZXJmb3JtU2VhcmNoKCIiKTsKKyAgICB9LAorCisgICAgaGFuZGxlU2hv
cnRjdXQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGlzTWFjID0gV2ViSW5z
cGVjdG9yLmlzTWFjKCk7CisKKyAgICAgICAgc3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBjYXNlICJVKzAwNDYiOiAvLyBGIGtleQorICAgICAgICAgICAgICAgIGlm
IChpc01hYykKKyAgICAgICAgICAgICAgICAgICAgdmFyIGlzRmluZEtleSA9IGV2ZW50Lm1ldGFL
ZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YXIgaXNGaW5kS2V5
ID0gZXZlbnQuY3RybEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5ICYmICFl
dmVudC5zaGlmdEtleTsKKworICAgICAgICAgICAgICAgIGlmIChpc0ZpbmRLZXkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNTZWFyY2hGaWVsZCgpOworICAgICAgICAgICAgICAg
ICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKworICAgICAgICAgICAgY2FzZSAiRjMiOgorICAgICAgICAgICAgICAg
IGlmICghaXNNYWMpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNTZWFyY2hGaWVs
ZCgpOworICAgICAgICAgICAgICAgICAgICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgIlUr
MDA0NyI6IC8vIEcga2V5CisgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRQYW5lbCA9IFdlYklu
c3BlY3Rvci5jdXJyZW50UGFuZWw7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNNYWMgJiYgZXZl
bnQubWV0YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFuZWwuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1
bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGFuZWwuanVtcFRv
TmV4dFNlYXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYW5lbC5q
dW1wVG9OZXh0U2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICBhY3RpdmVQYW5lbENoYW5nZWQ6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGFiZWwoKTsKKworICAgICAgICBpZiAoIXRo
aXMuX2N1cnJlbnRRdWVyeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIAorICAgICAg
ICBwYW5lbCA9IFdlYkluc3BlY3Rvci5jdXJyZW50UGFuZWw7CisgICAgICAgIGlmIChwYW5lbC5w
ZXJmb3JtU2VhcmNoKSB7CisgICAgICAgICAgICBmdW5jdGlvbiBwZXJmb3JtUGFuZWxTZWFyY2go
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNo
ZXNDb3VudCgpOworCisgICAgICAgICAgICAgICAgcGFuZWwuY3VycmVudFF1ZXJ5ID0gdGhpcy5f
Y3VycmVudFF1ZXJ5OworICAgICAgICAgICAgICAgIHBhbmVsLnBlcmZvcm1TZWFyY2godGhpcy5f
Y3VycmVudFF1ZXJ5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUGVyZm9ybSB0
aGUgc2VhcmNoIG9uIGEgdGltZW91dCBzbyB0aGUgcGFuZWwgc3dpdGNoZXMgZmFzdC4KKyAgICAg
ICAgICAgIHNldFRpbWVvdXQocGVyZm9ybVBhbmVsU2VhcmNoLmJpbmQodGhpcyksIDApOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVXBkYXRlIHRvIHNob3cgTm90IGZvdW5kIGZv
ciBwYW5lbHMgdGhhdCBjYW4ndCBiZSBzZWFyY2hlZC4KKyAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZVNlYXJjaE1hdGNoZXNDb3VudCgpOworICAgICAgICB9CisgICAgfSwKKworICAgIF91cGRhdGVT
ZWFyY2hNYXRjaGVzQ291bnQ6IGZ1bmN0aW9uKG1hdGNoZXMpCisgICAgeworICAgICAgICBpZiAo
bWF0Y2hlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLl9tYXRjaGVzRWxlbWVudC5hZGRT
dHlsZUNsYXNzKCJoaWRkZW4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChtYXRjaGVzKSB7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyA9PT0gMSkKKyAg
ICAgICAgICAgICAgICB2YXIgbWF0Y2hlc1N0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
MSBtYXRjaCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhciBtYXRjaGVz
U3RyaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBtYXRjaGVzIiwgbWF0Y2hlcyk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdmFyIG1hdGNoZXNTdHJpbmcgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIk5vdCBGb3VuZCIpOworCisgICAgICAgIHRoaXMuX21hdGNoZXNFbGVtZW50
LnJlbW92ZVN0eWxlQ2xhc3MoImhpZGRlbiIpOworICAgICAgICB0aGlzLl9tYXRjaGVzRWxlbWVu
dC50ZXh0Q29udGVudCA9IG1hdGNoZXNTdHJpbmc7CisgICAgICAgIFdlYkluc3BlY3Rvci50b29s
YmFyLnJlc2l6ZSgpOworICAgIH0sCisKKyAgICBfZm9jdXNTZWFyY2hGaWVsZDogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LmZvY3VzKCk7CisgICAgICAgIHRoaXMuZWxl
bWVudC5zZWxlY3QoKTsKKyAgICB9LAorCisgICAgX29uU2VhcmNoRmllbGRNYW51YWxGb2N1czog
ZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3Vz
RWxlbWVudCA9IGV2ZW50LnRhcmdldDsKKyAgICB9LAorCisgICAgX29uS2V5RG93bjogZnVuY3Rp
b24oZXZlbnQpCisgICAgeworICAgICAgICAvLyBFc2NhcGUgS2V5IHdpbGwgY2xlYXIgdGhlIGZp
ZWxkIGFuZCBjbGVhciB0aGUgc2VhcmNoIHJlc3VsdHMKKyAgICAgICAgaWYgKGV2ZW50LmtleUNv
ZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpIHsKKyAg
ICAgICAgICAgIC8vIElmIGZvY3VzIGJlbG9uZ3MgaGVyZSBhbmQgdGV4dCBpcyBlbXB0eSAtIG5v
dGhpbmcgdG8gZG8sIHJldHVybiB1bmhhbmRsZWQuCisgICAgICAgICAgICAvLyBXaGVuIHNlYXJj
aCB3YXMgc2VsZWN0ZWQgbWFudWFsbHkgYW5kIGlzIGN1cnJlbnRseSBibGFuaywgd2UnZCBsaWtl
IEVzYyBzdGF5IHVuaGFuZGxlZAorICAgICAgICAgICAgLy8gYW5kIGhpdCBjb25zb2xlIGRyYXdl
ciBoYW5kbGVyLgorICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gIiIgJiYg
dGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50ID09PSB0aGlzLnByZXZpb3VzRm9jdXNFbGVtZW50KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKworICAgICAgICAgICAg
dGhpcy5jYW5jZWxTZWFyY2goZXZlbnQpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJl
bnRGb2N1c0VsZW1lbnQgPSBXZWJJbnNwZWN0b3IucHJldmlvdXNGb2N1c0VsZW1lbnQ7CisgICAg
ICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmN1cnJlbnRGb2N1c0VsZW1lbnQgPT09IGV2ZW50LnRh
cmdldCkKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudEZvY3VzRWxlbWVudC5j
dXJyZW50Rm9jdXNFbGVtZW50LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFpc0VudGVyS2V5KGV2ZW50KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBTZWxlY3QgYWxsIG9mIHRoZSB0ZXh0IHNvIHRo
ZSB1c2VyIGNhbiBlYXNpbHkgdHlwZSBhbiBlbnRpcmVseSBuZXcgcXVlcnkuCisgICAgICAgIGV2
ZW50LnRhcmdldC5zZWxlY3QoKTsKKworICAgICAgICAvLyBPbmx5IGNhbGwgcGVyZm9ybVNlYXJj
aCBpZiB0aGUgRW50ZXIga2V5IHdhcyBwcmVzc2VkLiBPdGhlcndpc2UgdGhlIHNlYXJjaAorICAg
ICAgICAvLyBwZXJmb3JtYW5jZSBpcyBwb29yIGJlY2F1c2Ugb2Ygc2VhcmNoaW5nIG9uIGV2ZXJ5
IGtleS4gVGhlIHNlYXJjaCBmaWVsZCBoYXMKKyAgICAgICAgLy8gdGhlIGluY3JlbWVudGFsIGF0
dHJpYnV0ZSBzZXQsIHNvIHdlIHN0aWxsIGdldCBpbmNyZW1lbnRhbCBzZWFyY2hlcy4KKyAgICAg
ICAgdGhpcy5fb25TZWFyY2goZXZlbnQpOworCisgICAgICAgIC8vIENhbGwgcHJldmVudERlZmF1
bHQgc2luY2UgdGhpcyB3YXMgdGhlIEVudGVyIGtleS4gVGhpcyBwcmV2ZW50cyBhICJzZWFyY2gi
IGV2ZW50CisgICAgICAgIC8vIGZyb20gZmlyaW5nIGZvciBrZXkgZG93bi4gVGhpcyBzdG9wcyBw
ZXJmb3JtU2VhcmNoIGZyb20gYmVpbmcgY2FsbGVkIHR3aWNlIGluIGEgcm93LgorICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIH0sCisKKyAgICBfb25TZWFyY2g6IGZ1bmN0aW9u
KGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGZvcmNlU2VhcmNoID0gZXZlbnQua2V5SWRlbnRp
ZmllciA9PT0gIkVudGVyIjsKKyAgICAgICAgdGhpcy5fcGVyZm9ybVNlYXJjaChldmVudC50YXJn
ZXQudmFsdWUsIGZvcmNlU2VhcmNoLCBldmVudC5zaGlmdEtleSwgZmFsc2UpOworICAgIH0sCisK
KyAgICBfcGVyZm9ybVNlYXJjaDogZnVuY3Rpb24ocXVlcnksIGZvcmNlU2VhcmNoLCBpc0JhY2t3
YXJkU2VhcmNoLCByZXBlYXRTZWFyY2gpCisgICAgeworICAgICAgICB2YXIgaXNTaG9ydFNlYXJj
aCA9IChxdWVyeS5sZW5ndGggPCAzKTsKKworICAgICAgICAvLyBDbGVhciBhIGxlZnRvdmVyIHNo
b3J0IHNlYXJjaCBmbGFnIGR1ZSB0byBhIG5vbi1jb25mbGljdGluZyBmb3JjZWQgc2VhcmNoLgor
ICAgICAgICBpZiAoaXNTaG9ydFNlYXJjaCAmJiB0aGlzLl9zaG9ydFNlYXJjaFdhc0ZvcmNlZEJ5
S2V5RXZlbnQgJiYgdGhpcy5fY3VycmVudFF1ZXJ5ICE9PSBxdWVyeSkKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9zaG9ydFNlYXJjaFdhc0ZvcmNlZEJ5S2V5RXZlbnQ7CisKKyAgICAgICAgLy8g
SW5kaWNhdGUgdGhpcyB3YXMgYSBmb3JjZWQgc2VhcmNoIG9uIGEgc2hvcnQgcXVlcnkuCisgICAg
ICAgIGlmIChpc1Nob3J0U2VhcmNoICYmIGZvcmNlU2VhcmNoKQorICAgICAgICAgICAgdGhpcy5f
c2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50ID0gdHJ1ZTsKKworICAgICAgICBpZiAoIXF1
ZXJ5IHx8ICFxdWVyeS5sZW5ndGggfHwgKCFmb3JjZVNlYXJjaCAmJiBpc1Nob3J0U2VhcmNoKSkg
eworICAgICAgICAgICAgLy8gUHJldmVudCBjbG9iYmVyaW5nIGEgc2hvcnQgc2VhcmNoIGZvcmNl
ZCBieSB0aGUgdXNlci4KKyAgICAgICAgICAgIGlmICh0aGlzLl9zaG9ydFNlYXJjaFdhc0ZvcmNl
ZEJ5S2V5RXZlbnQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fc2hvcnRTZWFyY2hX
YXNGb3JjZWRCeUtleUV2ZW50OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRRdWVyeTsKKworICAgICAgICAg
ICAgZm9yICh2YXIgcGFuZWxOYW1lIGluIFdlYkluc3BlY3Rvci5wYW5lbHMpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzW3BhbmVsTmFtZV07CisgICAg
ICAgICAgICAgICAgdmFyIGhhZEN1cnJlbnRRdWVyeSA9ICEhcGFuZWwuY3VycmVudFF1ZXJ5Owor
ICAgICAgICAgICAgICAgIGRlbGV0ZSBwYW5lbC5jdXJyZW50UXVlcnk7CisgICAgICAgICAgICAg
ICAgaWYgKGhhZEN1cnJlbnRRdWVyeSAmJiBwYW5lbC5zZWFyY2hDYW5jZWxlZCkKKyAgICAgICAg
ICAgICAgICAgICAgcGFuZWwuc2VhcmNoQ2FuY2VsZWQoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdGhpcy5fdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KCk7CisKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjdXJyZW50UGFuZWwgPSBXZWJJbnNw
ZWN0b3IuY3VycmVudFBhbmVsOworICAgICAgICBpZiAoIXJlcGVhdFNlYXJjaCAmJiBxdWVyeSA9
PT0gY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSAmJiBjdXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5
ID09PSB0aGlzLl9jdXJyZW50UXVlcnkpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBpcyB0
aGUgc2FtZSBxdWVyeSBhbmQgYSBmb3JjZWQgc2VhcmNoLCBqdW1wIHRvIHRoZSBuZXh0CisgICAg
ICAgICAgICAvLyBzZWFyY2ggcmVzdWx0IGZvciBhIGdvb2QgdXNlciBleHBlcmllbmNlLgorICAg
ICAgICAgICAgaWYgKGZvcmNlU2VhcmNoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0JhY2t3
YXJkU2VhcmNoICYmIGN1cnJlbnRQYW5lbC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KQorICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50UGFuZWwuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCgpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlzQmFja3dhcmRTZWFyY2ggJiYgY3VycmVudFBhbmVsLmp1
bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFu
ZWwuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1bHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX2N1cnJlbnRRdWVyeSA9IHF1
ZXJ5OworCisgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgpOworCisgICAg
ICAgIGlmICghY3VycmVudFBhbmVsLnBlcmZvcm1TZWFyY2gpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSA9IHF1ZXJ5OworICAgICAgICBj
dXJyZW50UGFuZWwucGVyZm9ybVNlYXJjaChxdWVyeSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGYzNGQ3MDQuLjkxZDcy
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktpdC5xcmMK
QEAgLTg3LDYgKzg3LDcgQEAKICAgICA8ZmlsZT5TY3JpcHRGb3JtYXR0ZXIuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+U2NyaXB0Rm9ybWF0dGVyV29ya2VyLmpzPC9maWxlPgogICAgIDxmaWxlPlNjcmlw
dHNQYW5lbC5qczwvZmlsZT4KKyAgICA8ZmlsZT5TZWFyY2hDb250cm9sbGVyLmpzPC9maWxlPgog
ICAgIDxmaWxlPlNlY3Rpb24uanM8L2ZpbGU+CiAgICAgPGZpbGU+U2V0dGluZ3MuanM8L2ZpbGU+
CiAgICAgPGZpbGU+U2hvcnRjdXRzSGVscC5qczwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCmluZGV4IDdjNDZiYTAuLmQ2Yzgx
MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmh0bWwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0
b3IuaHRtbApAQCAtMTU3LDYgKzE1Nyw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iSEFSRW50cnkuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkNvb2tpZVBhcnNlci5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iVG9vbGJhci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iU2VhcmNoQ29udHJv
bGxlci5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keSBjbGFzcz0iZGV0YWNoZWQiPgogICAg
IDxkaXYgaWQ9InRvb2xiYXIiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcwppbmRleCA5MTI1ZTE0Li41ZGE3NGViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTUzLDMwICsxNTMs
MTAgQEAgdmFyIFdlYkluc3BlY3RvciA9IHsKIAogICAgICAgICB0aGlzLl9jdXJyZW50UGFuZWwg
PSB4OwogCi0gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoTGFiZWwoKTsKLQogICAgICAgICBpZiAo
eCkgewogICAgICAgICAgICAgeC5zaG93KCk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLmN1cnJl
bnRRdWVyeSkgewotICAgICAgICAgICAgICAgIGlmICh4LnBlcmZvcm1TZWFyY2gpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9ybVBhbmVsU2VhcmNoKCkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWFyY2hNYXRj
aGVzQ291bnQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgeC5jdXJyZW50UXVlcnkgPSB0
aGlzLmN1cnJlbnRRdWVyeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHgucGVyZm9ybVNlYXJj
aCh0aGlzLmN1cnJlbnRRdWVyeSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAvLyBQZXJmb3JtIHRoZSBzZWFyY2ggb24gYSB0aW1lb3V0IHNvIHRoZSBwYW5l
bCBzd2l0Y2hlcyBmYXN0LgotICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHBlcmZvcm1Q
YW5lbFNlYXJjaC5iaW5kKHRoaXMpLCAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdG8gc2hvdyBOb3QgZm91bmQgZm9yIHBhbmVscyB0
aGF0IGNhbid0IGJlIHNlYXJjaGVkLgotICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNl
YXJjaE1hdGNoZXNDb3VudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLmFjdGl2ZVBhbmVsQ2hhbmdl
ZCgpOwogICAgICAgICB9Ci0KICAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1lIGluIFdlYkluc3Bl
Y3Rvci5wYW5lbHMpIHsKICAgICAgICAgICAgIGlmIChXZWJJbnNwZWN0b3IucGFuZWxzW3BhbmVs
TmFtZV0gPT09IHgpIHsKICAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubGFz
dEFjdGl2ZVBhbmVsID0gcGFuZWxOYW1lOwpAQCAtMjQ4LDggKzIyOCw2IEBAIHZhciBXZWJJbnNw
ZWN0b3IgPSB7CiAKICAgICAgICAgdGhpcy5fYXR0YWNoZWQgPSB4OwogCi0gICAgICAgIHRoaXMu
dXBkYXRlU2VhcmNoTGFiZWwoKTsKLQogICAgICAgICB2YXIgZG9ja1RvZ2dsZUJ1dHRvbiA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkb2NrLXN0YXR1cy1iYXItaXRlbSIpOwogICAgICAgICB2
YXIgYm9keSA9IGRvY3VtZW50LmJvZHk7CiAKQEAgLTI2MiwxMCArMjQwLDEzIEBAIHZhciBXZWJJ
bnNwZWN0b3IgPSB7CiAgICAgICAgICAgICBib2R5LmFkZFN0eWxlQ2xhc3MoImRldGFjaGVkIik7
CiAgICAgICAgICAgICBkb2NrVG9nZ2xlQnV0dG9uLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJEb2NrIHRvIG1haW4gd2luZG93LiIpOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlz
LmRyYXdlcikKLSAgICAgICAgICAgIHRoaXMuZHJhd2VyLnJlc2l6ZSgpOwotICAgICAgICBpZiAo
dGhpcy50b29sYmFyKQotICAgICAgICAgICAgdGhpcy50b29sYmFyLnJlc2l6ZSgpOworCisgICAg
ICAgIGlmICghdGhpcy5faW5pdGlhbGl6YXRpb25Db21wbGV0ZSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsKKyAgICAgICAgdGhpcy50b29sYmFy
LnJlc2l6ZSgpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRhdGVT
ZWFyY2hMYWJlbCgpOwogICAgIH0sCiAKICAgICBnZXQgZXJyb3JzKCkKQEAgLTQ5NCw2ICs0NzUs
NyBAQCBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIHRoaXMuZGVi
dWdnZXJNb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbCgpOwogCiAgICAgdGhp
cy5icmVha3BvaW50TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIo
KTsKKyAgICB0aGlzLnNlYXJjaENvbnRyb2xsZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNlYXJjaENv
bnRyb2xsZXIoKTsKIAogICAgIHRoaXMucGFuZWxzID0ge307CiAgICAgdGhpcy5fY3JlYXRlUGFu
ZWxzKCk7CkBAIC01MzQsMTEgKzUxNiw2IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBm
dW5jdGlvbigpCiAgICAgZXJyb3JXYXJuaW5nQ291bnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCB0aGlzLnNob3dDb25zb2xlLmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLl91cGRhdGVF
cnJvckFuZFdhcm5pbmdDb3VudHMoKTsKIAotICAgIHZhciBzZWFyY2hGaWVsZCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzZWFyY2giKTsKLSAgICBzZWFyY2hGaWVsZC5hZGRFdmVudExpc3Rl
bmVyKCJzZWFyY2giLCB0aGlzLnBlcmZvcm1TZWFyY2guYmluZCh0aGlzKSwgZmFsc2UpOyAvLyB3
aGVuIHRoZSBzZWFyY2ggaXMgZW1wdGllZAotICAgIHNlYXJjaEZpZWxkLmFkZEV2ZW50TGlzdGVu
ZXIoIm1vdXNlZG93biIsIHRoaXMuX3NlYXJjaEZpZWxkTWFudWFsRm9jdXMuYmluZCh0aGlzKSwg
ZmFsc2UpOyAvLyB3aGVuIHRoZSBzZWFyY2ggZmllbGQgaXMgbWFudWFsbHkgc2VsZWN0ZWQKLSAg
ICBzZWFyY2hGaWVsZC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fc2VhcmNoS2V5
RG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLQogICAgIHRoaXMuZXh0ZW5zaW9uU2VydmVyLmluaXRF
eHRlbnNpb25zKCk7CiAKICAgICBmdW5jdGlvbiBvblBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCkBA
IC01NjMsNiArNTQwLDcgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1bmN0aW9uKCkK
ICAgICB9CiAgICAgLy8gQXMgYSBET01BZ2VudCBtZXRob2QsIHRoaXMgbmVlZHMgdG8gaGFwcGVu
IGFmdGVyIHRoZSBmcm9udGVuZCBoYXMgbG9hZGVkIGFuZCB0aGUgYWdlbnQgaXMgYXZhaWxhYmxl
LgogICAgIENTU0FnZW50LmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMocHJvcGVydHlOYW1lc0Nh
bGxiYWNrKTsKKyAgICB0aGlzLl9pbml0aWFsaXphdGlvbkNvbXBsZXRlID0gdHJ1ZTsKIH0KIAog
V2ViSW5zcGVjdG9yLmFkZFBhbmVsID0gZnVuY3Rpb24ocGFuZWwpCkBAIC03NjgsNiArNzQ2LDEy
IEBAIFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICAg
ICAgfQogICAgIH0KIAorICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLmhhbmRsZVNo
b3J0Y3V0KGV2ZW50KTsKKyAgICBpZiAoZXZlbnQuaGFuZGxlZCkgeworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgdmFyIGlzTWFj
ID0gV2ViSW5zcGVjdG9yLmlzTWFjKCk7CiAgICAgc3dpdGNoIChldmVudC5rZXlJZGVudGlmaWVy
KSB7CiAgICAgICAgIGNhc2UgIkxlZnQiOgpAQCAtNzk0LDM2ICs3NzgsNiBAQCBXZWJJbnNwZWN0
b3IuZG9jdW1lbnRLZXlEb3duID0gZnVuY3Rpb24oZXZlbnQpCiAgICAgICAgICAgICB0aGlzLmRy
YXdlci52aXNpYmxlID0gIXRoaXMuZHJhd2VyLnZpc2libGU7CiAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICBjYXNlICJVKzAwNDYiOiAvLyBGIGtleQotICAgICAgICAgICAgaWYgKGlzTWFj
KQotICAgICAgICAgICAgICAgIHZhciBpc0ZpbmRLZXkgPSBldmVudC5tZXRhS2V5ICYmICFldmVu
dC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5OwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHZhciBpc0ZpbmRLZXkgPSBldmVudC5jdHJsS2V5ICYm
ICFldmVudC5tZXRhS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5OwotCi0g
ICAgICAgICAgICBpZiAoaXNGaW5kS2V5KSB7Ci0gICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmZvY3VzU2VhcmNoRmllbGQoKTsKLSAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVs
dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSAi
RjMiOgotICAgICAgICAgICAgaWYgKCFpc01hYykgewotICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5mb2N1c1NlYXJjaEZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERl
ZmF1bHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNh
c2UgIlUrMDA0NyI6IC8vIEcga2V5Ci0gICAgICAgICAgICBpZiAoaXNNYWMgJiYgZXZlbnQubWV0
YUtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1
cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KCk7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRQYW5lbC5qdW1wVG9OZXh0U2Vh
cmNoUmVzdWx0KQotICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5qdW1wVG9O
ZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIC8vIFdpbmRv
d3MgYW5kIE1hYyBoYXZlIHR3byBkaWZmZXJlbnQgZGVmaW5pdGlvbnMgb2YgWywgc28gYWNjZXB0
IGJvdGguCiAgICAgICAgIGNhc2UgIlUrMDA1QiI6CiAgICAgICAgIGNhc2UgIlUrMDBEQiI6IC8v
IFsga2V5CkBAIC05OTAsMjcgKzk0NCw2IEBAIFdlYkluc3BlY3Rvci5hbmltYXRlU3R5bGUgPSBm
dW5jdGlvbihhbmltYXRpb25zLCBkdXJhdGlvbiwgY2FsbGJhY2spCiAgICAgfTsKIH0KIAotV2Vi
SW5zcGVjdG9yLnVwZGF0ZVNlYXJjaExhYmVsID0gZnVuY3Rpb24oKQotewotICAgIGlmICghdGhp
cy5jdXJyZW50UGFuZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZhciBuZXdMYWJlbCA9IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiU2VhcmNoICVzIiwgdGhpcy5jdXJyZW50UGFuZWwudG9vbGJh
ckl0ZW1MYWJlbCk7Ci0gICAgaWYgKHRoaXMuYXR0YWNoZWQpCi0gICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJzZWFyY2giKS5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwgbmV3TGFi
ZWwpOwotICAgIGVsc2UgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNo
IikucmVtb3ZlQXR0cmlidXRlKCJwbGFjZWhvbGRlciIpOwotICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgic2VhcmNoLXRvb2xiYXItbGFiZWwiKS50ZXh0Q29udGVudCA9IG5ld0xhYmVs
OwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLmZvY3VzU2VhcmNoRmllbGQgPSBmdW5jdGlvbigp
Ci17Ci0gICAgdmFyIHNlYXJjaEZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJj
aCIpOwotICAgIHNlYXJjaEZpZWxkLmZvY3VzKCk7Ci0gICAgc2VhcmNoRmllbGQuc2VsZWN0KCk7
Ci19Ci0KIFdlYkluc3BlY3Rvci50b2dnbGVBdHRhY2ggPSBmdW5jdGlvbigpCiB7CiAgICAgaWYg
KCF0aGlzLmF0dGFjaGVkKQpAQCAtMTQ2OCwxMTcgKzE0MDEsNiBAQCBXZWJJbnNwZWN0b3IuYWRk
TWFpbkV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24oZG9jKQogICAgIGRvYy5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIHRoaXMuZG9jdW1lbnRDbGljay5iaW5kKHRoaXMpLCB0cnVlKTsKIH0KIAot
V2ViSW5zcGVjdG9yLl9zZWFyY2hGaWVsZE1hbnVhbEZvY3VzID0gZnVuY3Rpb24oZXZlbnQpCi17
Ci0gICAgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwotICAgIHRoaXMu
X3ByZXZpb3VzRm9jdXNFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwotfQotCi1XZWJJbnNwZWN0b3Iu
X3NlYXJjaEtleURvd24gPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICAvLyBFc2NhcGUgS2V5IHdp
bGwgY2xlYXIgdGhlIGZpZWxkIGFuZCBjbGVhciB0aGUgc2VhcmNoIHJlc3VsdHMKLSAgICBpZiAo
ZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2Mu
Y29kZSkgewotICAgICAgICAvLyBJZiBmb2N1cyBiZWxvbmdzIGhlcmUgYW5kIHRleHQgaXMgZW1w
dHkgLSBub3RoaW5nIHRvIGRvLCByZXR1cm4gdW5oYW5kbGVkLgotICAgICAgICBpZiAoZXZlbnQu
dGFyZ2V0LnZhbHVlID09PSAiIiAmJiB0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQgPT09IHRoaXMu
cHJldmlvdXNGb2N1c0VsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAg
ICAgICAvLyBXaGVuIHNlYXJjaCB3YXMgc2VsZWN0ZWQgbWFudWFsbHkgYW5kIGlzIGN1cnJlbnRs
eSBibGFuaywgd2UnZCBsaWtlIEVzYyBzdGF5IHVuaGFuZGxlZAotICAgICAgICAvLyBhbmQgaGl0
IGNvbnNvbGUgZHJhd2VyIGhhbmRsZXIuCi0gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9ICIi
OwotCi0gICAgICAgIHRoaXMucGVyZm9ybVNlYXJjaChldmVudCk7Ci0gICAgICAgIHRoaXMuY3Vy
cmVudEZvY3VzRWxlbWVudCA9IHRoaXMucHJldmlvdXNGb2N1c0VsZW1lbnQ7Ci0gICAgICAgIGlm
ICh0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkKLSAgICAgICAgICAg
IHRoaXMuY3VycmVudEZvY3VzRWxlbWVudC5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmICghaXNFbnRlcktleShldmVudCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFNlbGVjdCBhbGwgb2YgdGhlIHRleHQgc28gdGhlIHVzZXIgY2FuIGVh
c2lseSB0eXBlIGFuIGVudGlyZWx5IG5ldyBxdWVyeS4KLSAgICBldmVudC50YXJnZXQuc2VsZWN0
KCk7Ci0KLSAgICAvLyBPbmx5IGNhbGwgcGVyZm9ybVNlYXJjaCBpZiB0aGUgRW50ZXIga2V5IHdh
cyBwcmVzc2VkLiBPdGhlcndpc2UgdGhlIHNlYXJjaAotICAgIC8vIHBlcmZvcm1hbmNlIGlzIHBv
b3IgYmVjYXVzZSBvZiBzZWFyY2hpbmcgb24gZXZlcnkga2V5LiBUaGUgc2VhcmNoIGZpZWxkIGhh
cwotICAgIC8vIHRoZSBpbmNyZW1lbnRhbCBhdHRyaWJ1dGUgc2V0LCBzbyB3ZSBzdGlsbCBnZXQg
aW5jcmVtZW50YWwgc2VhcmNoZXMuCi0gICAgdGhpcy5wZXJmb3JtU2VhcmNoKGV2ZW50KTsKLQot
ICAgIC8vIENhbGwgcHJldmVudERlZmF1bHQgc2luY2UgdGhpcyB3YXMgdGhlIEVudGVyIGtleS4g
VGhpcyBwcmV2ZW50cyBhICJzZWFyY2giIGV2ZW50Ci0gICAgLy8gZnJvbSBmaXJpbmcgZm9yIGtl
eSBkb3duLiBUaGlzIHN0b3BzIHBlcmZvcm1TZWFyY2ggZnJvbSBiZWluZyBjYWxsZWQgdHdpY2Ug
aW4gYSByb3cuCi0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0KLQotV2ViSW5zcGVjdG9y
LnBlcmZvcm1TZWFyY2ggPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICB2YXIgZm9yY2VTZWFyY2gg
PSBldmVudC5rZXlJZGVudGlmaWVyID09PSAiRW50ZXIiOwotICAgIHRoaXMuZG9QZXJmb3JtU2Vh
cmNoKGV2ZW50LnRhcmdldC52YWx1ZSwgZm9yY2VTZWFyY2gsIGV2ZW50LnNoaWZ0S2V5LCBmYWxz
ZSk7Ci19Ci0KLVdlYkluc3BlY3Rvci5jYW5jZWxTZWFyY2ggPSBmdW5jdGlvbigpCi17Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaCIpLnZhbHVlID0gIiI7Ci0gICAgdGhpcy5k
b1BlcmZvcm1TZWFyY2goIiIpOwotfQotCi1XZWJJbnNwZWN0b3IuZG9QZXJmb3JtU2VhcmNoID0g
ZnVuY3Rpb24ocXVlcnksIGZvcmNlU2VhcmNoLCBpc0JhY2t3YXJkU2VhcmNoLCByZXBlYXRTZWFy
Y2gpCi17Ci0gICAgdmFyIGlzU2hvcnRTZWFyY2ggPSAocXVlcnkubGVuZ3RoIDwgMyk7Ci0KLSAg
ICAvLyBDbGVhciBhIGxlZnRvdmVyIHNob3J0IHNlYXJjaCBmbGFnIGR1ZSB0byBhIG5vbi1jb25m
bGljdGluZyBmb3JjZWQgc2VhcmNoLgotICAgIGlmIChpc1Nob3J0U2VhcmNoICYmIHRoaXMuc2hv
cnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50ICYmIHRoaXMuY3VycmVudFF1ZXJ5ICE9PSBxdWVy
eSkKLSAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50Owot
Ci0gICAgLy8gSW5kaWNhdGUgdGhpcyB3YXMgYSBmb3JjZWQgc2VhcmNoIG9uIGEgc2hvcnQgcXVl
cnkuCi0gICAgaWYgKGlzU2hvcnRTZWFyY2ggJiYgZm9yY2VTZWFyY2gpCi0gICAgICAgIHRoaXMu
c2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50ID0gdHJ1ZTsKLQotICAgIGlmICghcXVlcnkg
fHwgIXF1ZXJ5Lmxlbmd0aCB8fCAoIWZvcmNlU2VhcmNoICYmIGlzU2hvcnRTZWFyY2gpKSB7Ci0g
ICAgICAgIC8vIFByZXZlbnQgY2xvYmJlcmluZyBhIHNob3J0IHNlYXJjaCBmb3JjZWQgYnkgdGhl
IHVzZXIuCi0gICAgICAgIGlmICh0aGlzLnNob3J0U2VhcmNoV2FzRm9yY2VkQnlLZXlFdmVudCkg
ewotICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVsZXRlIHRoaXMu
Y3VycmVudFF1ZXJ5OwotCi0gICAgICAgIGZvciAodmFyIHBhbmVsTmFtZSBpbiB0aGlzLnBhbmVs
cykgewotICAgICAgICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbHNbcGFuZWxOYW1lXTsKLSAg
ICAgICAgICAgIHZhciBoYWRDdXJyZW50UXVlcnkgPSAhIXBhbmVsLmN1cnJlbnRRdWVyeTsKLSAg
ICAgICAgICAgIGRlbGV0ZSBwYW5lbC5jdXJyZW50UXVlcnk7Ci0gICAgICAgICAgICBpZiAoaGFk
Q3VycmVudFF1ZXJ5ICYmIHBhbmVsLnNlYXJjaENhbmNlbGVkKQotICAgICAgICAgICAgICAgIHBh
bmVsLnNlYXJjaENhbmNlbGVkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLnVwZGF0ZVNl
YXJjaE1hdGNoZXNDb3VudCgpOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IXJlcGVhdFNlYXJjaCAmJiBxdWVyeSA9PT0gdGhpcy5jdXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5
ICYmIHRoaXMuY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSA9PT0gdGhpcy5jdXJyZW50UXVlcnkp
IHsKLSAgICAgICAgLy8gV2hlbiB0aGlzIGlzIHRoZSBzYW1lIHF1ZXJ5IGFuZCBhIGZvcmNlZCBz
ZWFyY2gsIGp1bXAgdG8gdGhlIG5leHQKLSAgICAgICAgLy8gc2VhcmNoIHJlc3VsdCBmb3IgYSBn
b29kIHVzZXIgZXhwZXJpZW5jZS4KLSAgICAgICAgaWYgKGZvcmNlU2VhcmNoKSB7Ci0gICAgICAg
ICAgICBpZiAoIWlzQmFja3dhcmRTZWFyY2ggJiYgdGhpcy5jdXJyZW50UGFuZWwuanVtcFRvTmV4
dFNlYXJjaFJlc3VsdCkKLSAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYW5lbC5qdW1wVG9O
ZXh0U2VhcmNoUmVzdWx0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpc0JhY2t3YXJkU2VhcmNo
ICYmIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KQotICAgICAg
ICAgICAgICAgIHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRoaXMuY3VycmVudFF1
ZXJ5ID0gcXVlcnk7Ci0KLSAgICB0aGlzLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgpOwotCi0g
ICAgaWYgKCF0aGlzLmN1cnJlbnRQYW5lbC5wZXJmb3JtU2VhcmNoKQotICAgICAgICByZXR1cm47
Ci0KLSAgICB0aGlzLmN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgPSBxdWVyeTsKLSAgICB0aGlz
LmN1cnJlbnRQYW5lbC5wZXJmb3JtU2VhcmNoKHF1ZXJ5KTsKLX0KLQogV2ViSW5zcGVjdG9yLmZy
b250ZW5kUmV1c2VkID0gZnVuY3Rpb24oKQogewogICAgIHRoaXMubmV0d29ya01hbmFnZXIucmVz
ZXQoKTsKQEAgLTE1OTAsMzQgKzE0MTIsNiBAQCBXZWJJbnNwZWN0b3IuYWRkTm9kZXNUb1NlYXJj
aFJlc3VsdCA9IGZ1bmN0aW9uKG5vZGVJZHMpCiAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVt
ZW50cy5hZGROb2Rlc1RvU2VhcmNoUmVzdWx0KG5vZGVJZHMpOwogfQogCi1XZWJJbnNwZWN0b3Iu
dXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50ID0gZnVuY3Rpb24obWF0Y2hlcywgcGFuZWwpCi17Ci0g
ICAgaWYgKCFwYW5lbCkKLSAgICAgICAgcGFuZWwgPSB0aGlzLmN1cnJlbnRQYW5lbDsKLQotICAg
IHBhbmVsLmN1cnJlbnRTZWFyY2hNYXRjaGVzID0gbWF0Y2hlczsKLQotICAgIGlmIChwYW5lbCAh
PT0gdGhpcy5jdXJyZW50UGFuZWwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghdGhpcy5j
dXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5KSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzZWFyY2gtcmVzdWx0cy1tYXRjaGVzIikuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobWF0Y2hlcykgewotICAgICAgICBpZiAo
bWF0Y2hlcyA9PT0gMSkKLSAgICAgICAgICAgIHZhciBtYXRjaGVzU3RyaW5nID0gV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCIxIG1hdGNoIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhciBt
YXRjaGVzU3RyaW5nID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIlZCBtYXRjaGVzIiwgbWF0Y2hl
cyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHZhciBtYXRjaGVzU3RyaW5nID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJOb3QgRm91bmQiKTsKLQotICAgIHZhciBtYXRjaGVzVG9vbGJhckVsZW1lbnQg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoLXJlc3VsdHMtbWF0Y2hlcyIpOwotICAg
IG1hdGNoZXNUb29sYmFyRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKLSAgICBt
YXRjaGVzVG9vbGJhckVsZW1lbnQudGV4dENvbnRlbnQgPSBtYXRjaGVzU3RyaW5nOwotfQotCiBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcgPSBmdW5jdGlvbihzdHJpbmcpCiB7CiAgICAgaWYgKHdpbmRv
dy5sb2NhbGl6ZWRTdHJpbmdzICYmIHN0cmluZyBpbiB3aW5kb3cubG9jYWxpemVkU3RyaW5ncykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83788</attachid>
            <date>2011-02-25 02:24:39 -0800</date>
            <delta_ts>2011-02-25 02:53:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>search-controller.diff</filename>
            <type>text/plain</type>
            <size>29939</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYWIyNjRlLi4wNDA4ODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUg
QEAKKzIwMTEtMDItMjUgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBmYWN0b3Igc2VhcmNoIGxvZ2ljIG91dCBvZiBpbnNwZWN0b3IuanMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTY1CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnNlYXJjaENhbmNlbGVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5zd2l0Y2hUb0FuZEZv
Y3VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3RvdHlwZS5fdXBk
YXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zZWFyY2hDYW5jZWxlZCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUGFuZWwucHJvdG90eXBlLnBlcmZvcm1TZWFyY2gudXBk
YXRlTWF0Y2hlc0NvdW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQ
YW5lbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlLnNl
YXJjaENhbmNlbGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90
eXBlLnBlcmZvcm1TZWFyY2guZmluaXNoZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5wZXJmb3JtU2VhcmNoKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1NlYXJjaENvbnRyb2xsZXIuanM6IEFkZGVkLgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJj
aENvbnRyb2xsZXIucHJvdG90eXBlLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlU2VhcmNoTGFi
ZWwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLmNh
bmNlbFNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90
b3R5cGUuaGFuZGxlU2hvcnRjdXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRy
b2xsZXIucHJvdG90eXBlLmFjdGl2ZVBhbmVsQ2hhbmdlZC5wZXJmb3JtUGFuZWxTZWFyY2gpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLmFjdGl2ZVBh
bmVsQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90
b3R5cGUuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUuX2ZvY3VzU2VhcmNoRmllbGQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90eXBlLl9vblNlYXJjaEZpZWxkTWFu
dWFsRm9jdXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIucHJvdG90
eXBlLl9vbktleURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlYXJjaENvbnRyb2xsZXIu
cHJvdG90eXBlLl9vblNlYXJjaCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJv
bGxlci5wcm90b3R5cGUuX3BlcmZvcm1TZWFyY2gpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvV2ViS2l0LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rv
ci5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLnNldCBjdXJyZW50UGFuZWwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLnNldCBhdHRhY2hlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24pOgorCiAyMDExLTAyLTIyICBQ
aGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBYYW4gTG9wZXouCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGM0ZDA0MC4uODQ1MWE5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNDc3NCw2ICs0Nzc0LDcgQEAKICAgICAgICAgICAgICdpbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXJXb3JrZXIuanMnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NlYXJjaENvbnRyb2xsZXIuanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvU2hvcnRjdXRzSGVscC5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250
LWVuZC9TaG93TW9yZURhdGFHcmlkTm9kZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zy
b250LWVuZC9TZWN0aW9uLmpzJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggNThlMjIxMS4uYzFmN2QxZiAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTY2MTA1LDYgKzY2MTA1LDEwIEBACiAJ
CQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcZnJvbnQtZW5kXFNlYXJjaENvbnRyb2xsZXIuanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFNl
Y3Rpb24uanMiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKaW5kZXggMzZkYjgxZS4uNWRkOWM4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50
c1BhbmVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVu
dHNQYW5lbC5qcwpAQCAtMjIyLDcgKzIyMiw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgZGVsZXRlIHRoaXMuX3NlYXJjaFF1ZXJ5OwogICAgICAg
ICB0aGlzLl9oaWRlU2VhcmNoSGlnaGxpZ2h0cygpOwogCi0gICAgICAgIFdlYkluc3BlY3Rvci51
cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoMCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5z
ZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKIAogICAg
ICAgICB0aGlzLl9jdXJyZW50U2VhcmNoUmVzdWx0SW5kZXggPSAwOwogICAgICAgICB0aGlzLl9z
ZWFyY2hSZXN1bHRzID0gW107CkBAIC0yNjQsMTQgKzI2NCwxNCBAQCBXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgc3dpdGNoVG9BbmRGb2N1czogZnVuY3Rpb24o
bm9kZSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHNlYXJjaCByZXN0b3JlLgotICAgICAgICBX
ZWJJbnNwZWN0b3IuY2FuY2VsU2VhcmNoKCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hD
b250cm9sbGVyLmNhbmNlbFNlYXJjaCgpOwogICAgICAgICBXZWJJbnNwZWN0b3IuY3VycmVudFBh
bmVsID0gdGhpczsKICAgICAgICAgdGhpcy5mb2N1c2VkRE9NTm9kZSA9IG5vZGU7CiAgICAgfSwK
IAogICAgIF91cGRhdGVNYXRjaGVzQ291bnQ6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2VhcmNoUmVzdWx0cy5s
ZW5ndGgsIHRoaXMpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51cGRh
dGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fc2VhcmNoUmVzdWx0cy5sZW5ndGgsIHRoaXMpOwog
ICAgICAgICB0aGlzLl9tYXRjaGVzQ291bnRVcGRhdGVUaW1lb3V0ID0gbnVsbDsKICAgICAgICAg
dGhpcy5fdXBkYXRlZE1hdGNoQ291bnRPbmNlID0gdHJ1ZTsKICAgICB9LApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUGFuZWwuanMKaW5kZXggNzU4YzU2ZC4uZDliNTRkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9QYW5lbC5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BhbmVsLmpzCkBAIC0xMTAs
NyArMTEwLDcgQEAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIFdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVz
Q291bnQoMCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVw
ZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsKIAogICAgICAgICBpZiAodGhpcy5fY3Vy
cmVudFNlYXJjaENodW5rSW50ZXJ2YWxJZGVudGlmaWVyKSB7CiAgICAgICAgICAgICBjbGVhcklu
dGVydmFsKHRoaXMuX2N1cnJlbnRTZWFyY2hDaHVua0ludGVydmFsSWRlbnRpZmllcik7CkBAIC0x
MzksNyArMTM5LDcgQEAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICBmdW5jdGlvbiB1cGRhdGVNYXRjaGVzQ291bnQoKQogICAgICAgICB7Ci0gICAgICAgICAgICBX
ZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KHRoaXMuX3RvdGFsU2VhcmNoTWF0
Y2hlcywgdGhpcyk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci51
cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQodGhpcy5fdG90YWxTZWFyY2hNYXRjaGVzLCB0aGlzKTsK
ICAgICAgICAgICAgIG1hdGNoZXNDb3VudFVwZGF0ZVRpbWVvdXQgPSBudWxsOwogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFu
ZWwuanMKaW5kZXggOTdlZWUwNi4uOTQ0ODFiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTk3OSw4ICs5NzksNiBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKIAogICAgIHNlYXJjaENhbmNl
bGVkOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBXZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNo
TWF0Y2hlc0NvdW50KDAsIHRoaXMpOwotCiAgICAgICAgIGlmICh0aGlzLl9zZWFyY2hWaWV3KQog
ICAgICAgICAgICAgdGhpcy5fc2VhcmNoVmlldy5zZWFyY2hDYW5jZWxlZCgpOwogCkBAIC05OTAs
NiArOTg4LDggQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAg
ICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSkKICAgICB7CisgICAgICAgIFdlYkluc3Bl
Y3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgwLCB0aGlzKTsK
KwogICAgICAgICBpZiAoIXRoaXMudmlzaWJsZVZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAK
QEAgLTEwMDQsNyArMTAwNCw3IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgaWYgKCFzZWFyY2hNYXRjaGVzKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3Vu
dChzZWFyY2hNYXRjaGVzLCB0aGlzKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hD
b250cm9sbGVyLnVwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudChzZWFyY2hNYXRjaGVzLCB0aGlzKTsK
ICAgICAgICAgICAgIHZpZXcuanVtcFRvRmlyc3RTZWFyY2hSZXN1bHQoKTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NlYXJjaENv
bnRyb2xsZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NlYXJjaENv
bnRyb2xsZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM1YzQyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2Vh
cmNoQ29udHJvbGxlci5qcwpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IE1hdHQgTGlsZWsgKHBld3Rlcm1vb3NlQGdtYWlsLmNvbSkuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJv
bGxlciA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgic2VhcmNoIik7CisgICAgdGhpcy5fbWF0Y2hlc0VsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgic2VhcmNoLXJlc3VsdHMtbWF0Y2hlcyIpOworICAgIHRoaXMuX3Rvb2xi
YXJMYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoLXRvb2xiYXIt
bGFiZWwiKTsKKworICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWFyY2giLCB0
aGlzLl9vblNlYXJjaC5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIHdoZW4gdGhlIHNlYXJjaCBpcyBl
bXB0aWVkCisgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRo
aXMuX29uU2VhcmNoRmllbGRNYW51YWxGb2N1cy5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIHdoZW4g
dGhlIHNlYXJjaCBmaWVsZCBpcyBtYW51YWxseSBzZWxlY3RlZAorICAgIHRoaXMuZWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgdGhpcy5fb25LZXlEb3duLmJpbmQodGhpcyksIHRy
dWUpOworfQorCitXZWJJbnNwZWN0b3IuU2VhcmNoQ29udHJvbGxlci5wcm90b3R5cGUgPSB7Cisg
ICAgdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50OiBmdW5jdGlvbihtYXRjaGVzLCBwYW5lbCkKKyAg
ICB7CisgICAgICAgIGlmICghcGFuZWwpCisgICAgICAgICAgICBwYW5lbCA9IFdlYkluc3BlY3Rv
ci5jdXJyZW50UGFuZWw7CisKKyAgICAgICAgcGFuZWwuY3VycmVudFNlYXJjaE1hdGNoZXMgPSBt
YXRjaGVzOworCisgICAgICAgIGlmIChwYW5lbCA9PT0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5l
bCkKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudChXZWJJbnNwZWN0
b3IuY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSAmJiBtYXRjaGVzKTsKKyAgICB9LAorCisgICAg
dXBkYXRlU2VhcmNoTGFiZWw6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBwYW5lbE5h
bWUgPSBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsICYmIFdlYkluc3BlY3Rvci5jdXJyZW50UGFu
ZWwudG9vbGJhckl0ZW1MYWJlbDsKKyAgICAgICAgaWYgKCFwYW5lbE5hbWUpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHZhciBuZXdMYWJlbCA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygi
U2VhcmNoICVzIiwgcGFuZWxOYW1lKTsKKyAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5hdHRhY2hl
ZCkKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIiwg
bmV3TGFiZWwpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuZWxlbWVudC5yZW1v
dmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIik7CisgICAgICAgICAgICB0aGlzLl90b29sYmFyTGFi
ZWxFbGVtZW50LnRleHRDb250ZW50ID0gbmV3TGFiZWw7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgY2FuY2VsU2VhcmNoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLmVsZW1lbnQu
dmFsdWUgPSAiIjsKKyAgICAgICAgdGhpcy5fcGVyZm9ybVNlYXJjaCgiIik7CisgICAgfSwKKwor
ICAgIGhhbmRsZVNob3J0Y3V0OiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBp
c01hYyA9IFdlYkluc3BlY3Rvci5pc01hYygpOworCisgICAgICAgIHN3aXRjaCAoZXZlbnQua2V5
SWRlbnRpZmllcikgeworICAgICAgICAgICAgY2FzZSAiVSswMDQ2IjogLy8gRiBrZXkKKyAgICAg
ICAgICAgICAgICBpZiAoaXNNYWMpCisgICAgICAgICAgICAgICAgICAgIHZhciBpc0ZpbmRLZXkg
PSBldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgJiYgIWV2
ZW50LnNoaWZ0S2V5OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
dmFyIGlzRmluZEtleSA9IGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50
LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRLZXk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNGaW5k
S2V5KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzU2VhcmNoRmllbGQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNhc2UgIkYzIjoKKyAg
ICAgICAgICAgICAgICBpZiAoIWlzTWFjKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zv
Y3VzU2VhcmNoRmllbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQuaGFuZGxlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlICJVKzAwNDciOiAvLyBHIGtleQorICAgICAgICAgICAgICAgIHZhciBjdXJyZW50
UGFuZWwgPSBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsOworCisgICAgICAgICAgICAgICAgaWYg
KGlzTWFjICYmIGV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtl
eSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UGFuZWwuanVtcFRvUHJldmlvdXNTZWFyY2hSZXN1
bHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhbmVsLmp1bXBUb1ByZXZp
b3VzU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVu
dFBhbmVsLmp1bXBUb05leHRTZWFyY2hSZXN1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyZW50UGFuZWwuanVtcFRvTmV4dFNlYXJjaFJlc3VsdCgpOworICAgICAgICAgICAgICAgICAg
ICBldmVudC5oYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgYWN0aXZlUGFuZWxDaGFuZ2VkOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaExhYmVsKCk7CisKKyAg
ICAgICAgaWYgKCF0aGlzLl9jdXJyZW50UXVlcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAKKyAgICAgICAgcGFuZWwgPSBXZWJJbnNwZWN0b3IuY3VycmVudFBhbmVsOworICAgICAg
ICBpZiAocGFuZWwucGVyZm9ybVNlYXJjaCkgeworICAgICAgICAgICAgZnVuY3Rpb24gcGVyZm9y
bVBhbmVsU2VhcmNoKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aGlzLl91cGRh
dGVTZWFyY2hNYXRjaGVzQ291bnQoKTsKKworICAgICAgICAgICAgICAgIHBhbmVsLmN1cnJlbnRR
dWVyeSA9IHRoaXMuX2N1cnJlbnRRdWVyeTsKKyAgICAgICAgICAgICAgICBwYW5lbC5wZXJmb3Jt
U2VhcmNoKHRoaXMuX2N1cnJlbnRRdWVyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFBlcmZvcm0gdGhlIHNlYXJjaCBvbiBhIHRpbWVvdXQgc28gdGhlIHBhbmVsIHN3aXRjaGVz
IGZhc3QuCisgICAgICAgICAgICBzZXRUaW1lb3V0KHBlcmZvcm1QYW5lbFNlYXJjaC5iaW5kKHRo
aXMpLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0byBzaG93
IE5vdCBmb3VuZCBmb3IgcGFuZWxzIHRoYXQgY2FuJ3QgYmUgc2VhcmNoZWQuCisgICAgICAgICAg
ICB0aGlzLl91cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoKTsKKyAgICAgICAgfQorICAgIH0sCisK
KyAgICBfdXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50OiBmdW5jdGlvbihtYXRjaGVzKQorICAgIHsK
KyAgICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5fbWF0Y2hl
c0VsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobWF0Y2hlcykgeworICAgICAgICAgICAgaWYgKG1hdGNo
ZXMgPT09IDEpCisgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXNTdHJpbmcgPSBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIjEgbWF0Y2giKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB2YXIgbWF0Y2hlc1N0cmluZyA9IFdlYkluc3BlY3Rvci5VSVN0cmluZygiJWQgbWF0Y2hlcyIs
IG1hdGNoZXMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZhciBtYXRjaGVzU3RyaW5n
ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJOb3QgRm91bmQiKTsKKworICAgICAgICB0aGlzLl9t
YXRjaGVzRWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJoaWRkZW4iKTsKKyAgICAgICAgdGhpcy5f
bWF0Y2hlc0VsZW1lbnQudGV4dENvbnRlbnQgPSBtYXRjaGVzU3RyaW5nOworICAgICAgICBXZWJJ
bnNwZWN0b3IudG9vbGJhci5yZXNpemUoKTsKKyAgICB9LAorCisgICAgX2ZvY3VzU2VhcmNoRmll
bGQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC5mb2N1cygpOworICAg
ICAgICB0aGlzLmVsZW1lbnQuc2VsZWN0KCk7CisgICAgfSwKKworICAgIF9vblNlYXJjaEZpZWxk
TWFudWFsRm9jdXM6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBldmVudC50YXJnZXQ7CisgICAgfSwKKworICAgIF9vbktl
eURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgLy8gRXNjYXBlIEtleSB3aWxs
IGNsZWFyIHRoZSBmaWVsZCBhbmQgY2xlYXIgdGhlIHNlYXJjaCByZXN1bHRzCisgICAgICAgIGlm
IChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVz
Yy5jb2RlKSB7CisgICAgICAgICAgICAvLyBJZiBmb2N1cyBiZWxvbmdzIGhlcmUgYW5kIHRleHQg
aXMgZW1wdHkgLSBub3RoaW5nIHRvIGRvLCByZXR1cm4gdW5oYW5kbGVkLgorICAgICAgICAgICAg
Ly8gV2hlbiBzZWFyY2ggd2FzIHNlbGVjdGVkIG1hbnVhbGx5IGFuZCBpcyBjdXJyZW50bHkgYmxh
bmssIHdlJ2QgbGlrZSBFc2Mgc3RheSB1bmhhbmRsZWQKKyAgICAgICAgICAgIC8vIGFuZCBoaXQg
Y29uc29sZSBkcmF3ZXIgaGFuZGxlci4KKyAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQudmFs
dWUgPT09ICIiICYmIHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCA9PT0gdGhpcy5wcmV2aW91c0Zv
Y3VzRWxlbWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisK
KyAgICAgICAgICAgIHRoaXMuY2FuY2VsU2VhcmNoKGV2ZW50KTsKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50ID0gV2ViSW5zcGVjdG9yLnByZXZpb3VzRm9jdXNF
bGVtZW50OworICAgICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5jdXJyZW50Rm9jdXNFbGVtZW50
ID09PSBldmVudC50YXJnZXQpCisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmN1cnJlbnRG
b2N1c0VsZW1lbnQuY3VycmVudEZvY3VzRWxlbWVudC5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNFbnRlcktleShldmVudCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gU2VsZWN0IGFsbCBvZiB0
aGUgdGV4dCBzbyB0aGUgdXNlciBjYW4gZWFzaWx5IHR5cGUgYW4gZW50aXJlbHkgbmV3IHF1ZXJ5
LgorICAgICAgICBldmVudC50YXJnZXQuc2VsZWN0KCk7CisKKyAgICAgICAgLy8gT25seSBjYWxs
IHBlcmZvcm1TZWFyY2ggaWYgdGhlIEVudGVyIGtleSB3YXMgcHJlc3NlZC4gT3RoZXJ3aXNlIHRo
ZSBzZWFyY2gKKyAgICAgICAgLy8gcGVyZm9ybWFuY2UgaXMgcG9vciBiZWNhdXNlIG9mIHNlYXJj
aGluZyBvbiBldmVyeSBrZXkuIFRoZSBzZWFyY2ggZmllbGQgaGFzCisgICAgICAgIC8vIHRoZSBp
bmNyZW1lbnRhbCBhdHRyaWJ1dGUgc2V0LCBzbyB3ZSBzdGlsbCBnZXQgaW5jcmVtZW50YWwgc2Vh
cmNoZXMuCisgICAgICAgIHRoaXMuX29uU2VhcmNoKGV2ZW50KTsKKworICAgICAgICAvLyBDYWxs
IHByZXZlbnREZWZhdWx0IHNpbmNlIHRoaXMgd2FzIHRoZSBFbnRlciBrZXkuIFRoaXMgcHJldmVu
dHMgYSAic2VhcmNoIiBldmVudAorICAgICAgICAvLyBmcm9tIGZpcmluZyBmb3Iga2V5IGRvd24u
IFRoaXMgc3RvcHMgcGVyZm9ybVNlYXJjaCBmcm9tIGJlaW5nIGNhbGxlZCB0d2ljZSBpbiBhIHJv
dy4KKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9LAorCisgICAgX29uU2Vh
cmNoOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBmb3JjZVNlYXJjaCA9IGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJFbnRlciI7CisgICAgICAgIHRoaXMuX3BlcmZvcm1TZWFy
Y2goZXZlbnQudGFyZ2V0LnZhbHVlLCBmb3JjZVNlYXJjaCwgZXZlbnQuc2hpZnRLZXksIGZhbHNl
KTsKKyAgICB9LAorCisgICAgX3BlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBmb3JjZVNl
YXJjaCwgaXNCYWNrd2FyZFNlYXJjaCwgcmVwZWF0U2VhcmNoKQorICAgIHsKKyAgICAgICAgdmFy
IGlzU2hvcnRTZWFyY2ggPSAocXVlcnkubGVuZ3RoIDwgMyk7CisKKyAgICAgICAgLy8gQ2xlYXIg
YSBsZWZ0b3ZlciBzaG9ydCBzZWFyY2ggZmxhZyBkdWUgdG8gYSBub24tY29uZmxpY3RpbmcgZm9y
Y2VkIHNlYXJjaC4KKyAgICAgICAgaWYgKGlzU2hvcnRTZWFyY2ggJiYgdGhpcy5fc2hvcnRTZWFy
Y2hXYXNGb3JjZWRCeUtleUV2ZW50ICYmIHRoaXMuX2N1cnJlbnRRdWVyeSAhPT0gcXVlcnkpCisg
ICAgICAgICAgICBkZWxldGUgdGhpcy5fc2hvcnRTZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50Owor
CisgICAgICAgIC8vIEluZGljYXRlIHRoaXMgd2FzIGEgZm9yY2VkIHNlYXJjaCBvbiBhIHNob3J0
IHF1ZXJ5LgorICAgICAgICBpZiAoaXNTaG9ydFNlYXJjaCAmJiBmb3JjZVNlYXJjaCkKKyAgICAg
ICAgICAgIHRoaXMuX3Nob3J0U2VhcmNoV2FzRm9yY2VkQnlLZXlFdmVudCA9IHRydWU7CisKKyAg
ICAgICAgaWYgKCFxdWVyeSB8fCAhcXVlcnkubGVuZ3RoIHx8ICghZm9yY2VTZWFyY2ggJiYgaXNT
aG9ydFNlYXJjaCkpIHsKKyAgICAgICAgICAgIC8vIFByZXZlbnQgY2xvYmJlcmluZyBhIHNob3J0
IHNlYXJjaCBmb3JjZWQgYnkgdGhlIHVzZXIuCisgICAgICAgICAgICBpZiAodGhpcy5fc2hvcnRT
ZWFyY2hXYXNGb3JjZWRCeUtleUV2ZW50KSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMu
X3Nob3J0U2VhcmNoV2FzRm9yY2VkQnlLZXlFdmVudDsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50UXVlcnk7
CisKKyAgICAgICAgICAgIGZvciAodmFyIHBhbmVsTmFtZSBpbiBXZWJJbnNwZWN0b3IucGFuZWxz
KSB7CisgICAgICAgICAgICAgICAgdmFyIHBhbmVsID0gV2ViSW5zcGVjdG9yLnBhbmVsc1twYW5l
bE5hbWVdOworICAgICAgICAgICAgICAgIHZhciBoYWRDdXJyZW50UXVlcnkgPSAhIXBhbmVsLmN1
cnJlbnRRdWVyeTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcGFuZWwuY3VycmVudFF1ZXJ5Owor
ICAgICAgICAgICAgICAgIGlmIChoYWRDdXJyZW50UXVlcnkgJiYgcGFuZWwuc2VhcmNoQ2FuY2Vs
ZWQpCisgICAgICAgICAgICAgICAgICAgIHBhbmVsLnNlYXJjaENhbmNlbGVkKCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlYXJjaE1hdGNoZXNDb3VudCgpOwor
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgY3VycmVudFBh
bmVsID0gV2ViSW5zcGVjdG9yLmN1cnJlbnRQYW5lbDsKKyAgICAgICAgaWYgKCFyZXBlYXRTZWFy
Y2ggJiYgcXVlcnkgPT09IGN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgJiYgY3VycmVudFBhbmVs
LmN1cnJlbnRRdWVyeSA9PT0gdGhpcy5fY3VycmVudFF1ZXJ5KSB7CisgICAgICAgICAgICAvLyBX
aGVuIHRoaXMgaXMgdGhlIHNhbWUgcXVlcnkgYW5kIGEgZm9yY2VkIHNlYXJjaCwganVtcCB0byB0
aGUgbmV4dAorICAgICAgICAgICAgLy8gc2VhcmNoIHJlc3VsdCBmb3IgYSBnb29kIHVzZXIgZXhw
ZXJpZW5jZS4KKyAgICAgICAgICAgIGlmIChmb3JjZVNlYXJjaCkgeworICAgICAgICAgICAgICAg
IGlmICghaXNCYWNrd2FyZFNlYXJjaCAmJiBjdXJyZW50UGFuZWwuanVtcFRvTmV4dFNlYXJjaFJl
c3VsdCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhbmVsLmp1bXBUb05leHRTZWFyY2hS
ZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0JhY2t3YXJkU2VhcmNoICYmIGN1
cnJlbnRQYW5lbC5qdW1wVG9QcmV2aW91c1NlYXJjaFJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9jdXJy
ZW50UXVlcnkgPSBxdWVyeTsKKworICAgICAgICB0aGlzLl91cGRhdGVTZWFyY2hNYXRjaGVzQ291
bnQoKTsKKworICAgICAgICBpZiAoIWN1cnJlbnRQYW5lbC5wZXJmb3JtU2VhcmNoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkgPSBxdWVy
eTsKKyAgICAgICAgY3VycmVudFBhbmVsLnBlcmZvcm1TZWFyY2gocXVlcnkpOworICAgIH0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFy
YyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBm
MzRkNzA0Li45MWQ3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjCkBAIC04Nyw2ICs4Nyw3IEBACiAgICAgPGZpbGU+U2NyaXB0Rm9ybWF0dGVy
LmpzPC9maWxlPgogICAgIDxmaWxlPlNjcmlwdEZvcm1hdHRlcldvcmtlci5qczwvZmlsZT4KICAg
ICA8ZmlsZT5TY3JpcHRzUGFuZWwuanM8L2ZpbGU+CisgICAgPGZpbGU+U2VhcmNoQ29udHJvbGxl
ci5qczwvZmlsZT4KICAgICA8ZmlsZT5TZWN0aW9uLmpzPC9maWxlPgogICAgIDxmaWxlPlNldHRp
bmdzLmpzPC9maWxlPgogICAgIDxmaWxlPlNob3J0Y3V0c0hlbHAuanM8L2ZpbGU+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbAppbmRleCA3
YzQ2YmEwLi5kNmM4MTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTE1Nyw2ICsxNTcsNyBAQCBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IkhBUkVudHJ5LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJDb29raWVQYXJzZXIuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRvb2xi
YXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlNlYXJjaENvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgogPC9oZWFkPgogPGJvZHkgY2xhc3M9ImRl
dGFjaGVkIj4KICAgICA8ZGl2IGlkPSJ0b29sYmFyIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggOTEyNWUxNC4uZGZmMjU1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAg
LTE1MywzMCArMTUzLDEwIEBAIHZhciBXZWJJbnNwZWN0b3IgPSB7CiAKICAgICAgICAgdGhpcy5f
Y3VycmVudFBhbmVsID0geDsKIAotICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaExhYmVsKCk7Ci0K
ICAgICAgICAgaWYgKHgpIHsKICAgICAgICAgICAgIHguc2hvdygpOwotCi0gICAgICAgICAgICBp
ZiAodGhpcy5jdXJyZW50UXVlcnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoeC5wZXJmb3JtU2Vh
cmNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcmZvcm1QYW5lbFNlYXJjaCgp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBk
YXRlU2VhcmNoTWF0Y2hlc0NvdW50KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHguY3Vy
cmVudFF1ZXJ5ID0gdGhpcy5jdXJyZW50UXVlcnk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4
LnBlcmZvcm1TZWFyY2godGhpcy5jdXJyZW50UXVlcnkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSB0aGUgc2VhcmNoIG9uIGEgdGltZW91
dCBzbyB0aGUgcGFuZWwgc3dpdGNoZXMgZmFzdC4KLSAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChwZXJmb3JtUGFuZWxTZWFyY2guYmluZCh0aGlzKSwgMCk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRvIHNob3cgTm90IGZvdW5k
IGZvciBwYW5lbHMgdGhhdCBjYW4ndCBiZSBzZWFyY2hlZC4KLSAgICAgICAgICAgICAgICAgICAg
dGhpcy51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJvbGxlci5hY3Rp
dmVQYW5lbENoYW5nZWQoKTsKICAgICAgICAgfQotCiAgICAgICAgIGZvciAodmFyIHBhbmVsTmFt
ZSBpbiBXZWJJbnNwZWN0b3IucGFuZWxzKSB7CiAgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9y
LnBhbmVsc1twYW5lbE5hbWVdID09PSB4KSB7CiAgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LnNldHRpbmdzLmxhc3RBY3RpdmVQYW5lbCA9IHBhbmVsTmFtZTsKQEAgLTI0OCw4ICsyMjgsNiBA
QCB2YXIgV2ViSW5zcGVjdG9yID0gewogCiAgICAgICAgIHRoaXMuX2F0dGFjaGVkID0geDsKIAot
ICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaExhYmVsKCk7Ci0KICAgICAgICAgdmFyIGRvY2tUb2dn
bGVCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZG9jay1zdGF0dXMtYmFyLWl0ZW0i
KTsKICAgICAgICAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5OwogCkBAIC0yNjIsMTAgKzI0MCwx
MSBAQCB2YXIgV2ViSW5zcGVjdG9yID0gewogICAgICAgICAgICAgYm9keS5hZGRTdHlsZUNsYXNz
KCJkZXRhY2hlZCIpOwogICAgICAgICAgICAgZG9ja1RvZ2dsZUJ1dHRvbi50aXRsZSA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiRG9jayB0byBtYWluIHdpbmRvdy4iKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAodGhpcy5kcmF3ZXIpCi0gICAgICAgICAgICB0aGlzLmRyYXdlci5yZXNpemUoKTsK
LSAgICAgICAgaWYgKHRoaXMudG9vbGJhcikKLSAgICAgICAgICAgIHRoaXMudG9vbGJhci5yZXNp
emUoKTsKKworICAgICAgICAvLyBUaGlzIG1heSBiZSBjYWxsZWQgYmVmb3JlIG9uTG9hZGVkRG9u
ZSwgaGVuY2UgdGhlIGJ1bGsgb2YgaW5zcGVjdG9yIG9iamVjdHMgbWF5IAorICAgICAgICAvLyBu
b3QgYmUgY3JlYXRlZCB5ZXQuCisgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iuc2VhcmNoQ29udHJv
bGxlcikKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZWFyY2hDb250cm9sbGVyLnVwZGF0ZVNl
YXJjaExhYmVsKCk7CiAgICAgfSwKIAogICAgIGdldCBlcnJvcnMoKQpAQCAtNDk0LDYgKzQ3Myw3
IEBAIFdlYkluc3BlY3Rvci5kb0xvYWRlZERvbmUgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5kZWJ1
Z2dlck1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsKCk7CiAKICAgICB0aGlz
LmJyZWFrcG9pbnRNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcigp
OworICAgIHRoaXMuc2VhcmNoQ29udHJvbGxlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2VhcmNoQ29u
dHJvbGxlcigpOwogCiAgICAgdGhpcy5wYW5lbHMgPSB7fTsKICAgICB0aGlzLl9jcmVhdGVQYW5l
bHMoKTsKQEAgLTUzNCwxMSArNTE0LDYgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9uZSA9IGZ1
bmN0aW9uKCkKICAgICBlcnJvcldhcm5pbmdDb3VudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIs
IHRoaXMuc2hvd0NvbnNvbGUuYmluZCh0aGlzKSwgZmFsc2UpOwogICAgIHRoaXMuX3VwZGF0ZUVy
cm9yQW5kV2FybmluZ0NvdW50cygpOwogCi0gICAgdmFyIHNlYXJjaEZpZWxkID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInNlYXJjaCIpOwotICAgIHNlYXJjaEZpZWxkLmFkZEV2ZW50TGlzdGVu
ZXIoInNlYXJjaCIsIHRoaXMucGVyZm9ybVNlYXJjaC5iaW5kKHRoaXMpLCBmYWxzZSk7IC8vIHdo
ZW4gdGhlIHNlYXJjaCBpcyBlbXB0aWVkCi0gICAgc2VhcmNoRmllbGQuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2Vkb3duIiwgdGhpcy5fc2VhcmNoRmllbGRNYW51YWxGb2N1cy5iaW5kKHRoaXMpLCBm
YWxzZSk7IC8vIHdoZW4gdGhlIHNlYXJjaCBmaWVsZCBpcyBtYW51YWxseSBzZWxlY3RlZAotICAg
IHNlYXJjaEZpZWxkLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9zZWFyY2hLZXlE
b3duLmJpbmQodGhpcyksIHRydWUpOwotCiAgICAgdGhpcy5leHRlbnNpb25TZXJ2ZXIuaW5pdEV4
dGVuc2lvbnMoKTsKIAogICAgIGZ1bmN0aW9uIG9uUG9wdWxhdGVTY3JpcHRPYmplY3RzKCkKQEAg
LTc2OCw2ICs3NDMsMTIgQEAgV2ViSW5zcGVjdG9yLmRvY3VtZW50S2V5RG93biA9IGZ1bmN0aW9u
KGV2ZW50KQogICAgICAgICB9CiAgICAgfQogCisgICAgV2ViSW5zcGVjdG9yLnNlYXJjaENvbnRy
b2xsZXIuaGFuZGxlU2hvcnRjdXQoZXZlbnQpOworICAgIGlmIChldmVudC5oYW5kbGVkKSB7Cisg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICB2YXIgaXNNYWMgPSBXZWJJbnNwZWN0b3IuaXNNYWMoKTsKICAgICBzd2l0Y2ggKGV2ZW50
LmtleUlkZW50aWZpZXIpIHsKICAgICAgICAgY2FzZSAiTGVmdCI6CkBAIC03OTQsMzYgKzc3NSw2
IEBAIFdlYkluc3BlY3Rvci5kb2N1bWVudEtleURvd24gPSBmdW5jdGlvbihldmVudCkKICAgICAg
ICAgICAgIHRoaXMuZHJhd2VyLnZpc2libGUgPSAhdGhpcy5kcmF3ZXIudmlzaWJsZTsKICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgIlUrMDA0NiI6IC8vIEYga2V5Ci0gICAgICAg
ICAgICBpZiAoaXNNYWMpCi0gICAgICAgICAgICAgICAgdmFyIGlzRmluZEtleSA9IGV2ZW50Lm1l
dGFLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQuc2hpZnRL
ZXk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdmFyIGlzRmluZEtleSA9IGV2
ZW50LmN0cmxLZXkgJiYgIWV2ZW50Lm1ldGFLZXkgJiYgIWV2ZW50LmFsdEtleSAmJiAhZXZlbnQu
c2hpZnRLZXk7Ci0KLSAgICAgICAgICAgIGlmIChpc0ZpbmRLZXkpIHsKLSAgICAgICAgICAgICAg
ICBXZWJJbnNwZWN0b3IuZm9jdXNTZWFyY2hGaWVsZCgpOwotICAgICAgICAgICAgICAgIGV2ZW50
LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICBjYXNlICJGMyI6Ci0gICAgICAgICAgICBpZiAoIWlzTWFjKSB7Ci0gICAgICAgICAg
ICAgICAgV2ViSW5zcGVjdG9yLmZvY3VzU2VhcmNoRmllbGQoKTsKLSAgICAgICAgICAgICAgICBl
dmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgY2FzZSAiVSswMDQ3IjogLy8gRyBrZXkKLSAgICAgICAgICAgIGlmIChpc01h
YyAmJiBldmVudC5tZXRhS2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMuY3VycmVudFBhbmVsLmp1bXBUb1ByZXZpb3VzU2VhcmNoUmVzdWx0KQotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwuanVtcFRvUHJldmlvdXNTZWFy
Y2hSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhbmVs
Lmp1bXBUb05leHRTZWFyY2hSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVu
dFBhbmVsLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KICAg
ICAgICAgLy8gV2luZG93cyBhbmQgTWFjIGhhdmUgdHdvIGRpZmZlcmVudCBkZWZpbml0aW9ucyBv
ZiBbLCBzbyBhY2NlcHQgYm90aC4KICAgICAgICAgY2FzZSAiVSswMDVCIjoKICAgICAgICAgY2Fz
ZSAiVSswMERCIjogLy8gWyBrZXkKQEAgLTk5MCwyNyArOTQxLDYgQEAgV2ViSW5zcGVjdG9yLmFu
aW1hdGVTdHlsZSA9IGZ1bmN0aW9uKGFuaW1hdGlvbnMsIGR1cmF0aW9uLCBjYWxsYmFjaykKICAg
ICB9OwogfQogCi1XZWJJbnNwZWN0b3IudXBkYXRlU2VhcmNoTGFiZWwgPSBmdW5jdGlvbigpCi17
Ci0gICAgaWYgKCF0aGlzLmN1cnJlbnRQYW5lbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdmFy
IG5ld0xhYmVsID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJTZWFyY2ggJXMiLCB0aGlzLmN1cnJl
bnRQYW5lbC50b29sYmFySXRlbUxhYmVsKTsKLSAgICBpZiAodGhpcy5hdHRhY2hlZCkKLSAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaCIpLnNldEF0dHJpYnV0ZSgicGxhY2Vo
b2xkZXIiLCBuZXdMYWJlbCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJzZWFyY2giKS5yZW1vdmVBdHRyaWJ1dGUoInBsYWNlaG9sZGVyIik7Ci0gICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2gtdG9vbGJhci1sYWJlbCIpLnRleHRDb250
ZW50ID0gbmV3TGFiZWw7Ci0gICAgfQotfQotCi1XZWJJbnNwZWN0b3IuZm9jdXNTZWFyY2hGaWVs
ZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgc2VhcmNoRmllbGQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgic2VhcmNoIik7Ci0gICAgc2VhcmNoRmllbGQuZm9jdXMoKTsKLSAgICBzZWFyY2hG
aWVsZC5zZWxlY3QoKTsKLX0KLQogV2ViSW5zcGVjdG9yLnRvZ2dsZUF0dGFjaCA9IGZ1bmN0aW9u
KCkKIHsKICAgICBpZiAoIXRoaXMuYXR0YWNoZWQpCkBAIC0xNDY4LDExNyArMTM5OCw2IEBAIFdl
Ykluc3BlY3Rvci5hZGRNYWluRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbihkb2MpCiAgICAgZG9j
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5kb2N1bWVudENsaWNrLmJpbmQodGhpcyks
IHRydWUpOwogfQogCi1XZWJJbnNwZWN0b3IuX3NlYXJjaEZpZWxkTWFudWFsRm9jdXMgPSBmdW5j
dGlvbihldmVudCkKLXsKLSAgICB0aGlzLmN1cnJlbnRGb2N1c0VsZW1lbnQgPSBldmVudC50YXJn
ZXQ7Ci0gICAgdGhpcy5fcHJldmlvdXNGb2N1c0VsZW1lbnQgPSBldmVudC50YXJnZXQ7Ci19Ci0K
LVdlYkluc3BlY3Rvci5fc2VhcmNoS2V5RG93biA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIC8v
IEVzY2FwZSBLZXkgd2lsbCBjbGVhciB0aGUgZmllbGQgYW5kIGNsZWFyIHRoZSBzZWFyY2ggcmVz
dWx0cwotICAgIGlmIChldmVudC5rZXlDb2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9y
dGN1dC5LZXlzLkVzYy5jb2RlKSB7Ci0gICAgICAgIC8vIElmIGZvY3VzIGJlbG9uZ3MgaGVyZSBh
bmQgdGV4dCBpcyBlbXB0eSAtIG5vdGhpbmcgdG8gZG8sIHJldHVybiB1bmhhbmRsZWQuCi0gICAg
ICAgIGlmIChldmVudC50YXJnZXQudmFsdWUgPT09ICIiICYmIHRoaXMuY3VycmVudEZvY3VzRWxl
bWVudCA9PT0gdGhpcy5wcmV2aW91c0ZvY3VzRWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7Ci0gICAgICAgIC8vIFdoZW4gc2VhcmNoIHdhcyBzZWxlY3RlZCBtYW51YWxseSBh
bmQgaXMgY3VycmVudGx5IGJsYW5rLCB3ZSdkIGxpa2UgRXNjIHN0YXkgdW5oYW5kbGVkCi0gICAg
ICAgIC8vIGFuZCBoaXQgY29uc29sZSBkcmF3ZXIgaGFuZGxlci4KLSAgICAgICAgZXZlbnQudGFy
Z2V0LnZhbHVlID0gIiI7Ci0KLSAgICAgICAgdGhpcy5wZXJmb3JtU2VhcmNoKGV2ZW50KTsKLSAg
ICAgICAgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50ID0gdGhpcy5wcmV2aW91c0ZvY3VzRWxlbWVu
dDsKLSAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvY3VzRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0
KQotICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNFbGVtZW50LnNlbGVjdCgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0VudGVyS2V5KGV2ZW50KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU2VsZWN0IGFsbCBvZiB0aGUgdGV4dCBzbyB0
aGUgdXNlciBjYW4gZWFzaWx5IHR5cGUgYW4gZW50aXJlbHkgbmV3IHF1ZXJ5LgotICAgIGV2ZW50
LnRhcmdldC5zZWxlY3QoKTsKLQotICAgIC8vIE9ubHkgY2FsbCBwZXJmb3JtU2VhcmNoIGlmIHRo
ZSBFbnRlciBrZXkgd2FzIHByZXNzZWQuIE90aGVyd2lzZSB0aGUgc2VhcmNoCi0gICAgLy8gcGVy
Zm9ybWFuY2UgaXMgcG9vciBiZWNhdXNlIG9mIHNlYXJjaGluZyBvbiBldmVyeSBrZXkuIFRoZSBz
ZWFyY2ggZmllbGQgaGFzCi0gICAgLy8gdGhlIGluY3JlbWVudGFsIGF0dHJpYnV0ZSBzZXQsIHNv
IHdlIHN0aWxsIGdldCBpbmNyZW1lbnRhbCBzZWFyY2hlcy4KLSAgICB0aGlzLnBlcmZvcm1TZWFy
Y2goZXZlbnQpOwotCi0gICAgLy8gQ2FsbCBwcmV2ZW50RGVmYXVsdCBzaW5jZSB0aGlzIHdhcyB0
aGUgRW50ZXIga2V5LiBUaGlzIHByZXZlbnRzIGEgInNlYXJjaCIgZXZlbnQKLSAgICAvLyBmcm9t
IGZpcmluZyBmb3Iga2V5IGRvd24uIFRoaXMgc3RvcHMgcGVyZm9ybVNlYXJjaCBmcm9tIGJlaW5n
IGNhbGxlZCB0d2ljZSBpbiBhIHJvdy4KLSAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotfQot
Ci1XZWJJbnNwZWN0b3IucGVyZm9ybVNlYXJjaCA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIHZh
ciBmb3JjZVNlYXJjaCA9IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJFbnRlciI7Ci0gICAgdGhp
cy5kb1BlcmZvcm1TZWFyY2goZXZlbnQudGFyZ2V0LnZhbHVlLCBmb3JjZVNlYXJjaCwgZXZlbnQu
c2hpZnRLZXksIGZhbHNlKTsKLX0KLQotV2ViSW5zcGVjdG9yLmNhbmNlbFNlYXJjaCA9IGZ1bmN0
aW9uKCkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2VhcmNoIikudmFsdWUgPSAi
IjsKLSAgICB0aGlzLmRvUGVyZm9ybVNlYXJjaCgiIik7Ci19Ci0KLVdlYkluc3BlY3Rvci5kb1Bl
cmZvcm1TZWFyY2ggPSBmdW5jdGlvbihxdWVyeSwgZm9yY2VTZWFyY2gsIGlzQmFja3dhcmRTZWFy
Y2gsIHJlcGVhdFNlYXJjaCkKLXsKLSAgICB2YXIgaXNTaG9ydFNlYXJjaCA9IChxdWVyeS5sZW5n
dGggPCAzKTsKLQotICAgIC8vIENsZWFyIGEgbGVmdG92ZXIgc2hvcnQgc2VhcmNoIGZsYWcgZHVl
IHRvIGEgbm9uLWNvbmZsaWN0aW5nIGZvcmNlZCBzZWFyY2guCi0gICAgaWYgKGlzU2hvcnRTZWFy
Y2ggJiYgdGhpcy5zaG9ydFNlYXJjaFdhc0ZvcmNlZEJ5S2V5RXZlbnQgJiYgdGhpcy5jdXJyZW50
UXVlcnkgIT09IHF1ZXJ5KQotICAgICAgICBkZWxldGUgdGhpcy5zaG9ydFNlYXJjaFdhc0ZvcmNl
ZEJ5S2V5RXZlbnQ7Ci0KLSAgICAvLyBJbmRpY2F0ZSB0aGlzIHdhcyBhIGZvcmNlZCBzZWFyY2gg
b24gYSBzaG9ydCBxdWVyeS4KLSAgICBpZiAoaXNTaG9ydFNlYXJjaCAmJiBmb3JjZVNlYXJjaCkK
LSAgICAgICAgdGhpcy5zaG9ydFNlYXJjaFdhc0ZvcmNlZEJ5S2V5RXZlbnQgPSB0cnVlOwotCi0g
ICAgaWYgKCFxdWVyeSB8fCAhcXVlcnkubGVuZ3RoIHx8ICghZm9yY2VTZWFyY2ggJiYgaXNTaG9y
dFNlYXJjaCkpIHsKLSAgICAgICAgLy8gUHJldmVudCBjbG9iYmVyaW5nIGEgc2hvcnQgc2VhcmNo
IGZvcmNlZCBieSB0aGUgdXNlci4KLSAgICAgICAgaWYgKHRoaXMuc2hvcnRTZWFyY2hXYXNGb3Jj
ZWRCeUtleUV2ZW50KSB7Ci0gICAgICAgICAgICBkZWxldGUgdGhpcy5zaG9ydFNlYXJjaFdhc0Zv
cmNlZEJ5S2V5RXZlbnQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAg
ICBkZWxldGUgdGhpcy5jdXJyZW50UXVlcnk7Ci0KLSAgICAgICAgZm9yICh2YXIgcGFuZWxOYW1l
IGluIHRoaXMucGFuZWxzKSB7Ci0gICAgICAgICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsc1tw
YW5lbE5hbWVdOwotICAgICAgICAgICAgdmFyIGhhZEN1cnJlbnRRdWVyeSA9ICEhcGFuZWwuY3Vy
cmVudFF1ZXJ5OwotICAgICAgICAgICAgZGVsZXRlIHBhbmVsLmN1cnJlbnRRdWVyeTsKLSAgICAg
ICAgICAgIGlmIChoYWRDdXJyZW50UXVlcnkgJiYgcGFuZWwuc2VhcmNoQ2FuY2VsZWQpCi0gICAg
ICAgICAgICAgICAgcGFuZWwuc2VhcmNoQ2FuY2VsZWQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHRoaXMudXBkYXRlU2VhcmNoTWF0Y2hlc0NvdW50KCk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghcmVwZWF0U2VhcmNoICYmIHF1ZXJ5ID09PSB0aGlzLmN1cnJlbnRQYW5l
bC5jdXJyZW50UXVlcnkgJiYgdGhpcy5jdXJyZW50UGFuZWwuY3VycmVudFF1ZXJ5ID09PSB0aGlz
LmN1cnJlbnRRdWVyeSkgewotICAgICAgICAvLyBXaGVuIHRoaXMgaXMgdGhlIHNhbWUgcXVlcnkg
YW5kIGEgZm9yY2VkIHNlYXJjaCwganVtcCB0byB0aGUgbmV4dAotICAgICAgICAvLyBzZWFyY2gg
cmVzdWx0IGZvciBhIGdvb2QgdXNlciBleHBlcmllbmNlLgotICAgICAgICBpZiAoZm9yY2VTZWFy
Y2gpIHsKLSAgICAgICAgICAgIGlmICghaXNCYWNrd2FyZFNlYXJjaCAmJiB0aGlzLmN1cnJlbnRQ
YW5lbC5qdW1wVG9OZXh0U2VhcmNoUmVzdWx0KQotICAgICAgICAgICAgICAgIHRoaXMuY3VycmVu
dFBhbmVsLmp1bXBUb05leHRTZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlz
QmFja3dhcmRTZWFyY2ggJiYgdGhpcy5jdXJyZW50UGFuZWwuanVtcFRvUHJldmlvdXNTZWFyY2hS
ZXN1bHQpCi0gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFuZWwuanVtcFRvUHJldmlvdXNT
ZWFyY2hSZXN1bHQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
dGhpcy5jdXJyZW50UXVlcnkgPSBxdWVyeTsKLQotICAgIHRoaXMudXBkYXRlU2VhcmNoTWF0Y2hl
c0NvdW50KCk7Ci0KLSAgICBpZiAoIXRoaXMuY3VycmVudFBhbmVsLnBlcmZvcm1TZWFyY2gpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHRoaXMuY3VycmVudFBhbmVsLmN1cnJlbnRRdWVyeSA9IHF1
ZXJ5OwotICAgIHRoaXMuY3VycmVudFBhbmVsLnBlcmZvcm1TZWFyY2gocXVlcnkpOwotfQotCiBX
ZWJJbnNwZWN0b3IuZnJvbnRlbmRSZXVzZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5uZXR3
b3JrTWFuYWdlci5yZXNldCgpOwpAQCAtMTU5MCwzNCArMTQwOSw2IEBAIFdlYkluc3BlY3Rvci5h
ZGROb2Rlc1RvU2VhcmNoUmVzdWx0ID0gZnVuY3Rpb24obm9kZUlkcykKICAgICBXZWJJbnNwZWN0
b3IucGFuZWxzLmVsZW1lbnRzLmFkZE5vZGVzVG9TZWFyY2hSZXN1bHQobm9kZUlkcyk7CiB9CiAK
LVdlYkluc3BlY3Rvci51cGRhdGVTZWFyY2hNYXRjaGVzQ291bnQgPSBmdW5jdGlvbihtYXRjaGVz
LCBwYW5lbCkKLXsKLSAgICBpZiAoIXBhbmVsKQotICAgICAgICBwYW5lbCA9IHRoaXMuY3VycmVu
dFBhbmVsOwotCi0gICAgcGFuZWwuY3VycmVudFNlYXJjaE1hdGNoZXMgPSBtYXRjaGVzOwotCi0g
ICAgaWYgKHBhbmVsICE9PSB0aGlzLmN1cnJlbnRQYW5lbCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCF0aGlzLmN1cnJlbnRQYW5lbC5jdXJyZW50UXVlcnkpIHsKLSAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoInNlYXJjaC1yZXN1bHRzLW1hdGNoZXMiKS5hZGRTdHlsZUNsYXNz
KCJoaWRkZW4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtYXRjaGVzKSB7
Ci0gICAgICAgIGlmIChtYXRjaGVzID09PSAxKQotICAgICAgICAgICAgdmFyIG1hdGNoZXNTdHJp
bmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIjEgbWF0Y2giKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgdmFyIG1hdGNoZXNTdHJpbmcgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIiVkIG1h
dGNoZXMiLCBtYXRjaGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgdmFyIG1hdGNoZXNTdHJpbmcg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vdCBGb3VuZCIpOwotCi0gICAgdmFyIG1hdGNoZXNU
b29sYmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZWFyY2gtcmVzdWx0cy1t
YXRjaGVzIik7Ci0gICAgbWF0Y2hlc1Rvb2xiYXJFbGVtZW50LnJlbW92ZVN0eWxlQ2xhc3MoImhp
ZGRlbiIpOwotICAgIG1hdGNoZXNUb29sYmFyRWxlbWVudC50ZXh0Q29udGVudCA9IG1hdGNoZXNT
dHJpbmc7Ci19Ci0KIFdlYkluc3BlY3Rvci5VSVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZykKIHsK
ICAgICBpZiAod2luZG93LmxvY2FsaXplZFN0cmluZ3MgJiYgc3RyaW5nIGluIHdpbmRvdy5sb2Nh
bGl6ZWRTdHJpbmdzKQo=
</data>
<flag name="review"
          id="75669"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>