<?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>50809</bug_id>
          
          <creation_ts>2010-12-10 05:16:47 -0800</creation_ts>
          <short_desc>Web Inspector: introduce a pair of set/remove methods for each breakpoint type</short_desc>
          <delta_ts>2010-12-10 07:33:56 -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>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</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>320101</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 05:16:47 -0800</bug_when>
    <thetext>Web Inspector: introduce a pair of set/remove methods for each breakpoint type</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320102</commentid>
    <comment_count>1</comment_count>
      <attachid>76185</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 05:17:31 -0800</bug_when>
    <thetext>Created attachment 76185
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320111</commentid>
    <comment_count>2</comment_count>
      <attachid>76185</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-10 06:08:02 -0800</bug_when>
    <thetext>Comment on attachment 76185
Patch.

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

&gt; WebCore/inspector/InspectorController.cpp:1422
&gt; +    if (m_hasXHRBreakpointWithEmptyURL) {

Why do you need to treat XHR breakpoints with empty URL differently? Can you just put the empty url into the set?

&gt; WebCore/inspector/front-end/BreakpointManager.js:52
&gt; +        var breakpointId = this._formatDOMBreakpointId(nodeId, type);

_format* -&gt; _create* ?

&gt; WebCore/inspector/front-end/BreakpointManager.js:130
&gt; +        if (&quot;nodeId&quot; in eventData)

There should be explicit breakpoint type in the eventData. Imagine how it would look in the protocol.

&gt; WebCore/inspector/front-end/BreakpointManager.js:357
&gt; +    _persist: function()

_persist -&gt; _serializeToJSON</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320132</commentid>
    <comment_count>3</comment_count>
      <attachid>76190</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 06:59:59 -0800</bug_when>
    <thetext>Created attachment 76190
Comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320133</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 07:01:11 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 76185 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76185&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorController.cpp:1422
&gt; &gt; +    if (m_hasXHRBreakpointWithEmptyURL) {
&gt; 
&gt; Why do you need to treat XHR breakpoints with empty URL differently? Can you just put the empty url into the set?
HashTable asserts that key != emptyValue.

&gt; 
&gt; &gt; WebCore/inspector/front-end/BreakpointManager.js:52
&gt; &gt; +        var breakpointId = this._formatDOMBreakpointId(nodeId, type);
&gt; 
&gt; _format* -&gt; _create* ?
&gt; 
Done.

&gt; &gt; WebCore/inspector/front-end/BreakpointManager.js:130
&gt; &gt; +        if (&quot;nodeId&quot; in eventData)
&gt; 
&gt; There should be explicit breakpoint type in the eventData. Imagine how it would look in the protocol.
Done.

&gt; 
&gt; &gt; WebCore/inspector/front-end/BreakpointManager.js:357
&gt; &gt; +    _persist: function()
&gt; 
&gt; _persist -&gt; _serializeToJSON
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320135</commentid>
    <comment_count>5</comment_count>
      <attachid>76190</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-12-10 07:04:55 -0800</bug_when>
    <thetext>Comment on attachment 76190
Comments addressed.

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

&gt; WebCore/inspector/InspectorInstrumentation.cpp:48
&gt; +static const char* const domNativeBreakpointType = &quot;DOM&quot;;

I recall that InspectorInstrumentation was supposed to be a thin interface to the IC and now it&apos;s getting more logic. Who can I figure where to look for a particular feature implementation in IC or in II?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320136</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 07:08:09 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 76190 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=76190&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorInstrumentation.cpp:48
&gt; &gt; +static const char* const domNativeBreakpointType = &quot;DOM&quot;;
&gt; 
&gt; I recall that InspectorInstrumentation was supposed to be a thin interface to the IC and now it&apos;s getting more logic. Who can I figure where to look for a particular feature implementation in IC or in II?

I think we should move this stuff to a new BreakpointManager class, and keep II thin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320149</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2010-12-10 07:33:56 -0800</bug_when>
    <thetext>Committed r73726: &lt;http://trac.webkit.org/changeset/73726&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76185</attachid>
            <date>2010-12-10 05:17:31 -0800</date>
            <delta_ts>2010-12-10 06:59:59 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>36924</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDg5YzVkOC4uZGZhZmUzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0xMi0xMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRyb2R1Y2UgYSBwYWlyIG9m
IHNldC9yZW1vdmUgbWV0aG9kcyBmb3IgZWFjaCBicmVha3BvaW50IHR5cGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDgwOQorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpyZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRYSFJCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZVhIUkJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzWEhSQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhck5h
dGl2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJlcXVlc3RJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2
ZW50SWZOZWVkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1h
bmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkRPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUuX25hdGl2ZUJyZWFrcG9pbnRIaXQp
OgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5kZWJ1Z2dlclBhdXNlZCk6
CisKIDIwMTAtMTItMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4
IDZkOGYyMmIuLmMyMTRmNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMTQ1LDggKzE0
NSwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgZWRp
dFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIGluIFN0cmluZyBuZXdDb250ZW50LCBv
dXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgU3RyaW5nIHJlc3VsdCwgb3V0IFZhbHVlIG5ld0NhbGxG
cmFtZXMpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGdldFNjcmlwdFNvdXJjZShp
biBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgc2NyaXB0U291cmNlKTsKIAotICAgICAgICBb
ZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXROYXRpdmVCcmVha3BvaW50KGluIE9iamVjdCBicmVh
a3BvaW50LCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCk7Ci0gICAgICAgIFtkb21haW49SW5zcGVj
dG9yXSB2b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoaW4gU3RyaW5nIGJyZWFrcG9pbnRJZCk7
CisgICAgICAgIFtkb21haW49RE9NXSB2b2lkIHNldERPTUJyZWFrcG9pbnQoaW4gbG9uZyBub2Rl
SWQsIGluIGxvbmcgdHlwZSk7CisgICAgICAgIFtkb21haW49RE9NXSB2b2lkIHJlbW92ZURPTUJy
ZWFrcG9pbnQoaW4gbG9uZyBub2RlSWQsIGluIGxvbmcgdHlwZSk7CisgICAgICAgIFtkb21haW49
SW5zcGVjdG9yXSB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGluIFN0cmluZyBldmVu
dE5hbWUpOworICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCByZW1vdmVFdmVudExpc3Rl
bmVyQnJlYWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsKKyAgICAgICAgW2RvbWFpbj1JbnNw
ZWN0b3JdIHZvaWQgc2V0WEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJsKTsKKyAgICAgICAgW2Rv
bWFpbj1JbnNwZWN0b3JdIHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJsKTsK
IAogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBlbmFibGVQcm9maWxlcihpbiBib29s
ZWFuIGFsd2F5cyk7CiAgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIGRpc2FibGVQcm9m
aWxlcihpbiBib29sZWFuIGFsd2F5cyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCmluZGV4IGYwY2Q4Y2YuLjM1NTAwYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgSW5zcGVjdG9yQ29udHJv
bGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNs
aWVudCkKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRIb3N0KEluamVjdGVkU2NyaXB0SG9zdDo6Y3Jl
YXRlKHRoaXMpKQogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgICwgbV9hdHRh
Y2hEZWJ1Z2dlcldoZW5TaG93bihmYWxzZSkKLSAgICAsIG1fbGFzdEJyZWFrcG9pbnRJZCgwKQor
ICAgICwgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKGZhbHNlKQogICAgICwgbV9wcm9m
aWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgog
ewpAQCAtMTM4Niw4MSArMTM4Niw1NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc3Vt
ZSgpCiAgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+cmVzdW1lKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ29udHJvbGxlcjo6c2V0TmF0aXZlQnJlYWtwb2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gYnJlYWtwb2ludCwgU3RyaW5nKiBicmVha3BvaW50SWQpCit2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OnNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnRO
YW1lKQogewotICAgICpicmVha3BvaW50SWQgPSAiIjsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBp
ZiAoIWJyZWFrcG9pbnQtPmdldFN0cmluZygidHlwZSIsICZ0eXBlKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGNvbmRpdGlvbiA9IGJyZWFrcG9pbnQtPmdl
dE9iamVjdCgiY29uZGl0aW9uIik7Ci0gICAgaWYgKCFjb25kaXRpb24pCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAodHlwZSA9PSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSkgewotICAgICAgICBT
dHJpbmcgdXJsOwotICAgICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJ1cmwiLCAmdXJs
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgKmJyZWFrcG9pbnRJZCA9IFN0cmluZzo6
bnVtYmVyKCsrbV9sYXN0QnJlYWtwb2ludElkKTsKLSAgICAgICAgbV9YSFJCcmVha3BvaW50cy5z
ZXQoKmJyZWFrcG9pbnRJZCwgdXJsKTsKLSAgICAgICAgbV9uYXRpdmVCcmVha3BvaW50cy5zZXQo
KmJyZWFrcG9pbnRJZCwgdHlwZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IGV2ZW50TGlzdGVu
ZXJOYXRpdmVCcmVha3BvaW50VHlwZSkgewotICAgICAgICBTdHJpbmcgZXZlbnROYW1lOwotICAg
ICAgICBpZiAoIWNvbmRpdGlvbi0+Z2V0U3RyaW5nKCJldmVudE5hbWUiLCAmZXZlbnROYW1lKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzLmNvbnRhaW5zKGV2ZW50TmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICpi
cmVha3BvaW50SWQgPSBldmVudE5hbWU7Ci0gICAgICAgIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRzLmFkZChldmVudE5hbWUpOwotICAgICAgICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgqYnJl
YWtwb2ludElkLCB0eXBlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gZG9tTmF0aXZlQnJlYWtw
b2ludFR5cGUpIHsKLSAgICAgICAgaWYgKCFtX2RvbUFnZW50KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBkb3VibGUgbm9kZUlkTnVtYmVyOwotICAgICAgICBpZiAoIWNvbmRpdGlvbi0+
Z2V0TnVtYmVyKCJub2RlSWQiLCAmbm9kZUlkTnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZG91YmxlIGRvbUJyZWFrcG9pbnRUeXBlTnVtYmVyOwotICAgICAgICBpZiAoIWNv
bmRpdGlvbi0+Z2V0TnVtYmVyKCJ0eXBlIiwgJmRvbUJyZWFrcG9pbnRUeXBlTnVtYmVyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbG9uZyBub2RlSWQgPSAobG9uZykgbm9kZUlkTnVt
YmVyOwotICAgICAgICBsb25nIGRvbUJyZWFrcG9pbnRUeXBlID0gKGxvbmcpIGRvbUJyZWFrcG9p
bnRUeXBlTnVtYmVyOwotICAgICAgICAqYnJlYWtwb2ludElkID0gbV9kb21BZ2VudC0+c2V0RE9N
QnJlYWtwb2ludChub2RlSWQsIGRvbUJyZWFrcG9pbnRUeXBlKTsKLSAgICAgICAgaWYgKCFicmVh
a3BvaW50SWQtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0
KCpicmVha3BvaW50SWQsIHR5cGUpOwotICAgIH0KKyAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3Bv
aW50cy5hZGQoZXZlbnROYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1v
dmVOYXRpdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJp
bmcmIGV2ZW50TmFtZSkKIHsKLSAgICBTdHJpbmcgdHlwZSA9IG1fbmF0aXZlQnJlYWtwb2ludHMu
dGFrZShicmVha3BvaW50SWQpOwotICAgIGlmICh0eXBlID09IHhock5hdGl2ZUJyZWFrcG9pbnRU
eXBlKQotICAgICAgICBtX1hIUkJyZWFrcG9pbnRzLnJlbW92ZShicmVha3BvaW50SWQpOwotICAg
IGVsc2UgaWYgKHR5cGUgPT0gZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKQotICAg
ICAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5yZW1vdmUoYnJlYWtwb2ludElkKTsKLSAg
ICBlbHNlIGlmICh0eXBlID09IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGlm
IChtX2RvbUFnZW50KQotICAgICAgICAgICAgbV9kb21BZ2VudC0+cmVtb3ZlRE9NQnJlYWtwb2lu
dChicmVha3BvaW50SWQpOwotICAgIH0KKyAgICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5y
ZW1vdmUoZXZlbnROYW1lKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNvbnRyb2xsZXI6OmZpbmRF
dmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKK2Jvb2wgSW5z
cGVjdG9yQ29udHJvbGxlcjo6aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBldmVudE5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNv
bnRhaW5zKGV2ZW50TmFtZSkgPyBldmVudE5hbWUgOiAiIjsKKyAgICByZXR1cm4gbV9ldmVudExp
c3RlbmVyQnJlYWtwb2ludHMuY29udGFpbnMoZXZlbnROYW1lKTsKIH0KIAotU3RyaW5nIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmZpbmRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJs
KQogewotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gbV9Y
SFJCcmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBtX1hIUkJyZWFrcG9pbnRzLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIGlmICh1cmwuY29udGFpbnMoaXQtPnNlY29uZCkpCi0gICAgICAgICAgICBy
ZXR1cm4gaXQtPmZpcnN0OworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICBtX2hhc1hI
UkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9YSFJC
cmVha3BvaW50cy5hZGQodXJsKTsKK30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1v
dmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmICh1cmwuaXNFbXB0
eSgpKQorICAgICAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKKyAg
ICBlbHNlCisgICAgICAgIG1fWEhSQnJlYWtwb2ludHMucmVtb3ZlKHVybCk7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwg
U3RyaW5nKiBicmVha3BvaW50VVJMKQoreworICAgIGlmIChtX2hhc1hIUkJyZWFrcG9pbnRXaXRo
RW1wdHlVUkwpIHsKKyAgICAgICAgKmJyZWFrcG9pbnRVUkwgPSAiIjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGZvciAoSGFzaFNldDxTdHJpbmc+OjppdGVyYXRvciBpdCA9IG1f
WEhSQnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gbV9YSFJCcmVha3BvaW50cy5lbmQoKTsgKytp
dCkgeworICAgICAgICBpZiAodXJsLmNvbnRhaW5zKCppdCkpIHsKKyAgICAgICAgICAgICpicmVh
a3BvaW50VVJMID0gKml0OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgcmV0dXJuICIiOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpjbGVhck5hdGl2ZUJyZWFrcG9pbnRzKCkKIHsKLSAgICBtX25hdGl2ZUJy
ZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuY2xlYXIo
KTsKICAgICBtX1hIUkJyZWFrcG9pbnRzLmNsZWFyKCk7Ci0gICAgbV9sYXN0QnJlYWtwb2ludElk
ID0gMDsKKyAgICBtX2hhc1hIUkJyZWFrcG9pbnRXaXRoRW1wdHlVUkwgPSBmYWxzZTsKIH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggMDg2NWEz
YS4uMTRkNTYzMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAt
MjU1LDggKzI1NSwxMiBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCogZGVi
dWdnZXJBZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudC5nZXQoKTsgfQogICAg
IHZvaWQgcmVzdW1lKCk7CiAKLSAgICB2b2lkIHNldE5hdGl2ZUJyZWFrcG9pbnQoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElkKTsKLSAg
ICB2b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQp
OworICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVu
dE5hbWUpOworICAgIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBldmVudE5hbWUpOworICAgIGJvb2wgaGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBldmVudE5hbWUpOworICAgIHZvaWQgc2V0WEhSQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHVybCk7CisgICAgdm9pZCByZW1vdmVYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
dXJsKTsKKyAgICBib29sIGhhc1hIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIFN0cmlu
ZyogYnJlYWtwb2ludFVSTCk7CiAjZW5kaWYKIAogICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5G
cm9udGVuZChsb25nIHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKQEAgLTMwNiw4
ICszMTAsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wpOwog
ICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9vbCBhbHdheXMpOwogCi0gICAg
U3RyaW5nIGZpbmRFdmVudExpc3RlbmVyQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFt
ZSk7Ci0gICAgU3RyaW5nIGZpbmRYSFJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsKTsKICAg
ICB2b2lkIGNsZWFyTmF0aXZlQnJlYWtwb2ludHMoKTsKICNlbmRpZgogI2lmIEVOQUJMRShEQVRB
QkFTRSkKQEAgLTM4NiwxMSArMzg4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXR0YWNoRGVi
dWdnZXJXaGVuU2hvd247CiAgICAgT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IG1fZGVi
dWdnZXJBZ2VudDsKIAotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fbmF0aXZlQnJlYWtw
b2ludHM7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzOwot
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fWEhSQnJlYWtwb2ludHM7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgbV9sYXN0QnJlYWtwb2ludElkOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX1hIUkJy
ZWFrcG9pbnRzOworICAgIGJvb2wgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMOwogCiAg
ICAgT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IG1fcHJvZmlsZXJBZ2VudDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDI5NzE1YjQuLjFm
ZmI1YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTc2MCwx
NyArNzYwLDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNlYXJjaENhbmNlbGVkKCkKICAg
ICBtX3NlYXJjaFJlc3VsdHMuY2xlYXIoKTsKIH0KIAotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50
OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCit2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpzZXRET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiB7CiAg
ICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuICIiOwotCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IGNyZWF0ZUJyZWFrcG9p
bnRJZChub2RlSWQsIHR5cGUpOwotICAgIGlmIChtX2lkVG9CcmVha3BvaW50LmNvbnRhaW5zKGJy
ZWFrcG9pbnRJZCkpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIG1faWRUb0JyZWFrcG9pbnQu
c2V0KGJyZWFrcG9pbnRJZCwgc3RkOjptYWtlX3BhaXIobm9kZUlkLCB0eXBlKSk7CisgICAgICAg
IHJldHVybjsKIAogICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CiAgICAgbV9icmVh
a3BvaW50cy5zZXQobm9kZSwgbV9icmVha3BvaW50cy5nZXQobm9kZSkgfCByb290Qml0KTsKQEAg
LTc3OCwxOSArNzcyLDE1IEBAIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtw
b2ludChsb25nIG5vZGVJZCwgbG9uZyB0eXBlKQogICAgICAgICBmb3IgKE5vZGUqIGNoaWxkID0g
aW5uZXJGaXJzdENoaWxkKG5vZGUpOyBjaGlsZDsgY2hpbGQgPSBpbm5lck5leHRTaWJsaW5nKGNo
aWxkKSkKICAgICAgICAgICAgIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgcm9vdEJp
dCwgdHJ1ZSk7CiAgICAgfQotCi0gICAgcmV0dXJuIGJyZWFrcG9pbnRJZDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFr
cG9pbnRJZCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQobG9u
ZyBub2RlSWQsIGxvbmcgdHlwZSkKIHsKLSAgICBCcmVha3BvaW50IGJyZWFrcG9pbnQgPSBtX2lk
VG9CcmVha3BvaW50LnRha2UoYnJlYWtwb2ludElkKTsKLQotICAgIE5vZGUqIG5vZGUgPSBub2Rl
Rm9ySWQoYnJlYWtwb2ludC5maXJzdCk7CisgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChub2Rl
SWQpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdWludDMyX3Qgcm9v
dEJpdCA9IDEgPDwgYnJlYWtwb2ludC5zZWNvbmQ7CisgICAgdWludDMyX3Qgcm9vdEJpdCA9IDEg
PDwgdHlwZTsKICAgICB1aW50MzJfdCBtYXNrID0gbV9icmVha3BvaW50cy5nZXQobm9kZSkgJiB+
cm9vdEJpdDsKICAgICBpZiAobWFzaykKICAgICAgICAgbV9icmVha3BvaW50cy5zZXQobm9kZSwg
bWFzayk7CkBAIC04NjIsNyArODUyLDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2UKIAogICAg
IGxvbmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChi
cmVha3BvaW50T3duZXIpOwogICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAg
IGRlc2NyaXB0aW9uLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGNyZWF0ZUJyZWFrcG9pbnRJ
ZChicmVha3BvaW50T3duZXJOb2RlSWQsIGJyZWFrcG9pbnRUeXBlKSk7CisgICAgZGVzY3JpcHRp
b24tPnNldE51bWJlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKKyAgICBkZXNj
cmlwdGlvbi0+c2V0TnVtYmVyKCJ0eXBlIiwgYnJlYWtwb2ludFR5cGUpOwogCiAgICAgcmV0dXJu
IGRlc2NyaXB0aW9uOwogfQpAQCAtMTEwNiwxNCArMTA5NywxNCBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAKICAgICBpZiAobV9icmVha3Bv
aW50cy5zaXplKCkpIHsKICAgICAgICAgLy8gUmVtb3ZlIHN1YnRyZWUgYnJlYWtwb2ludHMuCi0g
ICAgICAgIHJlbW92ZUJyZWFrcG9pbnRzRm9yTm9kZShub2RlKTsKKyAgICAgICAgbV9icmVha3Bv
aW50cy5yZW1vdmUobm9kZSk7CiAgICAgICAgIFZlY3RvcjxOb2RlKj4gc3RhY2soMSwgaW5uZXJG
aXJzdENoaWxkKG5vZGUpKTsKICAgICAgICAgZG8gewogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IHN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAg
ICAgIGlmICghbm9kZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJl
bW92ZUJyZWFrcG9pbnRzRm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgIG1fYnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpOwogICAgICAgICAgICAgc3RhY2suYXBwZW5kKGlubmVyRmlyc3RDaGlsZChu
b2RlKSk7CiAgICAgICAgICAgICBzdGFjay5hcHBlbmQoaW5uZXJOZXh0U2libGluZyhub2RlKSk7
CiAgICAgICAgIH0gd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpOwpAQCAtMTE4MCwyNSArMTE3MSw2
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2Rl
KiBub2RlLCB1aW50MzJfdCByb290TWFzaywKICAgICAgICAgdXBkYXRlU3VidHJlZUJyZWFrcG9p
bnRzKGNoaWxkLCBuZXdSb290TWFzaywgc2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgdWludDMyX3Qg
bWFzayA9IG1fYnJlYWtwb2ludHMudGFrZShub2RlKTsKLSAgICBpZiAoIW1hc2spCi0gICAgICAg
IHJldHVybjsKLSAgICBsb25nIG5vZGVJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9k
ZSk7Ci0gICAgaWYgKCFub2RlSWQpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKGludCB0eXBl
ID0gMDsgdHlwZSA8IERPTUJyZWFrcG9pbnRUeXBlc0NvdW50OyArK3R5cGUpIHsKLSAgICAgICAg
aWYgKG1hc2sgJiYgKDEgPDwgdHlwZSkpCi0gICAgICAgICAgICBtX2lkVG9CcmVha3BvaW50LnJl
bW92ZShjcmVhdGVCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKSk7Ci0gICAgfQotfQotCi1TdHJp
bmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmNyZWF0ZUJyZWFrcG9pbnRJZChsb25nIG5vZGVJZCwgbG9u
ZyB0eXBlKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJkb206IiwgU3RyaW5nOjpudW1iZXIo
bm9kZUlkKSwgJzonLCBTdHJpbmc6Om51bWJlcih0eXBlKSk7Ci19Ci0KIE5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgLy8gVGhl
IHBhdGggaXMgb2YgZm9ybSAiMSxIVE1MLDIsQk9EWSwxLERJViIKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCmluZGV4IGVkZDQwNWIuLmRiZDZmMzggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTQzLDggKzE0Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50
KSBjb25zdDsKIAotICAgICAgICBTdHJpbmcgc2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwg
bG9uZyB0eXBlKTsKLSAgICAgICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgYnJlYWtwb2ludElkKTsKKyAgICAgICAgdm9pZCBzZXRET01CcmVha3BvaW50KGxvbmcgbm9k
ZUlkLCBsb25nIHR5cGUpOworICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQobG9uZyBu
b2RlSWQsIGxvbmcgdHlwZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHN0YXJ0TGlz
dGVuaW5nKERvY3VtZW50KiBkb2N1bWVudCk7CkBAIC0xNjEsOSArMTYxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2RlKiBub2RlLCBsb25n
IHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50cyhOb2RlKiByb290
LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlQnJl
YWtwb2ludHNGb3JOb2RlKE5vZGUqIG5vZGUpOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwgbG9uZyBicmVha3Bv
aW50VHlwZSwgYm9vbCBpbnNlcnRpb24pOwotICAgICAgICBTdHJpbmcgY3JlYXRlQnJlYWtwb2lu
dElkKGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApOwogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBi
dWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCk7CkBAIC0yMDQs
OCArMjAyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoU2V0PFJlZlB0cjxO
b2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKICAgICAgICAgVmVjdG9yPGxvbmc+IG1faW5zcGVjdGVk
Tm9kZXM7CiAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVpbnQzMl90PiBtX2JyZWFrcG9pbnRzOwot
ICAgICAgICB0eXBlZGVmIHBhaXI8bG9uZywgbG9uZz4gQnJlYWtwb2ludDsKLSAgICAgICAgSGFz
aE1hcDxTdHJpbmcsIEJyZWFrcG9pbnQ+IG1faWRUb0JyZWFrcG9pbnQ7CiAgICAgfTsKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcApp
bmRleCBjZjQxNTI3Li4xM2Q2YzNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5jcHAKQEAgLTE0NywxMiArMTQ3LDEyIEBAIHZvaWQgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjp3aWxsU2VuZFhNTEh0dHBSZXF1ZXN0SW1wbChJbnNwZWN0b3JDb250
cm9sbGVyKiBpCiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTdHJpbmcgYnJlYWtwb2ludElkID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZmluZFhIUkJyZWFr
cG9pbnQodXJsKTsKLSAgICBpZiAoYnJlYWtwb2ludElkLmlzRW1wdHkoKSkKKyAgICBTdHJpbmcg
YnJlYWtwb2ludFVSTDsKKyAgICBpZiAoIWluc3BlY3RvckNvbnRyb2xsZXItPmhhc1hIUkJyZWFr
cG9pbnQodXJsLCAmYnJlYWtwb2ludFVSTCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGJyZWFrcG9pbnRJZCk7
CisgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRVUkwiLCBicmVha3BvaW50VVJM
KTsKICAgICBldmVudERhdGEtPnNldFN0cmluZygidXJsIiwgdXJsKTsKICAgICBkZWJ1Z2dlckFn
ZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVu
dERhdGEpOwogI2VuZGlmCkBAIC00NDYsMTEgKzQ0NiwxMCBAQCB2b2lkIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQoSW5zcGVjdG9yQ29udHJvbGxl
ciogaQogICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAgcmV0dXJuOwogICAgIFN0cmlu
ZyBmdWxsRXZlbnROYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVzOiVzIiwgY2F0ZWdvcnlUeXBlLnV0
ZjgoKS5kYXRhKCksIGV2ZW50TmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBTdHJpbmcgYnJlYWtw
b2ludElkID0gaW5zcGVjdG9yQ29udHJvbGxlci0+ZmluZEV2ZW50TGlzdGVuZXJCcmVha3BvaW50
KGZ1bGxFdmVudE5hbWUpOwotICAgIGlmIChicmVha3BvaW50SWQuaXNFbXB0eSgpKQorICAgIGlm
ICghaW5zcGVjdG9yQ29udHJvbGxlci0+aGFzRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVsbEV2
ZW50TmFtZSkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBl
dmVudERhdGEgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGV2ZW50RGF0YS0+c2V0
U3RyaW5nKCJicmVha3BvaW50SWQiLCBicmVha3BvaW50SWQpOworICAgIGV2ZW50RGF0YS0+c2V0
U3RyaW5nKCJldmVudE5hbWUiLCBmdWxsRXZlbnROYW1lKTsKICAgICBpZiAoc3luY2hyb25vdXMp
CiAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3BvaW50RGVi
dWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDYxYjJiYzguLjZhY2Iy
MmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFu
YWdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFn
ZXIuanMKQEAgLTMxLDEyOSArMzEsMTE2IEBACiBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMgPSB7fTsKLSAg
ICB0aGlzLl9iYWNrZW5kSWRUb0JyZWFrcG9pbnQgPSB7fTsKIAogICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoIm5hdGl2ZS1icmVha3BvaW50LWhpdCIsIHRo
aXMuX25hdGl2ZUJyZWFrcG9pbnRIaXQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoImRlYnVnZ2VyLXJlc3VtZWQiLCB0aGlzLl9kZWJ1Z2dl
clJlc3VtZWQsIHRoaXMpOwogfQogCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0
aXZlQnJlYWtwb2ludFR5cGVzID0geworICAgIERPTTogIkRPTSIsCisgICAgRXZlbnRMaXN0ZW5l
cjogIkV2ZW50TGlzdGVuZXIiLAorICAgIFhIUjogIlhIUiIKK30KKwogV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKLSAgICBjcmVhdGVET01CcmVha3BvaW50OiBm
dW5jdGlvbihub2RlSWQsIGRvbUV2ZW50VHlwZSwgZGlzYWJsZWQpCisgICAgY3JlYXRlRE9NQnJl
YWtwb2ludDogZnVuY3Rpb24obm9kZUlkLCB0eXBlLCBkaXNhYmxlZCkKICAgICB7Ci0gICAgICAg
IHZhciBmcm9udGVuZElkID0gImRvbToiICsgbm9kZUlkICsgIjoiICsgZG9tRXZlbnRUeXBlOwot
ICAgICAgICBpZiAoZnJvbnRlbmRJZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKKyAgICAg
ICAgdmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKG5vZGVJZCk7Cisg
ICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludCh0aGlzLCBmcm9udGVuZElk
LCBub2RlSWQsIGRvbUV2ZW50VHlwZSk7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRz
W2Zyb250ZW5kSWRdID0gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRo
aXMuX2Zvcm1hdERPTUJyZWFrcG9pbnRJZChub2RlSWQsIHR5cGUpOworICAgICAgICBpZiAoYnJl
YWtwb2ludElkIGluIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5ET01CcmVha3Bv
aW50KHRoaXMsIGJyZWFrcG9pbnRJZCwgIWRpc2FibGVkLCBub2RlLCB0eXBlKTsKKyAgICAgICAg
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAg
ICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZG9tLWJyZWFrcG9pbnQtYWRkZWQiLCBicmVh
a3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWRpc2FibGVkOwogICAgICAg
ICByZXR1cm4gYnJlYWtwb2ludDsKICAgICB9LAogCiAgICAgY3JlYXRlRXZlbnRMaXN0ZW5lckJy
ZWFrcG9pbnQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkKICAgICB7Ci0gICAgICAgIHZhciBmcm9udGVu
ZElkID0gZXZlbnROYW1lOwotICAgICAgICBpZiAoZnJvbnRlbmRJZCBpbiB0aGlzLl9uYXRpdmVC
cmVha3BvaW50cykKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX2Zvcm1hdEV2ZW50
TGlzdGVuZXJCcmVha3BvaW50SWQoZXZlbnROYW1lKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRJ
ZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFr
cG9pbnQodGhpcywgZnJvbnRlbmRJZCwgZXZlbnROYW1lKTsKLSAgICAgICAgdGhpcy5fbmF0aXZl
QnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBicmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhpcywgYnJl
YWtwb2ludElkLCB0cnVlLCBldmVudE5hbWUpOworICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3Bv
aW50c1ticmVha3BvaW50SWRdID0gYnJlYWtwb2ludDsKKyAgICAgICAgdGhpcy5fdXBkYXRlTmF0
aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJldmVudC1saXN0ZW5lci1icmVha3BvaW50LWFkZGVkIiwgeyBicmVha3BvaW50
OiBicmVha3BvaW50LCBldmVudE5hbWU6IGV2ZW50TmFtZSB9KTsKLSAgICAgICAgYnJlYWtwb2lu
dC5lbmFibGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAog
ICAgIGNyZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCwgZGlzYWJsZWQpCiAgICAgewot
ICAgICAgICB2YXIgZnJvbnRlbmRJZCA9IHVybDsKLSAgICAgICAgaWYgKGZyb250ZW5kSWQgaW4g
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlz
Ll9mb3JtYXRYSFJCcmVha3BvaW50SWQodXJsKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBp
biB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludCh0aGlzLCBm
cm9udGVuZElkLCB1cmwpOwotICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVu
ZElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3Bl
Y3Rvci5YSFJCcmVha3BvaW50KHRoaXMsIGJyZWFrcG9pbnRJZCwgIWRpc2FibGVkLCB1cmwpOwor
ICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3BvaW50SWRdID0gYnJlYWtwb2lu
dDsKKyAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CiAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJ4aHItYnJlYWtwb2ludC1hZGRl
ZCIsIGJyZWFrcG9pbnQpOwotICAgICAgICBicmVha3BvaW50LmVuYWJsZWQgPSAhZGlzYWJsZWQK
ICAgICAgICAgcmV0dXJuIGJyZWFrcG9pbnQ7CiAgICAgfSwKIAotICAgIGZpbmRCcmVha3BvaW50
OiBmdW5jdGlvbihiYWNrZW5kQnJlYWtwb2ludElkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFtiYWNrZW5kQnJlYWtwb2ludElkXTsKLSAgICB9LAot
Ci0gICAgX3JlbW92ZU5hdGl2ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAg
X3NldE5hdGl2ZUJyZWFrcG9pbnRFbmFibGVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGVuYWJs
ZWQpCiAgICAgewotICAgICAgICBpZiAoYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCi0gICAg
ICAgICAgICB0aGlzLl9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJvbUJhY2tlbmQoYnJlYWtwb2lu
dCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3BvaW50Ll9m
cm9udGVuZElkXTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRp
bmdzKCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1v
dmVkIik7Ci0gICAgfSwKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVh
a3BvaW50c1ticmVha3BvaW50SWRdOwogCi0gICAgX3NldE5hdGl2ZUJyZWFrcG9pbnRFbmFibGVk
OiBmdW5jdGlvbihicmVha3BvaW50LCBlbmFibGVkKQotICAgIHsKLSAgICAgICAgaWYgKGJyZWFr
cG9pbnQuX2JlaW5nU2V0T25CYWNrZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBp
ZiAoYnJlYWtwb2ludC5lbmFibGVkID09PSBlbmFibGVkKQotICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX3NldE5hdGl2ZUJyZWFrcG9p
bnRPbkJhY2tlbmQoYnJlYWtwb2ludCk7CisgICAgICAgICAgICBicmVha3BvaW50Ll9lbmFibGUo
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlTmF0aXZlQnJlYWtwb2lu
dEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgYnJlYWtwb2ludC5fZGlzYWJs
ZSgpOworCisgICAgICAgIGJyZWFrcG9pbnQuX2VuYWJsZWQgPSBlbmFibGVkOworICAgICAgICB0
aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKKyAgICAgICAgYnJlYWtw
b2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFuZ2VkIik7CiAgICAgfSwK
IAotICAgIF9zZXROYXRpdmVCcmVha3BvaW50T25CYWNrZW5kOiBmdW5jdGlvbihicmVha3BvaW50
KQorICAgIF9yZW1vdmVOYXRpdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50SWQpCiAg
ICAgewotICAgICAgICBicmVha3BvaW50Ll9iZWluZ1NldE9uQmFja2VuZCA9IHRydWU7Ci0gICAg
ICAgIHZhciBkYXRhID0geyB0eXBlOiBicmVha3BvaW50Ll90eXBlLCBjb25kaXRpb246IGJyZWFr
cG9pbnQuX2NvbmRpdGlvbiB9OwotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldE5hdGl2ZUJy
ZWFrcG9pbnQoZGF0YSwgZGlkU2V0TmF0aXZlQnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3BvaW50SWRd
OwogCi0gICAgICAgIGZ1bmN0aW9uIGRpZFNldE5hdGl2ZUJyZWFrcG9pbnQoYmFja2VuZEJyZWFr
cG9pbnRJZCkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJh
Y2tlbmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYWNrZW5kQnJlYWtwb2ludElkICE9PSAi
IikgewotICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQuX2JhY2tlbmRJZCA9IGJhY2tlbmRCcmVh
a3BvaW50SWQ7Ci0gICAgICAgICAgICAgICAgdGhpcy5fYmFja2VuZElkVG9CcmVha3BvaW50W2Jh
Y2tlbmRCcmVha3BvaW50SWRdID0gYnJlYWtwb2ludDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUtY2hhbmdlZCIp
OwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7
Ci0gICAgICAgIH0KLSAgICB9LAorICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQorICAg
ICAgICAgICAgYnJlYWtwb2ludC5fZGlzYWJsZSgpOwogCi0gICAgX3JlbW92ZU5hdGl2ZUJyZWFr
cG9pbnRGcm9tQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIElu
c3BlY3RvckJhY2tlbmQucmVtb3ZlTmF0aXZlQnJlYWtwb2ludChicmVha3BvaW50Ll9iYWNrZW5k
SWQpOwotICAgICAgICBkZWxldGUgdGhpcy5fYmFja2VuZElkVG9CcmVha3BvaW50W2JyZWFrcG9p
bnQuX2JhY2tlbmRJZF0KLSAgICAgICAgZGVsZXRlIGJyZWFrcG9pbnQuX2JhY2tlbmRJZDsKLSAg
ICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImVuYWJsZS1jaGFuZ2Vk
Iik7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1ticmVha3BvaW50SWRd
OwogICAgICAgICB0aGlzLl91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKKyAg
ICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92ZWQiKTsKICAg
ICB9LAogCiAgICAgX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5nczogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgdmFyIHBlcnNpc3RlbnRCcmVha3BvaW50cyA9IFtdOworICAgICAg
ICB2YXIgYnJlYWtwb2ludHMgPSBbXTsKICAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhpcy5fbmF0
aXZlQnJlYWtwb2ludHMpIHsKICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0
aXZlQnJlYWtwb2ludHNbaWRdOwotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuX3BlcnNpc3Rl
bnRDb25kaXRpb24pCi0gICAgICAgICAgICAgICAgcGVyc2lzdGVudEJyZWFrcG9pbnRzLnB1c2go
eyB0eXBlOiBicmVha3BvaW50Ll90eXBlLCBlbmFibGVkOiBicmVha3BvaW50LmVuYWJsZWQsIGNv
bmRpdGlvbjogYnJlYWtwb2ludC5fcGVyc2lzdGVudENvbmRpdGlvbiB9KTsKKyAgICAgICAgICAg
IGJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludC5fcGVyc2lzdCgpKTsKICAgICAgICAgfQotICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMgPSBwZXJzaXN0ZW50
QnJlYWtwb2ludHM7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5uYXRpdmVCcmVha3Bv
aW50cyA9IGJyZWFrcG9pbnRzOwogICAgIH0sCiAKICAgICBfbmF0aXZlQnJlYWtwb2ludEhpdDog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQu
ZGF0YS5icmVha3BvaW50SWQ7CisgICAgICAgIHZhciBldmVudERhdGEgPSBldmVudC5kYXRhOwor
CisgICAgICAgIHZhciBicmVha3BvaW50SWQ7CisgICAgICAgIGlmICgibm9kZUlkIiBpbiBldmVu
dERhdGEpCisgICAgICAgICAgICBicmVha3BvaW50SWQgPSB0aGlzLl9mb3JtYXRET01CcmVha3Bv
aW50SWQoZXZlbnREYXRhLm5vZGVJZCwgZXZlbnREYXRhLnR5cGUpOworICAgICAgICBlbHNlIGlm
ICgiZXZlbnROYW1lIiBpbiBldmVudERhdGEpCisgICAgICAgICAgICBicmVha3BvaW50SWQgPSB0
aGlzLl9mb3JtYXRFdmVudExpc3RlbmVyQnJlYWtwb2ludElkKGV2ZW50RGF0YS5ldmVudE5hbWUp
OworICAgICAgICBlbHNlIGlmICgiYnJlYWtwb2ludFVSTCIgaW4gZXZlbnREYXRhKQorICAgICAg
ICAgICAgYnJlYWtwb2ludElkID0gdGhpcy5fZm9ybWF0WEhSQnJlYWtwb2ludElkKGV2ZW50RGF0
YS5icmVha3BvaW50VVJMKTsKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JhY2tl
bmRJZFRvQnJlYWtwb2ludFticmVha3BvaW50SWRdOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CiAgICAgICAgIGlmICghYnJl
YWtwb2ludCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBicmVha3BvaW50LmhpdCA9
IHRydWU7Ci0gICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJoaXQt
c3RhdGUtY2hhbmdlZCIpOwogICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludCA9IGJyZWFr
cG9pbnQ7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJuYXRpdmUtYnJl
YWtwb2ludC1oaXQiLCB7IGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQsIGV2ZW50RGF0YTogZXZlbnRE
YXRhIH0pOwogICAgIH0sCiAKICAgICBfZGVidWdnZXJSZXN1bWVkOiBmdW5jdGlvbihldmVudCkK
QEAgLTE2MSwxNyArMTQ4LDE5IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmICghdGhpcy5fbGFzdEhpdEJyZWFrcG9pbnQpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX2xhc3RIaXRCcmVha3BvaW50LmhpdCA9IGZhbHNl
OwotICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoImhpdC1zdGF0ZS1jaGFuZ2VkIik7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9sYXN0SGl0QnJl
YWtwb2ludDsKICAgICB9LAogCiAgICAgcmVzdG9yZUJyZWFrcG9pbnRzOiBmdW5jdGlvbigpCiAg
ICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50QnJlYWtwb2lu
dHMoKTsKKyAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHMgPSBbXTsKICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYg
KGJyZWFrcG9pbnRzW2ldLnR5cGUgPT09ICJFdmVudExpc3RlbmVyIikKKyAgICAgICAgICAgIGlm
IChicmVha3BvaW50c1tpXS50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIu
TmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAgICAgICAgICB0aGlzLl9kb21CcmVh
a3BvaW50cy5wdXNoKGJyZWFrcG9pbnRzW2ldKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFr
cG9pbnRzW2ldLnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVC
cmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0
ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbi5ldmVudE5h
bWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PT0gIlhIUiIp
CisgICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUikKICAgICAgICAg
ICAgICAgICB0aGlzLmNyZWF0ZVhIUkJyZWFrcG9pbnQoYnJlYWtwb2ludHNbaV0uY29uZGl0aW9u
LnVybCwgIWJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpOwogICAgICAgICB9CiAgICAgfSwKQEAgLTE4
NSw2ICsxNzQsOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgaWYgKHBlbmRpbmdDYWxscykKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzW2ldLnR5cGUgIT09IFdlYkluc3Bl
Y3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRE9NKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IGJyZWFrcG9pbnRzW2ldOwogICAgICAgICAgICAgICAgIHZhciBub2RlSWQgPSBwYXRoVG9Ob2Rl
SWRbYnJlYWtwb2ludC5jb25kaXRpb24ucGF0aF07CiAgICAgICAgICAgICAgICAgaWYgKG5vZGVJ
ZCkKQEAgLTE5MiwxMSArMTgzLDExIEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB2YXIgYnJl
YWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50QnJlYWtwb2ludHMoKTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gdGhpcy5fZG9tQnJlYWtwb2ludHM7CiAgICAgICAgIHZhciBwYXRoVG9Ob2Rl
SWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9IDA7CiAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChi
cmVha3BvaW50c1tpXS50eXBlICE9PSAiRE9NIikKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50
c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtw
b2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHZh
ciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBhdGg7CiAgICAgICAgICAgICBpZiAo
cGF0aCBpbiBwYXRoVG9Ob2RlSWQpCkBAIC0yMjEsNDcgKzIxMiw2MyBAQCBXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0sCiAKKyAgICBfZm9ybWF0RE9NQnJlYWtwb2ludElkOiBmdW5jdGlvbihub2RlSWQsIHR5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gImRvbToiICsgbm9kZUlkICsgIjoiICsgdHlwZTsK
KyAgICB9LAorCisgICAgX2Zvcm1hdEV2ZW50TGlzdGVuZXJCcmVha3BvaW50SWQ6IGZ1bmN0aW9u
KGV2ZW50TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiAiZXZlbnRMaXN0bmVyOiIgKyBldmVu
dE5hbWU7CisgICAgfSwKKworICAgIF9mb3JtYXRYSFJCcmVha3BvaW50SWQ6IGZ1bmN0aW9uKHVy
bCkKKyAgICB7CisgICAgICAgIHJldHVybiAieGhyOiIgKyB1cmw7CisgICAgfSwKKwogICAgIHJl
c2V0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50cyA9
IHt9OwotICAgICAgICB0aGlzLl9iYWNrZW5kSWRUb0JyZWFrcG9pbnQgPSB7fTsKICAgICB9CiB9
CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX19wcm90b19fID0g
V2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5OYXRpdmVCcmVh
a3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgdHlwZSkKK1dlYkluc3BlY3Rv
ci5OYXRpdmVCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgaWQsIGVuYWJsZWQpCiB7CiAg
ICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7Ci0gICAgdGhpcy5fX2Zyb250ZW5kSWQgPSBmcm9u
dGVuZElkOwotICAgIHRoaXMuX190eXBlID0gdHlwZTsKKyAgICB0aGlzLl9pZCA9IGlkOworICAg
IHRoaXMuX2VuYWJsZWQgPSBlbmFibGVkOworICAgIHRoaXMuX2hpdCA9IGZhbHNlOwogfQogCiBX
ZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgZ2V0IGVuYWJs
ZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfYmFja2VuZElkIiBpbiB0aGlzOworICAgICAg
ICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKICAgICB9LAogCiAgICAgc2V0IGVuYWJsZWQoZW5hYmxl
ZCkKICAgICB7Ci0gICAgICAgIHRoaXMuX21hbmFnZXIuX3NldE5hdGl2ZUJyZWFrcG9pbnRFbmFi
bGVkKHRoaXMsIGVuYWJsZWQpOworICAgICAgICB0aGlzLl9tYW5hZ2VyLl9zZXROYXRpdmVCcmVh
a3BvaW50RW5hYmxlZCh0aGlzLl9pZCwgZW5hYmxlZCk7CiAgICAgfSwKIAotICAgIHJlbW92ZTog
ZnVuY3Rpb24oKQorICAgIGdldCBoaXQoKQogICAgIHsKLSAgICAgICAgdGhpcy5fbWFuYWdlci5f
cmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh0aGlzKTsKLSAgICAgICAgdGhpcy5fb25SZW1vdmUoKTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2hpdDsKICAgICB9LAogCi0gICAgZ2V0IF9mcm9udGVuZElk
KCkKKyAgICBzZXQgaGl0KGhpdCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9fZnJvbnRl
bmRJZDsKKyAgICAgICAgdGhpcy5faGl0ID0gaGl0OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycygiaGl0LXN0YXRlLWNoYW5nZWQiKTsKICAgICB9LAogCi0gICAgZ2V0IF90
eXBlKCkKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9fdHlwZTsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh0
aGlzLl9pZCk7CisgICAgICAgIHRoaXMuX29uUmVtb3ZlKCk7CiAgICAgfSwKIAogICAgIF9jb21w
YXJlOiBmdW5jdGlvbih4LCB5KQpAQCAtMjc4LDI0ICsyODUsMjMgQEAgV2ViSW5zcGVjdG9yLk5h
dGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtw
b2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7
CiAKLVdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRl
bmRJZCwgbm9kZUlkLCBkb21FdmVudFR5cGUpCitXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludCA9
IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkLCBub2RlLCB0eXBlKQogewotICAgIFdlYklu
c3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgZnJvbnRlbmRJZCwg
IkRPTSIpOwotICAgIHRoaXMuX25vZGVJZCA9IG5vZGVJZDsKLSAgICB0aGlzLl9kb21FdmVudFR5
cGUgPSBkb21FdmVudFR5cGU7Ci0gICAgdGhpcy5fY29uZGl0aW9uID0geyBub2RlSWQ6IHRoaXMu
X25vZGVJZCwgdHlwZTogdGhpcy5fZG9tRXZlbnRUeXBlIH07Ci0KLSAgICB2YXIgbm9kZSA9IFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQodGhpcy5fbm9kZUlkKTsKLSAgICBpZiAobm9k
ZSkgewotICAgICAgICBub2RlLmJyZWFrcG9pbnRzW3RoaXMuX2RvbUV2ZW50VHlwZV0gPSB0aGlz
OwotICAgICAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9uID0geyBwYXRoOiBub2RlLnBhdGgo
KSwgdHlwZTogdGhpcy5fZG9tRXZlbnRUeXBlIH07Ci0gICAgfQorICAgIFdlYkluc3BlY3Rvci5O
YXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwgaWQsIGVuYWJsZWQpOworICAgIHRo
aXMuX25vZGUgPSBub2RlOworICAgIHRoaXMuX25vZGVJZCA9IG5vZGUuaWQ7CisgICAgdGhpcy5f
cGF0aCA9IG5vZGUucGF0aCgpOworICAgIHRoaXMuX3R5cGUgPSB0eXBlOworICAgIGlmIChlbmFi
bGVkKQorICAgICAgICB0aGlzLl9lbmFibGUoKTsKKworICAgIG5vZGUuYnJlYWtwb2ludHNbdGhp
cy5fdHlwZV0gPSB0aGlzOwogfQogCiBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5
cGUgPSB7CiAgICAgY29tcGFyZVRvOiBmdW5jdGlvbihvdGhlcikKICAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl9jb21wYXJlKHRoaXMuX2RvbUV2ZW50VHlwZSwgb3RoZXIuX2RvbUV2ZW50VHlw
ZSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21wYXJlKHRoaXMuX3R5cGUsIG90aGVyLl90eXBl
KTsKICAgICB9LAogCiAgICAgcG9wdWxhdGVMYWJlbEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQp
CkBAIC0zMDYsMTMgKzMxMiwxMyBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobGlua2lmaWVkTm9kZSk7CiAgICAg
ICAgIHZhciBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAg
ICAgICBkZXNjcmlwdGlvbi5jbGFzc05hbWUgPSAic291cmNlLXRleHQiOwotICAgICAgICBkZXNj
cmlwdGlvbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5kb21CcmVha3BvaW50VHlwZUxhYmVs
KHRoaXMuX2RvbUV2ZW50VHlwZSk7CisgICAgICAgIGRlc2NyaXB0aW9uLnRleHRDb250ZW50ID0g
V2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRUeXBlTGFiZWwodGhpcy5fdHlwZSk7CiAgICAgICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24pOwogICAgIH0sCiAKICAgICBwb3B1bGF0
ZVN0YXR1c01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50LCBldmVudERhdGEpCiAgICAg
ewotICAgICAgICB2YXIgc3Vic3RpdHV0aW9ucyA9IFtXZWJJbnNwZWN0b3IuZG9tQnJlYWtwb2lu
dFR5cGVMYWJlbCh0aGlzLl9kb21FdmVudFR5cGUpLCBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1l
bnRzLmxpbmtpZnlOb2RlQnlJZCh0aGlzLl9ub2RlSWQpXTsKKyAgICAgICAgdmFyIHN1YnN0aXR1
dGlvbnMgPSBbV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRUeXBlTGFiZWwodGhpcy5fdHlwZSks
IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMubGlua2lmeU5vZGVCeUlkKHRoaXMuX25vZGVJ
ZCldOwogICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHsKICAgICAgICAgICAgIHM6IGZ1bmN0aW9u
KHN1YnN0aXR1dGlvbikKICAgICAgICAgICAgIHsKQEAgLTMyNSw3ICszMzEsNyBAQCBXZWJJbnNw
ZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgYiA9IGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKGIpOwogICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGls
ZChiKTsKICAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5fZG9tRXZlbnRUeXBlID09PSBXZWJJ
bnNwZWN0b3IuRE9NQnJlYWtwb2ludFR5cGVzLlN1YnRyZWVNb2RpZmllZCkgeworICAgICAgICBp
ZiAodGhpcy5fdHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnRUeXBlcy5TdWJ0cmVl
TW9kaWZpZWQpIHsKICAgICAgICAgICAgIHZhciB0YXJnZXROb2RlID0gV2ViSW5zcGVjdG9yLnBh
bmVscy5lbGVtZW50cy5saW5raWZ5Tm9kZUJ5SWQoZXZlbnREYXRhLnRhcmdldE5vZGVJZCk7CiAg
ICAgICAgICAgICBpZiAoZXZlbnREYXRhLmluc2VydGlvbikgewogICAgICAgICAgICAgICAgIGlm
IChldmVudERhdGEudGFyZ2V0Tm9kZUlkICE9PSB0aGlzLl9ub2RlSWQpCkBAIC0zMzgsMjIgKzM0
NCwzNiBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuZm9ybWF0TG9jYWxpemVkKCJQYXVzZWQgb24gYSBcIiVzXCIgYnJl
YWtwb2ludCBzZXQgb24gJXMuIiwgc3Vic3RpdHV0aW9ucywgZm9ybWF0dGVycywgIiIsIGFwcGVu
ZCk7CiAgICAgfSwKIAorICAgIF9lbmFibGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuc2V0RE9NQnJlYWtwb2ludCh0aGlzLl9ub2RlSWQsIHRoaXMuX3R5cGUp
OworICAgIH0sCisKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5yZW1vdmVET01CcmVha3BvaW50KHRoaXMuX25vZGVJZCwgdGhpcy5fdHlw
ZSk7CisgICAgfSwKKworICAgIF9wZXJzaXN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgdHlwZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50
VHlwZXMuRE9NOworICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBlbmFibGVkOiB0aGlzLl9l
bmFibGVkLCBjb25kaXRpb246IHsgcGF0aDogdGhpcy5fcGF0aCwgdHlwZTogdGhpcy5fdHlwZSB9
IH07CisgICAgfSwKKwogICAgIF9vblJlbW92ZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAg
dmFyIG5vZGUgPSBXZWJJbnNwZWN0b3IuZG9tQWdlbnQubm9kZUZvcklkKHRoaXMuX25vZGVJZCk7
Ci0gICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgZGVsZXRlIG5vZGUuYnJlYWtwb2ludHNb
dGhpcy5fZG9tRXZlbnRUeXBlXTsKKyAgICAgICAgZGVsZXRlIHRoaXMuX25vZGUuYnJlYWtwb2lu
dHNbdGhpcy5fdHlwZV07CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90
eXBlOwogCi1XZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlvbiht
YW5hZ2VyLCBmcm9udGVuZElkLCBldmVudE5hbWUpCitXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5l
ckJyZWFrcG9pbnQgPSBmdW5jdGlvbihtYW5hZ2VyLCBpZCwgZW5hYmxlZCwgZXZlbnROYW1lKQog
ewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwg
ZnJvbnRlbmRJZCwgIkV2ZW50TGlzdGVuZXIiKTsKKyAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJl
YWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsIGlkLCBlbmFibGVkKTsKICAgICB0aGlzLl9ldmVu
dE5hbWUgPSBldmVudE5hbWU7Ci0gICAgdGhpcy5fY29uZGl0aW9uID0geyBldmVudE5hbWU6IHRo
aXMuX2V2ZW50TmFtZSB9OwotICAgIHRoaXMuX3BlcnNpc3RlbnRDb25kaXRpb24gPSB0aGlzLl9j
b25kaXRpb247CisgICAgaWYgKGVuYWJsZWQpCisgICAgICAgIHRoaXMuX2VuYWJsZSgpOwogfQog
CiBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQuZXZlbnROYW1lRm9yVUkgPSBm
dW5jdGlvbihldmVudE5hbWUpCkBAIC0zODgsMTcgKzQwOCwzMyBAQCBXZWJJbnNwZWN0b3IuRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIF91aUV2ZW50TmFtZTogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVy
QnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSSh0aGlzLl9ldmVudE5hbWUpOworICAgIH0sCisKKyAg
ICBfZW5hYmxlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNl
dEV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRoaXMuX2V2ZW50TmFtZSk7CisgICAgfSwKKworICAg
IF9kaXNhYmxlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJl
bW92ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRoaXMuX2V2ZW50TmFtZSk7CisgICAgfSwKKwor
ICAgIF9wZXJzaXN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdHlwZSA9IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0
ZW5lcjsKKyAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgZW5hYmxlZDogdGhpcy5fZW5hYmxl
ZCwgY29uZGl0aW9uOiB7IGV2ZW50TmFtZTogdGhpcy5fZXZlbnROYW1lIH0gfTsKICAgICB9CiB9
CiAKIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90
b19fID0gV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlOwogCi1XZWJJbnNw
ZWN0b3IuWEhSQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGZyb250ZW5kSWQsIHVybCkK
K1dlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgaWQsIGVuYWJs
ZWQsIHVybCkKIHsKLSAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5jYWxsKHRoaXMs
IG1hbmFnZXIsIGZyb250ZW5kSWQsICJYSFIiKTsKKyAgICBXZWJJbnNwZWN0b3IuTmF0aXZlQnJl
YWtwb2ludC5jYWxsKHRoaXMsIG1hbmFnZXIsIGlkLCBlbmFibGVkKTsKICAgICB0aGlzLl91cmwg
PSB1cmw7Ci0gICAgdGhpcy5fY29uZGl0aW9uID0geyB1cmw6IHRoaXMuX3VybCB9OwotICAgIHRo
aXMuX3BlcnNpc3RlbnRDb25kaXRpb24gPSB0aGlzLl9jb25kaXRpb247CisgICAgaWYgKGVuYWJs
ZWQpCisgICAgICAgIHRoaXMuX2VuYWJsZSgpOwogfQogCiBXZWJJbnNwZWN0b3IuWEhSQnJlYWtw
b2ludC5wcm90b3R5cGUgPSB7CkBAIC00MjcsNiArNDYzLDIyIEBAIFdlYkluc3BlY3Rvci5YSFJC
cmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzdGF0dXMgPSBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIlBhdXNlZCBvbiBhIFhNTEh0dHBSZXF1ZXN0LiIpOwogICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0YXR1cykpOwor
ICAgIH0sCisKKyAgICBfZW5hYmxlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldFhIUkJyZWFrcG9pbnQodGhpcy5fdXJsKTsKKyAgICB9LAorCisgICAgX2Rp
c2FibGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3Zl
WEhSQnJlYWtwb2ludCh0aGlzLl91cmwpOworICAgIH0sCisKKyAgICBfcGVyc2lzdDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLlhIUjsKKyAgICAgICAgcmV0dXJuIHsgdHlwZTog
dHlwZSwgZW5hYmxlZDogdGhpcy5fZW5hYmxlZCwgY29uZGl0aW9uOiB7IHVybDogdGhpcy5fdXJs
IH0gfTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9D
YWxsU3RhY2tTaWRlYmFyUGFuZS5qcwppbmRleCAxNmM1ZmU0Li44Yjc0MTI2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCkBA
IC0yNiw3ICsyNiw3IEBACiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUgPSBmdW5j
dGlvbigpCiB7CiAgICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJDYWxsIFN0YWNrIikpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoIm5hdGl2ZS1icmVha3BvaW50LWhpdCIsIHRoaXMuX25h
dGl2ZUJyZWFrcG9pbnRIaXQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9uYXRp
dmVCcmVha3BvaW50SGl0LCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5h
ZGRFdmVudExpc3RlbmVyKCJzY3JpcHQtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9zY3JpcHRCcmVh
a3BvaW50SGl0LCB0aGlzKTsKIH0KIApAQCAtMTczLDkgKzE3Myw3IEBAIFdlYkluc3BlY3Rvci5D
YWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICBfbmF0aXZlQnJlYWtwb2lu
dEhpdDogIGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBX
ZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQoZXZlbnQuZGF0YS5i
cmVha3BvaW50SWQpOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50OwogICAg
ICAgICB2YXIgc3RhdHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKICAgICAgICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOwog
ICAgICAgICBicmVha3BvaW50LnBvcHVsYXRlU3RhdHVzTWVzc2FnZUVsZW1lbnQoc3RhdHVzTWVz
c2FnZUVsZW1lbnQsIGV2ZW50LmRhdGEuZXZlbnREYXRhKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKaW5kZXggMzdmNGRkMC4uYTE3MDAxOCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKQEAgLTEzNCw4ICsx
MzQsNyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IGlmIChkZXRhaWxzLmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRXZlbnRUeXBl
cy5KYXZhU2NyaXB0UGF1c2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChkZXRh
aWxzLmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRXZlbnRUeXBlcy5OYXRpdmVC
cmVha3BvaW50KSB7Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZGV0YWlscy5ldmVu
dERhdGEuYnJlYWtwb2ludElkOwotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoIm5hdGl2ZS1icmVha3BvaW50LWhpdCIsIHsgYnJlYWtwb2ludElkOiBicmVha3BvaW50
SWQsIGV2ZW50RGF0YTogZGV0YWlscy5ldmVudERhdGEgfSk7CisgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycygibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgZGV0YWlscy5l
dmVudERhdGEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76190</attachid>
            <date>2010-12-10 06:59:59 -0800</date>
            <delta_ts>2010-12-10 07:04:55 -0800</delta_ts>
            <desc>Comments addressed.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43980</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDg5YzVkOC4uNDhjZmUzNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0xMi0xMCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRyb2R1Y2UgYSBwYWlyIG9m
IHNldC9yZW1vdmUgbWV0aG9kcyBmb3IgZWFjaCBicmVha3BvaW50IHR5cGUuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDgwOQorCisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5z
cGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVy
OjpzZXRFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpyZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpoYXNFdmVudExpc3RlbmVyQnJlYWtwb2ludCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRYSFJCcmVha3BvaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZVhIUkJyZWFr
cG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aGFzWEhSQnJl
YWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpjbGVhck5h
dGl2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtPbk5vZGVJbnNlcnRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJyZWFrT25O
b2RlUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxk
QnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6ZGVzY3JpcHRpb25Gb3JET01FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxJbnNlcnRET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246OndpbGxSZW1vdmVET01Ob2RlSW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRySW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxTZW5kWE1MSHR0cFJl
cXVlc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6
cGF1c2VPbk5hdGl2ZUV2ZW50SWZOZWVkZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvQnJlYWtwb2ludE1hbmFnZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5YSFJCcmVh
a3BvaW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQ
YW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNhbGxTdGFja1NpZGViYXJQYW5lKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUuX25hdGl2
ZUJyZWFrcG9pbnRIaXQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJN
b2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5k
ZWJ1Z2dlclBhdXNlZCk6CisKIDIwMTAtMTItMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBHYXZpbiBCYXJyYWNsb3VnaC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCmluZGV4IDZkOGYyMmIuLmMyMTRmNzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlk
bApAQCAtMTQ1LDggKzE0NSwxMiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVi
dWdnZXJdIHZvaWQgZWRpdFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIGluIFN0cmlu
ZyBuZXdDb250ZW50LCBvdXQgYm9vbGVhbiBzdWNjZXNzLCBvdXQgU3RyaW5nIHJlc3VsdCwgb3V0
IFZhbHVlIG5ld0NhbGxGcmFtZXMpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGdl
dFNjcmlwdFNvdXJjZShpbiBTdHJpbmcgc291cmNlSUQsIG91dCBTdHJpbmcgc2NyaXB0U291cmNl
KTsKIAotICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBzZXROYXRpdmVCcmVha3BvaW50
KGluIE9iamVjdCBicmVha3BvaW50LCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCk7Ci0gICAgICAg
IFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoaW4gU3RyaW5n
IGJyZWFrcG9pbnRJZCk7CisgICAgICAgIFtkb21haW49RE9NXSB2b2lkIHNldERPTUJyZWFrcG9p
bnQoaW4gbG9uZyBub2RlSWQsIGluIGxvbmcgdHlwZSk7CisgICAgICAgIFtkb21haW49RE9NXSB2
b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQoaW4gbG9uZyBub2RlSWQsIGluIGxvbmcgdHlwZSk7Cisg
ICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVha3BvaW50
KGluIFN0cmluZyBldmVudE5hbWUpOworICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBy
ZW1vdmVFdmVudExpc3RlbmVyQnJlYWtwb2ludChpbiBTdHJpbmcgZXZlbnROYW1lKTsKKyAgICAg
ICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgc2V0WEhSQnJlYWtwb2ludChpbiBTdHJpbmcgdXJs
KTsKKyAgICAgICAgW2RvbWFpbj1JbnNwZWN0b3JdIHZvaWQgcmVtb3ZlWEhSQnJlYWtwb2ludChp
biBTdHJpbmcgdXJsKTsKIAogICAgICAgICBbZG9tYWluPUluc3BlY3Rvcl0gdm9pZCBlbmFibGVQ
cm9maWxlcihpbiBib29sZWFuIGFsd2F5cyk7CiAgICAgICAgIFtkb21haW49SW5zcGVjdG9yXSB2
b2lkIGRpc2FibGVQcm9maWxlcihpbiBib29sZWFuIGFsd2F5cyk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGYwY2Q4Y2YuLmUwNDUzODIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xMjQsMTAgKzEyNCw2IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIkRPTSI7Ci1zdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZXZlbnRMaXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlID0gIkV2
ZW50TGlzdGVuZXIiOwotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHhock5hdGl2ZUJyZWFrcG9p
bnRUeXBlID0gIlhIUiI7Ci0KIGNvbnN0IGNoYXIqIGNvbnN0IEluc3BlY3RvckNvbnRyb2xsZXI6
OkVsZW1lbnRzUGFuZWwgPSAiZWxlbWVudHMiOwogY29uc3QgY2hhciogY29uc3QgSW5zcGVjdG9y
Q29udHJvbGxlcjo6Q29uc29sZVBhbmVsID0gImNvbnNvbGUiOwogY29uc3QgY2hhciogY29uc3Qg
SW5zcGVjdG9yQ29udHJvbGxlcjo6U2NyaXB0c1BhbmVsID0gInNjcmlwdHMiOwpAQCAtMTUyLDcg
KzE0OCw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSog
cGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2luamVjdGVkU2NyaXB0SG9z
dChJbmplY3RlZFNjcmlwdEhvc3Q6OmNyZWF0ZSh0aGlzKSkKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICAsIG1fYXR0YWNoRGVidWdnZXJXaGVuU2hvd24oZmFsc2UpCi0gICAg
LCBtX2xhc3RCcmVha3BvaW50SWQoMCkKKyAgICAsIG1faGFzWEhSQnJlYWtwb2ludFdpdGhFbXB0
eVVSTChmYWxzZSkKICAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpjcmVhdGUodGhpcykpCiAjZW5kaWYKIHsKQEAgLTEzODYsODEgKzEzODIsNTcgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZXN1bWUoKQogICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnJl
c3VtZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldE5hdGl2ZUJyZWFrcG9p
bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtw
b2ludElkKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRFdmVudExpc3RlbmVyQnJlYWtw
b2ludChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAgICAqYnJlYWtwb2ludElkID0gIiI7
Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInR5cGUi
LCAmdHlwZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
b25kaXRpb24gPSBicmVha3BvaW50LT5nZXRPYmplY3QoImNvbmRpdGlvbiIpOwotICAgIGlmICgh
Y29uZGl0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHR5cGUgPT0geGhyTmF0aXZlQnJl
YWtwb2ludFR5cGUpIHsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgaWYgKCFjb25kaXRp
b24tPmdldFN0cmluZygidXJsIiwgJnVybCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICpicmVha3BvaW50SWQgPSBTdHJpbmc6Om51bWJlcigrK21fbGFzdEJyZWFrcG9pbnRJZCk7Ci0g
ICAgICAgIG1fWEhSQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHVybCk7Ci0gICAgICAg
IG1fbmF0aXZlQnJlYWtwb2ludHMuc2V0KCpicmVha3BvaW50SWQsIHR5cGUpOwotICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBldmVudExpc3RlbmVyTmF0aXZlQnJlYWtwb2ludFR5cGUpIHsKLSAgICAg
ICAgU3RyaW5nIGV2ZW50TmFtZTsKLSAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldFN0cmluZygi
ZXZlbnROYW1lIiwgJmV2ZW50TmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlm
IChtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAqYnJlYWtwb2ludElkID0gZXZlbnROYW1lOwotICAgICAg
ICBtX2V2ZW50TGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZlbnROYW1lKTsKLSAgICAgICAgbV9u
YXRpdmVCcmVha3BvaW50cy5zZXQoKmJyZWFrcG9pbnRJZCwgdHlwZSk7Ci0gICAgfSBlbHNlIGlm
ICh0eXBlID09IGRvbU5hdGl2ZUJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGlmICghbV9kb21B
Z2VudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZG91YmxlIG5vZGVJZE51bWJlcjsK
LSAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldE51bWJlcigibm9kZUlkIiwgJm5vZGVJZE51bWJl
cikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRvdWJsZSBkb21CcmVha3BvaW50VHlw
ZU51bWJlcjsKLSAgICAgICAgaWYgKCFjb25kaXRpb24tPmdldE51bWJlcigidHlwZSIsICZkb21C
cmVha3BvaW50VHlwZU51bWJlcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGxvbmcg
bm9kZUlkID0gKGxvbmcpIG5vZGVJZE51bWJlcjsKLSAgICAgICAgbG9uZyBkb21CcmVha3BvaW50
VHlwZSA9IChsb25nKSBkb21CcmVha3BvaW50VHlwZU51bWJlcjsKLSAgICAgICAgKmJyZWFrcG9p
bnRJZCA9IG1fZG9tQWdlbnQtPnNldERPTUJyZWFrcG9pbnQobm9kZUlkLCBkb21CcmVha3BvaW50
VHlwZSk7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludElkLT5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBtX25hdGl2ZUJyZWFrcG9pbnRzLnNldCgqYnJlYWtwb2ludElkLCB0eXBlKTsKLSAgICB9Cisg
ICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMuYWRkKGV2ZW50TmFtZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlTmF0aXZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IGJyZWFrcG9pbnRJZCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlRXZlbnRMaXN0
ZW5lckJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgU3RyaW5nIHR5
cGUgPSBtX25hdGl2ZUJyZWFrcG9pbnRzLnRha2UoYnJlYWtwb2ludElkKTsKLSAgICBpZiAodHlw
ZSA9PSB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSkKLSAgICAgICAgbV9YSFJCcmVha3BvaW50cy5y
ZW1vdmUoYnJlYWtwb2ludElkKTsKLSAgICBlbHNlIGlmICh0eXBlID09IGV2ZW50TGlzdGVuZXJO
YXRpdmVCcmVha3BvaW50VHlwZSkKLSAgICAgICAgbV9ldmVudExpc3RlbmVyQnJlYWtwb2ludHMu
cmVtb3ZlKGJyZWFrcG9pbnRJZCk7Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBkb21OYXRpdmVCcmVh
a3BvaW50VHlwZSkgewotICAgICAgICBpZiAobV9kb21BZ2VudCkKLSAgICAgICAgICAgIG1fZG9t
QWdlbnQtPnJlbW92ZURPTUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKLSAgICB9CisgICAgbV9l
dmVudExpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSk7CiB9CiAKLVN0cmluZyBJ
bnNwZWN0b3JDb250cm9sbGVyOjpmaW5kRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiBldmVudE5hbWUpCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Omhhc0V2ZW50TGlzdGVu
ZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQogewotICAgIHJldHVybiBtX2V2
ZW50TGlzdGVuZXJCcmVha3BvaW50cy5jb250YWlucyhldmVudE5hbWUpID8gZXZlbnROYW1lIDog
IiI7CisgICAgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRzLmNvbnRhaW5zKGV2ZW50
TmFtZSk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpmaW5kWEhSQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHVybCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0WEhSQnJl
YWtwb2ludChjb25zdCBTdHJpbmcmIHVybCkKIHsKLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+OjppdGVyYXRvciBpdCA9IG1fWEhSQnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gbV9Y
SFJCcmVha3BvaW50cy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAodXJsLmNvbnRhaW5zKGl0
LT5zZWNvbmQpKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5maXJzdDsKKyAgICBpZiAodXJsLmlz
RW1wdHkoKSkKKyAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMID0gdHJ1ZTsK
KyAgICBlbHNlCisgICAgICAgIG1fWEhSQnJlYWtwb2ludHMuYWRkKHVybCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVtb3ZlWEhSQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVy
bCkKK3sKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgbV9oYXNYSFJCcmVha3BvaW50
V2l0aEVtcHR5VVJMID0gZmFsc2U7CisgICAgZWxzZQorICAgICAgICBtX1hIUkJyZWFrcG9pbnRz
LnJlbW92ZSh1cmwpOworfQorCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6Omhhc1hIUkJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogYnJlYWtwb2ludFVSTCkKK3sKKyAgICBp
ZiAobV9oYXNYSFJCcmVha3BvaW50V2l0aEVtcHR5VVJMKSB7CisgICAgICAgICpicmVha3BvaW50
VVJMID0gIiI7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBmb3IgKEhhc2hTZXQ8
U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBtX1hIUkJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IG1f
WEhSQnJlYWtwb2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKHVybC5jb250YWlucygq
aXQpKSB7CisgICAgICAgICAgICAqYnJlYWtwb2ludFVSTCA9ICppdDsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y2xlYXJOYXRpdmVCcmVha3Bv
aW50cygpCiB7Ci0gICAgbV9uYXRpdmVCcmVha3BvaW50cy5jbGVhcigpOwogICAgIG1fZXZlbnRM
aXN0ZW5lckJyZWFrcG9pbnRzLmNsZWFyKCk7CiAgICAgbV9YSFJCcmVha3BvaW50cy5jbGVhcigp
OwotICAgIG1fbGFzdEJyZWFrcG9pbnRJZCA9IDA7CisgICAgbV9oYXNYSFJCcmVha3BvaW50V2l0
aEVtcHR5VVJMID0gZmFsc2U7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oCmluZGV4IDA4NjVhM2EuLjE0ZDU2MzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKQEAgLTI1NSw4ICsyNTUsMTIgQEAgcHVibGljOgogICAgIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQqIGRlYnVnZ2VyQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnZ2VyQWdlbnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlc3VtZSgpOwogCi0gICAgdm9pZCBzZXRO
YXRpdmVCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50LCBT
dHJpbmcqIGJyZWFrcG9pbnRJZCk7Ci0gICAgdm9pZCByZW1vdmVOYXRpdmVCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKKyAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAgICB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAgICBib29sIGhhc0V2
ZW50TGlzdGVuZXJCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKTsKKyAgICB2b2lk
IHNldFhIUkJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIHZvaWQgcmVtb3ZlWEhS
QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCk7CisgICAgYm9vbCBoYXNYSFJCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGJyZWFrcG9pbnRVUkwpOwogI2VuZGlmCiAKICAg
ICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQobG9uZyB0ZXN0Q2FsbElkLCBjb25zdCBT
dHJpbmcmIHNjcmlwdCk7CkBAIC0zMDYsOCArMzEwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRv
Z2dsZVJlY29yZEJ1dHRvbihib29sKTsKICAgICB2b2lkIGVuYWJsZURlYnVnZ2VyRnJvbUZyb250
ZW5kKGJvb2wgYWx3YXlzKTsKIAotICAgIFN0cmluZyBmaW5kRXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUpOwotICAgIFN0cmluZyBmaW5kWEhSQnJlYWtwb2lu
dChjb25zdCBTdHJpbmcmIHVybCk7CiAgICAgdm9pZCBjbGVhck5hdGl2ZUJyZWFrcG9pbnRzKCk7
CiAjZW5kaWYKICNpZiBFTkFCTEUoREFUQUJBU0UpCkBAIC0zODYsMTEgKzM4OCw5IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2F0dGFjaERlYnVnZ2VyV2hlblNob3duOwogICAgIE93blB0cjxJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50PiBtX2RlYnVnZ2VyQWdlbnQ7CiAKLSAgICBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBtX25hdGl2ZUJyZWFrcG9pbnRzOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2V2
ZW50TGlzdGVuZXJCcmVha3BvaW50czsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX1hI
UkJyZWFrcG9pbnRzOwotCi0gICAgdW5zaWduZWQgaW50IG1fbGFzdEJyZWFrcG9pbnRJZDsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9YSFJCcmVha3BvaW50czsKKyAgICBib29sIG1faGFzWEhSQnJl
YWtwb2ludFdpdGhFbXB0eVVSTDsKIAogICAgIE93blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50
PiBtX3Byb2ZpbGVyQWdlbnQ7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcAppbmRleCAyOTcxNWI0Li5jYmJhNzVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCkBAIC03NjAsMTcgKzc2MCwxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZWFyY2hDYW5jZWxlZCgpCiAgICAgbV9zZWFyY2hSZXN1bHRzLmNsZWFyKCk7CiB9CiAK
LVN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25nIG5vZGVJZCwg
bG9uZyB0eXBlKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RE9NQnJlYWtwb2ludChsb25n
IG5vZGVJZCwgbG9uZyB0eXBlKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIFN0cmluZyBicmVh
a3BvaW50SWQgPSBjcmVhdGVCcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKTsKLSAgICBpZiAobV9p
ZFRvQnJlYWtwb2ludC5jb250YWlucyhicmVha3BvaW50SWQpKQotICAgICAgICByZXR1cm4gIiI7
Ci0KLSAgICBtX2lkVG9CcmVha3BvaW50LnNldChicmVha3BvaW50SWQsIHN0ZDo6bWFrZV9wYWly
KG5vZGVJZCwgdHlwZSkpOworICAgICAgICByZXR1cm47CiAKICAgICB1aW50MzJfdCByb290Qml0
ID0gMSA8PCB0eXBlOwogICAgIG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1fYnJlYWtwb2ludHMu
Z2V0KG5vZGUpIHwgcm9vdEJpdCk7CkBAIC03NzgsMTkgKzc3MiwxNSBAQCBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSkKICAg
ICAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgY2hpbGQ7IGNo
aWxkID0gaW5uZXJOZXh0U2libGluZyhjaGlsZCkpCiAgICAgICAgICAgICB1cGRhdGVTdWJ0cmVl
QnJlYWtwb2ludHMoY2hpbGQsIHJvb3RCaXQsIHRydWUpOwogICAgIH0KLQotICAgIHJldHVybiBi
cmVha3BvaW50SWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZURPTUJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpCit2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVET01CcmVha3BvaW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpCiB7Ci0gICAgQnJl
YWtwb2ludCBicmVha3BvaW50ID0gbV9pZFRvQnJlYWtwb2ludC50YWtlKGJyZWFrcG9pbnRJZCk7
Ci0KLSAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKGJyZWFrcG9pbnQuZmlyc3QpOworICAgIE5v
ZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IGJyZWFrcG9pbnQuc2Vjb25kOwor
ICAgIHVpbnQzMl90IHJvb3RCaXQgPSAxIDw8IHR5cGU7CiAgICAgdWludDMyX3QgbWFzayA9IG1f
YnJlYWtwb2ludHMuZ2V0KG5vZGUpICYgfnJvb3RCaXQ7CiAgICAgaWYgKG1hc2spCiAgICAgICAg
IG1fYnJlYWtwb2ludHMuc2V0KG5vZGUsIG1hc2spOwpAQCAtODAzLDQyICs3OTMsNDEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJy
ZWFrcG9pbnRJZCkKICAgICB9CiB9CiAKLWJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OnNob3VsZEJy
ZWFrT25Ob2RlSW5zZXJ0aW9uKE5vZGUqLCBOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBkZXRhaWxzKQorYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6c2hvdWxkQnJlYWtP
bk5vZGVJbnNlcnRpb24oTm9kZSosIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRldGFpbHMpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQocGFyZW50LCBTdWJ0cmVl
TW9kaWZpZWQpKSB7Ci0gICAgICAgICpkZXRhaWxzID0gZGVzY3JpcHRpb25Gb3JET01FdmVudChw
YXJlbnQsIFN1YnRyZWVNb2RpZmllZCwgdHJ1ZSk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9N
RXZlbnQocGFyZW50LCBTdWJ0cmVlTW9kaWZpZWQsIHRydWUsIGRldGFpbHMpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3Rv
ckRPTUFnZW50OjpzaG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpCitib29sIEluc3BlY3RvckRPTUFnZW50OjpzaG91
bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGRldGFpbHMpCiB7CiAgICAgaWYgKGhhc0JyZWFrcG9pbnQobm9kZSwgTm9kZVJlbW92ZWQp
KSB7Ci0gICAgICAgICpkZXRhaWxzID0gZGVzY3JpcHRpb25Gb3JET01FdmVudChub2RlLCBOb2Rl
UmVtb3ZlZCwgZmFsc2UpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUsIE5v
ZGVSZW1vdmVkLCBmYWxzZSwgZGV0YWlscyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBpZiAoaGFzQnJlYWtwb2ludChpbm5lclBhcmVudE5vZGUobm9kZSksIFN1YnRyZWVNb2Rp
ZmllZCkpIHsKLSAgICAgICAgKmRldGFpbHMgPSBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KG5vZGUs
IFN1YnRyZWVNb2RpZmllZCwgZmFsc2UpOworICAgICAgICBkZXNjcmlwdGlvbkZvckRPTUV2ZW50
KG5vZGUsIFN1YnRyZWVNb2RpZmllZCwgZmFsc2UsIGRldGFpbHMpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEluc3BlY3RvckRPTUFn
ZW50OjpzaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKEVsZW1lbnQqIGVsZW1lbnQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxzKQorYm9vbCBJbnNwZWN0b3JET01B
Z2VudDo6c2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscykKIHsKICAgICBpZiAoaGFzQnJl
YWtwb2ludChlbGVtZW50LCBBdHRyaWJ1dGVNb2RpZmllZCkpIHsKLSAgICAgICAgKmRldGFpbHMg
PSBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KGVsZW1lbnQsIEF0dHJpYnV0ZU1vZGlmaWVkLCBmYWxz
ZSk7CisgICAgICAgIGRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoZWxlbWVudCwgQXR0cmlidXRlTW9k
aWZpZWQsIGZhbHNlLCBkZXRhaWxzKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBsb25nIGJyZWFr
cG9pbnRUeXBlLCBib29sIGluc2VydGlvbikKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRlc2Ny
aXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBsb25nIGJyZWFrcG9pbnRUeXBlLCBib29s
IGluc2VydGlvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKQogewog
ICAgIEFTU0VSVChoYXNCcmVha3BvaW50KHRhcmdldCwgYnJlYWtwb2ludFR5cGUpKTsKIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBOb2RlKiBicmVha3BvaW50T3duZXIgPSB0YXJnZXQ7CiAgICAgaWYgKCgx
IDw8IGJyZWFrcG9pbnRUeXBlKSAmIGluaGVyaXRhYmxlRE9NQnJlYWtwb2ludFR5cGVzTWFzaykg
ewogICAgICAgICAvLyBGb3IgaW5oZXJpdGFibGUgYnJlYWtwb2ludCB0eXBlcywgdGFyZ2V0IG5v
ZGUgaXNuJ3QgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBub2RlIHRoYXQgb3ducyBhIGJyZWFrcG9p
bnQuCkBAIC04NjIsOSArODUxLDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmRlc2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2UKIAogICAgIGxv
bmcgYnJlYWtwb2ludE93bmVyTm9kZUlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChicmVh
a3BvaW50T3duZXIpOwogICAgIEFTU0VSVChicmVha3BvaW50T3duZXJOb2RlSWQpOwotICAgIGRl
c2NyaXB0aW9uLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGNyZWF0ZUJyZWFrcG9pbnRJZChi
cmVha3BvaW50T3duZXJOb2RlSWQsIGJyZWFrcG9pbnRUeXBlKSk7Ci0KLSAgICByZXR1cm4gZGVz
Y3JpcHRpb247CisgICAgZGVzY3JpcHRpb24tPnNldE51bWJlcigibm9kZUlkIiwgYnJlYWtwb2lu
dE93bmVyTm9kZUlkKTsKKyAgICBkZXNjcmlwdGlvbi0+c2V0TnVtYmVyKCJ0eXBlIiwgYnJlYWtw
b2ludFR5cGUpOwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3Ry
aW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKQEAgLTExMDYsMTQgKzEwOTQsMTQgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogCiAgICAg
aWYgKG1fYnJlYWtwb2ludHMuc2l6ZSgpKSB7CiAgICAgICAgIC8vIFJlbW92ZSBzdWJ0cmVlIGJy
ZWFrcG9pbnRzLgotICAgICAgICByZW1vdmVCcmVha3BvaW50c0Zvck5vZGUobm9kZSk7CisgICAg
ICAgIG1fYnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpOwogICAgICAgICBWZWN0b3I8Tm9kZSo+IHN0
YWNrKDEsIGlubmVyRmlyc3RDaGlsZChub2RlKSk7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBzdGFjay5sYXN0KCk7CiAgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICByZW1vdmVCcmVha3BvaW50c0Zvck5vZGUobm9kZSk7CisgICAgICAgICAgICBt
X2JyZWFrcG9pbnRzLnJlbW92ZShub2RlKTsKICAgICAgICAgICAgIHN0YWNrLmFwcGVuZChpbm5l
ckZpcnN0Q2hpbGQobm9kZSkpOwogICAgICAgICAgICAgc3RhY2suYXBwZW5kKGlubmVyTmV4dFNp
Ymxpbmcobm9kZSkpOwogICAgICAgICB9IHdoaWxlICghc3RhY2suaXNFbXB0eSgpKTsKQEAgLTEx
ODAsMjUgKzExNjgsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1cGRhdGVTdWJ0cmVlQnJl
YWtwb2ludHMoTm9kZSogbm9kZSwgdWludDMyX3Qgcm9vdE1hc2ssCiAgICAgICAgIHVwZGF0ZVN1
YnRyZWVCcmVha3BvaW50cyhjaGlsZCwgbmV3Um9vdE1hc2ssIHNldCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnRzRm9yTm9kZShOb2RlKiBub2RlKQotewot
ICAgIHVpbnQzMl90IG1hc2sgPSBtX2JyZWFrcG9pbnRzLnRha2Uobm9kZSk7Ci0gICAgaWYgKCFt
YXNrKQotICAgICAgICByZXR1cm47Ci0gICAgbG9uZyBub2RlSWQgPSBtX2RvY3VtZW50Tm9kZVRv
SWRNYXAuZ2V0KG5vZGUpOwotICAgIGlmICghbm9kZUlkKQotICAgICAgICByZXR1cm47Ci0gICAg
Zm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBET01CcmVha3BvaW50VHlwZXNDb3VudDsgKyt0eXBl
KSB7Ci0gICAgICAgIGlmIChtYXNrICYmICgxIDw8IHR5cGUpKQotICAgICAgICAgICAgbV9pZFRv
QnJlYWtwb2ludC5yZW1vdmUoY3JlYXRlQnJlYWtwb2ludElkKG5vZGVJZCwgdHlwZSkpOwotICAg
IH0KLX0KLQotU3RyaW5nIEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGVCcmVha3BvaW50SWQobG9u
ZyBub2RlSWQsIGxvbmcgdHlwZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiZG9tOiIsIFN0
cmluZzo6bnVtYmVyKG5vZGVJZCksICc6JywgU3RyaW5nOjpudW1iZXIodHlwZSkpOwotfQotCiBO
b2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQog
ewogICAgIC8vIFRoZSBwYXRoIGlzIG9mIGZvcm0gIjEsSFRNTCwyLEJPRFksMSxESVYiCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBlZGQ0MDViLi41MzQ3MDkwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTExOSw5ICsxMTksOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgYWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJ
ZCk7CiAgICAgICAgIHZvaWQgcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VU
cmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAgICAgIHZvaWQgc2VhcmNo
Q2FuY2VsZWQoKTsKLSAgICAgICAgYm9vbCBzaG91bGRCcmVha09uTm9kZUluc2VydGlvbihOb2Rl
KiBub2RlLCBOb2RlKiBwYXJlbnQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBkZXRhaWxz
KTsKLSAgICAgICAgYm9vbCBzaG91bGRCcmVha09uTm9kZVJlbW92YWwoTm9kZSogbm9kZSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpOwotICAgICAgICBib29sIHNob3VsZEJy
ZWFrT25BdHRyaWJ1dGVNb2RpZmljYXRpb24oRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIGRldGFpbHMpOworICAgICAgICBib29sIHNob3VsZEJyZWFrT25Ob2Rl
SW5zZXJ0aW9uKE5vZGUqIG5vZGUsIE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRldGFpbHMpOworICAgICAgICBib29sIHNob3VsZEJyZWFrT25Ob2RlUmVtb3ZhbChO
b2RlKiBub2RlLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CisgICAgICAg
IGJvb2wgc2hvdWxkQnJlYWtPbkF0dHJpYnV0ZU1vZGlmaWNhdGlvbihFbGVtZW50KiBlbGVtZW50
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGV0YWlscyk7CiAKICAgICAgICAgLy8gTWV0
aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9yQ29udHJvbGxlci4KICAgICAgICAgdm9pZCBz
ZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTQzLDggKzE0Myw4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdDsKIAotICAgICAgICBTdHJpbmcgc2V0RE9NQnJlYWtwb2ludChs
b25nIG5vZGVJZCwgbG9uZyB0eXBlKTsKLSAgICAgICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsKKyAgICAgICAgdm9pZCBzZXRET01CcmVha3Bv
aW50KGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICB2b2lkIHJlbW92ZURPTUJyZWFr
cG9pbnQobG9uZyBub2RlSWQsIGxvbmcgdHlwZSk7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2
b2lkIHN0YXJ0TGlzdGVuaW5nKERvY3VtZW50KiBkb2N1bWVudCk7CkBAIC0xNjEsOSArMTYxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wgaGFzQnJlYWtwb2ludChOb2Rl
KiBub2RlLCBsb25nIHR5cGUpOwogICAgICAgICB2b2lkIHVwZGF0ZVN1YnRyZWVCcmVha3BvaW50
cyhOb2RlKiByb290LCB1aW50MzJfdCByb290TWFzaywgYm9vbCB2YWx1ZSk7Ci0gICAgICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludHNGb3JOb2RlKE5vZGUqIG5vZGUpOwotICAgICAgICBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBkZXNjcmlwdGlvbkZvckRPTUV2ZW50KE5vZGUqIHRhcmdldCwg
bG9uZyBicmVha3BvaW50VHlwZSwgYm9vbCBpbnNlcnRpb24pOwotICAgICAgICBTdHJpbmcgY3Jl
YXRlQnJlYWtwb2ludElkKGxvbmcgbm9kZUlkLCBsb25nIHR5cGUpOworICAgICAgICB2b2lkIGRl
c2NyaXB0aW9uRm9yRE9NRXZlbnQoTm9kZSogdGFyZ2V0LCBsb25nIGJyZWFrcG9pbnRUeXBlLCBi
b29sIGluc2VydGlvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRlc2NyaXB0aW9uKTsK
IAogICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JOb2Rl
KE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KEVsZW1lbnQqIGVsZW1lbnQpOwpAQCAtMjA0LDggKzIwMiw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgSGFzaFNldDxSZWZQdHI8Tm9kZT4gPiBtX3NlYXJjaFJlc3VsdHM7CiAgICAg
ICAgIFZlY3Rvcjxsb25nPiBtX2luc3BlY3RlZE5vZGVzOwogICAgICAgICBIYXNoTWFwPE5vZGUq
LCB1aW50MzJfdD4gbV9icmVha3BvaW50czsKLSAgICAgICAgdHlwZWRlZiBwYWlyPGxvbmcsIGxv
bmc+IEJyZWFrcG9pbnQ7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBCcmVha3BvaW50PiBtX2lk
VG9CcmVha3BvaW50OwogICAgIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKaW5kZXggY2Y0MTUyNy4uZjNhNzNiYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC00NSw2
ICs0NSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBkb21OYXRpdmVCcmVha3BvaW50VHlwZSA9ICJET00iOworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGV2ZW50TGlzdGVuZXJOYXRpdmVCcmVha3BvaW50VHlwZSA9ICJFdmVudExpc3RlbmVy
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCB4aHJOYXRpdmVCcmVha3BvaW50VHlwZSA9ICJY
SFIiOworCiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgbGlzdGVuZXJFdmVudENhdGVnb3J5VHlw
ZSA9ICJsaXN0ZW5lciI7CiBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW5zdHJ1bWVudGF0aW9u
RXZlbnRDYXRlZ29yeVR5cGUgPSAiaW5zdHJ1bWVudGF0aW9uIjsKIApAQCAtODAsOSArODQsMTEg
QEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlSW1wbChJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdl
bnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFnZW50LmdldCgpOwogICAgIGlmICghZG9t
QWdlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBl
dmVudERhdGE7Ci0gICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZUluc2VydGlvbihu
b2RlLCBwYXJlbnQsICZldmVudERhdGEpKQorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2
ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGRvbUFnZW50LT5z
aG91bGRCcmVha09uTm9kZUluc2VydGlvbihub2RlLCBwYXJlbnQsIGV2ZW50RGF0YSkpIHsKKyAg
ICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJl
YWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZl
QnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBlLCBldmVudERhdGEpOworICAgIH0KICNlbmRpZgog
fQogCkBAIC0xMDEsOSArMTA3LDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVtb3ZlRE9NTm9kZUltcGwoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjCiAgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yQ29udHJvbGxlci0+bV9kb21BZ2Vu
dC5nZXQoKTsKICAgICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm47Ci0gICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZXZlbnREYXRhOwotICAgIGlmIChkb21BZ2VudC0+c2hvdWxk
QnJlYWtPbk5vZGVSZW1vdmFsKG5vZGUsICZldmVudERhdGEpKQorICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYg
KGRvbUFnZW50LT5zaG91bGRCcmVha09uTm9kZVJlbW92YWwobm9kZSwgZXZlbnREYXRhKSkgewor
ICAgICAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJlYWtwb2ludFR5cGUiLCBkb21OYXRpdmVC
cmVha3BvaW50VHlwZSk7CiAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRp
dmVCcmVha3BvaW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CisgICAgfQogI2VuZGlm
CiB9CiAKQEAgLTEyMiw5ICsxMzAsMTEgQEAgdm9pZCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxNb2RpZnlET01BdHRySW1wbChJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWMKICAgICBJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5tX2RvbUFn
ZW50LmdldCgpOwogICAgIGlmICghZG9tQWdlbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBQYXNz
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBldmVudERhdGE7Ci0gICAgaWYgKGRvbUFnZW50LT5zaG91
bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0aW9uKGVsZW1lbnQsICZldmVudERhdGEpKQorICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgaWYgKGRvbUFnZW50LT5zaG91bGRCcmVha09uQXR0cmlidXRlTW9kaWZpY2F0
aW9uKGVsZW1lbnQsIGV2ZW50RGF0YSkpIHsKKyAgICAgICAgZXZlbnREYXRhLT5zZXRTdHJpbmco
ImJyZWFrcG9pbnRUeXBlIiwgZG9tTmF0aXZlQnJlYWtwb2ludFR5cGUpOwogICAgICAgICBkZWJ1
Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZlbnRUeXBl
LCBldmVudERhdGEpOworICAgIH0KICNlbmRpZgogfQogCkBAIC0xNDcsMTIgKzE1NywxMyBAQCB2
b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFNlbmRYTUxIdHRwUmVxdWVzdEltcGwo
SW5zcGVjdG9yQ29udHJvbGxlciogaQogICAgIGlmICghZGVidWdnZXJBZ2VudCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IGluc3BlY3RvckNvbnRyb2xsZXIt
PmZpbmRYSFJCcmVha3BvaW50KHVybCk7Ci0gICAgaWYgKGJyZWFrcG9pbnRJZC5pc0VtcHR5KCkp
CisgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7CisgICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVy
LT5oYXNYSFJCcmVha3BvaW50KHVybCwgJmJyZWFrcG9pbnRVUkwpKQogICAgICAgICByZXR1cm47
CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudERhdGEgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50SWQiLCBi
cmVha3BvaW50SWQpOworICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJicmVha3BvaW50VHlwZSIs
IHhock5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKKyAgICBldmVudERhdGEtPnNldFN0cmluZygiYnJl
YWtwb2ludFVSTCIsIGJyZWFrcG9pbnRVUkwpOwogICAgIGV2ZW50RGF0YS0+c2V0U3RyaW5nKCJ1
cmwiLCB1cmwpOwogICAgIGRlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShOYXRpdmVCcmVha3Bv
aW50RGVidWdnZXJFdmVudFR5cGUsIGV2ZW50RGF0YSk7CiAjZW5kaWYKQEAgLTQ0NiwxMSArNDU3
LDExIEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpwYXVzZU9uTmF0aXZlRXZlbnRJ
Zk5lZWRlZChJbnNwZWN0b3JDb250cm9sbGVyKiBpCiAgICAgaWYgKCFkZWJ1Z2dlckFnZW50KQog
ICAgICAgICByZXR1cm47CiAgICAgU3RyaW5nIGZ1bGxFdmVudE5hbWUgPSBTdHJpbmc6OmZvcm1h
dCgiJXM6JXMiLCBjYXRlZ29yeVR5cGUudXRmOCgpLmRhdGEoKSwgZXZlbnROYW1lLnV0ZjgoKS5k
YXRhKCkpOwotICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5m
aW5kRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoZnVsbEV2ZW50TmFtZSk7Ci0gICAgaWYgKGJyZWFr
cG9pbnRJZC5pc0VtcHR5KCkpCisgICAgaWYgKCFpbnNwZWN0b3JDb250cm9sbGVyLT5oYXNFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChmdWxsRXZlbnROYW1lKSkKICAgICAgICAgcmV0dXJuOwogICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRJZCIsIGJyZWFrcG9p
bnRJZCk7CisgICAgZXZlbnREYXRhLT5zZXRTdHJpbmcoImJyZWFrcG9pbnRUeXBlIiwgZXZlbnRM
aXN0ZW5lck5hdGl2ZUJyZWFrcG9pbnRUeXBlKTsKKyAgICBldmVudERhdGEtPnNldFN0cmluZygi
ZXZlbnROYW1lIiwgZnVsbEV2ZW50TmFtZSk7CiAgICAgaWYgKHN5bmNocm9ub3VzKQogICAgICAg
ICBkZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oTmF0aXZlQnJlYWtwb2ludERlYnVnZ2VyRXZl
bnRUeXBlLCBldmVudERhdGEpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCA2MWIyYmM4Li4wNGZmY2QzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBA
IC0zMSwxMjkgKzMxLDExNiBAQAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVu
Y3Rpb24oKQogewogICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzID0ge307Ci0gICAgdGhpcy5f
YmFja2VuZElkVG9CcmVha3BvaW50ID0ge307CiAKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9uYXRp
dmVCcmVha3BvaW50SGl0LCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5h
ZGRFdmVudExpc3RlbmVyKCJkZWJ1Z2dlci1yZXN1bWVkIiwgdGhpcy5fZGVidWdnZXJSZXN1bWVk
LCB0aGlzKTsKIH0KIAorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFr
cG9pbnRUeXBlcyA9IHsKKyAgICBET006ICJET00iLAorICAgIEV2ZW50TGlzdGVuZXI6ICJFdmVu
dExpc3RlbmVyIiwKKyAgICBYSFI6ICJYSFIiCit9CisKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50
TWFuYWdlci5wcm90b3R5cGUgPSB7Ci0gICAgY3JlYXRlRE9NQnJlYWtwb2ludDogZnVuY3Rpb24o
bm9kZUlkLCBkb21FdmVudFR5cGUsIGRpc2FibGVkKQorICAgIGNyZWF0ZURPTUJyZWFrcG9pbnQ6
IGZ1bmN0aW9uKG5vZGVJZCwgdHlwZSwgZGlzYWJsZWQpCiAgICAgewotICAgICAgICB2YXIgZnJv
bnRlbmRJZCA9ICJkb206IiArIG5vZGVJZCArICI6IiArIGRvbUV2ZW50VHlwZTsKLSAgICAgICAg
aWYgKGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHMpCisgICAgICAgIHZhciBu
b2RlID0gV2ViSW5zcGVjdG9yLmRvbUFnZW50Lm5vZGVGb3JJZChub2RlSWQpOworICAgICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBuZXcgV2ViSW5zcGVjdG9yLkRPTUJyZWFrcG9pbnQodGhpcywgZnJvbnRlbmRJZCwgbm9kZUlk
LCBkb21FdmVudFR5cGUpOwotICAgICAgICB0aGlzLl9uYXRpdmVCcmVha3BvaW50c1tmcm9udGVu
ZElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVh
dGVET01CcmVha3BvaW50SWQobm9kZUlkLCB0eXBlKTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRJ
ZCBpbiB0aGlzLl9uYXRpdmVCcmVha3BvaW50cykKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludCh0aGlz
LCBicmVha3BvaW50SWQsICFkaXNhYmxlZCwgbm9kZSwgdHlwZSk7CisgICAgICAgIHRoaXMuX25h
dGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50OworICAgICAgICB0aGlz
Ll91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3MoKTsKICAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoImRvbS1icmVha3BvaW50LWFkZGVkIiwgYnJlYWtwb2ludCk7
Ci0gICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9ICFkaXNhYmxlZDsKICAgICAgICAgcmV0dXJu
IGJyZWFrcG9pbnQ7CiAgICAgfSwKIAogICAgIGNyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50
OiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewotICAgICAgICB2YXIgZnJvbnRlbmRJZCA9IGV2
ZW50TmFtZTsKLSAgICAgICAgaWYgKGZyb250ZW5kSWQgaW4gdGhpcy5fbmF0aXZlQnJlYWtwb2lu
dHMpCisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVFdmVudExpc3RlbmVy
QnJlYWtwb2ludElkKGV2ZW50TmFtZSk7CisgICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhp
cy5fbmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRo
aXMsIGZyb250ZW5kSWQsIGV2ZW50TmFtZSk7Ci0gICAgICAgIHRoaXMuX25hdGl2ZUJyZWFrcG9p
bnRzW2Zyb250ZW5kSWRdID0gYnJlYWtwb2ludDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBu
ZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50KHRoaXMsIGJyZWFrcG9pbnRJ
ZCwgdHJ1ZSwgZXZlbnROYW1lKTsKKyAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJl
YWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFr
cG9pbnRzSW5TZXR0aW5ncygpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVy
cygiZXZlbnQtbGlzdGVuZXItYnJlYWtwb2ludC1hZGRlZCIsIHsgYnJlYWtwb2ludDogYnJlYWtw
b2ludCwgZXZlbnROYW1lOiBldmVudE5hbWUgfSk7Ci0gICAgICAgIGJyZWFrcG9pbnQuZW5hYmxl
ZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBicmVha3BvaW50OwogICAgIH0sCiAKICAgICBjcmVh
dGVYSFJCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGRpc2FibGVkKQogICAgIHsKLSAgICAgICAg
dmFyIGZyb250ZW5kSWQgPSB1cmw7Ci0gICAgICAgIGlmIChmcm9udGVuZElkIGluIHRoaXMuX25h
dGl2ZUJyZWFrcG9pbnRzKQorICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRl
WEhSQnJlYWtwb2ludElkKHVybCk7CisgICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5f
bmF0aXZlQnJlYWtwb2ludHMpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGJy
ZWFrcG9pbnQgPSBuZXcgV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQodGhpcywgZnJvbnRlbmRJ
ZCwgdXJsKTsKLSAgICAgICAgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbZnJvbnRlbmRJZF0gPSBi
cmVha3BvaW50OworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuWEhS
QnJlYWtwb2ludCh0aGlzLCBicmVha3BvaW50SWQsICFkaXNhYmxlZCwgdXJsKTsKKyAgICAgICAg
dGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAg
ICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwogICAgICAgICB0
aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygieGhyLWJyZWFrcG9pbnQtYWRkZWQiLCBicmVh
a3BvaW50KTsKLSAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gIWRpc2FibGVkCiAgICAgICAg
IHJldHVybiBicmVha3BvaW50OwogICAgIH0sCiAKLSAgICBmaW5kQnJlYWtwb2ludDogZnVuY3Rp
b24oYmFja2VuZEJyZWFrcG9pbnRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9iYWNr
ZW5kSWRUb0JyZWFrcG9pbnRbYmFja2VuZEJyZWFrcG9pbnRJZF07Ci0gICAgfSwKLQotICAgIF9y
ZW1vdmVOYXRpdmVCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIF9zZXROYXRp
dmVCcmVha3BvaW50RW5hYmxlZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBlbmFibGVkKQogICAg
IHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnQuX2JlaW5nU2V0T25CYWNrZW5kKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVkKQotICAgICAgICAgICAg
dGhpcy5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludEZyb21CYWNrZW5kKGJyZWFrcG9pbnQpOwotICAg
ICAgICBkZWxldGUgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludC5fZnJvbnRlbmRJ
ZF07Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwot
ICAgICAgICBicmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOwot
ICAgIH0sCisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNb
YnJlYWtwb2ludElkXTsKIAotICAgIF9zZXROYXRpdmVCcmVha3BvaW50RW5hYmxlZDogZnVuY3Rp
b24oYnJlYWtwb2ludCwgZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIGlmIChicmVha3BvaW50Ll9i
ZWluZ1NldE9uQmFja2VuZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKGJyZWFr
cG9pbnQuZW5hYmxlZCA9PT0gZW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKGVuYWJsZWQpCi0gICAgICAgICAgICB0aGlzLl9zZXROYXRpdmVCcmVha3BvaW50T25CYWNr
ZW5kKGJyZWFrcG9pbnQpOworICAgICAgICAgICAgYnJlYWtwb2ludC5fZW5hYmxlKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZU5hdGl2ZUJyZWFrcG9pbnRGcm9tQmFj
a2VuZChicmVha3BvaW50KTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQuX2Rpc2FibGUoKTsKKwor
ICAgICAgICBicmVha3BvaW50Ll9lbmFibGVkID0gZW5hYmxlZDsKKyAgICAgICAgdGhpcy5fdXBk
YXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CisgICAgICAgIGJyZWFrcG9pbnQuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUtY2hhbmdlZCIpOwogICAgIH0sCiAKLSAgICBf
c2V0TmF0aXZlQnJlYWtwb2ludE9uQmFja2VuZDogZnVuY3Rpb24oYnJlYWtwb2ludCkKKyAgICBf
cmVtb3ZlTmF0aXZlQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQogICAgIHsKLSAg
ICAgICAgYnJlYWtwb2ludC5fYmVpbmdTZXRPbkJhY2tlbmQgPSB0cnVlOwotICAgICAgICB2YXIg
ZGF0YSA9IHsgdHlwZTogYnJlYWtwb2ludC5fdHlwZSwgY29uZGl0aW9uOiBicmVha3BvaW50Ll9j
b25kaXRpb24gfTsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXROYXRpdmVCcmVha3BvaW50
KGRhdGEsIGRpZFNldE5hdGl2ZUJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIHZhciBi
cmVha3BvaW50ID0gdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKIAotICAg
ICAgICBmdW5jdGlvbiBkaWRTZXROYXRpdmVCcmVha3BvaW50KGJhY2tlbmRCcmVha3BvaW50SWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQuX2JlaW5nU2V0T25CYWNrZW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYmFja2VuZEJyZWFrcG9pbnRJZCAhPT0gIiIpIHsKLSAg
ICAgICAgICAgICAgICBicmVha3BvaW50Ll9iYWNrZW5kSWQgPSBiYWNrZW5kQnJlYWtwb2ludElk
OwotICAgICAgICAgICAgICAgIHRoaXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFtiYWNrZW5kQnJl
YWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
a3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiZW5hYmxlLWNoYW5nZWQiKTsKLSAgICAg
ICAgICAgIHRoaXMuX3VwZGF0ZU5hdGl2ZUJyZWFrcG9pbnRzSW5TZXR0aW5ncygpOwotICAgICAg
ICB9Ci0gICAgfSwKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQuZW5hYmxlZCkKKyAgICAgICAgICAg
IGJyZWFrcG9pbnQuX2Rpc2FibGUoKTsKIAotICAgIF9yZW1vdmVOYXRpdmVCcmVha3BvaW50RnJv
bUJhY2tlbmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnJlbW92ZU5hdGl2ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5fYmFja2VuZElkKTsKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFticmVha3BvaW50Ll9iYWNr
ZW5kSWRdCi0gICAgICAgIGRlbGV0ZSBicmVha3BvaW50Ll9iYWNrZW5kSWQ7Ci0gICAgICAgIGJy
ZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJlbmFibGUtY2hhbmdlZCIpOworICAg
ICAgICBkZWxldGUgdGhpcy5fbmF0aXZlQnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICAg
ICAgdGhpcy5fdXBkYXRlTmF0aXZlQnJlYWtwb2ludHNJblNldHRpbmdzKCk7CisgICAgICAgIGJy
ZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVkIik7CiAgICAgfSwKIAog
ICAgIF91cGRhdGVOYXRpdmVCcmVha3BvaW50c0luU2V0dGluZ3M6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHZhciBwZXJzaXN0ZW50QnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnRzID0gW107CiAgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX25hdGl2ZUJyZWFr
cG9pbnRzKSB7CiAgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFr
cG9pbnRzW2lkXTsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50Ll9wZXJzaXN0ZW50Q29uZGl0
aW9uKQotICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRCcmVha3BvaW50cy5wdXNoKHsgdHlwZTog
YnJlYWtwb2ludC5fdHlwZSwgZW5hYmxlZDogYnJlYWtwb2ludC5lbmFibGVkLCBjb25kaXRpb246
IGJyZWFrcG9pbnQuX3BlcnNpc3RlbnRDb25kaXRpb24gfSk7CisgICAgICAgICAgICBicmVha3Bv
aW50cy5wdXNoKGJyZWFrcG9pbnQuX3NlcmlhbGl6ZVRvSlNPTigpKTsKICAgICAgICAgfQotICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF0aXZlQnJlYWtwb2ludHMgPSBwZXJzaXN0ZW50
QnJlYWtwb2ludHM7CisgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5uYXRpdmVCcmVha3Bv
aW50cyA9IGJyZWFrcG9pbnRzOwogICAgIH0sCiAKICAgICBfbmF0aXZlQnJlYWtwb2ludEhpdDog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQu
ZGF0YS5icmVha3BvaW50SWQ7CisgICAgICAgIHZhciBldmVudERhdGEgPSBldmVudC5kYXRhOwor
CisgICAgICAgIHZhciBicmVha3BvaW50SWQ7CisgICAgICAgIGlmIChldmVudERhdGEuYnJlYWtw
b2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3Bv
aW50VHlwZXMuRE9NKQorICAgICAgICAgICAgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlRE9N
QnJlYWtwb2ludElkKGV2ZW50RGF0YS5ub2RlSWQsIGV2ZW50RGF0YS50eXBlKTsKKyAgICAgICAg
ZWxzZSBpZiAoZXZlbnREYXRhLmJyZWFrcG9pbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpCisgICAgICAg
ICAgICBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElk
KGV2ZW50RGF0YS5ldmVudE5hbWUpOworICAgICAgICBlbHNlIGlmIChldmVudERhdGEuYnJlYWtw
b2ludFR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3Bv
aW50VHlwZXMuWEhSKQorICAgICAgICAgICAgYnJlYWtwb2ludElkID0gdGhpcy5fY3JlYXRlWEhS
QnJlYWtwb2ludElkKGV2ZW50RGF0YS5icmVha3BvaW50VVJMKTsKIAotICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IHRoaXMuX2JhY2tlbmRJZFRvQnJlYWtwb2ludFticmVha3BvaW50SWRdOworICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX25hdGl2ZUJyZWFrcG9pbnRzW2JyZWFrcG9pbnRJ
ZF07CiAgICAgICAgIGlmICghYnJlYWtwb2ludCkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBicmVha3BvaW50LmhpdCA9IHRydWU7Ci0gICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKCJoaXQtc3RhdGUtY2hhbmdlZCIpOwogICAgICAgICB0aGlzLl9sYXN0
SGl0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB7IGJyZWFrcG9pbnQ6IGJyZWFrcG9p
bnQsIGV2ZW50RGF0YTogZXZlbnREYXRhIH0pOwogICAgIH0sCiAKICAgICBfZGVidWdnZXJSZXN1
bWVkOiBmdW5jdGlvbihldmVudCkKQEAgLTE2MSwxNyArMTQ4LDE5IEBAIFdlYkluc3BlY3Rvci5C
cmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghdGhpcy5fbGFzdEhp
dEJyZWFrcG9pbnQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRoaXMuX2xhc3RIaXRC
cmVha3BvaW50LmhpdCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludC5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoImhpdC1zdGF0ZS1jaGFuZ2VkIik7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9sYXN0SGl0QnJlYWtwb2ludDsKICAgICB9LAogCiAgICAgcmVzdG9yZUJyZWFr
cG9pbnRzOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlz
Ll9wZXJzaXN0ZW50QnJlYWtwb2ludHMoKTsKKyAgICAgICAgdGhpcy5fZG9tQnJlYWtwb2ludHMg
PSBbXTsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRzW2ldLnR5cGUgPT09ICJFdmVudExpc3Rl
bmVyIikKKyAgICAgICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlID09PSBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKKyAgICAgICAg
ICAgICAgICB0aGlzLl9kb21CcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnRzW2ldKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnRzW2ldLnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3BvaW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAg
ICAgICAgICAgICB0aGlzLmNyZWF0ZUV2ZW50TGlzdGVuZXJCcmVha3BvaW50KGJyZWFrcG9pbnRz
W2ldLmNvbmRpdGlvbi5ldmVudE5hbWUpOwotICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2lu
dHNbaV0udHlwZSA9PT0gIlhIUiIpCisgICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50c1tp
XS50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZlQnJlYWtwb2lu
dFR5cGVzLlhIUikKICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVhIUkJyZWFrcG9pbnQoYnJl
YWtwb2ludHNbaV0uY29uZGl0aW9uLnVybCwgIWJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpOwogICAg
ICAgICB9CiAgICAgfSwKQEAgLTE4NSw2ICsxNzQsOCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKHBlbmRpbmdDYWxscykKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJy
ZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnRz
W2ldLnR5cGUgIT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5OYXRpdmVCcmVha3Bv
aW50VHlwZXMuRE9NKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
ICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOwogICAgICAgICAgICAgICAgIHZh
ciBub2RlSWQgPSBwYXRoVG9Ob2RlSWRbYnJlYWtwb2ludC5jb25kaXRpb24ucGF0aF07CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGVJZCkKQEAgLTE5MiwxMSArMTgzLDExIEBAIFdlYkluc3BlY3Rv
ci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9wZXJzaXN0ZW50QnJlYWtwb2lu
dHMoKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fZG9tQnJlYWtwb2ludHM7CiAg
ICAgICAgIHZhciBwYXRoVG9Ob2RlSWQgPSB7fTsKICAgICAgICAgdmFyIHBlbmRpbmdDYWxscyA9
IDA7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSAiRE9NIikKKyAgICAg
ICAgICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkRPTSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIHZhciBwYXRoID0gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uLnBh
dGg7CiAgICAgICAgICAgICBpZiAocGF0aCBpbiBwYXRoVG9Ob2RlSWQpCkBAIC0yMjEsNDcgKzIx
Miw2MyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0sCiAKKyAgICBfY3JlYXRlRE9NQnJlYWtwb2ludElk
OiBmdW5jdGlvbihub2RlSWQsIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gImRvbToiICsg
bm9kZUlkICsgIjoiICsgdHlwZTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUV2ZW50TGlzdGVuZXJC
cmVha3BvaW50SWQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiAi
ZXZlbnRMaXN0bmVyOiIgKyBldmVudE5hbWU7CisgICAgfSwKKworICAgIF9jcmVhdGVYSFJCcmVh
a3BvaW50SWQ6IGZ1bmN0aW9uKHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiAieGhyOiIgKyB1
cmw7CisgICAgfSwKKwogICAgIHJlc2V0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlz
Ll9uYXRpdmVCcmVha3BvaW50cyA9IHt9OwotICAgICAgICB0aGlzLl9iYWNrZW5kSWRUb0JyZWFr
cG9pbnQgPSB7fTsKICAgICB9CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5w
cm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CiAKLVdl
Ykluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdlciwgZnJvbnRlbmRJ
ZCwgdHlwZSkKK1dlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50ID0gZnVuY3Rpb24obWFuYWdl
ciwgaWQsIGVuYWJsZWQpCiB7CiAgICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7Ci0gICAgdGhp
cy5fX2Zyb250ZW5kSWQgPSBmcm9udGVuZElkOwotICAgIHRoaXMuX190eXBlID0gdHlwZTsKKyAg
ICB0aGlzLl9pZCA9IGlkOworICAgIHRoaXMuX2VuYWJsZWQgPSBlbmFibGVkOworICAgIHRoaXMu
X2hpdCA9IGZhbHNlOwogfQogCiBXZWJJbnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5
cGUgPSB7CiAgICAgZ2V0IGVuYWJsZWQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfYmFja2Vu
ZElkIiBpbiB0aGlzOworICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKICAgICB9LAogCiAg
ICAgc2V0IGVuYWJsZWQoZW5hYmxlZCkKICAgICB7Ci0gICAgICAgIHRoaXMuX21hbmFnZXIuX3Nl
dE5hdGl2ZUJyZWFrcG9pbnRFbmFibGVkKHRoaXMsIGVuYWJsZWQpOworICAgICAgICB0aGlzLl9t
YW5hZ2VyLl9zZXROYXRpdmVCcmVha3BvaW50RW5hYmxlZCh0aGlzLl9pZCwgZW5hYmxlZCk7CiAg
ICAgfSwKIAotICAgIHJlbW92ZTogZnVuY3Rpb24oKQorICAgIGdldCBoaXQoKQogICAgIHsKLSAg
ICAgICAgdGhpcy5fbWFuYWdlci5fcmVtb3ZlTmF0aXZlQnJlYWtwb2ludCh0aGlzKTsKLSAgICAg
ICAgdGhpcy5fb25SZW1vdmUoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2hpdDsKICAgICB9LAog
Ci0gICAgZ2V0IF9mcm9udGVuZElkKCkKKyAgICBzZXQgaGl0KGhpdCkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9fZnJvbnRlbmRJZDsKKyAgICAgICAgdGhpcy5faGl0ID0gaGl0OworICAg
ICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygiaGl0LXN0YXRlLWNoYW5nZWQiKTsK
ICAgICB9LAogCi0gICAgZ2V0IF90eXBlKCkKKyAgICByZW1vdmU6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLl9fdHlwZTsKKyAgICAgICAgdGhpcy5fbWFuYWdlci5fcmVt
b3ZlTmF0aXZlQnJlYWtwb2ludCh0aGlzLl9pZCk7CisgICAgICAgIHRoaXMuX29uUmVtb3ZlKCk7
CiAgICAgfSwKIAogICAgIF9jb21wYXJlOiBmdW5jdGlvbih4LCB5KQpAQCAtMjc4LDI0ICsyODUs
MjMgQEAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQucHJvdG90eXBlID0gewogCiBXZWJJ
bnNwZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVj
dG9yLk9iamVjdC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50ID0gZnVu
Y3Rpb24obWFuYWdlciwgZnJvbnRlbmRJZCwgbm9kZUlkLCBkb21FdmVudFR5cGUpCitXZWJJbnNw
ZWN0b3IuRE9NQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkLCBub2Rl
LCB0eXBlKQogewotICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywg
bWFuYWdlciwgZnJvbnRlbmRJZCwgIkRPTSIpOwotICAgIHRoaXMuX25vZGVJZCA9IG5vZGVJZDsK
LSAgICB0aGlzLl9kb21FdmVudFR5cGUgPSBkb21FdmVudFR5cGU7Ci0gICAgdGhpcy5fY29uZGl0
aW9uID0geyBub2RlSWQ6IHRoaXMuX25vZGVJZCwgdHlwZTogdGhpcy5fZG9tRXZlbnRUeXBlIH07
Ci0KLSAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21BZ2VudC5ub2RlRm9ySWQodGhpcy5f
bm9kZUlkKTsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBub2RlLmJyZWFrcG9pbnRzW3RoaXMu
X2RvbUV2ZW50VHlwZV0gPSB0aGlzOwotICAgICAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0aW9u
ID0geyBwYXRoOiBub2RlLnBhdGgoKSwgdHlwZTogdGhpcy5fZG9tRXZlbnRUeXBlIH07Ci0gICAg
fQorICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwg
aWQsIGVuYWJsZWQpOworICAgIHRoaXMuX25vZGUgPSBub2RlOworICAgIHRoaXMuX25vZGVJZCA9
IG5vZGUuaWQ7CisgICAgdGhpcy5fcGF0aCA9IG5vZGUucGF0aCgpOworICAgIHRoaXMuX3R5cGUg
PSB0eXBlOworICAgIGlmIChlbmFibGVkKQorICAgICAgICB0aGlzLl9lbmFibGUoKTsKKworICAg
IG5vZGUuYnJlYWtwb2ludHNbdGhpcy5fdHlwZV0gPSB0aGlzOwogfQogCiBXZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgY29tcGFyZVRvOiBmdW5jdGlvbihvdGhl
cikKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb21wYXJlKHRoaXMuX2RvbUV2ZW50VHlw
ZSwgb3RoZXIuX2RvbUV2ZW50VHlwZSk7CisgICAgICAgIHJldHVybiB0aGlzLl9jb21wYXJlKHRo
aXMuX3R5cGUsIG90aGVyLl90eXBlKTsKICAgICB9LAogCiAgICAgcG9wdWxhdGVMYWJlbEVsZW1l
bnQ6IGZ1bmN0aW9uKGVsZW1lbnQpCkBAIC0zMDYsMTMgKzMxMiwxMyBAQCBXZWJJbnNwZWN0b3Iu
RE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQo
bGlua2lmaWVkTm9kZSk7CiAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICBkZXNjcmlwdGlvbi5jbGFzc05hbWUgPSAic291cmNl
LXRleHQiOwotICAgICAgICBkZXNjcmlwdGlvbi50ZXh0Q29udGVudCA9IFdlYkluc3BlY3Rvci5k
b21CcmVha3BvaW50VHlwZUxhYmVsKHRoaXMuX2RvbUV2ZW50VHlwZSk7CisgICAgICAgIGRlc2Ny
aXB0aW9uLnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRUeXBlTGFiZWwo
dGhpcy5fdHlwZSk7CiAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZGVzY3JpcHRpb24pOwog
ICAgIH0sCiAKICAgICBwb3B1bGF0ZVN0YXR1c01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbihlbGVt
ZW50LCBldmVudERhdGEpCiAgICAgewotICAgICAgICB2YXIgc3Vic3RpdHV0aW9ucyA9IFtXZWJJ
bnNwZWN0b3IuZG9tQnJlYWtwb2ludFR5cGVMYWJlbCh0aGlzLl9kb21FdmVudFR5cGUpLCBXZWJJ
bnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzLmxpbmtpZnlOb2RlQnlJZCh0aGlzLl9ub2RlSWQpXTsK
KyAgICAgICAgdmFyIHN1YnN0aXR1dGlvbnMgPSBbV2ViSW5zcGVjdG9yLmRvbUJyZWFrcG9pbnRU
eXBlTGFiZWwodGhpcy5fdHlwZSksIFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMubGlua2lm
eU5vZGVCeUlkKHRoaXMuX25vZGVJZCldOwogICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHsKICAg
ICAgICAgICAgIHM6IGZ1bmN0aW9uKHN1YnN0aXR1dGlvbikKICAgICAgICAgICAgIHsKQEAgLTMy
NSw3ICszMzEsNyBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgYiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGIpOwogICAgICAgICAg
ICAgZWxlbWVudC5hcHBlbmRDaGlsZChiKTsKICAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5f
ZG9tRXZlbnRUeXBlID09PSBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludFR5cGVzLlN1YnRyZWVN
b2RpZmllZCkgeworICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRPTUJy
ZWFrcG9pbnRUeXBlcy5TdWJ0cmVlTW9kaWZpZWQpIHsKICAgICAgICAgICAgIHZhciB0YXJnZXRO
b2RlID0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5saW5raWZ5Tm9kZUJ5SWQoZXZlbnRE
YXRhLnRhcmdldE5vZGVJZCk7CiAgICAgICAgICAgICBpZiAoZXZlbnREYXRhLmluc2VydGlvbikg
ewogICAgICAgICAgICAgICAgIGlmIChldmVudERhdGEudGFyZ2V0Tm9kZUlkICE9PSB0aGlzLl9u
b2RlSWQpCkBAIC0zMzgsMjIgKzM0NCwzNiBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZm9ybWF0TG9jYWxpemVkKCJQ
YXVzZWQgb24gYSBcIiVzXCIgYnJlYWtwb2ludCBzZXQgb24gJXMuIiwgc3Vic3RpdHV0aW9ucywg
Zm9ybWF0dGVycywgIiIsIGFwcGVuZCk7CiAgICAgfSwKIAorICAgIF9lbmFibGU6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0RE9NQnJlYWtwb2ludCh0aGlz
Ll9ub2RlSWQsIHRoaXMuX3R5cGUpOworICAgIH0sCisKKyAgICBfZGlzYWJsZTogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVET01CcmVha3BvaW50KHRo
aXMuX25vZGVJZCwgdGhpcy5fdHlwZSk7CisgICAgfSwKKworICAgIF9zZXJpYWxpemVUb0pTT046
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFr
cG9pbnRNYW5hZ2VyLk5hdGl2ZUJyZWFrcG9pbnRUeXBlcy5ET007CisgICAgICAgIHJldHVybiB7
IHR5cGU6IHR5cGUsIGVuYWJsZWQ6IHRoaXMuX2VuYWJsZWQsIGNvbmRpdGlvbjogeyBwYXRoOiB0
aGlzLl9wYXRoLCB0eXBlOiB0aGlzLl90eXBlIH0gfTsKKyAgICB9LAorCiAgICAgX29uUmVtb3Zl
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgbm9kZSA9IFdlYkluc3BlY3Rvci5kb21B
Z2VudC5ub2RlRm9ySWQodGhpcy5fbm9kZUlkKTsKLSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAg
ICAgICBkZWxldGUgbm9kZS5icmVha3BvaW50c1t0aGlzLl9kb21FdmVudFR5cGVdOworICAgICAg
ICBkZWxldGUgdGhpcy5fbm9kZS5icmVha3BvaW50c1t0aGlzLl90eXBlXTsKICAgICB9CiB9CiAK
IFdlYkluc3BlY3Rvci5ET01CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuTmF0aXZlQnJlYWtwb2ludC5wcm90b3R5cGU7CiAKLVdlYkluc3BlY3Rvci5FdmVudExp
c3RlbmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGZyb250ZW5kSWQsIGV2ZW50TmFt
ZSkKK1dlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFn
ZXIsIGlkLCBlbmFibGVkLCBldmVudE5hbWUpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJy
ZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBmcm9udGVuZElkLCAiRXZlbnRMaXN0ZW5lciIp
OworICAgIFdlYkluc3BlY3Rvci5OYXRpdmVCcmVha3BvaW50LmNhbGwodGhpcywgbWFuYWdlciwg
aWQsIGVuYWJsZWQpOwogICAgIHRoaXMuX2V2ZW50TmFtZSA9IGV2ZW50TmFtZTsKLSAgICB0aGlz
Ll9jb25kaXRpb24gPSB7IGV2ZW50TmFtZTogdGhpcy5fZXZlbnROYW1lIH07Ci0gICAgdGhpcy5f
cGVyc2lzdGVudENvbmRpdGlvbiA9IHRoaXMuX2NvbmRpdGlvbjsKKyAgICBpZiAoZW5hYmxlZCkK
KyAgICAgICAgdGhpcy5fZW5hYmxlKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVy
QnJlYWtwb2ludC5ldmVudE5hbWVGb3JVSSA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkKQEAgLTM4OCwx
NyArNDA4LDMzIEBAIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyQnJlYWtwb2ludC5wcm90b3R5
cGUgPSB7CiAgICAgX3VpRXZlbnROYW1lOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1
cm4gV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJCcmVha3BvaW50LmV2ZW50TmFtZUZvclVJKHRo
aXMuX2V2ZW50TmFtZSk7CisgICAgfSwKKworICAgIF9lbmFibGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0RXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQodGhp
cy5fZXZlbnROYW1lKTsKKyAgICB9LAorCisgICAgX2Rpc2FibGU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQo
dGhpcy5fZXZlbnROYW1lKTsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1h
bmFnZXIuTmF0aXZlQnJlYWtwb2ludFR5cGVzLkV2ZW50TGlzdGVuZXI7CisgICAgICAgIHJldHVy
biB7IHR5cGU6IHR5cGUsIGVuYWJsZWQ6IHRoaXMuX2VuYWJsZWQsIGNvbmRpdGlvbjogeyBldmVu
dE5hbWU6IHRoaXMuX2V2ZW50TmFtZSB9IH07CiAgICAgfQogfQogCiBXZWJJbnNwZWN0b3IuRXZl
bnRMaXN0ZW5lckJyZWFrcG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5O
YXRpdmVCcmVha3BvaW50LnByb3RvdHlwZTsKIAotV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQg
PSBmdW5jdGlvbihtYW5hZ2VyLCBmcm9udGVuZElkLCB1cmwpCitXZWJJbnNwZWN0b3IuWEhSQnJl
YWtwb2ludCA9IGZ1bmN0aW9uKG1hbmFnZXIsIGlkLCBlbmFibGVkLCB1cmwpCiB7Ci0gICAgV2Vi
SW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBtYW5hZ2VyLCBmcm9udGVuZElk
LCAiWEhSIik7CisgICAgV2ViSW5zcGVjdG9yLk5hdGl2ZUJyZWFrcG9pbnQuY2FsbCh0aGlzLCBt
YW5hZ2VyLCBpZCwgZW5hYmxlZCk7CiAgICAgdGhpcy5fdXJsID0gdXJsOwotICAgIHRoaXMuX2Nv
bmRpdGlvbiA9IHsgdXJsOiB0aGlzLl91cmwgfTsKLSAgICB0aGlzLl9wZXJzaXN0ZW50Q29uZGl0
aW9uID0gdGhpcy5fY29uZGl0aW9uOworICAgIGlmIChlbmFibGVkKQorICAgICAgICB0aGlzLl9l
bmFibGUoKTsKIH0KIAogV2ViSW5zcGVjdG9yLlhIUkJyZWFrcG9pbnQucHJvdG90eXBlID0gewpA
QCAtNDI3LDYgKzQ2MywyMiBAQCBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludC5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICB2YXIgc3RhdHVzID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJQ
YXVzZWQgb24gYSBYTUxIdHRwUmVxdWVzdC4iKTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdGF0dXMpKTsKKyAgICB9LAorCisgICAgX2VuYWJs
ZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRYSFJCcmVh
a3BvaW50KHRoaXMuX3VybCk7CisgICAgfSwKKworICAgIF9kaXNhYmxlOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZVhIUkJyZWFrcG9pbnQodGhpcy5f
dXJsKTsKKyAgICB9LAorCisgICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHR5cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuTmF0aXZl
QnJlYWtwb2ludFR5cGVzLlhIUjsKKyAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgZW5hYmxl
ZDogdGhpcy5fZW5hYmxlZCwgY29uZGl0aW9uOiB7IHVybDogdGhpcy5fdXJsIH0gfTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tT
aWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRl
YmFyUGFuZS5qcwppbmRleCAxNmM1ZmU0Li44Yjc0MTI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCkBAIC0yNiw3ICsyNiw3
IEBACiBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUgPSBmdW5jdGlvbigpCiB7CiAg
ICAgV2ViSW5zcGVjdG9yLlNpZGViYXJQYW5lLmNhbGwodGhpcywgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCJDYWxsIFN0YWNrIikpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2
ZW50TGlzdGVuZXIoIm5hdGl2ZS1icmVha3BvaW50LWhpdCIsIHRoaXMuX25hdGl2ZUJyZWFrcG9p
bnRIaXQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFuYWdlci5hZGRFdmVu
dExpc3RlbmVyKCJuYXRpdmUtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9uYXRpdmVCcmVha3BvaW50
SGl0LCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3Rl
bmVyKCJzY3JpcHQtYnJlYWtwb2ludC1oaXQiLCB0aGlzLl9zY3JpcHRCcmVha3BvaW50SGl0LCB0
aGlzKTsKIH0KIApAQCAtMTczLDkgKzE3Myw3IEBAIFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRl
YmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICBfbmF0aXZlQnJlYWtwb2ludEhpdDogIGZ1bmN0
aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3Iu
YnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQoZXZlbnQuZGF0YS5icmVha3BvaW50SWQp
OwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YS5icmVha3BvaW50OwogICAgICAgICB2YXIgc3Rh
dHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAg
ICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOwogICAgICAgICBicmVh
a3BvaW50LnBvcHVsYXRlU3RhdHVzTWVzc2FnZUVsZW1lbnQoc3RhdHVzTWVzc2FnZUVsZW1lbnQs
IGV2ZW50LmRhdGEuZXZlbnREYXRhKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyTW9kZWwuanMKaW5kZXggMzdmNGRkMC4uYTE3MDAxOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKQEAgLTEzNCw4ICsxMzQsNyBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChkZXRhaWxz
LmV2ZW50VHlwZSA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRXZlbnRUeXBlcy5KYXZhU2NyaXB0
UGF1c2UpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChkZXRhaWxzLmV2ZW50VHlw
ZSA9PT0gV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRXZlbnRUeXBlcy5OYXRpdmVCcmVha3BvaW50KSB7
Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZGV0YWlscy5ldmVudERhdGEuYnJlYWtw
b2ludElkOwotICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoIm5hdGl2
ZS1icmVha3BvaW50LWhpdCIsIHsgYnJlYWtwb2ludElkOiBicmVha3BvaW50SWQsIGV2ZW50RGF0
YTogZGV0YWlscy5ldmVudERhdGEgfSk7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycygibmF0aXZlLWJyZWFrcG9pbnQtaGl0IiwgZGV0YWlscy5ldmVudERhdGEpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
</data>
<flag name="review"
          id="67090"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>