<?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>86099</bug_id>
          
          <creation_ts>2012-05-10 07:33:48 -0700</creation_ts>
          <short_desc>Web Inspector: pass source mapping into UISourceCode&apos;s constructor; move formatting outside mapping.</short_desc>
          <delta_ts>2012-05-13 23:35:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>86337</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>podivilov</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620572</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-10 07:33:48 -0700</bug_when>
    <thetext>This changes moves formatting out of the source mapping machinery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620575</commentid>
    <comment_count>1</comment_count>
      <attachid>141169</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-10 07:38:57 -0700</bug_when>
    <thetext>Created attachment 141169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621464</commentid>
    <comment_count>2</comment_count>
      <attachid>141169</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2012-05-11 03:36:10 -0700</bug_when>
    <thetext>Comment on attachment 141169
Patch

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

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:70
&gt; +            if (breakpoint._breakpointSourceCodeStorageId !== sourceFileId)

_sourceCodeStorageId?

&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:347
&gt; +        var rawLocation = this._primaryUILocation.uiSourceCode.uiLocationToRawLocation(this._primaryUILocation.lineNumber, 0);

Looks like a UILocation&apos;s method.

&gt; Source/WebCore/inspector/front-end/CallStackSidebarPane.js:150
&gt; +            this._statusMessageElement.appendChild(status);

Shouldn&apos;t you remove this._statusMessageElement&apos;s children?

&gt; Source/WebCore/inspector/front-end/JavaScriptSource.js:51
&gt; +            WebInspector.debuggerPresentationModel.breakpointManager.restoreBreakpoints(this);

Maybe move this call to ScriptsPanel?

&gt; Source/WebCore/inspector/front-end/JavaScriptSource.js:145
&gt; +                this._togglingFormatter = true;

Maybe include this info in event?

&gt; Source/WebCore/inspector/front-end/RawSourceCode.js:118
&gt; +        return WebInspector.debuggerModel.createRawLocationByURL(this.url, lineNumber, columnNumber);

Wouldn&apos;t that broke breakpoints in anonymous scripts?

&gt; Source/WebCore/inspector/front-end/ResourceScriptMapping.js:131
&gt;          var rawSourceCode = /** @type {WebInspector.RawSourceCode} */ event.target;

Not used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621565</commentid>
    <comment_count>3</comment_count>
      <attachid>141169</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-11 06:28:52 -0700</bug_when>
    <thetext>Comment on attachment 141169
Patch

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

&gt;&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:70
&gt;&gt; +            if (breakpoint._breakpointSourceCodeStorageId !== sourceFileId)
&gt; 
&gt; _sourceCodeStorageId?

Done.

&gt;&gt; Source/WebCore/inspector/front-end/BreakpointManager.js:347
&gt;&gt; +        var rawLocation = this._primaryUILocation.uiSourceCode.uiLocationToRawLocation(this._primaryUILocation.lineNumber, 0);
&gt; 
&gt; Looks like a UILocation&apos;s method.

Done.

&gt;&gt; Source/WebCore/inspector/front-end/CallStackSidebarPane.js:150
&gt;&gt; +            this._statusMessageElement.appendChild(status);
&gt; 
&gt; Shouldn&apos;t you remove this._statusMessageElement&apos;s children?

Good catch. Done.

&gt;&gt; Source/WebCore/inspector/front-end/JavaScriptSource.js:51
&gt;&gt; +            WebInspector.debuggerPresentationModel.breakpointManager.restoreBreakpoints(this);
&gt; 
&gt; Maybe move this call to ScriptsPanel?

I would need to copy it in the tests then.

&gt;&gt; Source/WebCore/inspector/front-end/JavaScriptSource.js:145
&gt;&gt; +                this._togglingFormatter = true;
&gt; 
&gt; Maybe include this info in event?

I&apos;ll re-implement this piece as we agreed offline.

&gt;&gt; Source/WebCore/inspector/front-end/RawSourceCode.js:118
&gt;&gt; +        return WebInspector.debuggerModel.createRawLocationByURL(this.url, lineNumber, columnNumber);
&gt; 
&gt; Wouldn&apos;t that broke breakpoints in anonymous scripts?

I don&apos;t think it does. I&apos;ll double check.

&gt;&gt; Source/WebCore/inspector/front-end/ResourceScriptMapping.js:131
&gt;&gt;          var rawSourceCode = /** @type {WebInspector.RawSourceCode} */ event.target;
&gt; 
&gt; Not used.

It is!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621580</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-11 06:41:32 -0700</bug_when>
    <thetext>&gt; 
&gt; I don&apos;t think it does. I&apos;ll double check.

It does. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621582</commentid>
    <comment_count>5</comment_count>
      <attachid>141401</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-11 06:43:07 -0700</bug_when>
    <thetext>Created attachment 141401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621617</commentid>
    <comment_count>6</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2012-05-11 07:12:42 -0700</bug_when>
    <thetext>looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621630</commentid>
    <comment_count>7</comment_count>
      <attachid>141401</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-05-11 07:25:42 -0700</bug_when>
    <thetext>Comment on attachment 141401
Patch

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

&gt; Source/WebCore/inspector/front-end/ScriptsPanel.js:520
&gt; +        this._editorContainer.uiSourceCodeAdded(uiLocation.uiSourceCode);

Please keep the old behaviour as discussed offline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621685</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-05-11 09:13:14 -0700</bug_when>
    <thetext>Committed r116775: &lt;http://trac.webkit.org/changeset/116775&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622404</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-12 12:17:15 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Committed r116775: &lt;http://trac.webkit.org/changeset/116775&gt;

It made a test fail on Qt:
--- /ramdisk/qt-linux-64-release/build/layout-test-results/inspector/debugger/script-formatter-breakpoints-expected.txt 
+++ /ramdisk/qt-linux-64-release/build/layout-test-results/inspector/debugger/script-formatter-breakpoints-actual.txt 
@@ -14,10 +14,14 @@
 
     script-formatter-breakpoints.html:18
     var f = 0;
+    script-formatter-breakpoints.html:25
+    var sourceFrame;
 Breakpoint sidebar pane while paused in raw
 
     script-formatter-breakpoints.html:11
     var f=0;
+    script-formatter-breakpoints.html:18
+    var sourceFrame;
 Script execution resumed.
 Debugger was disabled.
 

Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622688</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-13 23:35:17 -0700</bug_when>
    <thetext>New bug report filed on it - https://bugs.webkit.org/show_bug.cgi?id=86337</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141169</attachid>
            <date>2012-05-10 07:38:57 -0700</date>
            <delta_ts>2012-05-11 06:42:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86099-20120510183854.patch</filename>
            <type>text/plain</type>
            <size>84037</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJjYWVkYTAzNDE5ZTli
MzFkNGFhNmZjZDdhYWEyNWRmMjQ4OWI1ZS4uYjRhZGEwMTQ2ZmFhMmYyNTRiOWU2ODNlNzIxZmY3
NjVlNmE5Yzk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA1LTEwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHBhc3Mgc291cmNlIG1hcHBpbmcgaW50byBVSVNvdXJjZUNvZGUncyBjb25zdHJ1Y3Rvcjsg
bW92ZSBmb3JtYXR0aW5nIG91dHNpZGUgbWFwcGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzIG1vdmVzIGZvcm1hdHRpbmcgb3V0
IG9mIHRoZSBzb3VyY2UgbWFwcGluZyBtYWNoaW5lcnkuCisgICAgICAgIEFzIGEgcmVzdWx0LCBp
dCByZW1vdmVzIG1vc3Qgb2YgdGhlIERlYnVnZ2VyUHJlc2VudGF0aW9uJ3MgbWFwcGluZy1yZWxh
dGVkIGNvZGUgYXMgd2VsbAorICAgICAgICBhcyBtb3N0IG9mIHRoZSByYXcgc291cmNlIGNvZGUn
cyBjb2RlLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdl
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc3RvcmVCcmVha3Bv
aW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUu
c2V0U3RhdHVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0
TWFwcGluZy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRp
b25Nb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5wcm90b3R5cGUuX2NhbGxGcmFtZVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlTGlz
dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9k
ZWwucHJvdG90eXBlLmNvbnRpbnVlVG9MaW5lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0phdmFTY3JpcHRTb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dFNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5
cGUuZmlyZUNvbnRlbnRBdmFpbGFibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRTb3VyY2UucHJvdG90eXBlLnNldEZvcm1hdHRlZC5pZik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5cGUuc2V0Rm9ybWF0dGVkLmRpZEdldENvbnRlbnQu
ZGlkRm9ybWF0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZS5wcm90b3R5cGUuc2V0Rm9ybWF0dGVkLmRpZEdldENvbnRlbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlLnNldEZvcm1hdHRlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5cGUudG9nZ2xpbmdGb3JtYXR0
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlLnVp
TG9jYXRpb25Ub1Jhd0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlLnByb3RvdHlwZS5vdmVycmlkZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlLnByb3RvdHlwZS5icmVha3BvaW50U3RvcmFnZUlkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fb25Db250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmF3U291cmNlQ29kZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdT
b3VyY2VDb2RlLnByb3RvdHlwZS5hZGRTY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJh
d1NvdXJjZUNvZGUucHJvdG90eXBlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS5fY3JlYXRlVUlTb3VyY2VDb2Rl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS51aUxvY2F0
aW9uVG9SYXdMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5w
cm90b3R5cGUudWlTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VD
b2RlLnByb3RvdHlwZS5fZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlU2NyaXB0TWFwcGluZy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVNjcmlwdE1hcHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2Ny
aXB0TWFwcGluZy5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90eXBlLl9oYW5kbGVVSVNvdXJjZUNvZGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90eXBl
Ll91aVNvdXJjZUNvZGVDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLnJhd0xvY2F0
aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZv
cm1hdHRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90
eXBlLl9kaWRGb3JtYXRDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJT
b3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5vcmlnaW5hbFRvRm9ybWF0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLklkZW50aXR5Rm9ybWF0dGVyU291cmNlTWFwcGluZy5wcm90
b3R5cGUub3JpZ2luYWxUb0Zvcm1hdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSWRlbnRp
dHlGb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nSW1wbCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGluZ0ltcGwucHJvdG90eXBlLm9y
aWdpbmFsVG9Gb3JtYXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJj
ZU1hcHBpbmdJbXBsLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTWFpblNjcmlwdE1hcHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk1haW5TY3JpcHRN
YXBwaW5nLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk1haW5TY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlQWRkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuc2hvd0Z1bmN0
aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5fc2hvd0ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX3JldmVhbEV4ZWN1dGlvbkxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUuX3RvZ2dsZUZvcm1hdFNvdXJjZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1NlYXJjaFJlc3VsdHNQYW5lLnByb3RvdHlwZS5jcmVhdGVBbmNob3IpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldHNNb2RlbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TbmlwcGV0c1NjcmlwdE1hcHBpbmcucHJvdG90eXBlLl9zbmlwcGV0QWRkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNuaXBwZXRzU2NyaXB0TWFwcGluZy5wcm90b3R5cGUu
X2NyZWF0ZVVJU291cmNlQ29kZUZvclNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9VSVNvdXJjZUNvZGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLm1p
bWVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLmNv
bnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5wcm90b3R5cGUuZmly
ZUNvbnRlbnRBdmFpbGFibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5w
cm90b3R5cGUuY29udGVudExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbik6CisKIDIwMTItMDUtMTAgIEFs
ZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBdXRvY29tcGxldGUgZm9yIENTUyBwcm9wZXJ0eSB2YWx1ZXMgaW4gdGhlIFN0eWxl
cyBwYW5lIGJlaGF2aW5nIGluY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCBkMWMwZTk5MzY0
NGRmNjAxYjUyODZkNDg2YTMyN2NkOTJhMzE1Y2UyLi5hZDA5YzZiOTNlYTExYjNhYzM0M2MwYzUz
N2Y2NjFkZWVlNDIyNjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTMzLDEzICszMywxMSBAQAogICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9CiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
ZXR0aW5nfSBicmVha3BvaW50U3RvcmFnZQogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNb2RlbH0gZGVidWdnZXJNb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTWFpblNjcmlw
dE1hcHBpbmd9IHNvdXJjZU1hcHBpbmcKICAqLwotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyID0gZnVuY3Rpb24oYnJlYWtwb2ludFN0b3JhZ2UsIGRlYnVnZ2VyTW9kZWwsIHNvdXJjZU1h
cHBpbmcpCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbihicmVha3Bv
aW50U3RvcmFnZSwgZGVidWdnZXJNb2RlbCkKIHsKICAgICB0aGlzLl9zdG9yYWdlID0gbmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5TdG9yYWdlKHRoaXMsIGJyZWFrcG9pbnRTdG9y
YWdlKTsKICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2RlbDsKLSAgICB0aGlz
Ll9zb3VyY2VNYXBwaW5nID0gc291cmNlTWFwcGluZzsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnRz
ID0gW107CiAgICAgdGhpcy5fYnJlYWtwb2ludEZvckRlYnVnZ2VySWQgPSB7fTsKQEAgLTY5LDcg
KzY3LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgLy8gRXJhc2UgcHJvdmlzaW9uYWwgYnJlYWtwb2ludHMgcHJpb3IgdG8gcmVzdG9yaW5n
IHRoZW0uCiAgICAgICAgIGZvciAodmFyIGRlYnVnZ2VySWQgaW4gdGhpcy5fYnJlYWtwb2ludEZv
ckRlYnVnZ2VySWQpIHsKICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtw
b2ludEZvckRlYnVnZ2VySWRbZGVidWdnZXJJZF07Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC5fcHJpbWFyeVVJTG9jYXRpb24udWlTb3VyY2VDb2RlLmlkICE9PSB1aVNvdXJjZUNvZGUuaWQp
CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5fYnJlYWtwb2ludFNvdXJjZUNvZGVTdG9yYWdl
SWQgIT09IHNvdXJjZUZpbGVJZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z2dlcklkKTsKICAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50Rm9yRGVidWdnZXJJZFtkZWJ1Z2dlcklk
XTsKQEAgLTI0MSw2ICsyMzksNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludCA9IGZ1bmN0aW9uKGJyZWFrcG9pbnRNYW5hZ2VyLCB1aVNvdXJjZQogewogICAgIHRo
aXMuX2JyZWFrcG9pbnRNYW5hZ2VyID0gYnJlYWtwb2ludE1hbmFnZXI7CiAgICAgdGhpcy5fcHJp
bWFyeVVJTG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2Rl
LCBsaW5lTnVtYmVyLCAwKTsKKyAgICB0aGlzLl9icmVha3BvaW50U291cmNlQ29kZVN0b3JhZ2VJ
ZCA9IHVpU291cmNlQ29kZS5icmVha3BvaW50U3RvcmFnZUlkKCk7CiAgICAgdGhpcy5fbGl2ZUxv
Y2F0aW9ucyA9IFtdOwogICAgIHRoaXMuX3VpTG9jYXRpb25zID0gbmV3IE1hcCgpOwogCkBAIC0z
NDUsNyArMzQ0LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnQu
cHJvdG90eXBlID0gewogCiAgICAgX3NldEluRGVidWdnZXI6IGZ1bmN0aW9uKCkKICAgICB7Ci0g
ICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2VyLl9zb3VyY2VN
YXBwaW5nLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHRoaXMuX3ByaW1hcnlVSUxvY2F0aW9uLnVp
U291cmNlQ29kZSwgdGhpcy5fcHJpbWFyeVVJTG9jYXRpb24ubGluZU51bWJlciwgMCk7CisgICAg
ICAgIHZhciByYXdMb2NhdGlvbiA9IHRoaXMuX3ByaW1hcnlVSUxvY2F0aW9uLnVpU291cmNlQ29k
ZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbih0aGlzLl9wcmltYXJ5VUlMb2NhdGlvbi5saW5lTnVt
YmVyLCAwKTsKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuX2RlYnVnZ2VyTW9kZWwu
c2V0QnJlYWtwb2ludEJ5U2NyaXB0TG9jYXRpb24ocmF3TG9jYXRpb24sIHRoaXMuX2NvbmRpdGlv
biwgZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKICAgICAgICAgLyoqCiAgICAgICAgICAq
IEB0aGlzIHtXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJh
clBhbmUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1Np
ZGViYXJQYW5lLmpzCmluZGV4IDQ1NGMxM2NjYjAyMmY3MzBiNjkzZjM5OTIxNWIxOTUwMDY3YjUy
ZTUuLjQzMDI5MGZjYjk0ZTc4NGM3NzFkNDcwZTllYjg5YjZiNTRiODUwY2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRl
YmFyUGFuZS5qcwpAQCAtMTM5LDEzICsxMzksMTUgQEAgV2ViSW5zcGVjdG9yLkNhbGxTdGFja1Np
ZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgIHNldFN0YXR1czogZnVuY3Rpb24oc3RhdHVz
KQogICAgIHsKLSAgICAgICAgdmFyIHN0YXR1c01lc3NhZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHN0YXR1c01lc3NhZ2VFbGVtZW50LmNsYXNzTmFt
ZSA9ICJpbmZvIjsKKyAgICAgICAgaWYgKCF0aGlzLl9zdGF0dXNNZXNzYWdlRWxlbWVudCkgewor
ICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgIHRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50LmNs
YXNzTmFtZSA9ICJpbmZvIjsKKyAgICAgICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQpOworICAgICAgICB9CiAgICAgICAgIGlmICh0
eXBlb2Ygc3RhdHVzID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VFbGVt
ZW50LnRleHRDb250ZW50ID0gc3RhdHVzOworICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVzc2Fn
ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdGF0dXM7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0YXR1c01lc3NhZ2VFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1cyk7Ci0gICAgICAgIHRoaXMu
Ym9keUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzTWVzc2FnZUVsZW1lbnQpOworICAgICAgICAg
ICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQuYXBwZW5kQ2hpbGQoc3RhdHVzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29t
cGlsZXJTY3JpcHRNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKaW5kZXggYTY5NWFhNGZkMWFmMjk5YzViMDg0OTlk
OGQ5MjZiZTIwZWFlNTkzMC4uZWUzOTA3MTk5YjQ3ZWY0ZWE0YzM5YjQyYzJjZDQwNzQ1YmM0MThj
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db21waWxl
clNjcmlwdE1hcHBpbmcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKQEAgLTExNiw3ICsxMTYsNyBAQCBXZWJJbnNwZWN0
b3IuQ29tcGlsZXJTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBj
b250ZW50UHJvdmlkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXRpY0NvbnRlbnRQcm92aWRlcigi
dGV4dC9qYXZhc2NyaXB0Iiwgc291cmNlQ29udGVudCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3BlY3Rvci5Db21waWxlclNv
dXJjZU1hcHBpbmdDb250ZW50UHJvdmlkZXIoc291cmNlVVJMKTsKLSAgICAgICAgICAgIHZhciB1
aVNvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2Uoc291cmNlVVJM
LCBzb3VyY2VVUkwsIGNvbnRlbnRQcm92aWRlcik7CisgICAgICAgICAgICB2YXIgdWlTb3VyY2VD
b2RlID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlKHNvdXJjZVVSTCwgc291cmNl
VVJMLCBjb250ZW50UHJvdmlkZXIsIHRoaXMpOwogICAgICAgICAgICAgdWlTb3VyY2VDb2RlLmlz
Q29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3JpcHQ7CiAgICAgICAgICAgICB1aVNv
dXJjZUNvZGUuaXNFZGl0YWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5fdWlTb3VyY2VD
b2RlQnlVUkxbc291cmNlVVJMXSA9IHVpU291cmNlQ29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25N
b2RlbC5qcwppbmRleCBiMTg5ZjE2NzllMDNmYmE5OGM1NGMxOWFlOWQxM2E4NmU2YjdlODA5Li4z
MDQ5NTRmMGUyMzg2MjA4MzY0NTg1YWMwMzcxOThiMDYwZGQ0MTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLmpzCkBAIC0zOSw4ICszOSw3IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclBy
ZXNlbnRhdGlvbk1vZGVsID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5fcHJlc2VudGF0aW9uQ2Fs
bEZyYW1lcyA9IFtdOwogCi0gICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIgPSBuZXcgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKFdlYkluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50
cywgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwsIHRoaXMuX3NjcmlwdE1hcHBpbmcpOwotICAg
IHRoaXMuX2JyZWFrcG9pbnRzQWN0aXZlID0gdHJ1ZTsKKyAgICB0aGlzLl9icmVha3BvaW50TWFu
YWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIoV2ViSW5zcGVjdG9yLnNl
dHRpbmdzLmJyZWFrcG9pbnRzLCBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbCk7CiAKICAgICB0
aGlzLl9wZW5kaW5nQ29uc29sZU1lc3NhZ2VzID0ge307CiAgICAgdGhpcy5fY29uc29sZU1lc3Nh
Z2VMaXZlTG9jYXRpb25zID0gW107CkBAIC03MCwyNiArNjksNiBAQCBXZWJJbnNwZWN0b3IuRGVi
dWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBA
cGFyYW0ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICogQHJldHVy
biB7P1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9V
SUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9zY3JpcHRNYXBwaW5nLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKTsK
LSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAg
ICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dl
ckFnZW50LkxvY2F0aW9ufQotICAgICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBm
dW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9zY3JpcHRNYXBwaW5nLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9u
KHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHBhcmFtIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9ufSByYXdMb2NhdGlvbgog
ICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24oV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24pOihib29sZWFu
fHVuZGVmaW5lZCl9IHVwZGF0ZURlbGVnYXRlCiAgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9y
LkxpdmVMb2NhdGlvbn0KICAgICAgKi8KQEAgLTEyMCw3ICs5OSw2IEBAIFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZSA9IHsKICAgICBfY2FsbEZyYW1lU2Vs
ZWN0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGNhbGxGcmFtZSA9IC8q
KiBAdHlwZSB7V2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuQ2FsbEZyYW1lfSAqLyBldmVudC5k
YXRhOwotICAgICAgICB0aGlzLl9zY3JpcHRNYXBwaW5nLmZvcmNlVXBkYXRlU291cmNlTWFwcGlu
ZyhjYWxsRnJhbWUubG9jYXRpb24pOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEzOCw5ICsxMTYs
NiBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5cGUgPSB7
CiAgICAgewogICAgICAgICB2YXIgcmVtb3ZlZEl0ZW1zID0gLyoqIEB0eXBlIHtBcnJheS48V2Vi
SW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICovIGV2ZW50LmRhdGFbInJlbW92ZWRJdGVtcyJdOwog
ICAgICAgICB2YXIgYWRkZWRJdGVtcyA9IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5V
SVNvdXJjZUNvZGU+fSAqLyBldmVudC5kYXRhWyJhZGRlZEl0ZW1zIl07Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFkZGVkSXRlbXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5icmVha3BvaW50TWFu
YWdlci5yZXN0b3JlQnJlYWtwb2ludHMoYWRkZWRJdGVtc1tpXSk7CiAKICAgICAgICAgaWYgKCFy
ZW1vdmVkSXRlbXMubGVuZ3RoKSB7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFk
ZGVkSXRlbXMubGVuZ3RoOyArK2kpCkBAIC0xNzAsNyArMTQ1LDcgQEAgV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHNldFNj
cmlwdFNvdXJjZTogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBuZXdTb3VyY2UsIGNhbGxiYWNrKQog
ICAgIHsKLSAgICAgICAgdmFyIHJhd0xvY2F0aW9uID0gdGhpcy51aUxvY2F0aW9uVG9SYXdMb2Nh
dGlvbih1aVNvdXJjZUNvZGUsIDAsIDApOworICAgICAgICB2YXIgcmF3TG9jYXRpb24gPSB1aVNv
dXJjZUNvZGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24oMCwgMCk7CiAgICAgICAgIHZhciBzY3Jp
cHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JJZChyYXdMb2NhdGlvbi5z
Y3JpcHRJZCk7CiAKICAgICAgICAgLyoqCkBAIC0xOTMsMTUgKzE2OCw2IEBAIFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAg
LyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JtYXRTb3VyY2UKLSAgICAgKi8KLSAgICBz
ZXRGb3JtYXRTb3VyY2U6IGZ1bmN0aW9uKGZvcm1hdFNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRNYW5hZ2VyLnJlc2V0KCk7Ci0gICAgICAgIHRoaXMuX3NjcmlwdE1hcHBp
bmcuc2V0Rm9ybWF0U291cmNlKGZvcm1hdFNvdXJjZSk7Ci0gICAgfSwKLQotICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwogICAgIF9jb25z
b2xlTWVzc2FnZUFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTI4NCwxNSArMjUwLDEwIEBAIFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAg
Ki8KICAgICBjb250aW51ZVRvTGluZTogZnVuY3Rpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVy
KQogICAgIHsKLSAgICAgICAgdmFyIHJhd0xvY2F0aW9uID0gdGhpcy51aUxvY2F0aW9uVG9SYXdM
b2NhdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIDApOworICAgICAgICB2YXIgcmF3TG9j
YXRpb24gPSB1aVNvdXJjZUNvZGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24obGluZU51bWJlciwg
MCk7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNvbnRpbnVlVG9Mb2NhdGlv
bihyYXdMb2NhdGlvbik7CiAgICAgfSwKIAotICAgIHJlbW92ZUFsbEJyZWFrcG9pbnRzOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5yZW1vdmVBbGxC
cmVha3BvaW50cygpOwotICAgIH0sCi0KICAgICBfZGVidWdnZXJSZXNldDogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgdGhpcy5fc2NyaXB0TWFwcGluZy5yZXNldCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNlLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNlLmpzCmlu
ZGV4IGIzNjY1MzYwMDkzMzI0ZDVjZjNmMGVhNDUyZjk0ZGQ0NjFiNzMyNzUuLmU3MThlN2U5NjRk
MmI0MDA4MWVjZDU5ZjdjNDg3ZTcxNDllNzdlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNvdXJjZS5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2UuanMKQEAgLTM0LDE1ICsz
NCwyMiBAQAogICogQHBhcmFtIHtzdHJpbmd9IGlkCiAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCiAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9IGNvbnRlbnRQcm92aWRlcgor
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwcGluZ30gc291cmNlTWFwcGluZwogICov
Ci1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZSA9IGZ1bmN0aW9uKGlkLCB1cmwsIGNvbnRl
bnRQcm92aWRlcikKK1dlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlID0gZnVuY3Rpb24oaWQs
IHVybCwgY29udGVudFByb3ZpZGVyLCBzb3VyY2VNYXBwaW5nKQogewotICAgIFdlYkluc3BlY3Rv
ci5VSVNvdXJjZUNvZGUuY2FsbCh0aGlzLCBpZCwgdXJsLCBjb250ZW50UHJvdmlkZXIpOworICAg
IFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUuY2FsbCh0aGlzLCBpZCwgdXJsLCBjb250ZW50UHJv
dmlkZXIsIHNvdXJjZU1hcHBpbmcpOwogCiAgICAgLyoqCiAgICAgICogQHR5cGUge0FycmF5LjxX
ZWJJbnNwZWN0b3IuUHJlc2VudGF0aW9uQ29uc29sZU1lc3NhZ2U+fQogICAgICAqLwogICAgIHRo
aXMuX2NvbnNvbGVNZXNzYWdlcyA9IFtdOworICAgIHRoaXMuX2Zvcm1hdHRlck1hcHBpbmcgPSBu
ZXcgV2ViSW5zcGVjdG9yLklkZW50aXR5Rm9ybWF0dGVyU291cmNlTWFwcGluZygpOworICAgIC8v
IEZJWE1FOiBwb3N0cG9uZSBicmVha3BvaW50cyByZXN0b3JlIHRvIGFmdGVyIHRoZSBtYXBwaW5n
IGhhcyBiZWVuIGVzdGFibGlzaGVkLgorICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgIGlmICghdGhpcy5fZm9ybWF0dGVkKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZUJyZWFrcG9pbnRz
KHRoaXMpOworICAgIH0uYmluZCh0aGlzKSwgMCk7CiB9CiAKIFdlYkluc3BlY3Rvci5KYXZhU2Ny
aXB0U291cmNlLnByb3RvdHlwZSA9IHsKQEAgLTcwLDExICs3NywxMTggQEAgV2ViSW5zcGVjdG9y
LkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAg
KiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRl
bnRFbmNvZGVkCisgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCisgICAgICovCisgICAg
ZmlyZUNvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9uKGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBt
aW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90
eXBlLmZpcmVDb250ZW50QXZhaWxhYmxlLmNhbGwodGhpcywgY29udGVudCwgY29udGVudEVuY29k
ZWQsIG1pbWVUeXBlKTsKKyAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdE9uTG9hZCkgeworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX2Zvcm1hdE9uTG9hZDsKKyAgICAgICAgICAgIHRoaXMuc2V0Rm9y
bWF0dGVkKHRydWUpOworICAgICAgICB9CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJh
bSB7Ym9vbGVhbn0gZm9ybWF0dGVkCisgICAgICogQHBhcmFtIHtmdW5jdGlvbigpPX0gY2FsbGJh
Y2sKKyAgICAgKi8KKyAgICBzZXRGb3JtYXR0ZWQ6IGZ1bmN0aW9uKGZvcm1hdHRlZCwgY2FsbGJh
Y2spCisgICAgeworICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307
CisgICAgICAgIGlmICghdGhpcy5jb250ZW50TG9hZGVkKCkpIHsKKyAgICAgICAgICAgIHRoaXMu
X2Zvcm1hdE9uTG9hZCA9IGZvcm1hdHRlZDsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVk
ID09PSBmb3JtYXR0ZWQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9mb3JtYXR0ZWQgPSBmb3JtYXR0ZWQ7
CisKKyAgICAgICAgLy8gUmUtcmVxdWVzdCBjb250ZW50CisgICAgICAgIHRoaXMuX2NvbnRlbnRM
b2FkZWQgPSBmYWxzZTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5wcm90b3R5
cGUucmVxdWVzdENvbnRlbnQuY2FsbCh0aGlzLCBkaWRHZXRDb250ZW50LmJpbmQodGhpcykpOwor
ICAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEB0aGlzIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlfQorICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKKyAgICAgICAgICogQHBh
cmFtIHtib29sZWFufSBjb250ZW50RW5jb2RlZAorICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWltZVR5cGUKKyAgICAgICAgICovCisgICAgICAgIGZ1bmN0aW9uIGRpZEdldENvbnRlbnQoY29u
dGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWZvcm1hdHRlZCkgeworICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsaW5nRm9ybWF0dGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2VkKGNvbnRlbnQgfHwg
IiIpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90b2dnbGluZ0Zvcm1hdHRlcjsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXJNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5J
ZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcoKTsKKyAgICAgICAgICAgICAgICB0aGlzLnVw
ZGF0ZUxpdmVMb2NhdGlvbnMoKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIHZhciBm
b3JtYXR0ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlcigpOworICAgICAgICAg
ICAgZm9ybWF0dGVyLmZvcm1hdENvbnRlbnQobWltZVR5cGUsIGNvbnRlbnQgfHwgIiIsIGRpZEZv
cm1hdENvbnRlbnQuYmluZCh0aGlzKSk7CisgIAorICAgICAgICAgICAgLyoqCisgICAgICAgICAg
ICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KKyAgICAgICAgICAgICAqIEBw
YXJhbSB7c3RyaW5nfSBmb3JtYXR0ZWRDb250ZW50CisgICAgICAgICAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nfSBmb3JtYXR0ZXJNYXBwaW5nCisgICAg
ICAgICAgICAgKi8KKyAgICAgICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdENvbnRlbnQoZm9ybWF0
dGVkQ29udGVudCwgZm9ybWF0dGVyTWFwcGluZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLl90b2dnbGluZ0Zvcm1hdHRlciA9IHRydWU7CisgICAgICAgICAgICAgICAgdGhp
cy5jb250ZW50Q2hhbmdlZChmb3JtYXR0ZWRDb250ZW50KTsKKyAgICAgICAgICAgICAgICBkZWxl
dGUgdGhpcy5fdG9nZ2xpbmdGb3JtYXR0ZXI7CisgICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0
dGVyTWFwcGluZyA9IGZvcm1hdHRlck1hcHBpbmc7CisgICAgICAgICAgICAgICAgdGhpcy51cGRh
dGVMaXZlTG9jYXRpb25zKCk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
UHJlc2VudGF0aW9uTW9kZWwuYnJlYWtwb2ludE1hbmFnZXIucmVzdG9yZUJyZWFrcG9pbnRzKHRo
aXMpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8K
KyAgICB0b2dnbGluZ0Zvcm1hdHRlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3RvZ2dsaW5nRm9ybWF0dGVyOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFy
YW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1i
ZXIKKyAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9ufQorICAgICAqLworICAg
IHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpCisgICAgeworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJNYXBwaW5n
LmZvcm1hdHRlZFRvT3JpZ2luYWwobGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLnVpTG9jYXRpb25Ub1Jh
d0xvY2F0aW9uLmNhbGwodGhpcywgbG9jYXRpb25bMF0sIGxvY2F0aW9uWzFdKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0gdWlMb2Nh
dGlvbgorICAgICAqLworICAgIG92ZXJyaWRlTG9jYXRpb246IGZ1bmN0aW9uKHVpTG9jYXRpb24p
CisgICAgeworICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9mb3JtYXR0ZXJNYXBwaW5nLm9y
aWdpbmFsVG9Gb3JtYXR0ZWQodWlMb2NhdGlvbi5saW5lTnVtYmVyLCB1aUxvY2F0aW9uLmNvbHVt
bk51bWJlcik7CisgICAgICAgIHVpTG9jYXRpb24ubGluZU51bWJlciA9IGxvY2F0aW9uWzBdOwor
ICAgICAgICB1aUxvY2F0aW9uLmNvbHVtbk51bWJlciA9IGxvY2F0aW9uWzFdOworICAgICAgICBy
ZXR1cm4gdWlMb2NhdGlvbjsKKyAgICB9LAorCisgICAgLyoqCiAgICAgICogQHJldHVybiB7c3Ry
aW5nfQogICAgICAqLwogICAgIGJyZWFrcG9pbnRTdG9yYWdlSWQ6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmlkOworICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0dGVk
ID8gImRlb2JmdXNjYXRlZDoiICsgdGhpcy51cmwgOiB0aGlzLnVybDsKICAgICB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNjcmlwdFNv
dXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanMKaW5kZXggZGEzOTBhZjIwM2ZhMTBlNTM5MTdjNzVlZTQ0MjFlZWUz
NGM5MmVjNy4uZTUxNzhkNTljOTFlZmJiYzg4YWYzYmIwYmY4MTEwZjU3ZDBlNWFhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNl
RnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanMKQEAgLTEyMCwxMSArMTIwLDE1IEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgb2xkQ29udGVudCA9
IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyBldmVudC5kYXRhLm9sZENvbnRlbnQ7CiAgICAgICAgIHZh
ciBjb250ZW50ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIGV2ZW50LmRhdGEuY29udGVudDsKIAot
ICAgICAgICB2YXIgYnJlYWtwb2ludExvY2F0aW9ucyA9IHRoaXMuX2JyZWFrcG9pbnRNYW5hZ2Vy
LmJyZWFrcG9pbnRMb2NhdGlvbnNGb3JVSVNvdXJjZUNvZGUodGhpcy5fdWlTb3VyY2VDb2RlKTsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50TG9jYXRpb25zLmxlbmd0aDsg
KytpKQotICAgICAgICAgICAgYnJlYWtwb2ludExvY2F0aW9uc1tpXS5icmVha3BvaW50LnJlbW92
ZSgpOwotICAgICAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCwgZmFsc2UsICJ0ZXh0L2phdmFz
Y3JpcHQiKTsKLSAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2ludHNBZnRlckxpdmVFZGl0KG9s
ZENvbnRlbnQsIGNvbnRlbnQsIGJyZWFrcG9pbnRMb2NhdGlvbnMpOworICAgICAgICBpZiAodGhp
cy5fdWlTb3VyY2VDb2RlLnRvZ2dsaW5nRm9ybWF0dGVyKCkpCisgICAgICAgICAgICB0aGlzLnNl
dENvbnRlbnQoY29udGVudCwgZmFsc2UsIHRoaXMuX3VpU291cmNlQ29kZS5taW1lVHlwZSgpKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludExvY2F0aW9ucyA9IHRo
aXMuX2JyZWFrcG9pbnRNYW5hZ2VyLmJyZWFrcG9pbnRMb2NhdGlvbnNGb3JVSVNvdXJjZUNvZGUo
dGhpcy5fdWlTb3VyY2VDb2RlKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJl
YWtwb2ludExvY2F0aW9ucy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBicmVha3BvaW50
TG9jYXRpb25zW2ldLmJyZWFrcG9pbnQucmVtb3ZlKCk7CisgICAgICAgICAgICB0aGlzLnNldENv
bnRlbnQoY29udGVudCwgZmFsc2UsIHRoaXMuX3VpU291cmNlQ29kZS5taW1lVHlwZSgpKTsKKyAg
ICAgICAgICAgIHRoaXMuX3VwZGF0ZUJyZWFrcG9pbnRzQWZ0ZXJMaXZlRWRpdChvbGRDb250ZW50
LCBjb250ZW50LCBicmVha3BvaW50TG9jYXRpb25zKTsKKyAgICAgICAgfQogICAgIH0sCiAKICAg
ICBwb3B1bGF0ZUxpbmVHdXR0ZXJDb250ZXh0TWVudTogZnVuY3Rpb24oY29udGV4dE1lbnUsIGxp
bmVOdW1iZXIpCkBAIC01MTAsOSArNTE0LDggQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSAvKiogQHR5
cGUge1dlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50fSAqLyBldmVudC5k
YXRhLmJyZWFrcG9pbnQ7CiAgICAgICAgIHZhciByZW1haW5pbmdCcmVha3BvaW50ID0gdGhpcy5f
YnJlYWtwb2ludE1hbmFnZXIuZmluZEJyZWFrcG9pbnQodGhpcy5fdWlTb3VyY2VDb2RlLCB1aUxv
Y2F0aW9uLmxpbmVOdW1iZXIpOwotICAgICAgICBpZiAoIXJlbWFpbmluZ0JyZWFrcG9pbnQgJiYg
dGhpcy5sb2FkZWQpIHsKKyAgICAgICAgaWYgKCFyZW1haW5pbmdCcmVha3BvaW50ICYmIHRoaXMu
bG9hZGVkKQogICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJlYWtwb2ludERlY29yYXRpb24odWlM
b2NhdGlvbi5saW5lTnVtYmVyKTsKLSAgICAgICAgfQogICAgIH0sCiAKICAgICBfY29uc29sZU1l
c3NhZ2VBZGRlZDogZnVuY3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMKaW5kZXggNWNjYThmMTAxNzA4ZTY0MzVl
NTBkOWU4YTkzMDdjYTdmYzdjNDliMy4uMjBmMTVkYjc4NDU3MmZhYmU3MjBmYmFiOGZkZTVmZDU2
Yzk1MDAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9S
YXdTb3VyY2VDb2RlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UmF3U291cmNlQ29kZS5qcwpAQCAtMzgsMjYgKzM4LDIzIEBACiAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5TY3JpcHR9IHNjcmlwdAogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3VyY2V9IHJl
c291cmNlCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5OZXR3b3JrUmVxdWVzdH0gcmVxdWVzdAot
ICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyfSBmb3JtYXR0ZXIKLSAqIEBw
YXJhbSB7Ym9vbGVhbn0gZm9ybWF0dGVkCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VN
YXBwaW5nfSBzb3VyY2VNYXBwaW5nCiAgKi8KLVdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlID0g
ZnVuY3Rpb24oaWQsIHNjcmlwdCwgcmVzb3VyY2UsIHJlcXVlc3QsIGZvcm1hdHRlciwgZm9ybWF0
dGVkKQorV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUgPSBmdW5jdGlvbihpZCwgc2NyaXB0LCBy
ZXNvdXJjZSwgcmVxdWVzdCwgc291cmNlTWFwcGluZykKIHsKICAgICB0aGlzLmlkID0gaWQ7CiAg
ICAgdGhpcy51cmwgPSBzY3JpcHQuc291cmNlVVJMOwogICAgIHRoaXMuaXNDb250ZW50U2NyaXB0
ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdDsKICAgICB0aGlzLl9zY3JpcHRzID0gW3NjcmlwdF07
Ci0gICAgdGhpcy5fZm9ybWF0dGVyID0gZm9ybWF0dGVyOwotICAgIHRoaXMuX2Zvcm1hdHRlZCA9
IGZvcm1hdHRlZDsKICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlOwogICAgIHRoaXMuX3Bl
bmRpbmdSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICB0aGlzLl9zb3VyY2VNYXBwaW5nID0gc291cmNl
TWFwcGluZzsKIAotICAgIHRoaXMuX2hhc05ld1NjcmlwdHMgPSB0cnVlOwotCisgICAgdGhpcy5f
dWlTb3VyY2VDb2RlID0gbnVsbDsKICAgICBpZiAodGhpcy5fcGVuZGluZ1JlcXVlc3QpCiAgICAg
ICAgIHRoaXMuX3BlbmRpbmdSZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLk5l
dHdvcmtSZXF1ZXN0LkV2ZW50cy5GaW5pc2hlZExvYWRpbmcsIHRoaXMuX2ZpbmlzaGVkTG9hZGlu
ZywgdGhpcyk7CiAgICAgZWxzZQotICAgICAgICB0aGlzLl91cGRhdGVTb3VyY2VNYXBwaW5nKCk7
CisgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZSA9IHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZSh0
aGlzLnVybCk7CiB9CiAKIFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLkV2ZW50cyA9IHsKQEAg
LTcxLDcgKzY4LDYgQEAgV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUucHJvdG90eXBlID0gewog
ICAgIGFkZFNjcmlwdDogZnVuY3Rpb24oc2NyaXB0KQogICAgIHsKICAgICAgICAgdGhpcy5fc2Ny
aXB0cy5wdXNoKHNjcmlwdCk7Ci0gICAgICAgIHRoaXMuX2hhc05ld1NjcmlwdHMgPSB0cnVlOwog
ICAgIH0sCiAKICAgICAvKioKQEAgLTgwLDIwMSArNzYsMzggQEAgV2ViSW5zcGVjdG9yLlJhd1Nv
dXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0
aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zb3Vy
Y2VNYXBwaW5nKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZU1hcHBpbmcucmF3TG9j
YXRpb25Ub1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFn
ZW50LkxvY2F0aW9ufQotICAgICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAg
ICAgIGlmICh0aGlzLl9zb3VyY2VNYXBwaW5nKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Nv
dXJjZU1hcHBpbmcudWlMb2NhdGlvblRvUmF3TG9jYXRpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9LAotCi0gICAg
LyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZXxudWxsfQotICAg
ICAqLwotICAgIHVpU291cmNlQ29kZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX3NvdXJjZU1hcHBpbmcpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlTWFwcGlu
Zy51aVNvdXJjZUNvZGUoKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9ybWF0dGVkCi0gICAgICovCi0gICAgc2V0Rm9y
bWF0dGVkOiBmdW5jdGlvbihmb3JtYXR0ZWQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZm9y
bWF0dGVkID09PSBmb3JtYXR0ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMu
X2Zvcm1hdHRlZCA9IGZvcm1hdHRlZDsKLSAgICAgICAgdGhpcy5fdXBkYXRlU291cmNlTWFwcGlu
ZygpOwotICAgIH0sCi0KLSAgICBfZmluaXNoZWRMb2FkaW5nOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHRoaXMuX3Jlc291cmNlID0gV2ViSW5zcGVjdG9yLnJlc291cmNlRm9yVVJM
KHRoaXMuX3BlbmRpbmdSZXF1ZXN0LnVybCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5n
UmVxdWVzdDsKLSAgICAgICAgdGhpcy5fdXBkYXRlU291cmNlTWFwcGluZygpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHR9IHNjcmlwdAotICAg
ICAqLwotICAgIGZvcmNlVXBkYXRlU291cmNlTWFwcGluZzogZnVuY3Rpb24oc2NyaXB0KQotICAg
IHsKLSAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVxdWVzdCB8fCAhdGhpcy5faGFzTmV3U2Ny
aXB0cykKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5faGFzTmV3U2NyaXB0cyA9
IGZhbHNlOwotICAgICAgICB0aGlzLl91cGRhdGVTb3VyY2VNYXBwaW5nKCk7Ci0gICAgfSwKLQot
ICAgIF91cGRhdGVTb3VyY2VNYXBwaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5fdXBkYXRpbmdTb3VyY2VNYXBwaW5nKSB7Ci0gICAgICAgICAgICB0aGlzLl91cGRhdGVO
ZWVkZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHRo
aXMuX3VwZGF0aW5nU291cmNlTWFwcGluZyA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZU5l
ZWRlZCA9IGZhbHNlOwotCi0gICAgICAgIHRoaXMuX2NyZWF0ZVNvdXJjZU1hcHBpbmcoZGlkQ3Jl
YXRlU291cmNlTWFwcGluZy5iaW5kKHRoaXMpKTsKLQotICAgICAgICAvKioKLSAgICAgICAgICog
QHRoaXMge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlfQotICAgICAgICAgKiBAcGFyYW0ge1dl
Ykluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlNvdXJjZU1hcHBpbmd9IHNvdXJjZU1hcHBpbmcKLSAg
ICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZENyZWF0ZVNvdXJjZU1hcHBpbmcoc291cmNl
TWFwcGluZykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRpbmdTb3VyY2VNYXBw
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoc291cmNlTWFwcGluZyAmJiAhdGhpcy5fdXBk
YXRlTmVlZGVkKQotICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVTb3VyY2VNYXBwaW5nKHNvdXJj
ZU1hcHBpbmcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZVNvdXJjZU1hcHBpbmcoKTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX3VpU291
cmNlQ29kZSB8fCB0aGlzLl90ZW1wb3JhcnlVSVNvdXJjZUNvZGU7CisgICAgICAgIGlmICghdWlT
b3VyY2VDb2RlKSB7CisgICAgICAgICAgICB0aGlzLl90ZW1wb3JhcnlVSVNvdXJjZUNvZGUgPSB0
aGlzLl9jcmVhdGVVSVNvdXJjZUNvZGUoInRtcC0iICsgdGhpcy51cmwpOworICAgICAgICAgICAg
dWlTb3VyY2VDb2RlID0gdGhpcy5fdGVtcG9yYXJ5VUlTb3VyY2VDb2RlOworICAgICAgICAgICAg
dGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUu
RXZlbnRzLlVJU291cmNlQ29kZUNoYW5nZWQsIHsgdWlTb3VyY2VDb2RlOiB1aVNvdXJjZUNvZGUg
fSk7CiAgICAgICAgIH0KLSAgICB9LAotCi0gICAgX2NyZWF0ZUNvbnRlbnRQcm92aWRlcjogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3Jlc291cmNlKQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3Jlc291cmNlOwotICAgICAgICBpZiAodGhpcy5fc2NyaXB0cy5sZW5ndGgg
PT09IDEgJiYgIXRoaXMuX3NjcmlwdHNbMF0ubGluZU9mZnNldCAmJiAhdGhpcy5fc2NyaXB0c1sw
XS5jb2x1bW5PZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NyaXB0c1swXTsKLSAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuQ29uY2F0ZW5hdGVkU2NyaXB0c0NvbnRlbnRQ
cm92aWRlcih0aGlzLl9zY3JpcHRzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3Iu
VUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHJhd0xvY2F0aW9uLmxpbmVOdW1iZXIsIHJhd0xvY2F0
aW9uLmNvbHVtbk51bWJlciB8fCAwKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAgICogQHBhcmFt
IHtmdW5jdGlvbihXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5Tb3VyY2VNYXBwaW5nKX0gY2Fs
bGJhY2sKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQKKyAgICAgKiBAcmV0dXJuIHtXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlfQogICAgICAqLwotICAgIF9jcmVhdGVTb3VyY2VNYXBwaW5nOiBm
dW5jdGlvbihjYWxsYmFjaykKKyAgICBfY3JlYXRlVUlTb3VyY2VDb2RlOiBmdW5jdGlvbihpZCkK
ICAgICB7Ci0gICAgICAgIHZhciBvcmlnaW5hbENvbnRlbnRQcm92aWRlciA9IHRoaXMuX2NyZWF0
ZUNvbnRlbnRQcm92aWRlcigpOwotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZCkgewotICAg
ICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZSh0aGlz
LnVybCwgdGhpcy51cmwsIG9yaWdpbmFsQ29udGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgIHZh
ciBzb3VyY2VNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlBsYWluU291
cmNlTWFwcGluZyh0aGlzLCB1aVNvdXJjZUNvZGUpOwotICAgICAgICAgICAgY2FsbGJhY2soc291
cmNlTWFwcGluZyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgdmFy
IGlzU3RhbmRhbG9uZVNjcmlwdCA9IHRoaXMuX3NjcmlwdHMubGVuZ3RoID09PSAxICYmICF0aGlz
Ll9zY3JpcHRzWzBdLmlzSW5saW5lU2NyaXB0KCk7CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAq
IEB0aGlzIHtXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZX0KLSAgICAgICAgICogQHBhcmFtIHs/
c3RyaW5nfSBjb250ZW50Ci0gICAgICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29k
ZWQKLSAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBlCi0gICAgICAgICAqLwotICAg
ICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwg
bWltZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQHRo
aXMge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlfQotICAgICAgICAgICAgICogQHBhcmFtIHtz
dHJpbmd9IGZvcm1hdHRlZENvbnRlbnQKLSAgICAgICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLkZvcm1hdHRlZFNvdXJjZU1hcHBpbmd9IG1hcHBpbmcKLSAgICAgICAgICAgICAqLwotICAg
ICAgICAgICAgZnVuY3Rpb24gZGlkRm9ybWF0Q29udGVudChmb3JtYXR0ZWRDb250ZW50LCBtYXBw
aW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhciBjb250ZW50UHJvdmlkZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLlN0YXRpY0NvbnRlbnRQcm92aWRlcihtaW1lVHlwZSwgZm9ybWF0
dGVkQ29udGVudCkKLSAgICAgICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhpcy5fY3Jl
YXRlVUlTb3VyY2VDb2RlKCJkZW9iZnVzY2F0ZWQ6IiArIHRoaXMudXJsLCB0aGlzLnVybCwgY29u
dGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB2YXIgc291cmNlTWFwcGluZyA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5Gb3JtYXR0ZWRTb3VyY2VNYXBwaW5nKHRoaXMsIHVp
U291cmNlQ29kZSwgbWFwcGluZyk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soc291cmNlTWFw
cGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0
Q29udGVudChtaW1lVHlwZSwgY29udGVudCB8fCAiIiwgZGlkRm9ybWF0Q29udGVudC5iaW5kKHRo
aXMpKTsKLSAgICAgICAgfQotICAgICAgICBvcmlnaW5hbENvbnRlbnRQcm92aWRlci5yZXF1ZXN0
Q29udGVudChkaWRSZXF1ZXN0Q29udGVudC5iaW5kKHRoaXMpKTsKLSAgICB9LAorICAgICAgICB2
YXIgY29udGVudFByb3ZpZGVyOworICAgICAgICBpZiAodGhpcy5fcmVzb3VyY2UpCisgICAgICAg
ICAgICBjb250ZW50UHJvdmlkZXIgPSB0aGlzLl9yZXNvdXJjZTsKKyAgICAgICAgZWxzZSBpZiAo
aXNTdGFuZGFsb25lU2NyaXB0KQorICAgICAgICAgICAgY29udGVudFByb3ZpZGVyID0gdGhpcy5f
c2NyaXB0c1swXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29udGVudFByb3ZpZGVyID0g
bmV3IFdlYkluc3BlY3Rvci5Db25jYXRlbmF0ZWRTY3JpcHRzQ29udGVudFByb3ZpZGVyKHRoaXMu
X3NjcmlwdHMpOwogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkCi0gICAgICog
QHBhcmFtIHtzdHJpbmd9IHVybAotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQ
cm92aWRlcn0gY29udGVudFByb3ZpZGVyCi0gICAgICovCi0gICAgX2NyZWF0ZVVJU291cmNlQ29k
ZTogZnVuY3Rpb24oaWQsIHVybCwgY29udGVudFByb3ZpZGVyKQotICAgIHsKLSAgICAgICAgdmFy
IHVpU291cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZShpZCwgdXJs
LCBjb250ZW50UHJvdmlkZXIpOworICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0U291cmNlKGlkLCB0aGlzLnVybCwgY29udGVudFByb3ZpZGVyLCB0
aGlzLl9zb3VyY2VNYXBwaW5nKTsKICAgICAgICAgdWlTb3VyY2VDb2RlLmlzQ29udGVudFNjcmlw
dCA9IHRoaXMuaXNDb250ZW50U2NyaXB0OwotICAgICAgICB1aVNvdXJjZUNvZGUuaXNFZGl0YWJs
ZSA9IHRoaXMuX3NjcmlwdHMubGVuZ3RoID09PSAxICYmICF0aGlzLl9zY3JpcHRzWzBdLmxpbmVP
ZmZzZXQgJiYgIXRoaXMuX3NjcmlwdHNbMF0uY29sdW1uT2Zmc2V0ICYmICF0aGlzLl9mb3JtYXR0
ZWQ7CisgICAgICAgIHVpU291cmNlQ29kZS5pc0VkaXRhYmxlID0gaXNTdGFuZGFsb25lU2NyaXB0
OwogICAgICAgICByZXR1cm4gdWlTb3VyY2VDb2RlOwogICAgIH0sCiAKICAgICAvKioKLSAgICAg
KiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlNvdXJjZU1hcHBpbmd9IHNvdXJj
ZU1hcHBpbmcKLSAgICAgKi8KLSAgICBfc2F2ZVNvdXJjZU1hcHBpbmc6IGZ1bmN0aW9uKHNvdXJj
ZU1hcHBpbmcpCi0gICAgewotICAgICAgICB2YXIgb2xkVUlTb3VyY2VDb2RlOwotICAgICAgICBp
ZiAodGhpcy5fc291cmNlTWFwcGluZykKLSAgICAgICAgICAgIG9sZFVJU291cmNlQ29kZSA9IHRo
aXMuX3NvdXJjZU1hcHBpbmcudWlTb3VyY2VDb2RlKCk7Ci0gICAgICAgIHRoaXMuX3NvdXJjZU1h
cHBpbmcgPSBzb3VyY2VNYXBwaW5nOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5FdmVudHMuVUlTb3VyY2VDb2RlQ2hhbmdl
ZCwgeyBvbGRVSVNvdXJjZUNvZGU6IG9sZFVJU291cmNlQ29kZSB9KTsKLSAgICB9Ci19Ci0KLVdl
Ykluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0
b3IuT2JqZWN0LnByb3RvdHlwZTsKLQotLyoqCi0gKiBAaW50ZXJmYWNlCi0gKiBAZXh0ZW5kcyB7
V2ViSW5zcGVjdG9yLlNvdXJjZU1hcHBpbmd9Ci0gKi8KLVdlYkluc3BlY3Rvci5SYXdTb3VyY2VD
b2RlLlNvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbigpCi17Ci19Ci0KLVdlYkluc3BlY3Rvci5SYXdT
b3VyY2VDb2RlLlNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBy
ZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9Ci0gICAgICovCi0gICAgdWlTb3VyY2VD
b2RlOiBmdW5jdGlvbigpIHsgfQotfQotCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICogQGltcGxl
bWVudHMge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlNvdXJjZU1hcHBpbmd9Ci0gKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlfSByYXdTb3VyY2VDb2RlCi0gKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICovCi1XZWJJbnNwZWN0
b3IuUmF3U291cmNlQ29kZS5QbGFpblNvdXJjZU1hcHBpbmcgPSBmdW5jdGlvbihyYXdTb3VyY2VD
b2RlLCB1aVNvdXJjZUNvZGUpCi17Ci0gICAgdGhpcy5fcmF3U291cmNlQ29kZSA9IHJhd1NvdXJj
ZUNvZGU7Ci0gICAgdGhpcy5fdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2RlOwotfQotCi1XZWJJ
bnNwZWN0b3IuUmF3U291cmNlQ29kZS5QbGFpblNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0gcmF3TG9jYXRp
b24KLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8KLSAg
ICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAgewot
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHRoaXMuX3VpU291cmNl
Q29kZSwgcmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyIHx8
IDApOwotICAgIH0sCi0KLSAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGV9IHVpU291cmNlQ29kZQogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVy
CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgpAQCAtMjgyLDYxICsxMTUsMjUg
QEAgV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUuUGxhaW5Tb3VyY2VNYXBwaW5nLnByb3RvdHlw
ZSA9IHsKICAgICAgKi8KICAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24odWlT
b3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewotICAgICAgICBjb25z
b2xlLmFzc2VydCh1aVNvdXJjZUNvZGUgPT09IHRoaXMuX3VpU291cmNlQ29kZSk7Ci0gICAgICAg
IHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVhdGVSYXdMb2NhdGlvbih0aGlz
Ll9yYXdTb3VyY2VDb2RlLl9zY3JpcHRzWzBdLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwor
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuY3JlYXRlUmF3TG9jYXRp
b25CeVVSTCh0aGlzLnVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICB9LAogCiAg
ICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KKyAgICAg
KiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfG51bGx9CiAgICAgICovCiAgICAg
dWlTb3VyY2VDb2RlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fdWlT
b3VyY2VDb2RlOwotICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1l
bnRzIHtXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5Tb3VyY2VNYXBwaW5nfQotICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZX0gcmF3U291cmNlQ29kZQotICogQHBhcmFtIHtX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkZvcm1hdHRlZFNvdXJjZU1hcHBpbmd9IG1hcHBpbmcKLSAqLwotV2ViSW5zcGVjdG9y
LlJhd1NvdXJjZUNvZGUuRm9ybWF0dGVkU291cmNlTWFwcGluZyA9IGZ1bmN0aW9uKHJhd1NvdXJj
ZUNvZGUsIHVpU291cmNlQ29kZSwgbWFwcGluZykKLXsKLSAgICB0aGlzLl9yYXdTb3VyY2VDb2Rl
ID0gcmF3U291cmNlQ29kZTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7
Ci0gICAgdGhpcy5fbWFwcGluZyA9IG1hcHBpbmc7Ci19Ci0KLVdlYkluc3BlY3Rvci5SYXdTb3Vy
Y2VDb2RlLkZvcm1hdHRlZFNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewotICAgIC8qKgotICAg
ICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKi8K
LSAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAg
ewotICAgICAgICB2YXIgbG9jYXRpb24gPSB0aGlzLl9tYXBwaW5nLm9yaWdpbmFsVG9Gb3JtYXR0
ZWQocmF3TG9jYXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyIHx8IDAp
OwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHRoaXMuX3VpU291
cmNlQ29kZSwgbG9jYXRpb25bMF0sIGxvY2F0aW9uWzFdKTsKLSAgICB9LAotCi0gICAgLyoqCi0g
ICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAg
ICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBj
b2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9ufQotICAg
ICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUs
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0
KHVpU291cmNlQ29kZSA9PT0gdGhpcy5fdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdmFyIGxvY2F0
aW9uID0gdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlcik7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVh
dGVSYXdMb2NhdGlvbih0aGlzLl9yYXdTb3VyY2VDb2RlLl9zY3JpcHRzWzBdLCBsb2NhdGlvblsw
XSwgbG9jYXRpb25bMV0pOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuVUlTb3VyY2VDb2RlfQotICAgICAqLwotICAgIHVpU291cmNlQ29kZTogZnVuY3Rp
b24oKQorICAgIF9maW5pc2hlZExvYWRpbmc6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMuX3VpU291cmNlQ29kZTsKKyAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JVUkwodGhpcy5fcGVuZGluZ1JlcXVlc3QudXJsKTsKKyAg
ICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXF1ZXN0OworICAgICAgICB2YXIgb2xkVUlTb3Vy
Y2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2RlIHx8IHRoaXMuX3RlbXBvcmFyeVVJU291cmNlQ29k
ZTsKKyAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlID0gdGhpcy5fY3JlYXRlVUlTb3VyY2VDb2Rl
KHRoaXMudXJsKTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5z
cGVjdG9yLlJhd1NvdXJjZUNvZGUuRXZlbnRzLlVJU291cmNlQ29kZUNoYW5nZWQsIHsgdWlTb3Vy
Y2VDb2RlOiB0aGlzLl91aVNvdXJjZUNvZGUsIG9sZFVJU291cmNlQ29kZTogb2xkVUlTb3VyY2VD
b2RlIH0pOwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUucHJvdG90eXBl
Ll9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVNjcmlwdE1hcHBpbmcu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlU2NyaXB0TWFw
cGluZy5qcwppbmRleCAyMGI5MWZlMDg4MzViNjU0MTJlYTE5NDYzMjllODEwZjYzMDU0ODBmLi5j
YjZmMDc4ZTJmYzY2ZmI5NTA2ZWE4YzcwZjVhMWZiNDMzZmZhNzJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlU2NyaXB0TWFwcGluZy5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlU2NyaXB0TWFw
cGluZy5qcwpAQCAtMzksOCArMzksNiBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTY3JpcHRNYXBw
aW5nID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3Jhd1NvdXJjZUNvZGVGb3JVUkwgPSB7fTsKICAg
ICB0aGlzLl9yYXdTb3VyY2VDb2RlRm9yRG9jdW1lbnRVUkwgPSB7fTsKICAgICB0aGlzLl9yYXdT
b3VyY2VDb2RlRm9yVUlTb3VyY2VDb2RlID0gbmV3IE1hcCgpOwotICAgIHRoaXMuX2Zvcm1hdHRl
ciA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyKCk7Ci0gICAgdGhpcy5fZm9ybWF0
U291cmNlID0gZmFsc2U7CiB9CiAKIFdlYkluc3BlY3Rvci5SZXNvdXJjZVNjcmlwdE1hcHBpbmcu
cHJvdG90eXBlID0gewpAQCAtMTE0LDcgKzExMiw3IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZVNj
cmlwdE1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUo
c2NyaXB0LnNjcmlwdElkLCBzY3JpcHQsIHJlc291cmNlLCByZXF1ZXN0LCB0aGlzLl9mb3JtYXR0
ZXIsIHRoaXMuX2Zvcm1hdFNvdXJjZSk7CisgICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0gbmV3
IFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlKHNjcmlwdC5zY3JpcHRJZCwgc2NyaXB0LCByZXNv
dXJjZSwgcmVxdWVzdCwgdGhpcyk7CiAgICAgICAgIHRoaXMuX3Jhd1NvdXJjZUNvZGVzLnB1c2go
cmF3U291cmNlQ29kZSk7CiAgICAgICAgIHRoaXMuX2JpbmRTY3JpcHRUb1Jhd1NvdXJjZUNvZGUo
c2NyaXB0LCByYXdTb3VyY2VDb2RlKTsKICAgICAgICAgaWYgKGlzSW5saW5lU2NyaXB0KQpAQCAt
MTMxLDggKzEyOSw5IEBAIFdlYkluc3BlY3Rvci5SZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90
eXBlID0gewogICAgIF9oYW5kbGVVSVNvdXJjZUNvZGVDaGFuZ2VkOiBmdW5jdGlvbihldmVudCkK
ICAgICB7CiAgICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0
b3IuUmF3U291cmNlQ29kZX0gKi8gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgdWlTb3VyY2VD
b2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyBldmVudC5kYXRh
LnVpU291cmNlQ29kZTsKICAgICAgICAgdmFyIG9sZFVJU291cmNlQ29kZSA9IC8qKiBAdHlwZSB7
V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gZXZlbnQuZGF0YS5vbGRVSVNvdXJjZUNvZGU7
Ci0gICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUNoYW5nZWQocmF3U291cmNlQ29kZSwgb2xkVUlT
b3VyY2VDb2RlLCByYXdTb3VyY2VDb2RlLnVpU291cmNlQ29kZSgpKTsKKyAgICAgICAgdGhpcy5f
dWlTb3VyY2VDb2RlQ2hhbmdlZChyYXdTb3VyY2VDb2RlLCBvbGRVSVNvdXJjZUNvZGUsIHVpU291
cmNlQ29kZSk7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTQ2LDcgKzE0NSw3IEBAIFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhp
cy5fcmF3U291cmNlQ29kZUZvclVJU291cmNlQ29kZS5yZW1vdmUocmVtb3ZlZEl0ZW0pOwogICAg
ICAgICBpZiAoYWRkZWRJdGVtKQogICAgICAgICAgICAgdGhpcy5fcmF3U291cmNlQ29kZUZvclVJ
U291cmNlQ29kZS5wdXQoYWRkZWRJdGVtLCByYXdTb3VyY2VDb2RlKTsKLQorICAgIAogICAgICAg
ICB2YXIgc2NyaXB0SWRzID0gW107CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3U291
cmNlQ29kZS5fc2NyaXB0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgc2NyaXB0SWRzLnB1
c2gocmF3U291cmNlQ29kZS5fc2NyaXB0c1tpXS5zY3JpcHRJZCk7CkBAIC0xNTQsNyArMTUzLDcg
QEAgV2ViSW5zcGVjdG9yLlJlc291cmNlU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIH0KICAgICAgICAgdmFyIHJlbW92ZWRJdGVtcyA9IHJlbW92ZWRJdGVtID8gW3JlbW92ZWRJ
dGVtXSA6IFtdOwogICAgICAgICB2YXIgYWRkZWRJdGVtcyA9IGFkZGVkSXRlbSA/IFthZGRlZEl0
ZW1dIDogW107Ci0KKyAgICAKICAgICAgICAgdmFyIGRhdGEgPSB7IHJlbW92ZWRJdGVtczogcmVt
b3ZlZEl0ZW1zLCBhZGRlZEl0ZW1zOiBhZGRlZEl0ZW1zIH07CiAgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5TY3JpcHRNYXBwaW5nLkV2ZW50cy5VSVNv
dXJjZUNvZGVMaXN0Q2hhbmdlZCwgZGF0YSk7CiAgICAgfSwKQEAgLTE3MCwyOCArMTY5LDYgQEAg
V2ViSW5zcGVjdG9yLlJlc291cmNlU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHNjcmlwdC5zZXRTb3VyY2VNYXBwaW5nKHRoaXMpOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAg
KiBAcGFyYW0ge2Jvb2xlYW59IGZvcm1hdFNvdXJjZQotICAgICAqLwotICAgIHNldEZvcm1hdFNv
dXJjZTogZnVuY3Rpb24oZm9ybWF0U291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Zv
cm1hdFNvdXJjZSA9PT0gZm9ybWF0U291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIHRoaXMuX2Zvcm1hdFNvdXJjZSA9IGZvcm1hdFNvdXJjZTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9yYXdTb3VyY2VDb2Rlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IHRoaXMuX3Jhd1NvdXJjZUNvZGVzW2ldLnNldEZvcm1hdHRlZCh0aGlzLl9mb3JtYXRTb3VyY2Up
OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQuTG9jYXRp
b259IHJhd0xvY2F0aW9uCi0gICAgICovCi0gICAgZm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5nOiBm
dW5jdGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0g
dGhpcy5fcmF3U291cmNlQ29kZUZvclNjcmlwdElkW3Jhd0xvY2F0aW9uLnNjcmlwdElkXTsKLSAg
ICAgICAgcmF3U291cmNlQ29kZS5mb3JjZVVwZGF0ZVNvdXJjZU1hcHBpbmcoKTsKLSAgICB9LAot
CiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fcmF3U291cmNlQ29kZXMubGVuZ3RoOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggMjg1YTEwNDc5Mzc4ZjdhOTZmYmU5
ODk3YjRjYjVjMGYyOTc0OWUzMC4uYTgyNzM1NjgwMzNhMmRlOTY3MTY4YjVlZmFkNWQ3NGQ2Mzcw
MDdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3Jp
cHQuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMK
QEAgLTE1Nyw4ICsxNTcsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAg
ICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHJhd0xvY2F0aW9uLnNjcmlwdElkID09PSB0aGlz
LnNjcmlwdElkKTsKICAgICAgICAgdmFyIHVpTG9jYXRpb24gPSB0aGlzLl9zb3VyY2VNYXBwaW5n
LnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6
IHVpTG9jYXRpb24gd2lsbCBuZXZlciBiZSBudWxsIGFmdGVyIHRoZSBuZXh0IHJlZmFjdG9yaW5n
IHN0ZXAuCi0gICAgICAgIHJldHVybiB1aUxvY2F0aW9uID8gdWlMb2NhdGlvbi51aVNvdXJjZUNv
ZGUub3ZlcnJpZGVMb2NhdGlvbih1aUxvY2F0aW9uKSA6IG51bGw7CisgICAgICAgIHJldHVybiB1
aUxvY2F0aW9uLnVpU291cmNlQ29kZS5vdmVycmlkZUxvY2F0aW9uKHVpTG9jYXRpb24pOwogICAg
IH0sCiAKICAgICAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0Rm9ybWF0dGVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMKaW5kZXggZmYyZmQ5MDhiN2YwZDcxNzNjMTkyZGE1NmEw
NDM3YjI4NzhkOWVlMy4uZjk4YmVkOGI0MmJmNGE0Nzk5ZDcxZDdmZmQ5OGRhMTU5YTA5MTBiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3Jt
YXR0ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRG
b3JtYXR0ZXIuanMKQEAgLTY3LDcgKzY3LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRl
ci5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBl
CiAgICAgICogQHBhcmFtIHs/c3RyaW5nfSBjb250ZW50Ci0gICAgICogQHBhcmFtIHtmdW5jdGlv
bihzdHJpbmcsIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VNYXBwaW5nKX0gY2FsbGJhY2sK
KyAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNv
dXJjZU1hcHBpbmcpfSBjYWxsYmFjawogICAgICAqLwogICAgIGZvcm1hdENvbnRlbnQ6IGZ1bmN0
aW9uKG1pbWVUeXBlLCBjb250ZW50LCBjYWxsYmFjaykKICAgICB7CkBAIC04NCw3ICs4NCw3IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIg
b3JpZ2luYWxDb250ZW50ID0gdGFzay5kYXRhLmNvbnRlbnQ7CiAgICAgICAgIHZhciBmb3JtYXR0
ZWRDb250ZW50ID0gZXZlbnQuZGF0YS5jb250ZW50OwogICAgICAgICB2YXIgbWFwcGluZyA9IGV2
ZW50LmRhdGFbIm1hcHBpbmciXTsKLSAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBuZXcgV2Vi
SW5zcGVjdG9yLkZvcm1hdHRlZFNvdXJjZU1hcHBpbmcob3JpZ2luYWxDb250ZW50LmxpbmVFbmRp
bmdzKCksIGZvcm1hdHRlZENvbnRlbnQubGluZUVuZGluZ3MoKSwgbWFwcGluZyk7CisgICAgICAg
IHZhciBzb3VyY2VNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBw
aW5nSW1wbChvcmlnaW5hbENvbnRlbnQubGluZUVuZGluZ3MoKSwgZm9ybWF0dGVkQ29udGVudC5s
aW5lRW5kaW5ncygpLCBtYXBwaW5nKTsKICAgICAgICAgdGFzay5jYWxsYmFjayhmb3JtYXR0ZWRD
b250ZW50LCBzb3VyY2VNYXBwaW5nKTsKICAgICB9LAogCkBAIC0xMTEsNDEgKzExMSw5NSBAQCBX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyTWFwcGluZ1BheWxvYWQgPSBmdW5jdGlvbigpCiB9CiAKIC8q
KgorICogQGludGVyZmFjZQorICovCitXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGlu
ZyA9IGZ1bmN0aW9uKCkKK3sKK30KKworV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBp
bmcucHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVt
YmVyCisgICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKKyAgICAgKiBAcmV0dXJu
IHtBcnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5j
dGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpIHsgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5O
dW1iZXIKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICBmb3Jt
YXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpIHsgfQor
fQorCisvKioKKyAqIEBjb25zdHJ1Y3RvcgorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5G
b3JtYXR0ZXJTb3VyY2VNYXBwaW5nfQorICovCitXZWJJbnNwZWN0b3IuSWRlbnRpdHlGb3JtYXR0
ZXJTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24oKQoreworfQorCitXZWJJbnNwZWN0b3IuSWRlbnRp
dHlGb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLnByb3RvdHlwZSA9IHsKKyAgICAvKioKKyAgICAgKiBA
cGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gY29sdW1u
TnVtYmVyCisgICAgICogQHJldHVybiB7QXJyYXkuPG51bWJlcj59CisgICAgICovCisgICAgb3Jp
Z2luYWxUb0Zvcm1hdHRlZDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFtsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIgfHwgMF07IAorICAg
IH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAq
IEBwYXJhbSB7bnVtYmVyPX0gY29sdW1uTnVtYmVyCisgICAgICogQHJldHVybiB7QXJyYXkuPG51
bWJlcj59CisgICAgICovCisgICAgZm9ybWF0dGVkVG9PcmlnaW5hbDogZnVuY3Rpb24obGluZU51
bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFtsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXIgfHwgMF07CisgICAgfQorfQorCisvKioKICAqIEBjb25zdHJ1Y3RvcgorICog
QGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nfQogICogQHBh
cmFtIHtBcnJheS48bnVtYmVyPn0gb3JpZ2luYWxMaW5lRW5kaW5ncwogICogQHBhcmFtIHtBcnJh
eS48bnVtYmVyPn0gZm9ybWF0dGVkTGluZUVuZGluZ3MKICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
LkZvcm1hdHRlck1hcHBpbmdQYXlsb2FkfSBtYXBwaW5nCiAgKi8KLVdlYkluc3BlY3Rvci5Gb3Jt
YXR0ZWRTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24ob3JpZ2luYWxMaW5lRW5kaW5ncywgZm9ybWF0
dGVkTGluZUVuZGluZ3MsIG1hcHBpbmcpCitXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFw
cGluZ0ltcGwgPSBmdW5jdGlvbihvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5k
aW5ncywgbWFwcGluZykKIHsKICAgICB0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzID0gb3JpZ2lu
YWxMaW5lRW5kaW5nczsKICAgICB0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncyA9IGZvcm1hdHRl
ZExpbmVFbmRpbmdzOwogICAgIHRoaXMuX21hcHBpbmcgPSBtYXBwaW5nOwogfQogCi1XZWJJbnNw
ZWN0b3IuRm9ybWF0dGVkU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CitXZWJJbnNwZWN0b3Iu
Rm9ybWF0dGVyU291cmNlTWFwcGluZ0ltcGwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVt
bk51bWJlcgorICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gY29sdW1uTnVtYmVyCiAgICAgICogQHJl
dHVybiB7QXJyYXkuPG51bWJlcj59CiAgICAgICovCiAgICAgb3JpZ2luYWxUb0Zvcm1hdHRlZDog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIG9y
aWdpbmFsUG9zaXRpb24gPSBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLmxvY2F0aW9uVG9Q
b3NpdGlvbih0aGlzLl9vcmlnaW5hbExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpOwotICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRp
b24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdp
bmFsUG9zaXRpb24pOworICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IFdlYkluc3BlY3Rv
ci5TY3JpcHRGb3JtYXR0ZXIubG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVu
ZGluZ3MsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciB8fCAwKTsKKyAgICAgICAgdmFyIGZvcm1h
dHRlZFBvc2l0aW9uID0gdGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcub3JpZ2lu
YWwsIHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCBvcmlnaW5hbFBvc2l0aW9uIHx8IDApOwogICAg
ICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRp
b24odGhpcy5fZm9ybWF0dGVkTGluZUVuZGluZ3MsIGZvcm1hdHRlZFBvc2l0aW9uKTsKICAgICB9
LAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBA
cGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyCisgICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1
bW5OdW1iZXIKICAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0KICAgICAgKi8KICAgICBm
b3JtYXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAg
ICAgewotICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSBXZWJJbnNwZWN0b3IuU2NyaXB0
Rm9ybWF0dGVyLmxvY2F0aW9uVG9Qb3NpdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9u
ID0gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5sb2NhdGlvblRvUG9zaXRpb24odGhpcy5f
Zm9ybWF0dGVkTGluZUVuZGluZ3MsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciB8fCAwKTsKICAg
ICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5f
bWFwcGluZy5mb3JtYXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIGZvcm1hdHRlZFBvc2l0
aW9uKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucG9zaXRp
b25Ub0xvY2F0aW9uKHRoaXMuX29yaWdpbmFsTGluZUVuZGluZ3MsIG9yaWdpbmFsUG9zaXRpb24p
OworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRv
TG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbiB8fCAw
KTsKICAgICB9LAogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanMKaW5kZXggODJmNWYwNjlhNzA0ZTZlZDNmNmZhMGVj
OTUyNGFlM2RiYWE4N2ZjZC4uNGU1NzQ3OTMwYmFlNDI3NjU3NTNmM2ZjZTVlNzQyODIyNzliZTYy
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRN
YXBwaW5nLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
TWFwcGluZy5qcwpAQCAtMTMyLDcgKzEzMiw2IEBAIFdlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFw
cGluZyA9IGZ1bmN0aW9uKCkKICAgICAgICAgdGhpcy5fbWFwcGluZ3NbaV0uYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuU2NyaXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENo
YW5nZWQsIHRoaXMuX2hhbmRsZVVJU291cmNlQ29kZUxpc3RDaGFuZ2VkLCB0aGlzKTsKIAogICAg
IHRoaXMuX21hcHBpbmdGb3JTY3JpcHRJZCA9IHt9OwotICAgIHRoaXMuX21hcHBpbmdGb3JVSVNv
dXJjZUNvZGUgPSBuZXcgTWFwKCk7CiB9CiAKIFdlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFwcGlu
Zy5FdmVudHMgPSB7CkBAIC0xNDEsMjYgKzE0MCw2IEBAIFdlYkluc3BlY3Rvci5NYWluU2NyaXB0
TWFwcGluZy5FdmVudHMgPSB7CiAKIFdlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFwcGluZy5wcm90
b3R5cGUgPSB7CiAgICAgLyoqCi0gICAgICogQHBhcmFtIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9u
fSByYXdMb2NhdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSUxvY2F0aW9ufQot
ICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5jdGlvbihyYXdMb2NhdGlv
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9tYXBwaW5nRm9yU2NyaXB0SWRbcmF3TG9j
YXRpb24uc2NyaXB0SWRdLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKHJhd0xvY2F0aW9uKTsKLSAg
ICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
fSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIKLSAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFn
ZW50LkxvY2F0aW9ufQotICAgICAqLwotICAgIHVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5j
dGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9tYXBwaW5nRm9yVUlTb3VyY2VDb2RlLmdldCh1aVNvdXJjZUNvZGUp
LnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyKTsKLSAgICB9LAotCi0gICAgLyoqCiAgICAgICogQHJldHVybiB7QXJyYXkuPFdlYklu
c3BlY3Rvci5VSVNvdXJjZUNvZGU+fQogICAgICAqLwogICAgIHVpU291cmNlQ29kZUxpc3Q6IGZ1
bmN0aW9uKCkKQEAgLTIwOCw0MCArMTg3LDE0IEBAIFdlYkluc3BlY3Rvci5NYWluU2NyaXB0TWFw
cGluZy5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX2hhbmRsZVVJU291cmNlQ29kZUxpc3RD
aGFuZ2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRNYXBwaW5n
ID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuU2NyaXB0TWFwcGluZ30gKi8gZXZlbnQudGFyZ2V0
OwotICAgICAgICB2YXIgcmVtb3ZlZEl0ZW1zID0gLyoqIEB0eXBlIHtBcnJheS48V2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZT59ICovIGV2ZW50LmRhdGFbInJlbW92ZWRJdGVtcyJdOwotICAgICAg
ICB2YXIgYWRkZWRJdGVtcyA9IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJj
ZUNvZGU+fSAqLyBldmVudC5kYXRhWyJhZGRlZEl0ZW1zIl07Ci0KLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCByZW1vdmVkSXRlbXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9t
YXBwaW5nRm9yVUlTb3VyY2VDb2RlLnJlbW92ZShyZW1vdmVkSXRlbXNbaV0pOwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGFkZGVkSXRlbXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0
aGlzLl9tYXBwaW5nRm9yVUlTb3VyY2VDb2RlLnB1dChhZGRlZEl0ZW1zW2ldLCBzY3JpcHRNYXBw
aW5nKTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9y
Lk1haW5TY3JpcHRNYXBwaW5nLkV2ZW50cy5VSVNvdXJjZUNvZGVMaXN0Q2hhbmdlZCwgZXZlbnQu
ZGF0YSk7CiAgICAgfSwKIAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9ybWF0
U291cmNlCi0gICAgICovCi0gICAgc2V0Rm9ybWF0U291cmNlOiBmdW5jdGlvbihmb3JtYXRTb3Vy
Y2UpCi0gICAgewotICAgICAgICB0aGlzLl9yZXNvdXJjZU1hcHBpbmcuc2V0Rm9ybWF0U291cmNl
KGZvcm1hdFNvdXJjZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVidWdn
ZXJBZ2VudC5Mb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKi8KLSAgICBmb3JjZVVwZGF0ZVNv
dXJjZU1hcHBpbmc6IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX21hcHBpbmdGb3JTY3JpcHRJZFtyYXdMb2NhdGlvbi5zY3JpcHRJZF0gPT09IHRoaXMuX3Jl
c291cmNlTWFwcGluZykKLSAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlTWFwcGluZy5mb3JjZVVw
ZGF0ZVNvdXJjZU1hcHBpbmcocmF3TG9jYXRpb24pOwotICAgIH0sCi0KICAgICByZXNldDogZnVu
Y3Rpb24oKQogICAgIHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9tYXBwaW5n
cy5sZW5ndGg7ICsraSkKICAgICAgICAgICAgIHRoaXMuX21hcHBpbmdzW2ldLnJlc2V0KCk7CiAg
ICAgICAgIHRoaXMuX21hcHBpbmdGb3JTY3JpcHRJZCA9IHt9OwotICAgICAgICB0aGlzLl9tYXBw
aW5nRm9yVUlTb3VyY2VDb2RlID0gbmV3IE1hcCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBhMjJl
NDdhZWNkYzc1YTM1ZTFjM2YwMGU3NmM3NGI3Y2NlZmE5MzYwLi5hYmEyNTE1NjM0NTkyYTY3YzEz
ZWIzMjE0YzRmMTJlOGJkZDAzMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpAQCAtMTY0LDcgKzE2NCw3IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwgPSBmdW5jdGlvbihwcmVzZW50YXRpb25Nb2RlbCkKICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkV2ZW50cy5HbG9iYWxPYmplY3RDbGVhcmVkLCB0aGlzLl9yZXNldC5iaW5kKHRo
aXMsIGZhbHNlKSk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludHNBY3RpdmVT
dGF0ZUNoYW5nZWQsIHRoaXMuX2JyZWFrcG9pbnRzQWN0aXZlU3RhdGVDaGFuZ2VkLCB0aGlzKTsK
IAotICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJU291cmNlQ29kZUFkZGVkLCB0
aGlzLl9oYW5kbGVVSVNvdXJjZUNvZGVBZGRlZCwgdGhpcykKKyAgICB0aGlzLl9wcmVzZW50YXRp
b25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlv
bk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVBZGRlZCwgdGhpcy5faGFuZGxlVUlTb3VyY2VDb2Rl
QWRkZWQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuRXZlbnRzLlVJU291cmNl
Q29kZVJlcGxhY2VkLCB0aGlzLl91aVNvdXJjZUNvZGVSZXBsYWNlZCwgdGhpcyk7CiAgICAgdGhp
cy5fcHJlc2VudGF0aW9uTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJQcmVzZW50YXRpb25Nb2RlbC5FdmVudHMuVUlTb3VyY2VDb2RlUmVtb3ZlZCwgdGhpcy5fdWlT
b3VyY2VDb2RlUmVtb3ZlZCwgdGhpcyk7CiAKQEAgLTIxOSw2ICsyMTksOCBAQCBXZWJJbnNwZWN0
b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfaGFuZGxlVUlTb3VyY2VDb2RlQWRk
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IC8q
KiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gZXZlbnQuZGF0YTsKKyAgICAg
ICAgaWYgKHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50b2dnbGVkKQorICAgICAgICAg
ICAgdWlTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVlKTsKICAgICAgICAgdGhpcy5fdWlTb3Vy
Y2VDb2RlQWRkZWQodWlTb3VyY2VDb2RlKTsKICAgICB9LAogCkBAIC0zOTYsNyArMzk4LDcgQEAg
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgc2hvd0Z1bmN0aW9u
RGVmaW5pdGlvbjogZnVuY3Rpb24oZnVuY3Rpb25Mb2NhdGlvbikKICAgICB7CiAgICAgICAgIFdl
Ykluc3BlY3Rvci5zaG93UGFuZWxGb3JBbmNob3JOYXZpZ2F0aW9uKHRoaXMpOwotICAgICAgICB2
YXIgdWlMb2NhdGlvbiA9IHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLnJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKGZ1bmN0aW9uTG9jYXRpb24pOworICAgICAgICB2YXIgdWlMb2NhdGlvbiA9IFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGZ1bmN0aW9uTG9j
YXRpb24pOwogICAgICAgICB0aGlzLl9zaG93U291cmNlTGluZSh1aUxvY2F0aW9uLnVpU291cmNl
Q29kZSwgdWlMb2NhdGlvbi5saW5lTnVtYmVyKTsKICAgICB9LAogCkBAIC00MjMsMTUgKzQyNSwx
MyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBfc2hvd0ZpbGU6IGZ1bmN0aW9uKHVpU291cmNlQ29kZSkKICAgICB7Ci0gICAgICAgIGlmICgh
dGhpcy5fbmF2aWdhdG9yLmlzU2NyaXB0U291cmNlQWRkZWQodWlTb3VyY2VDb2RlKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotCiAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX2dl
dE9yQ3JlYXRlU291cmNlRnJhbWUodWlTb3VyY2VDb2RlKTsKICAgICAgICAgaWYgKHRoaXMuX2N1
cnJlbnRVSVNvdXJjZUNvZGUgPT09IHVpU291cmNlQ29kZSkKICAgICAgICAgICAgIHJldHVybiBz
b3VyY2VGcmFtZTsKICAgICAgICAgdGhpcy5fY3VycmVudFVJU291cmNlQ29kZSA9IHVpU291cmNl
Q29kZTsKIAotICAgICAgICB0aGlzLl9uYXZpZ2F0b3IucmV2ZWFsVUlTb3VyY2VDb2RlKHVpU291
cmNlQ29kZSk7CisgICAgICAgIGlmICh0aGlzLl9uYXZpZ2F0b3IuaXNTY3JpcHRTb3VyY2VBZGRl
ZCh1aVNvdXJjZUNvZGUpKQorICAgICAgICAgICAgdGhpcy5fbmF2aWdhdG9yLnJldmVhbFVJU291
cmNlQ29kZSh1aVNvdXJjZUNvZGUpOwogICAgICAgICB0aGlzLl9lZGl0b3JDb250YWluZXIuc2hv
d0ZpbGUodWlTb3VyY2VDb2RlKTsKICAgICAgICAgdGhpcy5fdXBkYXRlU2NyaXB0Vmlld1N0YXR1
c0Jhckl0ZW1zKCk7CiAKQEAgLTUxNyw3ICs1MTcsNyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1Bh
bmVsLnByb3RvdHlwZSA9IHsKICAgICBfcmV2ZWFsRXhlY3V0aW9uTGluZTogZnVuY3Rpb24odWlM
b2NhdGlvbikKICAgICB7CiAgICAgICAgIC8vIFNvbWUgc2NyaXB0cyAoYW5vbnltb3VzIGFuZCBz
bmlwcGV0cyBldmFsdWF0aW9ucykgYXJlIG5vdCBhZGRlZCB0byBmaWxlcyBzZWxlY3QgYnkgZGVm
YXVsdC4KLSAgICAgICAgdGhpcy5fYWRkVUlTb3VyY2VDb2RlKHVpTG9jYXRpb24udWlTb3VyY2VD
b2RlKTsKKyAgICAgICAgdGhpcy5fZWRpdG9yQ29udGFpbmVyLnVpU291cmNlQ29kZUFkZGVkKHVp
TG9jYXRpb24udWlTb3VyY2VDb2RlKTsKICAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gdGhpcy5f
c2hvd0ZpbGUodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUpOwogICAgICAgICBzb3VyY2VGcmFtZS5y
ZXZlYWxMaW5lKHVpTG9jYXRpb24ubGluZU51bWJlcik7CiAgICAgfSwKQEAgLTkxMyw3ICs5MTMs
OSBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZSA9IHsKICAgICBfdG9nZ2xl
Rm9ybWF0U291cmNlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl90b2dnbGVGb3Jt
YXRTb3VyY2VCdXR0b24udG9nZ2xlZCA9ICF0aGlzLl90b2dnbGVGb3JtYXRTb3VyY2VCdXR0b24u
dG9nZ2xlZDsKLSAgICAgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwuc2V0Rm9ybWF0U291cmNl
KHRoaXMuX3RvZ2dsZUZvcm1hdFNvdXJjZUJ1dHRvbi50b2dnbGVkKTsKKyAgICAgICAgdmFyIHVp
U291cmNlQ29kZXMgPSB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC51aVNvdXJjZUNvZGVzKCk7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdWlTb3VyY2VDb2Rlcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIHVpU291cmNlQ29kZXNbaV0uc2V0Rm9ybWF0dGVkKHRoaXMuX3RvZ2dsZUZvcm1h
dFNvdXJjZUJ1dHRvbi50b2dnbGVkKTsKICAgICB9LAogCiAgICAgYWRkVG9XYXRjaDogZnVuY3Rp
b24oZXhwcmVzc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU2NyaXB0c1NlYXJjaFNjb3BlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUuanMKaW5kZXggYTA5ZDc3NTg1OTJiYjJhYWIyMmE4
YmE1NDFmMjVjNjk0NGY1MzMzOC4uMjI3NTk5YzQ3MGIxMzVlMjJiNzdjODc0YTEyNjJlM2U2Yzdi
ZGU5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3Jp
cHRzU2VhcmNoU2NvcGUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TY3JpcHRzU2VhcmNoU2NvcGUuanMKQEAgLTE0NSw3ICsxNDUsNyBAQCBXZWJJbnNwZWN0b3Iu
U2NyaXB0c1NlYXJjaFJlc3VsdHNQYW5lLnByb3RvdHlwZSA9IHsKICAgICBjcmVhdGVBbmNob3I6
IGZ1bmN0aW9uKGZpbGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CiAgICAgICAg
IHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9
ICovIGZpbGU7Ci0gICAgICAgIHZhciByYXdMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dl
clByZXNlbnRhdGlvbk1vZGVsLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwg
bGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgdmFyIHJhd0xvY2F0aW9uID0gdWlT
b3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
cik7CiAgICAgICAgIHZhciBhbmNob3IgPSB0aGlzLl9saW5raWZpZXIubGlua2lmeVJhd0xvY2F0
aW9uKHJhd0xvY2F0aW9uKTsKICAgICAgICAgYW5jaG9yLnJlbW92ZUNoaWxkcmVuKCk7CiAgICAg
ICAgIHJldHVybiBhbmNob3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NuaXBwZXRzTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1NuaXBwZXRzTW9kZWwuanMKaW5kZXggNDA1MWQ1MzQ3YmEyMTUwNGYwYzAwMjk0Zjc3
YTM4Mjk2NTY3M2JiMy4uMTYxMDU1MGFlNGY5OGQ1ODNmODY5MzQ0ZmJlNmFkMDY1NjBjYjk3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TbmlwcGV0c01v
ZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldHNN
b2RlbC5qcwpAQCAtMzkzLDcgKzM5Myw3IEBAIFdlYkluc3BlY3Rvci5TbmlwcGV0c1NjcmlwdE1h
cHBpbmcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIHVpU291cmNlQ29kZUlkID0g
IiI7IC8vIEZJWE1FOiB0byBiZSBpbXBsZW1lbnRlZC4KICAgICAgICAgdmFyIHVpU291cmNlQ29k
ZVVSTCA9ICIiOyAvLyBGSVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCi0gICAgICAgIHZhciB1aVNv
dXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UodWlTb3VyY2VDb2Rl
SWQsIHVpU291cmNlQ29kZVVSTCwgbmV3IFdlYkluc3BlY3Rvci5TbmlwcGV0Q29udGVudFByb3Zp
ZGVyKHNuaXBwZXQpKTsKKyAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZSh1aVNvdXJjZUNvZGVJZCwgdWlTb3VyY2VDb2RlVVJMLCBuZXcg
V2ViSW5zcGVjdG9yLlNuaXBwZXRDb250ZW50UHJvdmlkZXIoc25pcHBldCksIHRoaXMpOwogICAg
ICAgICB1aVNvdXJjZUNvZGUuaXNTbmlwcGV0ID0gdHJ1ZTsKICAgICAgICAgdWlTb3VyY2VDb2Rl
LmlzRWRpdGFibGUgPSB0cnVlOwogICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JTbmlwcGV0
LnB1dChzbmlwcGV0LCB1aVNvdXJjZUNvZGUpOwpAQCAtNDE2LDcgKzQxNiw3IEBAIFdlYkluc3Bl
Y3Rvci5TbmlwcGV0c1NjcmlwdE1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9j
cmVhdGVVSVNvdXJjZUNvZGVGb3JTY3JpcHQ6IGZ1bmN0aW9uKHNjcmlwdCkKICAgICB7Ci0gICAg
ICAgIHZhciB1aVNvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2Uo
c2NyaXB0LnNvdXJjZVVSTCwgc2NyaXB0LnNvdXJjZVVSTCwgc2NyaXB0KTsKKyAgICAgICAgdmFy
IHVpU291cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZShzY3JpcHQu
c291cmNlVVJMLCBzY3JpcHQuc291cmNlVVJMLCBzY3JpcHQsIHRoaXMpOwogICAgICAgICB1aVNv
dXJjZUNvZGUuaXNTbmlwcGV0RXZhbHVhdGlvbiA9IHRydWU7CiAgICAgICAgIHZhciBvbGRVSVNv
dXJjZUNvZGUgPSB0aGlzLl91aVNvdXJjZUNvZGVGb3JTY3JpcHRJZFtzY3JpcHQuc2NyaXB0SWRd
OwogICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVGb3JTY3JpcHRJZFtzY3JpcHQuc2NyaXB0SWRd
ID0gdWlTb3VyY2VDb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9VSVNvdXJjZUNvZGUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1VJU291cmNlQ29kZS5qcwppbmRleCA3MWFmOTU5ODQ1MGRkNWJjZmUxYmJkYTA1NGMzNjBl
OWEyMjY4OTc3Li40ZDFjMjEzYzcyZThlNzBmMjM4ZmY2NWEzNDgyMTNlODM5NWVkNmFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJU291cmNlQ29kZS5q
cworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1VJU291cmNlQ29kZS5q
cwpAQCAtMzUsMTMgKzM1LDE1IEBACiAgKiBAcGFyYW0ge3N0cmluZ30gaWQKICAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwKICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQcm92aWRlcn0gY29u
dGVudFByb3ZpZGVyCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VNYXBwaW5nfSBzb3Vy
Y2VNYXBwaW5nCiAgKi8KLVdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUgPSBmdW5jdGlvbihpZCwg
dXJsLCBjb250ZW50UHJvdmlkZXIpCitXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlID0gZnVuY3Rp
b24oaWQsIHVybCwgY29udGVudFByb3ZpZGVyLCBzb3VyY2VNYXBwaW5nKQogewogICAgIHRoaXMu
X2lkID0gaWQ7CiAgICAgdGhpcy5fdXJsID0gdXJsOwogICAgIHRoaXMuX3BhcnNlZFVSTCA9IG5l
dyBXZWJJbnNwZWN0b3IuUGFyc2VkVVJMKHVybCk7CiAgICAgdGhpcy5fY29udGVudFByb3ZpZGVy
ID0gY29udGVudFByb3ZpZGVyOworICAgIHRoaXMuX3NvdXJjZU1hcHBpbmcgPSBzb3VyY2VNYXBw
aW5nOwogICAgIHRoaXMuaXNDb250ZW50U2NyaXB0ID0gZmFsc2U7CiAgICAgdGhpcy5pc0VkaXRh
YmxlID0gZmFsc2U7CiAgICAgLyoqCkBAIC05MSwxMCArOTMsOSBAQCBXZWJJbnNwZWN0b3IuVUlT
b3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX2NvbnRl
bnQsIGZhbHNlLCB0aGlzLl9taW1lVHlwZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLQogICAgICAgICB0aGlzLl9yZXF1ZXN0Q29udGVudENhbGxiYWNrcy5wdXNoKGNhbGxiYWNr
KTsKICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RDb250ZW50Q2FsbGJhY2tzLmxlbmd0aCA9PT0g
MSkKLSAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRQcm92aWRlci5yZXF1ZXN0Q29udGVudCh0aGlz
Ll9kaWRSZXF1ZXN0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMuX2NvbnRl
bnRQcm92aWRlci5yZXF1ZXN0Q29udGVudCh0aGlzLmZpcmVDb250ZW50QXZhaWxhYmxlLmJpbmQo
dGhpcykpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTEwOSw2ICsxMTAsMjIgQEAgV2ViSW5zcGVj
dG9yLlVJU291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgorICAgICAq
IEByZXR1cm4ge3N0cmluZ30KKyAgICAgKi8KKyAgICBtaW1lVHlwZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21pbWVUeXBlOworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcmV0dXJuIHs/c3RyaW5nfQorICAgICAqLworICAgIGNvbnRlbnQ6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50OworICAgIH0sCisKKyAgICAvKioK
ICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNh
c2VTZW5zaXRpdmUKICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzUmVnZXgKQEAgLTEyNCwxNSAr
MTQxLDM0IEBAIFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlID0gewogICAgICAq
IEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWltZVR5cGUKICAgICAgKi8KLSAgICBfZGlkUmVxdWVzdENvbnRlbnQ6IGZ1bmN0aW9uKGNvbnRl
bnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKKyAgICBmaXJlQ29udGVudEF2YWlsYWJsZTog
ZnVuY3Rpb24oY29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQogICAgIHsKICAgICAg
ICAgdGhpcy5fY29udGVudExvYWRlZCA9IHRydWU7CiAgICAgICAgIHRoaXMuX21pbWVUeXBlID0g
bWltZVR5cGU7CiAgICAgICAgIHRoaXMuX2NvbnRlbnQgPSBjb250ZW50OwogCi0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fcmVxdWVzdENvbnRlbnRDYWxsYmFja3MubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0Q29udGVudENhbGxiYWNrc1tpXShjb250ZW50
LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpOworICAgICAgICB2YXIgY2FsbGJhY2tzID0gdGhp
cy5fcmVxdWVzdENvbnRlbnRDYWxsYmFja3Muc2xpY2UoKTsKICAgICAgICAgdGhpcy5fcmVxdWVz
dENvbnRlbnRDYWxsYmFja3MgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxs
YmFja3MubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBjYWxsYmFja3NbaV0oY29udGVudCwgY29u
dGVudEVuY29kZWQsIG1pbWVUeXBlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVy
biB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBjb250ZW50TG9hZGVkOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudExvYWRlZDsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gY29sdW1uTnVtYmVyCisgICAgICogQHJldHVybiB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0K
KyAgICAgKi8KKyAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24obGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZU1hcHBp
bmcudWlMb2NhdGlvblRvUmF3TG9jYXRpb24odGhpcywgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
KTsKICAgICB9LAogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWIyOGJlNGNjOTgwNzEyODExMDY4ZTBmMjA3
NDc5NDg5ZDIzOGJmZS4uNGQxNDkyMDI1YWFmMWVhZjBlNzk5YTA4NjQxYWVlYTFjM2M3MDJhYyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA1LTEwICBQYXZlbCBGZWxkbWFuICA8cGZlbGRt
YW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHBhc3Mgc291cmNlIG1h
cHBpbmcgaW50byBVSVNvdXJjZUNvZGUncyBjb25zdHJ1Y3RvcjsgbW92ZSBmb3JtYXR0aW5nIG91
dHNpZGUgbWFwcGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTg2MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWw6CisgICAg
ICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL2xpbmtpZmllci5odG1sOgorICAgICAgICAqIGluc3Bl
Y3Rvci9kZWJ1Z2dlci9wYXVzZS1pbi1pbmxpbmUtc2NyaXB0Lmh0bWw6CisgICAgICAgICogaW5z
cGVjdG9yL2RlYnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aW5zcGVjdG9yL2RlYnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS5odG1sOgorICAgICAgICAqIGluc3Bl
Y3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvdGVzdC1uYXZpZ2F0aW9uLmh0bWw6IFJlbW92ZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0
dGVyLWJyZWFrcG9pbnRzLmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL2RlYnVnZ2VyL3Njcmlw
dC1mb3JtYXR0ZXItY29uc29sZS5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9z
ZWxlY3RlZC1jYWxsLWZyYW1lLWFmdGVyLWZvcm1hdHRpbmctc291cmNlLmh0bWw6CisKIDIwMTIt
MDUtMTAgIEtyaXN0w7NmIEtvc3p0ecOzICA8a2tyaXN0b2ZAaW5mLnUtc3plZ2VkLmh1PgogCiAg
ICAgICAgIFtRdF0gbmV3IHRlc3QgaHR0cC90ZXN0cy9jb29raWVzL3NpbmdsZS1xdW90ZWQtdmFs
dWUuaHRtbCBpcyBmYWlsaW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvYnJlYWtwb2ludC1tYW5hZ2VyLmh0bWwKaW5kZXggMDRhMzJkODkyYmFiNjAzZWFiMmQ3
ZjEyOTVjMmNjNDNiNzg2NzhkOS4uNzI1Zjk2NDcyYzZiOTMxYWNiODhmMmYyOTlkZjk3MzgzODAz
YTFmMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9p
bnQtbWFuYWdlci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVh
a3BvaW50LW1hbmFnZXIuaHRtbApAQCAtOSw3ICs5LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
dmFyIGRlZmF1bHRNYXBwaW5nID0gewogICAgICAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjog
ZnVuY3Rpb24ocmF3TG9jYXRpb24pCiAgICAgICAgIHsKLSAgICAgICAgICAgIHZhciB1aVNvdXJj
ZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZShyYXdMb2NhdGlvbi5zY3JpcHRJ
ZCwgcmF3TG9jYXRpb24uc2NyaXB0SWQsIG51bGwpOworICAgICAgICAgICAgdmFyIHVpU291cmNl
Q29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlKHJhd0xvY2F0aW9uLnNjcmlwdElk
LCByYXdMb2NhdGlvbi5zY3JpcHRJZCwgbnVsbCwgdGhpcyk7CiAgICAgICAgICAgICByZXR1cm4g
bmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9jYXRpb24ubGlu
ZU51bWJlciwgMCk7CiAgICAgICAgIH0sCiAKQEAgLTIyLDcgKzIyLDcgQEAgZnVuY3Rpb24gdGVz
dCgpCiAgICAgdmFyIHNoaWZ0aW5nTWFwcGluZyA9IHsKICAgICAgICAgcmF3TG9jYXRpb25Ub1VJ
TG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUocmF3TG9jYXRp
b24uc2NyaXB0SWQsIHJhd0xvY2F0aW9uLnNjcmlwdElkLCBudWxsKTsKKyAgICAgICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZShyYXdMb2NhdGlv
bi5zY3JpcHRJZCwgcmF3TG9jYXRpb24uc2NyaXB0SWQsIG51bGwsIHRoaXMpOwogICAgICAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHJhd0xv
Y2F0aW9uLmxpbmVOdW1iZXIgKyAxMCwgMCk7CiAgICAgICAgIH0sCiAKQEAgLTEzNiw3ICsxMzYs
NyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICB7CiAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLl9k
ZWJ1Z2dlck1vZGVsLl9hZGRTY3JpcHQoaWQsIHVybCk7CiAgICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkUmVzdWx0KCIgIEFkZGluZyBVSVNvdXJjZUNvZGU6ICIgKyBpZCArICIgKHVybD0iICsgKHVy
bCB8fCBpZCkgKyAiKSIpOwotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0U291cmNlKGlkLCB1cmwgfHwgaWQsIG51bGwpOworICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlKGlkLCB1cmwg
fHwgaWQsIG51bGwsIGRlZmF1bHRNYXBwaW5nKTsKICAgICAgICAgYnJlYWtwb2ludE1hbmFnZXIu
cmVzdG9yZUJyZWFrcG9pbnRzKHVpU291cmNlQ29kZSk7CiAgICAgICAgIHJldHVybiB1aVNvdXJj
ZUNvZGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L2xpbmtpZmllci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2xpbmtpZmll
ci5odG1sCmluZGV4IGViNzFkZTE5ZmFiMzAzOGNmYWI1MWExMzg0NzYzOGY0YTY0ZjhiYjEuLjg3
NTZjZmEwY2JhM2IyMDc2YzRiYmRjMDY5MGYyOTlmOWZmOGUzNGEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9saW5raWZpZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvbGlua2lmaWVyLmh0bWwKQEAgLTE2LDI5ICsxNiwzMiBAQCBm
dW5jdGlvbiB0ZXN0KCkKICAgICB2YXIgbGlua2lmaWVyOwogICAgIHZhciBsaW5rOwogICAgIHZh
ciBzY3JpcHQ7CisgICAgdmFyIHVpU291cmNlQ29kZTsKIAogICAgIGZ1bmN0aW9uIHdhaXRGb3JT
Y3JpcHRzKCkKICAgICB7Ci0gICAgICAgIHZhciBjb250aW51ZWQgPSBmYWxzZTsKLSAgICAgICAg
ZnVuY3Rpb24gc2NyaXB0QWRkZWQoZXZlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChz
Y3JpcHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoZXZlbnQu
ZGF0YS5zb3VyY2VVUkwgPT09IFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdlVVJMICYmIGV2ZW50
LmRhdGEubGluZU9mZnNldCA9PT0gNCkgewotICAgICAgICAgICAgICAgIHNjcmlwdCA9IGV2ZW50
LmRhdGE7Ci0gICAgICAgICAgICAgICAgc2V0VGltZW91dChkZWJ1Z2dlclRlc3QsIDApOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgSW5zcGVjdG9yVGVzdC5xdWVyeVNjcmlw
dHMoZnVuY3Rpb24oc2NyaXB0KSB7IHNjcmlwdEFkZGVkKHsgZGF0YTogc2NyaXB0IH0pIH0pOwot
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5QYXJzZWRTY3JpcHRTb3VyY2UsIHNjcmlwdEFk
ZGVkKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNlKCJsaW5raWZpZXIu
aHRtbCIsIGRlYnVnZ2VyVGVzdCk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZGVidWdnZXJUZXN0
KCkKICAgICB7Ci0gICAgICAgIGxpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0b3IuTGlua2lmaWVy
KCk7CisgICAgICAgIHZhciBzY3JpcHRzID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2Ny
aXB0czsKKyAgICAgICAgZm9yICh2YXIgc2NyaXB0SWQgaW4gc2NyaXB0cykgeworICAgICAgICAg
ICAgdmFyIHNjcmlwdENhbmRpZGF0ZSA9IHNjcmlwdHNbc2NyaXB0SWRdOworICAgICAgICAgICAg
aWYgKHNjcmlwdENhbmRpZGF0ZS5zb3VyY2VVUkwgPT09IFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQ
YWdlVVJMICYmIHNjcmlwdENhbmRpZGF0ZS5saW5lT2Zmc2V0ID09PSA0KSB7CisgICAgICAgICAg
ICAgICAgc2NyaXB0ID0gc2NyaXB0Q2FuZGlkYXRlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGVzID0gV2Vi
SW5zcGVjdG9yLmRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwudWlTb3VyY2VDb2RlcygpOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVpU291cmNlQ29kZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmICh1aVNvdXJjZUNvZGVzW2ldLnVybCA9PT0gV2ViSW5zcGVjdG9yLmluc3Bl
Y3RlZFBhZ2VVUkwpIHsKKyAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNv
ZGVzW2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CiAKKyAgICAgICAgbGlua2lmaWVyID0gbmV3IFdlYkluc3BlY3Rvci5MaW5raWZpZXIoKTsKICAg
ICAgICAgdmFyIGNvdW50MSA9IGxpdmVMb2NhdGlvbnNDb3VudCgpOwogICAgICAgICBsaW5rID0g
bGlua2lmaWVyLmxpbmtpZnlMb2NhdGlvbihXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCwg
OCwgMCwgImR1bW15LWNsYXNzIik7CiAgICAgICAgIHZhciBjb3VudDIgPSBsaXZlTG9jYXRpb25z
Q291bnQoKTsKQEAgLTQ3LDE0ICs1MCwxNCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoIm9yaWdpbmFsIGxvY2F0aW9uOiAiICsgbGluay50ZXh0Q29u
dGVudCk7CiAKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKGxpbmtpZmllci5fZm9y
bWF0dGVyLCAiZm9ybWF0TGl2ZUFuY2hvciIsIGxpbmtVcGRhdGVkKTsKLSAgICAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuc2V0Rm9ybWF0U291cmNlKHRydWUpOwor
ICAgICAgICB1aVNvdXJjZUNvZGUuc2V0Rm9ybWF0dGVkKHRydWUpOwogICAgIH0KIAogICAgIGZ1
bmN0aW9uIGxpbmtVcGRhdGVkKCkKICAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJwcmV0dHkgcHJpbnRlZCBsb2NhdGlvbjogIiArIGxpbmsudGV4dENvbnRlbnQpOwogICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIobGlua2lmaWVyLl9mb3JtYXR0ZXIsICJmb3Jt
YXRMaXZlQW5jaG9yIiwgbGlua1JldmVydGVkKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyUHJlc2VudGF0aW9uTW9kZWwuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKKyAgICAgICAgdWlT
b3VyY2VDb2RlLnNldEZvcm1hdHRlZChmYWxzZSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gbGlu
a1JldmVydGVkKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9w
YXVzZS1pbi1pbmxpbmUtc2NyaXB0Lmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvcGF1c2UtaW4taW5saW5lLXNjcmlwdC5odG1sCmluZGV4IDk0NTFjY2YwY2UyNGJkOTFlNTBi
ZDg0MDc5YmQ1NDc2YzExN2IwNDMuLmQxM2RjMzI2ZGIyOTY2YzBmNjQxN2U2YTMwNTI2ZmFhYWM3
NTc1ZjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9wYXVzZS1p
bi1pbmxpbmUtc2NyaXB0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L3BhdXNlLWluLWlubGluZS1zY3JpcHQuaHRtbApAQCAtMzUsNyArMzUsNiBAQCB2YXIgdGVzdCA9
IGZ1bmN0aW9uKCkKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlBhdXNlZDogIiAr
ICEhV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuZGVidWdnZXJQYXVzZWREZXRhaWxzKCkpOwog
ICAgICAgICBJbnNwZWN0b3JUZXN0LnJlbG9hZFBhZ2UoZGlkUmVsb2FkLmJpbmQodGhpcykpOwog
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwgZGlkUGF1c2VBZnRl
clJlbG9hZCwgdGhpcyk7IAotCiAgICAgfQogCiAgICAgZnVuY3Rpb24gZGlkUmVsb2FkKCkKQEAg
LTQ3LDcgKzQ2LDIwIEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogICAgIGZ1bmN0aW9uIGRpZFBh
dXNlQWZ0ZXJSZWxvYWQoZGV0YWlscykKICAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KCJkaWRQYXVzZUFmdGVyUmVsb2FkIik7Ci0gICAgICAgIEluc3BlY3RvclRlc3Quc2hv
d1NjcmlwdFNvdXJjZSh0ZXN0TmFtZSwgZGlkU2hvd1NjcmlwdC5iaW5kKHRoaXMpKTsKKyAgICAg
ICAgZm9yICh2YXIgc2NyaXB0SWQgaW4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0
cykgeworICAgICAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LnNjcmlwdHNbc2NyaXB0SWRdOworICAgICAgICAgICAgaWYgKHNjcmlwdC5zb3VyY2VVUkwgJiYg
c2NyaXB0LnNvdXJjZVVSTC5pbmRleE9mKHRlc3ROYW1lKSAhPT0gLTEgJiYgc2NyaXB0LmxpbmVP
ZmZzZXQgPT0gNikgeworICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IG5ldyBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNb2RlbC5Mb2NhdGlvbihzY3JpcHQsIDYsIDApOworICAgICAgICAgICAg
ICAgIHZhciB1aUxvY2F0aW9uID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucmF3TG9jYXRp
b25Ub1VJTG9jYXRpb24obG9jYXRpb24pOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5w
YW5lbHMuc2NyaXB0cy5zaG93VUlTb3VyY2VDb2RlKHVpTG9jYXRpb24udWlTb3VyY2VDb2RlKTsK
KyAgICAgICAgICAgICAgICB2YXIgc291cmNlRnJhbWUgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMudmlzaWJsZVZpZXc7CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZyYW1lLmxvYWRl
ZCkKKyAgICAgICAgICAgICAgICAgICAgZGlkU2hvd1NjcmlwdChzb3VyY2VGcmFtZSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNu
aWZmZXIoc291cmNlRnJhbWUsICJvblRleHRWaWV3ZXJDb250ZW50TG9hZGVkIiwgZGlkU2hvd1Nj
cmlwdC5iaW5kKG51bGwsIHNvdXJjZUZyYW1lKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZGlkU2hvd1Nj
cmlwdChzb3VyY2VGcmFtZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci9yYXctc291cmNlLWNvZGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS1leHBlY3RlZC50eHQKaW5kZXggOWU0OTBhZGIzMGM5
MGZhYmJjN2NiZGFmZjgyNDVkOTI2ZmQ4YTBiOS4uZjNlYjg3YzZlYWQwMTY1YzI4NjQ1ZjA1N2Nk
NGI3OTJjYzFmNjdlYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2Vy
L3Jhdy1zb3VyY2UtY29kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS1leHBlY3RlZC50eHQKQEAgLTE5LDIxICsxOSwzIEBA
IFVJU291cmNlQ29kZSBpcyBjb250ZW50IHNjcmlwdDogZmFsc2UKIE1pbWUgdHlwZTogdGV4dC9o
dG1sCiBTY3JpcHQgc291cmNlOiA8cmVzb3VyY2UgY29udGVudD4KIAotUnVubmluZzogdGVzdEZv
cmNlVXBkYXRlU291cmNlTWFwcGluZwotTWltZSB0eXBlOiB0ZXh0L2h0bWwKLVNjcmlwdCBzb3Vy
Y2U6ICAgPHNjcmlwdD48c2NyaXB0IHNvdXJjZSAxPjwvc2NyaXB0PgotTWltZSB0eXBlOiB0ZXh0
L2h0bWwKLVNjcmlwdCBzb3VyY2U6ICAgPHNjcmlwdD48c2NyaXB0IHNvdXJjZSAxPjwvc2NyaXB0
PiA8c2NyaXB0PjxzY3JpcHQgc291cmNlIDI+PC9zY3JpcHQ+Ci1NaW1lIHR5cGU6IHRleHQvaHRt
bAotU2NyaXB0IHNvdXJjZTogPHJlc291cmNlIGNvbnRlbnQ+Ci0KLVJ1bm5pbmc6IHRlc3RGb3Jt
YXR0aW5nV2l0aEZpbmlzaGVkUmVzb3VyY2UKLU1pbWUgdHlwZTogdGV4dC9qYXZhc2NyaXB0Ci1T
Y3JpcHQgc291cmNlOiA8cmVzb3VyY2UgY29udGVudD4KLU1pbWUgdHlwZTogdGV4dC9qYXZhc2Ny
aXB0Ci1TY3JpcHQgc291cmNlOiA8Zm9ybWF0dGVkPiA8cmVzb3VyY2UgY29udGVudD4KLU1pbWUg
dHlwZTogdGV4dC9qYXZhc2NyaXB0Ci1TY3JpcHQgc291cmNlOiA8cmVzb3VyY2UgY29udGVudD4K
LQotUnVubmluZzogdGVzdEZvcm1hdHRpbmdXaXRoUGVuZGluZ1Jlc291cmNlCi0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yYXctc291cmNlLWNvZGUuaHRtbCBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yYXctc291cmNlLWNvZGUuaHRtbAppbmRl
eCA1MTBmZTIxNjcwMzc2MDA1M2Y1YTQ0NDhmNjkzMzBjNGRlMmE3MWZiLi42NjRkMjNlZGNhZDQ2
M2ZkMDM3M2Q3MGUxNDZjNjg4M2MxNmE5YTJiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZGVidWdnZXIvcmF3LXNvdXJjZS1jb2RlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2RlYnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS5odG1sCkBAIC01NSwxNCArNTUsMTQgQEAg
ZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgIHJldHVybiBmb3JtYXR0ZXI7CiAgICAgfTsKIAotICAg
IGZ1bmN0aW9uIGNyZWF0ZVJhd1NvdXJjZUNvZGUoc2NyaXB0LCByZXF1ZXN0LCBmb3JtYXR0ZWQs
IGNvbXBpbGVyU291cmNlTWFwcGluZykKKyAgICBmdW5jdGlvbiBjcmVhdGVSYXdTb3VyY2VDb2Rl
KHNjcmlwdCwgcmVxdWVzdCwgY29tcGlsZXJTb3VyY2VNYXBwaW5nKQogICAgIHsKICAgICAgICAg
dmFyIHJlc291cmNlID0gbnVsbDsKICAgICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5maW5p
c2hlZCkgewogICAgICAgICAgICAgcmVzb3VyY2UgPSByZXF1ZXN0LnJlc291cmNlKCk7CiAgICAg
ICAgICAgICByZXF1ZXN0ID0gbnVsbDsKICAgICAgICAgfQotICAgICAgICB2YXIgcmF3U291cmNl
Q29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZSgiaWQiLCBzY3JpcHQsIHJlc291
cmNlLCByZXF1ZXN0LCBjcmVhdGVTY3JpcHRGb3JtYXR0ZXJNb2NrKCksICEhZm9ybWF0dGVkLCBj
b21waWxlclNvdXJjZU1hcHBpbmcpOworICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZSgiaWQiLCBzY3JpcHQsIHJlc291cmNlLCByZXF1ZXN0
LCBjb21waWxlclNvdXJjZU1hcHBpbmcpOwogICAgICAgICByYXdTb3VyY2VDb2RlLmFkZEV2ZW50
TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUuRXZlbnRzLlVJU291cmNlQ29kZUNo
YW5nZWQsIGRlZmF1bHRVSVNvdXJjZUNvZGVDaGFuZ2VkSGFuZGxlcik7CiAgICAgICAgIHJldHVy
biByYXdTb3VyY2VDb2RlOwogICAgIH0KQEAgLTE0MCw3ICsxNDAsNiBAQCBmdW5jdGlvbiB0ZXN0
KCkKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJj
ZTogIiArIGNvbnRlbnQpOwogCiAgICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5hZGRTY3Jp
cHQoc2NyaXB0Mik7Ci0gICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5mb3JjZVVwZGF0ZVNv
dXJjZU1hcHBpbmcoKTsKICAgICAgICAgICAgICAgICBuZXh0KCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0sCkBAIC0xNjUsMTYxICsxNjQsMTIgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBzb3VyY2U6ICIgKyBjb250
ZW50KTsKIAogICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuYWRkU2NyaXB0KHNjcmlwdDIp
OwotICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuZm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5n
KCk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24odWlTb3Vy
Y2VDb2RlLCAxLCAyMCwgcmF3U291cmNlQ29kZS5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihjcmVh
dGVSYXdMb2NhdGlvbigxLCAyMCkpKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNo
ZWNrUmF3TG9jYXRpb24oc2NyaXB0MSwgMSwgMCwgcmF3U291cmNlQ29kZS51aUxvY2F0aW9uVG9S
YXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIDEsIDApKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmNoZWNrUmF3TG9jYXRpb24oc2NyaXB0MiwgNiwgMCwgcmF3U291cmNlQ29kZS51aUxv
Y2F0aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIDYsIDApKTsKIAogICAgICAgICAgICAg
ICAgIG5leHQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBmdW5jdGlv
biB0ZXN0Rm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5nKG5leHQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLl9yZXNldCgpOwotICAgICAgICAgICAgdmFy
IHNjcmlwdDEgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZVNjcmlwdE1vY2soImluZGV4Lmh0bWwiLCAw
LCAxMCwgZmFsc2UsICI8c2NyaXB0IHNvdXJjZSAxPiIpOwotICAgICAgICAgICAgdmFyIHNjcmlw
dDIgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZVNjcmlwdE1vY2soImluZGV4Lmh0bWwiLCAwLCA0NSwg
ZmFsc2UsICI8c2NyaXB0IHNvdXJjZSAyPiIpOwotICAgICAgICAgICAgdmFyIHNjcmlwdDMgPSBJ
bnNwZWN0b3JUZXN0LmNyZWF0ZVNjcmlwdE1vY2soImluZGV4Lmh0bWwiLCAxLCAxMCwgZmFsc2Us
ICI8c2NyaXB0IHNvdXJjZSAzPiIpOwotICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBjcmVhdGVQ
ZW5kaW5nUmVxdWVzdE1vY2soImRvY3VtZW50IiwgIjxyZXNvdXJjZSBjb250ZW50PiIpOwotICAg
ICAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSBjcmVhdGVSYXdTb3VyY2VDb2RlKHNjcmlwdDEs
IHJlcXVlc3QpOwotCi0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoIXJhd1Nv
dXJjZUNvZGUudWlTb3VyY2VDb2RlKCkpOwotICAgICAgICAgICAgd2FpdEZvclVJU291cmNlQ29k
ZUNoYW5nZWRFdmVudChyYXdTb3VyY2VDb2RlLCByZXF1ZXN0Q29udGVudCk7Ci0gICAgICAgICAg
ICByYXdTb3VyY2VDb2RlLmZvcmNlVXBkYXRlU291cmNlTWFwcGluZygpOwotCi0gICAgICAgICAg
ICBmdW5jdGlvbiByZXF1ZXN0Q29udGVudCgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUo
KSk7Ci0gICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHJhd1NvdXJjZUNvZGUudWlT
b3VyY2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnJlcXVlc3RDb250ZW50
KGRpZFJlcXVlc3RDb250ZW50T25lU2NyaXB0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZnVuY3Rpb24gZGlkUmVxdWVzdENvbnRlbnRPbmVTY3JpcHQoY29udGVudCwgY29udGVudEVu
Y29kZWQsIG1pbWVUeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEluc3BlY3Rv
clRlc3QuYWRkUmVzdWx0KCJNaW1lIHR5cGU6ICIgKyBtaW1lVHlwZSk7Ci0gICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBzb3VyY2U6ICIgKyBjb250ZW50KTsK
LQotICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuZm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5n
KCk7Ci0gICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5hZGRTY3JpcHQoc2NyaXB0Mik7Ci0g
ICAgICAgICAgICAgICAgd2FpdEZvclVJU291cmNlQ29kZUNoYW5nZWRFdmVudChyYXdTb3VyY2VD
b2RlLCByZXF1ZXN0Q29udGVudFR3b1NjcmlwdHMpOwotICAgICAgICAgICAgICAgIHJhd1NvdXJj
ZUNvZGUuZm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5nKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIHJlcXVlc3RDb250ZW50VHdvU2NyaXB0cygpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNlQ29k
ZS51aVNvdXJjZUNvZGUoKSk7Ci0gICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHJh
d1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgdWlTb3VyY2VDb2Rl
LnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250ZW50VHdvU2NyaXB0cyk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50VHdvU2NyaXB0cyhj
b250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk1pbWUgdHlwZTogIiArIG1pbWVUeXBl
KTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJj
ZTogIiArIGNvbnRlbnQpOwotCi0gICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5mb3JjZVVw
ZGF0ZVNvdXJjZU1hcHBpbmcoKTsKLSAgICAgICAgICAgICAgICB3YWl0Rm9yVUlTb3VyY2VDb2Rl
Q2hhbmdlZEV2ZW50KHJhd1NvdXJjZUNvZGUsIHJlcXVlc3RDb250ZW50UmVxdWVzdCk7Ci0gICAg
ICAgICAgICAgICAgZmluaXNoUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZnVuY3Rpb24gcmVxdWVzdENvbnRlbnRSZXF1ZXN0KCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoISFyYXdTb3VyY2VDb2Rl
LnVpU291cmNlQ29kZSgpKTsKLSAgICAgICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gcmF3
U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKTsKLSAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUu
cmVxdWVzdENvbnRlbnQoZGlkUmVxdWVzdENvbnRlbnRSZXF1ZXN0KTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgZnVuY3Rpb24gZGlkUmVxdWVzdENvbnRlbnRSZXF1ZXN0KGNvbnRlbnQs
IGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTWltZSB0eXBlOiAiICsgbWltZVR5cGUpOwotICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsg
Y29udGVudCk7Ci0KLSAgICAgICAgICAgICAgICByYXdTb3VyY2VDb2RlLmFkZFNjcmlwdChzY3Jp
cHQzKTsKLSAgICAgICAgICAgICAgICByYXdTb3VyY2VDb2RlLmZvcmNlVXBkYXRlU291cmNlTWFw
cGluZygpOwotCi0gICAgICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9LAotCi0gICAgICAgIGZ1bmN0aW9uIHRlc3RGb3JtYXR0aW5nV2l0aEZpbmlzaGVkUmVzb3Vy
Y2UobmV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuX3Jlc2V0KCk7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0ID0gSW5zcGVjdG9yVGVzdC5jcmVh
dGVTY3JpcHRNb2NrKCJmb28uanMiLCAwLCAwLCB0cnVlLCAiPHNjcmlwdCBzb3VyY2U+Iik7Ci0g
ICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGNyZWF0ZUZpbmlzaGVkUmVxdWVzdE1vY2soInNjcmlw
dCIsICI8cmVzb3VyY2UgY29udGVudD4iKTsKLSAgICAgICAgICAgIHZhciByYXdTb3VyY2VDb2Rl
ID0gY3JlYXRlUmF3U291cmNlQ29kZShzY3JpcHQsIHJlcXVlc3QsIGZhbHNlKTsKLQotICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNlQ29kZS51aVNvdXJjZUNv
ZGUoKSk7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gcmF3U291cmNlQ29kZS51aVNv
dXJjZUNvZGUoKTsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHVp
U291cmNlQ29kZSwgMSwgMiwgcmF3U291cmNlQ29kZS5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihj
cmVhdGVSYXdMb2NhdGlvbigxLCAyKSkpOwotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVj
a1Jhd0xvY2F0aW9uKHNjcmlwdCwgMiwgMCwgcmF3U291cmNlQ29kZS51aUxvY2F0aW9uVG9SYXdM
b2NhdGlvbih1aVNvdXJjZUNvZGUsIDIsIDApKTsKLSAgICAgICAgICAgIHVpU291cmNlQ29kZS5y
ZXF1ZXN0Q29udGVudChkaWRSZXF1ZXN0Q29udGVudCk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9u
IGRpZFJlcXVlc3RDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTWlt
ZSB0eXBlOiAiICsgbWltZVR5cGUpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsgY29udGVudCk7Ci0KLSAgICAgICAgICAgICAgICBy
YXdTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVlKTsKLSAgICAgICAgICAgICAgICB3YWl0Rm9y
VUlTb3VyY2VDb2RlQ2hhbmdlZEV2ZW50KHJhd1NvdXJjZUNvZGUsIHJlcXVlc3RGb3JtYXR0ZWRD
b250ZW50KTsKLSAgICAgICAgICAgICAgICByYXdTb3VyY2VDb2RlLl9mb3JtYXR0ZXIuZmluaXNo
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHJlcXVlc3RGb3JtYXR0
ZWRDb250ZW50KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydFRydWUoISFyYXdTb3VyY2VDb2RlLnVpU291cmNlQ29kZSgpKTsKLSAgICAgICAgICAg
ICAgICB2YXIgdWlTb3VyY2VDb2RlID0gcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKTsKLSAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUs
IDIsIDQsIHJhd1NvdXJjZUNvZGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oY3JlYXRlUmF3TG9j
YXRpb24oMSwgMikpKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrUmF3TG9j
YXRpb24oc2NyaXB0LCAxLCAwLCByYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9u
KHVpU291cmNlQ29kZSwgMiwgMCkpOwotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5yZXF1
ZXN0Q29udGVudChkaWRSZXF1ZXN0Rm9ybWF0dGVkQ29udGVudCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RGb3JtYXR0ZWRDb250ZW50KGNvbnRlbnQs
IGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTWltZSB0eXBlOiAiICsgbWltZVR5cGUpOwotICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsg
Y29udGVudCk7Ci0KLSAgICAgICAgICAgICAgICB3YWl0Rm9yVUlTb3VyY2VDb2RlQ2hhbmdlZEV2
ZW50KHJhd1NvdXJjZUNvZGUsIHJlcXVlc3ROb3RGb3JtYXR0ZWRDb250ZW50KTsKLSAgICAgICAg
ICAgICAgICByYXdTb3VyY2VDb2RlLnNldEZvcm1hdHRlZChmYWxzZSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHJlcXVlc3ROb3RGb3JtYXR0ZWRDb250ZW50KCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydFRydWUoISFy
YXdTb3VyY2VDb2RlLnVpU291cmNlQ29kZSgpKTsKLSAgICAgICAgICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKTsKLSAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIDEsIDIsIHJhd1NvdXJj
ZUNvZGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oY3JlYXRlUmF3TG9jYXRpb24oMSwgMikpKTsK
LSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrUmF3TG9jYXRpb24oc2NyaXB0LCAy
LCAwLCByYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwg
MiwgMCkpOwotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChkaWRS
ZXF1ZXN0Tm90Rm9ybWF0dGVkQ29udGVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZ1bmN0aW9uIGRpZFJlcXVlc3ROb3RGb3JtYXR0ZWRDb250ZW50KGNvbnRlbnQsIGNvbnRlbnRF
bmNvZGVkLCBtaW1lVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmFkZFJlc3VsdCgiTWltZSB0eXBlOiAiICsgbWltZVR5cGUpOwotICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsgY29udGVudCk7
Ci0KLSAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0K
LSAgICAgICAgZnVuY3Rpb24gdGVzdEZvcm1hdHRpbmdXaXRoUGVuZGluZ1Jlc291cmNlKG5leHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLl9yZXNl
dCgpOwotICAgICAgICAgICAgdmFyIHNjcmlwdCA9IEluc3BlY3RvclRlc3QuY3JlYXRlU2NyaXB0
TW9jaygiZm9vLmpzIiwgMCwgMCwgdHJ1ZSwgIjxzY3JpcHQgc291cmNlPiIpOwotICAgICAgICAg
ICAgdmFyIHJlcXVlc3QgPSBjcmVhdGVQZW5kaW5nUmVxdWVzdE1vY2soInNjcmlwdCIsICI8cmVz
b3VyY2UgY29udGVudD4iKTsKLSAgICAgICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0gY3JlYXRl
UmF3U291cmNlQ29kZShzY3JpcHQsIHJlcXVlc3QsIHRydWUpOwotCi0gICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydFRydWUoIXJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCkpOwotICAg
ICAgICAgICAgZmluaXNoUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgICAgIHdhaXRGb3JVSVNv
dXJjZUNvZGVDaGFuZ2VkRXZlbnQocmF3U291cmNlQ29kZSwgY2hlY2tNYXBwaW5nKTsKLSAgICAg
ICAgICAgIHJhd1NvdXJjZUNvZGUuX2Zvcm1hdHRlci5maW5pc2goKTsKLQotICAgICAgICAgICAg
ZnVuY3Rpb24gY2hlY2tNYXBwaW5nKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJ
bnNwZWN0b3JUZXN0LmFzc2VydFRydWUoISFyYXdTb3VyY2VDb2RlLnVpU291cmNlQ29kZSgpKTsK
LSAgICAgICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gcmF3U291cmNlQ29kZS51aVNvdXJj
ZUNvZGUoKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbih1
aVNvdXJjZUNvZGUsIDIsIDQsIHJhd1NvdXJjZUNvZGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24o
Y3JlYXRlUmF3TG9jYXRpb24oMSwgMikpKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmNoZWNrUmF3TG9jYXRpb24oc2NyaXB0LCAxLCAwLCByYXdTb3VyY2VDb2RlLnVpTG9jYXRpb25U
b1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwgMiwgMCkpOwotICAgICAgICAgICAgICAgIG5leHQo
KTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIF0pOwogfTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMvdGVzdC1uYXZpZ2F0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL3Rlc3QtbmF2aWdh
dGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MGM5NzUyNWFjOTU3Zjhi
MThhNTJjNzA4ZjljZWU0NWQwODkyMzQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yZXNvdXJjZXMv
dGVzdC1uYXZpZ2F0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08aHRt
bD4KLTxzY3JpcHQ+Ci13aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKQotewotICAgIGZ1bmN0aW9u
IG5vdGlmeUZyb250ZW5kKCkKLSAgICB7Ci0gICAgICAgIEluc3BlY3RvclRlc3QucGFnZUxvYWRl
ZCgpOwotICAgIH0KLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Ci0gICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoMCwgIigiICsgbm90aWZ5RnJvbnRlbmQgKyAi
KSgpIik7Ci19Ci08L3NjcmlwdD4KLTxzY3JpcHQ+Ci0vLyBDb21tZW50Ci12YXIgeD0wO3ZhciB5
PTE7dmFyIHo9MjsKLTwvc2NyaXB0PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3JtYXR0ZXItYnJl
YWtwb2ludHMtZXhwZWN0ZWQudHh0CmluZGV4IGI1MDAzOWI2MGVkMmI3Y2E4ZWU3YjMwOTYyMTcz
NGM0OGNkNzFmMmEuLjk5NWQ4Y2IwNTEyZGFlNzQ1MTAyYzRhN2FhY2I3YTM1NWEyOTJiOGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVy
LWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVi
dWdnZXIvc2NyaXB0LWZvcm1hdHRlci1icmVha3BvaW50cy1leHBlY3RlZC50eHQKQEAgLTQsMzAg
KzQsMjAgQEAgRGVidWdnZXIgd2FzIGVuYWJsZWQuCiAKIFJ1bm5pbmc6IHRlc3RCcmVha3BvaW50
c0luT3JpZ2luYWxBbmRGb3JtYXR0ZWRTb3VyY2UKIFNjcmlwdCBleGVjdXRpb24gcGF1c2VkLgot
Ci1EdW1wIGJyZWFrcG9pbnQgc2lkZWJhciBwYW5lOgorQnJlYWtwb2ludCBzaWRlYmFyIHBhbmUg
d2hpbGUgcGF1c2VkIGluIHJhdwogCiAgICAgc2NyaXB0LWZvcm1hdHRlci1icmVha3BvaW50cy5o
dG1sOjExCi0gICAgdmFyIGY9MDsKKyAgICB2YXIgZj0wOyByZXR1cm4gMDsKIFNjcmlwdCBleGVj
dXRpb24gcmVzdW1lZC4KLVBhZ2UgcmVsb2FkZWQuCi1OYXZpZ2F0ZWQgdG8gdGVzdC1uYXZpZ2F0
aW9uLmh0bWwKLVBhZ2UgcmVsb2FkZWQuCi1OYXZpZ2F0ZWQgYmFjayB0byB0ZXN0IHBhZ2UuCi0K
LUR1bXAgYnJlYWtwb2ludCBzaWRlYmFyIHBhbmU6Ci0KIFNjcmlwdCBleGVjdXRpb24gcGF1c2Vk
LgorQnJlYWtwb2ludCBzaWRlYmFyIHBhbmUgd2hpbGUgcGF1c2VkIGluIHByZXR0eSBwcmludGVk
CiAKLUR1bXAgYnJlYWtwb2ludCBzaWRlYmFyIHBhbmU6Ci0KLSAgICBzY3JpcHQtZm9ybWF0dGVy
LWJyZWFrcG9pbnRzLmh0bWw6MjUKLSAgICByZXR1cm4gMDsKLVNjcmlwdCBleGVjdXRpb24gcmVz
dW1lZC4KLQotRHVtcCBicmVha3BvaW50IHNpZGViYXIgcGFuZToKKyAgICBzY3JpcHQtZm9ybWF0
dGVyLWJyZWFrcG9pbnRzLmh0bWw6MTgKKyAgICB2YXIgZiA9IDA7CitCcmVha3BvaW50IHNpZGVi
YXIgcGFuZSB3aGlsZSBwYXVzZWQgaW4gcmF3CiAKICAgICBzY3JpcHQtZm9ybWF0dGVyLWJyZWFr
cG9pbnRzLmh0bWw6MTEKLSAgICB2YXIgZj0wOworICAgIHZhciBmPTA7IHJldHVybiAwOworU2Ny
aXB0IGV4ZWN1dGlvbiByZXN1bWVkLgogRGVidWdnZXIgd2FzIGRpc2FibGVkLgogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LWZvcm1hdHRlci1icmVh
a3BvaW50cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3Jt
YXR0ZXItYnJlYWtwb2ludHMuaHRtbAppbmRleCA3MzJjZDU2NTI3YTE5ZjQ2N2I0ZWEzNWE1NGU2
ZWJmZThlMWI5ZDRkLi5mMDEyZTUwNzBiZTZlMzA0OTgzN2M5ZjAxNzJhZGM0MjlhNDdlYzE0IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LWZvcm1hdHRl
ci1icmVha3BvaW50cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9z
Y3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRzLmh0bWwKQEAgLTgsMTkgKzgsMTMgQEAKIGZ1bmN0
aW9uIGYxKCkKIHsKICAgICB2YXIgYT0wO3ZhciBiPTE7dmFyIGM9Mzt2YXIgZD00O3ZhciBlPTU7
Ci0gICAgdmFyIGY9MDsKLSAgICByZXR1cm4gMDsKLX0KLQotZnVuY3Rpb24gZjIoKQotewotICAg
IHZhciB4ID0gMDsKLSAgICByZXR1cm4gMDsKKyAgICB2YXIgZj0wOyByZXR1cm4gMDsKIH0KIAog
dmFyIHRlc3QgPSBmdW5jdGlvbigpCiB7CiAgICAgdmFyIHBhbmVsID0gV2ViSW5zcGVjdG9yLnBh
bmVscy5zY3JpcHRzOworICAgIHZhciBzb3VyY2VGcmFtZTsKIAogICAgIEluc3BlY3RvclRlc3Qu
cnVuRGVidWdnZXJUZXN0U3VpdGUoWwogICAgICAgICBmdW5jdGlvbiB0ZXN0QnJlYWtwb2ludHNJ
bk9yaWdpbmFsQW5kRm9ybWF0dGVkU291cmNlKG5leHQpCkBAIC0yOCw4ICsyMiw5IEBAIHZhciB0
ZXN0ID0gZnVuY3Rpb24oKQogICAgICAgICAgICAgdmFyIHJvb3Q7CiAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UoInNjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMu
aHRtbCIsIGRpZFNob3dTY3JpcHRTb3VyY2UpOwogCi0gICAgICAgICAgICBmdW5jdGlvbiBkaWRT
aG93U2NyaXB0U291cmNlKHNvdXJjZUZyYW1lKQorICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hv
d1NjcmlwdFNvdXJjZShmcmFtZSkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzb3Vy
Y2VGcmFtZSA9IGZyYW1lOwogICAgICAgICAgICAgICAgIHJvb3QgPSBzb3VyY2VGcmFtZS5fdXJs
LnN1YnN0cigwLCBzb3VyY2VGcmFtZS5fdXJsLmxhc3RJbmRleE9mKCIvIikgKyAxKTsKICAgICAg
ICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNldEJyZWFrcG9pbnQoc291cmNlRnJhbWUsIDEwLCAi
IiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0VW50aWxQYXVzZWQo
cGF1c2VkSW5GMSk7CkBAIC0zOCw2NSArMzMsMzYgQEAgdmFyIHRlc3QgPSBmdW5jdGlvbigpCiAK
ICAgICAgICAgICAgIGZ1bmN0aW9uIHBhdXNlZEluRjEoY2FsbEZyYW1lcykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydEVxdWFscygiZjEiLCBjYWxs
RnJhbWVzWzBdLmZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAgICAgZHVtcEJyZWFrcG9pbnRT
aWRlYmFyUGFuZSgpOworICAgICAgICAgICAgICAgIGR1bXBCcmVha3BvaW50U2lkZWJhclBhbmUo
IndoaWxlIHBhdXNlZCBpbiByYXciKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnJl
c3VtZUV4ZWN1dGlvbihyZXN1bWVkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVu
Y3Rpb24gcmVzdW1lZCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5uYXZpZ2F0ZShyb290ICsgInJlc291cmNlcy90ZXN0LW5hdmlnYXRpb24uaHRtbCIsIGRp
ZE5hdmlnYXRlQW5vdGhlclBhZ2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5j
dGlvbiBkaWROYXZpZ2F0ZUFub3RoZXJQYWdlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTmF2aWdhdGVkIHRvIHRlc3QtbmF2aWdhdGlv
bi5odG1sIik7Ci0gICAgICAgICAgICAgICAgcGFuZWwuX3RvZ2dsZUZvcm1hdFNvdXJjZSgpOwot
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSgidGVzdC1uYXZp
Z2F0aW9uLmh0bWwiLCBkaWRTaG93QW5vdGhlclBhZ2UpOworICAgICAgICAgICAgICAgIHNvdXJj
ZUZyYW1lLl91aVNvdXJjZUNvZGUuc2V0Rm9ybWF0dGVkKHRydWUsIGRpZEZvcm1hdFBhZ2UpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmdW5jdGlvbiBkaWRTaG93QW5vdGhlclBhZ2Uo
c291cmNlRnJhbWUpCisgICAgICAgICAgICBmdW5jdGlvbiBkaWRGb3JtYXRQYWdlKCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0Lm5hdmlnYXRlKHJvb3QgKyAi
c2NyaXB0LWZvcm1hdHRlci1icmVha3BvaW50cy5odG1sIiwgZGlkTmF2aWdhdGVCYWNrKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gZGlkTmF2aWdhdGVCYWNrKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiTmF2
aWdhdGVkIGJhY2sgdG8gdGVzdCBwYWdlLiIpOwotICAgICAgICAgICAgICAgIGR1bXBCcmVha3Bv
aW50U2lkZWJhclBhbmUoKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnNob3dTY3Jp
cHRTb3VyY2UoInNjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMuaHRtbCIsIGRpZFNob3dGb3Jt
YXR0ZWRTY3JpcHRTb3VyY2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlv
biBkaWRTaG93Rm9ybWF0dGVkU2NyaXB0U291cmNlKHNvdXJjZUZyYW1lKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSBubyBicmVha3BvaW50IGluIGYx
IHNpbmNlIHNjcmlwdCBpcyBwcmV0dHktcHJpbnRlZCBub3cuCisgICAgICAgICAgICAgICAgLy8g
VGhlcmUgc2hvdWxkIGJlIGEgYnJlYWtwb2ludCBpbiBmMSBhbHRob3VnaCBzY3JpcHQgaXMgcHJl
dHR5LXByaW50ZWQuCisgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0VW50aWxQYXVz
ZWQocGF1c2VkSW5GMUFnYWluKTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1
YXRlSW5QYWdlV2l0aFRpbWVvdXQoImYxKCkiKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LnNldEJyZWFrcG9pbnQocGFuZWwudmlzaWJsZVZpZXcsIDI0LCAiIiwgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC53YWl0VW50aWxQYXVzZWQocGF1c2VkSW5GMik7Ci0g
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZVdpdGhUaW1lb3V0KCJm
MigpIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHBhdXNlZEluRjIo
Y2FsbEZyYW1lcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydEVxdWFscygiZjIiLCBjYWxsRnJhbWVzWzBdLmZ1bmN0aW9uTmFtZSk7Ci0gICAgICAg
ICAgICAgICAgZHVtcEJyZWFrcG9pbnRTaWRlYmFyUGFuZSgpOwotICAgICAgICAgICAgICAgIHBh
bmVsLl90b2dnbGVGb3JtYXRTb3VyY2UoKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LnJlc3VtZUV4ZWN1dGlvbihyZXN1bWVkRjIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBmdW5jdGlvbiByZXN1bWVkRjIoKQorICAgICAgICAgICAgZnVuY3Rpb24gcGF1c2VkSW5GMUFn
YWluKGNhbGxGcmFtZXMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZHVtcEJyZWFr
cG9pbnRTaWRlYmFyUGFuZSgpOwotICAgICAgICAgICAgICAgIG5leHQoKTsKKyAgICAgICAgICAg
ICAgICBkdW1wQnJlYWtwb2ludFNpZGViYXJQYW5lKCJ3aGlsZSBwYXVzZWQgaW4gcHJldHR5IHBy
aW50ZWQiKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5fdWlTb3VyY2VDb2RlLnNldEZv
cm1hdHRlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgZHVtcEJyZWFrcG9pbnRTaWRlYmFyUGFu
ZSgid2hpbGUgcGF1c2VkIGluIHJhdyIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
cmVzdW1lRXhlY3V0aW9uKG5leHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgXSk7
CiAKLSAgICBmdW5jdGlvbiBkdW1wQnJlYWtwb2ludFNpZGViYXJQYW5lKCkKKyAgICBmdW5jdGlv
biBkdW1wQnJlYWtwb2ludFNpZGViYXJQYW5lKHRpdGxlKQogICAgIHsKICAgICAgICAgdmFyIHBh
bmVFbGVtZW50ID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNpZGViYXJQYW5lcy5qc0Jy
ZWFrcG9pbnRzLmxpc3RFbGVtZW50Ci0gICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCIi
KTsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIkR1bXAgYnJlYWtwb2ludCBzaWRl
YmFyIHBhbmU6Iik7CisgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJCcmVha3BvaW50
IHNpZGViYXIgcGFuZSAiICsgdGl0bGUpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dChJbnNwZWN0b3JUZXN0LnRleHRDb250ZW50V2l0aExpbmVCcmVha3MocGFuZUVsZW1lbnQpKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2Ny
aXB0LWZvcm1hdHRlci1jb25zb2xlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdn
ZXIvc2NyaXB0LWZvcm1hdHRlci1jb25zb2xlLmh0bWwKaW5kZXggNGM0NmQ1YjgyMDRlMjkzZWVm
MzQzMTcwYjMxMGQzMDEzZWI2ZjE5NS4uOTQ5MTNlZTQ0ZmI2ZGRjZTM2N2YwNzIwZDVkNzljMWRm
ZWVjMTZmYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Njcmlw
dC1mb3JtYXR0ZXItY29uc29sZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1
Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWNvbnNvbGUuaHRtbApAQCAtMTQsMjIgKzE0LDIzIEBAIHZh
ciB0ZXN0ID0gZnVuY3Rpb24oKQogewogICAgIHZhciBwYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5l
bHMuc2NyaXB0czsKICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcigiU2NyaXB0Rm9ybWF0dGVy
V29ya2VyLmpzIik7CisgICAgdmFyIHNvdXJjZUZyYW1lOwogCiAgICAgSW5zcGVjdG9yVGVzdC5y
dW5EZWJ1Z2dlclRlc3RTdWl0ZShbCiAgICAgICAgIGZ1bmN0aW9uIHRlc3RDb25zb2xlTWVzc2Fn
ZXNGb3JGb3JtYXR0ZWRTY3JpcHRzKG5leHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSgic2NyaXB0LWZvcm1hdHRlci1jb25zb2xlLmh0bWwi
LCBkaWRTaG93U2NyaXB0U291cmNlKTsKIAotICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hvd1Nj
cmlwdFNvdXJjZShzb3VyY2VGcmFtZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRpZFNob3dTY3Jp
cHRTb3VyY2UoZnJhbWUpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc291cmNlRnJh
bWUgPSBmcmFtZTsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdl
KCJmMSgpIiwgZGlkRXZhbHVhdGUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmdW5j
dGlvbiBkaWRFdmFsdWF0ZSgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZHVtcENv
bnNvbGVNZXNzYWdlVVJMcygpOwotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25p
ZmZlcihXZWJJbnNwZWN0b3IsICJmb3JtYXRMaW5rVGV4dCIsIHNldFRpbWVvdXQuYmluZCh3aW5k
b3csIGRpZEZvcm1hdExpbmtUZXh0LCAwKSk7Ci0gICAgICAgICAgICAgICAgcGFuZWwuX3RvZ2ds
ZUZvcm1hdFNvdXJjZSgpOworICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lLl91aVNvdXJjZUNv
ZGUuc2V0Rm9ybWF0dGVkKHRydWUsIGRpZEZvcm1hdExpbmtUZXh0KTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZnVuY3Rpb24gZGlkRm9ybWF0TGlua1RleHQoKQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NlbGVjdGVkLWNhbGwtZnJhbWUtYWZ0ZXIt
Zm9ybWF0dGluZy1zb3VyY2UuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9z
ZWxlY3RlZC1jYWxsLWZyYW1lLWFmdGVyLWZvcm1hdHRpbmctc291cmNlLmh0bWwKaW5kZXggZTc1
MzYxNTJlNDQ4NzFmNDRhNDQ5YWZmNDVlZTFhYTEwYzI2Zjc5Zi4uMmIyZmExMzg4OTliMjdlNTAy
MjkwNDE4MTVjOGZhNmUwNDU1MmVhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RlYnVnZ2VyL3NlbGVjdGVkLWNhbGwtZnJhbWUtYWZ0ZXItZm9ybWF0dGluZy1zb3VyY2UuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2VsZWN0ZWQtY2FsbC1mcmFt
ZS1hZnRlci1mb3JtYXR0aW5nLXNvdXJjZS5odG1sCkBAIC0yMCw2ICsyMCw3IEBAIHZhciB0ZXN0
ID0gZnVuY3Rpb24oKQogewogICAgIEluc3BlY3RvclRlc3Quc3RhcnREZWJ1Z2dlclRlc3Qoc3Rl
cDEpOwogICAgIHZhciBwYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0czsKKyAgICB2
YXIgc291cmNlRnJhbWU7CiAKICAgICBmdW5jdGlvbiBzdGVwMSgpCiAgICAgewpAQCAtMjgsMTgg
KzI5LDI3IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogICAgICAgICBJbnNwZWN0b3JUZXN0LnNo
b3dTY3JpcHRTb3VyY2UodGVzdE5hbWUsIHN0ZXAyKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBz
dGVwMihjYWxsRnJhbWVzKQorICAgIGZ1bmN0aW9uIHN0ZXAyKGZyYW1lKQogICAgIHsKKyAgICAg
ICAgc291cmNlRnJhbWUgPSBmcmFtZTsgCiAgICAgICAgIEluc3BlY3RvclRlc3QucnVuVGVzdEZ1
bmN0aW9uQW5kV2FpdFVudGlsUGF1c2VkKHN0ZXAzKTsKICAgICB9CiAKLSAgICBmdW5jdGlvbiBz
dGVwMyhjYWxsRnJhbWVzKQorICAgIGZ1bmN0aW9uIHN0ZXAzKCkKICAgICB7CisgICAgICAgIElu
c3BlY3RvclRlc3QuY29tcGxldGVEZWJ1Z2dlclRlc3QoKTsgcmV0dXJuOwogICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRTZWxlY3RlZENhbGxGcmFtZShXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5kZWJ1Z2dlclBhdXNlZERldGFpbHMoKS5jYWxsRnJhbWVzWzFdKTsKLSAg
ICAgICAgcGFuZWwuX3RvZ2dsZUZvcm1hdFNvdXJjZSgpOwotICAgICAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydEVxdWFscygidGVzdEZ1bmN0aW9uIiwgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
c2VsZWN0ZWRDYWxsRnJhbWUoKS5mdW5jdGlvbk5hbWUpOwotICAgICAgICBwYW5lbC5fdG9nZ2xl
Rm9ybWF0U291cmNlKCk7CisgICAgICAgIHNvdXJjZUZyYW1lLl90b2dnbGVGb3JtYXRTb3VyY2Uo
c3RlcDQpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN0ZXA0KCkKKyAgICB7CiAgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0RXF1YWxzKCJ0ZXN0RnVuY3Rpb24iLCBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5zZWxlY3RlZENhbGxGcmFtZSgpLmZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHNv
dXJjZUZyYW1lLl90b2dnbGVGb3JtYXRTb3VyY2Uoc3RlcDUpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHN0ZXA1KCkKKyAgICB7CiAgICAgICAgIEluc3BlY3RvclRlc3QuY29tcGxldGVEZWJ1Z2dl
clRlc3QoKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141401</attachid>
            <date>2012-05-11 06:43:07 -0700</date>
            <delta_ts>2012-05-11 07:25:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86099-20120511174305.patch</filename>
            <type>text/plain</type>
            <size>85283</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJjYWVkYTAzNDE5ZTli
MzFkNGFhNmZjZDdhYWEyNWRmMjQ4OWI1ZS4uYjRhZGEwMTQ2ZmFhMmYyNTRiOWU2ODNlNzIxZmY3
NjVlNmE5Yzk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTA1LTEwICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHBhc3Mgc291cmNlIG1hcHBpbmcgaW50byBVSVNvdXJjZUNvZGUncyBjb25zdHJ1Y3Rvcjsg
bW92ZSBmb3JtYXR0aW5nIG91dHNpZGUgbWFwcGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2MDk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzIG1vdmVzIGZvcm1hdHRpbmcgb3V0
IG9mIHRoZSBzb3VyY2UgbWFwcGluZyBtYWNoaW5lcnkuCisgICAgICAgIEFzIGEgcmVzdWx0LCBp
dCByZW1vdmVzIG1vc3Qgb2YgdGhlIERlYnVnZ2VyUHJlc2VudGF0aW9uJ3MgbWFwcGluZy1yZWxh
dGVkIGNvZGUgYXMgd2VsbAorICAgICAgICBhcyBtb3N0IG9mIHRoZSByYXcgc291cmNlIGNvZGUn
cyBjb2RlLgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdl
ci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLnJlc3RvcmVCcmVha3Bv
aW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2lu
dCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DYWxsU3RhY2tTaWRlYmFyUGFuZS5wcm90b3R5cGUu
c2V0U3RhdHVzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0NvbXBpbGVyU2NyaXB0
TWFwcGluZy5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRp
b25Nb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2Rl
bC5wcm90b3R5cGUuX2NhbGxGcmFtZVNlbGVjdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlTGlz
dENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9k
ZWwucHJvdG90eXBlLmNvbnRpbnVlVG9MaW5lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0phdmFTY3JpcHRTb3VyY2UuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dFNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5
cGUuZmlyZUNvbnRlbnRBdmFpbGFibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRTb3VyY2UucHJvdG90eXBlLnNldEZvcm1hdHRlZC5pZik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5cGUuc2V0Rm9ybWF0dGVkLmRpZEdldENvbnRlbnQu
ZGlkRm9ybWF0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZS5wcm90b3R5cGUuc2V0Rm9ybWF0dGVkLmRpZEdldENvbnRlbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlLnNldEZvcm1hdHRlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5cGUudG9nZ2xpbmdGb3JtYXR0
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlLnVp
TG9jYXRpb25Ub1Jhd0xvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
U291cmNlLnByb3RvdHlwZS5vdmVycmlkZUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlLnByb3RvdHlwZS5icmVha3BvaW50U3RvcmFnZUlkKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2Ny
aXB0U291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJj
ZUZyYW1lLnByb3RvdHlwZS5fb25Db250ZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmF3U291cmNlQ29kZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdT
b3VyY2VDb2RlLnByb3RvdHlwZS5hZGRTY3JpcHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJh
d1NvdXJjZUNvZGUucHJvdG90eXBlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS5fY3JlYXRlVUlTb3VyY2VDb2Rl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS51aUxvY2F0
aW9uVG9SYXdMb2NhdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5w
cm90b3R5cGUudWlTb3VyY2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VD
b2RlLnByb3RvdHlwZS5fZmluaXNoZWRMb2FkaW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL1Jlc291cmNlU2NyaXB0TWFwcGluZy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVNjcmlwdE1hcHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlU2Ny
aXB0TWFwcGluZy5wcm90b3R5cGUuYWRkU2NyaXB0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5S
ZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90eXBlLl9oYW5kbGVVSVNvdXJjZUNvZGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXNvdXJjZVNjcmlwdE1hcHBpbmcucHJvdG90eXBl
Ll91aVNvdXJjZUNvZGVDaGFuZ2VkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLnJhd0xvY2F0
aW9uVG9VSUxvY2F0aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZv
cm1hdHRlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIucHJvdG90
eXBlLl9kaWRGb3JtYXRDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJT
b3VyY2VNYXBwaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZS5vcmlnaW5hbFRvRm9ybWF0dGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLklkZW50aXR5Rm9ybWF0dGVyU291cmNlTWFwcGluZy5wcm90
b3R5cGUub3JpZ2luYWxUb0Zvcm1hdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSWRlbnRp
dHlGb3JtYXR0ZXJTb3VyY2VNYXBwaW5nLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nSW1wbCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGluZ0ltcGwucHJvdG90eXBlLm9y
aWdpbmFsVG9Gb3JtYXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJj
ZU1hcHBpbmdJbXBsLnByb3RvdHlwZS5mb3JtYXR0ZWRUb09yaWdpbmFsKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuTWFpblNjcmlwdE1hcHBpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk1haW5TY3JpcHRN
YXBwaW5nLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk1haW5TY3JpcHRNYXBwaW5nLnByb3RvdHlwZS5yZXNldCk6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3RvdHlwZS5faGFuZGxlVUlTb3VyY2VDb2RlQWRkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuc2hvd0Z1bmN0
aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0c1BhbmVsLnByb3Rv
dHlwZS5fc2hvd0ZpbGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX3JldmVhbEV4ZWN1dGlvbkxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUuX3RvZ2dsZUZvcm1hdFNvdXJjZSk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzU2VhcmNoU2NvcGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU2NyaXB0c1NlYXJjaFJlc3VsdHNQYW5lLnByb3RvdHlwZS5jcmVhdGVBbmNob3IpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldHNNb2RlbC5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TbmlwcGV0c1NjcmlwdE1hcHBpbmcucHJvdG90eXBlLl9zbmlwcGV0QWRkZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNuaXBwZXRzU2NyaXB0TWFwcGluZy5wcm90b3R5cGUu
X2NyZWF0ZVVJU291cmNlQ29kZUZvclNjcmlwdCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9VSVNvdXJjZUNvZGUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2Rl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLnJlcXVlc3RD
b250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLm1p
bWVUeXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUucHJvdG90eXBlLmNv
bnRlbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5wcm90b3R5cGUuZmly
ZUNvbnRlbnRBdmFpbGFibGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5w
cm90b3R5cGUuY29udGVudExvYWRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVUlTb3VyY2VD
b2RlLnByb3RvdHlwZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbik6CisKIDIwMTItMDUtMTAgIEFs
ZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBdXRvY29tcGxldGUgZm9yIENTUyBwcm9wZXJ0eSB2YWx1ZXMgaW4gdGhlIFN0eWxl
cyBwYW5lIGJlaGF2aW5nIGluY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCBkMWMwZTk5MzY0
NGRmNjAxYjUyODZkNDg2YTMyN2NkOTJhMzE1Y2UyLi45ZDExMWUwMDk2YjgxMGQxZjZhOTFhNzlm
NGE2MTkzNDU4ODNjZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKQEAgLTMzLDEzICszMywxMSBAQAogICog
QGV4dGVuZHMge1dlYkluc3BlY3Rvci5PYmplY3R9CiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5T
ZXR0aW5nfSBicmVha3BvaW50U3RvcmFnZQogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNb2RlbH0gZGVidWdnZXJNb2RlbAotICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuTWFpblNjcmlw
dE1hcHBpbmd9IHNvdXJjZU1hcHBpbmcKICAqLwotV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyID0gZnVuY3Rpb24oYnJlYWtwb2ludFN0b3JhZ2UsIGRlYnVnZ2VyTW9kZWwsIHNvdXJjZU1h
cHBpbmcpCitXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIgPSBmdW5jdGlvbihicmVha3Bv
aW50U3RvcmFnZSwgZGVidWdnZXJNb2RlbCkKIHsKICAgICB0aGlzLl9zdG9yYWdlID0gbmV3IFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5TdG9yYWdlKHRoaXMsIGJyZWFrcG9pbnRTdG9y
YWdlKTsKICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsID0gZGVidWdnZXJNb2RlbDsKLSAgICB0aGlz
Ll9zb3VyY2VNYXBwaW5nID0gc291cmNlTWFwcGluZzsKIAogICAgIHRoaXMuX2JyZWFrcG9pbnRz
ID0gW107CiAgICAgdGhpcy5fYnJlYWtwb2ludEZvckRlYnVnZ2VySWQgPSB7fTsKQEAgLTY5LDcg
KzY3LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgLy8gRXJhc2UgcHJvdmlzaW9uYWwgYnJlYWtwb2ludHMgcHJpb3IgdG8gcmVzdG9yaW5n
IHRoZW0uCiAgICAgICAgIGZvciAodmFyIGRlYnVnZ2VySWQgaW4gdGhpcy5fYnJlYWtwb2ludEZv
ckRlYnVnZ2VySWQpIHsKICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtw
b2ludEZvckRlYnVnZ2VySWRbZGVidWdnZXJJZF07Ci0gICAgICAgICAgICBpZiAoYnJlYWtwb2lu
dC5fcHJpbWFyeVVJTG9jYXRpb24udWlTb3VyY2VDb2RlLmlkICE9PSB1aVNvdXJjZUNvZGUuaWQp
CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5fc291cmNlQ29kZVN0b3JhZ2VJZCAhPT0gc291
cmNlRmlsZUlkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgdGhpcy5f
ZGVidWdnZXJNb2RlbC5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VySWQpOwogICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRGb3JEZWJ1Z2dlcklkW2RlYnVnZ2VySWRdOwpAQCAtMjQx
LDYgKzIzOSw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50ID0g
ZnVuY3Rpb24oYnJlYWtwb2ludE1hbmFnZXIsIHVpU291cmNlCiB7CiAgICAgdGhpcy5fYnJlYWtw
b2ludE1hbmFnZXIgPSBicmVha3BvaW50TWFuYWdlcjsKICAgICB0aGlzLl9wcmltYXJ5VUlMb2Nh
dGlvbiA9IG5ldyBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1i
ZXIsIDApOworICAgIHRoaXMuX3NvdXJjZUNvZGVTdG9yYWdlSWQgPSB1aVNvdXJjZUNvZGUuYnJl
YWtwb2ludFN0b3JhZ2VJZCgpOwogICAgIHRoaXMuX2xpdmVMb2NhdGlvbnMgPSBbXTsKICAgICB0
aGlzLl91aUxvY2F0aW9ucyA9IG5ldyBNYXAoKTsKIApAQCAtMzQ1LDcgKzM0NCw3IEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKIAogICAg
IF9zZXRJbkRlYnVnZ2VyOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgcmF3TG9jYXRp
b24gPSB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fc291cmNlTWFwcGluZy51aUxvY2F0aW9uVG9S
YXdMb2NhdGlvbih0aGlzLl9wcmltYXJ5VUlMb2NhdGlvbi51aVNvdXJjZUNvZGUsIHRoaXMuX3By
aW1hcnlVSUxvY2F0aW9uLmxpbmVOdW1iZXIsIDApOworICAgICAgICB2YXIgcmF3TG9jYXRpb24g
PSB0aGlzLl9wcmltYXJ5VUlMb2NhdGlvbi51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbigpOwogICAg
ICAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlci5fZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50
QnlTY3JpcHRMb2NhdGlvbihyYXdMb2NhdGlvbiwgdGhpcy5fY29uZGl0aW9uLCBkaWRTZXRCcmVh
a3BvaW50LmJpbmQodGhpcykpOwogICAgICAgICAvKioKICAgICAgICAgICogQHRoaXMge1dlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50fQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ2FsbFN0YWNrU2lkZWJhclBhbmUuanMK
aW5kZXggNDU0YzEzY2NiMDIyZjczMGI2OTNmMzk5MjE1YjE5NTAwNjdiNTJlNS4uMDQwNjQzYWE2
MTc3YzkxOGI2MTQyZjM1NWQ4NGQ5MGRkNGM4YzlmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DYWxsU3RhY2tTaWRlYmFyUGFuZS5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NhbGxTdGFja1NpZGViYXJQYW5lLmpzCkBA
IC0xMzksMTMgKzEzOSwxNyBAQCBXZWJJbnNwZWN0b3IuQ2FsbFN0YWNrU2lkZWJhclBhbmUucHJv
dG90eXBlID0gewogCiAgICAgc2V0U3RhdHVzOiBmdW5jdGlvbihzdGF0dXMpCiAgICAgewotICAg
ICAgICB2YXIgc3RhdHVzTWVzc2FnZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKLSAgICAgICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImluZm8iOwor
ICAgICAgICBpZiAoIXRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50KSB7CisgICAgICAgICAgICB0
aGlzLl9zdGF0dXNNZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OworICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQuY2xhc3NOYW1lID0gImlu
Zm8iOworICAgICAgICAgICAgdGhpcy5ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9zdGF0
dXNNZXNzYWdlRWxlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGVvZiBzdGF0dXMg
PT09ICJzdHJpbmciKQotICAgICAgICAgICAgc3RhdHVzTWVzc2FnZUVsZW1lbnQudGV4dENvbnRl
bnQgPSBzdGF0dXM7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VFbGVt
ZW50LmFwcGVuZENoaWxkKHN0YXR1cyk7Ci0gICAgICAgIHRoaXMuYm9keUVsZW1lbnQuYXBwZW5k
Q2hpbGQoc3RhdHVzTWVzc2FnZUVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fc3RhdHVzTWVz
c2FnZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdGF0dXM7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdGhpcy5fc3RhdHVzTWVzc2FnZUVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAg
ICAgICAgIHRoaXMuX3N0YXR1c01lc3NhZ2VFbGVtZW50LmFwcGVuZENoaWxkKHN0YXR1cyk7Cisg
ICAgICAgIH0KICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQ29tcGlsZXJTY3JpcHRNYXBwaW5nLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKaW5kZXggYTY5NWFhNGZk
MWFmMjk5YzViMDg0OTlkOGQ5MjZiZTIwZWFlNTkzMC4uZmFhOGE0N2MwODMwNTU3Y2QyODk0ODY5
YTY5ZWUxYWM2NjE2YjIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9Db21waWxlclNjcmlwdE1hcHBpbmcuanMKQEAgLTcxLDcgKzcxLDcg
QEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAg
ICovCiAgICAgdWlTb3VyY2VDb2RlTGlzdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFy
IHJlc3VsdCA9IFtdCisgICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICAgZm9yICh2YXIg
dXJsIGluIHRoaXMuX3VpU291cmNlQ29kZUJ5VVJMKQogICAgICAgICAgICAgcmVzdWx0LnB1c2go
dGhpcy5fdWlTb3VyY2VDb2RlQnlVUkxbdXJsXSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC0xMTYsNyArMTE2LDcgQEAgV2ViSW5zcGVjdG9yLkNvbXBpbGVyU2NyaXB0TWFwcGluZy5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29udGVudFByb3ZpZGVyID0gbmV3IFdlYkluc3Bl
Y3Rvci5TdGF0aWNDb250ZW50UHJvdmlkZXIoInRleHQvamF2YXNjcmlwdCIsIHNvdXJjZUNvbnRl
bnQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRlbnRQcm92aWRlciA9
IG5ldyBXZWJJbnNwZWN0b3IuQ29tcGlsZXJTb3VyY2VNYXBwaW5nQ29udGVudFByb3ZpZGVyKHNv
dXJjZVVSTCk7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlKHNvdXJjZVVSTCwgc291cmNlVVJMLCBjb250ZW50UHJvdmlkZXIp
OworICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNj
cmlwdFNvdXJjZShzb3VyY2VVUkwsIHNvdXJjZVVSTCwgY29udGVudFByb3ZpZGVyLCB0aGlzKTsK
ICAgICAgICAgICAgIHVpU291cmNlQ29kZS5pc0NvbnRlbnRTY3JpcHQgPSBzY3JpcHQuaXNDb250
ZW50U2NyaXB0OwogICAgICAgICAgICAgdWlTb3VyY2VDb2RlLmlzRWRpdGFibGUgPSBmYWxzZTsK
ICAgICAgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUJ5VVJMW3NvdXJjZVVSTF0gPSB1aVNvdXJj
ZUNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Rl
YnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0RlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwuanMKaW5kZXggYjE4OWYxNjc5ZTAzZmJh
OThjNTRjMTlhZTlkMTNhODZlNmI3ZTgwOS4uZjJmNjJiMzRmNzcyYTA3YjQ5MTRhYzI4M2Q3M2Zk
MDc3NzNlYWZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5qcwpAQCAtMzksMTUgKzM5
LDEzIEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsID0gZnVuY3Rpb24o
KQogCiAgICAgdGhpcy5fcHJlc2VudGF0aW9uQ2FsbEZyYW1lcyA9IFtdOwogCi0gICAgdGhpcy5f
YnJlYWtwb2ludE1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyKFdl
Ykluc3BlY3Rvci5zZXR0aW5ncy5icmVha3BvaW50cywgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwsIHRoaXMuX3NjcmlwdE1hcHBpbmcpOwotICAgIHRoaXMuX2JyZWFrcG9pbnRzQWN0aXZlID0g
dHJ1ZTsKKyAgICB0aGlzLl9icmVha3BvaW50TWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuQnJl
YWtwb2ludE1hbmFnZXIoV2ViSW5zcGVjdG9yLnNldHRpbmdzLmJyZWFrcG9pbnRzLCBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbCk7CiAKICAgICB0aGlzLl9wZW5kaW5nQ29uc29sZU1lc3NhZ2Vz
ID0ge307CiAgICAgdGhpcy5fY29uc29sZU1lc3NhZ2VMaXZlTG9jYXRpb25zID0gW107CiAKICAg
ICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5QYXJzZWRTY3JpcHRTb3VyY2UsIHRoaXMuX3BhcnNlZFNj
cmlwdFNvdXJjZSwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRmFpbGVkVG9QYXJz
ZVNjcmlwdFNvdXJjZSwgdGhpcy5fZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZSwgdGhpcyk7Ci0g
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0
b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQ2FsbEZyYW1lU2VsZWN0ZWQsIHRoaXMuX2NhbGxGcmFt
ZVNlbGVjdGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5HbG9iYWxPYmplY3RD
bGVhcmVkLCB0aGlzLl9kZWJ1Z2dlclJlc2V0LCB0aGlzKTsKIAogICAgIFdlYkluc3BlY3Rvci5j
b25zb2xlLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkNvbnNvbGVNb2RlbC5FdmVudHMu
TWVzc2FnZUFkZGVkLCB0aGlzLl9jb25zb2xlTWVzc2FnZUFkZGVkLCB0aGlzKTsKQEAgLTcwLDI2
ICs2OCw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3RvdHlw
ZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0g
cmF3TG9jYXRpb24KLSAgICAgKiBAcmV0dXJuIHs/V2ViSW5zcGVjdG9yLlVJTG9jYXRpb259Ci0g
ICAgICovCi0gICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9u
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdE1hcHBpbmcucmF3TG9jYXRpb25U
b1VJTG9jYXRpb24ocmF3TG9jYXRpb24pOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJl
cgotICAgICAqIEByZXR1cm4ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259Ci0gICAgICovCi0gICAg
dWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NjcmlwdE1hcHBp
bmcudWlMb2NhdGlvblRvUmF3TG9jYXRpb24odWlTb3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdl
bnQuTG9jYXRpb259IHJhd0xvY2F0aW9uCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihXZWJJbnNw
ZWN0b3IuVUlMb2NhdGlvbik6KGJvb2xlYW58dW5kZWZpbmVkKX0gdXBkYXRlRGVsZWdhdGUKICAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuTGl2ZUxvY2F0aW9ufQogICAgICAqLwpAQCAtMTE3
LDEyICs5NSw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fcGFyc2VkU2NyaXB0U291cmNlKGV2ZW50KTsKICAgICB9
LAogCi0gICAgX2NhbGxGcmFtZVNlbGVjdGVkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAg
ICAgIHZhciBjYWxsRnJhbWUgPSAvKiogQHR5cGUge1dlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkNhbGxGcmFtZX0gKi8gZXZlbnQuZGF0YTsKLSAgICAgICAgdGhpcy5fc2NyaXB0TWFwcGluZy5m
b3JjZVVwZGF0ZVNvdXJjZU1hcHBpbmcoY2FsbEZyYW1lLmxvY2F0aW9uKTsKLSAgICB9LAotCiAg
ICAgLyoqCiAgICAgICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGU+
fQogICAgICAqLwpAQCAtMTM4LDkgKzExMCw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciByZW1vdmVkSXRl
bXMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0gKi8gZXZl
bnQuZGF0YVsicmVtb3ZlZEl0ZW1zIl07CiAgICAgICAgIHZhciBhZGRlZEl0ZW1zID0gLyoqIEB0
eXBlIHtBcnJheS48V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZT59ICovIGV2ZW50LmRhdGFbImFk
ZGVkSXRlbXMiXTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWRJ
dGVtcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLmJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVCcmVha3BvaW50cyhhZGRlZEl0
ZW1zW2ldKTsKIAogICAgICAgICBpZiAoIXJlbW92ZWRJdGVtcy5sZW5ndGgpIHsKICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRkZWRJdGVtcy5sZW5ndGg7ICsraSkKQEAgLTE3MCw3
ICsxMzksNyBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5wcm90b3R5
cGUgPSB7CiAgICAgICovCiAgICAgc2V0U2NyaXB0U291cmNlOiBmdW5jdGlvbih1aVNvdXJjZUNv
ZGUsIG5ld1NvdXJjZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgcmF3TG9jYXRpb24g
PSB0aGlzLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwgMCwgMCk7CisgICAg
ICAgIHZhciByYXdMb2NhdGlvbiA9IHVpU291cmNlQ29kZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlv
bigwLCAwKTsKICAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LnNjcmlwdEZvcklkKHJhd0xvY2F0aW9uLnNjcmlwdElkKTsKIAogICAgICAgICAvKioKQEAgLTE5
MywxNSArMTYyLDYgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9uTW9kZWwucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZv
cm1hdFNvdXJjZQotICAgICAqLwotICAgIHNldEZvcm1hdFNvdXJjZTogZnVuY3Rpb24oZm9ybWF0
U291cmNlKQotICAgIHsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIucmVzZXQoKTsK
LSAgICAgICAgdGhpcy5fc2NyaXB0TWFwcGluZy5zZXRGb3JtYXRTb3VyY2UoZm9ybWF0U291cmNl
KTsKLSAgICB9LAotCi0gICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRXZlbnR9
IGV2ZW50CiAgICAgICovCiAgICAgX2NvbnNvbGVNZXNzYWdlQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50
KQpAQCAtMjg0LDE1ICsyNDQsMTAgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2VudGF0aW9u
TW9kZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlv
bih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgcmF3TG9jYXRp
b24gPSB0aGlzLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJl
ciwgMCk7CisgICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHVpU291cmNlQ29kZS51aUxvY2F0aW9u
VG9SYXdMb2NhdGlvbihsaW5lTnVtYmVyLCAwKTsKICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuY29udGludWVUb0xvY2F0aW9uKHJhd0xvY2F0aW9uKTsKICAgICB9LAogCi0gICAg
cmVtb3ZlQWxsQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Jy
ZWFrcG9pbnRNYW5hZ2VyLnJlbW92ZUFsbEJyZWFrcG9pbnRzKCk7Ci0gICAgfSwKLQogICAgIF9k
ZWJ1Z2dlclJlc2V0OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB0aGlzLl9zY3JpcHRNYXBw
aW5nLnJlc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0phdmFTY3JpcHRTb3VyY2UuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0phdmFTY3JpcHRTb3VyY2UuanMKaW5kZXggYjM2NjUzNjAwOTMzMjRkNWNmM2YwZWE0NTJm
OTRkZDQ2MWI3MzI3NS4uZTcxOGU3ZTk2NGQyYjQwMDgxZWNkNTlmN2M0ODdlNzE0OWU3N2U1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0
U291cmNlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSmF2YVNj
cmlwdFNvdXJjZS5qcwpAQCAtMzQsMTUgKzM0LDIyIEBACiAgKiBAcGFyYW0ge3N0cmluZ30gaWQK
ICAqIEBwYXJhbSB7c3RyaW5nfSB1cmwKICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkNvbnRlbnRQ
cm92aWRlcn0gY29udGVudFByb3ZpZGVyCisgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Tb3VyY2VN
YXBwaW5nfSBzb3VyY2VNYXBwaW5nCiAgKi8KLVdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNl
ID0gZnVuY3Rpb24oaWQsIHVybCwgY29udGVudFByb3ZpZGVyKQorV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2UgPSBmdW5jdGlvbihpZCwgdXJsLCBjb250ZW50UHJvdmlkZXIsIHNvdXJjZU1h
cHBpbmcpCiB7Ci0gICAgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5jYWxsKHRoaXMsIGlkLCB1
cmwsIGNvbnRlbnRQcm92aWRlcik7CisgICAgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZS5jYWxs
KHRoaXMsIGlkLCB1cmwsIGNvbnRlbnRQcm92aWRlciwgc291cmNlTWFwcGluZyk7CiAKICAgICAv
KioKICAgICAgKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5QcmVzZW50YXRpb25Db25zb2xl
TWVzc2FnZT59CiAgICAgICovCiAgICAgdGhpcy5fY29uc29sZU1lc3NhZ2VzID0gW107CisgICAg
dGhpcy5fZm9ybWF0dGVyTWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuSWRlbnRpdHlGb3JtYXR0
ZXJTb3VyY2VNYXBwaW5nKCk7CisgICAgLy8gRklYTUU6IHBvc3Rwb25lIGJyZWFrcG9pbnRzIHJl
c3RvcmUgdG8gYWZ0ZXIgdGhlIG1hcHBpbmcgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCisgICAgc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCF0aGlzLl9mb3JtYXR0ZWQpCisgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5icmVha3BvaW50
TWFuYWdlci5yZXN0b3JlQnJlYWtwb2ludHModGhpcyk7CisgICAgfS5iaW5kKHRoaXMpLCAwKTsK
IH0KIAogV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UucHJvdG90eXBlID0gewpAQCAtNzAs
MTEgKzc3LDExOCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZS5wcm90b3R5cGUgPSB7
CiAgICAgfSwKIAogICAgIC8qKgorICAgICAqIEBwYXJhbSB7P3N0cmluZ30gY29udGVudAorICAg
ICAqIEBwYXJhbSB7Ym9vbGVhbn0gY29udGVudEVuY29kZWQKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gbWltZVR5cGUKKyAgICAgKi8KKyAgICBmaXJlQ29udGVudEF2YWlsYWJsZTogZnVuY3Rpb24o
Y29udGVudCwgY29udGVudEVuY29kZWQsIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZS5wcm90b3R5cGUuZmlyZUNvbnRlbnRBdmFpbGFibGUuY2FsbCh0
aGlzLCBjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpOworICAgICAgICBpZiAodGhp
cy5fZm9ybWF0T25Mb2FkKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fZm9ybWF0T25Mb2Fk
OworICAgICAgICAgICAgdGhpcy5zZXRGb3JtYXR0ZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtib29sZWFufSBmb3JtYXR0ZWQKKyAgICAgKiBA
cGFyYW0ge2Z1bmN0aW9uKCk9fSBjYWxsYmFjaworICAgICAqLworICAgIHNldEZvcm1hdHRlZDog
ZnVuY3Rpb24oZm9ybWF0dGVkLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIGNhbGxiYWNrID0g
Y2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRMb2Fk
ZWQoKSkgeworICAgICAgICAgICAgdGhpcy5fZm9ybWF0T25Mb2FkID0gZm9ybWF0dGVkOworICAg
ICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZWQgPT09IGZvcm1hdHRlZCkgeworICAgICAgICAgICAg
Y2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuX2Zvcm1hdHRlZCA9IGZvcm1hdHRlZDsKKworICAgICAgICAvLyBSZS1yZXF1ZXN0IGNvbnRl
bnQKKyAgICAgICAgdGhpcy5fY29udGVudExvYWRlZCA9IGZhbHNlOworICAgICAgICBXZWJJbnNw
ZWN0b3IuVUlTb3VyY2VDb2RlLnByb3RvdHlwZS5yZXF1ZXN0Q29udGVudC5jYWxsKHRoaXMsIGRp
ZEdldENvbnRlbnQuYmluZCh0aGlzKSk7CisgIAorICAgICAgICAvKioKKyAgICAgICAgICogQHRo
aXMge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9CisgICAgICAgICAqIEBwYXJhbSB7P3N0cmlu
Z30gY29udGVudAorICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCisg
ICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtaW1lVHlwZQorICAgICAgICAgKi8KKyAgICAgICAg
ZnVuY3Rpb24gZGlkR2V0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZm9ybWF0dGVkKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5fdG9nZ2xpbmdGb3JtYXR0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMu
Y29udGVudENoYW5nZWQoY29udGVudCB8fCAiIik7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX3RvZ2dsaW5nRm9ybWF0dGVyOworICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlck1h
cHBpbmcgPSBuZXcgV2ViSW5zcGVjdG9yLklkZW50aXR5Rm9ybWF0dGVyU291cmNlTWFwcGluZygp
OworICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTGl2ZUxvY2F0aW9ucygpOworICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgIAorICAgICAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU2Ny
aXB0Rm9ybWF0dGVyKCk7CisgICAgICAgICAgICBmb3JtYXR0ZXIuZm9ybWF0Q29udGVudChtaW1l
VHlwZSwgY29udGVudCB8fCAiIiwgZGlkRm9ybWF0Q29udGVudC5iaW5kKHRoaXMpKTsKKyAgCisg
ICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIEB0aGlzIHtXZWJJbnNwZWN0b3IuVUlTb3Vy
Y2VDb2RlfQorICAgICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdHRlZENvbnRlbnQK
KyAgICAgICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBp
bmd9IGZvcm1hdHRlck1hcHBpbmcKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZnVuY3Rp
b24gZGlkRm9ybWF0Q29udGVudChmb3JtYXR0ZWRDb250ZW50LCBmb3JtYXR0ZXJNYXBwaW5nKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsaW5nRm9ybWF0dGVyID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2VkKGZvcm1hdHRlZENvbnRl
bnQpOworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl90b2dnbGluZ0Zvcm1hdHRlcjsKKyAg
ICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZXJNYXBwaW5nID0gZm9ybWF0dGVyTWFwcGluZzsK
KyAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxpdmVMb2NhdGlvbnMoKTsKKyAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5icmVha3BvaW50TWFu
YWdlci5yZXN0b3JlQnJlYWtwb2ludHModGhpcyk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBA
cmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHRvZ2dsaW5nRm9ybWF0dGVyOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xpbmdGb3JtYXR0ZXI7CisgICAg
fSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICog
QHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgorICAgICAqIEByZXR1cm4ge0RlYnVnZ2VyQWdl
bnQuTG9jYXRpb259CisgICAgICovCisgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7CisgICAgICAgIHZhciBsb2NhdGlv
biA9IHRoaXMuX2Zvcm1hdHRlck1hcHBpbmcuZm9ybWF0dGVkVG9PcmlnaW5hbChsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZS5wcm90b3R5cGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24uY2FsbCh0aGlzLCBsb2NhdGlvblsw
XSwgbG9jYXRpb25bMV0pOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge1dlYklu
c3BlY3Rvci5VSUxvY2F0aW9ufSB1aUxvY2F0aW9uCisgICAgICovCisgICAgb3ZlcnJpZGVMb2Nh
dGlvbjogZnVuY3Rpb24odWlMb2NhdGlvbikKKyAgICB7CisgICAgICAgIHZhciBsb2NhdGlvbiA9
IHRoaXMuX2Zvcm1hdHRlck1hcHBpbmcub3JpZ2luYWxUb0Zvcm1hdHRlZCh1aUxvY2F0aW9uLmxp
bmVOdW1iZXIsIHVpTG9jYXRpb24uY29sdW1uTnVtYmVyKTsKKyAgICAgICAgdWlMb2NhdGlvbi5s
aW5lTnVtYmVyID0gbG9jYXRpb25bMF07CisgICAgICAgIHVpTG9jYXRpb24uY29sdW1uTnVtYmVy
ID0gbG9jYXRpb25bMV07CisgICAgICAgIHJldHVybiB1aUxvY2F0aW9uOworICAgIH0sCisKKyAg
ICAvKioKICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CiAgICAgICovCiAgICAgYnJlYWtwb2ludFN0
b3JhZ2VJZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaWQ7CisgICAg
ICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWQgPyAiZGVvYmZ1c2NhdGVkOiIgKyB0aGlzLnVybCA6
IHRoaXMudXJsOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9KYXZhU2NyaXB0U291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwppbmRleCBkYTM5MGFm
MjAzZmExMGU1MzkxN2M3NWVlNDQyMWVlZTM0YzkyZWM3Li5lNTE3OGQ1OWM5MWVmYmJjODhhZjNi
YjBiZjgxMTBmNTdkMGU1YWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0phdmFTY3JpcHRTb3VyY2VGcmFtZS5qcwpAQCAtMTIwLDExICsx
MjAsMTUgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHZhciBvbGRDb250ZW50ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIGV2ZW50LmRh
dGEub2xkQ29udGVudDsKICAgICAgICAgdmFyIGNvbnRlbnQgPSAvKiogQHR5cGUge3N0cmluZ30g
Ki8gZXZlbnQuZGF0YS5jb250ZW50OwogCi0gICAgICAgIHZhciBicmVha3BvaW50TG9jYXRpb25z
ID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2ludExvY2F0aW9uc0ZvclVJU291cmNl
Q29kZSh0aGlzLl91aVNvdXJjZUNvZGUpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJy
ZWFrcG9pbnRMb2NhdGlvbnMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBicmVha3BvaW50TG9j
YXRpb25zW2ldLmJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgIHRoaXMuc2V0Q29udGVudChj
b250ZW50LCBmYWxzZSwgInRleHQvamF2YXNjcmlwdCIpOwotICAgICAgICB0aGlzLl91cGRhdGVC
cmVha3BvaW50c0FmdGVyTGl2ZUVkaXQob2xkQ29udGVudCwgY29udGVudCwgYnJlYWtwb2ludExv
Y2F0aW9ucyk7CisgICAgICAgIGlmICh0aGlzLl91aVNvdXJjZUNvZGUudG9nZ2xpbmdGb3JtYXR0
ZXIoKSkKKyAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBmYWxzZSwgdGhpcy5f
dWlTb3VyY2VDb2RlLm1pbWVUeXBlKCkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZh
ciBicmVha3BvaW50TG9jYXRpb25zID0gdGhpcy5fYnJlYWtwb2ludE1hbmFnZXIuYnJlYWtwb2lu
dExvY2F0aW9uc0ZvclVJU291cmNlQ29kZSh0aGlzLl91aVNvdXJjZUNvZGUpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50TG9jYXRpb25zLmxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRMb2NhdGlvbnNbaV0uYnJlYWtwb2ludC5yZW1vdmUo
KTsKKyAgICAgICAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBmYWxzZSwgdGhpcy5fdWlT
b3VyY2VDb2RlLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgdGhpcy5fdXBkYXRlQnJlYWtwb2lu
dHNBZnRlckxpdmVFZGl0KG9sZENvbnRlbnQsIGNvbnRlbnQsIGJyZWFrcG9pbnRMb2NhdGlvbnMp
OworICAgICAgICB9CiAgICAgfSwKIAogICAgIHBvcHVsYXRlTGluZUd1dHRlckNvbnRleHRNZW51
OiBmdW5jdGlvbihjb250ZXh0TWVudSwgbGluZU51bWJlcikKQEAgLTUxMCw5ICs1MTQsOCBAQCBX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLkJyZWFrcG9pbnR9ICovIGV2ZW50LmRhdGEuYnJlYWtwb2ludDsKICAgICAgICAgdmFyIHJl
bWFpbmluZ0JyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50TWFuYWdlci5maW5kQnJlYWtwb2lu
dCh0aGlzLl91aVNvdXJjZUNvZGUsIHVpTG9jYXRpb24ubGluZU51bWJlcik7Ci0gICAgICAgIGlm
ICghcmVtYWluaW5nQnJlYWtwb2ludCAmJiB0aGlzLmxvYWRlZCkgeworICAgICAgICBpZiAoIXJl
bWFpbmluZ0JyZWFrcG9pbnQgJiYgdGhpcy5sb2FkZWQpCiAgICAgICAgICAgICB0aGlzLl9yZW1v
dmVCcmVha3BvaW50RGVjb3JhdGlvbih1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwotICAgICAgICB9
CiAgICAgfSwKIAogICAgIF9jb25zb2xlTWVzc2FnZUFkZGVkOiBmdW5jdGlvbihldmVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmF3U291cmNlQ29k
ZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmF3U291cmNlQ29kZS5q
cwppbmRleCA1Y2NhOGYxMDE3MDhlNjQzNWU1MGQ5ZThhOTMwN2NhN2ZjN2M0OWIzLi43ZTZmMjgz
Y2FlYzQxZTg3OTU3YzgyY2FiZTlmYzBiYmQwOWM1NjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jhd1NvdXJjZUNvZGUuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SYXdTb3VyY2VDb2RlLmpzCkBAIC0zOCwyNiArMzgs
MjMgQEAKICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlNjcmlwdH0gc2NyaXB0CiAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5SZXNvdXJjZX0gcmVzb3VyY2UKICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9y
Lk5ldHdvcmtSZXF1ZXN0fSByZXF1ZXN0Ci0gKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5TY3JpcHRG
b3JtYXR0ZXJ9IGZvcm1hdHRlcgotICogQHBhcmFtIHtib29sZWFufSBmb3JtYXR0ZWQKKyAqIEBw
YXJhbSB7V2ViSW5zcGVjdG9yLlNvdXJjZU1hcHBpbmd9IHNvdXJjZU1hcHBpbmcKICAqLwotV2Vi
SW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUgPSBmdW5jdGlvbihpZCwgc2NyaXB0LCByZXNvdXJjZSwg
cmVxdWVzdCwgZm9ybWF0dGVyLCBmb3JtYXR0ZWQpCitXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29k
ZSA9IGZ1bmN0aW9uKGlkLCBzY3JpcHQsIHJlc291cmNlLCByZXF1ZXN0LCBzb3VyY2VNYXBwaW5n
KQogewogICAgIHRoaXMuaWQgPSBpZDsKICAgICB0aGlzLnVybCA9IHNjcmlwdC5zb3VyY2VVUkw7
CiAgICAgdGhpcy5pc0NvbnRlbnRTY3JpcHQgPSBzY3JpcHQuaXNDb250ZW50U2NyaXB0OwogICAg
IHRoaXMuX3NjcmlwdHMgPSBbc2NyaXB0XTsKLSAgICB0aGlzLl9mb3JtYXR0ZXIgPSBmb3JtYXR0
ZXI7Ci0gICAgdGhpcy5fZm9ybWF0dGVkID0gZm9ybWF0dGVkOwogICAgIHRoaXMuX3Jlc291cmNl
ID0gcmVzb3VyY2U7CiAgICAgdGhpcy5fcGVuZGluZ1JlcXVlc3QgPSByZXF1ZXN0OworICAgIHRo
aXMuX3NvdXJjZU1hcHBpbmcgPSBzb3VyY2VNYXBwaW5nOwogCi0gICAgdGhpcy5faGFzTmV3U2Ny
aXB0cyA9IHRydWU7Ci0KKyAgICB0aGlzLl91aVNvdXJjZUNvZGUgPSBudWxsOwogICAgIGlmICh0
aGlzLl9wZW5kaW5nUmVxdWVzdCkKICAgICAgICAgdGhpcy5fcGVuZGluZ1JlcXVlc3QuYWRkRXZl
bnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuTmV0d29ya1JlcXVlc3QuRXZlbnRzLkZpbmlzaGVkTG9h
ZGluZywgdGhpcy5fZmluaXNoZWRMb2FkaW5nLCB0aGlzKTsKICAgICBlbHNlCi0gICAgICAgIHRo
aXMuX3VwZGF0ZVNvdXJjZU1hcHBpbmcoKTsKKyAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlID0g
dGhpcy5fY3JlYXRlVUlTb3VyY2VDb2RlKHRoaXMudXJsKTsKIH0KIAogV2ViSW5zcGVjdG9yLlJh
d1NvdXJjZUNvZGUuRXZlbnRzID0gewpAQCAtNzEsNyArNjgsNiBAQCBXZWJJbnNwZWN0b3IuUmF3
U291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgYWRkU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQp
CiAgICAgewogICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2goc2NyaXB0KTsKLSAgICAgICAgdGhp
cy5faGFzTmV3U2NyaXB0cyA9IHRydWU7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtODAsMjAxICs3
NiwzOCBAQCBXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5wcm90b3R5cGUgPSB7CiAgICAgICov
CiAgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9uKHJhd0xvY2F0aW9uKQogICAg
IHsKLSAgICAgICAgaWYgKHRoaXMuX3NvdXJjZU1hcHBpbmcpCi0gICAgICAgICAgICByZXR1cm4g
dGhpcy5fc291cmNlTWFwcGluZy5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7
Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9IHVpU291cmNlQ29kZQotICAgICAqIEBwYXJhbSB7
bnVtYmVyfSBsaW5lTnVtYmVyCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk51bWJlcgot
ICAgICAqIEByZXR1cm4ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259Ci0gICAgICovCi0gICAgdWlM
b2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3NvdXJjZU1hcHBpbmcpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlTWFwcGluZy51aUxvY2F0aW9uVG9SYXdMb2Nh
dGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0
b3IuVUlTb3VyY2VDb2RlfG51bGx9Ci0gICAgICovCi0gICAgdWlTb3VyY2VDb2RlOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc291cmNlTWFwcGluZykKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zb3VyY2VNYXBwaW5nLnVpU291cmNlQ29kZSgpOwotICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtib29sZWFufSBmb3Jt
YXR0ZWQKLSAgICAgKi8KLSAgICBzZXRGb3JtYXR0ZWQ6IGZ1bmN0aW9uKGZvcm1hdHRlZCkKLSAg
ICB7Ci0gICAgICAgIGlmICh0aGlzLl9mb3JtYXR0ZWQgPT09IGZvcm1hdHRlZCkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fZm9ybWF0dGVkID0gZm9ybWF0dGVkOwotICAgICAg
ICB0aGlzLl91cGRhdGVTb3VyY2VNYXBwaW5nKCk7Ci0gICAgfSwKLQotICAgIF9maW5pc2hlZExv
YWRpbmc6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VGb3JVUkwodGhpcy5fcGVuZGluZ1JlcXVlc3QudXJsKTsKLSAg
ICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdSZXF1ZXN0OwotICAgICAgICB0aGlzLl91cGRhdGVT
b3VyY2VNYXBwaW5nKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLlNjcmlwdH0gc2NyaXB0Ci0gICAgICovCi0gICAgZm9yY2VVcGRhdGVTb3VyY2VNYXBw
aW5nOiBmdW5jdGlvbihzY3JpcHQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdS
ZXF1ZXN0IHx8ICF0aGlzLl9oYXNOZXdTY3JpcHRzKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB0aGlzLl9oYXNOZXdTY3JpcHRzID0gZmFsc2U7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZVNv
dXJjZU1hcHBpbmcoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZVNvdXJjZU1hcHBpbmc6IGZ1bmN0
aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl91cGRhdGluZ1NvdXJjZU1hcHBpbmcpIHsK
LSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZU5lZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5fdXBkYXRpbmdTb3VyY2VNYXBwaW5nID0gdHJ1
ZTsKLSAgICAgICAgdGhpcy5fdXBkYXRlTmVlZGVkID0gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5f
Y3JlYXRlU291cmNlTWFwcGluZyhkaWRDcmVhdGVTb3VyY2VNYXBwaW5nLmJpbmQodGhpcykpOwot
Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNv
ZGV9Ci0gICAgICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUuU291cmNl
TWFwcGluZ30gc291cmNlTWFwcGluZwotICAgICAgICAgKi8KLSAgICAgICAgZnVuY3Rpb24gZGlk
Q3JlYXRlU291cmNlTWFwcGluZyhzb3VyY2VNYXBwaW5nKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0aGlzLl91cGRhdGluZ1NvdXJjZU1hcHBpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChz
b3VyY2VNYXBwaW5nICYmICF0aGlzLl91cGRhdGVOZWVkZWQpCi0gICAgICAgICAgICAgICAgdGhp
cy5fc2F2ZVNvdXJjZU1hcHBpbmcoc291cmNlTWFwcGluZyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU291cmNlTWFwcGluZygpOworICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gdGhpcy5fdWlTb3VyY2VDb2RlIHx8IHRoaXMuX3RlbXBvcmFyeVVJU291
cmNlQ29kZTsKKyAgICAgICAgaWYgKCF1aVNvdXJjZUNvZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X3RlbXBvcmFyeVVJU291cmNlQ29kZSA9IHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZSgidG1wLSIg
KyB0aGlzLnVybCk7CisgICAgICAgICAgICB1aVNvdXJjZUNvZGUgPSB0aGlzLl90ZW1wb3JhcnlV
SVNvdXJjZUNvZGU7CisgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhX
ZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5FdmVudHMuVUlTb3VyY2VDb2RlQ2hhbmdlZCwgeyB1
aVNvdXJjZUNvZGU6IHVpU291cmNlQ29kZSB9KTsKICAgICAgICAgfQotICAgIH0sCi0KLSAgICBf
Y3JlYXRlQ29udGVudFByb3ZpZGVyOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fcmVzb3VyY2UpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7Ci0gICAgICAg
IGlmICh0aGlzLl9zY3JpcHRzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5fc2NyaXB0c1swXS5saW5l
T2Zmc2V0ICYmICF0aGlzLl9zY3JpcHRzWzBdLmNvbHVtbk9mZnNldCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zY3JpcHRzWzBdOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5D
b25jYXRlbmF0ZWRTY3JpcHRzQ29udGVudFByb3ZpZGVyKHRoaXMuX3NjcmlwdHMpOworICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHVpU291cmNlQ29kZSwgcmF3TG9j
YXRpb24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyIHx8IDApOwogICAgIH0s
CiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5SYXdTb3Vy
Y2VDb2RlLlNvdXJjZU1hcHBpbmcpfSBjYWxsYmFjaworICAgICAqIEBwYXJhbSB7c3RyaW5nfSBp
ZAorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9CiAgICAgICovCi0g
ICAgX2NyZWF0ZVNvdXJjZU1hcHBpbmc6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIF9jcmVhdGVV
SVNvdXJjZUNvZGU6IGZ1bmN0aW9uKGlkKQogICAgIHsKLSAgICAgICAgdmFyIG9yaWdpbmFsQ29u
dGVudFByb3ZpZGVyID0gdGhpcy5fY3JlYXRlQ29udGVudFByb3ZpZGVyKCk7Ci0gICAgICAgIGlm
ICghdGhpcy5fZm9ybWF0dGVkKSB7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gdGhp
cy5fY3JlYXRlVUlTb3VyY2VDb2RlKHRoaXMudXJsLCB0aGlzLnVybCwgb3JpZ2luYWxDb250ZW50
UHJvdmlkZXIpOwotICAgICAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBuZXcgV2ViSW5zcGVj
dG9yLlJhd1NvdXJjZUNvZGUuUGxhaW5Tb3VyY2VNYXBwaW5nKHRoaXMsIHVpU291cmNlQ29kZSk7
Ci0gICAgICAgICAgICBjYWxsYmFjayhzb3VyY2VNYXBwaW5nKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgICAgICB2YXIgaXNTdGFuZGFsb25lU2NyaXB0ID0gdGhpcy5fc2Ny
aXB0cy5sZW5ndGggPT09IDEgJiYgIXRoaXMuX3NjcmlwdHNbMF0uaXNJbmxpbmVTY3JpcHQoKTsK
IAotICAgICAgICAvKioKLSAgICAgICAgICogQHRoaXMge1dlYkluc3BlY3Rvci5SYXdTb3VyY2VD
b2RlfQotICAgICAgICAgKiBAcGFyYW0gez9zdHJpbmd9IGNvbnRlbnQKLSAgICAgICAgICogQHBh
cmFtIHtib29sZWFufSBjb250ZW50RW5jb2RlZAotICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30g
bWltZVR5cGUKLSAgICAgICAgICovCi0gICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50
KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgLyoqCi0gICAgICAgICAgICAgKiBAdGhpcyB7V2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGV9
Ci0gICAgICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0dGVkQ29udGVudAotICAgICAg
ICAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNlTWFwcGluZ30gbWFw
cGluZwotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmdW5jdGlvbiBkaWRGb3JtYXRDb250
ZW50KGZvcm1hdHRlZENvbnRlbnQsIG1hcHBpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgdmFyIGNvbnRlbnRQcm92aWRlciA9IG5ldyBXZWJJbnNwZWN0b3IuU3RhdGljQ29udGVu
dFByb3ZpZGVyKG1pbWVUeXBlLCBmb3JtYXR0ZWRDb250ZW50KQotICAgICAgICAgICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSB0aGlzLl9jcmVhdGVVSVNvdXJjZUNvZGUoImRlb2JmdXNjYXRlZDoi
ICsgdGhpcy51cmwsIHRoaXMudXJsLCBjb250ZW50UHJvdmlkZXIpOwotICAgICAgICAgICAgICAg
IHZhciBzb3VyY2VNYXBwaW5nID0gbmV3IFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLkZvcm1h
dHRlZFNvdXJjZU1hcHBpbmcodGhpcywgdWlTb3VyY2VDb2RlLCBtYXBwaW5nKTsKLSAgICAgICAg
ICAgICAgICBjYWxsYmFjayhzb3VyY2VNYXBwaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlci5mb3JtYXRDb250ZW50KG1pbWVUeXBlLCBjb250ZW50IHx8ICIi
LCBkaWRGb3JtYXRDb250ZW50LmJpbmQodGhpcykpOwotICAgICAgICB9Ci0gICAgICAgIG9yaWdp
bmFsQ29udGVudFByb3ZpZGVyLnJlcXVlc3RDb250ZW50KGRpZFJlcXVlc3RDb250ZW50LmJpbmQo
dGhpcykpOwotICAgIH0sCisgICAgICAgIHZhciBjb250ZW50UHJvdmlkZXI7CisgICAgICAgIGlm
ICh0aGlzLl9yZXNvdXJjZSkKKyAgICAgICAgICAgIGNvbnRlbnRQcm92aWRlciA9IHRoaXMuX3Jl
c291cmNlOworICAgICAgICBlbHNlIGlmIChpc1N0YW5kYWxvbmVTY3JpcHQpCisgICAgICAgICAg
ICBjb250ZW50UHJvdmlkZXIgPSB0aGlzLl9zY3JpcHRzWzBdOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb250ZW50UHJvdmlkZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbmNhdGVuYXRlZFNj
cmlwdHNDb250ZW50UHJvdmlkZXIodGhpcy5fc2NyaXB0cyk7CiAKLSAgICAvKioKLSAgICAgKiBA
cGFyYW0ge3N0cmluZ30gaWQKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsCi0gICAgICogQHBh
cmFtIHtXZWJJbnNwZWN0b3IuQ29udGVudFByb3ZpZGVyfSBjb250ZW50UHJvdmlkZXIKLSAgICAg
Ki8KLSAgICBfY3JlYXRlVUlTb3VyY2VDb2RlOiBmdW5jdGlvbihpZCwgdXJsLCBjb250ZW50UHJv
dmlkZXIpCi0gICAgewotICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0U291cmNlKGlkLCB1cmwsIGNvbnRlbnRQcm92aWRlcik7CisgICAgICAgIHZh
ciB1aVNvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2UoaWQsIHRo
aXMudXJsLCBjb250ZW50UHJvdmlkZXIsIHRoaXMuX3NvdXJjZU1hcHBpbmcpOwogICAgICAgICB1
aVNvdXJjZUNvZGUuaXNDb250ZW50U2NyaXB0ID0gdGhpcy5pc0NvbnRlbnRTY3JpcHQ7Ci0gICAg
ICAgIHVpU291cmNlQ29kZS5pc0VkaXRhYmxlID0gdGhpcy5fc2NyaXB0cy5sZW5ndGggPT09IDEg
JiYgIXRoaXMuX3NjcmlwdHNbMF0ubGluZU9mZnNldCAmJiAhdGhpcy5fc2NyaXB0c1swXS5jb2x1
bW5PZmZzZXQgJiYgIXRoaXMuX2Zvcm1hdHRlZDsKKyAgICAgICAgdWlTb3VyY2VDb2RlLmlzRWRp
dGFibGUgPSBpc1N0YW5kYWxvbmVTY3JpcHQ7CiAgICAgICAgIHJldHVybiB1aVNvdXJjZUNvZGU7
CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd1NvdXJj
ZUNvZGUuU291cmNlTWFwcGluZ30gc291cmNlTWFwcGluZwotICAgICAqLwotICAgIF9zYXZlU291
cmNlTWFwcGluZzogZnVuY3Rpb24oc291cmNlTWFwcGluZykKLSAgICB7Ci0gICAgICAgIHZhciBv
bGRVSVNvdXJjZUNvZGU7Ci0gICAgICAgIGlmICh0aGlzLl9zb3VyY2VNYXBwaW5nKQotICAgICAg
ICAgICAgb2xkVUlTb3VyY2VDb2RlID0gdGhpcy5fc291cmNlTWFwcGluZy51aVNvdXJjZUNvZGUo
KTsKLSAgICAgICAgdGhpcy5fc291cmNlTWFwcGluZyA9IHNvdXJjZU1hcHBpbmc7Ci0gICAgICAg
IHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2Rl
LkV2ZW50cy5VSVNvdXJjZUNvZGVDaGFuZ2VkLCB7IG9sZFVJU291cmNlQ29kZTogb2xkVUlTb3Vy
Y2VDb2RlIH0pOwotICAgIH0KLX0KLQotV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUucHJvdG90
eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlOwotCi0vKioKLSAq
IEBpbnRlcmZhY2UKLSAqIEBleHRlbmRzIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwcGluZ30KLSAq
LwotV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUuU291cmNlTWFwcGluZyA9IGZ1bmN0aW9uKCkK
LXsKLX0KLQotV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUuU291cmNlTWFwcGluZy5wcm90b3R5
cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZX0KLSAgICAgKi8KLSAgICB1aVNvdXJjZUNvZGU6IGZ1bmN0aW9uKCkgeyB9Ci19Ci0KLS8qKgot
ICogQGNvbnN0cnVjdG9yCi0gKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNv
ZGUuU291cmNlTWFwcGluZ30KLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGV9
IHJhd1NvdXJjZUNvZGUKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlT
b3VyY2VDb2RlCi0gKi8KLVdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlBsYWluU291cmNlTWFw
cGluZyA9IGZ1bmN0aW9uKHJhd1NvdXJjZUNvZGUsIHVpU291cmNlQ29kZSkKLXsKLSAgICB0aGlz
Ll9yYXdTb3VyY2VDb2RlID0gcmF3U291cmNlQ29kZTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUg
PSB1aVNvdXJjZUNvZGU7Ci19Ci0KLVdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLlBsYWluU291
cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtEZWJ1Z2dl
ckFnZW50LkxvY2F0aW9ufSByYXdMb2NhdGlvbgotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rv
ci5VSUxvY2F0aW9ufQotICAgICAqLwotICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uOiBmdW5j
dGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LlVJTG9jYXRpb24odGhpcy5fdWlTb3VyY2VDb2RlLCByYXdMb2NhdGlvbi5saW5lTnVtYmVyLCBy
YXdMb2NhdGlvbi5jb2x1bW5OdW1iZXIgfHwgMCk7Ci0gICAgfSwKLQotICAgIC8qKgogICAgICAq
IEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3VyY2VDb2RlCiAgICAgICog
QHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKICAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1u
TnVtYmVyCkBAIC0yODIsNjEgKzExNSwyNyBAQCBXZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZS5Q
bGFpblNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewogICAgICAqLwogICAgIHVpTG9jYXRpb25U
b1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikKICAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHVpU291cmNlQ29kZSA9PT0gdGhp
cy5fdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLmNyZWF0ZVJhd0xvY2F0aW9uKHRoaXMuX3Jhd1NvdXJjZUNvZGUuX3NjcmlwdHNbMF0sIGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIGlmICh0aGlzLnVybCkKKyAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVhdGVSYXdMb2NhdGlvbkJ5
VVJMKHRoaXMudXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOworICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuY3JlYXRlUmF3TG9jYXRpb24odGhpcy5fc2NyaXB0
c1swXSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICB9LAogCiAgICAgLyoqCi0gICAg
ICogQHJldHVybiB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0KKyAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfG51bGx9CiAgICAgICovCiAgICAgdWlTb3VyY2VDb2Rl
OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqIEBpbXBsZW1lbnRzIHtXZWJJbnNw
ZWN0b3IuUmF3U291cmNlQ29kZS5Tb3VyY2VNYXBwaW5nfQotICogQHBhcmFtIHtXZWJJbnNwZWN0
b3IuUmF3U291cmNlQ29kZX0gcmF3U291cmNlQ29kZQotICogQHBhcmFtIHtXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkZvcm1h
dHRlZFNvdXJjZU1hcHBpbmd9IG1hcHBpbmcKLSAqLwotV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNv
ZGUuRm9ybWF0dGVkU291cmNlTWFwcGluZyA9IGZ1bmN0aW9uKHJhd1NvdXJjZUNvZGUsIHVpU291
cmNlQ29kZSwgbWFwcGluZykKLXsKLSAgICB0aGlzLl9yYXdTb3VyY2VDb2RlID0gcmF3U291cmNl
Q29kZTsKLSAgICB0aGlzLl91aVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7Ci0gICAgdGhpcy5f
bWFwcGluZyA9IG1hcHBpbmc7Ci19Ci0KLVdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLkZvcm1h
dHRlZFNvdXJjZU1hcHBpbmcucHJvdG90eXBlID0gewotICAgIC8qKgotICAgICAqIEBwYXJhbSB7
RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0gcmF3TG9jYXRpb24KLSAgICAgKi8KLSAgICByYXdMb2Nh
dGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAgewotICAgICAgICB2
YXIgbG9jYXRpb24gPSB0aGlzLl9tYXBwaW5nLm9yaWdpbmFsVG9Gb3JtYXR0ZWQocmF3TG9jYXRp
b24ubGluZU51bWJlciwgcmF3TG9jYXRpb24uY29sdW1uTnVtYmVyIHx8IDApOwotICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5VSUxvY2F0aW9uKHRoaXMuX3VpU291cmNlQ29kZSwgbG9j
YXRpb25bMF0sIGxvY2F0aW9uWzFdKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSB1aVNvdXJjZUNvZGUKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1iZXIK
LSAgICAgKiBAcmV0dXJuIHtEZWJ1Z2dlckFnZW50LkxvY2F0aW9ufQotICAgICAqLwotICAgIHVp
TG9jYXRpb25Ub1Jhd0xvY2F0aW9uOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuYXNzZXJ0KHVpU291cmNlQ29k
ZSA9PT0gdGhpcy5fdWlTb3VyY2VDb2RlKTsKLSAgICAgICAgdmFyIGxvY2F0aW9uID0gdGhpcy5f
bWFwcGluZy5mb3JtYXR0ZWRUb09yaWdpbmFsKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0g
ICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5jcmVhdGVSYXdMb2NhdGlv
bih0aGlzLl9yYXdTb3VyY2VDb2RlLl9zY3JpcHRzWzBdLCBsb2NhdGlvblswXSwgbG9jYXRpb25b
MV0pOworICAgICAgICByZXR1cm4gdGhpcy5fdWlTb3VyY2VDb2RlIHx8IHRoaXMuX3RlbXBvcmFy
eVVJU291cmNlQ29kZTsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHJldHVybiB7V2ViSW5z
cGVjdG9yLlVJU291cmNlQ29kZX0KLSAgICAgKi8KLSAgICB1aVNvdXJjZUNvZGU6IGZ1bmN0aW9u
KCkKKyAgICBfZmluaXNoZWRMb2FkaW5nOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl91aVNvdXJjZUNvZGU7CisgICAgICAgIHRoaXMuX3Jlc291cmNlID0gV2Vi
SW5zcGVjdG9yLnJlc291cmNlRm9yVVJMKHRoaXMuX3BlbmRpbmdSZXF1ZXN0LnVybCk7CisgICAg
ICAgIGRlbGV0ZSB0aGlzLl9wZW5kaW5nUmVxdWVzdDsKKyAgICAgICAgdmFyIG9sZFVJU291cmNl
Q29kZSA9IHRoaXMuX3VpU291cmNlQ29kZSB8fCB0aGlzLl90ZW1wb3JhcnlVSVNvdXJjZUNvZGU7
CisgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZSA9IHRoaXMuX2NyZWF0ZVVJU291cmNlQ29kZSh0
aGlzLnVybCk7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3Bl
Y3Rvci5SYXdTb3VyY2VDb2RlLkV2ZW50cy5VSVNvdXJjZUNvZGVDaGFuZ2VkLCB7IHVpU291cmNl
Q29kZTogdGhpcy5fdWlTb3VyY2VDb2RlLCBvbGRVSVNvdXJjZUNvZGU6IG9sZFVJU291cmNlQ29k
ZSB9KTsKICAgICB9CiB9CisKK1dlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLnByb3RvdHlwZS5f
X3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VTY3JpcHRNYXBwaW5nLmpz
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVNjcmlwdE1hcHBp
bmcuanMKaW5kZXggMjBiOTFmZTA4ODM1YjY1NDEyZWExOTQ2MzI5ZTgxMGY2MzA1NDgwZi4uZGMz
MDAyNGE0OTIyYTYwMWNkNTdlN2ViNDJkYzBmZTc0MGI2N2M4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVNjcmlwdE1hcHBpbmcuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVNjcmlwdE1hcHBp
bmcuanMKQEAgLTM5LDggKzM5LDYgQEAgV2ViSW5zcGVjdG9yLlJlc291cmNlU2NyaXB0TWFwcGlu
ZyA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLl9yYXdTb3VyY2VDb2RlRm9yVVJMID0ge307CiAgICAg
dGhpcy5fcmF3U291cmNlQ29kZUZvckRvY3VtZW50VVJMID0ge307CiAgICAgdGhpcy5fcmF3U291
cmNlQ29kZUZvclVJU291cmNlQ29kZSA9IG5ldyBNYXAoKTsKLSAgICB0aGlzLl9mb3JtYXR0ZXIg
PSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlcigpOwotICAgIHRoaXMuX2Zvcm1hdFNv
dXJjZSA9IGZhbHNlOwogfQogCiBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTY3JpcHRNYXBwaW5nLnBy
b3RvdHlwZSA9IHsKQEAgLTExNCw3ICsxMTIsNyBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTY3Jp
cHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAg
ICAgIHZhciByYXdTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlKHNj
cmlwdC5zY3JpcHRJZCwgc2NyaXB0LCByZXNvdXJjZSwgcmVxdWVzdCwgdGhpcy5fZm9ybWF0dGVy
LCB0aGlzLl9mb3JtYXRTb3VyY2UpOworICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IG5ldyBX
ZWJJbnNwZWN0b3IuUmF3U291cmNlQ29kZShzY3JpcHQuc2NyaXB0SWQsIHNjcmlwdCwgcmVzb3Vy
Y2UsIHJlcXVlc3QsIHRoaXMpOwogICAgICAgICB0aGlzLl9yYXdTb3VyY2VDb2Rlcy5wdXNoKHJh
d1NvdXJjZUNvZGUpOwogICAgICAgICB0aGlzLl9iaW5kU2NyaXB0VG9SYXdTb3VyY2VDb2RlKHNj
cmlwdCwgcmF3U291cmNlQ29kZSk7CiAgICAgICAgIGlmIChpc0lubGluZVNjcmlwdCkKQEAgLTEz
MSw4ICsxMjksOSBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VTY3JpcHRNYXBwaW5nLnByb3RvdHlw
ZSA9IHsKICAgICBfaGFuZGxlVUlTb3VyY2VDb2RlQ2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9y
LlJhd1NvdXJjZUNvZGV9ICovIGV2ZW50LnRhcmdldDsKKyAgICAgICAgdmFyIHVpU291cmNlQ29k
ZSA9IC8qKiBAdHlwZSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gKi8gZXZlbnQuZGF0YS51
aVNvdXJjZUNvZGU7CiAgICAgICAgIHZhciBvbGRVSVNvdXJjZUNvZGUgPSAvKiogQHR5cGUge1dl
Ykluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIGV2ZW50LmRhdGEub2xkVUlTb3VyY2VDb2RlOwot
ICAgICAgICB0aGlzLl91aVNvdXJjZUNvZGVDaGFuZ2VkKHJhd1NvdXJjZUNvZGUsIG9sZFVJU291
cmNlQ29kZSwgcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKSk7CisgICAgICAgIHRoaXMuX3Vp
U291cmNlQ29kZUNoYW5nZWQocmF3U291cmNlQ29kZSwgb2xkVUlTb3VyY2VDb2RlLCB1aVNvdXJj
ZUNvZGUpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTE3MCwyOCArMTY5LDYgQEAgV2ViSW5zcGVj
dG9yLlJlc291cmNlU2NyaXB0TWFwcGluZy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHNjcmlwdC5z
ZXRTb3VyY2VNYXBwaW5nKHRoaXMpOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGZvcm1hdFNvdXJjZQotICAgICAqLwotICAgIHNldEZvcm1hdFNvdXJjZTogZnVu
Y3Rpb24oZm9ybWF0U291cmNlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdFNvdXJj
ZSA9PT0gZm9ybWF0U291cmNlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMu
X2Zvcm1hdFNvdXJjZSA9IGZvcm1hdFNvdXJjZTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB0aGlzLl9yYXdTb3VyY2VDb2Rlcy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMuX3Jh
d1NvdXJjZUNvZGVzW2ldLnNldEZvcm1hdHRlZCh0aGlzLl9mb3JtYXRTb3VyY2UpOwotICAgIH0s
Ci0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259IHJhd0xv
Y2F0aW9uCi0gICAgICovCi0gICAgZm9yY2VVcGRhdGVTb3VyY2VNYXBwaW5nOiBmdW5jdGlvbihy
YXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIHZhciByYXdTb3VyY2VDb2RlID0gdGhpcy5fcmF3
U291cmNlQ29kZUZvclNjcmlwdElkW3Jhd0xvY2F0aW9uLnNjcmlwdElkXTsKLSAgICAgICAgcmF3
U291cmNlQ29kZS5mb3JjZVVwZGF0ZVNvdXJjZU1hcHBpbmcoKTsKLSAgICB9LAotCiAgICAgcmVz
ZXQ6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5f
cmF3U291cmNlQ29kZXMubGVuZ3RoOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggMjg1YTEwNDc5Mzc4ZjdhOTZmYmU5ODk3YjRjYjVj
MGYyOTc0OWUzMC4uZThjZWZhMzMxZDZjYjI1ZjE3OWNjZGJhMjQyNmExMTA0NTY2ZDJmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKQEAgLTE0Niw3
ICsxNDYsOCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAg
ICBpc0lubGluZVNjcmlwdDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhp
cy5zb3VyY2VVUkwgJiYgdGhpcy5saW5lT2Zmc2V0ICE9PSAwICYmIHRoaXMuY29sdW1uT2Zmc2V0
ICE9PSAwOworICAgICAgICB2YXIgc3RhcnRzQXRaZXJvID0gIXRoaXMubGluZU9mZnNldCAmJiAh
dGhpcy5jb2x1bW5PZmZzZXQ7CisgICAgICAgIHJldHVybiAhIXRoaXMuc291cmNlVVJMICYmICFz
dGFydHNBdFplcm87CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMTU3LDggKzE1OCw3IEBAIFdlYklu
c3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgY29uc29sZS5hc3Nl
cnQocmF3TG9jYXRpb24uc2NyaXB0SWQgPT09IHRoaXMuc2NyaXB0SWQpOwogICAgICAgICB2YXIg
dWlMb2NhdGlvbiA9IHRoaXMuX3NvdXJjZU1hcHBpbmcucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24o
cmF3TG9jYXRpb24pOwotICAgICAgICAvLyBGSVhNRTogdWlMb2NhdGlvbiB3aWxsIG5ldmVyIGJl
IG51bGwgYWZ0ZXIgdGhlIG5leHQgcmVmYWN0b3Jpbmcgc3RlcC4KLSAgICAgICAgcmV0dXJuIHVp
TG9jYXRpb24gPyB1aUxvY2F0aW9uLnVpU291cmNlQ29kZS5vdmVycmlkZUxvY2F0aW9uKHVpTG9j
YXRpb24pIDogbnVsbDsKKyAgICAgICAgcmV0dXJuIHVpTG9jYXRpb24udWlTb3VyY2VDb2RlLm92
ZXJyaWRlTG9jYXRpb24odWlMb2NhdGlvbik7CiAgICAgfSwKIAogICAgIC8qKgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRGb3JtYXR0ZXIuanMg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcwpp
bmRleCBmZjJmZDkwOGI3ZjBkNzE3M2MxOTJkYTU2YTA0MzdiMjg3OGQ5ZWUzLi5mOThiZWQ4YjQy
YmY0YTQ3OTlkNzFkN2ZmZDk4ZGExNTlhMDkxMGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdEZvcm1hdHRlci5qcwpAQCAtNjcsNyArNjcs
NyBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKICAgICAvKioK
ICAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWltZVR5cGUKICAgICAgKiBAcGFyYW0gez9zdHJpbmd9
IGNvbnRlbnQKLSAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZywgV2ViSW5zcGVjdG9yLkZv
cm1hdHRlZFNvdXJjZU1hcHBpbmcpfSBjYWxsYmFjaworICAgICAqIEBwYXJhbSB7ZnVuY3Rpb24o
c3RyaW5nLCBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGluZyl9IGNhbGxiYWNrCiAg
ICAgICovCiAgICAgZm9ybWF0Q29udGVudDogZnVuY3Rpb24obWltZVR5cGUsIGNvbnRlbnQsIGNh
bGxiYWNrKQogICAgIHsKQEAgLTg0LDcgKzg0LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1h
dHRlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBvcmlnaW5hbENvbnRlbnQgPSB0YXNrLmRh
dGEuY29udGVudDsKICAgICAgICAgdmFyIGZvcm1hdHRlZENvbnRlbnQgPSBldmVudC5kYXRhLmNv
bnRlbnQ7CiAgICAgICAgIHZhciBtYXBwaW5nID0gZXZlbnQuZGF0YVsibWFwcGluZyJdOwotICAg
ICAgICB2YXIgc291cmNlTWFwcGluZyA9IG5ldyBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkU291cmNl
TWFwcGluZyhvcmlnaW5hbENvbnRlbnQubGluZUVuZGluZ3MoKSwgZm9ybWF0dGVkQ29udGVudC5s
aW5lRW5kaW5ncygpLCBtYXBwaW5nKTsKKyAgICAgICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBuZXcg
V2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBpbmdJbXBsKG9yaWdpbmFsQ29udGVudC5s
aW5lRW5kaW5ncygpLCBmb3JtYXR0ZWRDb250ZW50LmxpbmVFbmRpbmdzKCksIG1hcHBpbmcpOwog
ICAgICAgICB0YXNrLmNhbGxiYWNrKGZvcm1hdHRlZENvbnRlbnQsIHNvdXJjZU1hcHBpbmcpOwog
ICAgIH0sCiAKQEAgLTExMSw0MSArMTExLDk1IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJNYXBw
aW5nUGF5bG9hZCA9IGZ1bmN0aW9uKCkKIH0KIAogLyoqCisgKiBAaW50ZXJmYWNlCisgKi8KK1dl
Ykluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nID0gZnVuY3Rpb24oKQoreworfQorCitX
ZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNlTWFwcGluZy5wcm90b3R5cGUgPSB7CisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKKyAgICAgKiBAcGFyYW0ge251bWJl
cj19IGNvbHVtbk51bWJlcgorICAgICAqIEByZXR1cm4ge0FycmF5LjxudW1iZXI+fQorICAgICAq
LworICAgIG9yaWdpbmFsVG9Gb3JtYXR0ZWQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcikgeyB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIK
KyAgICAgKiBAcGFyYW0ge251bWJlcj19IGNvbHVtbk51bWJlcgorICAgICAqIEByZXR1cm4ge0Fy
cmF5LjxudW1iZXI+fQorICAgICAqLworICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9u
KGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikgeyB9Cit9CisKKy8qKgorICogQGNvbnN0cnVjdG9y
CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLkZvcm1hdHRlclNvdXJjZU1hcHBpbmd9Cisg
Ki8KK1dlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcgPSBmdW5jdGlv
bigpCit7Cit9CisKK1dlYkluc3BlY3Rvci5JZGVudGl0eUZvcm1hdHRlclNvdXJjZU1hcHBpbmcu
cHJvdG90eXBlID0geworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVy
CisgICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5OdW1iZXIKKyAgICAgKiBAcmV0dXJuIHtB
cnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlv
bihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICByZXR1cm4gW2xpbmVO
dW1iZXIsIGNvbHVtbk51bWJlciB8fCAwXTsgCisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtudW1iZXI9fSBjb2x1bW5O
dW1iZXIKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0KKyAgICAgKi8KKyAgICBmb3Jt
YXR0ZWRUb09yaWdpbmFsOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAg
eworICAgICAgICByZXR1cm4gW2xpbmVOdW1iZXIsIGNvbHVtbk51bWJlciB8fCAwXTsKKyAgICB9
Cit9CisKKy8qKgogICogQGNvbnN0cnVjdG9yCisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9y
LkZvcm1hdHRlclNvdXJjZU1hcHBpbmd9CiAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBvcmln
aW5hbExpbmVFbmRpbmdzCiAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBmb3JtYXR0ZWRMaW5l
RW5kaW5ncwogICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuRm9ybWF0dGVyTWFwcGluZ1BheWxvYWR9
IG1hcHBpbmcKICAqLwotV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFNvdXJjZU1hcHBpbmcgPSBmdW5j
dGlvbihvcmlnaW5hbExpbmVFbmRpbmdzLCBmb3JtYXR0ZWRMaW5lRW5kaW5ncywgbWFwcGluZykK
K1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nSW1wbCA9IGZ1bmN0aW9uKG9yaWdp
bmFsTGluZUVuZGluZ3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCBtYXBwaW5nKQogewogICAgIHRo
aXMuX29yaWdpbmFsTGluZUVuZGluZ3MgPSBvcmlnaW5hbExpbmVFbmRpbmdzOwogICAgIHRoaXMu
X2Zvcm1hdHRlZExpbmVFbmRpbmdzID0gZm9ybWF0dGVkTGluZUVuZGluZ3M7CiAgICAgdGhpcy5f
bWFwcGluZyA9IG1hcHBpbmc7CiB9CiAKLVdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRTb3VyY2VNYXBw
aW5nLnByb3RvdHlwZSA9IHsKK1dlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXBwaW5nSW1w
bC5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1i
ZXIKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uTnVtYmVyCisgICAgICogQHBhcmFtIHtu
dW1iZXI9fSBjb2x1bW5OdW1iZXIKICAgICAgKiBAcmV0dXJuIHtBcnJheS48bnVtYmVyPn0KICAg
ICAgKi8KICAgICBvcmlnaW5hbFRvRm9ybWF0dGVkOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpCiAgICAgewotICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlvbiA9IFdlYkluc3Bl
Y3Rvci5TY3JpcHRGb3JtYXR0ZXIubG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX29yaWdpbmFsTGlu
ZUVuZGluZ3MsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7Ci0gICAgICAgIHZhciBmb3JtYXR0
ZWRQb3NpdGlvbiA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLm9yaWdpbmFs
LCB0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgICAgIHZh
ciBvcmlnaW5hbFBvc2l0aW9uID0gV2ViSW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5sb2NhdGlv
blRvUG9zaXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyIHx8IDApOworICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252
ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmlnaW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0
ZWQsIG9yaWdpbmFsUG9zaXRpb24gfHwgMCk7CiAgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3Iu
U2NyaXB0Rm9ybWF0dGVyLnBvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5k
aW5ncywgZm9ybWF0dGVkUG9zaXRpb24pOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFy
YW0ge251bWJlcn0gbGluZU51bWJlcgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5OdW1i
ZXIKKyAgICAgKiBAcGFyYW0ge251bWJlcj19IGNvbHVtbk51bWJlcgogICAgICAqIEByZXR1cm4g
e0FycmF5LjxudW1iZXI+fQogICAgICAqLwogICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0
aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0
ZWRQb3NpdGlvbiA9IFdlYkluc3BlY3Rvci5TY3JpcHRGb3JtYXR0ZXIubG9jYXRpb25Ub1Bvc2l0
aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OworICAgICAgICB2YXIgZm9ybWF0dGVkUG9zaXRpb24gPSBXZWJJbnNwZWN0b3IuU2NyaXB0Rm9y
bWF0dGVyLmxvY2F0aW9uVG9Qb3NpdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyIHx8IDApOwogICAgICAgICB2YXIgb3JpZ2luYWxQb3NpdGlv
biA9IHRoaXMuX2NvbnZlcnRQb3NpdGlvbih0aGlzLl9tYXBwaW5nLmZvcm1hdHRlZCwgdGhpcy5f
bWFwcGluZy5vcmlnaW5hbCwgZm9ybWF0dGVkUG9zaXRpb24pOwotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLlNjcmlwdEZvcm1hdHRlci5wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3JpZ2lu
YWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuU2NyaXB0Rm9ybWF0dGVyLnBvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5hbExp
bmVFbmRpbmdzLCBvcmlnaW5hbFBvc2l0aW9uIHx8IDApOwogICAgIH0sCiAKICAgICAvKioKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0TWFwcGlu
Zy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0TWFwcGluZy5q
cwppbmRleCA4MmY1ZjA2OWE3MDRlNmVkM2Y2ZmEwZWM5NTI0YWUzZGJhYTg3ZmNkLi4wYjI4Yzhl
MWFiMzkxODQwNzUwN2FiNTExYTAyNmUyOGI1ZGRiM2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdE1hcHBpbmcuanMKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRNYXBwaW5nLmpzCkBAIC00MSw2ICs0MSwx
NiBAQCBXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbiA9IGZ1bmN0aW9uKHVpU291cmNlQ29kZSwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHRoaXMuY29sdW1uTnVtYmVyID0gY29sdW1uTnVt
YmVyOwogfQogCitXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbi5wcm90b3R5cGUgPSB7CisgICAgLyoq
CisgICAgICogQHJldHVybiB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0KKyAgICAgKi8KKyAgICB1
aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMudWlTb3VyY2VDb2RlLnVpTG9jYXRpb25Ub1Jhd0xvY2F0aW9uKHRoaXMubGluZU51bWJl
ciwgdGhpcy5jb2x1bW5OdW1iZXIpOworICAgIH0KK30KKwogLyoqCiAgKiBAaW50ZXJmYWNlCiAg
Ki8KQEAgLTEzMiw3ICsxNDIsNiBAQCBXZWJJbnNwZWN0b3IuTWFpblNjcmlwdE1hcHBpbmcgPSBm
dW5jdGlvbigpCiAgICAgICAgIHRoaXMuX21hcHBpbmdzW2ldLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLlNjcmlwdE1hcHBpbmcuRXZlbnRzLlVJU291cmNlQ29kZUxpc3RDaGFuZ2VkLCB0
aGlzLl9oYW5kbGVVSVNvdXJjZUNvZGVMaXN0Q2hhbmdlZCwgdGhpcyk7CiAKICAgICB0aGlzLl9t
YXBwaW5nRm9yU2NyaXB0SWQgPSB7fTsKLSAgICB0aGlzLl9tYXBwaW5nRm9yVUlTb3VyY2VDb2Rl
ID0gbmV3IE1hcCgpOwogfQogCiBXZWJJbnNwZWN0b3IuTWFpblNjcmlwdE1hcHBpbmcuRXZlbnRz
ID0gewpAQCAtMTQxLDI2ICsxNTAsNiBAQCBXZWJJbnNwZWN0b3IuTWFpblNjcmlwdE1hcHBpbmcu
RXZlbnRzID0gewogCiBXZWJJbnNwZWN0b3IuTWFpblNjcmlwdE1hcHBpbmcucHJvdG90eXBlID0g
ewogICAgIC8qKgotICAgICAqIEBwYXJhbSB7RGVidWdnZXJBZ2VudC5Mb2NhdGlvbn0gcmF3TG9j
YXRpb24KLSAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVUlMb2NhdGlvbn0KLSAgICAgKi8K
LSAgICByYXdMb2NhdGlvblRvVUlMb2NhdGlvbjogZnVuY3Rpb24ocmF3TG9jYXRpb24pCi0gICAg
ewotICAgICAgICByZXR1cm4gdGhpcy5fbWFwcGluZ0ZvclNjcmlwdElkW3Jhd0xvY2F0aW9uLnNj
cmlwdElkXS5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihyYXdMb2NhdGlvbik7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZX0gdWlTb3Vy
Y2VDb2RlCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gY29sdW1uTnVtYmVyCi0gICAgICogQHJldHVybiB7RGVidWdnZXJBZ2VudC5Mb2Nh
dGlvbn0KLSAgICAgKi8KLSAgICB1aUxvY2F0aW9uVG9SYXdMb2NhdGlvbjogZnVuY3Rpb24odWlT
b3VyY2VDb2RlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fbWFwcGluZ0ZvclVJU291cmNlQ29kZS5nZXQodWlTb3VyY2VDb2RlKS51aUxvY2F0
aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7
Ci0gICAgfSwKLQotICAgIC8qKgogICAgICAqIEByZXR1cm4ge0FycmF5LjxXZWJJbnNwZWN0b3Iu
VUlTb3VyY2VDb2RlPn0KICAgICAgKi8KICAgICB1aVNvdXJjZUNvZGVMaXN0OiBmdW5jdGlvbigp
CkBAIC0yMDgsNDAgKzE5NywxNCBAQCBXZWJJbnNwZWN0b3IuTWFpblNjcmlwdE1hcHBpbmcucHJv
dG90eXBlID0gewogICAgICAqLwogICAgIF9oYW5kbGVVSVNvdXJjZUNvZGVMaXN0Q2hhbmdlZDog
ZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgc2NyaXB0TWFwcGluZyA9IC8qKiBA
dHlwZSB7V2ViSW5zcGVjdG9yLlNjcmlwdE1hcHBpbmd9ICovIGV2ZW50LnRhcmdldDsKLSAgICAg
ICAgdmFyIHJlbW92ZWRJdGVtcyA9IC8qKiBAdHlwZSB7QXJyYXkuPFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGU+fSAqLyBldmVudC5kYXRhWyJyZW1vdmVkSXRlbXMiXTsKLSAgICAgICAgdmFyIGFk
ZGVkSXRlbXMgPSAvKiogQHR5cGUge0FycmF5LjxXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlPn0g
Ki8gZXZlbnQuZGF0YVsiYWRkZWRJdGVtcyJdOwotCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmVtb3ZlZEl0ZW1zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fbWFwcGluZ0Zv
clVJU291cmNlQ29kZS5yZW1vdmUocmVtb3ZlZEl0ZW1zW2ldKTsKLSAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBhZGRlZEl0ZW1zLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fbWFw
cGluZ0ZvclVJU291cmNlQ29kZS5wdXQoYWRkZWRJdGVtc1tpXSwgc2NyaXB0TWFwcGluZyk7CiAg
ICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5NYWluU2Ny
aXB0TWFwcGluZy5FdmVudHMuVUlTb3VyY2VDb2RlTGlzdENoYW5nZWQsIGV2ZW50LmRhdGEpOwog
ICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcm1hdFNvdXJjZQot
ICAgICAqLwotICAgIHNldEZvcm1hdFNvdXJjZTogZnVuY3Rpb24oZm9ybWF0U291cmNlKQotICAg
IHsKLSAgICAgICAgdGhpcy5fcmVzb3VyY2VNYXBwaW5nLnNldEZvcm1hdFNvdXJjZShmb3JtYXRT
b3VyY2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0RlYnVnZ2VyQWdlbnQu
TG9jYXRpb259IHJhd0xvY2F0aW9uCi0gICAgICovCi0gICAgZm9yY2VVcGRhdGVTb3VyY2VNYXBw
aW5nOiBmdW5jdGlvbihyYXdMb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9tYXBw
aW5nRm9yU2NyaXB0SWRbcmF3TG9jYXRpb24uc2NyaXB0SWRdID09PSB0aGlzLl9yZXNvdXJjZU1h
cHBpbmcpCi0gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZU1hcHBpbmcuZm9yY2VVcGRhdGVTb3Vy
Y2VNYXBwaW5nKHJhd0xvY2F0aW9uKTsKLSAgICB9LAotCiAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWFwcGluZ3MubGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICB0aGlzLl9tYXBwaW5nc1tpXS5yZXNldCgpOwogICAgICAgICB0
aGlzLl9tYXBwaW5nRm9yU2NyaXB0SWQgPSB7fTsKLSAgICAgICAgdGhpcy5fbWFwcGluZ0ZvclVJ
U291cmNlQ29kZSA9IG5ldyBNYXAoKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggYTIyZTQ3YWVjZGM3
NWEzNWUxYzNmMDBlNzZjNzRiN2NjZWZhOTM2MC4uYWJhMjUxNTYzNDU5MmE2N2MxM2ViMzIxNGM0
ZjEyZThiZGQwMzJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TY3JpcHRzUGFuZWwuanMKQEAgLTE2NCw3ICsxNjQsNyBAQCBXZWJJbnNwZWN0b3IuU2Ny
aXB0c1BhbmVsID0gZnVuY3Rpb24ocHJlc2VudGF0aW9uTW9kZWwpCiAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2Rl
bC5FdmVudHMuR2xvYmFsT2JqZWN0Q2xlYXJlZCwgdGhpcy5fcmVzZXQuYmluZCh0aGlzLCBmYWxz
ZSkpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRzQWN0aXZlU3RhdGVDaGFu
Z2VkLCB0aGlzLl9icmVha3BvaW50c0FjdGl2ZVN0YXRlQ2hhbmdlZCwgdGhpcyk7CiAKLSAgICB0
aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVBZGRlZCwgdGhpcy5faGFu
ZGxlVUlTb3VyY2VDb2RlQWRkZWQsIHRoaXMpCisgICAgdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJQcmVzZW50YXRpb25Nb2RlbC5F
dmVudHMuVUlTb3VyY2VDb2RlQWRkZWQsIHRoaXMuX2hhbmRsZVVJU291cmNlQ29kZUFkZGVkLCB0
aGlzKTsKICAgICB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLkV2ZW50cy5VSVNvdXJjZUNvZGVSZXBs
YWNlZCwgdGhpcy5fdWlTb3VyY2VDb2RlUmVwbGFjZWQsIHRoaXMpOwogICAgIHRoaXMuX3ByZXNl
bnRhdGlvbk1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyUHJlc2Vu
dGF0aW9uTW9kZWwuRXZlbnRzLlVJU291cmNlQ29kZVJlbW92ZWQsIHRoaXMuX3VpU291cmNlQ29k
ZVJlbW92ZWQsIHRoaXMpOwogCkBAIC0yMTksNiArMjE5LDggQEAgV2ViSW5zcGVjdG9yLlNjcmlw
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgX2hhbmRsZVVJU291cmNlQ29kZUFkZGVkOiBmdW5j
dGlvbihldmVudCkKICAgICB7CiAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSAvKiogQHR5cGUg
e1dlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGV9ICovIGV2ZW50LmRhdGE7CisgICAgICAgIGlmICh0
aGlzLl90b2dnbGVGb3JtYXRTb3VyY2VCdXR0b24udG9nZ2xlZCkKKyAgICAgICAgICAgIHVpU291
cmNlQ29kZS5zZXRGb3JtYXR0ZWQodHJ1ZSk7CiAgICAgICAgIHRoaXMuX3VpU291cmNlQ29kZUFk
ZGVkKHVpU291cmNlQ29kZSk7CiAgICAgfSwKIApAQCAtMzk2LDcgKzM5OCw3IEBAIFdlYkluc3Bl
Y3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBlID0gewogICAgIHNob3dGdW5jdGlvbkRlZmluaXRp
b246IGZ1bmN0aW9uKGZ1bmN0aW9uTG9jYXRpb24pCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0
b3Iuc2hvd1BhbmVsRm9yQW5jaG9yTmF2aWdhdGlvbih0aGlzKTsKLSAgICAgICAgdmFyIHVpTG9j
YXRpb24gPSB0aGlzLl9wcmVzZW50YXRpb25Nb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihm
dW5jdGlvbkxvY2F0aW9uKTsKKyAgICAgICAgdmFyIHVpTG9jYXRpb24gPSBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5yYXdMb2NhdGlvblRvVUlMb2NhdGlvbihmdW5jdGlvbkxvY2F0aW9uKTsK
ICAgICAgICAgdGhpcy5fc2hvd1NvdXJjZUxpbmUodWlMb2NhdGlvbi51aVNvdXJjZUNvZGUsIHVp
TG9jYXRpb24ubGluZU51bWJlcik7CiAgICAgfSwKIApAQCAtNDIzLDE1ICs0MjUsMTMgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX3Nob3dG
aWxlOiBmdW5jdGlvbih1aVNvdXJjZUNvZGUpCiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX25h
dmlnYXRvci5pc1NjcmlwdFNvdXJjZUFkZGVkKHVpU291cmNlQ29kZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKLQogICAgICAgICB2YXIgc291cmNlRnJhbWUgPSB0aGlzLl9nZXRPckNyZWF0
ZVNvdXJjZUZyYW1lKHVpU291cmNlQ29kZSk7CiAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50VUlT
b3VyY2VDb2RlID09PSB1aVNvdXJjZUNvZGUpCiAgICAgICAgICAgICByZXR1cm4gc291cmNlRnJh
bWU7CiAgICAgICAgIHRoaXMuX2N1cnJlbnRVSVNvdXJjZUNvZGUgPSB1aVNvdXJjZUNvZGU7CiAK
LSAgICAgICAgdGhpcy5fbmF2aWdhdG9yLnJldmVhbFVJU291cmNlQ29kZSh1aVNvdXJjZUNvZGUp
OworICAgICAgICBpZiAodGhpcy5fbmF2aWdhdG9yLmlzU2NyaXB0U291cmNlQWRkZWQodWlTb3Vy
Y2VDb2RlKSkKKyAgICAgICAgICAgIHRoaXMuX25hdmlnYXRvci5yZXZlYWxVSVNvdXJjZUNvZGUo
dWlTb3VyY2VDb2RlKTsKICAgICAgICAgdGhpcy5fZWRpdG9yQ29udGFpbmVyLnNob3dGaWxlKHVp
U291cmNlQ29kZSk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVNjcmlwdFZpZXdTdGF0dXNCYXJJdGVt
cygpOwogCkBAIC01MTcsNyArNTE3LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgX3JldmVhbEV4ZWN1dGlvbkxpbmU6IGZ1bmN0aW9uKHVpTG9jYXRpb24p
CiAgICAgewogICAgICAgICAvLyBTb21lIHNjcmlwdHMgKGFub255bW91cyBhbmQgc25pcHBldHMg
ZXZhbHVhdGlvbnMpIGFyZSBub3QgYWRkZWQgdG8gZmlsZXMgc2VsZWN0IGJ5IGRlZmF1bHQuCi0g
ICAgICAgIHRoaXMuX2FkZFVJU291cmNlQ29kZSh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSk7Cisg
ICAgICAgIHRoaXMuX2VkaXRvckNvbnRhaW5lci51aVNvdXJjZUNvZGVBZGRlZCh1aUxvY2F0aW9u
LnVpU291cmNlQ29kZSk7CiAgICAgICAgIHZhciBzb3VyY2VGcmFtZSA9IHRoaXMuX3Nob3dGaWxl
KHVpTG9jYXRpb24udWlTb3VyY2VDb2RlKTsKICAgICAgICAgc291cmNlRnJhbWUucmV2ZWFsTGlu
ZSh1aUxvY2F0aW9uLmxpbmVOdW1iZXIpOwogICAgIH0sCkBAIC05MTMsNyArOTEzLDkgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgX3RvZ2dsZUZvcm1hdFNv
dXJjZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5fdG9nZ2xlRm9ybWF0U291cmNl
QnV0dG9uLnRvZ2dsZWQgPSAhdGhpcy5fdG9nZ2xlRm9ybWF0U291cmNlQnV0dG9uLnRvZ2dsZWQ7
Ci0gICAgICAgIHRoaXMuX3ByZXNlbnRhdGlvbk1vZGVsLnNldEZvcm1hdFNvdXJjZSh0aGlzLl90
b2dnbGVGb3JtYXRTb3VyY2VCdXR0b24udG9nZ2xlZCk7CisgICAgICAgIHZhciB1aVNvdXJjZUNv
ZGVzID0gdGhpcy5fcHJlc2VudGF0aW9uTW9kZWwudWlTb3VyY2VDb2RlcygpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHVpU291cmNlQ29kZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAg
ICB1aVNvdXJjZUNvZGVzW2ldLnNldEZvcm1hdHRlZCh0aGlzLl90b2dnbGVGb3JtYXRTb3VyY2VC
dXR0b24udG9nZ2xlZCk7CiAgICAgfSwKIAogICAgIGFkZFRvV2F0Y2g6IGZ1bmN0aW9uKGV4cHJl
c3Npb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nj
cmlwdHNTZWFyY2hTY29wZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1NlYXJjaFNjb3BlLmpzCmluZGV4IGEwOWQ3NzU4NTkyYmIyYWFiMjJhOGJhNTQxZjI1
YzY5NDRmNTMzMzguLjIyNzU5OWM0NzBiMTM1ZTIyYjc3Yzg3NGExMjYyZTNlNmM3YmRlOTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1NlYXJj
aFNjb3BlLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0
c1NlYXJjaFNjb3BlLmpzCkBAIC0xNDUsNyArMTQ1LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNT
ZWFyY2hSZXN1bHRzUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgY3JlYXRlQW5jaG9yOiBmdW5jdGlv
bihmaWxlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewogICAgICAgICB2YXIgdWlT
b3VyY2VDb2RlID0gLyoqIEB0eXBlIHtXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlfSAqLyBmaWxl
OwotICAgICAgICB2YXIgcmF3TG9jYXRpb24gPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJQcmVzZW50
YXRpb25Nb2RlbC51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcik7CisgICAgICAgIHZhciByYXdMb2NhdGlvbiA9IHVpU291cmNlQ29k
ZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbihsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAg
ICAgICB2YXIgYW5jaG9yID0gdGhpcy5fbGlua2lmaWVyLmxpbmtpZnlSYXdMb2NhdGlvbihyYXdM
b2NhdGlvbik7CiAgICAgICAgIGFuY2hvci5yZW1vdmVDaGlsZHJlbigpOwogICAgICAgICByZXR1
cm4gYW5jaG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TbmlwcGV0c01vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
bmlwcGV0c01vZGVsLmpzCmluZGV4IDQwNTFkNTM0N2JhMjE1MDRmMGMwMDI5NGY3N2EzODI5NjU2
NzNiYjMuLjE2MTA1NTBhZTRmOThkNTgzZjg2OTM0NGZiZTZhZDA2NTYwY2I5NzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU25pcHBldHNNb2RlbC5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NuaXBwZXRzTW9kZWwuanMK
QEAgLTM5Myw3ICszOTMsNyBAQCBXZWJJbnNwZWN0b3IuU25pcHBldHNTY3JpcHRNYXBwaW5nLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciB1aVNvdXJjZUNvZGVJZCA9ICIiOyAvLyBG
SVhNRTogdG8gYmUgaW1wbGVtZW50ZWQuCiAgICAgICAgIHZhciB1aVNvdXJjZUNvZGVVUkwgPSAi
IjsgLy8gRklYTUU6IHRvIGJlIGltcGxlbWVudGVkLgotICAgICAgICB2YXIgdWlTb3VyY2VDb2Rl
ID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlKHVpU291cmNlQ29kZUlkLCB1aVNv
dXJjZUNvZGVVUkwsIG5ldyBXZWJJbnNwZWN0b3IuU25pcHBldENvbnRlbnRQcm92aWRlcihzbmlw
cGV0KSk7CisgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRTb3VyY2UodWlTb3VyY2VDb2RlSWQsIHVpU291cmNlQ29kZVVSTCwgbmV3IFdlYkluc3Bl
Y3Rvci5TbmlwcGV0Q29udGVudFByb3ZpZGVyKHNuaXBwZXQpLCB0aGlzKTsKICAgICAgICAgdWlT
b3VyY2VDb2RlLmlzU25pcHBldCA9IHRydWU7CiAgICAgICAgIHVpU291cmNlQ29kZS5pc0VkaXRh
YmxlID0gdHJ1ZTsKICAgICAgICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU25pcHBldC5wdXQoc25p
cHBldCwgdWlTb3VyY2VDb2RlKTsKQEAgLTQxNiw3ICs0MTYsNyBAQCBXZWJJbnNwZWN0b3IuU25p
cHBldHNTY3JpcHRNYXBwaW5nLnByb3RvdHlwZSA9IHsKICAgICAgKi8KICAgICBfY3JlYXRlVUlT
b3VyY2VDb2RlRm9yU2NyaXB0OiBmdW5jdGlvbihzY3JpcHQpCiAgICAgewotICAgICAgICB2YXIg
dWlTb3VyY2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0U291cmNlKHNjcmlwdC5z
b3VyY2VVUkwsIHNjcmlwdC5zb3VyY2VVUkwsIHNjcmlwdCk7CisgICAgICAgIHZhciB1aVNvdXJj
ZUNvZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRTb3VyY2Uoc2NyaXB0LnNvdXJjZVVS
TCwgc2NyaXB0LnNvdXJjZVVSTCwgc2NyaXB0LCB0aGlzKTsKICAgICAgICAgdWlTb3VyY2VDb2Rl
LmlzU25pcHBldEV2YWx1YXRpb24gPSB0cnVlOwogICAgICAgICB2YXIgb2xkVUlTb3VyY2VDb2Rl
ID0gdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXTsKICAgICAg
ICAgdGhpcy5fdWlTb3VyY2VDb2RlRm9yU2NyaXB0SWRbc2NyaXB0LnNjcmlwdElkXSA9IHVpU291
cmNlQ29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
VUlTb3VyY2VDb2RlLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVNv
dXJjZUNvZGUuanMKaW5kZXggNzFhZjk1OTg0NTBkZDViY2ZlMWJiZGEwNTRjMzYwZTlhMjI2ODk3
Ny4uNGQxYzIxM2M3MmU4ZTcwZjIzOGZmNjVhMzQ4MjEzZTgzOTVlZDZhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVNvdXJjZUNvZGUuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9VSVNvdXJjZUNvZGUuanMKQEAgLTM1
LDEzICszNSwxNSBAQAogICogQHBhcmFtIHtzdHJpbmd9IGlkCiAgKiBAcGFyYW0ge3N0cmluZ30g
dXJsCiAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5Db250ZW50UHJvdmlkZXJ9IGNvbnRlbnRQcm92
aWRlcgorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU291cmNlTWFwcGluZ30gc291cmNlTWFwcGlu
ZwogICovCi1XZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlID0gZnVuY3Rpb24oaWQsIHVybCwgY29u
dGVudFByb3ZpZGVyKQorV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZSA9IGZ1bmN0aW9uKGlkLCB1
cmwsIGNvbnRlbnRQcm92aWRlciwgc291cmNlTWFwcGluZykKIHsKICAgICB0aGlzLl9pZCA9IGlk
OwogICAgIHRoaXMuX3VybCA9IHVybDsKICAgICB0aGlzLl9wYXJzZWRVUkwgPSBuZXcgV2ViSW5z
cGVjdG9yLlBhcnNlZFVSTCh1cmwpOwogICAgIHRoaXMuX2NvbnRlbnRQcm92aWRlciA9IGNvbnRl
bnRQcm92aWRlcjsKKyAgICB0aGlzLl9zb3VyY2VNYXBwaW5nID0gc291cmNlTWFwcGluZzsKICAg
ICB0aGlzLmlzQ29udGVudFNjcmlwdCA9IGZhbHNlOwogICAgIHRoaXMuaXNFZGl0YWJsZSA9IGZh
bHNlOwogICAgIC8qKgpAQCAtOTEsMTAgKzkzLDkgQEAgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29k
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9jb250ZW50LCBmYWxz
ZSwgdGhpcy5fbWltZVR5cGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KICAg
ICAgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRDYWxsYmFja3MucHVzaChjYWxsYmFjayk7CiAgICAg
ICAgIGlmICh0aGlzLl9yZXF1ZXN0Q29udGVudENhbGxiYWNrcy5sZW5ndGggPT09IDEpCi0gICAg
ICAgICAgICB0aGlzLl9jb250ZW50UHJvdmlkZXIucmVxdWVzdENvbnRlbnQodGhpcy5fZGlkUmVx
dWVzdENvbnRlbnQuYmluZCh0aGlzKSk7CisgICAgICAgICAgICB0aGlzLl9jb250ZW50UHJvdmlk
ZXIucmVxdWVzdENvbnRlbnQodGhpcy5maXJlQ29udGVudEF2YWlsYWJsZS5iaW5kKHRoaXMpKTsK
ICAgICB9LAogCiAgICAgLyoqCkBAIC0xMDksNiArMTEwLDIyIEBAIFdlYkluc3BlY3Rvci5VSVNv
dXJjZUNvZGUucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJu
IHtzdHJpbmd9CisgICAgICovCisgICAgbWltZVR5cGU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9taW1lVHlwZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJl
dHVybiB7P3N0cmluZ30KKyAgICAgKi8KKyAgICBjb250ZW50OiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudDsKKyAgICB9LAorCisgICAgLyoqCiAgICAgICog
QHBhcmFtIHtzdHJpbmd9IHF1ZXJ5CiAgICAgICogQHBhcmFtIHtib29sZWFufSBjYXNlU2Vuc2l0
aXZlCiAgICAgICogQHBhcmFtIHtib29sZWFufSBpc1JlZ2V4CkBAIC0xMjQsMTUgKzE0MSwzNCBA
QCBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICAgKiBAcGFyYW0g
e2Jvb2xlYW59IGNvbnRlbnRFbmNvZGVkCiAgICAgICogQHBhcmFtIHtzdHJpbmd9IG1pbWVUeXBl
CiAgICAgICovCi0gICAgX2RpZFJlcXVlc3RDb250ZW50OiBmdW5jdGlvbihjb250ZW50LCBjb250
ZW50RW5jb2RlZCwgbWltZVR5cGUpCisgICAgZmlyZUNvbnRlbnRBdmFpbGFibGU6IGZ1bmN0aW9u
KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBtaW1lVHlwZSkKICAgICB7CiAgICAgICAgIHRoaXMu
X2NvbnRlbnRMb2FkZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl9taW1lVHlwZSA9IG1pbWVUeXBl
OwogICAgICAgICB0aGlzLl9jb250ZW50ID0gY29udGVudDsKIAotICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRoaXMuX3JlcXVlc3RDb250ZW50Q2FsbGJhY2tzLmxlbmd0aDsgKytpKQotICAg
ICAgICAgICAgdGhpcy5fcmVxdWVzdENvbnRlbnRDYWxsYmFja3NbaV0oY29udGVudCwgY29udGVu
dEVuY29kZWQsIG1pbWVUeXBlKTsKKyAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX3JlcXVl
c3RDb250ZW50Q2FsbGJhY2tzLnNsaWNlKCk7CiAgICAgICAgIHRoaXMuX3JlcXVlc3RDb250ZW50
Q2FsbGJhY2tzID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxl
bmd0aDsgKytpKQorICAgICAgICAgICAgY2FsbGJhY2tzW2ldKGNvbnRlbnQsIGNvbnRlbnRFbmNv
ZGVkLCBtaW1lVHlwZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59CisgICAgICovCisgICAgY29udGVudExvYWRlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMb2FkZWQ7CisgICAgfSwKKworICAgIC8qKgorICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVt
bk51bWJlcgorICAgICAqIEByZXR1cm4ge0RlYnVnZ2VyQWdlbnQuTG9jYXRpb259CisgICAgICov
CisgICAgdWlMb2NhdGlvblRvUmF3TG9jYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlcikKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2VNYXBwaW5nLnVpTG9j
YXRpb25Ub1Jhd0xvY2F0aW9uKHRoaXMsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAg
fSwKIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFiMjhiZTRjYzk4MDcxMjgxMTA2OGUwZjIwNzQ3OTQ4OWQy
MzhiZmUuLjRkMTQ5MjAyNWFhZjFlYWYwZTc5OWEwODY0MWFlZWExYzNjNzAyYWMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMSBAQAorMjAxMi0wNS0xMCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwYXNzIHNvdXJjZSBtYXBwaW5nIGlu
dG8gVUlTb3VyY2VDb2RlJ3MgY29uc3RydWN0b3I7IG1vdmUgZm9ybWF0dGluZyBvdXRzaWRlIG1h
cHBpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
NjA5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
aW5zcGVjdG9yL2RlYnVnZ2VyL2JyZWFrcG9pbnQtbWFuYWdlci5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9kZWJ1Z2dlci9saW5raWZpZXIuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVi
dWdnZXIvcGF1c2UtaW4taW5saW5lLXNjcmlwdC5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9k
ZWJ1Z2dlci9yYXctc291cmNlLWNvZGUtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rv
ci9kZWJ1Z2dlci9yYXctc291cmNlLWNvZGUuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVi
dWdnZXIvcmVzb3VyY2VzL3Rlc3QtbmF2aWdhdGlvbi5odG1sOiBSZW1vdmVkLgorICAgICAgICAq
IGluc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LWZvcm1hdHRlci1icmVh
a3BvaW50cy5odG1sOgorICAgICAgICAqIGluc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0
dGVyLWNvbnNvbGUuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZGVidWdnZXIvc2VsZWN0ZWQt
Y2FsbC1mcmFtZS1hZnRlci1mb3JtYXR0aW5nLXNvdXJjZS5odG1sOgorCiAyMDEyLTA1LTEwICBL
cmlzdMOzZiBLb3N6dHnDsyAgPGtrcmlzdG9mQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBb
UXRdIG5ldyB0ZXN0IGh0dHAvdGVzdHMvY29va2llcy9zaW5nbGUtcXVvdGVkLXZhbHVlLmh0bWwg
aXMgZmFpbGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrcG9pbnQtbWFuYWdlci5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL2Jy
ZWFrcG9pbnQtbWFuYWdlci5odG1sCmluZGV4IDA0YTMyZDg5MmJhYjYwM2VhYjJkN2YxMjk1YzJj
YzQzYjc4Njc4ZDkuLjcyNWY5NjQ3MmM2YjkzMWFjYjg4ZjJmMjk5ZGY5NzM4MzgwM2ExZjEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9icmVha3BvaW50LW1hbmFn
ZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvYnJlYWtwb2ludC1t
YW5hZ2VyLmh0bWwKQEAgLTksNyArOSw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHZhciBkZWZh
dWx0TWFwcGluZyA9IHsKICAgICAgICAgcmF3TG9jYXRpb25Ub1VJTG9jYXRpb246IGZ1bmN0aW9u
KHJhd0xvY2F0aW9uKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgdWlTb3VyY2VDb2RlID0g
bmV3IFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUocmF3TG9jYXRpb24uc2NyaXB0SWQsIHJhd0xv
Y2F0aW9uLnNjcmlwdElkLCBudWxsKTsKKyAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSBu
ZXcgV2ViSW5zcGVjdG9yLlVJU291cmNlQ29kZShyYXdMb2NhdGlvbi5zY3JpcHRJZCwgcmF3TG9j
YXRpb24uc2NyaXB0SWQsIG51bGwsIHRoaXMpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJJ
bnNwZWN0b3IuVUlMb2NhdGlvbih1aVNvdXJjZUNvZGUsIHJhd0xvY2F0aW9uLmxpbmVOdW1iZXIs
IDApOwogICAgICAgICB9LAogCkBAIC0yMiw3ICsyMiw3IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAg
IHZhciBzaGlmdGluZ01hcHBpbmcgPSB7CiAgICAgICAgIHJhd0xvY2F0aW9uVG9VSUxvY2F0aW9u
OiBmdW5jdGlvbihyYXdMb2NhdGlvbikKICAgICAgICAgewotICAgICAgICAgICAgdmFyIHVpU291
cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuVUlTb3VyY2VDb2RlKHJhd0xvY2F0aW9uLnNjcmlw
dElkLCByYXdMb2NhdGlvbi5zY3JpcHRJZCwgbnVsbCk7CisgICAgICAgICAgICB2YXIgdWlTb3Vy
Y2VDb2RlID0gbmV3IFdlYkluc3BlY3Rvci5VSVNvdXJjZUNvZGUocmF3TG9jYXRpb24uc2NyaXB0
SWQsIHJhd0xvY2F0aW9uLnNjcmlwdElkLCBudWxsLCB0aGlzKTsKICAgICAgICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLlVJTG9jYXRpb24odWlTb3VyY2VDb2RlLCByYXdMb2NhdGlvbi5s
aW5lTnVtYmVyICsgMTAsIDApOwogICAgICAgICB9LAogCkBAIC0xMzYsNyArMTM2LDcgQEAgZnVu
Y3Rpb24gdGVzdCgpCiAgICAgewogICAgICAgICBicmVha3BvaW50TWFuYWdlci5fZGVidWdnZXJN
b2RlbC5fYWRkU2NyaXB0KGlkLCB1cmwpOwogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3Vs
dCgiICBBZGRpbmcgVUlTb3VyY2VDb2RlOiAiICsgaWQgKyAiICh1cmw9IiArICh1cmwgfHwgaWQp
ICsgIikiKTsKLSAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdFNvdXJjZShpZCwgdXJsIHx8IGlkLCBudWxsKTsKKyAgICAgICAgdmFyIHVpU291cmNl
Q29kZSA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFNvdXJjZShpZCwgdXJsIHx8IGlkLCBu
dWxsLCBkZWZhdWx0TWFwcGluZyk7CiAgICAgICAgIGJyZWFrcG9pbnRNYW5hZ2VyLnJlc3RvcmVC
cmVha3BvaW50cyh1aVNvdXJjZUNvZGUpOwogICAgICAgICByZXR1cm4gdWlTb3VyY2VDb2RlOwog
ICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9saW5raWZp
ZXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9saW5raWZpZXIuaHRtbApp
bmRleCBlYjcxZGUxOWZhYjMwMzhjZmFiNTFhMTM4NDc2MzhmNGE2NGY4YmIxLi44NzU2Y2ZhMGNi
YTNiMjA3NmM0YmJkYzA2OTBmMjk5ZjlmZjhlMzRhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZGVidWdnZXIvbGlua2lmaWVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2RlYnVnZ2VyL2xpbmtpZmllci5odG1sCkBAIC0xNiwyOSArMTYsMzIgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgdmFyIGxpbmtpZmllcjsKICAgICB2YXIgbGluazsKICAgICB2YXIgc2NyaXB0
OworICAgIHZhciB1aVNvdXJjZUNvZGU7CiAKICAgICBmdW5jdGlvbiB3YWl0Rm9yU2NyaXB0cygp
CiAgICAgewotICAgICAgICB2YXIgY29udGludWVkID0gZmFsc2U7Ci0gICAgICAgIGZ1bmN0aW9u
IHNjcmlwdEFkZGVkKGV2ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc2NyaXB0KQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc291
cmNlVVJMID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCAmJiBldmVudC5kYXRhLmxp
bmVPZmZzZXQgPT09IDQpIHsKLSAgICAgICAgICAgICAgICBzY3JpcHQgPSBldmVudC5kYXRhOwot
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZGVidWdnZXJUZXN0LCAwKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIEluc3BlY3RvclRlc3QucXVlcnlTY3JpcHRzKGZ1bmN0
aW9uKHNjcmlwdCkgeyBzY3JpcHRBZGRlZCh7IGRhdGE6IHNjcmlwdCB9KSB9KTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuUGFyc2VkU2NyaXB0U291cmNlLCBzY3JpcHRBZGRlZCk7Cisg
ICAgICAgIEluc3BlY3RvclRlc3Quc2hvd1NjcmlwdFNvdXJjZSgibGlua2lmaWVyLmh0bWwiLCBk
ZWJ1Z2dlclRlc3QpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRlYnVnZ2VyVGVzdCgpCiAgICAg
ewotICAgICAgICBsaW5raWZpZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkxpbmtpZmllcigpOworICAg
ICAgICB2YXIgc2NyaXB0cyA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdHM7Cisg
ICAgICAgIGZvciAodmFyIHNjcmlwdElkIGluIHNjcmlwdHMpIHsKKyAgICAgICAgICAgIHZhciBz
Y3JpcHRDYW5kaWRhdGUgPSBzY3JpcHRzW3NjcmlwdElkXTsKKyAgICAgICAgICAgIGlmIChzY3Jp
cHRDYW5kaWRhdGUuc291cmNlVVJMID09PSBXZWJJbnNwZWN0b3IuaW5zcGVjdGVkUGFnZVVSTCAm
JiBzY3JpcHRDYW5kaWRhdGUubGluZU9mZnNldCA9PT0gNCkgeworICAgICAgICAgICAgICAgIHNj
cmlwdCA9IHNjcmlwdENhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgdWlTb3VyY2VDb2RlcyA9IFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnVpU291cmNlQ29kZXMoKTsKKyAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB1aVNvdXJjZUNvZGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICBpZiAodWlTb3VyY2VDb2Rlc1tpXS51cmwgPT09IFdlYkluc3BlY3Rvci5pbnNwZWN0ZWRQYWdl
VVJMKSB7CisgICAgICAgICAgICAgICAgdWlTb3VyY2VDb2RlID0gdWlTb3VyY2VDb2Rlc1tpXTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAg
ICAgIGxpbmtpZmllciA9IG5ldyBXZWJJbnNwZWN0b3IuTGlua2lmaWVyKCk7CiAgICAgICAgIHZh
ciBjb3VudDEgPSBsaXZlTG9jYXRpb25zQ291bnQoKTsKICAgICAgICAgbGluayA9IGxpbmtpZmll
ci5saW5raWZ5TG9jYXRpb24oV2ViSW5zcGVjdG9yLmluc3BlY3RlZFBhZ2VVUkwsIDgsIDAsICJk
dW1teS1jbGFzcyIpOwogICAgICAgICB2YXIgY291bnQyID0gbGl2ZUxvY2F0aW9uc0NvdW50KCk7
CkBAIC00NywxNCArNTAsMTQgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgIEluc3BlY3RvclRl
c3QuYWRkUmVzdWx0KCJvcmlnaW5hbCBsb2NhdGlvbjogIiArIGxpbmsudGV4dENvbnRlbnQpOwog
CiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkU25pZmZlcihsaW5raWZpZXIuX2Zvcm1hdHRlciwg
ImZvcm1hdExpdmVBbmNob3IiLCBsaW5rVXBkYXRlZCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlclByZXNlbnRhdGlvbk1vZGVsLnNldEZvcm1hdFNvdXJjZSh0cnVlKTsKKyAgICAgICAg
dWlTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVlKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBs
aW5rVXBkYXRlZCgpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgicHJl
dHR5IHByaW50ZWQgbG9jYXRpb246ICIgKyBsaW5rLnRleHRDb250ZW50KTsKICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRTbmlmZmVyKGxpbmtpZmllci5fZm9ybWF0dGVyLCAiZm9ybWF0TGl2ZUFu
Y2hvciIsIGxpbmtSZXZlcnRlZCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlclByZXNl
bnRhdGlvbk1vZGVsLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7CisgICAgICAgIHVpU291cmNlQ29k
ZS5zZXRGb3JtYXR0ZWQoZmFsc2UpOwogICAgIH0KIAogICAgIGZ1bmN0aW9uIGxpbmtSZXZlcnRl
ZCgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcGF1c2UtaW4t
aW5saW5lLXNjcmlwdC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3BhdXNl
LWluLWlubGluZS1zY3JpcHQuaHRtbAppbmRleCA5NDUxY2NmMGNlMjRiZDkxZTUwYmQ4NDA3OWJk
NTQ3NmMxMTdiMDQzLi5kMTNkYzMyNmRiMjk2NmMwZjY0MTdlNmEzMDUyNmZhYWFjNzU3NWY5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcGF1c2UtaW4taW5saW5l
LXNjcmlwdC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9wYXVzZS1p
bi1pbmxpbmUtc2NyaXB0Lmh0bWwKQEAgLTM1LDcgKzM1LDYgQEAgdmFyIHRlc3QgPSBmdW5jdGlv
bigpCiAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJQYXVzZWQ6ICIgKyAhIVdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmRlYnVnZ2VyUGF1c2VkRGV0YWlscygpKTsKICAgICAgICAg
SW5zcGVjdG9yVGVzdC5yZWxvYWRQYWdlKGRpZFJlbG9hZC5iaW5kKHRoaXMpKTsKICAgICAgICAg
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJQYXVzZWQsIGRpZFBhdXNlQWZ0ZXJSZWxvYWQs
IHRoaXMpOyAKLQogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRpZFJlbG9hZCgpCkBAIC00Nyw3ICs0
NiwyMCBAQCB2YXIgdGVzdCA9IGZ1bmN0aW9uKCkKICAgICBmdW5jdGlvbiBkaWRQYXVzZUFmdGVy
UmVsb2FkKGRldGFpbHMpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
ZGlkUGF1c2VBZnRlclJlbG9hZCIpOwotICAgICAgICBJbnNwZWN0b3JUZXN0LnNob3dTY3JpcHRT
b3VyY2UodGVzdE5hbWUsIGRpZFNob3dTY3JpcHQuYmluZCh0aGlzKSk7CisgICAgICAgIGZvciAo
dmFyIHNjcmlwdElkIGluIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNjcmlwdHMpIHsKKyAg
ICAgICAgICAgIHZhciBzY3JpcHQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRz
W3NjcmlwdElkXTsKKyAgICAgICAgICAgIGlmIChzY3JpcHQuc291cmNlVVJMICYmIHNjcmlwdC5z
b3VyY2VVUkwuaW5kZXhPZih0ZXN0TmFtZSkgIT09IC0xICYmIHNjcmlwdC5saW5lT2Zmc2V0ID09
IDYpIHsKKyAgICAgICAgICAgICAgICB2YXIgbG9jYXRpb24gPSBuZXcgV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuTG9jYXRpb24oc2NyaXB0LCA2LCAwKTsKKyAgICAgICAgICAgICAgICB2YXIg
dWlMb2NhdGlvbiA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJhd0xvY2F0aW9uVG9VSUxv
Y2F0aW9uKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMuc2hvd1VJU291cmNlQ29kZSh1aUxvY2F0aW9uLnVpU291cmNlQ29kZSk7CisgICAgICAg
ICAgICAgICAgdmFyIHNvdXJjZUZyYW1lID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnZp
c2libGVWaWV3OworICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGcmFtZS5sb2FkZWQpCisgICAg
ICAgICAgICAgICAgICAgIGRpZFNob3dTY3JpcHQoc291cmNlRnJhbWUpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRTbmlmZmVyKHNv
dXJjZUZyYW1lLCAib25UZXh0Vmlld2VyQ29udGVudExvYWRlZCIsIGRpZFNob3dTY3JpcHQuYmlu
ZChudWxsLCBzb3VyY2VGcmFtZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGZ1bmN0aW9uIGRpZFNob3dTY3JpcHQoc291
cmNlRnJhbWUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmF3
LXNvdXJjZS1jb2RlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9yYXctc291cmNlLWNvZGUtZXhwZWN0ZWQudHh0CmluZGV4IDllNDkwYWRiMzBjOTBmYWJiYzdj
YmRhZmY4MjQ1ZDkyNmZkOGEwYjkuLmYzZWI4N2M2ZWFkMDE2NWMyODY0NWYwNTdjZDRiNzkyY2Mx
ZjY3ZWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9yYXctc291
cmNlLWNvZGUtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9yYXctc291cmNlLWNvZGUtZXhwZWN0ZWQudHh0CkBAIC0xOSwyMSArMTksMyBAQCBVSVNvdXJj
ZUNvZGUgaXMgY29udGVudCBzY3JpcHQ6IGZhbHNlCiBNaW1lIHR5cGU6IHRleHQvaHRtbAogU2Ny
aXB0IHNvdXJjZTogPHJlc291cmNlIGNvbnRlbnQ+CiAKLVJ1bm5pbmc6IHRlc3RGb3JjZVVwZGF0
ZVNvdXJjZU1hcHBpbmcKLU1pbWUgdHlwZTogdGV4dC9odG1sCi1TY3JpcHQgc291cmNlOiAgIDxz
Y3JpcHQ+PHNjcmlwdCBzb3VyY2UgMT48L3NjcmlwdD4KLU1pbWUgdHlwZTogdGV4dC9odG1sCi1T
Y3JpcHQgc291cmNlOiAgIDxzY3JpcHQ+PHNjcmlwdCBzb3VyY2UgMT48L3NjcmlwdD4gPHNjcmlw
dD48c2NyaXB0IHNvdXJjZSAyPjwvc2NyaXB0PgotTWltZSB0eXBlOiB0ZXh0L2h0bWwKLVNjcmlw
dCBzb3VyY2U6IDxyZXNvdXJjZSBjb250ZW50PgotCi1SdW5uaW5nOiB0ZXN0Rm9ybWF0dGluZ1dp
dGhGaW5pc2hlZFJlc291cmNlCi1NaW1lIHR5cGU6IHRleHQvamF2YXNjcmlwdAotU2NyaXB0IHNv
dXJjZTogPHJlc291cmNlIGNvbnRlbnQ+Ci1NaW1lIHR5cGU6IHRleHQvamF2YXNjcmlwdAotU2Ny
aXB0IHNvdXJjZTogPGZvcm1hdHRlZD4gPHJlc291cmNlIGNvbnRlbnQ+Ci1NaW1lIHR5cGU6IHRl
eHQvamF2YXNjcmlwdAotU2NyaXB0IHNvdXJjZTogPHJlc291cmNlIGNvbnRlbnQ+Ci0KLVJ1bm5p
bmc6IHRlc3RGb3JtYXR0aW5nV2l0aFBlbmRpbmdSZXNvdXJjZQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmF3LXNvdXJjZS1jb2RlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmF3LXNvdXJjZS1jb2RlLmh0bWwKaW5kZXggNTEwZmUy
MTY3MDM3NjAwNTNmNWE0NDQ4ZjY5MzMwYzRkZTJhNzFmYi4uNjY0ZDIzZWRjYWQ0NjNmZDAzNzNk
NzBlMTQ2YzY4ODNjMTZhOWEyYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Rl
YnVnZ2VyL3Jhdy1zb3VyY2UtY29kZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9k
ZWJ1Z2dlci9yYXctc291cmNlLWNvZGUuaHRtbApAQCAtNTUsMTQgKzU1LDE0IEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgICAgICByZXR1cm4gZm9ybWF0dGVyOwogICAgIH07CiAKLSAgICBmdW5jdGlv
biBjcmVhdGVSYXdTb3VyY2VDb2RlKHNjcmlwdCwgcmVxdWVzdCwgZm9ybWF0dGVkLCBjb21waWxl
clNvdXJjZU1hcHBpbmcpCisgICAgZnVuY3Rpb24gY3JlYXRlUmF3U291cmNlQ29kZShzY3JpcHQs
IHJlcXVlc3QsIGNvbXBpbGVyU291cmNlTWFwcGluZykKICAgICB7CiAgICAgICAgIHZhciByZXNv
dXJjZSA9IG51bGw7CiAgICAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QuZmluaXNoZWQpIHsK
ICAgICAgICAgICAgIHJlc291cmNlID0gcmVxdWVzdC5yZXNvdXJjZSgpOwogICAgICAgICAgICAg
cmVxdWVzdCA9IG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSBu
ZXcgV2ViSW5zcGVjdG9yLlJhd1NvdXJjZUNvZGUoImlkIiwgc2NyaXB0LCByZXNvdXJjZSwgcmVx
dWVzdCwgY3JlYXRlU2NyaXB0Rm9ybWF0dGVyTW9jaygpLCAhIWZvcm1hdHRlZCwgY29tcGlsZXJT
b3VyY2VNYXBwaW5nKTsKKyAgICAgICAgdmFyIHJhd1NvdXJjZUNvZGUgPSBuZXcgV2ViSW5zcGVj
dG9yLlJhd1NvdXJjZUNvZGUoImlkIiwgc2NyaXB0LCByZXNvdXJjZSwgcmVxdWVzdCwgY29tcGls
ZXJTb3VyY2VNYXBwaW5nKTsKICAgICAgICAgcmF3U291cmNlQ29kZS5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5SYXdTb3VyY2VDb2RlLkV2ZW50cy5VSVNvdXJjZUNvZGVDaGFuZ2VkLCBk
ZWZhdWx0VUlTb3VyY2VDb2RlQ2hhbmdlZEhhbmRsZXIpOwogICAgICAgICByZXR1cm4gcmF3U291
cmNlQ29kZTsKICAgICB9CkBAIC0xNDAsNyArMTQwLDYgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBzb3VyY2U6ICIgKyBj
b250ZW50KTsKIAogICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuYWRkU2NyaXB0KHNjcmlw
dDIpOwotICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuZm9yY2VVcGRhdGVTb3VyY2VNYXBw
aW5nKCk7CiAgICAgICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
LApAQCAtMTY1LDE2MSArMTY0LDEyIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsgY29udGVudCk7CiAK
ICAgICAgICAgICAgICAgICByYXdTb3VyY2VDb2RlLmFkZFNjcmlwdChzY3JpcHQyKTsKLSAgICAg
ICAgICAgICAgICByYXdTb3VyY2VDb2RlLmZvcmNlVXBkYXRlU291cmNlTWFwcGluZygpOwogICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tVSUxvY2F0aW9uKHVpU291cmNlQ29kZSwg
MSwgMjAsIHJhd1NvdXJjZUNvZGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oY3JlYXRlUmF3TG9j
YXRpb24oMSwgMjApKSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1Jhd0xv
Y2F0aW9uKHNjcmlwdDEsIDEsIDAsIHJhd1NvdXJjZUNvZGUudWlMb2NhdGlvblRvUmF3TG9jYXRp
b24odWlTb3VyY2VDb2RlLCAxLCAwKSk7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5j
aGVja1Jhd0xvY2F0aW9uKHNjcmlwdDIsIDYsIDAsIHJhd1NvdXJjZUNvZGUudWlMb2NhdGlvblRv
UmF3TG9jYXRpb24odWlTb3VyY2VDb2RlLCA2LCAwKSk7CiAKICAgICAgICAgICAgICAgICBuZXh0
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KLSAgICAgICAgZnVuY3Rpb24gdGVzdEZv
cmNlVXBkYXRlU291cmNlTWFwcGluZyhuZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5fcmVzZXQoKTsKLSAgICAgICAgICAgIHZhciBzY3JpcHQx
ID0gSW5zcGVjdG9yVGVzdC5jcmVhdGVTY3JpcHRNb2NrKCJpbmRleC5odG1sIiwgMCwgMTAsIGZh
bHNlLCAiPHNjcmlwdCBzb3VyY2UgMT4iKTsKLSAgICAgICAgICAgIHZhciBzY3JpcHQyID0gSW5z
cGVjdG9yVGVzdC5jcmVhdGVTY3JpcHRNb2NrKCJpbmRleC5odG1sIiwgMCwgNDUsIGZhbHNlLCAi
PHNjcmlwdCBzb3VyY2UgMj4iKTsKLSAgICAgICAgICAgIHZhciBzY3JpcHQzID0gSW5zcGVjdG9y
VGVzdC5jcmVhdGVTY3JpcHRNb2NrKCJpbmRleC5odG1sIiwgMSwgMTAsIGZhbHNlLCAiPHNjcmlw
dCBzb3VyY2UgMz4iKTsKLSAgICAgICAgICAgIHZhciByZXF1ZXN0ID0gY3JlYXRlUGVuZGluZ1Jl
cXVlc3RNb2NrKCJkb2N1bWVudCIsICI8cmVzb3VyY2UgY29udGVudD4iKTsKLSAgICAgICAgICAg
IHZhciByYXdTb3VyY2VDb2RlID0gY3JlYXRlUmF3U291cmNlQ29kZShzY3JpcHQxLCByZXF1ZXN0
KTsKLQotICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCFyYXdTb3VyY2VDb2Rl
LnVpU291cmNlQ29kZSgpKTsKLSAgICAgICAgICAgIHdhaXRGb3JVSVNvdXJjZUNvZGVDaGFuZ2Vk
RXZlbnQocmF3U291cmNlQ29kZSwgcmVxdWVzdENvbnRlbnQpOwotICAgICAgICAgICAgcmF3U291
cmNlQ29kZS5mb3JjZVVwZGF0ZVNvdXJjZU1hcHBpbmcoKTsKLQotICAgICAgICAgICAgZnVuY3Rp
b24gcmVxdWVzdENvbnRlbnQoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0VHJ1ZSghIXJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCkpOwotICAg
ICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSByYXdTb3VyY2VDb2RlLnVpU291cmNlQ29k
ZSgpOwotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5yZXF1ZXN0Q29udGVudChkaWRSZXF1
ZXN0Q29udGVudE9uZVNjcmlwdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0
aW9uIGRpZFJlcXVlc3RDb250ZW50T25lU2NyaXB0KGNvbnRlbnQsIGNvbnRlbnRFbmNvZGVkLCBt
aW1lVHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFk
ZFJlc3VsdCgiTWltZSB0eXBlOiAiICsgbWltZVR5cGUpOwotICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KCJTY3JpcHQgc291cmNlOiAiICsgY29udGVudCk7Ci0KLSAgICAg
ICAgICAgICAgICByYXdTb3VyY2VDb2RlLmZvcmNlVXBkYXRlU291cmNlTWFwcGluZygpOwotICAg
ICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuYWRkU2NyaXB0KHNjcmlwdDIpOwotICAgICAgICAg
ICAgICAgIHdhaXRGb3JVSVNvdXJjZUNvZGVDaGFuZ2VkRXZlbnQocmF3U291cmNlQ29kZSwgcmVx
dWVzdENvbnRlbnRUd29TY3JpcHRzKTsKLSAgICAgICAgICAgICAgICByYXdTb3VyY2VDb2RlLmZv
cmNlVXBkYXRlU291cmNlTWFwcGluZygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBm
dW5jdGlvbiByZXF1ZXN0Q29udGVudFR3b1NjcmlwdHMoKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSghIXJhd1NvdXJjZUNvZGUudWlTb3Vy
Y2VDb2RlKCkpOwotICAgICAgICAgICAgICAgIHZhciB1aVNvdXJjZUNvZGUgPSByYXdTb3VyY2VD
b2RlLnVpU291cmNlQ29kZSgpOwotICAgICAgICAgICAgICAgIHVpU291cmNlQ29kZS5yZXF1ZXN0
Q29udGVudChkaWRSZXF1ZXN0Q29udGVudFR3b1NjcmlwdHMpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Q29udGVudFR3b1NjcmlwdHMoY29udGVudCwg
Y29udGVudEVuY29kZWQsIG1pbWVUeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJNaW1lIHR5cGU6ICIgKyBtaW1lVHlwZSk7Ci0gICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNjcmlwdCBzb3VyY2U6ICIgKyBj
b250ZW50KTsKLQotICAgICAgICAgICAgICAgIHJhd1NvdXJjZUNvZGUuZm9yY2VVcGRhdGVTb3Vy
Y2VNYXBwaW5nKCk7Ci0gICAgICAgICAgICAgICAgd2FpdEZvclVJU291cmNlQ29kZUNoYW5nZWRF
dmVudChyYXdTb3VyY2VDb2RlLCByZXF1ZXN0Q29udGVudFJlcXVlc3QpOwotICAgICAgICAgICAg
ICAgIGZpbmlzaFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGZ1bmN0aW9uIHJlcXVlc3RDb250ZW50UmVxdWVzdCgpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNlQ29kZS51aVNvdXJj
ZUNvZGUoKSk7Ci0gICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHJhd1NvdXJjZUNv
ZGUudWlTb3VyY2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgdWlTb3VyY2VDb2RlLnJlcXVlc3RD
b250ZW50KGRpZFJlcXVlc3RDb250ZW50UmVxdWVzdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGZ1bmN0aW9uIGRpZFJlcXVlc3RDb250ZW50UmVxdWVzdChjb250ZW50LCBjb250ZW50
RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQoIk1pbWUgdHlwZTogIiArIG1pbWVUeXBlKTsKLSAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJjZTogIiArIGNvbnRlbnQp
OwotCi0gICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5hZGRTY3JpcHQoc2NyaXB0Myk7Ci0g
ICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5mb3JjZVVwZGF0ZVNvdXJjZU1hcHBpbmcoKTsK
LQotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQot
ICAgICAgICBmdW5jdGlvbiB0ZXN0Rm9ybWF0dGluZ1dpdGhGaW5pc2hlZFJlc291cmNlKG5leHQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLl9yZXNl
dCgpOwotICAgICAgICAgICAgdmFyIHNjcmlwdCA9IEluc3BlY3RvclRlc3QuY3JlYXRlU2NyaXB0
TW9jaygiZm9vLmpzIiwgMCwgMCwgdHJ1ZSwgIjxzY3JpcHQgc291cmNlPiIpOwotICAgICAgICAg
ICAgdmFyIHJlcXVlc3QgPSBjcmVhdGVGaW5pc2hlZFJlcXVlc3RNb2NrKCJzY3JpcHQiLCAiPHJl
c291cmNlIGNvbnRlbnQ+Iik7Ci0gICAgICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IGNyZWF0
ZVJhd1NvdXJjZUNvZGUoc2NyaXB0LCByZXF1ZXN0LCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0VHJ1ZSghIXJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCkpOwot
ICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2Rl
KCk7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmNoZWNrVUlMb2NhdGlvbih1aVNvdXJjZUNv
ZGUsIDEsIDIsIHJhd1NvdXJjZUNvZGUucmF3TG9jYXRpb25Ub1VJTG9jYXRpb24oY3JlYXRlUmF3
TG9jYXRpb24oMSwgMikpKTsKLSAgICAgICAgICAgIEluc3BlY3RvclRlc3QuY2hlY2tSYXdMb2Nh
dGlvbihzY3JpcHQsIDIsIDAsIHJhd1NvdXJjZUNvZGUudWlMb2NhdGlvblRvUmF3TG9jYXRpb24o
dWlTb3VyY2VDb2RlLCAyLCAwKSk7Ci0gICAgICAgICAgICB1aVNvdXJjZUNvZGUucmVxdWVzdENv
bnRlbnQoZGlkUmVxdWVzdENvbnRlbnQpOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBkaWRSZXF1
ZXN0Q29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk1pbWUgdHlwZTog
IiArIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgi
U2NyaXB0IHNvdXJjZTogIiArIGNvbnRlbnQpOwotCi0gICAgICAgICAgICAgICAgcmF3U291cmNl
Q29kZS5zZXRGb3JtYXR0ZWQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgd2FpdEZvclVJU291cmNl
Q29kZUNoYW5nZWRFdmVudChyYXdTb3VyY2VDb2RlLCByZXF1ZXN0Rm9ybWF0dGVkQ29udGVudCk7
Ci0gICAgICAgICAgICAgICAgcmF3U291cmNlQ29kZS5fZm9ybWF0dGVyLmZpbmlzaCgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiByZXF1ZXN0Rm9ybWF0dGVkQ29udGVu
dCgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRU
cnVlKCEhcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKSk7Ci0gICAgICAgICAgICAgICAgdmFy
IHVpU291cmNlQ29kZSA9IHJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCk7Ci0gICAgICAgICAg
ICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24odWlTb3VyY2VDb2RlLCAyLCA0LCBy
YXdTb3VyY2VDb2RlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNyZWF0ZVJhd0xvY2F0aW9uKDEs
IDIpKSk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1Jhd0xvY2F0aW9uKHNj
cmlwdCwgMSwgMCwgcmF3U291cmNlQ29kZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJj
ZUNvZGUsIDIsIDApKTsKLSAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUucmVxdWVzdENvbnRl
bnQoZGlkUmVxdWVzdEZvcm1hdHRlZENvbnRlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBmdW5jdGlvbiBkaWRSZXF1ZXN0Rm9ybWF0dGVkQ29udGVudChjb250ZW50LCBjb250ZW50
RW5jb2RlZCwgbWltZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5hZGRSZXN1bHQoIk1pbWUgdHlwZTogIiArIG1pbWVUeXBlKTsKLSAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJjZTogIiArIGNvbnRlbnQp
OwotCi0gICAgICAgICAgICAgICAgd2FpdEZvclVJU291cmNlQ29kZUNoYW5nZWRFdmVudChyYXdT
b3VyY2VDb2RlLCByZXF1ZXN0Tm90Rm9ybWF0dGVkQ29udGVudCk7Ci0gICAgICAgICAgICAgICAg
cmF3U291cmNlQ29kZS5zZXRGb3JtYXR0ZWQoZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBmdW5jdGlvbiByZXF1ZXN0Tm90Rm9ybWF0dGVkQ29udGVudCgpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNl
Q29kZS51aVNvdXJjZUNvZGUoKSk7Ci0gICAgICAgICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9
IHJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5jaGVja1VJTG9jYXRpb24odWlTb3VyY2VDb2RlLCAxLCAyLCByYXdTb3VyY2VDb2RlLnJh
d0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNyZWF0ZVJhd0xvY2F0aW9uKDEsIDIpKSk7Ci0gICAgICAg
ICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1Jhd0xvY2F0aW9uKHNjcmlwdCwgMiwgMCwgcmF3
U291cmNlQ29kZS51aUxvY2F0aW9uVG9SYXdMb2NhdGlvbih1aVNvdXJjZUNvZGUsIDIsIDApKTsK
LSAgICAgICAgICAgICAgICB1aVNvdXJjZUNvZGUucmVxdWVzdENvbnRlbnQoZGlkUmVxdWVzdE5v
dEZvcm1hdHRlZENvbnRlbnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlv
biBkaWRSZXF1ZXN0Tm90Rm9ybWF0dGVkQ29udGVudChjb250ZW50LCBjb250ZW50RW5jb2RlZCwg
bWltZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5h
ZGRSZXN1bHQoIk1pbWUgdHlwZTogIiArIG1pbWVUeXBlKTsKLSAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFkZFJlc3VsdCgiU2NyaXB0IHNvdXJjZTogIiArIGNvbnRlbnQpOwotCi0gICAg
ICAgICAgICAgICAgbmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9LAotCi0gICAgICAg
IGZ1bmN0aW9uIHRlc3RGb3JtYXR0aW5nV2l0aFBlbmRpbmdSZXNvdXJjZShuZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5fcmVzZXQoKTsKLSAg
ICAgICAgICAgIHZhciBzY3JpcHQgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZVNjcmlwdE1vY2soImZv
by5qcyIsIDAsIDAsIHRydWUsICI8c2NyaXB0IHNvdXJjZT4iKTsKLSAgICAgICAgICAgIHZhciBy
ZXF1ZXN0ID0gY3JlYXRlUGVuZGluZ1JlcXVlc3RNb2NrKCJzY3JpcHQiLCAiPHJlc291cmNlIGNv
bnRlbnQ+Iik7Ci0gICAgICAgICAgICB2YXIgcmF3U291cmNlQ29kZSA9IGNyZWF0ZVJhd1NvdXJj
ZUNvZGUoc2NyaXB0LCByZXF1ZXN0LCB0cnVlKTsKLQotICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5hc3NlcnRUcnVlKCFyYXdTb3VyY2VDb2RlLnVpU291cmNlQ29kZSgpKTsKLSAgICAgICAgICAg
IGZpbmlzaFJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB3YWl0Rm9yVUlTb3VyY2VDb2Rl
Q2hhbmdlZEV2ZW50KHJhd1NvdXJjZUNvZGUsIGNoZWNrTWFwcGluZyk7Ci0gICAgICAgICAgICBy
YXdTb3VyY2VDb2RlLl9mb3JtYXR0ZXIuZmluaXNoKCk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9u
IGNoZWNrTWFwcGluZygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5hc3NlcnRUcnVlKCEhcmF3U291cmNlQ29kZS51aVNvdXJjZUNvZGUoKSk7Ci0gICAgICAg
ICAgICAgICAgdmFyIHVpU291cmNlQ29kZSA9IHJhd1NvdXJjZUNvZGUudWlTb3VyY2VDb2RlKCk7
Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1VJTG9jYXRpb24odWlTb3VyY2VD
b2RlLCAyLCA0LCByYXdTb3VyY2VDb2RlLnJhd0xvY2F0aW9uVG9VSUxvY2F0aW9uKGNyZWF0ZVJh
d0xvY2F0aW9uKDEsIDIpKSk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5jaGVja1Jh
d0xvY2F0aW9uKHNjcmlwdCwgMSwgMCwgcmF3U291cmNlQ29kZS51aUxvY2F0aW9uVG9SYXdMb2Nh
dGlvbih1aVNvdXJjZUNvZGUsIDIsIDApKTsKLSAgICAgICAgICAgICAgICBuZXh0KCk7Ci0gICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICBdKTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL3Rlc3QtbmF2aWdhdGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Jlc291cmNlcy90ZXN0LW5hdmlnYXRpb24uaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBjOTc1MjVhYzk1N2Y4YjE4YTUyYzcw
OGY5Y2VlNDVkMDg5MjM0My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvcmVzb3VyY2VzL3Rlc3QtbmF2
aWdhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPGh0bWw+Ci08c2Ny
aXB0Pgotd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBmdW5jdGlvbiBub3RpZnlG
cm9udGVuZCgpCi0gICAgewotICAgICAgICBJbnNwZWN0b3JUZXN0LnBhZ2VMb2FkZWQoKTsKLSAg
ICB9Ci0gICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5l
dmFsdWF0ZUluV2ViSW5zcGVjdG9yKDAsICIoIiArIG5vdGlmeUZyb250ZW5kICsgIikoKSIpOwot
fQotPC9zY3JpcHQ+Ci08c2NyaXB0PgotLy8gQ29tbWVudAotdmFyIHg9MDt2YXIgeT0xO3ZhciB6
PTI7Ci08L3NjcmlwdD4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRz
LWV4cGVjdGVkLnR4dAppbmRleCBiNTAwMzliNjBlZDJiN2NhOGVlN2IzMDk2MjE3MzRjNDhjZDcx
ZjJhLi45OTVkOGNiMDUxMmRhZTc0NTEwMmM0YTdhYWNiN2EzNTVhMjkyYjhmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LWZvcm1hdHRlci1icmVha3Bv
aW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Nj
cmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMtZXhwZWN0ZWQudHh0CkBAIC00LDMwICs0LDIwIEBA
IERlYnVnZ2VyIHdhcyBlbmFibGVkLgogCiBSdW5uaW5nOiB0ZXN0QnJlYWtwb2ludHNJbk9yaWdp
bmFsQW5kRm9ybWF0dGVkU291cmNlCiBTY3JpcHQgZXhlY3V0aW9uIHBhdXNlZC4KLQotRHVtcCBi
cmVha3BvaW50IHNpZGViYXIgcGFuZToKK0JyZWFrcG9pbnQgc2lkZWJhciBwYW5lIHdoaWxlIHBh
dXNlZCBpbiByYXcKIAogICAgIHNjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMuaHRtbDoxMQot
ICAgIHZhciBmPTA7CisgICAgdmFyIGY9MDsgcmV0dXJuIDA7CiBTY3JpcHQgZXhlY3V0aW9uIHJl
c3VtZWQuCi1QYWdlIHJlbG9hZGVkLgotTmF2aWdhdGVkIHRvIHRlc3QtbmF2aWdhdGlvbi5odG1s
Ci1QYWdlIHJlbG9hZGVkLgotTmF2aWdhdGVkIGJhY2sgdG8gdGVzdCBwYWdlLgotCi1EdW1wIGJy
ZWFrcG9pbnQgc2lkZWJhciBwYW5lOgotCiBTY3JpcHQgZXhlY3V0aW9uIHBhdXNlZC4KK0JyZWFr
cG9pbnQgc2lkZWJhciBwYW5lIHdoaWxlIHBhdXNlZCBpbiBwcmV0dHkgcHJpbnRlZAogCi1EdW1w
IGJyZWFrcG9pbnQgc2lkZWJhciBwYW5lOgotCi0gICAgc2NyaXB0LWZvcm1hdHRlci1icmVha3Bv
aW50cy5odG1sOjI1Ci0gICAgcmV0dXJuIDA7Ci1TY3JpcHQgZXhlY3V0aW9uIHJlc3VtZWQuCi0K
LUR1bXAgYnJlYWtwb2ludCBzaWRlYmFyIHBhbmU6CisgICAgc2NyaXB0LWZvcm1hdHRlci1icmVh
a3BvaW50cy5odG1sOjE4CisgICAgdmFyIGYgPSAwOworQnJlYWtwb2ludCBzaWRlYmFyIHBhbmUg
d2hpbGUgcGF1c2VkIGluIHJhdwogCiAgICAgc2NyaXB0LWZvcm1hdHRlci1icmVha3BvaW50cy5o
dG1sOjExCi0gICAgdmFyIGY9MDsKKyAgICB2YXIgZj0wOyByZXR1cm4gMDsKK1NjcmlwdCBleGVj
dXRpb24gcmVzdW1lZC4KIERlYnVnZ2VyIHdhcyBkaXNhYmxlZC4KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3JtYXR0ZXItYnJlYWtwb2ludHMu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0dGVyLWJy
ZWFrcG9pbnRzLmh0bWwKaW5kZXggNzMyY2Q1NjUyN2ExOWY0NjdiNGVhMzVhNTRlNmViZmU4ZTFi
OWQ0ZC4uZjAxMmU1MDcwYmU2ZTMwNDk4MzdjOWYwMTcyYWRjNDI5YTQ3ZWMxNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3JtYXR0ZXItYnJlYWtw
b2ludHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2NyaXB0LWZv
cm1hdHRlci1icmVha3BvaW50cy5odG1sCkBAIC04LDE5ICs4LDEzIEBACiBmdW5jdGlvbiBmMSgp
CiB7CiAgICAgdmFyIGE9MDt2YXIgYj0xO3ZhciBjPTM7dmFyIGQ9NDt2YXIgZT01OwotICAgIHZh
ciBmPTA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWZ1bmN0aW9uIGYyKCkKLXsKLSAgICB2YXIgeCA9
IDA7Ci0gICAgcmV0dXJuIDA7CisgICAgdmFyIGY9MDsgcmV0dXJuIDA7CiB9CiAKIHZhciB0ZXN0
ID0gZnVuY3Rpb24oKQogewogICAgIHZhciBwYW5lbCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2Ny
aXB0czsKKyAgICB2YXIgc291cmNlRnJhbWU7CiAKICAgICBJbnNwZWN0b3JUZXN0LnJ1bkRlYnVn
Z2VyVGVzdFN1aXRlKFsKICAgICAgICAgZnVuY3Rpb24gdGVzdEJyZWFrcG9pbnRzSW5PcmlnaW5h
bEFuZEZvcm1hdHRlZFNvdXJjZShuZXh0KQpAQCAtMjgsOCArMjIsOSBAQCB2YXIgdGVzdCA9IGZ1
bmN0aW9uKCkKICAgICAgICAgICAgIHZhciByb290OwogICAgICAgICAgICAgSW5zcGVjdG9yVGVz
dC5zaG93U2NyaXB0U291cmNlKCJzY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRzLmh0bWwiLCBk
aWRTaG93U2NyaXB0U291cmNlKTsKIAotICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hvd1Njcmlw
dFNvdXJjZShzb3VyY2VGcmFtZSkKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRpZFNob3dTY3JpcHRT
b3VyY2UoZnJhbWUpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUg
PSBmcmFtZTsKICAgICAgICAgICAgICAgICByb290ID0gc291cmNlRnJhbWUuX3VybC5zdWJzdHIo
MCwgc291cmNlRnJhbWUuX3VybC5sYXN0SW5kZXhPZigiLyIpICsgMSk7CiAgICAgICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5zZXRCcmVha3BvaW50KHNvdXJjZUZyYW1lLCAxMCwgIiIsIHRydWUp
OwogICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qud2FpdFVudGlsUGF1c2VkKHBhdXNlZElu
RjEpOwpAQCAtMzgsNjUgKzMzLDM2IEBAIHZhciB0ZXN0ID0gZnVuY3Rpb24oKQogCiAgICAgICAg
ICAgICBmdW5jdGlvbiBwYXVzZWRJbkYxKGNhbGxGcmFtZXMpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoImYxIiwgY2FsbEZyYW1lc1sw
XS5mdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgICAgIGR1bXBCcmVha3BvaW50U2lkZWJhclBh
bmUoKTsKKyAgICAgICAgICAgICAgICBkdW1wQnJlYWtwb2ludFNpZGViYXJQYW5lKCJ3aGlsZSBw
YXVzZWQgaW4gcmF3Iik7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5yZXN1bWVFeGVj
dXRpb24ocmVzdW1lZCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIHJl
c3VtZWQoKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QubmF2
aWdhdGUocm9vdCArICJyZXNvdXJjZXMvdGVzdC1uYXZpZ2F0aW9uLmh0bWwiLCBkaWROYXZpZ2F0
ZUFub3RoZXJQYWdlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gZGlk
TmF2aWdhdGVBbm90aGVyUGFnZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoIk5hdmlnYXRlZCB0byB0ZXN0LW5hdmlnYXRpb24uaHRtbCIp
OwotICAgICAgICAgICAgICAgIHBhbmVsLl90b2dnbGVGb3JtYXRTb3VyY2UoKTsKLSAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LnNob3dTY3JpcHRTb3VyY2UoInRlc3QtbmF2aWdhdGlvbi5o
dG1sIiwgZGlkU2hvd0Fub3RoZXJQYWdlKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5f
dWlTb3VyY2VDb2RlLnNldEZvcm1hdHRlZCh0cnVlLCBkaWRGb3JtYXRQYWdlKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hvd0Fub3RoZXJQYWdlKHNvdXJjZUZy
YW1lKQorICAgICAgICAgICAgZnVuY3Rpb24gZGlkRm9ybWF0UGFnZSgpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5uYXZpZ2F0ZShyb290ICsgInNjcmlwdC1m
b3JtYXR0ZXItYnJlYWtwb2ludHMuaHRtbCIsIGRpZE5hdmlnYXRlQmFjayk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIGRpZE5hdmlnYXRlQmFjaygpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIk5hdmlnYXRlZCBi
YWNrIHRvIHRlc3QgcGFnZS4iKTsKLSAgICAgICAgICAgICAgICBkdW1wQnJlYWtwb2ludFNpZGVi
YXJQYW5lKCk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0U291cmNl
KCJzY3JpcHQtZm9ybWF0dGVyLWJyZWFrcG9pbnRzLmh0bWwiLCBkaWRTaG93Rm9ybWF0dGVkU2Ny
aXB0U291cmNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZnVuY3Rpb24gZGlkU2hv
d0Zvcm1hdHRlZFNjcmlwdFNvdXJjZShzb3VyY2VGcmFtZSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYmUgbm8gYnJlYWtwb2ludCBpbiBmMSBzaW5jZSBz
Y3JpcHQgaXMgcHJldHR5LXByaW50ZWQgbm93LgorICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNo
b3VsZCBiZSBhIGJyZWFrcG9pbnQgaW4gZjEgYWx0aG91Z2ggc2NyaXB0IGlzIHByZXR0eS1wcmlu
dGVkLgorICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Qud2FpdFVudGlsUGF1c2VkKHBhdXNl
ZEluRjFBZ2Fpbik7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFn
ZVdpdGhUaW1lb3V0KCJmMSgpIik7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5zZXRC
cmVha3BvaW50KHBhbmVsLnZpc2libGVWaWV3LCAyNCwgIiIsIHRydWUpOwotICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3Qud2FpdFVudGlsUGF1c2VkKHBhdXNlZEluRjIpOwotICAgICAgICAg
ICAgICAgIEluc3BlY3RvclRlc3QuZXZhbHVhdGVJblBhZ2VXaXRoVGltZW91dCgiZjIoKSIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmdW5jdGlvbiBwYXVzZWRJbkYyKGNhbGxGcmFt
ZXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRF
cXVhbHMoImYyIiwgY2FsbEZyYW1lc1swXS5mdW5jdGlvbk5hbWUpOwotICAgICAgICAgICAgICAg
IGR1bXBCcmVha3BvaW50U2lkZWJhclBhbmUoKTsKLSAgICAgICAgICAgICAgICBwYW5lbC5fdG9n
Z2xlRm9ybWF0U291cmNlKCk7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5yZXN1bWVF
eGVjdXRpb24ocmVzdW1lZEYyKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZnVuY3Rp
b24gcmVzdW1lZEYyKCkKKyAgICAgICAgICAgIGZ1bmN0aW9uIHBhdXNlZEluRjFBZ2FpbihjYWxs
RnJhbWVzKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGR1bXBCcmVha3BvaW50U2lk
ZWJhclBhbmUoKTsKLSAgICAgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgZHVt
cEJyZWFrcG9pbnRTaWRlYmFyUGFuZSgid2hpbGUgcGF1c2VkIGluIHByZXR0eSBwcmludGVkIik7
CisgICAgICAgICAgICAgICAgc291cmNlRnJhbWUuX3VpU291cmNlQ29kZS5zZXRGb3JtYXR0ZWQo
ZmFsc2UpOworICAgICAgICAgICAgICAgIGR1bXBCcmVha3BvaW50U2lkZWJhclBhbmUoIndoaWxl
IHBhdXNlZCBpbiByYXciKTsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LnJlc3VtZUV4
ZWN1dGlvbihuZXh0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIF0pOwogCi0gICAg
ZnVuY3Rpb24gZHVtcEJyZWFrcG9pbnRTaWRlYmFyUGFuZSgpCisgICAgZnVuY3Rpb24gZHVtcEJy
ZWFrcG9pbnRTaWRlYmFyUGFuZSh0aXRsZSkKICAgICB7CiAgICAgICAgIHZhciBwYW5lRWxlbWVu
dCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cy5zaWRlYmFyUGFuZXMuanNCcmVha3BvaW50
cy5saXN0RWxlbWVudAotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiIik7Ci0gICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJEdW1wIGJyZWFrcG9pbnQgc2lkZWJhciBwYW5l
OiIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiQnJlYWtwb2ludCBzaWRlYmFy
IHBhbmUgIiArIHRpdGxlKTsKICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoSW5zcGVj
dG9yVGVzdC50ZXh0Q29udGVudFdpdGhMaW5lQnJlYWtzKHBhbmVFbGVtZW50KSk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NjcmlwdC1mb3Jt
YXR0ZXItY29uc29sZS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3Njcmlw
dC1mb3JtYXR0ZXItY29uc29sZS5odG1sCmluZGV4IDRjNDZkNWI4MjA0ZTI5M2VlZjM0MzE3MGIz
MTBkMzAxM2ViNmYxOTUuLjk0OTEzZWU0NGZiNmRkY2UzNjdmMDcyMGQ1ZDc5YzFkZmVlYzE2ZmIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zY3JpcHQtZm9ybWF0
dGVyLWNvbnNvbGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2Ny
aXB0LWZvcm1hdHRlci1jb25zb2xlLmh0bWwKQEAgLTE0LDIyICsxNCwyMyBAQCB2YXIgdGVzdCA9
IGZ1bmN0aW9uKCkKIHsKICAgICB2YXIgcGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlw
dHM7CiAgICAgdmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoIlNjcmlwdEZvcm1hdHRlcldvcmtlci5q
cyIpOworICAgIHZhciBzb3VyY2VGcmFtZTsKIAogICAgIEluc3BlY3RvclRlc3QucnVuRGVidWdn
ZXJUZXN0U3VpdGUoWwogICAgICAgICBmdW5jdGlvbiB0ZXN0Q29uc29sZU1lc3NhZ2VzRm9yRm9y
bWF0dGVkU2NyaXB0cyhuZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0
LnNob3dTY3JpcHRTb3VyY2UoInNjcmlwdC1mb3JtYXR0ZXItY29uc29sZS5odG1sIiwgZGlkU2hv
d1NjcmlwdFNvdXJjZSk7CiAKLSAgICAgICAgICAgIGZ1bmN0aW9uIGRpZFNob3dTY3JpcHRTb3Vy
Y2Uoc291cmNlRnJhbWUpCisgICAgICAgICAgICBmdW5jdGlvbiBkaWRTaG93U2NyaXB0U291cmNl
KGZyYW1lKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNvdXJjZUZyYW1lID0gZnJh
bWU7CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5ldmFsdWF0ZUluUGFnZSgiZjEoKSIs
IGRpZEV2YWx1YXRlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZnVuY3Rpb24gZGlk
RXZhbHVhdGUoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGR1bXBDb25zb2xlTWVz
c2FnZVVSTHMoKTsKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFNuaWZmZXIoV2Vi
SW5zcGVjdG9yLCAiZm9ybWF0TGlua1RleHQiLCBzZXRUaW1lb3V0LmJpbmQod2luZG93LCBkaWRG
b3JtYXRMaW5rVGV4dCwgMCkpOwotICAgICAgICAgICAgICAgIHBhbmVsLl90b2dnbGVGb3JtYXRT
b3VyY2UoKTsKKyAgICAgICAgICAgICAgICBzb3VyY2VGcmFtZS5fdWlTb3VyY2VDb2RlLnNldEZv
cm1hdHRlZCh0cnVlLCBkaWRGb3JtYXRMaW5rVGV4dCk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGZ1bmN0aW9uIGRpZEZvcm1hdExpbmtUZXh0KCkKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9kZWJ1Z2dlci9zZWxlY3RlZC1jYWxsLWZyYW1lLWFmdGVyLWZvcm1hdHRp
bmctc291cmNlLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZGVidWdnZXIvc2VsZWN0ZWQt
Y2FsbC1mcmFtZS1hZnRlci1mb3JtYXR0aW5nLXNvdXJjZS5odG1sCmluZGV4IGU3NTM2MTUyZTQ0
ODcxZjQ0YTQ0OWFmZjQ1ZWUxYWExMGMyNmY3OWYuLjJiMmZhMTM4ODk5YjI3ZTUwMjI5MDQxODE1
YzhmYTZlMDQ1NTJlYWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kZWJ1Z2dl
ci9zZWxlY3RlZC1jYWxsLWZyYW1lLWFmdGVyLWZvcm1hdHRpbmctc291cmNlLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RlYnVnZ2VyL3NlbGVjdGVkLWNhbGwtZnJhbWUtYWZ0ZXIt
Zm9ybWF0dGluZy1zb3VyY2UuaHRtbApAQCAtMjAsNiArMjAsNyBAQCB2YXIgdGVzdCA9IGZ1bmN0
aW9uKCkKIHsKICAgICBJbnNwZWN0b3JUZXN0LnN0YXJ0RGVidWdnZXJUZXN0KHN0ZXAxKTsKICAg
ICB2YXIgcGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHM7CisgICAgdmFyIHNvdXJj
ZUZyYW1lOwogCiAgICAgZnVuY3Rpb24gc3RlcDEoKQogICAgIHsKQEAgLTI4LDE4ICsyOSwyNyBA
QCB2YXIgdGVzdCA9IGZ1bmN0aW9uKCkKICAgICAgICAgSW5zcGVjdG9yVGVzdC5zaG93U2NyaXB0
U291cmNlKHRlc3ROYW1lLCBzdGVwMik7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gc3RlcDIoY2Fs
bEZyYW1lcykKKyAgICBmdW5jdGlvbiBzdGVwMihmcmFtZSkKICAgICB7CisgICAgICAgIHNvdXJj
ZUZyYW1lID0gZnJhbWU7IAogICAgICAgICBJbnNwZWN0b3JUZXN0LnJ1blRlc3RGdW5jdGlvbkFu
ZFdhaXRVbnRpbFBhdXNlZChzdGVwMyk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gc3RlcDMoY2Fs
bEZyYW1lcykKKyAgICBmdW5jdGlvbiBzdGVwMygpCiAgICAgeworICAgICAgICBJbnNwZWN0b3JU
ZXN0LmNvbXBsZXRlRGVidWdnZXJUZXN0KCk7IHJldHVybjsKICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwuc2V0U2VsZWN0ZWRDYWxsRnJhbWUoV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuZGVidWdnZXJQYXVzZWREZXRhaWxzKCkuY2FsbEZyYW1lc1sxXSk7Ci0gICAgICAgIHBh
bmVsLl90b2dnbGVGb3JtYXRTb3VyY2UoKTsKLSAgICAgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnRF
cXVhbHMoInRlc3RGdW5jdGlvbiIsIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNlbGVjdGVk
Q2FsbEZyYW1lKCkuZnVuY3Rpb25OYW1lKTsKLSAgICAgICAgcGFuZWwuX3RvZ2dsZUZvcm1hdFNv
dXJjZSgpOworICAgICAgICBzb3VyY2VGcmFtZS5fdG9nZ2xlRm9ybWF0U291cmNlKHN0ZXA0KTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVwNCgpCisgICAgewogICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydEVxdWFscygidGVzdEZ1bmN0aW9uIiwgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuc2VsZWN0ZWRDYWxsRnJhbWUoKS5mdW5jdGlvbk5hbWUpOworICAgICAgICBzb3VyY2VGcmFt
ZS5fdG9nZ2xlRm9ybWF0U291cmNlKHN0ZXA1KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGVw
NSgpCisgICAgewogICAgICAgICBJbnNwZWN0b3JUZXN0LmNvbXBsZXRlRGVidWdnZXJUZXN0KCk7
CiAgICAgfQogfQo=
</data>
<flag name="review"
          id="147524"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>