<?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>102688</bug_id>
          
          <creation_ts>2012-11-19 06:58:02 -0800</creation_ts>
          <short_desc>Web Inspector: simplify? damaged region computation in the editor</short_desc>
          <delta_ts>2012-11-21 22:39:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770702</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-19 06:58:02 -0800</bug_when>
    <thetext>This change simplifies the damaged region computation. Drive-by make _getSelection work properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770707</commentid>
    <comment_count>1</comment_count>
      <attachid>174972</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-19 06:59:33 -0800</bug_when>
    <thetext>Created attachment 174972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771535</commentid>
    <comment_count>2</comment_count>
      <attachid>175144</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-19 22:49:21 -0800</bug_when>
    <thetext>Created attachment 175144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771548</commentid>
    <comment_count>3</comment_count>
      <attachid>175147</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-19 23:03:16 -0800</bug_when>
    <thetext>Created attachment 175147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771772</commentid>
    <comment_count>4</comment_count>
      <attachid>175147</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-11-20 05:21:13 -0800</bug_when>
    <thetext>Comment on attachment 175147
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1891
&gt; +            node = this._enclosingLineRowOrSelf(container);

This if branch should precede previous one. We should make sure that the enclosing line row of container is preceding lastUndamaged line row.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:2128
&gt; +        var lastUndamagedChunk = lastUndamagedLineNumber &lt; this._textModel.linesCount ? this._textChunks[this._chunkNumberForLine(lastUndamagedLineNumber)] : null;

lastUndamagedLineChunk

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:2129
&gt; +        var firstUndamagedChunk = firstUndamagedLineNumber &gt;= 0 ? this._textChunks[this._chunkNumberForLine(firstUndamagedLineNumber)] : null;

I think you should invert checks for these two lines.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:2131
&gt; +        var collectLinesFromNode = lastUndamagedChunk ? lastUndamagedChunk.lineRowContainingLine(lastUndamagedLineNumber) : null;

lastUndamagedLineRow

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:2202
&gt; +        var cloneToLine = Math.min(Math.max(endLine, range.endLine) + lineCountDelta + 1, this._textModel.linesCount);

replace endLine  with startLine + lines.length.

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:2681
&gt; +WebInspector.debugDefaultTextEditor = true;

Please remove</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771835</commentid>
    <comment_count>5</comment_count>
      <attachid>175211</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-20 07:04:43 -0800</bug_when>
    <thetext>Created attachment 175211
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771871</commentid>
    <comment_count>6</comment_count>
      <attachid>175221</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-20 07:56:35 -0800</bug_when>
    <thetext>Created attachment 175221
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771894</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2012-11-20 08:32:32 -0800</bug_when>
    <thetext>Committed r135285: &lt;http://trac.webkit.org/changeset/135285&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773584</commentid>
    <comment_count>8</comment_count>
      <attachid>175221</attachid>
    <who name="">eustas.bug</who>
    <bug_when>2012-11-21 22:39:13 -0800</bug_when>
    <thetext>Comment on attachment 175221
Patch

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

&gt; Source/WebCore/inspector/front-end/DefaultTextEditor.js:1989
&gt; +        if (false) // For paint debugging.

This makes compiler unhappy: &quot;WARNING - unreachable code&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174972</attachid>
            <date>2012-11-19 06:59:33 -0800</date>
            <delta_ts>2012-11-19 22:49:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102688-20121119185723.patch</filename>
            <type>text/plain</type>
            <size>27980</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFjYmFkODE0YmFmZTEz
MWZhZGM5NDg3ZjllZWQzOWUwZGYxYjVmNC4uNTU4YjMxODZmYjFiYzQ0ZDIwY2M2OTViNjgzZTQ3
NjI1OTM1ZDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTE5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNpbXBsaWZ5PyBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbiBpbiB0aGUgZWRpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzaW1wbGlmaWVzIHRoZSBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbi4gRHJpdmUtYnkgbWFr
ZSBfZ2V0U2VsZWN0aW9uIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyLmNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVFbnRlcktl
eS5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5oYW5kbGVFbnRlcktleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hhbmRsZU11dGF0
aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Nv
bGxlY3RMaW5lc0Zyb21ET00pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLmdldCBlbmRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5saW5lUm93Q29udGFpbmluZ0xpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmV4cGFuZGVkTGlu
ZVJvdyk6CisKIDIwMTItMTEtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRG9uJ3Qgc2F5IHRoZXJlIGFyZSBkaXJ0eSBvdmVybGF5IHNjcm9sbGJh
cnMgd2hlbiB0aGV5IGFyZSBjbGlwcGVkIG91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKaW5kZXggOTQxZDQyNTNj
YzVmZWQ1YjA2Mzg4N2Y5M2FhYTgyYzA0MTBkNDdmNS4uM2U0YzRlMDk4ODVlNDNmZTcwOWMzMDEx
NDJkZTIwZjkwYzVlNTJmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCkBAIC05Myw2ICs5Myw3IEBAIFdlYklu
c3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwg
Zm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhp
cyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhp
cy5faGFuZGxlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5faGFuZGxlVGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtNDI2LDYgKzQyNywx
MSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2RlID0gZS5rZXlDb2RlOwogICAgIH0sCiAKKyAg
ICBfaGFuZGxlQ3V0OiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
Ll9rZXlEb3duQ29kZSA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRl
LmNvZGU7CisgICAgfSwKKwogICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoImEiKTsKQEAgLTgzNiw3ICs4NDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gY29tcGFy
ZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVlLCBsaW5lTnVtYmVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1i
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6
IDE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4
Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMs
IGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CkBAIC0xNDg2LDcgKzE0OTIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghaW5k
ZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuYmVnaW5VcGRh
dGVzKCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKICAgICAgICAgdmFyIGxp
bmVCcmVhayA9IHRoaXMuX3RleHRNb2RlbC5saW5lQnJlYWs7CiAgICAgICAgIHZhciBuZXdSYW5n
ZTsKQEAgLTE1MDIsNyArMTUwOCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdSYW5nZSA9IHRo
aXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIGxpbmVCcmVhayArIGluZGVudCk7CiAKLSAg
ICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwog
ICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLmNvbGxhcHNlVG9FbmQoKSwg
dHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgKzE3MDAsNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxp
bmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNo
dW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVu
ay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQogICAgICAgICAgICAgICAgICAgICBjaHVu
ayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwog
ICAgICAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVt
YmVyKSB7CkBAIC0xODEzLDkgKzE4MTksMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0gez9O
b2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKICAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlfQogICAgICAqLwotICAgIF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICBf
Z2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCkBAIC0xODIzLDggKzE4MzAsOCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFNlbGVjdGlvbiBt
YXkgYmUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgogICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5l
ci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlz
QW5jZXN0b3Ioc2VsZWN0aW9uLmZvY3VzTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24u
YW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCk7Ci0gICAgICAgIHZhciBlbmQgPSBz
ZWxlY3Rpb24uaXNDb2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24o
c2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwg
c2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOworICAgICAgICB2
YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25U
b1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldCwgbGFz
dFVuZGFtYWdlZExpbmVSb3cpOwogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CiAg
ICAgfSwKIApAQCAtMTgzNSw2ICsxODQyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwogICAgICAgICB2YXIgZW5k
ID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJh
bmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQu
Y29udGFpbmVyLCBlbmQub2Zmc2V0KTsKQEAgLTE4NTMsMzIgKzE4NjEsNTEgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7Tm9kZX0gY29udGFpbmVyCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldAorICAg
ICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1hZ2VkTGluZVJvdwogICAgICAqLwotICAgIF9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkKKyAgICBfc2Vs
ZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQsIGxhc3RVbmRhbWFn
ZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFp
bmVyICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVt
bjogMCB9OwogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zm
c2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxp
bmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFpbmVyKTsKLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIgPT09IGxpbmVS
b3cgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdG8gc3RhcnQK
KyAgICAgICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAgIHZhciBub2RlOworICAgICAgICB2YXIg
c2NvcGVOb2RlOworICAgICAgICB2YXIgbGluZU51bWJlcjsKKyAgICAgICAgaWYgKGxhc3RVbmRh
bWFnZWRMaW5lUm93ID09PSBudWxsKSB7CisgICAgICAgICAgICAgLy8gVHJhdmVyc2UgZnJvbSB0
aGUgYmVnaW5uaW5nCisgICAgICAgICAgICBub2RlID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hp
bGQ7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9jb250YWluZXI7CisgICAgICAgICAg
ICBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChsYXN0VW5kYW1hZ2VkTGluZVJv
dyAmJiB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNvbnRhaW5lcikgIT09IGxhc3RVbmRh
bWFnZWRMaW5lUm93KSB7CisgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0aGUgZ2l2ZW4gcm93
OworICAgICAgICAgICAgbm9kZSA9IGxhc3RVbmRhbWFnZWRMaW5lUm93Lm5leHRTaWJsaW5nOwor
ICAgICAgICAgICAgc2NvcGVOb2RlID0gdGhpcy5fY29udGFpbmVyOworICAgICAgICAgICAgbGlu
ZU51bWJlciA9IGxhc3RVbmRhbWFnZWRMaW5lUm93LmxpbmVOdW1iZXIgKyAxOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCB0aGUgY29udGFpbmluZyBsaW5lCisg
ICAgICAgICAgICBub2RlID0gdGhpcy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihjb250YWluZXIp
OworICAgICAgICAgICAgc2NvcGVOb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIg
PSBub2RlLmxpbmVOdW1iZXI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGFpbmVyID09
PSBub2RlICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVO
dW1iZXIsIGNvbHVtbjogMCB9OwogCi0gICAgICAgIC8vIFRoaXMgbWF5IGJlIGNodW5rIGFuZCBj
aHVua3MgbWF5IGNvbnRhaW4gXG4uCi0gICAgICAgIHZhciBjb2x1bW4gPSAwOwotICAgICAgICB2
YXIgbm9kZSA9IGxpbmVSb3cubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gbGluZVJvdyA6
IGxpbmVSb3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7Ci0gICAgICAgIHdoaWxlIChu
b2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgewotICAgICAgICAgICAgdmFyIHRleHQgPSBub2Rl
LnRleHRDb250ZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgICAgICAgICAg
Y29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
Y29sdW1uKys7CisgICAgICAgIGlmIChub2RlICE9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAg
IGZvciAobm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUobm9kZSk7IG5vZGUgJiYgbm9k
ZSAhPT0gY29udGFpbmVyOyBub2RlID0gbm9kZS50cmF2ZXJzZU5leHRUZXh0Tm9kZShzY29wZU5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OworICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT09ICJcbiIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bHVtbiA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNldCkgewpAQCAtMTkw
Miw3ICsxOTI5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUobGluZSk7
CiAgICAgICAgIC8vIE9uZS1saW5lZCBjb2xsYXBzZWQgY2h1bmtzIG1heSBzdGlsbCBzdGF5IGhp
Z2hsaWdodGVkLgotICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEg
PyBjaHVuay5lbGVtZW50IDogY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmUpOworICAgICAg
ICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDog
Y2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmUpOwogICAgICAgICBpZiAobGluZVJvdykKICAgICAg
ICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0gbGluZVJvdy5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0
KGNvbHVtbik7CiAgICAgICAgIGVsc2UgewpAQCAtMjAwMywxMSArMjAzMCwxMCBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICovCiAgICAgX2hh
bmRsZU11dGF0aW9uczogZnVuY3Rpb24obXV0YXRpb25zKQogICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX2RvbVVwZGF0ZUNvYWxlc2NpbmdMZXZlbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpZiAodGhpcy5fcmVhZE9ubHkpCisgICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkgewor
ICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2tleURvd25Db2RlOwogICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAKICAgICAgICAgLy8gQW5uaWhpbGF0ZSBub29wIEJSIGFkZGl0aW9uICsg
cmVtb3ZhbCB0aGF0IHRha2VzIHBsYWNlIHVwb24gbGluZSByZW1vdmFsLgogICAgICAgICB2YXIg
ZmlsdGVyZWRNdXRhdGlvbnMgPSBtdXRhdGlvbnMuc2xpY2UoKTsKQEAgLTIwNTUsOCArMjA4MSw5
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRlcyhkaXJ0eUxpbmVzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKLSAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVtZW50LmlubmVyVGV4dCA9PT0gdGhpcy5fdGV4dE1v
ZGVsLnRleHQoKSArICJcbiIsICJET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwuIik7CisgICAgICAg
IHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsKKworICAgICAgICBkZWxldGUgdGhp
cy5fa2V5RG93bkNvZGU7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMjA3NiwyOSArMjEwMywxMSBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0aGlzLl9yZWFkT25s
eSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5lUm93LmxpbmVOdW1iZXIgIT09ICJudW1iZXIiKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgaWYgKHRhcmdldCA9PT0gbGluZVJv
dyAmJiBtdXRhdGlvbi50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvbi5hZGRlZE5vZGVz
Lmxlbmd0aCkgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5ld2x5IGluc2VydGVk
IGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgotICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cu
bGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGFydExpbmUgPSAwOwotICAg
ICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7IHJvdyA9IHJvdy5wcmV2aW91c1NpYmxp
bmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIi
KSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5lID0gcm93LmxpbmVOdW1iZXI7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIGZvciAodmFyIHJvdyA9IGxpbmVSb3cu
bmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiByb3cubGluZU51bWJlciA+
IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAgIGVuZExpbmUgPSByb3cubGluZU51bWJlcjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAg
ICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2YXIgZW5kTGlu
ZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJvdy5fY2h1bmsuZW5kTGluZSAtIDEgOiBsaW5lUm93
LmxpbmVOdW1iZXI7CiAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDogZW5k
TGluZSB9OwogICAgIH0sCiAKQEAgLTIxMDcsMzggKzIxMTYsMzEgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9hcHBseURvbVVw
ZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGluZXMpCiAgICAgewotICAgICAgICB2YXIgZmlyc3RDaHVu
a051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKLSAg
ICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0u
c3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50OworICAgICAgICB2YXIgbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLnN0
YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZExpbmVOdW1i
ZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8vIENhbiBiZSB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudAogCi0gICAgICAgIC8vIENvbGxlY3QgbGluZXMuCi0gICAgICAgIHZhciBmaXJzdExpbmVS
b3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1
bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAg
IGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93
KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7
Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVy
LmZpcnN0Q2hpbGQ7CisgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkQ2h1bmsgPSBsYXN0VW5kYW1h
Z2VkTGluZU51bWJlciA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhpcy5fdGV4dENo
dW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6
IG51bGw7CisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZENodW5rID0gZmlyc3RVbmRhbWFnZWRM
aW5lTnVtYmVyID49IDAgPyB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGlu
ZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7CiAKLSAgICAgICAgdmFyIGxpbmVz
ID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7IGxpbmVSb3c7
IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9m
IGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5lTnVtYmVyID49
IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxpbmVSb3cubGlu
ZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhhdCB0aGUgY2Fs
bCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsuCi0gICAgICAg
ICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5ndGg7Ci0gICAg
ICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93KTsKLSAgICAg
ICAgfQorICAgICAgICB2YXIgY29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5kYW1hZ2VkQ2h1
bmsgPyBsYXN0VW5kYW1hZ2VkQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGxhc3RVbmRhbWFn
ZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAgIHZhciBjb2xsZWN0TGluZXNUb05vZGUgPSBm
aXJzdFVuZGFtYWdlZENodW5rID8gZmlyc3RVbmRhbWFnZWRDaHVuay5saW5lUm93Q29udGFpbmlu
Z0xpbmUoZmlyc3RVbmRhbWFnZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAgIHZhciBsaW5l
cyA9IHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21ET00oY29sbGVjdExpbmVzRnJvbU5vZGUsIGNvbGxl
Y3RMaW5lc1RvTm9kZSk7CisKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGRpcnR5TGluZXMuc3Rh
cnQ7CisgICAgICAgIHZhciBlbmRMaW5lID0gZGlydHlMaW5lcy5lbmQ7CiAKLSAgICAgICAgdmFy
IGVkaXRJbmZvID0gdGhpcy5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uKGRpcnR5TGlu
ZXMsIHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpOwotICAgICAgICBpZiAoIWVkaXRJbmZvKQot
ICAgICAgICAgICAgZWRpdEluZm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25EaWZmKGRp
cnR5TGluZXMsIHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpOworICAgICAgICB2YXIgZWRpdElu
Zm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb24oc3RhcnRMaW5lLCBlbmRM
aW5lLCBsaW5lcyk7CisgICAgICAgIGlmICghZWRpdEluZm8pIHsKKyAgICAgICAgICAgIGlmIChX
ZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKKyAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oIkZhbGxpbmcgYmFjayB0byBleHBlbnNpdmUgZWRpdCIpOworICAgICAgICAgICAg
dmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRM
aW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lKSk7CisgICAgICAgICAgICBl
ZGl0SW5mbyA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm8ocmFu
Z2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAgICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMuX3Rl
eHRNb2RlbC5jb3B5UmFuZ2UoZWRpdEluZm8ucmFuZ2UpID09PSBlZGl0SW5mby50ZXh0KQogICAg
ICAgICAgICAgcmV0dXJuOyAvLyBOb29wCiAKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMu
X2dldFNlbGVjdGlvbigpOworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0
aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKIAogICAgICAgICAvLyBVbmluZGVudCBhZnRlciBi
bG9jawogICAgICAgICBpZiAoZWRpdEluZm8udGV4dCA9PT0gIn0iICYmIGVkaXRJbmZvLnJhbmdl
LmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNFbXB0eSgpICYmICF0aGlzLl90ZXh0TW9kZWwubGlu
ZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50cmltKCkpIHsKQEAgLTIxNTYsMTMgKzIxNTgsMTIg
QEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIH0s
CiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGlydHlMaW5lcwogICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAgICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQog
ICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVzCiAgICAgICogQHJldHVybiB7P1dl
Ykluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KICAgICAgKi8KLSAgICBfZ3Vl
c3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uOiBmdW5jdGlvbihkaXJ0eUxpbmVzLCBzdGFydExp
bmUsIGVuZExpbmUsIGxpbmVzKQorICAgIF9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb246
IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpCiAgICAgewogICAgICAgICAvLyBD
aGVjayB3aGV0aGVyIHJlcGxhY2luZyBsYXN0IHNlbGVjdGlvbiB3aXRoIHRleHRJbnB1dCBkYXRh
IHJlc3VsdHMgaW4gcHJlc2VudCBET00uCiAgICAgICAgIC8vIElmIHRoYXQgaXMgc28sIHdlIGhh
dmUgcHJlY2lzZSBpbnB1dCBmb3IgdGhlIGVkaXRSYW5nZSBjYWxsLgpAQCAtMjE3MCw5NSArMjE3
MSw2NiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGRlbGV0ZSB0aGlzLl90ZXh0SW5wdXREYXRhOwogICAgICAgICB2YXIgaXNCYWNrc3Bh
Y2UgPSB0aGlzLl9rZXlEb3duQ29kZSA9PT0gV2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQu
S2V5cy5CYWNrc3BhY2UuY29kZTsKICAgICAgICAgdmFyIGlzRGVsZXRlID0gdGhpcy5fa2V5RG93
bkNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRlLmNvZGU7
Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlEb3duQ29kZTsKIAogICAgICAgICBpZiAoIXRleHRJ
bnB1dERhdGEgJiYgKGlzRGVsZXRlIHx8IGlzQmFja3NwYWNlKSkKICAgICAgICAgICAgIHRleHRJ
bnB1dERhdGEgPSAiIjsKIAogICAgICAgICBpZiAodHlwZW9mIHRleHRJbnB1dERhdGEgPT09ICJ1
bmRlZmluZWQiIHx8ICF0aGlzLl9sYXN0U2VsZWN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICAgIGlmIChkaXJ0eUxpbmVzLnN0YXJ0ID4gdGhpcy5fbGFzdFNlbGVjdGlvbi5z
dGFydExpbmUgfHwgZGlydHlMaW5lcy5lbmQgPCB0aGlzLl9sYXN0U2VsZWN0aW9uLmVuZExpbmUp
CisgICAgICAgIGlmIChzdGFydExpbmUgPiB0aGlzLl9sYXN0U2VsZWN0aW9uLnN0YXJ0TGluZSB8
fCBlbmRMaW5lIDwgdGhpcy5fbGFzdFNlbGVjdGlvbi5lbmRMaW5lKQogICAgICAgICAgICAgcmV0
dXJuIG51bGw7CiAKICAgICAgICAgdGV4dElucHV0RGF0YSA9IHRleHRJbnB1dERhdGEgfHwgIiI7
Ci0gICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2xhc3RTZWxlY3Rpb24ubm9ybWFsaXplKCk7Ci0g
ICAgICAgIGlmIChpc0JhY2tzcGFjZSAmJiByYW5nZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
YW5nZSA9IHRoaXMuX3RleHRNb2RlbC5ncm93UmFuZ2VMZWZ0KHJhbmdlKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXNEZWxldGUgJiYgcmFuZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmFuZ2UgPSB0
aGlzLl90ZXh0TW9kZWwuZ3Jvd1JhbmdlUmlnaHQocmFuZ2UpOworICAgICAgICB2YXIgc2VsZWN0
aW9uID0gdGhpcy5fbGFzdFNlbGVjdGlvbi5ub3JtYWxpemUoKTsKKyAgICAgICAgdmFyIHJhbmdl
OworICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYgc2VsZWN0aW9uLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuZ3Jvd1JhbmdlTGVmdChzZWxlY3Rpb24p
OworICAgICAgICAgICAgaWYgKHJhbmdlLnN0YXJ0TGluZSA8IHNlbGVjdGlvbi5zdGFydExpbmUp
IHsKKyAgICAgICAgICAgICAgICBsaW5lcy51bnNoaWZ0KCIiKTsKKyAgICAgICAgICAgICAgICBz
dGFydExpbmUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpc0RlbGV0ZSAm
JiBzZWxlY3Rpb24uaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByYW5nZSA9IHRoaXMuX3RleHRN
b2RlbC5ncm93UmFuZ2VSaWdodChzZWxlY3Rpb24pOworICAgICAgICAgICAgaWYgKHJhbmdlLmVu
ZExpbmUgPiBzZWxlY3Rpb24uZW5kTGluZSkgeworICAgICAgICAgICAgICAgIGxpbmVzLnB1c2go
IiIpOworICAgICAgICAgICAgICAgIGVuZExpbmUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICByYW5nZSA9IHNlbGVjdGlvbjsKIAogICAgICAgICAvLyBXZSB3
aWxsIGNsb25lIHRleHQgbW9kZWwgYW5kIHJlcGxhY2UgbGFzdCBzZWxlY3Rpb24gd2l0aCB0ZXh0
IGlucHV0IGRhdGEgdGhlcmUuCi0gICAgICAgIHZhciBkb21Nb2RlbCA9IHRoaXMuX3RleHRNb2Rl
bC5zbGljZShzdGFydExpbmUsIGVuZExpbmUpOworICAgICAgICB2YXIgZG9tTW9kZWwgPSB0aGlz
Ll90ZXh0TW9kZWwuc2xpY2Uoc3RhcnRMaW5lLCBlbmRMaW5lICsgMSk7CiAgICAgICAgIGRvbU1v
ZGVsLmVkaXRSYW5nZShyYW5nZS5zaGlmdCgtc3RhcnRMaW5lKSwgdGV4dElucHV0RGF0YSk7CiAK
ICAgICAgICAgLy8gVGhlbiB3ZSdsbCB0ZXN0IGlmIHRoaXMgbmV3IG1vZGVsIG1hdGNoZXMgdGhl
IERPTSBsaW5lcy4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7ICBpIDwgZG9tTW9kZWwubGluZXND
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZG9tTW9kZWwubGluZShpKSAhPT0gbGluZXNb
aV0pCisgICAgICAgIGZvciAodmFyIGkgPSAxOyAgaSA8IGRvbU1vZGVsLmxpbmVzQ291bnQgLSAx
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChkb21Nb2RlbC5saW5lKGkpICE9PSBsaW5lc1tpIC0g
MV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm8ocmFuZ2UsIHRl
eHRJbnB1dERhdGEpOwogICAgIH0sCiAKLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0g
ZGlydHlMaW5lcwotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gZW5kTGluZQotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVz
Ci0gICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZv
fQotICAgICAqLwotICAgIF9ndWVzc0VkaXRSYW5nZUJhc2VkT25EaWZmOiBmdW5jdGlvbihkaXJ0
eUxpbmVzLCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKQorICAgIF9hc3NlcnRET01NYXRjaGVz
VGV4dE1vZGVsOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICAvLyBUcnkgdG8gZGVjcmVhc2Ug
dGhlIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGJ5IGxpbmVzLCBpZiBwb3NzaWJsZS4KLSAgICAgICAg
dmFyIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgd2hpbGUgKHN0YXJ0TGluZSA8IGRpcnR5TGlu
ZXMuc3RhcnQgJiYgc3RhcnRPZmZzZXQgPCBsaW5lcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlm
ICh0aGlzLl90ZXh0TW9kZWwubGluZShzdGFydExpbmUpICE9PSBsaW5lc1tzdGFydE9mZnNldF0p
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICArK3N0YXJ0T2Zmc2V0OwotICAg
ICAgICAgICAgKytzdGFydExpbmU7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0
b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKKyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAg
ICB2YXIgZW5kT2Zmc2V0ID0gbGluZXMubGVuZ3RoOwotICAgICAgICB3aGlsZSAoZW5kTGluZSA+
IGRpcnR5TGluZXMuZW5kICYmIGVuZE9mZnNldCA+IHN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAg
ICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUoZW5kTGluZSAtIDEpICE9PSBsaW5lc1tlbmRPZmZz
ZXQgLSAxXSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC0tZW5kT2Zmc2V0
OwotICAgICAgICAgICAgLS1lbmRMaW5lOwotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBs
aW5lcy5zbGljZShzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLQotICAgICAgICAvLyBUcnkgdG8g
ZGVjcmVhc2UgdGhlIHJhbmdlIGJlaW5nIHJlcGxhY2VkIGJ5IGNvbHVtbiBvZmZzZXRzLCBpZiBw
b3NzaWJsZS4KLSAgICAgICAgdmFyIHN0YXJ0Q29sdW1uID0gMDsKLSAgICAgICAgdmFyIGVuZENv
bHVtbiA9IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGVuZExpbmUgLSAxKTsKLSAgICAgICAg
aWYgKGxpbmVzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgIHZhciBsaW5lMSA9IHRoaXMuX3Rl
eHRNb2RlbC5saW5lKHN0YXJ0TGluZSk7Ci0gICAgICAgICAgICB2YXIgbGluZTIgPSBsaW5lc1sw
XTsKLSAgICAgICAgICAgIHdoaWxlIChsaW5lMVtzdGFydENvbHVtbl0gJiYgbGluZTFbc3RhcnRD
b2x1bW5dID09PSBsaW5lMltzdGFydENvbHVtbl0pCi0gICAgICAgICAgICAgICAgKytzdGFydENv
bHVtbjsKLSAgICAgICAgICAgIGxpbmVzWzBdID0gbGluZTIuc3Vic3RyaW5nKHN0YXJ0Q29sdW1u
KTsKLQotICAgICAgICAgICAgbGluZTEgPSB0aGlzLl90ZXh0TW9kZWwubGluZShlbmRMaW5lIC0g
MSk7Ci0gICAgICAgICAgICBsaW5lMiA9IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdOwotICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbmRDb2x1bW4gJiYgaSA8IGxpbmUyLmxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0TGluZSA9PT0gZW5kTGluZSAtIDEgJiYg
ZW5kQ29sdW1uIC0gaSA8PSBzdGFydENvbHVtbikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmUxW2VuZENvbHVtbiAtIGkgLSAxXSAhPT0gbGluZTJb
bGluZTIubGVuZ3RoIC0gaSAtIDFdKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICAgICAgZW5kQ29sdW1u
IC09IGk7Ci0gICAgICAgICAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0gPSBsaW5lMi5z
dWJzdHJpbmcoMCwgbGluZTIubGVuZ3RoIC0gaSk7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRo
aXMuZWxlbWVudC5pbm5lclRleHQgPT09IHRoaXMuX3RleHRNb2RlbC50ZXh0KCkgKyAiXG4iLCAi
RE9NIGRvZXMgbm90IG1hdGNoIG1vZGVsLiIpOworICAgICAgICBmb3IgKHZhciBsaW5lUm93ID0g
dGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5l
eHRTaWJsaW5nKSB7CisgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IGxpbmVSb3cubGluZU51
bWJlcjsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbGluZU51bWJlciAhPT0gIm51bWJlciIpIHsK
KyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIk5vIGxpbmUgbnVtYmVyIG9uIGxpbmUgcm93
Iik7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobGluZVJvdy5fY2h1bmspIHsKKyAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBsaW5l
Um93Ll9jaHVuazsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmFzc2VydChsaW5lTnVtYmVyID09
PSBjaHVuay5zdGFydExpbmUpOworICAgICAgICAgICAgICAgIHZhciBjaHVua1RleHQgPSB0aGlz
Ll90ZXh0TW9kZWwuY29weVJhbmdlKG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKGNodW5rLnN0
YXJ0TGluZSwgMCwgY2h1bmsuZW5kTGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3Ro
KGNodW5rLmVuZExpbmUgLSAxKSkpOworICAgICAgICAgICAgICAgIGlmIChjaHVua1RleHQgIT09
IGxpbmVSb3cudGV4dENvbnRlbnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2Fybigi
Q2h1bmsgaXMgbm90IG1hdGNoaW5nOiAlZCAlTyIsIGxpbmVOdW1iZXIsIGxpbmVSb3cpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKSAhPT0g
bGluZVJvdy50ZXh0Q29udGVudCkKKyAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkxpbmUg
aXMgbm90IG1hdGNoaW5nOiAlZCAlTyIsIGxpbmVOdW1iZXIsIGxpbmVSb3cpOwogICAgICAgICB9
Ci0KLSAgICAgICAgdmFyIHJhbmdlOwotICAgICAgICBpZiAobGluZXMubGVuZ3RoID09PSAwICYm
IGVuZExpbmUgPCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKLSAgICAgICAgICAgIHJhbmdl
ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCAwLCBlbmRMaW5lLCAwKTsK
LSAgICAgICAgZWxzZSBpZiAobGluZXMubGVuZ3RoID09PSAwICYmIHN0YXJ0TGluZSA+IDApCi0g
ICAgICAgICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSAt
IDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHN0YXJ0TGluZSAtIDEpLCBlbmRMaW5lIC0g
MSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoZW5kTGluZSAtIDEpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExp
bmUsIHN0YXJ0Q29sdW1uLCBlbmRMaW5lIC0gMSwgZW5kQ29sdW1uKTsKLSAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm8ocmFuZ2UsIGxpbmVz
LmpvaW4oIlxuIikpOwogICAgIH0sCiAKICAgICAvKioKQEAgLTIzNDQsNyArMjMxNiw3IEBAIFdl
Ykluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFy
IGZpcnN0TGluZVJvdzsKICAgICAgICAgaWYgKGZpcnN0Q2h1bmtOdW1iZXIpIHsKICAgICAgICAg
ICAgIHZhciBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlciAtIDFdOwot
ICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5nZXRFeHBh
bmRlZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCAtIDEpIDogY2h1
bmsuZWxlbWVudDsKKyAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8g
Y2h1bmsuZXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQg
LSAxKSA6IGNodW5rLmVsZW1lbnQ7CiAgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExp
bmVSb3cubmV4dFNpYmxpbmc7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZmlyc3RMaW5l
Um93ID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CkBAIC0yMzU2LDcgKzIzMjgsNyBAQCBX
ZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB2YXIgbGluZU51bWJlciA9IGNodW5rLnN0YXJ0TGlu
ZTsKICAgICAgICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7IGxpbmVSb3cg
JiYgbGluZU51bWJlciA8IGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQ7IGxpbmVS
b3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmVSb3cu
bGluZU51bWJlciAhPT0gbGluZU51bWJlciB8fCBsaW5lUm93ICE9PSBjaHVuay5nZXRFeHBhbmRl
ZExpbmVSb3cobGluZU51bWJlcikgfHwgbGluZVJvdy50ZXh0Q29udGVudCAhPT0gdGhpcy5fdGV4
dE1vZGVsLmxpbmUobGluZU51bWJlcikgfHwgIWxpbmVSb3cuZmlyc3RDaGlsZCkKKyAgICAgICAg
ICAgICAgICBpZiAobGluZVJvdy5saW5lTnVtYmVyICE9PSBsaW5lTnVtYmVyIHx8IGxpbmVSb3cg
IT09IGNodW5rLmV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKSB8fCBsaW5lUm93LnRleHRDb250
ZW50ICE9PSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVyKSB8fCAhbGluZVJvdy5maXJz
dENoaWxkKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICArK2xp
bmVOdW1iZXI7CiAgICAgICAgICAgICB9CkBAIC0yMzg3LDcgKzIzNTksNyBAQCBXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBmaXJzdFVu
bW9kaWZpZWRMaW5lUm93ID0gbnVsbDsKICAgICAgICAgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtz
W2xhc3RDaHVua051bWJlciArIDFdOwogICAgICAgICBpZiAoY2h1bmspCi0gICAgICAgICAgICBm
aXJzdFVubW9kaWZpZWRMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5nZXRFeHBhbmRl
ZExpbmVSb3coY2h1bmsuc3RhcnRMaW5lKSA6IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAgICBm
aXJzdFVubW9kaWZpZWRMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5leHBhbmRlZExp
bmVSb3coY2h1bmsuc3RhcnRMaW5lKSA6IGNodW5rLmVsZW1lbnQ7CiAKICAgICAgICAgd2hpbGUg
KGZpcnN0TGluZVJvdyAmJiBmaXJzdExpbmVSb3cgIT09IGZpcnN0VW5tb2RpZmllZExpbmVSb3cp
IHsKICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gZmlyc3RMaW5lUm93OwpAQCAtMjQ0MSwzMiAr
MjQxMywyNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVz
Ci0gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50CisgICAgICogQHBhcmFtIHtOb2RlfSBm
cm9tCisgICAgICogQHBhcmFtIHtOb2RlfSB0bworICAgICAqIEByZXR1cm4ge0FycmF5LjxzdHJp
bmc+fQogICAgICAqLwotICAgIF9jb2xsZWN0TGluZXNGcm9tRGl2OiBmdW5jdGlvbihsaW5lcywg
ZWxlbWVudCkKKyAgICBfY29sbGVjdExpbmVzRnJvbURPTTogZnVuY3Rpb24oZnJvbSwgdG8pCiAg
ICAgewogICAgICAgICB2YXIgdGV4dENvbnRlbnRzID0gW107Ci0gICAgICAgIHZhciBub2RlID0g
ZWxlbWVudC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgPyBlbGVtZW50IDogZWxlbWVudC50
cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAg
ICAgICAgaWYgKGVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50ID09PSBub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmc7CisgICAgICAgIGZvciAodmFyIG5vZGUg
PSBmcm9tID8gZnJvbS5uZXh0U2libGluZyA6IHRoaXMuX2NvbnRhaW5lcjsgbm9kZSAmJiBub2Rl
ICE9PSB0bzsgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZSh0aGlzLl9jb250YWluZXIpKSB7
CisgICAgICAgICAgICBpZiAobm9kZS5faXNEZWNvcmF0aW9uc0VsZW1lbnQpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZS5ub2Rl
TmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYnIiKQogICAgICAgICAgICAgICAgIHRleHRDb250ZW50
cy5wdXNoKCJcbiIpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9k
ZS5URVhUX05PREUpCiAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRzLnB1c2gobm9kZS50ZXh0
Q29udGVudCk7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKGVsZW1l
bnQpOwogICAgICAgICB9CiAKICAgICAgICAgdmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRz
LmpvaW4oIiIpOwogICAgICAgICAvLyBUaGUgbGFzdCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291
bnQiIGluIGEgRElWLgogICAgICAgICB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2Uo
L1xuJC8sICIiKTsKIAotICAgICAgICB0ZXh0Q29udGVudHMgPSB0ZXh0Q29udGVudC5zcGxpdCgi
XG4iKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Q29udGVudHMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBsaW5lcy5wdXNoKHRleHRDb250ZW50c1tpXSk7CisgICAgICAgIHJl
dHVybiB0ZXh0Q29udGVudC5zcGxpdCgiXG4iKTsKICAgICB9LAogCiAgICAgX2hhbmRsZVNlbGVj
dGlvbkNoYW5nZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0yNDk0LDYgKzI0NjEsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuayA9IGZ1bmN0aW9uKGNodW5rZWRQYW5lbCwgc3RhcnRM
aW5lLCBlbmRMaW5lKQogICAgIHRoaXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwogICAgIHRoaXMuZWxlbWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOwogICAgIHRo
aXMuZWxlbWVudC5jbGFzc05hbWUgPSAid2Via2l0LWxpbmUtY29udGVudCI7CisgICAgdGhpcy5l
bGVtZW50Ll9jaHVuayA9IHRoaXM7CiAKICAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7
CiAgICAgZW5kTGluZSA9IE1hdGgubWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRM
aW5lKTsKQEAgLTI1MTQsNiArMjQ4Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNo
dW5rLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmRlY29yYXRp
b25zRWxlbWVudCkgewogICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0Vs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgICAgICB0
aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1k
ZWNvcmF0aW9ucyI7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxl
bWVudC5faXNEZWNvcmF0aW9uc0VsZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQu
YXBwZW5kQ2hpbGQoZGVjb3JhdGlvbik7CkBAIC0yNTYxLDYgKzI1MzAsMTQgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhp
cy5fc3RhcnRMaW5lOwogICAgIH0sCiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9
CisgICAgICovCisgICAgZ2V0IGVuZExpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudDsKKyAgICB9LAorCiAgICAgc2V0IHN0YXJ0TGlu
ZShzdGFydExpbmUpCiAgICAgewogICAgICAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7
CkBAIC0yNjU4LDEwICsyNjM1LDIyIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5r
LnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIHBvdGVu
dGlhbGx5IGRhbWFnZWQgLyBpbmNvbnNpc3RlbnQgY2h1bmsKKyAgICAgKiBAcGFyYW0ge251bWJl
cn0gbGluZU51bWJlcgorICAgICAqIEByZXR1cm4gez9Ob2RlfQorICAgICAqLworICAgIGxpbmVS
b3dDb250YWluaW5nTGluZTogZnVuY3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlm
ICghdGhpcy5fZXhwYW5kZWQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICAg
ICAgICByZXR1cm4gdGhpcy5leHBhbmRlZExpbmVSb3cobGluZU51bWJlcik7CisgICAgfSwKKwor
ICAgIC8qKgogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHJldHVy
biB7RWxlbWVudH0KICAgICAgKi8KLSAgICBnZXRFeHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIpCisgICAgZXhwYW5kZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAg
IHsKICAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFy
dExpbmUgfHwgbGluZU51bWJlciA+PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkK
ICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMjY4NywzICsyNjc2LDUgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5l
bGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogICAgIH0K
IH0KKworV2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0b3IgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175144</attachid>
            <date>2012-11-19 22:49:21 -0800</date>
            <delta_ts>2012-11-19 23:03:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102688-20121120104709.patch</filename>
            <type>text/plain</type>
            <size>29515</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFjYmFkODE0YmFmZTEz
MWZhZGM5NDg3ZjllZWQzOWUwZGYxYjVmNC4uNTU4YjMxODZmYjFiYzQ0ZDIwY2M2OTViNjgzZTQ3
NjI1OTM1ZDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTE5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNpbXBsaWZ5PyBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbiBpbiB0aGUgZWRpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzaW1wbGlmaWVzIHRoZSBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbi4gRHJpdmUtYnkgbWFr
ZSBfZ2V0U2VsZWN0aW9uIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyLmNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVFbnRlcktl
eS5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5oYW5kbGVFbnRlcktleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hhbmRsZU11dGF0
aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Nv
bGxlY3RMaW5lc0Zyb21ET00pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLmdldCBlbmRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5saW5lUm93Q29udGFpbmluZ0xpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmV4cGFuZGVkTGlu
ZVJvdyk6CisKIDIwMTItMTEtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRG9uJ3Qgc2F5IHRoZXJlIGFyZSBkaXJ0eSBvdmVybGF5IHNjcm9sbGJh
cnMgd2hlbiB0aGV5IGFyZSBjbGlwcGVkIG91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKaW5kZXggOTQxZDQyNTNj
YzVmZWQ1YjA2Mzg4N2Y5M2FhYTgyYzA0MTBkNDdmNS4uMDhhNGQ0ZTNlMDk0NThiY2FjNzE3NGVm
ZTYwMTk1ZDFhYmNiOGZkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCkBAIC05Myw2ICs5Myw3IEBAIFdlYklu
c3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwg
Zm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhp
cyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhp
cy5faGFuZGxlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5faGFuZGxlVGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtNDI2LDYgKzQyNywx
MSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2RlID0gZS5rZXlDb2RlOwogICAgIH0sCiAKKyAg
ICBfaGFuZGxlQ3V0OiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
Ll9rZXlEb3duQ29kZSA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRl
LmNvZGU7CisgICAgfSwKKwogICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoImEiKTsKQEAgLTgzNiw3ICs4NDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gY29tcGFy
ZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVlLCBsaW5lTnVtYmVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1i
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6
IDE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4
Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMs
IGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CkBAIC0xNDg2LDcgKzE0OTIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghaW5k
ZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuYmVnaW5VcGRh
dGVzKCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKICAgICAgICAgdmFyIGxp
bmVCcmVhayA9IHRoaXMuX3RleHRNb2RlbC5saW5lQnJlYWs7CiAgICAgICAgIHZhciBuZXdSYW5n
ZTsKQEAgLTE1MDIsNyArMTUwOCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdSYW5nZSA9IHRo
aXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIGxpbmVCcmVhayArIGluZGVudCk7CiAKLSAg
ICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwog
ICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLmNvbGxhcHNlVG9FbmQoKSwg
dHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgKzE3MDAsNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxp
bmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNo
dW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVu
ay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQogICAgICAgICAgICAgICAgICAgICBjaHVu
ayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwog
ICAgICAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVt
YmVyKSB7CkBAIC0xODEzLDkgKzE4MTksMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0gez9O
b2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKICAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlfQogICAgICAqLwotICAgIF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICBf
Z2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCkBAIC0xODIzLDggKzE4MzAsOCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFNlbGVjdGlvbiBt
YXkgYmUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgogICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5l
ci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlz
QW5jZXN0b3Ioc2VsZWN0aW9uLmZvY3VzTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24u
YW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCk7Ci0gICAgICAgIHZhciBlbmQgPSBz
ZWxlY3Rpb24uaXNDb2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24o
c2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwg
c2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOworICAgICAgICB2
YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25U
b1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldCwgbGFz
dFVuZGFtYWdlZExpbmVSb3cpOwogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CiAg
ICAgfSwKIApAQCAtMTgzNSw2ICsxODQyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwogICAgICAgICB2YXIgZW5k
ID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJh
bmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQu
Y29udGFpbmVyLCBlbmQub2Zmc2V0KTsKQEAgLTE4NTMsMzQgKzE4NjEsNjAgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7Tm9kZX0gY29udGFpbmVyCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldAorICAg
ICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1hZ2VkTGluZVJvdwogICAgICAqLwotICAgIF9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkKKyAgICBfc2Vs
ZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQsIGxhc3RVbmRhbWFn
ZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFp
bmVyICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVt
bjogMCB9OwogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zm
c2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxp
bmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFpbmVyKTsKLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIgPT09IGxpbmVS
b3cgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVk
IG9uIHRoZSBkYW1hZ2VkIERPTSAod2hlbiBET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwpLgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGNvdW50aW5nIGxpbmVzIGZyb20gdGhlIGZpcnN0IHVu
ZGFtYWdlZCBsaW5lIGlmIGl0IGlzIGdpdmVuLgorICAgICAgICB2YXIgbGluZU51bWJlcjsKKyAg
ICAgICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAgIHZhciBub2RlOworICAgICAgICB2YXIgc2Nv
cGVOb2RlOworICAgICAgICBpZiAobGFzdFVuZGFtYWdlZExpbmVSb3cgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAvLyBMYXN0IHVuZGFtYWdlZCByb3cgaXMgZ2l2ZW4sIGJ1dCBpcyBudWxsIC0g
Zm9yY2UgdHJhdmVyc2UgZnJvbSB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICBub2RlID0gdGhp
cy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9j
b250YWluZXI7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgfSBlbHNlIGlm
IChsYXN0VW5kYW1hZ2VkTGluZVJvdyAmJiB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNv
bnRhaW5lcikgIT09IGxhc3RVbmRhbWFnZWRMaW5lUm93KSB7CisgICAgICAgICAgICAgLy8gU3Rh
cnQgd2l0aCB0aGUgbm9kZSBmb2xsb3dpbmcgdW5kYW1hZ2VkIHJvdy4gSXQgY29ycmVzcG9uZHMg
dG8gbGluZU51bWJlciArIDEuCisgICAgICAgICAgICBub2RlID0gbGFzdFVuZGFtYWdlZExpbmVS
b3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9jb250YWluZXI7
CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gbGFzdFVuZGFtYWdlZExpbmVSb3cubGluZU51bWJl
ciArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBET00gaXMgY29uc2lzdGVu
dCAob3Igd2UgYmVsb25nIHRvIHRoZSBmaXJzdCBkYW1hZ2VkIHJvdyktIGxvb2t1cCB0aGUgcm93
IHdlIGJlbG9uZyB0byBhbmQgc3RhcnQgd2l0aCBpdC4KKyAgICAgICAgICAgIG5vZGUgPSB0aGlz
Ll9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNvbnRhaW5lcik7CisgICAgICAgICAgICBzY29wZU5v
ZGUgPSBub2RlOworICAgICAgICAgICAgbGluZU51bWJlciA9IG5vZGUubGluZU51bWJlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZhc3QgcmV0dXJuIHRoZSBsaW5lIHN0YXJ0LgorICAgICAg
ICBpZiAoY29udGFpbmVyID09PSBub2RlICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJl
dHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwogCi0gICAgICAgIC8vIFRoaXMg
bWF5IGJlIGNodW5rIGFuZCBjaHVua3MgbWF5IGNvbnRhaW4gXG4uCi0gICAgICAgIHZhciBjb2x1
bW4gPSAwOwotICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cubm9kZVR5cGUgPT09IE5vZGUuVEVY
VF9OT0RFID8gbGluZVJvdyA6IGxpbmVSb3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7
Ci0gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgewotICAgICAgICAg
ICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuY2hh
ckF0KGkpID09PSAiXG4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uKys7CisgICAgICAgIC8vIFRyYXZlcnNlIHRleHQgYW5k
IGluY3JlbWVudCBsaW5lTnVtYmVyIC8gY29sdW1uLgorICAgICAgICBmb3IgKDsgbm9kZSAmJiBu
b2RlICE9PSBjb250YWluZXI7IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoc2NvcGVOb2Rl
KSkgeworICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImJy
IikgeworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICBjb2x1
bW4gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRF
WFRfTk9ERSkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbisrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAg
ICAgICB9CiAKKyAgICAgICAgLy8gV2UgcmVhY2hlZCBvdXIgY29udGFpbmVyIG5vZGUsIHRyYXZl
cnNlIHdpdGhpbiBpdHNlbGYgdW50aWwgd2UgcmVhY2ggZ2l2ZW4gb2Zmc2V0LgogICAgICAgICBp
ZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNldCkgewogICAgICAgICAgICAgdmFyIHRleHQg
PSBub2RlLnRleHRDb250ZW50OwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZz
ZXQ7ICsraSkgewpAQCAtMTkwMiw3ICsxOTM2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5j
aHVua0ZvckxpbmUobGluZSk7CiAgICAgICAgIC8vIE9uZS1saW5lZCBjb2xsYXBzZWQgY2h1bmtz
IG1heSBzdGlsbCBzdGF5IGhpZ2hsaWdodGVkLgotICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5r
LmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDogY2h1bmsuZ2V0RXhwYW5kZWRMaW5l
Um93KGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEg
PyBjaHVuay5lbGVtZW50IDogY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmUpOwogICAgICAgICBp
ZiAobGluZVJvdykKICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0gbGluZVJvdy5yYW5n
ZUJvdW5kYXJ5Rm9yT2Zmc2V0KGNvbHVtbik7CiAgICAgICAgIGVsc2UgewpAQCAtMTk0OSw3ICsx
OTgzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
CiAgICAgICAgIHZhciBzcGFuID0gdGhpcy5fY2FjaGVkU3BhbnMucG9wKCkgfHwgZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
IiArIGNsYXNzTmFtZTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0
RWRpdG9yKSAvLyBGb3IgcGFpbnQgZGVidWdnaW5nLgorICAgICAgICBpZiAoZmFsc2UpIC8vIEZv
ciBwYWludCBkZWJ1Z2dpbmcuCiAgICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImRlYnVn
LWZhZGVvdXQiKTsKICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAg
IGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNwYW4sIG9sZENoaWxkKTsKQEAgLTIwMDMsMTEgKzIwMzcs
MTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAqLwogICAgIF9oYW5kbGVNdXRhdGlvbnM6IGZ1bmN0aW9uKG11dGF0aW9ucykKICAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KQorICAgICAgICBpZiAodGhpcy5f
cmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlEb3duQ29kZTsKICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEFubmloaWxhdGUgbm9vcCBC
UiBhZGRpdGlvbiArIHJlbW92YWwgdGhhdCB0YWtlcyBwbGFjZSB1cG9uIGxpbmUgcmVtb3ZhbC4K
ICAgICAgICAgdmFyIGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLnNsaWNlKCk7CkBAIC0y
MDQ5LDE0ICsyMDgyLDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVzLmVuZCA9IE1hdGgubWF4KGRpcnR5
TGluZXMuZW5kLCBsaW5lcy5lbmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAg
ICAgaWYgKGRpcnR5TGluZXMpIHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yYW5nZVRvTWFy
azsKICAgICAgICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRlcyhkaXJ0eUxpbmVzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikK
LSAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVtZW50LmlubmVyVGV4dCA9PT0gdGhp
cy5fdGV4dE1vZGVsLnRleHQoKSArICJcbiIsICJET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwuIik7
CisgICAgICAgIHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsKKworICAgICAgICBk
ZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMjA3NiwyOSAr
MjEwOSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0aGlz
Ll9yZWFkT25seSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5lUm93LmxpbmVOdW1iZXIgIT09ICJu
dW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgaWYgKHRhcmdldCA9
PT0gbGluZVJvdyAmJiBtdXRhdGlvbi50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvbi5h
ZGRlZE5vZGVzLmxlbmd0aCkgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5ld2x5
IGluc2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgotICAgICAgICAgICAgZGVsZXRl
IGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGFydExpbmUg
PSAwOwotICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7IHJvdyA9IHJvdy5wcmV2
aW91c1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09
ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5lID0gcm93LmxpbmVOdW1iZXI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIGZvciAodmFyIHJvdyA9
IGxpbmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRTaWJsaW5nKSB7Ci0gICAg
ICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiByb3cubGlu
ZU51bWJlciA+IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAgIGVuZExpbmUgPSByb3cubGlu
ZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgICAgICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2
YXIgZW5kTGluZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJvdy5fY2h1bmsuZW5kTGluZSAtIDEg
OiBsaW5lUm93LmxpbmVOdW1iZXI7CiAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydExpbmUs
IGVuZDogZW5kTGluZSB9OwogICAgIH0sCiAKQEAgLTIxMDcsMzggKzIxMjIsMzEgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9h
cHBseURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGluZXMpCiAgICAgewotICAgICAgICB2YXIg
Zmlyc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0
YXJ0KTsKLSAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVu
a051bWJlcl0uc3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50OworICAgICAgICB2YXIgbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0
eUxpbmVzLnN0YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdl
ZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8vIENhbiBiZSB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudAogCi0gICAgICAgIC8vIENvbGxlY3QgbGluZXMuCi0gICAgICAgIHZhciBm
aXJzdExpbmVSb3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7Ci0gICAgICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAg
ICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5k
ZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5r
LmVsZW1lbnQ7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNp
Ymxpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5f
Y29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkQ2h1bmsgPSBs
YXN0VW5kYW1hZ2VkTGluZU51bWJlciA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhp
cy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGFzdFVuZGFtYWdlZExpbmVO
dW1iZXIpXSA6IG51bGw7CisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZENodW5rID0gZmlyc3RV
bmRhbWFnZWRMaW5lTnVtYmVyID49IDAgPyB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVt
YmVyRm9yTGluZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7CiAKLSAgICAgICAg
dmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7
IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5l
TnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxp
bmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhh
dCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsu
Ci0gICAgICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5n
dGg7Ci0gICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93
KTsKLSAgICAgICAgfQorICAgICAgICB2YXIgY29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5k
YW1hZ2VkQ2h1bmsgPyBsYXN0VW5kYW1hZ2VkQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGxh
c3RVbmRhbWFnZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAgIHZhciBjb2xsZWN0TGluZXNU
b05vZGUgPSBmaXJzdFVuZGFtYWdlZENodW5rID8gZmlyc3RVbmRhbWFnZWRDaHVuay5saW5lUm93
Q29udGFpbmluZ0xpbmUoZmlyc3RVbmRhbWFnZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAg
IHZhciBsaW5lcyA9IHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21ET00oY29sbGVjdExpbmVzRnJvbU5v
ZGUsIGNvbGxlY3RMaW5lc1RvTm9kZSk7CiAKLSAgICAgICAgdmFyIGVkaXRJbmZvID0gdGhpcy5f
Z3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uKGRpcnR5TGluZXMsIHN0YXJ0TGluZSwgZW5k
TGluZSwgbGluZXMpOwotICAgICAgICBpZiAoIWVkaXRJbmZvKQotICAgICAgICAgICAgZWRpdElu
Zm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25EaWZmKGRpcnR5TGluZXMsIHN0YXJ0TGlu
ZSwgZW5kTGluZSwgbGluZXMpOworICAgICAgICB2YXIgc3RhcnRMaW5lID0gZGlydHlMaW5lcy5z
dGFydDsKKyAgICAgICAgdmFyIGVuZExpbmUgPSBkaXJ0eUxpbmVzLmVuZDsKKworICAgICAgICB2
YXIgZWRpdEluZm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb24oc3RhcnRM
aW5lLCBlbmRMaW5lLCBsaW5lcyk7CisgICAgICAgIGlmICghZWRpdEluZm8pIHsKKyAgICAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKKyAgICAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oIkZhbGxpbmcgYmFjayB0byBleHBlbnNpdmUgZWRpdCIpOworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5l
LCAwLCBlbmRMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lKSk7CisgICAg
ICAgICAgICBlZGl0SW5mbyA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRp
dEluZm8ocmFuZ2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAgICAgICB9CiAKICAgICAgICAgaWYg
KHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UoZWRpdEluZm8ucmFuZ2UpID09PSBlZGl0SW5mby50
ZXh0KQogICAgICAgICAgICAgcmV0dXJuOyAvLyBOb29wCiAKLSAgICAgICAgdmFyIHNlbGVjdGlv
biA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5f
Z2V0U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKIAogICAgICAgICAvLyBVbmluZGVu
dCBhZnRlciBibG9jawogICAgICAgICBpZiAoZWRpdEluZm8udGV4dCA9PT0gIn0iICYmIGVkaXRJ
bmZvLnJhbmdlLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNFbXB0eSgpICYmICF0aGlzLl90ZXh0
TW9kZWwubGluZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50cmltKCkpIHsKQEAgLTIxNTYsMzAg
KzIxNjQsMjcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0g
ewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGlydHlMaW5lcwog
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAgICAgKiBAcGFyYW0ge251bWJlcn0g
ZW5kTGluZQogICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVzCiAgICAgICogQHJl
dHVybiB7P1dlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KICAgICAgKi8K
LSAgICBfZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uOiBmdW5jdGlvbihkaXJ0eUxpbmVz
LCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKQorICAgIF9ndWVzc0VkaXRSYW5nZUJhc2VkT25T
ZWxlY3Rpb246IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpCiAgICAgewotICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIHJlcGxhY2luZyBsYXN0IHNlbGVjdGlvbiB3aXRoIHRleHRJ
bnB1dCBkYXRhIHJlc3VsdHMgaW4gcHJlc2VudCBET00uCi0gICAgICAgIC8vIElmIHRoYXQgaXMg
c28sIHdlIGhhdmUgcHJlY2lzZSBpbnB1dCBmb3IgdGhlIGVkaXRSYW5nZSBjYWxsLgorICAgICAg
ICAvLyBBbmFseXplIGlucHV0IGRhdGEKICAgICAgICAgdmFyIHRleHRJbnB1dERhdGEgPSB0aGlz
Ll90ZXh0SW5wdXREYXRhOwogICAgICAgICBkZWxldGUgdGhpcy5fdGV4dElucHV0RGF0YTsKICAg
ICAgICAgdmFyIGlzQmFja3NwYWNlID0gdGhpcy5fa2V5RG93bkNvZGUgPT09IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0LktleXMuQmFja3NwYWNlLmNvZGU7CiAgICAgICAgIHZhciBpc0Rl
bGV0ZSA9IHRoaXMuX2tleURvd25Db2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXlzLkRlbGV0ZS5jb2RlOwotICAgICAgICBkZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7CiAK
ICAgICAgICAgaWYgKCF0ZXh0SW5wdXREYXRhICYmIChpc0RlbGV0ZSB8fCBpc0JhY2tzcGFjZSkp
CiAgICAgICAgICAgICB0ZXh0SW5wdXREYXRhID0gIiI7CiAKKyAgICAgICAgLy8gUmV0dXJuIGlm
IHRoZXJlIGlzIG5vIGlucHV0IGRhdGEgb3Igc2VsZWN0aW9uCiAgICAgICAgIGlmICh0eXBlb2Yg
dGV4dElucHV0RGF0YSA9PT0gInVuZGVmaW5lZCIgfHwgIXRoaXMuX2xhc3RTZWxlY3Rpb24pCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKGRpcnR5TGluZXMuc3RhcnQgPiB0
aGlzLl9sYXN0U2VsZWN0aW9uLnN0YXJ0TGluZSB8fCBkaXJ0eUxpbmVzLmVuZCA8IHRoaXMuX2xh
c3RTZWxlY3Rpb24uZW5kTGluZSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwogCisgICAgICAg
IC8vIEFkanVzdCBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGtleWJvYXJkIGFjdGlvbnMgKGdyb3cg
Zm9yIGJhY2tzcGFjZSwgZXRjLikuCiAgICAgICAgIHRleHRJbnB1dERhdGEgPSB0ZXh0SW5wdXRE
YXRhIHx8ICIiOwogICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9sYXN0U2VsZWN0aW9uLm5vcm1h
bGl6ZSgpOwogICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYgcmFuZ2UuaXNFbXB0eSgpKQpAQCAt
MjE4Nyw3OCArMjE5Miw1MiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGVsc2UgaWYgKGlzRGVsZXRlICYmIHJhbmdlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmdyb3dSYW5nZVJpZ2h0KHJhbmdl
KTsKIAotICAgICAgICAvLyBXZSB3aWxsIGNsb25lIHRleHQgbW9kZWwgYW5kIHJlcGxhY2UgbGFz
dCBzZWxlY3Rpb24gd2l0aCB0ZXh0IGlucHV0IGRhdGEgdGhlcmUuCi0gICAgICAgIHZhciBkb21N
b2RlbCA9IHRoaXMuX3RleHRNb2RlbC5zbGljZShzdGFydExpbmUsIGVuZExpbmUpOwotICAgICAg
ICBkb21Nb2RlbC5lZGl0UmFuZ2UocmFuZ2Uuc2hpZnQoLXN0YXJ0TGluZSksIHRleHRJbnB1dERh
dGEpOworICAgICAgICAvLyBUZXN0IHRoYXQgc2VsZWN0aW9uIGludGVyc2VjdHMgZGFtYWdlZCBs
aW5lcworICAgICAgICBpZiAoc3RhcnRMaW5lID4gcmFuZ2UuZW5kTGluZSB8fCBlbmRMaW5lIDwg
cmFuZ2Uuc3RhcnRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgLy8g
Q2xvbmUgdGV4dCBtb2RlbCBvZiB0aGUgc2l6ZSB0aGF0IGZpdHMgYm90aDogc2VsZWN0aW9uIGFu
ZCB0aGUgZGFtYWdlZCBsaW5lcy4KKyAgICAgICAgdmFyIGNsb25lRnJvbUxpbmUgPSBNYXRoLm1p
bihyYW5nZS5zdGFydExpbmUsIHN0YXJ0TGluZSk7CisgICAgICAgIHZhciBjbG9uZVRvTGluZSA9
IE1hdGgubWluKE1hdGgubWF4KGVuZExpbmUsIHJhbmdlLmVuZExpbmUpICsgMSwgdGhpcy5fdGV4
dE1vZGVsLmxpbmVzQ291bnQpOworICAgICAgICB2YXIgZG9tTW9kZWwgPSB0aGlzLl90ZXh0TW9k
ZWwuc2xpY2UoY2xvbmVGcm9tTGluZSwgY2xvbmVUb0xpbmUpOworICAgICAgICBkb21Nb2RlbC5l
ZGl0UmFuZ2UocmFuZ2Uuc2hpZnQoLWNsb25lRnJvbUxpbmUpLCB0ZXh0SW5wdXREYXRhKTsKIAog
ICAgICAgICAvLyBUaGVuIHdlJ2xsIHRlc3QgaWYgdGhpcyBuZXcgbW9kZWwgbWF0Y2hlcyB0aGUg
RE9NIGxpbmVzLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgIGkgPCBkb21Nb2RlbC5saW5lc0Nv
dW50OyArK2kpIHsKLSAgICAgICAgICAgIGlmIChkb21Nb2RlbC5saW5lKGkpICE9PSBsaW5lc1tp
XSkKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7ICBpIDwgbGluZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIHZhciBtb2RlbEluZGV4ID0gaSArIHN0YXJ0TGluZSAtIGNsb25lRnJvbUxpbmU7
CisgICAgICAgICAgICBpZiAobW9kZWxJbmRleCA8IDAgfHwgbW9kZWxJbmRleCA+PSBkb21Nb2Rl
bC5saW5lc0NvdW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvbU1v
ZGVsLmxpbmUobW9kZWxJbmRleCkgIT09IGxpbmVzW2ldKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yLkVkaXRJbmZvKHJhbmdlLCB0ZXh0SW5wdXREYXRhKTsKICAgICB9LAogCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRpcnR5TGluZXMKLSAgICAgKiBAcGFyYW0g
e251bWJlcn0gc3RhcnRMaW5lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKLSAgICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBsaW5lcwotICAgICAqIEByZXR1cm4ge1dlYkluc3Bl
Y3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KLSAgICAgKi8KLSAgICBfZ3Vlc3NFZGl0
UmFuZ2VCYXNlZE9uRGlmZjogZnVuY3Rpb24oZGlydHlMaW5lcywgc3RhcnRMaW5lLCBlbmRMaW5l
LCBsaW5lcykKKyAgICBfYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbDogZnVuY3Rpb24oKQogICAg
IHsKLSAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBi
eSBsaW5lcywgaWYgcG9zc2libGUuCi0gICAgICAgIHZhciBzdGFydE9mZnNldCA9IDA7Ci0gICAg
ICAgIHdoaWxlIChzdGFydExpbmUgPCBkaXJ0eUxpbmVzLnN0YXJ0ICYmIHN0YXJ0T2Zmc2V0IDwg
bGluZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUoc3Rh
cnRMaW5lKSAhPT0gbGluZXNbc3RhcnRPZmZzZXRdKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgKytzdGFydE9mZnNldDsKLSAgICAgICAgICAgICsrc3RhcnRMaW5lOwotICAg
ICAgICB9CisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0b3Ip
CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGVuZE9mZnNldCA9IGxpbmVzLmxl
bmd0aDsKLSAgICAgICAgd2hpbGUgKGVuZExpbmUgPiBkaXJ0eUxpbmVzLmVuZCAmJiBlbmRPZmZz
ZXQgPiBzdGFydE9mZnNldCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5saW5l
KGVuZExpbmUgLSAxKSAhPT0gbGluZXNbZW5kT2Zmc2V0IC0gMV0pCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAtLWVuZE9mZnNldDsKLSAgICAgICAgICAgIC0tZW5kTGluZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2Uoc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7Ci0KLSAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyBy
ZXBsYWNlZCBieSBjb2x1bW4gb2Zmc2V0cywgaWYgcG9zc2libGUuCi0gICAgICAgIHZhciBzdGFy
dENvbHVtbiA9IDA7Ci0gICAgICAgIHZhciBlbmRDb2x1bW4gPSB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChlbmRMaW5lIC0gMSk7Ci0gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7Ci0g
ICAgICAgICAgICB2YXIgbGluZTEgPSB0aGlzLl90ZXh0TW9kZWwubGluZShzdGFydExpbmUpOwot
ICAgICAgICAgICAgdmFyIGxpbmUyID0gbGluZXNbMF07Ci0gICAgICAgICAgICB3aGlsZSAobGlu
ZTFbc3RhcnRDb2x1bW5dICYmIGxpbmUxW3N0YXJ0Q29sdW1uXSA9PT0gbGluZTJbc3RhcnRDb2x1
bW5dKQotICAgICAgICAgICAgICAgICsrc3RhcnRDb2x1bW47Ci0gICAgICAgICAgICBsaW5lc1sw
XSA9IGxpbmUyLnN1YnN0cmluZyhzdGFydENvbHVtbik7Ci0KLSAgICAgICAgICAgIGxpbmUxID0g
dGhpcy5fdGV4dE1vZGVsLmxpbmUoZW5kTGluZSAtIDEpOwotICAgICAgICAgICAgbGluZTIgPSBs
aW5lc1tsaW5lcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
ZW5kQ29sdW1uICYmIGkgPCBsaW5lMi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlm
IChzdGFydExpbmUgPT09IGVuZExpbmUgLSAxICYmIGVuZENvbHVtbiAtIGkgPD0gc3RhcnRDb2x1
bW4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChsaW5l
MVtlbmRDb2x1bW4gLSBpIC0gMV0gIT09IGxpbmUyW2xpbmUyLmxlbmd0aCAtIGkgLSAxXSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aSkgewotICAgICAgICAgICAgICAgIGVuZENvbHVtbiAtPSBpOwotICAgICAgICAgICAgICAgIGxp
bmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gbGluZTIuc3Vic3RyaW5nKDAsIGxpbmUyLmxlbmd0aCAt
IGkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID09PSB0
aGlzLl90ZXh0TW9kZWwudGV4dCgpICsgIlxuIiwgIkRPTSBkb2VzIG5vdCBtYXRjaCBtb2RlbC4i
KTsKKyAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxk
OyBsaW5lUm93OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykgeworICAgICAgICAgICAg
dmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIGxpbmVOdW1iZXIgIT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCJObyBsaW5lIG51bWJlciBvbiBsaW5lIHJvdyIpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmVSb3cuX2NodW5rKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZVJvdy5fY2h1bms7CisgICAgICAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQobGluZU51bWJlciA9PT0gY2h1bmsuc3RhcnRMaW5lKTsKKyAgICAg
ICAgICAgICAgICB2YXIgY2h1bmtUZXh0ID0gdGhpcy5fdGV4dE1vZGVsLmNvcHlSYW5nZShuZXcg
V2ViSW5zcGVjdG9yLlRleHRSYW5nZShjaHVuay5zdGFydExpbmUsIDAsIGNodW5rLmVuZExpbmUg
LSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChjaHVuay5lbmRMaW5lIC0gMSkpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2h1bmtUZXh0ICE9PSBsaW5lUm93LnRleHRDb250ZW50KQorICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkNodW5rIGlzIG5vdCBtYXRjaGluZzogJWQg
JU8iLCBsaW5lTnVtYmVyLCBsaW5lUm93KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5f
dGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgIT09IGxpbmVSb3cudGV4dENvbnRlbnQpCisgICAg
ICAgICAgICAgICAgY29uc29sZS53YXJuKCJMaW5lIGlzIG5vdCBtYXRjaGluZzogJWQgJU8iLCBs
aW5lTnVtYmVyLCBsaW5lUm93KTsKICAgICAgICAgfQotCi0gICAgICAgIHZhciByYW5nZTsKLSAg
ICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5fdGV4dE1vZGVs
LmxpbmVzQ291bnQpCi0gICAgICAgICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJh
bmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVzLmxl
bmd0aCA9PT0gMCAmJiBzdGFydExpbmUgPiAwKQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxl
bmd0aChzdGFydExpbmUgLSAxKSwgZW5kTGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVu
Z3RoKGVuZExpbmUgLSAxKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gbmV3
IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSAt
IDEsIGVuZENvbHVtbik7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHRU
ZXh0RWRpdG9yLkVkaXRJbmZvKHJhbmdlLCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICB9LAogCiAg
ICAgLyoqCkBAIC0yMzQ0LDcgKzIzMjMsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5Q
YW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBmaXJzdExpbmVSb3c7CiAgICAgICAgIGlm
IChmaXJzdENodW5rTnVtYmVyKSB7CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0
Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9
IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGlu
ZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAgICBm
aXJzdExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmV4cGFuZGVkTGluZVJvdyhjaHVu
ay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50OwogICAg
ICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOwogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJz
dENoaWxkOwpAQCAtMjM1Niw3ICsyMzM1LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
dmFyIGxpbmVOdW1iZXIgPSBjaHVuay5zdGFydExpbmU7CiAgICAgICAgICAgICBmb3IgKHZhciBs
aW5lUm93ID0gZmlyc3RMaW5lUm93OyBsaW5lUm93ICYmIGxpbmVOdW1iZXIgPCBjaHVuay5zdGFy
dExpbmUgKyBjaHVuay5saW5lc0NvdW50OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykg
ewotICAgICAgICAgICAgICAgIGlmIChsaW5lUm93LmxpbmVOdW1iZXIgIT09IGxpbmVOdW1iZXIg
fHwgbGluZVJvdyAhPT0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpIHx8IGxp
bmVSb3cudGV4dENvbnRlbnQgIT09IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpIHx8
ICFsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgaWYgKGxpbmVSb3cubGluZU51
bWJlciAhPT0gbGluZU51bWJlciB8fCBsaW5lUm93ICE9PSBjaHVuay5leHBhbmRlZExpbmVSb3co
bGluZU51bWJlcikgfHwgbGluZVJvdy50ZXh0Q29udGVudCAhPT0gdGhpcy5fdGV4dE1vZGVsLmxp
bmUobGluZU51bWJlcikgfHwgIWxpbmVSb3cuZmlyc3RDaGlsZCkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwogICAgICAgICAgICAgfQpA
QCAtMjM4Nyw3ICsyMzY2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlID0gewogICAgICAgICB2YXIgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IG51bGw7CiAg
ICAgICAgIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXIgKyAxXTsKICAg
ICAgICAgaWYgKGNodW5rKQotICAgICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IGNo
dW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSkg
OiBjaHVuay5lbGVtZW50OworICAgICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IGNo
dW5rLmV4cGFuZGVkID8gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSkgOiBj
aHVuay5lbGVtZW50OwogCiAgICAgICAgIHdoaWxlIChmaXJzdExpbmVSb3cgJiYgZmlyc3RMaW5l
Um93ICE9PSBmaXJzdFVubW9kaWZpZWRMaW5lUm93KSB7CiAgICAgICAgICAgICB2YXIgbGluZVJv
dyA9IGZpcnN0TGluZVJvdzsKQEAgLTI0NDEsMzIgKzI0MjAsMjcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBsaW5lcwotICAgICAqIEBwYXJhbSB7RWxlbWVudH0g
ZWxlbWVudAorICAgICAqIEBwYXJhbSB7Tm9kZX0gZnJvbQorICAgICAqIEBwYXJhbSB7Tm9kZX0g
dG8KKyAgICAgKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0KICAgICAgKi8KLSAgICBfY29sbGVj
dExpbmVzRnJvbURpdjogZnVuY3Rpb24obGluZXMsIGVsZW1lbnQpCisgICAgX2NvbGxlY3RMaW5l
c0Zyb21ET006IGZ1bmN0aW9uKGZyb20sIHRvKQogICAgIHsKICAgICAgICAgdmFyIHRleHRDb250
ZW50cyA9IFtdOwotICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUu
VEVYVF9OT0RFID8gZWxlbWVudCA6IGVsZW1lbnQudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsK
LSAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmRlY29yYXRp
b25zRWxlbWVudCA9PT0gbm9kZSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRT
aWJsaW5nOworICAgICAgICBmb3IgKHZhciBub2RlID0gZnJvbSA/IGZyb20ubmV4dFNpYmxpbmcg
OiB0aGlzLl9jb250YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gdG87IG5vZGUgPSBub2RlLnRyYXZl
cnNlTmV4dE5vZGUodGhpcy5fY29udGFpbmVyKSkgeworICAgICAgICAgICAgaWYgKG5vZGUuX2lz
RGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImJy
IikKICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaCgiXG4iKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQogICAgICAgICAgICAg
ICAgIHRleHRDb250ZW50cy5wdXNoKG5vZGUudGV4dENvbnRlbnQpOwotICAgICAgICAgICAgbm9k
ZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKICAgICAgICAgfQogCiAgICAgICAg
IHZhciB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50cy5qb2luKCIiKTsKICAgICAgICAgLy8gVGhl
IGxhc3QgXG4gKGlmIGFueSkgZG9lcyBub3QgImNvdW50IiBpbiBhIERJVi4KICAgICAgICAgdGV4
dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAiIik7CiAKLSAgICAgICAgdGV4
dENvbnRlbnRzID0gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGV4dENvbnRlbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgbGluZXMucHVz
aCh0ZXh0Q29udGVudHNbaV0pOworICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQgPyB0ZXh0Q29u
dGVudC5zcGxpdCgiXG4iKSA6IFtdOwogICAgIH0sCiAKICAgICBfaGFuZGxlU2VsZWN0aW9uQ2hh
bmdlOiBmdW5jdGlvbihldmVudCkKQEAgLTI0OTQsNiArMjQ2OCw3IEBAIFdlYkluc3BlY3Rvci5U
ZXh0RWRpdG9yTWFpbkNodW5rID0gZnVuY3Rpb24oY2h1bmtlZFBhbmVsLCBzdGFydExpbmUsIGVu
ZExpbmUpCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7
CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CiAgICAgdGhpcy5lbGVt
ZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKKyAgICB0aGlzLmVsZW1lbnQu
X2NodW5rID0gdGhpczsKIAogICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKICAgICBl
bmRMaW5lID0gTWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUpOwpA
QCAtMjUxNCw2ICsyNDg5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJv
dG90eXBlID0gewogICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVt
ZW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgICAgIHRoaXMuZWxl
bWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWRlY29yYXRp
b25zIjsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50Ll9p
c0RlY29yYXRpb25zRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50
LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5hcHBlbmRD
aGlsZChkZWNvcmF0aW9uKTsKQEAgLTI1NjEsNiArMjUzNywxNCBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zdGFy
dExpbmU7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAgICAg
Ki8KKyAgICBnZXQgZW5kTGluZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRM
aW5lICsgdGhpcy5saW5lc0NvdW50OworICAgIH0sCisKICAgICBzZXQgc3RhcnRMaW5lKHN0YXJ0
TGluZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKQEAgLTI2
NTgsMTAgKzI2NDIsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBDYWxsZWQgb24gcG90ZW50aWFsbHkg
ZGFtYWdlZCAvIGluY29uc2lzdGVudCBjaHVuaworICAgICAqIEBwYXJhbSB7bnVtYmVyfSBsaW5l
TnVtYmVyCisgICAgICogQHJldHVybiB7P05vZGV9CisgICAgICovCisgICAgbGluZVJvd0NvbnRh
aW5pbmdMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
Ll9leHBhbmRlZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgICAgICAgIHJl
dHVybiB0aGlzLmV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAgLyoq
CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKICAgICAgKiBAcmV0dXJuIHtFbGVt
ZW50fQogICAgICAqLwotICAgIGdldEV4cGFuZGVkTGluZVJvdzogZnVuY3Rpb24obGluZU51bWJl
cikKKyAgICBleHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewogICAg
ICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkIHx8IGxpbmVOdW1iZXIgPCB0aGlzLnN0YXJ0TGluZSB8
fCBsaW5lTnVtYmVyID49IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50KQogICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CkBAIC0yNjg3LDMgKzI2ODMsNSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgICAgfQogfQorCisv
LyBXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvciA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175147</attachid>
            <date>2012-11-19 23:03:16 -0800</date>
            <delta_ts>2012-11-20 07:04:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102688-20121120110105.patch</filename>
            <type>text/plain</type>
            <size>29401</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFjYmFkODE0YmFmZTEz
MWZhZGM5NDg3ZjllZWQzOWUwZGYxYjVmNC4uNTU4YjMxODZmYjFiYzQ0ZDIwY2M2OTViNjgzZTQ3
NjI1OTM1ZDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTE5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNpbXBsaWZ5PyBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbiBpbiB0aGUgZWRpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzaW1wbGlmaWVzIHRoZSBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbi4gRHJpdmUtYnkgbWFr
ZSBfZ2V0U2VsZWN0aW9uIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyLmNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVFbnRlcktl
eS5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5oYW5kbGVFbnRlcktleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hhbmRsZU11dGF0
aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Nv
bGxlY3RMaW5lc0Zyb21ET00pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLmdldCBlbmRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5saW5lUm93Q29udGFpbmluZ0xpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmV4cGFuZGVkTGlu
ZVJvdyk6CisKIDIwMTItMTEtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRG9uJ3Qgc2F5IHRoZXJlIGFyZSBkaXJ0eSBvdmVybGF5IHNjcm9sbGJh
cnMgd2hlbiB0aGV5IGFyZSBjbGlwcGVkIG91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKaW5kZXggOTQxZDQyNTNj
YzVmZWQ1YjA2Mzg4N2Y5M2FhYTgyYzA0MTBkNDdmNS4uNjJkZjNkNmFjYTJjYTZmMTE1MzhlODdk
ZjNhM2UzOGNkYjBmNzI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCkBAIC05Myw2ICs5Myw3IEBAIFdlYklu
c3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwg
Zm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhp
cyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhp
cy5faGFuZGxlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5faGFuZGxlVGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtNDI2LDYgKzQyNywx
MSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2RlID0gZS5rZXlDb2RlOwogICAgIH0sCiAKKyAg
ICBfaGFuZGxlQ3V0OiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
Ll9rZXlEb3duQ29kZSA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRl
LmNvZGU7CisgICAgfSwKKwogICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoImEiKTsKQEAgLTgzNiw3ICs4NDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gY29tcGFy
ZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVlLCBsaW5lTnVtYmVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1i
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6
IDE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4
Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMs
IGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CkBAIC0xNDg2LDcgKzE0OTIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghaW5k
ZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuYmVnaW5VcGRh
dGVzKCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKICAgICAgICAgdmFyIGxp
bmVCcmVhayA9IHRoaXMuX3RleHRNb2RlbC5saW5lQnJlYWs7CiAgICAgICAgIHZhciBuZXdSYW5n
ZTsKQEAgLTE1MDIsNyArMTUwOCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdSYW5nZSA9IHRo
aXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIGxpbmVCcmVhayArIGluZGVudCk7CiAKLSAg
ICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwog
ICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLmNvbGxhcHNlVG9FbmQoKSwg
dHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgKzE3MDAsNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxp
bmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNo
dW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVu
ay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQogICAgICAgICAgICAgICAgICAgICBjaHVu
ayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwog
ICAgICAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVt
YmVyKSB7CkBAIC0xODEzLDkgKzE4MTksMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0gez9O
b2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKICAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlfQogICAgICAqLwotICAgIF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICBf
Z2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCkBAIC0xODIzLDggKzE4MzAsOCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFNlbGVjdGlvbiBt
YXkgYmUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgogICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5l
ci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlz
QW5jZXN0b3Ioc2VsZWN0aW9uLmZvY3VzTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24u
YW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCk7Ci0gICAgICAgIHZhciBlbmQgPSBz
ZWxlY3Rpb24uaXNDb2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24o
c2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwg
c2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOworICAgICAgICB2
YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25U
b1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldCwgbGFz
dFVuZGFtYWdlZExpbmVSb3cpOwogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CiAg
ICAgfSwKIApAQCAtMTgzNSw2ICsxODQyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwogICAgICAgICB2YXIgZW5k
ID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJh
bmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQu
Y29udGFpbmVyLCBlbmQub2Zmc2V0KTsKQEAgLTE4NTMsMzQgKzE4NjEsNjAgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7Tm9kZX0gY29udGFpbmVyCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldAorICAg
ICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1hZ2VkTGluZVJvdwogICAgICAqLwotICAgIF9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkKKyAgICBfc2Vs
ZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQsIGxhc3RVbmRhbWFn
ZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFp
bmVyICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVt
bjogMCB9OwogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zm
c2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxp
bmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFpbmVyKTsKLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIgPT09IGxpbmVS
b3cgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVk
IG9uIHRoZSBkYW1hZ2VkIERPTSAod2hlbiBET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwpLgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGNvdW50aW5nIGxpbmVzIGZyb20gdGhlIGZpcnN0IHVu
ZGFtYWdlZCBsaW5lIGlmIGl0IGlzIGdpdmVuLgorICAgICAgICB2YXIgbGluZU51bWJlcjsKKyAg
ICAgICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAgIHZhciBub2RlOworICAgICAgICB2YXIgc2Nv
cGVOb2RlOworICAgICAgICBpZiAobGFzdFVuZGFtYWdlZExpbmVSb3cgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAvLyBMYXN0IHVuZGFtYWdlZCByb3cgaXMgZ2l2ZW4sIGJ1dCBpcyBudWxsIC0g
Zm9yY2UgdHJhdmVyc2UgZnJvbSB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICBub2RlID0gdGhp
cy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9j
b250YWluZXI7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgfSBlbHNlIGlm
IChsYXN0VW5kYW1hZ2VkTGluZVJvdyAmJiB0aGlzLl9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNv
bnRhaW5lcikgIT09IGxhc3RVbmRhbWFnZWRMaW5lUm93KSB7CisgICAgICAgICAgICAgLy8gU3Rh
cnQgd2l0aCB0aGUgbm9kZSBmb2xsb3dpbmcgdW5kYW1hZ2VkIHJvdy4gSXQgY29ycmVzcG9uZHMg
dG8gbGluZU51bWJlciArIDEuCisgICAgICAgICAgICBub2RlID0gbGFzdFVuZGFtYWdlZExpbmVS
b3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9jb250YWluZXI7
CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gbGFzdFVuZGFtYWdlZExpbmVSb3cubGluZU51bWJl
ciArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBET00gaXMgY29uc2lzdGVu
dCAob3Igd2UgYmVsb25nIHRvIHRoZSBmaXJzdCBkYW1hZ2VkIHJvdyktIGxvb2t1cCB0aGUgcm93
IHdlIGJlbG9uZyB0byBhbmQgc3RhcnQgd2l0aCBpdC4KKyAgICAgICAgICAgIG5vZGUgPSB0aGlz
Ll9lbmNsb3NpbmdMaW5lUm93T3JTZWxmKGNvbnRhaW5lcik7CisgICAgICAgICAgICBzY29wZU5v
ZGUgPSBub2RlOworICAgICAgICAgICAgbGluZU51bWJlciA9IG5vZGUubGluZU51bWJlcjsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZhc3QgcmV0dXJuIHRoZSBsaW5lIHN0YXJ0LgorICAgICAg
ICBpZiAoY29udGFpbmVyID09PSBub2RlICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJl
dHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwogCi0gICAgICAgIC8vIFRoaXMg
bWF5IGJlIGNodW5rIGFuZCBjaHVua3MgbWF5IGNvbnRhaW4gXG4uCi0gICAgICAgIHZhciBjb2x1
bW4gPSAwOwotICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cubm9kZVR5cGUgPT09IE5vZGUuVEVY
VF9OT0RFID8gbGluZVJvdyA6IGxpbmVSb3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7
Ci0gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgewotICAgICAgICAg
ICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuY2hh
ckF0KGkpID09PSAiXG4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgY29sdW1uKys7CisgICAgICAgIC8vIFRyYXZlcnNlIHRleHQgYW5k
IGluY3JlbWVudCBsaW5lTnVtYmVyIC8gY29sdW1uLgorICAgICAgICBmb3IgKDsgbm9kZSAmJiBu
b2RlICE9PSBjb250YWluZXI7IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoc2NvcGVOb2Rl
KSkgeworICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImJy
IikgeworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICBjb2x1
bW4gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRF
WFRfTk9ERSkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsK
KyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbisrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAg
ICAgICB9CiAKKyAgICAgICAgLy8gV2UgcmVhY2hlZCBvdXIgY29udGFpbmVyIG5vZGUsIHRyYXZl
cnNlIHdpdGhpbiBpdHNlbGYgdW50aWwgd2UgcmVhY2ggZ2l2ZW4gb2Zmc2V0LgogICAgICAgICBp
ZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNldCkgewogICAgICAgICAgICAgdmFyIHRleHQg
PSBub2RlLnRleHRDb250ZW50OwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZz
ZXQ7ICsraSkgewpAQCAtMTkwMiw3ICsxOTM2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5j
aHVua0ZvckxpbmUobGluZSk7CiAgICAgICAgIC8vIE9uZS1saW5lZCBjb2xsYXBzZWQgY2h1bmtz
IG1heSBzdGlsbCBzdGF5IGhpZ2hsaWdodGVkLgotICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5r
LmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDogY2h1bmsuZ2V0RXhwYW5kZWRMaW5l
Um93KGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEg
PyBjaHVuay5lbGVtZW50IDogY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmUpOwogICAgICAgICBp
ZiAobGluZVJvdykKICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0gbGluZVJvdy5yYW5n
ZUJvdW5kYXJ5Rm9yT2Zmc2V0KGNvbHVtbik7CiAgICAgICAgIGVsc2UgewpAQCAtMTk0OSw3ICsx
OTgzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
CiAgICAgICAgIHZhciBzcGFuID0gdGhpcy5fY2FjaGVkU3BhbnMucG9wKCkgfHwgZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQt
IiArIGNsYXNzTmFtZTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0
RWRpdG9yKSAvLyBGb3IgcGFpbnQgZGVidWdnaW5nLgorICAgICAgICBpZiAoZmFsc2UpIC8vIEZv
ciBwYWludCBkZWJ1Z2dpbmcuCiAgICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImRlYnVn
LWZhZGVvdXQiKTsKICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAg
IGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNwYW4sIG9sZENoaWxkKTsKQEAgLTIwMDMsMTEgKzIwMzcs
MTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAg
ICAqLwogICAgIF9oYW5kbGVNdXRhdGlvbnM6IGZ1bmN0aW9uKG11dGF0aW9ucykKICAgICB7Ci0g
ICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KQorICAgICAgICBpZiAodGhpcy5f
cmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlEb3duQ29kZTsKICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEFubmloaWxhdGUgbm9vcCBC
UiBhZGRpdGlvbiArIHJlbW92YWwgdGhhdCB0YWtlcyBwbGFjZSB1cG9uIGxpbmUgcmVtb3ZhbC4K
ICAgICAgICAgdmFyIGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLnNsaWNlKCk7CkBAIC0y
MDQ5LDE0ICsyMDgyLDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVzLmVuZCA9IE1hdGgubWF4KGRpcnR5
TGluZXMuZW5kLCBsaW5lcy5lbmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAg
ICAgaWYgKGRpcnR5TGluZXMpIHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yYW5nZVRvTWFy
azsKICAgICAgICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRlcyhkaXJ0eUxpbmVzKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikK
LSAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVtZW50LmlubmVyVGV4dCA9PT0gdGhp
cy5fdGV4dE1vZGVsLnRleHQoKSArICJcbiIsICJET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwuIik7
CisgICAgICAgIHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsKKworICAgICAgICBk
ZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMjA3NiwyOSAr
MjEwOSwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0aGlz
Ll9yZWFkT25seSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5lUm93LmxpbmVOdW1iZXIgIT09ICJu
dW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgaWYgKHRhcmdldCA9
PT0gbGluZVJvdyAmJiBtdXRhdGlvbi50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvbi5h
ZGRlZE5vZGVzLmxlbmd0aCkgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5ld2x5
IGluc2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgotICAgICAgICAgICAgZGVsZXRl
IGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGFydExpbmUg
PSAwOwotICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7IHJvdyA9IHJvdy5wcmV2
aW91c1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09
ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5lID0gcm93LmxpbmVOdW1iZXI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIGZvciAodmFyIHJvdyA9
IGxpbmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRTaWJsaW5nKSB7Ci0gICAg
ICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiByb3cubGlu
ZU51bWJlciA+IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAgIGVuZExpbmUgPSByb3cubGlu
ZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorICAgICAgICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2
YXIgZW5kTGluZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJvdy5fY2h1bmsuZW5kTGluZSAtIDEg
OiBsaW5lUm93LmxpbmVOdW1iZXI7CiAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydExpbmUs
IGVuZDogZW5kTGluZSB9OwogICAgIH0sCiAKQEAgLTIxMDcsMzggKzIxMjIsMzEgQEAgV2ViSW5z
cGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9h
cHBseURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGluZXMpCiAgICAgewotICAgICAgICB2YXIg
Zmlyc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0
YXJ0KTsKLSAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVu
a051bWJlcl0uc3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2Rl
bC5saW5lc0NvdW50OworICAgICAgICB2YXIgbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0
eUxpbmVzLnN0YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdl
ZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8vIENhbiBiZSB0aGlzLl90ZXh0TW9k
ZWwubGluZXNDb3VudAogCi0gICAgICAgIC8vIENvbGxlY3QgbGluZXMuCi0gICAgICAgIHZhciBm
aXJzdExpbmVSb3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7Ci0gICAgICAgICAg
ICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAg
ICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5k
ZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5r
LmVsZW1lbnQ7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNp
Ymxpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5f
Y29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkQ2h1bmsgPSBs
YXN0VW5kYW1hZ2VkTGluZU51bWJlciA8IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50ID8gdGhp
cy5fdGV4dENodW5rc1t0aGlzLl9jaHVua051bWJlckZvckxpbmUobGFzdFVuZGFtYWdlZExpbmVO
dW1iZXIpXSA6IG51bGw7CisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZENodW5rID0gZmlyc3RV
bmRhbWFnZWRMaW5lTnVtYmVyID49IDAgPyB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVt
YmVyRm9yTGluZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7CiAKLSAgICAgICAg
dmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7
IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5l
TnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxp
bmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhh
dCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsu
Ci0gICAgICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5n
dGg7Ci0gICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93
KTsKLSAgICAgICAgfQorICAgICAgICB2YXIgY29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5k
YW1hZ2VkQ2h1bmsgPyBsYXN0VW5kYW1hZ2VkQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGxh
c3RVbmRhbWFnZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAgIHZhciBjb2xsZWN0TGluZXNU
b05vZGUgPSBmaXJzdFVuZGFtYWdlZENodW5rID8gZmlyc3RVbmRhbWFnZWRDaHVuay5saW5lUm93
Q29udGFpbmluZ0xpbmUoZmlyc3RVbmRhbWFnZWRMaW5lTnVtYmVyKSA6IG51bGw7CisgICAgICAg
IHZhciBsaW5lcyA9IHRoaXMuX2NvbGxlY3RMaW5lc0Zyb21ET00oY29sbGVjdExpbmVzRnJvbU5v
ZGUsIGNvbGxlY3RMaW5lc1RvTm9kZSk7CisKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGRpcnR5
TGluZXMuc3RhcnQ7CisgICAgICAgIHZhciBlbmRMaW5lID0gZGlydHlMaW5lcy5lbmQ7CiAKLSAg
ICAgICAgdmFyIGVkaXRJbmZvID0gdGhpcy5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9u
KGRpcnR5TGluZXMsIHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpOwotICAgICAgICBpZiAoIWVk
aXRJbmZvKQotICAgICAgICAgICAgZWRpdEluZm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2Vk
T25EaWZmKGRpcnR5TGluZXMsIHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpOworICAgICAgICB2
YXIgZWRpdEluZm8gPSB0aGlzLl9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb24oc3RhcnRM
aW5lLCBlbmRMaW5lLCBsaW5lcyk7CisgICAgICAgIGlmICghZWRpdEluZm8pIHsKKyAgICAgICAg
ICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKKyAgICAgICAgICAg
ICAgICBjb25zb2xlLndhcm4oIkZhbGxpbmcgYmFjayB0byBleHBlbnNpdmUgZWRpdCIpOworICAg
ICAgICAgICAgdmFyIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5l
LCAwLCBlbmRMaW5lLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lKSk7CisgICAg
ICAgICAgICBlZGl0SW5mbyA9IG5ldyBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRp
dEluZm8ocmFuZ2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAgICAgICB9CiAKICAgICAgICAgaWYg
KHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UoZWRpdEluZm8ucmFuZ2UpID09PSBlZGl0SW5mby50
ZXh0KQogICAgICAgICAgICAgcmV0dXJuOyAvLyBOb29wCiAKLSAgICAgICAgdmFyIHNlbGVjdGlv
biA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5f
Z2V0U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsKIAogICAgICAgICAvLyBVbmluZGVu
dCBhZnRlciBibG9jawogICAgICAgICBpZiAoZWRpdEluZm8udGV4dCA9PT0gIn0iICYmIGVkaXRJ
bmZvLnJhbmdlLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNFbXB0eSgpICYmICF0aGlzLl90ZXh0
TW9kZWwubGluZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50cmltKCkpIHsKQEAgLTIxNTYsMzAg
KzIxNjQsMjcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0g
ewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge09iamVjdH0gZGlydHlMaW5lcwog
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAgICAgKiBAcGFyYW0ge251bWJlcn0g
ZW5kTGluZQogICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGxpbmVzCiAgICAgICogQHJl
dHVybiB7P1dlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KICAgICAgKi8K
LSAgICBfZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uOiBmdW5jdGlvbihkaXJ0eUxpbmVz
LCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKQorICAgIF9ndWVzc0VkaXRSYW5nZUJhc2VkT25T
ZWxlY3Rpb246IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpCiAgICAgewotICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIHJlcGxhY2luZyBsYXN0IHNlbGVjdGlvbiB3aXRoIHRleHRJ
bnB1dCBkYXRhIHJlc3VsdHMgaW4gcHJlc2VudCBET00uCi0gICAgICAgIC8vIElmIHRoYXQgaXMg
c28sIHdlIGhhdmUgcHJlY2lzZSBpbnB1dCBmb3IgdGhlIGVkaXRSYW5nZSBjYWxsLgorICAgICAg
ICAvLyBBbmFseXplIGlucHV0IGRhdGEKICAgICAgICAgdmFyIHRleHRJbnB1dERhdGEgPSB0aGlz
Ll90ZXh0SW5wdXREYXRhOwogICAgICAgICBkZWxldGUgdGhpcy5fdGV4dElucHV0RGF0YTsKICAg
ICAgICAgdmFyIGlzQmFja3NwYWNlID0gdGhpcy5fa2V5RG93bkNvZGUgPT09IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0LktleXMuQmFja3NwYWNlLmNvZGU7CiAgICAgICAgIHZhciBpc0Rl
bGV0ZSA9IHRoaXMuX2tleURvd25Db2RlID09PSBXZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1
dC5LZXlzLkRlbGV0ZS5jb2RlOwotICAgICAgICBkZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7CiAK
ICAgICAgICAgaWYgKCF0ZXh0SW5wdXREYXRhICYmIChpc0RlbGV0ZSB8fCBpc0JhY2tzcGFjZSkp
CiAgICAgICAgICAgICB0ZXh0SW5wdXREYXRhID0gIiI7CiAKKyAgICAgICAgLy8gUmV0dXJuIGlm
IHRoZXJlIGlzIG5vIGlucHV0IGRhdGEgb3Igc2VsZWN0aW9uCiAgICAgICAgIGlmICh0eXBlb2Yg
dGV4dElucHV0RGF0YSA9PT0gInVuZGVmaW5lZCIgfHwgIXRoaXMuX2xhc3RTZWxlY3Rpb24pCiAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKGRpcnR5TGluZXMuc3RhcnQgPiB0
aGlzLl9sYXN0U2VsZWN0aW9uLnN0YXJ0TGluZSB8fCBkaXJ0eUxpbmVzLmVuZCA8IHRoaXMuX2xh
c3RTZWxlY3Rpb24uZW5kTGluZSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwogCisgICAgICAg
IC8vIEFkanVzdCBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGtleWJvYXJkIGFjdGlvbnMgKGdyb3cg
Zm9yIGJhY2tzcGFjZSwgZXRjLikuCiAgICAgICAgIHRleHRJbnB1dERhdGEgPSB0ZXh0SW5wdXRE
YXRhIHx8ICIiOwogICAgICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9sYXN0U2VsZWN0aW9uLm5vcm1h
bGl6ZSgpOwogICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYgcmFuZ2UuaXNFbXB0eSgpKQpAQCAt
MjE4Nyw3OCArMjE5Miw0NiBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGVsc2UgaWYgKGlzRGVsZXRlICYmIHJhbmdlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmdyb3dSYW5nZVJpZ2h0KHJhbmdl
KTsKIAotICAgICAgICAvLyBXZSB3aWxsIGNsb25lIHRleHQgbW9kZWwgYW5kIHJlcGxhY2UgbGFz
dCBzZWxlY3Rpb24gd2l0aCB0ZXh0IGlucHV0IGRhdGEgdGhlcmUuCi0gICAgICAgIHZhciBkb21N
b2RlbCA9IHRoaXMuX3RleHRNb2RlbC5zbGljZShzdGFydExpbmUsIGVuZExpbmUpOwotICAgICAg
ICBkb21Nb2RlbC5lZGl0UmFuZ2UocmFuZ2Uuc2hpZnQoLXN0YXJ0TGluZSksIHRleHRJbnB1dERh
dGEpOworICAgICAgICAvLyBUZXN0IHRoYXQgc2VsZWN0aW9uIGludGVyc2VjdHMgZGFtYWdlZCBs
aW5lcworICAgICAgICBpZiAoc3RhcnRMaW5lID4gcmFuZ2UuZW5kTGluZSB8fCBlbmRMaW5lIDwg
cmFuZ2Uuc3RhcnRMaW5lKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgLy8g
Q2xvbmUgdGV4dCBtb2RlbCBvZiB0aGUgc2l6ZSB0aGF0IGZpdHMgYm90aDogc2VsZWN0aW9uIGJl
Zm9yZSBlZGl0IGFuZCB0aGUgZGFtYWdlZCBsaW5lcyBhZnRlciBlZGl0LgorICAgICAgICB2YXIg
Y2xvbmVGcm9tTGluZSA9IE1hdGgubWluKHJhbmdlLnN0YXJ0TGluZSwgc3RhcnRMaW5lKTsKKyAg
ICAgICAgdmFyIGxpbmVDb3VudERlbHRhID0gTWF0aC5tYXgodGV4dElucHV0RGF0YS5zcGxpdCgi
XG4iKS5sZW5ndGggLSByYW5nZS5saW5lc0NvdW50LCAwKTsKKyAgICAgICAgdmFyIGNsb25lVG9M
aW5lID0gTWF0aC5taW4oTWF0aC5tYXgoZW5kTGluZSwgcmFuZ2UuZW5kTGluZSkgKyBsaW5lQ291
bnREZWx0YSArIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdmFyIGRv
bU1vZGVsID0gdGhpcy5fdGV4dE1vZGVsLnNsaWNlKGNsb25lRnJvbUxpbmUsIGNsb25lVG9MaW5l
KTsKKyAgICAgICAgZG9tTW9kZWwuZWRpdFJhbmdlKHJhbmdlLnNoaWZ0KC1jbG9uZUZyb21MaW5l
KSwgdGV4dElucHV0RGF0YSk7CiAKICAgICAgICAgLy8gVGhlbiB3ZSdsbCB0ZXN0IGlmIHRoaXMg
bmV3IG1vZGVsIG1hdGNoZXMgdGhlIERPTSBsaW5lcy4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
ICBpIDwgZG9tTW9kZWwubGluZXNDb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZG9tTW9k
ZWwubGluZShpKSAhPT0gbGluZXNbaV0pCisgICAgICAgIGZvciAodmFyIGkgPSAwOyAgaSA8IGxp
bmVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZG9tTW9kZWwubGluZShpICsgc3Rh
cnRMaW5lIC0gY2xvbmVGcm9tTGluZSkgIT09IGxpbmVzW2ldKQogICAgICAgICAgICAgICAgIHJl
dHVybiBudWxsOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRl
ZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZvKHJhbmdlLCB0ZXh0SW5wdXREYXRhKTsKICAgICB9LAog
Ci0gICAgLyoqCi0gICAgICogQHBhcmFtIHtPYmplY3R9IGRpcnR5TGluZXMKLSAgICAgKiBAcGFy
YW0ge251bWJlcn0gc3RhcnRMaW5lCi0gICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKLSAg
ICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBsaW5lcwotICAgICAqIEByZXR1cm4ge1dlYklu
c3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mb30KLSAgICAgKi8KLSAgICBfZ3Vlc3NF
ZGl0UmFuZ2VCYXNlZE9uRGlmZjogZnVuY3Rpb24oZGlydHlMaW5lcywgc3RhcnRMaW5lLCBlbmRM
aW5lLCBsaW5lcykKKyAgICBfYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbDogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNl
ZCBieSBsaW5lcywgaWYgcG9zc2libGUuCi0gICAgICAgIHZhciBzdGFydE9mZnNldCA9IDA7Ci0g
ICAgICAgIHdoaWxlIChzdGFydExpbmUgPCBkaXJ0eUxpbmVzLnN0YXJ0ICYmIHN0YXJ0T2Zmc2V0
IDwgbGluZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUo
c3RhcnRMaW5lKSAhPT0gbGluZXNbc3RhcnRPZmZzZXRdKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgKytzdGFydE9mZnNldDsKLSAgICAgICAgICAgICsrc3RhcnRMaW5lOwot
ICAgICAgICB9CisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0
b3IpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGVuZE9mZnNldCA9IGxpbmVz
Lmxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGVuZExpbmUgPiBkaXJ0eUxpbmVzLmVuZCAmJiBlbmRP
ZmZzZXQgPiBzdGFydE9mZnNldCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5s
aW5lKGVuZExpbmUgLSAxKSAhPT0gbGluZXNbZW5kT2Zmc2V0IC0gMV0pCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAtLWVuZE9mZnNldDsKLSAgICAgICAgICAgIC0tZW5kTGlu
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0gbGluZXMuc2xpY2Uoc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCk7Ci0KLSAgICAgICAgLy8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWlu
ZyByZXBsYWNlZCBieSBjb2x1bW4gb2Zmc2V0cywgaWYgcG9zc2libGUuCi0gICAgICAgIHZhciBz
dGFydENvbHVtbiA9IDA7Ci0gICAgICAgIHZhciBlbmRDb2x1bW4gPSB0aGlzLl90ZXh0TW9kZWwu
bGluZUxlbmd0aChlbmRMaW5lIC0gMSk7Ci0gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7
Ci0gICAgICAgICAgICB2YXIgbGluZTEgPSB0aGlzLl90ZXh0TW9kZWwubGluZShzdGFydExpbmUp
OwotICAgICAgICAgICAgdmFyIGxpbmUyID0gbGluZXNbMF07Ci0gICAgICAgICAgICB3aGlsZSAo
bGluZTFbc3RhcnRDb2x1bW5dICYmIGxpbmUxW3N0YXJ0Q29sdW1uXSA9PT0gbGluZTJbc3RhcnRD
b2x1bW5dKQotICAgICAgICAgICAgICAgICsrc3RhcnRDb2x1bW47Ci0gICAgICAgICAgICBsaW5l
c1swXSA9IGxpbmUyLnN1YnN0cmluZyhzdGFydENvbHVtbik7Ci0KLSAgICAgICAgICAgIGxpbmUx
ID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoZW5kTGluZSAtIDEpOwotICAgICAgICAgICAgbGluZTIg
PSBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgZW5kQ29sdW1uICYmIGkgPCBsaW5lMi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IGlmIChzdGFydExpbmUgPT09IGVuZExpbmUgLSAxICYmIGVuZENvbHVtbiAtIGkgPD0gc3RhcnRD
b2x1bW4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChs
aW5lMVtlbmRDb2x1bW4gLSBpIC0gMV0gIT09IGxpbmUyW2xpbmUyLmxlbmd0aCAtIGkgLSAxXSkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoaSkgewotICAgICAgICAgICAgICAgIGVuZENvbHVtbiAtPSBpOwotICAgICAgICAgICAgICAg
IGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdID0gbGluZTIuc3Vic3RyaW5nKDAsIGxpbmUyLmxlbmd0
aCAtIGkpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID09
PSB0aGlzLl90ZXh0TW9kZWwudGV4dCgpICsgIlxuIiwgIkRPTSBkb2VzIG5vdCBtYXRjaCBtb2Rl
bC4iKTsKKyAgICAgICAgZm9yICh2YXIgbGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENo
aWxkOyBsaW5lUm93OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykgeworICAgICAgICAg
ICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIGxpbmVOdW1iZXIgIT09ICJudW1iZXIiKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCJObyBsaW5lIG51bWJlciBvbiBsaW5lIHJvdyIpOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxpbmVSb3cuX2NodW5rKSB7
CisgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gbGluZVJvdy5fY2h1bms7CisgICAgICAgICAg
ICAgICAgY29uc29sZS5hc3NlcnQobGluZU51bWJlciA9PT0gY2h1bmsuc3RhcnRMaW5lKTsKKyAg
ICAgICAgICAgICAgICB2YXIgY2h1bmtUZXh0ID0gdGhpcy5fdGV4dE1vZGVsLmNvcHlSYW5nZShu
ZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShjaHVuay5zdGFydExpbmUsIDAsIGNodW5rLmVuZExp
bmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChjaHVuay5lbmRMaW5lIC0gMSkpKTsK
KyAgICAgICAgICAgICAgICBpZiAoY2h1bmtUZXh0ICE9PSBsaW5lUm93LnRleHRDb250ZW50KQor
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIkNodW5rIGlzIG5vdCBtYXRjaGluZzog
JWQgJU8iLCBsaW5lTnVtYmVyLCBsaW5lUm93KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhp
cy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgIT09IGxpbmVSb3cudGV4dENvbnRlbnQpCisg
ICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJMaW5lIGlzIG5vdCBtYXRjaGluZzogJWQgJU8i
LCBsaW5lTnVtYmVyLCBsaW5lUm93KTsKICAgICAgICAgfQotCi0gICAgICAgIHZhciByYW5nZTsK
LSAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQpCi0gICAgICAgICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4
dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVz
Lmxlbmd0aCA9PT0gMCAmJiBzdGFydExpbmUgPiAwKQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcg
V2ViSW5zcGVjdG9yLlRleHRSYW5nZShzdGFydExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChzdGFydExpbmUgLSAxKSwgZW5kTGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5l
TGVuZ3RoKGVuZExpbmUgLSAxKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGlu
ZSAtIDEsIGVuZENvbHVtbik7Ci0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yLkVkaXRJbmZvKHJhbmdlLCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICB9LAog
CiAgICAgLyoqCkBAIC0yMzQ0LDcgKzIzMTcsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBmaXJzdExpbmVSb3c7CiAgICAgICAg
IGlmIChmaXJzdENodW5rTnVtYmVyKSB7CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90
ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGluZVJv
dyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0
TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAg
ICBmaXJzdExpbmVSb3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmV4cGFuZGVkTGluZVJvdyhj
aHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50Owog
ICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOwogICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5m
aXJzdENoaWxkOwpAQCAtMjM1Niw3ICsyMzI5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgdmFyIGxpbmVOdW1iZXIgPSBjaHVuay5zdGFydExpbmU7CiAgICAgICAgICAgICBmb3IgKHZh
ciBsaW5lUm93ID0gZmlyc3RMaW5lUm93OyBsaW5lUm93ICYmIGxpbmVOdW1iZXIgPCBjaHVuay5z
dGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGlu
ZykgewotICAgICAgICAgICAgICAgIGlmIChsaW5lUm93LmxpbmVOdW1iZXIgIT09IGxpbmVOdW1i
ZXIgfHwgbGluZVJvdyAhPT0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpIHx8
IGxpbmVSb3cudGV4dENvbnRlbnQgIT09IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIp
IHx8ICFsaW5lUm93LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgaWYgKGxpbmVSb3cubGlu
ZU51bWJlciAhPT0gbGluZU51bWJlciB8fCBsaW5lUm93ICE9PSBjaHVuay5leHBhbmRlZExpbmVS
b3cobGluZU51bWJlcikgfHwgbGluZVJvdy50ZXh0Q29udGVudCAhPT0gdGhpcy5fdGV4dE1vZGVs
LmxpbmUobGluZU51bWJlcikgfHwgIWxpbmVSb3cuZmlyc3RDaGlsZCkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgKytsaW5lTnVtYmVyOwogICAgICAgICAgICAg
fQpAQCAtMjM4Nyw3ICsyMzYwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlID0gewogICAgICAgICB2YXIgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IG51bGw7
CiAgICAgICAgIGNodW5rID0gdGhpcy5fdGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXIgKyAxXTsK
ICAgICAgICAgaWYgKGNodW5rKQotICAgICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9
IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGlu
ZSkgOiBjaHVuay5lbGVtZW50OworICAgICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9
IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSkg
OiBjaHVuay5lbGVtZW50OwogCiAgICAgICAgIHdoaWxlIChmaXJzdExpbmVSb3cgJiYgZmlyc3RM
aW5lUm93ICE9PSBmaXJzdFVubW9kaWZpZWRMaW5lUm93KSB7CiAgICAgICAgICAgICB2YXIgbGlu
ZVJvdyA9IGZpcnN0TGluZVJvdzsKQEAgLTI0NDEsMzIgKzI0MTQsMjcgQEAgV2ViSW5zcGVjdG9y
LlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAg
ICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBsaW5lcwotICAgICAqIEBwYXJhbSB7RWxlbWVu
dH0gZWxlbWVudAorICAgICAqIEBwYXJhbSB7Tm9kZX0gZnJvbQorICAgICAqIEBwYXJhbSB7Tm9k
ZX0gdG8KKyAgICAgKiBAcmV0dXJuIHtBcnJheS48c3RyaW5nPn0KICAgICAgKi8KLSAgICBfY29s
bGVjdExpbmVzRnJvbURpdjogZnVuY3Rpb24obGluZXMsIGVsZW1lbnQpCisgICAgX2NvbGxlY3RM
aW5lc0Zyb21ET006IGZ1bmN0aW9uKGZyb20sIHRvKQogICAgIHsKICAgICAgICAgdmFyIHRleHRD
b250ZW50cyA9IFtdOwotICAgICAgICB2YXIgbm9kZSA9IGVsZW1lbnQubm9kZVR5cGUgPT09IE5v
ZGUuVEVYVF9OT0RFID8gZWxlbWVudCA6IGVsZW1lbnQudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50
KTsKLSAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmRlY29y
YXRpb25zRWxlbWVudCA9PT0gbm9kZSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5l
eHRTaWJsaW5nOworICAgICAgICBmb3IgKHZhciBub2RlID0gZnJvbSA/IGZyb20ubmV4dFNpYmxp
bmcgOiB0aGlzLl9jb250YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gdG87IG5vZGUgPSBub2RlLnRy
YXZlcnNlTmV4dE5vZGUodGhpcy5fY29udGFpbmVyKSkgeworICAgICAgICAgICAgaWYgKG5vZGUu
X2lzRGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0g
ImJyIikKICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaCgiXG4iKTsKICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQogICAgICAgICAg
ICAgICAgIHRleHRDb250ZW50cy5wdXNoKG5vZGUudGV4dENvbnRlbnQpOwotICAgICAgICAgICAg
bm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKICAgICAgICAgfQogCiAgICAg
ICAgIHZhciB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50cy5qb2luKCIiKTsKICAgICAgICAgLy8g
VGhlIGxhc3QgXG4gKGlmIGFueSkgZG9lcyBub3QgImNvdW50IiBpbiBhIERJVi4KICAgICAgICAg
dGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudC5yZXBsYWNlKC9cbiQvLCAiIik7CiAKLSAgICAgICAg
dGV4dENvbnRlbnRzID0gdGV4dENvbnRlbnQuc3BsaXQoIlxuIik7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGV4dENvbnRlbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgbGluZXMu
cHVzaCh0ZXh0Q29udGVudHNbaV0pOworICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQgPyB0ZXh0
Q29udGVudC5zcGxpdCgiXG4iKSA6IFtdOwogICAgIH0sCiAKICAgICBfaGFuZGxlU2VsZWN0aW9u
Q2hhbmdlOiBmdW5jdGlvbihldmVudCkKQEAgLTI0OTQsNiArMjQ2Miw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpbkNodW5rID0gZnVuY3Rpb24oY2h1bmtlZFBhbmVsLCBzdGFydExpbmUs
IGVuZExpbmUpCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExpbmU7CiAgICAgdGhpcy5l
bGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsKKyAgICB0aGlzLmVsZW1l
bnQuX2NodW5rID0gdGhpczsKIAogICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKICAg
ICBlbmRMaW5lID0gTWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQsIGVuZExpbmUp
OwpAQCAtMjUxNCw2ICsyNDgzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNF
bGVtZW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgICAgIHRoaXMu
ZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gIndlYmtpdC1saW5lLWRlY29y
YXRpb25zIjsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50
Ll9pc0RlY29yYXRpb25zRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5hcHBl
bmRDaGlsZChkZWNvcmF0aW9uKTsKQEAgLTI1NjEsNiArMjUzMSwxNCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiB0aGlzLl9z
dGFydExpbmU7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEByZXR1cm4ge251bWJlcn0KKyAg
ICAgKi8KKyAgICBnZXQgZW5kTGluZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3Rh
cnRMaW5lICsgdGhpcy5saW5lc0NvdW50OworICAgIH0sCisKICAgICBzZXQgc3RhcnRMaW5lKHN0
YXJ0TGluZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9IHN0YXJ0TGluZTsKQEAg
LTI2NTgsMTAgKzI2MzYsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBDYWxsZWQgb24gcG90ZW50aWFs
bHkgZGFtYWdlZCAvIGluY29uc2lzdGVudCBjaHVuaworICAgICAqIEBwYXJhbSB7bnVtYmVyfSBs
aW5lTnVtYmVyCisgICAgICogQHJldHVybiB7P05vZGV9CisgICAgICovCisgICAgbGluZVJvd0Nv
bnRhaW5pbmdMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9leHBhbmRlZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7CisgICAgICAg
IHJldHVybiB0aGlzLmV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsKKyAgICB9LAorCisgICAg
LyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKICAgICAgKiBAcmV0dXJuIHtF
bGVtZW50fQogICAgICAqLwotICAgIGdldEV4cGFuZGVkTGluZVJvdzogZnVuY3Rpb24obGluZU51
bWJlcikKKyAgICBleHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCiAgICAgewog
ICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkIHx8IGxpbmVOdW1iZXIgPCB0aGlzLnN0YXJ0TGlu
ZSB8fCBsaW5lTnVtYmVyID49IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0yNjg3LDMgKzI2NzcsNSBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7CiAgICAgfQogfQor
CitXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvciA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175211</attachid>
            <date>2012-11-20 07:04:43 -0800</date>
            <delta_ts>2012-11-20 07:56:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102688-20121120190230.patch</filename>
            <type>text/plain</type>
            <size>29986</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFjYmFkODE0YmFmZTEz
MWZhZGM5NDg3ZjllZWQzOWUwZGYxYjVmNC4uNTU4YjMxODZmYjFiYzQ0ZDIwY2M2OTViNjgzZTQ3
NjI1OTM1ZDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTE5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNpbXBsaWZ5PyBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbiBpbiB0aGUgZWRpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzaW1wbGlmaWVzIHRoZSBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbi4gRHJpdmUtYnkgbWFr
ZSBfZ2V0U2VsZWN0aW9uIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyLmNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVFbnRlcktl
eS5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5oYW5kbGVFbnRlcktleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hhbmRsZU11dGF0
aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Nv
bGxlY3RMaW5lc0Zyb21ET00pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLmdldCBlbmRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5saW5lUm93Q29udGFpbmluZ0xpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmV4cGFuZGVkTGlu
ZVJvdyk6CisKIDIwMTItMTEtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgRG9uJ3Qgc2F5IHRoZXJlIGFyZSBkaXJ0eSBvdmVybGF5IHNjcm9sbGJh
cnMgd2hlbiB0aGV5IGFyZSBjbGlwcGVkIG91dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRleHRFZGl0b3IuanMKaW5kZXggOTQxZDQyNTNj
YzVmZWQ1YjA2Mzg4N2Y5M2FhYTgyYzA0MTBkNDdmNS4uMDYwOTdmZDlhZjUxMzhjYmRhZjVmNTIw
OWY4ZWE2ZmYyMzA3YzA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzCkBAIC05Myw2ICs5Myw3IEBAIFdlYklu
c3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAg
dGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwg
Zm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwgZmFsc2UpOwogCiAgICAgdGhpcy5lbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhp
cyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhp
cy5faGFuZGxlQ3V0LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5faGFuZGxlVGV4dElucHV0LmJpbmQodGhpcyks
IGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMpLCB0cnVlKTsKIApAQCAtNDI2LDYgKzQyNywx
MSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2RlID0gZS5rZXlDb2RlOwogICAgIH0sCiAKKyAg
ICBfaGFuZGxlQ3V0OiBmdW5jdGlvbihlKQorICAgIHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVs
Ll9rZXlEb3duQ29kZSA9IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRl
LmNvZGU7CisgICAgfSwKKwogICAgIF9jb250ZXh0TWVudTogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoTm9kZU5hbWUoImEiKTsKQEAgLTgzNiw3ICs4NDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gY29tcGFy
ZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVlLCBsaW5lTnVtYmVyKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1i
ZXIpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlIDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6
IDE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGluc2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4
Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlvbih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMs
IGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CkBAIC0xNDg2LDcgKzE0OTIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghaW5k
ZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuYmVnaW5VcGRh
dGVzKCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21VcGRhdGVzKCk7CiAKICAgICAgICAgdmFyIGxp
bmVCcmVhayA9IHRoaXMuX3RleHRNb2RlbC5saW5lQnJlYWs7CiAgICAgICAgIHZhciBuZXdSYW5n
ZTsKQEAgLTE1MDIsNyArMTUwOCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBuZXdSYW5nZSA9IHRo
aXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2UsIGxpbmVCcmVhayArIGluZGVudCk7CiAKLSAg
ICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAgICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwog
ICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9uKG5ld1JhbmdlLmNvbGxhcHNlVG9FbmQoKSwg
dHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjk0LDcgKzE3MDAsNyBAQCBXZWJJ
bnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBm
b3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5rLnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxp
bmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNo
dW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVu
ay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50KQogICAgICAgICAgICAgICAgICAgICBjaHVu
ayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAgICAgICAgICAgICAgIHZhciBs
aW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOworICAgICAgICAg
ICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwog
ICAgICAgICAgICAgICAgIGlmICghbGluZVJvdykKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVt
YmVyKSB7CkBAIC0xODEzLDkgKzE4MTksMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcGFyYW0gez9O
b2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKICAgICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3Iu
VGV4dFJhbmdlfQogICAgICAqLwotICAgIF9nZXRTZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICBf
Z2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0VW5kYW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCkBAIC0xODIzLDggKzE4MzAsOCBAQCBXZWJJbnNwZWN0b3Iu
VGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIC8vIFNlbGVjdGlvbiBt
YXkgYmUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgogICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5l
ci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5hbmNob3JOb2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlz
QW5jZXN0b3Ioc2VsZWN0aW9uLmZvY3VzTm9kZSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24u
YW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCk7Ci0gICAgICAgIHZhciBlbmQgPSBz
ZWxlY3Rpb24uaXNDb2xsYXBzZWQgPyBzdGFydCA6IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24o
c2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgdmFy
IHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwg
c2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOworICAgICAgICB2
YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2VkID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25U
b1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUsIHNlbGVjdGlvbi5mb2N1c09mZnNldCwgbGFz
dFVuZGFtYWdlZExpbmVSb3cpOwogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0
UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1uLCBlbmQubGluZSwgZW5kLmNvbHVtbik7CiAg
ICAgfSwKIApAQCAtMTgzNSw2ICsxODQyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0
aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3RhcnRDb2x1bW4pOwogICAgICAgICB2YXIgZW5k
ID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJh
bmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rp
b24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNvbnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQu
Y29udGFpbmVyLCBlbmQub2Zmc2V0KTsKQEAgLTE4NTMsMzQgKzE4NjEsNjMgQEAgV2ViSW5zcGVj
dG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIC8qKgogICAgICAqIEBw
YXJhbSB7Tm9kZX0gY29udGFpbmVyCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldAorICAg
ICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1hZ2VkTGluZVJvdwogICAgICAqLwotICAgIF9z
ZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihjb250YWluZXIsIG9mZnNldCkKKyAgICBfc2Vs
ZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29udGFpbmVyLCBvZmZzZXQsIGxhc3RVbmRhbWFn
ZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgaWYgKGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFp
bmVyICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVt
bjogMCB9OwogICAgICAgICBpZiAoY29udGFpbmVyID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zm
c2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJuIHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxp
bmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3Rl
eHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAotICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMu
X2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFpbmVyKTsKLSAgICAgICAgdmFyIGxpbmVOdW1i
ZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAgICAgIGlmIChjb250YWluZXIgPT09IGxpbmVS
b3cgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVk
IG9uIHRoZSBkYW1hZ2VkIERPTSAod2hlbiBET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwpLgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGNvdW50aW5nIGxpbmVzIGZyb20gdGhlIGZpcnN0IHVu
ZGFtYWdlZCBsaW5lIGlmIGl0IGlzIGdpdmVuLgorICAgICAgICB2YXIgbGluZU51bWJlcjsKKyAg
ICAgICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAgIHZhciBub2RlOworICAgICAgICB2YXIgc2Nv
cGVOb2RlOworICAgICAgICBpZiAobGFzdFVuZGFtYWdlZExpbmVSb3cgPT09IG51bGwpIHsKKyAg
ICAgICAgICAgICAvLyBMYXN0IHVuZGFtYWdlZCByb3cgaXMgZ2l2ZW4sIGJ1dCBpcyBudWxsIC0g
Zm9yY2UgdHJhdmVyc2UgZnJvbSB0aGUgYmVnaW5uaW5nCisgICAgICAgICAgICBub2RlID0gdGhp
cy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9j
b250YWluZXI7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gMDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhpcy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihj
b250YWluZXIpOworICAgICAgICAgICAgaWYgKCFsYXN0VW5kYW1hZ2VkTGluZVJvdyB8fCAodHlw
ZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5lTnVtYmVy
IDw9IGxhc3RVbmRhbWFnZWRMaW5lUm93LmxpbmVOdW1iZXIpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRE9NIGlzIGNvbnNpc3RlbnQgKG9yIHdlIGJlbG9uZyB0byB0aGUgZmlyc3QgZGFtYWdlZCBy
b3cpLSBsb29rdXAgdGhlIHJvdyB3ZSBiZWxvbmcgdG8gYW5kIHN0YXJ0IHdpdGggaXQuCisgICAg
ICAgICAgICAgICAgbm9kZSA9IGxpbmVSb3c7CisgICAgICAgICAgICAgICAgc2NvcGVOb2RlID0g
bm9kZTsKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyID0gbm9kZS5saW5lTnVtYmVyOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB3aXRoIHRoZSBub2Rl
IGZvbGxvd2luZyB1bmRhbWFnZWQgcm93LiBJdCBjb3JyZXNwb25kcyB0byBsaW5lTnVtYmVyICsg
MS4KKyAgICAgICAgICAgICAgICBub2RlID0gbGFzdFVuZGFtYWdlZExpbmVSb3cubmV4dFNpYmxp
bmc7CisgICAgICAgICAgICAgICAgc2NvcGVOb2RlID0gdGhpcy5fY29udGFpbmVyOworICAgICAg
ICAgICAgICAgIGxpbmVOdW1iZXIgPSBsYXN0VW5kYW1hZ2VkTGluZVJvdy5saW5lTnVtYmVyICsg
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZhc3QgcmV0dXJuIHRo
ZSBsaW5lIHN0YXJ0LgorICAgICAgICBpZiAoY29udGFpbmVyID09PSBub2RlICYmIG9mZnNldCA9
PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxpbmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9
OwogCi0gICAgICAgIC8vIFRoaXMgbWF5IGJlIGNodW5rIGFuZCBjaHVua3MgbWF5IGNvbnRhaW4g
XG4uCi0gICAgICAgIHZhciBjb2x1bW4gPSAwOwotICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cu
bm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gbGluZVJvdyA6IGxpbmVSb3cudHJhdmVyc2VO
ZXh0VGV4dE5vZGUobGluZVJvdyk7Ci0gICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGNv
bnRhaW5lcikgewotICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gMDsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uKys7CisgICAgICAg
IC8vIFRyYXZlcnNlIHRleHQgYW5kIGluY3JlbWVudCBsaW5lTnVtYmVyIC8gY29sdW1uLgorICAg
ICAgICBmb3IgKDsgbm9kZSAmJiBub2RlICE9PSBjb250YWluZXI7IG5vZGUgPSBub2RlLnRyYXZl
cnNlTmV4dE5vZGUoc2NvcGVOb2RlKSkgeworICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUu
dG9Mb3dlckNhc2UoKSA9PT0gImJyIikgeworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsK
KyAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChub2Rl
Lm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgeworICAgICAgICAgICAgICAgIHZhciB0ZXh0
ID0gbm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0
KGkpID09PSAiXG4iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyKys7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbisrOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRl
eHROb2RlKGxpbmVSb3cpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gV2UgcmVhY2hlZCBvdXIg
Y29udGFpbmVyIG5vZGUsIHRyYXZlcnNlIHdpdGhpbiBpdHNlbGYgdW50aWwgd2UgcmVhY2ggZ2l2
ZW4gb2Zmc2V0LgogICAgICAgICBpZiAobm9kZSA9PT0gY29udGFpbmVyICYmIG9mZnNldCkgewog
ICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRleHRDb250ZW50OwogICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewpAQCAtMTkwMiw3ICsxOTM5LDcgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAgICAg
ICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0ZvckxpbmUobGluZSk7CiAgICAgICAgIC8vIE9uZS1s
aW5lZCBjb2xsYXBzZWQgY2h1bmtzIG1heSBzdGlsbCBzdGF5IGhpZ2hsaWdodGVkLgotICAgICAg
ICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDog
Y2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmUpOworICAgICAgICB2YXIgbGluZVJvdyA9IGNo
dW5rLmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDogY2h1bmsuZXhwYW5kZWRMaW5l
Um93KGxpbmUpOwogICAgICAgICBpZiAobGluZVJvdykKICAgICAgICAgICAgIHZhciByYW5nZUJv
dW5kYXJ5ID0gbGluZVJvdy5yYW5nZUJvdW5kYXJ5Rm9yT2Zmc2V0KGNvbHVtbik7CiAgICAgICAg
IGVsc2UgewpAQCAtMTk0OSw3ICsxOTg2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
UGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBzcGFuID0gdGhpcy5fY2FjaGVkU3Bh
bnMucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBzcGFu
LmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiArIGNsYXNzTmFtZTsKLSAgICAgICAgaWYgKFdlYkluc3Bl
Y3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRpdG9yKSAvLyBGb3IgcGFpbnQgZGVidWdnaW5nLgorICAg
ICAgICBpZiAoZmFsc2UpIC8vIEZvciBwYWludCBkZWJ1Z2dpbmcuCiAgICAgICAgICAgICBzcGFu
LmFkZFN0eWxlQ2xhc3MoImRlYnVnLWZhZGVvdXQiKTsKICAgICAgICAgc3Bhbi50ZXh0Q29udGVu
dCA9IGNvbnRlbnQ7CiAgICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHNwYW4sIG9sZENoaWxk
KTsKQEAgLTIwMDMsMTEgKzIwNDAsMTAgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFu
ZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9oYW5kbGVNdXRhdGlvbnM6IGZ1bmN0aW9u
KG11dGF0aW9ucykKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5n
TGV2ZWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5
KQorICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlz
Ll9rZXlEb3duQ29kZTsKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAg
IC8vIEFubmloaWxhdGUgbm9vcCBCUiBhZGRpdGlvbiArIHJlbW92YWwgdGhhdCB0YWtlcyBwbGFj
ZSB1cG9uIGxpbmUgcmVtb3ZhbC4KICAgICAgICAgdmFyIGZpbHRlcmVkTXV0YXRpb25zID0gbXV0
YXRpb25zLnNsaWNlKCk7CkBAIC0yMDQ5LDE0ICsyMDg1LDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVz
LmVuZCA9IE1hdGgubWF4KGRpcnR5TGluZXMuZW5kLCBsaW5lcy5lbmQpOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0KICAgICAgICAgaWYgKGRpcnR5TGluZXMpIHsKICAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9yYW5nZVRvTWFyazsKICAgICAgICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRl
cyhkaXJ0eUxpbmVzKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVi
dWdEZWZhdWx0VGV4dEVkaXRvcikKLSAgICAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVt
ZW50LmlubmVyVGV4dCA9PT0gdGhpcy5fdGV4dE1vZGVsLnRleHQoKSArICJcbiIsICJET00gZG9l
cyBub3QgbWF0Y2ggbW9kZWwuIik7CisgICAgICAgIHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0
TW9kZWwoKTsKKworICAgICAgICBkZWxldGUgdGhpcy5fa2V5RG93bkNvZGU7CiAgICAgfSwKIAog
ICAgIC8qKgpAQCAtMjA3NiwyOSArMjExMiwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1h
aW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAg
fQogCi0gICAgICAgIGlmICh0aGlzLl9yZWFkT25seSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5l
Um93LmxpbmVOdW1iZXIgIT09ICJudW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAK
LSAgICAgICAgaWYgKHRhcmdldCA9PT0gbGluZVJvdyAmJiBtdXRhdGlvbi50eXBlID09PSAiY2hp
bGRMaXN0IiAmJiBtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCkgewotICAgICAgICAgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIG5ld2x5IGluc2VydGVkIGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVy
LgotICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZhciBzdGFydExpbmUgPSAwOwotICAgICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93
OyByb3c7IHJvdyA9IHJvdy5wcmV2aW91c1NpYmxpbmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBl
b2Ygcm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIiKSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRM
aW5lID0gcm93LmxpbmVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0g
ICAgICAgIGZvciAodmFyIHJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93
Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09
PSAibnVtYmVyIiAmJiByb3cubGluZU51bWJlciA+IHN0YXJ0TGluZSkgewotICAgICAgICAgICAg
ICAgIGVuZExpbmUgPSByb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5s
aW5lTnVtYmVyOworICAgICAgICB2YXIgZW5kTGluZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJv
dy5fY2h1bmsuZW5kTGluZSAtIDEgOiBsaW5lUm93LmxpbmVOdW1iZXI7CiAgICAgICAgIHJldHVy
biB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDogZW5kTGluZSB9OwogICAgIH0sCiAKQEAgLTIxMDcs
MzggKzIxMjUsMzMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAqLwogICAgIF9hcHBseURvbVVwZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGluZXMp
CiAgICAgewotICAgICAgICB2YXIgZmlyc3RDaHVua051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVy
Rm9yTGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKLSAgICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMu
X3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0uc3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5k
TGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50OworICAgICAgICB2YXIgbGFzdFVuZGFt
YWdlZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLnN0YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCisgICAg
ICAgIHZhciBmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8v
IENhbiBiZSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudAogCi0gICAgICAgIC8vIENvbGxlY3Qg
bGluZXMuCi0gICAgICAgIHZhciBmaXJzdExpbmVSb3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5r
TnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0
Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFu
ZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxp
bmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cg
PSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Zmlyc3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAgICAgIHZhciBs
YXN0VW5kYW1hZ2VkTGluZUNodW5rID0gbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPj0gMCA/IHRo
aXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1iZXJGb3JMaW5lKGxhc3RVbmRhbWFnZWRMaW5l
TnVtYmVyKV0gOiBudWxsOworICAgICAgICB2YXIgZmlyc3RVbmRhbWFnZWRMaW5lQ2h1bmsgPSBm
aXJzdFVuZGFtYWdlZExpbmVOdW1iZXIgIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgPyB0
aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVtYmVyRm9yTGluZShmaXJzdFVuZGFtYWdlZExp
bmVOdW1iZXIpXSA6IG51bGw7CiAKLSAgICAgICAgdmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZv
ciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93
Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJl
ciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5lTnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7
Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxpbmVSb3cubGluZU51bWJlcjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRo
IHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhhdCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVj
dGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsuCi0gICAgICAgICAgICBsaW5lUm93LmxpbmVO
dW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLl9jb2xs
ZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93KTsKLSAgICAgICAgfQorICAgICAgICB2YXIg
Y29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5kYW1hZ2VkTGluZUNodW5rID8gbGFzdFVuZGFt
YWdlZExpbmVDaHVuay5saW5lUm93Q29udGFpbmluZ0xpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1i
ZXIpIDogbnVsbDsKKyAgICAgICAgdmFyIGNvbGxlY3RMaW5lc1RvTm9kZSA9IGZpcnN0VW5kYW1h
Z2VkTGluZUNodW5rID8gZmlyc3RVbmRhbWFnZWRMaW5lQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdM
aW5lKGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcikgOiBudWxsOworICAgICAgICB2YXIgbGluZXMg
PSB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRE9NKGNvbGxlY3RMaW5lc0Zyb21Ob2RlLCBjb2xsZWN0
TGluZXNUb05vZGUpOwogCi0gICAgICAgIHZhciBlZGl0SW5mbyA9IHRoaXMuX2d1ZXNzRWRpdFJh
bmdlQmFzZWRPblNlbGVjdGlvbihkaXJ0eUxpbmVzLCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVz
KTsKLSAgICAgICAgaWYgKCFlZGl0SW5mbykKLSAgICAgICAgICAgIGVkaXRJbmZvID0gdGhpcy5f
Z3Vlc3NFZGl0UmFuZ2VCYXNlZE9uRGlmZihkaXJ0eUxpbmVzLCBzdGFydExpbmUsIGVuZExpbmUs
IGxpbmVzKTsKKyAgICAgICAgdmFyIHN0YXJ0TGluZSA9IGRpcnR5TGluZXMuc3RhcnQ7CisgICAg
ICAgIHZhciBlbmRMaW5lID0gZGlydHlMaW5lcy5lbmQ7CisKKyAgICAgICAgdmFyIGVkaXRJbmZv
ID0gdGhpcy5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9uKHN0YXJ0TGluZSwgZW5kTGlu
ZSwgbGluZXMpOworICAgICAgICBpZiAoIWVkaXRJbmZvKSB7CisgICAgICAgICAgICBpZiAoV2Vi
SW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0b3IpCisgICAgICAgICAgICAgICAgY29uc29s
ZS53YXJuKCJGYWxsaW5nIGJhY2sgdG8gZXhwZW5zaXZlIGVkaXQiKTsKKyAgICAgICAgICAgIHZh
ciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGlu
ZSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoZW5kTGluZSkpOworICAgICAgICAgICAgaWYg
KHN0YXJ0TGluZSA9PT0gZW5kTGluZSAmJiAhbGluZXMubGVuZ3RoKQorICAgICAgICAgICAgICAg
IHJhbmdlID0gdGhpcy5fdGV4dE1vZGVsLmdyb3dSYW5nZVJpZ2h0KHJhbmdlKTsKKyAgICAgICAg
ICAgIGVkaXRJbmZvID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5m
byhyYW5nZSwgbGluZXMuam9pbigiXG4iKSk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAodGhp
cy5fdGV4dE1vZGVsLmNvcHlSYW5nZShlZGl0SW5mby5yYW5nZSkgPT09IGVkaXRJbmZvLnRleHQp
CiAgICAgICAgICAgICByZXR1cm47IC8vIE5vb3AKIAotICAgICAgICB2YXIgc2VsZWN0aW9uID0g
dGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB0aGlzLl9nZXRT
ZWxlY3Rpb24oY29sbGVjdExpbmVzRnJvbU5vZGUpOwogCiAgICAgICAgIC8vIFVuaW5kZW50IGFm
dGVyIGJsb2NrCiAgICAgICAgIGlmIChlZGl0SW5mby50ZXh0ID09PSAifSIgJiYgZWRpdEluZm8u
cmFuZ2UuaXNFbXB0eSgpICYmIHNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgIXRoaXMuX3RleHRNb2Rl
bC5saW5lKGVkaXRJbmZvLnJhbmdlLmVuZExpbmUpLnRyaW0oKSkgewpAQCAtMjE1NiwzMCArMjE2
OSwyNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkaXJ0eUxpbmVzCiAgICAg
ICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0TGluZQogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRM
aW5lCiAgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbGluZXMKICAgICAgKiBAcmV0dXJu
IHs/V2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZvfQogICAgICAqLwotICAg
IF9ndWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb246IGZ1bmN0aW9uKGRpcnR5TGluZXMsIHN0
YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpCisgICAgX2d1ZXNzRWRpdFJhbmdlQmFzZWRPblNlbGVj
dGlvbjogZnVuY3Rpb24oc3RhcnRMaW5lLCBlbmRMaW5lLCBsaW5lcykKICAgICB7Ci0gICAgICAg
IC8vIENoZWNrIHdoZXRoZXIgcmVwbGFjaW5nIGxhc3Qgc2VsZWN0aW9uIHdpdGggdGV4dElucHV0
IGRhdGEgcmVzdWx0cyBpbiBwcmVzZW50IERPTS4KLSAgICAgICAgLy8gSWYgdGhhdCBpcyBzbywg
d2UgaGF2ZSBwcmVjaXNlIGlucHV0IGZvciB0aGUgZWRpdFJhbmdlIGNhbGwuCisgICAgICAgIC8v
IEFuYWx5emUgaW5wdXQgZGF0YQogICAgICAgICB2YXIgdGV4dElucHV0RGF0YSA9IHRoaXMuX3Rl
eHRJbnB1dERhdGE7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl90ZXh0SW5wdXREYXRhOwogICAgICAg
ICB2YXIgaXNCYWNrc3BhY2UgPSB0aGlzLl9rZXlEb3duQ29kZSA9PT0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuS2V5cy5CYWNrc3BhY2UuY29kZTsKICAgICAgICAgdmFyIGlzRGVsZXRl
ID0gdGhpcy5fa2V5RG93bkNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuRGVsZXRlLmNvZGU7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlEb3duQ29kZTsKIAogICAg
ICAgICBpZiAoIXRleHRJbnB1dERhdGEgJiYgKGlzRGVsZXRlIHx8IGlzQmFja3NwYWNlKSkKICAg
ICAgICAgICAgIHRleHRJbnB1dERhdGEgPSAiIjsKIAorICAgICAgICAvLyBSZXR1cm4gaWYgdGhl
cmUgaXMgbm8gaW5wdXQgZGF0YSBvciBzZWxlY3Rpb24KICAgICAgICAgaWYgKHR5cGVvZiB0ZXh0
SW5wdXREYXRhID09PSAidW5kZWZpbmVkIiB8fCAhdGhpcy5fbGFzdFNlbGVjdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBpZiAoZGlydHlMaW5lcy5zdGFydCA+IHRoaXMu
X2xhc3RTZWxlY3Rpb24uc3RhcnRMaW5lIHx8IGRpcnR5TGluZXMuZW5kIDwgdGhpcy5fbGFzdFNl
bGVjdGlvbi5lbmRMaW5lKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKKyAgICAgICAgLy8g
QWRqdXN0IHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUga2V5Ym9hcmQgYWN0aW9ucyAoZ3JvdyBmb3Ig
YmFja3NwYWNlLCBldGMuKS4KICAgICAgICAgdGV4dElucHV0RGF0YSA9IHRleHRJbnB1dERhdGEg
fHwgIiI7CiAgICAgICAgIHZhciByYW5nZSA9IHRoaXMuX2xhc3RTZWxlY3Rpb24ubm9ybWFsaXpl
KCk7CiAgICAgICAgIGlmIChpc0JhY2tzcGFjZSAmJiByYW5nZS5pc0VtcHR5KCkpCkBAIC0yMTg3
LDc4ICsyMTk3LDUxIEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgZWxzZSBpZiAoaXNEZWxldGUgJiYgcmFuZ2UuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmFuZ2UgPSB0aGlzLl90ZXh0TW9kZWwuZ3Jvd1JhbmdlUmlnaHQocmFuZ2UpOwog
Ci0gICAgICAgIC8vIFdlIHdpbGwgY2xvbmUgdGV4dCBtb2RlbCBhbmQgcmVwbGFjZSBsYXN0IHNl
bGVjdGlvbiB3aXRoIHRleHQgaW5wdXQgZGF0YSB0aGVyZS4KLSAgICAgICAgdmFyIGRvbU1vZGVs
ID0gdGhpcy5fdGV4dE1vZGVsLnNsaWNlKHN0YXJ0TGluZSwgZW5kTGluZSk7Ci0gICAgICAgIGRv
bU1vZGVsLmVkaXRSYW5nZShyYW5nZS5zaGlmdCgtc3RhcnRMaW5lKSwgdGV4dElucHV0RGF0YSk7
CisgICAgICAgIC8vIFRlc3QgdGhhdCBzZWxlY3Rpb24gaW50ZXJzZWN0cyBkYW1hZ2VkIGxpbmVz
CisgICAgICAgIGlmIChzdGFydExpbmUgPiByYW5nZS5lbmRMaW5lIHx8IGVuZExpbmUgPCByYW5n
ZS5zdGFydExpbmUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcmVw
bGFjZW1lbnRMaW5lQ291bnQgPSB0ZXh0SW5wdXREYXRhLnNwbGl0KCJcbiIpLmxlbmd0aCAtIDE7
CisgICAgICAgIHZhciBsaW5lQ291bnREZWx0YSA9IHJlcGxhY2VtZW50TGluZUNvdW50IC0gcmFu
Z2UubGluZXNDb3VudDsKKyAgICAgICAgaWYgKHN0YXJ0TGluZSArIGxpbmVzLmxlbmd0aCAtIGVu
ZExpbmUgLSAxICE9PSBsaW5lQ291bnREZWx0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
CisgICAgICAgIC8vIENsb25lIHRleHQgbW9kZWwgb2YgdGhlIHNpemUgdGhhdCBmaXRzIGJvdGg6
IHNlbGVjdGlvbiBiZWZvcmUgZWRpdCBhbmQgdGhlIGRhbWFnZWQgbGluZXMgYWZ0ZXIgZWRpdC4K
KyAgICAgICAgdmFyIGNsb25lRnJvbUxpbmUgPSBNYXRoLm1pbihyYW5nZS5zdGFydExpbmUsIHN0
YXJ0TGluZSk7CisgICAgICAgIHZhciBwb3N0TGFzdExpbmUgPSBzdGFydExpbmUgKyBsaW5lcy5s
ZW5ndGggKyBsaW5lQ291bnREZWx0YTsKKyAgICAgICAgdmFyIGNsb25lVG9MaW5lID0gTWF0aC5t
aW4oTWF0aC5tYXgocG9zdExhc3RMaW5lLCByYW5nZS5lbmRMaW5lKSArIDEsIHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50KTsKKyAgICAgICAgdmFyIGRvbU1vZGVsID0gdGhpcy5fdGV4dE1vZGVs
LnNsaWNlKGNsb25lRnJvbUxpbmUsIGNsb25lVG9MaW5lKTsKKyAgICAgICAgZG9tTW9kZWwuZWRp
dFJhbmdlKHJhbmdlLnNoaWZ0KC1jbG9uZUZyb21MaW5lKSwgdGV4dElucHV0RGF0YSk7CiAKICAg
ICAgICAgLy8gVGhlbiB3ZSdsbCB0ZXN0IGlmIHRoaXMgbmV3IG1vZGVsIG1hdGNoZXMgdGhlIERP
TSBsaW5lcy4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7ICBpIDwgZG9tTW9kZWwubGluZXNDb3Vu
dDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZG9tTW9kZWwubGluZShpKSAhPT0gbGluZXNbaV0p
CisgICAgICAgIGZvciAodmFyIGkgPSAwOyAgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoZG9tTW9kZWwubGluZShpICsgc3RhcnRMaW5lIC0gY2xvbmVGcm9tTGluZSkg
IT09IGxpbmVzW2ldKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZv
KHJhbmdlLCB0ZXh0SW5wdXREYXRhKTsKICAgICB9LAogCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtPYmplY3R9IGRpcnR5TGluZXMKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRMaW5lCi0g
ICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZExpbmUKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJp
bmc+fSBsaW5lcwotICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRv
ci5FZGl0SW5mb30KLSAgICAgKi8KLSAgICBfZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uRGlmZjogZnVu
Y3Rpb24oZGlydHlMaW5lcywgc3RhcnRMaW5lLCBlbmRMaW5lLCBsaW5lcykKKyAgICBfYXNzZXJ0
RE9NTWF0Y2hlc1RleHRNb2RlbDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgLy8gVHJ5IHRv
IGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBieSBsaW5lcywgaWYgcG9zc2libGUu
Ci0gICAgICAgIHZhciBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIHdoaWxlIChzdGFydExpbmUg
PCBkaXJ0eUxpbmVzLnN0YXJ0ICYmIHN0YXJ0T2Zmc2V0IDwgbGluZXMubGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5lKSAhPT0gbGluZXNbc3Rh
cnRPZmZzZXRdKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgKytzdGFydE9m
ZnNldDsKLSAgICAgICAgICAgICsrc3RhcnRMaW5lOwotICAgICAgICB9CisgICAgICAgIGlmICgh
V2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0b3IpCisgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgdmFyIGVuZE9mZnNldCA9IGxpbmVzLmxlbmd0aDsKLSAgICAgICAgd2hpbGUg
KGVuZExpbmUgPiBkaXJ0eUxpbmVzLmVuZCAmJiBlbmRPZmZzZXQgPiBzdGFydE9mZnNldCkgewot
ICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5saW5lKGVuZExpbmUgLSAxKSAhPT0gbGlu
ZXNbZW5kT2Zmc2V0IC0gMV0pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAt
LWVuZE9mZnNldDsKLSAgICAgICAgICAgIC0tZW5kTGluZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGxpbmVzID0gbGluZXMuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICAgICAg
Ly8gVHJ5IHRvIGRlY3JlYXNlIHRoZSByYW5nZSBiZWluZyByZXBsYWNlZCBieSBjb2x1bW4gb2Zm
c2V0cywgaWYgcG9zc2libGUuCi0gICAgICAgIHZhciBzdGFydENvbHVtbiA9IDA7Ci0gICAgICAg
IHZhciBlbmRDb2x1bW4gPSB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChlbmRMaW5lIC0gMSk7
Ci0gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICB2YXIgbGluZTEg
PSB0aGlzLl90ZXh0TW9kZWwubGluZShzdGFydExpbmUpOwotICAgICAgICAgICAgdmFyIGxpbmUy
ID0gbGluZXNbMF07Ci0gICAgICAgICAgICB3aGlsZSAobGluZTFbc3RhcnRDb2x1bW5dICYmIGxp
bmUxW3N0YXJ0Q29sdW1uXSA9PT0gbGluZTJbc3RhcnRDb2x1bW5dKQotICAgICAgICAgICAgICAg
ICsrc3RhcnRDb2x1bW47Ci0gICAgICAgICAgICBsaW5lc1swXSA9IGxpbmUyLnN1YnN0cmluZyhz
dGFydENvbHVtbik7Ci0KLSAgICAgICAgICAgIGxpbmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUo
ZW5kTGluZSAtIDEpOwotICAgICAgICAgICAgbGluZTIgPSBsaW5lc1tsaW5lcy5sZW5ndGggLSAx
XTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kQ29sdW1uICYmIGkgPCBsaW5l
Mi5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChzdGFydExpbmUgPT09IGVuZExp
bmUgLSAxICYmIGVuZENvbHVtbiAtIGkgPD0gc3RhcnRDb2x1bW4pCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChsaW5lMVtlbmRDb2x1bW4gLSBpIC0gMV0g
IT09IGxpbmUyW2xpbmUyLmxlbmd0aCAtIGkgLSAxXSkKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgICAg
IGVuZENvbHVtbiAtPSBpOwotICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFd
ID0gbGluZTIuc3Vic3RyaW5nKDAsIGxpbmUyLmxlbmd0aCAtIGkpOworICAgICAgICBjb25zb2xl
LmFzc2VydCh0aGlzLmVsZW1lbnQuaW5uZXJUZXh0ID09PSB0aGlzLl90ZXh0TW9kZWwudGV4dCgp
ICsgIlxuIiwgIkRPTSBkb2VzIG5vdCBtYXRjaCBtb2RlbC4iKTsKKyAgICAgICAgZm9yICh2YXIg
bGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOyBsaW5lUm93OyBsaW5lUm93ID0g
bGluZVJvdy5uZXh0U2libGluZykgeworICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5l
Um93LmxpbmVOdW1iZXI7CisgICAgICAgICAgICBpZiAodHlwZW9mIGxpbmVOdW1iZXIgIT09ICJu
dW1iZXIiKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJObyBsaW5lIG51bWJlciBv
biBsaW5lIHJvdyIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGxpbmVSb3cuX2NodW5rKSB7CisgICAgICAgICAgICAgICAgdmFyIGNo
dW5rID0gbGluZVJvdy5fY2h1bms7CisgICAgICAgICAgICAgICAgY29uc29sZS5hc3NlcnQobGlu
ZU51bWJlciA9PT0gY2h1bmsuc3RhcnRMaW5lKTsKKyAgICAgICAgICAgICAgICB2YXIgY2h1bmtU
ZXh0ID0gdGhpcy5fdGV4dE1vZGVsLmNvcHlSYW5nZShuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5n
ZShjaHVuay5zdGFydExpbmUsIDAsIGNodW5rLmVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwu
bGluZUxlbmd0aChjaHVuay5lbmRMaW5lIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2h1
bmtUZXh0ICE9PSBsaW5lUm93LnRleHRDb250ZW50KQorICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLndhcm4oIkNodW5rIGlzIG5vdCBtYXRjaGluZzogJWQgJU8iLCBsaW5lTnVtYmVyLCBsaW5l
Um93KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51
bWJlcikgIT09IGxpbmVSb3cudGV4dENvbnRlbnQpCisgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCJMaW5lIGlzIG5vdCBtYXRjaGluZzogJWQgJU8iLCBsaW5lTnVtYmVyLCBsaW5lUm93KTsK
ICAgICAgICAgfQotCi0gICAgICAgIHZhciByYW5nZTsKLSAgICAgICAgaWYgKGxpbmVzLmxlbmd0
aCA9PT0gMCAmJiBlbmRMaW5lIDwgdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQpCi0gICAgICAg
ICAgICByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5k
TGluZSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKGxpbmVzLmxlbmd0aCA9PT0gMCAmJiBzdGFydExp
bmUgPiAwKQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRleHRSYW5nZShz
dGFydExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGluZUxlbmd0aChzdGFydExpbmUgLSAxKSwg
ZW5kTGluZSAtIDEsIHRoaXMuX3RleHRNb2RlbC5saW5lTGVuZ3RoKGVuZExpbmUgLSAxKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFu
Z2Uoc3RhcnRMaW5lLCBzdGFydENvbHVtbiwgZW5kTGluZSAtIDEsIGVuZENvbHVtbik7Ci0gICAg
ICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkRlZmF1bHRUZXh0RWRpdG9yLkVkaXRJbmZvKHJh
bmdlLCBsaW5lcy5qb2luKCJcbiIpKTsKICAgICB9LAogCiAgICAgLyoqCkBAIC0yMzQ0LDcgKzIz
MjcsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHZhciBmaXJzdExpbmVSb3c7CiAgICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7
CiAgICAgICAgICAgICB2YXIgY2h1bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1i
ZXIgLSAxXTsKLSAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1
bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQg
LSAxKSA6IGNodW5rLmVsZW1lbnQ7CisgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBjaHVuay5l
eHBhbmRlZCA/IGNodW5rLmV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUgKyBjaHVuay5s
aW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50OwogICAgICAgICAgICAgZmlyc3RMaW5lUm93
ID0gZmlyc3RMaW5lUm93Lm5leHRTaWJsaW5nOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IGZpcnN0TGluZVJvdyA9IHRoaXMuX2NvbnRhaW5lci5maXJzdENoaWxkOwpAQCAtMjM1Niw3ICsy
MzM5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBjaHVu
ay5zdGFydExpbmU7CiAgICAgICAgICAgICBmb3IgKHZhciBsaW5lUm93ID0gZmlyc3RMaW5lUm93
OyBsaW5lUm93ICYmIGxpbmVOdW1iZXIgPCBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0Nv
dW50OyBsaW5lUm93ID0gbGluZVJvdy5uZXh0U2libGluZykgewotICAgICAgICAgICAgICAgIGlm
IChsaW5lUm93LmxpbmVOdW1iZXIgIT09IGxpbmVOdW1iZXIgfHwgbGluZVJvdyAhPT0gY2h1bmsu
Z2V0RXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpIHx8IGxpbmVSb3cudGV4dENvbnRlbnQgIT09
IHRoaXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpIHx8ICFsaW5lUm93LmZpcnN0Q2hpbGQp
CisgICAgICAgICAgICAgICAgaWYgKGxpbmVSb3cubGluZU51bWJlciAhPT0gbGluZU51bWJlciB8
fCBsaW5lUm93ICE9PSBjaHVuay5leHBhbmRlZExpbmVSb3cobGluZU51bWJlcikgfHwgbGluZVJv
dy50ZXh0Q29udGVudCAhPT0gdGhpcy5fdGV4dE1vZGVsLmxpbmUobGluZU51bWJlcikgfHwgIWxp
bmVSb3cuZmlyc3RDaGlsZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgKytsaW5lTnVtYmVyOwogICAgICAgICAgICAgfQpAQCAtMjM4Nyw3ICsyMzcwLDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2
YXIgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IG51bGw7CiAgICAgICAgIGNodW5rID0gdGhpcy5f
dGV4dENodW5rc1tsYXN0Q2h1bmtOdW1iZXIgKyAxXTsKICAgICAgICAgaWYgKGNodW5rKQotICAg
ICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsu
Z2V0RXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSkgOiBjaHVuay5lbGVtZW50OworICAg
ICAgICAgICAgZmlyc3RVbm1vZGlmaWVkTGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsu
ZXhwYW5kZWRMaW5lUm93KGNodW5rLnN0YXJ0TGluZSkgOiBjaHVuay5lbGVtZW50OwogCiAgICAg
ICAgIHdoaWxlIChmaXJzdExpbmVSb3cgJiYgZmlyc3RMaW5lUm93ICE9PSBmaXJzdFVubW9kaWZp
ZWRMaW5lUm93KSB7CiAgICAgICAgICAgICB2YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsKQEAg
LTI0NDEsMzIgKzI0MjQsMzEgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJp
bmc+fSBsaW5lcwotICAgICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudAorICAgICAqIEBwYXJh
bSB7Tm9kZX0gZnJvbQorICAgICAqIEBwYXJhbSB7Tm9kZX0gdG8KKyAgICAgKiBAcmV0dXJuIHtB
cnJheS48c3RyaW5nPn0KICAgICAgKi8KLSAgICBfY29sbGVjdExpbmVzRnJvbURpdjogZnVuY3Rp
b24obGluZXMsIGVsZW1lbnQpCisgICAgX2NvbGxlY3RMaW5lc0Zyb21ET006IGZ1bmN0aW9uKGZy
b20sIHRvKQogICAgIHsKICAgICAgICAgdmFyIHRleHRDb250ZW50cyA9IFtdOwotICAgICAgICB2
YXIgbm9kZSA9IGVsZW1lbnQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8gZWxlbWVudCA6
IGVsZW1lbnQudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKLSAgICAgICAgd2hpbGUgKG5vZGUp
IHsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCA9PT0gbm9kZSkg
ewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nOworICAgICAgICB2YXIg
aGFzQ29udGVudCA9IGZhbHNlOworICAgICAgICBmb3IgKHZhciBub2RlID0gZnJvbSA/IGZyb20u
bmV4dFNpYmxpbmcgOiB0aGlzLl9jb250YWluZXI7IG5vZGUgJiYgbm9kZSAhPT0gdG87IG5vZGUg
PSBub2RlLnRyYXZlcnNlTmV4dE5vZGUodGhpcy5fY29udGFpbmVyKSkgeworICAgICAgICAgICAg
aWYgKG5vZGUuX2lzRGVjb3JhdGlvbnNFbGVtZW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAg
ICAgICBpZiAobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiYnIiKQogICAgICAgICAg
ICAgICAgIHRleHRDb250ZW50cy5wdXNoKCJcbiIpOwogICAgICAgICAgICAgZWxzZSBpZiAobm9k
ZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpCiAgICAgICAgICAgICAgICAgdGV4dENvbnRl
bnRzLnB1c2gobm9kZS50ZXh0Q29udGVudCk7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS50cmF2
ZXJzZU5leHROb2RlKGVsZW1lbnQpOwogICAgICAgICB9CisgICAgICAgIGlmICghaGFzQ29udGVu
dCkKKyAgICAgICAgICAgIHJldHVybiBbXTsKIAogICAgICAgICB2YXIgdGV4dENvbnRlbnQgPSB0
ZXh0Q29udGVudHMuam9pbigiIik7CiAgICAgICAgIC8vIFRoZSBsYXN0IFxuIChpZiBhbnkpIGRv
ZXMgbm90ICJjb3VudCIgaW4gYSBESVYuCiAgICAgICAgIHRleHRDb250ZW50ID0gdGV4dENvbnRl
bnQucmVwbGFjZSgvXG4kLywgIiIpOwogCi0gICAgICAgIHRleHRDb250ZW50cyA9IHRleHRDb250
ZW50LnNwbGl0KCJcbiIpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHRDb250ZW50
cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGxpbmVzLnB1c2godGV4dENvbnRlbnRzW2ldKTsK
KyAgICAgICAgcmV0dXJuIHRleHRDb250ZW50LnNwbGl0KCJcbiIpOwogICAgIH0sCiAKICAgICBf
aGFuZGxlU2VsZWN0aW9uQ2hhbmdlOiBmdW5jdGlvbihldmVudCkKQEAgLTI0OTQsNiArMjQ3Niw3
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rID0gZnVuY3Rpb24oY2h1bmtlZFBh
bmVsLCBzdGFydExpbmUsIGVuZExpbmUpCiAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CiAgICAgdGhpcy5lbGVtZW50LmxpbmVOdW1iZXIgPSBzdGFydExp
bmU7CiAgICAgdGhpcy5lbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1jb250ZW50IjsK
KyAgICB0aGlzLmVsZW1lbnQuX2NodW5rID0gdGhpczsKIAogICAgIHRoaXMuX3N0YXJ0TGluZSA9
IHN0YXJ0TGluZTsKICAgICBlbmRMaW5lID0gTWF0aC5taW4odGhpcy5fdGV4dE1vZGVsLmxpbmVz
Q291bnQsIGVuZExpbmUpOwpAQCAtMjUxNCw2ICsyNDk3LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRF
ZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1l
bnQuZGVjb3JhdGlvbnNFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRl
Y29yYXRpb25zRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuY2xhc3NOYW1lID0gIndl
YmtpdC1saW5lLWRlY29yYXRpb25zIjsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVj
b3JhdGlvbnNFbGVtZW50Ll9pc0RlY29yYXRpb25zRWxlbWVudCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0Vs
ZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRp
b25zRWxlbWVudC5hcHBlbmRDaGlsZChkZWNvcmF0aW9uKTsKQEAgLTI1NjEsNiArMjU0NSwxNCBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHJldHVybiB0aGlzLl9zdGFydExpbmU7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEByZXR1
cm4ge251bWJlcn0KKyAgICAgKi8KKyAgICBnZXQgZW5kTGluZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fc3RhcnRMaW5lICsgdGhpcy5saW5lc0NvdW50OworICAgIH0sCisKICAgICBz
ZXQgc3RhcnRMaW5lKHN0YXJ0TGluZSkKICAgICB7CiAgICAgICAgIHRoaXMuX3N0YXJ0TGluZSA9
IHN0YXJ0TGluZTsKQEAgLTI2NTgsMTAgKzI2NTAsMjIgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0
b3JNYWluQ2h1bmsucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBDYWxs
ZWQgb24gcG90ZW50aWFsbHkgZGFtYWdlZCAvIGluY29uc2lzdGVudCBjaHVuaworICAgICAqIEBw
YXJhbSB7bnVtYmVyfSBsaW5lTnVtYmVyCisgICAgICogQHJldHVybiB7P05vZGV9CisgICAgICov
CisgICAgbGluZVJvd0NvbnRhaW5pbmdMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9leHBhbmRlZCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmVs
ZW1lbnQ7CisgICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsK
KyAgICB9LAorCisgICAgLyoqCiAgICAgICogQHBhcmFtIHtudW1iZXJ9IGxpbmVOdW1iZXIKICAg
ICAgKiBAcmV0dXJuIHtFbGVtZW50fQogICAgICAqLwotICAgIGdldEV4cGFuZGVkTGluZVJvdzog
ZnVuY3Rpb24obGluZU51bWJlcikKKyAgICBleHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxpbmVO
dW1iZXIpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2V4cGFuZGVkIHx8IGxpbmVOdW1iZXIg
PCB0aGlzLnN0YXJ0TGluZSB8fCBsaW5lTnVtYmVyID49IHRoaXMuc3RhcnRMaW5lICsgdGhpcy5s
aW5lc0NvdW50KQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0yNjg3LDMgKzI2OTEsNSBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5DaHVuay5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7CiAgICAgfQogfQorCitXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvciA9IHRy
dWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175221</attachid>
            <date>2012-11-20 07:56:35 -0800</date>
            <delta_ts>2012-11-21 22:39:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102688-20121120195422.patch</filename>
            <type>text/plain</type>
            <size>30126</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1Mjc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJiNWU3YzIyNWM5Y2Q0
MWUwOTA1YjFmOThiYjliMDgyOWQ5YWQxMy4uZGY0NjQ3OTEzMmJjNzk4ZGFiOGM0NjY4N2JmMTdk
ZDU1ODI4ZDA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTExLTE5ICBQYXZl
bCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHNpbXBsaWZ5PyBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbiBpbiB0aGUgZWRpdG9yCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDI2ODgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBzaW1wbGlmaWVzIHRoZSBkYW1hZ2VkIHJlZ2lvbiBjb21wdXRhdGlvbi4gRHJpdmUtYnkgbWFr
ZSBfZ2V0U2VsZWN0aW9uIHdvcmsgcHJvcGVybHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlZmF1
bHRUZXh0RWRpdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5w
cm90b3R5cGUuX2hhbmRsZUN1dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNo
dW5rZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyLmNvbXBhcmVM
aW5lUm93T2Zmc2V0VG9wcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5r
ZWRQYW5lbC5wcm90b3R5cGUuX2ZpbmRGaXJzdFZpc2libGVMaW5lTnVtYmVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5oYW5kbGVFbnRlcktl
eS5nZXQgdmFyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5oYW5kbGVFbnRlcktleSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRv
ck1haW5QYW5lbC5wcm90b3R5cGUuX3BhaW50TGluZUNodW5rcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2dldFNlbGVjdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3Jlc3RvcmVT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJv
dG90eXBlLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fcG9zaXRpb25Ub1NlbGVjdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2hhbmRsZU11dGF0
aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5
cGUuX2NvbGxlY3REaXJ0eUxpbmVzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZS5fYXBwbHlEb21VcGRhdGVzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZS5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnBy
b3RvdHlwZS5fYXNzZXJ0RE9NTWF0Y2hlc1RleHRNb2RlbCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX3VwZGF0ZUNodW5rc0ZvclJhbmdlcyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUuX2Nv
bGxlY3RMaW5lc0Zyb21ET00pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmspOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90
eXBlLmFkZERlY29yYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWlu
Q2h1bmsucHJvdG90eXBlLmdldCBlbmRMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZS5saW5lUm93Q29udGFpbmluZ0xpbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1bmsucHJvdG90eXBlLmV4cGFuZGVkTGlu
ZVJvdyk6CisKIDIwMTItMTEtMTkgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZW1vdmUgaGlzdG9yaWNhbCBlbnVtcyBmcm9tIEV4Y2VwdGlvbkNvZGUuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4
dEVkaXRvci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVmYXVsdFRl
eHRFZGl0b3IuanMKaW5kZXggOTQxZDQyNTNjYzVmZWQ1YjA2Mzg4N2Y5M2FhYTgyYzA0MTBkNDdm
NS4uNTY3YTk2YjY2Njk5NmYzYWM4OTZmZTgyOGJjYWE3MzcyN2ViZmM2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWZhdWx0VGV4dEVkaXRvci5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlZmF1bHRUZXh0RWRpdG9y
LmpzCkBAIC05Myw2ICs5Myw3IEBAIFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvciA9IGZ1
bmN0aW9uKHVybCwgZGVsZWdhdGUpCiAgICAgdGhpcy5fZ3V0dGVyUGFuZWwuZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZXdoZWVsIiwgZm9yd2FyZFdoZWVsRXZlbnQuYmluZCh0aGlzKSwg
ZmFsc2UpOwogCiAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0
aGlzLl9oYW5kbGVLZXlEb3duLmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiY3V0IiwgdGhpcy5faGFuZGxlQ3V0LmJpbmQodGhpcyksIGZhbHNl
KTsKICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidGV4dElucHV0IiwgdGhpcy5f
aGFuZGxlVGV4dElucHV0LmJpbmQodGhpcyksIGZhbHNlKTsKICAgICB0aGlzLmVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9jb250ZXh0TWVudS5iaW5kKHRoaXMp
LCB0cnVlKTsKIApAQCAtNDI2LDYgKzQyNywxMSBAQCBXZWJJbnNwZWN0b3IuRGVmYXVsdFRleHRF
ZGl0b3IucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9tYWluUGFuZWwuX2tleURvd25Db2Rl
ID0gZS5rZXlDb2RlOwogICAgIH0sCiAKKyAgICBfaGFuZGxlQ3V0OiBmdW5jdGlvbihlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fbWFpblBhbmVsLl9rZXlEb3duQ29kZSA9IFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0LktleXMuRGVsZXRlLmNvZGU7CisgICAgfSwKKwogICAgIF9jb250ZXh0
TWVudTogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYW5jaG9yID0gZXZlbnQu
dGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRoTm9kZU5hbWUoImEiKTsKQEAgLTgzNiw3ICs4
NDIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvckNodW5rZWRQYW5lbC5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUxpbmVSb3dPZmZzZXRUb3BzKHZhbHVlLCBsaW5l
TnVtYmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmdldEV4
cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKTsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1
bmsuZXhwYW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVl
IDwgbGluZVJvdy5vZmZzZXRUb3AgPyAtMSA6IDE7CiAgICAgICAgIH0KICAgICAgICAgdmFyIGlu
c2VydEJlZm9yZSA9IGluc2VydGlvbkluZGV4Rm9yT2JqZWN0SW5MaXN0U29ydGVkQnlGdW5jdGlv
bih2aXNpYmxlRnJvbSwgbGluZU51bWJlcnMsIGNvbXBhcmVMaW5lUm93T2Zmc2V0VG9wcyk7CkBA
IC0xNDg2LDcgKzE0OTIsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmICghaW5kZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIHRoaXMuYmVnaW5VcGRhdGVzKCk7CisgICAgICAgIHRoaXMuYmVnaW5Eb21V
cGRhdGVzKCk7CiAKICAgICAgICAgdmFyIGxpbmVCcmVhayA9IHRoaXMuX3RleHRNb2RlbC5saW5l
QnJlYWs7CiAgICAgICAgIHZhciBuZXdSYW5nZTsKQEAgLTE1MDIsNyArMTUwOCw3IEBAIFdlYklu
c3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBuZXdSYW5nZSA9IHRoaXMuX3RleHRNb2RlbC5lZGl0UmFuZ2UocmFuZ2Us
IGxpbmVCcmVhayArIGluZGVudCk7CiAKLSAgICAgICAgdGhpcy5lbmRVcGRhdGVzKCk7CisgICAg
ICAgIHRoaXMuZW5kRG9tVXBkYXRlcygpOwogICAgICAgICB0aGlzLl9yZXN0b3JlU2VsZWN0aW9u
KG5ld1JhbmdlLmNvbGxhcHNlVG9FbmQoKSwgdHJ1ZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNjk0LDcgKzE3MDAsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBmb3IgKHZhciBsaW5lTnVtYmVyID0gbGluZUNodW5r
LnN0YXJ0TGluZTsgbGluZU51bWJlciA8IGxpbmVDaHVuay5lbmRMaW5lOyArK2xpbmVOdW1iZXIp
IHsKICAgICAgICAgICAgICAgICBpZiAoIWNodW5rIHx8IGxpbmVOdW1iZXIgPCBjaHVuay5zdGFy
dExpbmUgfHwgbGluZU51bWJlciA+PSBjaHVuay5zdGFydExpbmUgKyBjaHVuay5saW5lc0NvdW50
KQogICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuY2h1bmtGb3JMaW5lKGxpbmVOdW1i
ZXIpOwotICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZ2V0RXhwYW5kZWRMaW5l
Um93KGxpbmVOdW1iZXIpOworICAgICAgICAgICAgICAgIHZhciBsaW5lUm93ID0gY2h1bmsuZXhw
YW5kZWRMaW5lUm93KGxpbmVOdW1iZXIpOwogICAgICAgICAgICAgICAgIGlmICghbGluZVJvdykK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKGxpbmVO
dW1iZXIgPCBmaXJzdFZpc2libGVMaW5lTnVtYmVyKSB7CkBAIC0xODEzLDkgKzE4MTksMTAgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAK
ICAgICAvKioKKyAgICAgKiBAcGFyYW0gez9Ob2RlPX0gbGFzdFVuZGFtYWdlZExpbmVSb3cKICAg
ICAgKiBAcmV0dXJuIHtXZWJJbnNwZWN0b3IuVGV4dFJhbmdlfQogICAgICAqLwotICAgIF9nZXRT
ZWxlY3Rpb246IGZ1bmN0aW9uKCkKKyAgICBfZ2V0U2VsZWN0aW9uOiBmdW5jdGlvbihsYXN0VW5k
YW1hZ2VkTGluZVJvdykKICAgICB7CiAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0
U2VsZWN0aW9uKCk7CiAgICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpCkBAIC0xODIz
LDggKzE4MzAsOCBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIC8vIFNlbGVjdGlvbiBtYXkgYmUgb3V0c2lkZSBvZiB0aGUgZWRpdG9yLgog
ICAgICAgICBpZiAoIXRoaXMuX2NvbnRhaW5lci5pc0FuY2VzdG9yKHNlbGVjdGlvbi5hbmNob3JO
b2RlKSB8fCAhdGhpcy5fY29udGFpbmVyLmlzQW5jZXN0b3Ioc2VsZWN0aW9uLmZvY3VzTm9kZSkp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2Vs
ZWN0aW9uVG9Qb3NpdGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9m
ZnNldCk7Ci0gICAgICAgIHZhciBlbmQgPSBzZWxlY3Rpb24uaXNDb2xsYXBzZWQgPyBzdGFydCA6
IHRoaXMuX3NlbGVjdGlvblRvUG9zaXRpb24oc2VsZWN0aW9uLmZvY3VzTm9kZSwgc2VsZWN0aW9u
LmZvY3VzT2Zmc2V0KTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5fc2VsZWN0aW9uVG9Qb3Np
dGlvbihzZWxlY3Rpb24uYW5jaG9yTm9kZSwgc2VsZWN0aW9uLmFuY2hvck9mZnNldCwgbGFzdFVu
ZGFtYWdlZExpbmVSb3cpOworICAgICAgICB2YXIgZW5kID0gc2VsZWN0aW9uLmlzQ29sbGFwc2Vk
ID8gc3RhcnQgOiB0aGlzLl9zZWxlY3Rpb25Ub1Bvc2l0aW9uKHNlbGVjdGlvbi5mb2N1c05vZGUs
IHNlbGVjdGlvbi5mb2N1c09mZnNldCwgbGFzdFVuZGFtYWdlZExpbmVSb3cpOwogICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnQubGluZSwgc3RhcnQuY29sdW1u
LCBlbmQubGluZSwgZW5kLmNvbHVtbik7CiAgICAgfSwKIApAQCAtMTgzNSw2ICsxODQyLDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgIHsKICAg
ICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICB2YXIgc3Rh
cnQgPSB0aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLnN0YXJ0TGluZSwgcmFuZ2Uuc3Rh
cnRDb2x1bW4pOwogICAgICAgICB2YXIgZW5kID0gcmFuZ2UuaXNFbXB0eSgpID8gc3RhcnQgOiB0
aGlzLl9wb3NpdGlvblRvU2VsZWN0aW9uKHJhbmdlLmVuZExpbmUsIHJhbmdlLmVuZENvbHVtbik7
CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHN0YXJ0LmNv
bnRhaW5lciwgc3RhcnQub2Zmc2V0LCBlbmQuY29udGFpbmVyLCBlbmQub2Zmc2V0KTsKQEAgLTE4
NTMsMzQgKzE4NjEsNjMgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90
eXBlID0gewogICAgIC8qKgogICAgICAqIEBwYXJhbSB7Tm9kZX0gY29udGFpbmVyCiAgICAgICog
QHBhcmFtIHtudW1iZXJ9IG9mZnNldAorICAgICAqIEBwYXJhbSB7P05vZGU9fSBsYXN0VW5kYW1h
Z2VkTGluZVJvdwogICAgICAqLwotICAgIF9zZWxlY3Rpb25Ub1Bvc2l0aW9uOiBmdW5jdGlvbihj
b250YWluZXIsIG9mZnNldCkKKyAgICBfc2VsZWN0aW9uVG9Qb3NpdGlvbjogZnVuY3Rpb24oY29u
dGFpbmVyLCBvZmZzZXQsIGxhc3RVbmRhbWFnZWRMaW5lUm93KQogICAgIHsKICAgICAgICAgaWYg
KGNvbnRhaW5lciA9PT0gdGhpcy5fY29udGFpbmVyICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAg
ICAgIHJldHVybiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9OwogICAgICAgICBpZiAoY29udGFpbmVy
ID09PSB0aGlzLl9jb250YWluZXIgJiYgb2Zmc2V0ID09PSAxKQogICAgICAgICAgICAgcmV0dXJu
IHsgbGluZTogdGhpcy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgLSAxLCBjb2x1bW46IHRoaXMuX3Rl
eHRNb2RlbC5saW5lTGVuZ3RoKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50IC0gMSkgfTsKIAot
ICAgICAgICB2YXIgbGluZVJvdyA9IHRoaXMuX2VuY2xvc2luZ0xpbmVSb3dPclNlbGYoY29udGFp
bmVyKTsKLSAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBsaW5lUm93LmxpbmVOdW1iZXI7Ci0gICAg
ICAgIGlmIChjb250YWluZXIgPT09IGxpbmVSb3cgJiYgb2Zmc2V0ID09PSAwKQorICAgICAgICAv
LyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG9uIHRoZSBkYW1hZ2VkIERPTSAod2hlbiBET00g
ZG9lcyBub3QgbWF0Y2ggbW9kZWwpLgorICAgICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGNvdW50
aW5nIGxpbmVzIGZyb20gdGhlIGZpcnN0IHVuZGFtYWdlZCBsaW5lIGlmIGl0IGlzIGdpdmVuLgor
ICAgICAgICB2YXIgbGluZU51bWJlcjsKKyAgICAgICAgdmFyIGNvbHVtbiA9IDA7CisgICAgICAg
IHZhciBub2RlOworICAgICAgICB2YXIgc2NvcGVOb2RlOworICAgICAgICBpZiAobGFzdFVuZGFt
YWdlZExpbmVSb3cgPT09IG51bGwpIHsKKyAgICAgICAgICAgICAvLyBMYXN0IHVuZGFtYWdlZCBy
b3cgaXMgZ2l2ZW4sIGJ1dCBpcyBudWxsIC0gZm9yY2UgdHJhdmVyc2UgZnJvbSB0aGUgYmVnaW5u
aW5nCisgICAgICAgICAgICBub2RlID0gdGhpcy5fY29udGFpbmVyLmZpcnN0Q2hpbGQ7CisgICAg
ICAgICAgICBzY29wZU5vZGUgPSB0aGlzLl9jb250YWluZXI7CisgICAgICAgICAgICBsaW5lTnVt
YmVyID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBsaW5lUm93ID0gdGhp
cy5fZW5jbG9zaW5nTGluZVJvd09yU2VsZihjb250YWluZXIpOworICAgICAgICAgICAgaWYgKCFs
YXN0VW5kYW1hZ2VkTGluZVJvdyB8fCAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51
bWJlciIgJiYgbGluZVJvdy5saW5lTnVtYmVyIDw9IGxhc3RVbmRhbWFnZWRMaW5lUm93LmxpbmVO
dW1iZXIpKSB7CisgICAgICAgICAgICAgICAgLy8gRE9NIGlzIGNvbnNpc3RlbnQgKG9yIHdlIGJl
bG9uZyB0byB0aGUgZmlyc3QgZGFtYWdlZCByb3cpLSBsb29rdXAgdGhlIHJvdyB3ZSBiZWxvbmcg
dG8gYW5kIHN0YXJ0IHdpdGggaXQuCisgICAgICAgICAgICAgICAgbm9kZSA9IGxpbmVSb3c7Cisg
ICAgICAgICAgICAgICAgc2NvcGVOb2RlID0gbm9kZTsKKyAgICAgICAgICAgICAgICBsaW5lTnVt
YmVyID0gbm9kZS5saW5lTnVtYmVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdGFydCB3aXRoIHRoZSBub2RlIGZvbGxvd2luZyB1bmRhbWFnZWQgcm93LiBJdCBj
b3JyZXNwb25kcyB0byBsaW5lTnVtYmVyICsgMS4KKyAgICAgICAgICAgICAgICBub2RlID0gbGFz
dFVuZGFtYWdlZExpbmVSb3cubmV4dFNpYmxpbmc7CisgICAgICAgICAgICAgICAgc2NvcGVOb2Rl
ID0gdGhpcy5fY29udGFpbmVyOworICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBsYXN0VW5k
YW1hZ2VkTGluZVJvdy5saW5lTnVtYmVyICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZhc3QgcmV0dXJuIHRoZSBsaW5lIHN0YXJ0LgorICAgICAgICBpZiAoY29u
dGFpbmVyID09PSBub2RlICYmIG9mZnNldCA9PT0gMCkKICAgICAgICAgICAgIHJldHVybiB7IGxp
bmU6IGxpbmVOdW1iZXIsIGNvbHVtbjogMCB9OwogCi0gICAgICAgIC8vIFRoaXMgbWF5IGJlIGNo
dW5rIGFuZCBjaHVua3MgbWF5IGNvbnRhaW4gXG4uCi0gICAgICAgIHZhciBjb2x1bW4gPSAwOwot
ICAgICAgICB2YXIgbm9kZSA9IGxpbmVSb3cubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFID8g
bGluZVJvdyA6IGxpbmVSb3cudHJhdmVyc2VOZXh0VGV4dE5vZGUobGluZVJvdyk7Ci0gICAgICAg
IHdoaWxlIChub2RlICYmIG5vZGUgIT09IGNvbnRhaW5lcikgewotICAgICAgICAgICAgdmFyIHRl
eHQgPSBub2RlLnRleHRDb250ZW50OwotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
ZXh0Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09
PSAiXG4iKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uID0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgY29sdW1uKys7CisgICAgICAgIC8vIFRyYXZlcnNlIHRleHQgYW5kIGluY3JlbWVu
dCBsaW5lTnVtYmVyIC8gY29sdW1uLgorICAgICAgICBmb3IgKDsgbm9kZSAmJiBub2RlICE9PSBj
b250YWluZXI7IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dE5vZGUoc2NvcGVOb2RlKSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gImJyIikgeworICAg
ICAgICAgICAgICAgIGxpbmVOdW1iZXIrKzsKKyAgICAgICAgICAgICAgICBjb2x1bW4gPSAwOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkg
eworICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gbm9kZS50ZXh0Q29udGVudDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGkpID09PSAiXG4iKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaW5lTnVtYmVyKys7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4g
PSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbHVtbisrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG5vZGUgPSBub2RlLnRyYXZlcnNlTmV4dFRleHROb2RlKGxpbmVSb3cpOwogICAgICAgICB9CiAK
KyAgICAgICAgLy8gV2UgcmVhY2hlZCBvdXIgY29udGFpbmVyIG5vZGUsIHRyYXZlcnNlIHdpdGhp
biBpdHNlbGYgdW50aWwgd2UgcmVhY2ggZ2l2ZW4gb2Zmc2V0LgogICAgICAgICBpZiAobm9kZSA9
PT0gY29udGFpbmVyICYmIG9mZnNldCkgewogICAgICAgICAgICAgdmFyIHRleHQgPSBub2RlLnRl
eHRDb250ZW50OwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkg
ewpAQCAtMTkwMiw3ICsxOTM5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwu
cHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5jaHVua0Zvckxp
bmUobGluZSk7CiAgICAgICAgIC8vIE9uZS1saW5lZCBjb2xsYXBzZWQgY2h1bmtzIG1heSBzdGls
bCBzdGF5IGhpZ2hsaWdodGVkLgotICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291
bnQgPT09IDEgPyBjaHVuay5lbGVtZW50IDogY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93KGxpbmUp
OworICAgICAgICB2YXIgbGluZVJvdyA9IGNodW5rLmxpbmVzQ291bnQgPT09IDEgPyBjaHVuay5l
bGVtZW50IDogY2h1bmsuZXhwYW5kZWRMaW5lUm93KGxpbmUpOwogICAgICAgICBpZiAobGluZVJv
dykKICAgICAgICAgICAgIHZhciByYW5nZUJvdW5kYXJ5ID0gbGluZVJvdy5yYW5nZUJvdW5kYXJ5
Rm9yT2Zmc2V0KGNvbHVtbik7CiAgICAgICAgIGVsc2UgewpAQCAtMTk0OSw3ICsxOTg2LDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAg
IHZhciBzcGFuID0gdGhpcy5fY2FjaGVkU3BhbnMucG9wKCkgfHwgZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwogICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ3ZWJraXQtIiArIGNsYXNz
TmFtZTsKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRpdG9yKSAv
LyBGb3IgcGFpbnQgZGVidWdnaW5nLgorICAgICAgICBpZiAoZmFsc2UpIC8vIEZvciBwYWludCBk
ZWJ1Z2dpbmcuCiAgICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImRlYnVnLWZhZGVvdXQi
KTsKICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IGNvbnRlbnQ7CiAgICAgICAgIGVsZW1lbnQu
aW5zZXJ0QmVmb3JlKHNwYW4sIG9sZENoaWxkKTsKQEAgLTIwMDMsMTEgKzIwNDAsMTAgQEAgV2Vi
SW5zcGVjdG9yLlRleHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAg
IF9oYW5kbGVNdXRhdGlvbnM6IGZ1bmN0aW9uKG11dGF0aW9ucykKICAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLl9kb21VcGRhdGVDb2FsZXNjaW5nTGV2ZWwpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKHRoaXMuX3JlYWRPbmx5KQorICAgICAgICBpZiAodGhpcy5fcmVhZE9ubHkp
IHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9rZXlEb3duQ29kZTsKICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEFubmloaWxhdGUgbm9vcCBCUiBhZGRpdGlv
biArIHJlbW92YWwgdGhhdCB0YWtlcyBwbGFjZSB1cG9uIGxpbmUgcmVtb3ZhbC4KICAgICAgICAg
dmFyIGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLnNsaWNlKCk7CkBAIC0yMDQ5LDE0ICsy
MDg1LDE0IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgICAgICBkaXJ0eUxpbmVzLmVuZCA9IE1hdGgubWF4KGRpcnR5TGluZXMuZW5k
LCBsaW5lcy5lbmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KICAgICAgICAgaWYgKGRp
cnR5TGluZXMpIHsKICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9yYW5nZVRvTWFyazsKICAgICAg
ICAgICAgIHRoaXMuX2FwcGx5RG9tVXBkYXRlcyhkaXJ0eUxpbmVzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuZGVidWdEZWZhdWx0VGV4dEVkaXRvcikKLSAgICAgICAg
ICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVtZW50LmlubmVyVGV4dCA9PT0gdGhpcy5fdGV4dE1v
ZGVsLnRleHQoKSArICJcbiIsICJET00gZG9lcyBub3QgbWF0Y2ggbW9kZWwuIik7CisgICAgICAg
IHRoaXMuX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWwoKTsKKworICAgICAgICBkZWxldGUgdGhp
cy5fa2V5RG93bkNvZGU7CiAgICAgfSwKIAogICAgIC8qKgpAQCAtMjA3NiwyOSArMjExMiwxMSBA
QCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh0aGlzLl9yZWFkT25s
eSkKKyAgICAgICAgaWYgKHR5cGVvZiBsaW5lUm93LmxpbmVOdW1iZXIgIT09ICJudW1iZXIiKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAKLSAgICAgICAgaWYgKHRhcmdldCA9PT0gbGluZVJv
dyAmJiBtdXRhdGlvbi50eXBlID09PSAiY2hpbGRMaXN0IiAmJiBtdXRhdGlvbi5hZGRlZE5vZGVz
Lmxlbmd0aCkgewotICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIG5ld2x5IGluc2VydGVk
IGxpbmUgcm93IGhhcyBubyBsaW5lTnVtYmVyLgotICAgICAgICAgICAgZGVsZXRlIGxpbmVSb3cu
bGluZU51bWJlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBzdGFydExpbmUgPSAwOwotICAg
ICAgICBmb3IgKHZhciByb3cgPSBsaW5lUm93OyByb3c7IHJvdyA9IHJvdy5wcmV2aW91c1NpYmxp
bmcpIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Ygcm93LmxpbmVOdW1iZXIgPT09ICJudW1iZXIi
KSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRMaW5lID0gcm93LmxpbmVOdW1iZXI7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZW5kTGluZSA9IHN0YXJ0TGluZSArIDE7Ci0gICAgICAgIGZvciAodmFyIHJvdyA9IGxpbmVSb3cu
bmV4dFNpYmxpbmc7IHJvdzsgcm93ID0gcm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIHJvdy5saW5lTnVtYmVyID09PSAibnVtYmVyIiAmJiByb3cubGluZU51bWJlciA+
IHN0YXJ0TGluZSkgewotICAgICAgICAgICAgICAgIGVuZExpbmUgPSByb3cubGluZU51bWJlcjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAg
ICB2YXIgc3RhcnRMaW5lID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICB2YXIgZW5kTGlu
ZSA9IGxpbmVSb3cuX2NodW5rID8gbGluZVJvdy5fY2h1bmsuZW5kTGluZSAtIDEgOiBsaW5lUm93
LmxpbmVOdW1iZXI7CiAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBzdGFydExpbmUsIGVuZDogZW5k
TGluZSB9OwogICAgIH0sCiAKQEAgLTIxMDcsMzggKzIxMjUsMzUgQEAgV2ViSW5zcGVjdG9yLlRl
eHRFZGl0b3JNYWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAqLwogICAgIF9hcHBseURvbVVw
ZGF0ZXM6IGZ1bmN0aW9uKGRpcnR5TGluZXMpCiAgICAgewotICAgICAgICB2YXIgZmlyc3RDaHVu
a051bWJlciA9IHRoaXMuX2NodW5rTnVtYmVyRm9yTGluZShkaXJ0eUxpbmVzLnN0YXJ0KTsKLSAg
ICAgICAgdmFyIHN0YXJ0TGluZSA9IHRoaXMuX3RleHRDaHVua3NbZmlyc3RDaHVua051bWJlcl0u
c3RhcnRMaW5lOwotICAgICAgICB2YXIgZW5kTGluZSA9IHRoaXMuX3RleHRNb2RlbC5saW5lc0Nv
dW50OworICAgICAgICB2YXIgbGFzdFVuZGFtYWdlZExpbmVOdW1iZXIgPSBkaXJ0eUxpbmVzLnN0
YXJ0IC0gMTsgLy8gQ2FuIGJlIC0xCisgICAgICAgIHZhciBmaXJzdFVuZGFtYWdlZExpbmVOdW1i
ZXIgPSBkaXJ0eUxpbmVzLmVuZCArIDE7IC8vIENhbiBiZSB0aGlzLl90ZXh0TW9kZWwubGluZXND
b3VudAogCi0gICAgICAgIC8vIENvbGxlY3QgbGluZXMuCi0gICAgICAgIHZhciBmaXJzdExpbmVS
b3c7Ci0gICAgICAgIGlmIChmaXJzdENodW5rTnVtYmVyKSB7Ci0gICAgICAgICAgICB2YXIgY2h1
bmsgPSB0aGlzLl90ZXh0Q2h1bmtzW2ZpcnN0Q2h1bmtOdW1iZXIgLSAxXTsKLSAgICAgICAgICAg
IGZpcnN0TGluZVJvdyA9IGNodW5rLmV4cGFuZGVkID8gY2h1bmsuZ2V0RXhwYW5kZWRMaW5lUm93
KGNodW5rLnN0YXJ0TGluZSArIGNodW5rLmxpbmVzQ291bnQgLSAxKSA6IGNodW5rLmVsZW1lbnQ7
Ci0gICAgICAgICAgICBmaXJzdExpbmVSb3cgPSBmaXJzdExpbmVSb3cubmV4dFNpYmxpbmc7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZmlyc3RMaW5lUm93ID0gdGhpcy5fY29udGFpbmVy
LmZpcnN0Q2hpbGQ7CisgICAgICAgIHZhciBsYXN0VW5kYW1hZ2VkTGluZUNodW5rID0gbGFzdFVu
ZGFtYWdlZExpbmVOdW1iZXIgPj0gMCA/IHRoaXMuX3RleHRDaHVua3NbdGhpcy5fY2h1bmtOdW1i
ZXJGb3JMaW5lKGxhc3RVbmRhbWFnZWRMaW5lTnVtYmVyKV0gOiBudWxsOworICAgICAgICB2YXIg
Zmlyc3RVbmRhbWFnZWRMaW5lQ2h1bmsgPSBmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIgIDwgdGhp
cy5fdGV4dE1vZGVsLmxpbmVzQ291bnQgPyB0aGlzLl90ZXh0Q2h1bmtzW3RoaXMuX2NodW5rTnVt
YmVyRm9yTGluZShmaXJzdFVuZGFtYWdlZExpbmVOdW1iZXIpXSA6IG51bGw7CiAKLSAgICAgICAg
dmFyIGxpbmVzID0gW107Ci0gICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSBmaXJzdExpbmVSb3c7
IGxpbmVSb3c7IGxpbmVSb3cgPSBsaW5lUm93Lm5leHRTaWJsaW5nKSB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIGxpbmVSb3cubGluZU51bWJlciA9PT0gIm51bWJlciIgJiYgbGluZVJvdy5saW5l
TnVtYmVyID49IGRpcnR5TGluZXMuZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5kTGluZSA9IGxp
bmVSb3cubGluZU51bWJlcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIC8vIFVwZGF0ZSB3aXRoIHRoZSBuZXdlc3QgbGluZU51bWJlciwgc28gdGhh
dCB0aGUgY2FsbCB0byB0aGUgX2dldFNlbGVjdGlvbiBtZXRob2QgYmVsb3cgc2hvdWxkIHdvcmsu
Ci0gICAgICAgICAgICBsaW5lUm93LmxpbmVOdW1iZXIgPSBzdGFydExpbmUgKyBsaW5lcy5sZW5n
dGg7Ci0gICAgICAgICAgICB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRGl2KGxpbmVzLCBsaW5lUm93
KTsKLSAgICAgICAgfQorICAgICAgICB2YXIgY29sbGVjdExpbmVzRnJvbU5vZGUgPSBsYXN0VW5k
YW1hZ2VkTGluZUNodW5rID8gbGFzdFVuZGFtYWdlZExpbmVDaHVuay5saW5lUm93Q29udGFpbmlu
Z0xpbmUobGFzdFVuZGFtYWdlZExpbmVOdW1iZXIpIDogbnVsbDsKKyAgICAgICAgdmFyIGNvbGxl
Y3RMaW5lc1RvTm9kZSA9IGZpcnN0VW5kYW1hZ2VkTGluZUNodW5rID8gZmlyc3RVbmRhbWFnZWRM
aW5lQ2h1bmsubGluZVJvd0NvbnRhaW5pbmdMaW5lKGZpcnN0VW5kYW1hZ2VkTGluZU51bWJlcikg
OiBudWxsOworICAgICAgICB2YXIgbGluZXMgPSB0aGlzLl9jb2xsZWN0TGluZXNGcm9tRE9NKGNv
bGxlY3RMaW5lc0Zyb21Ob2RlLCBjb2xsZWN0TGluZXNUb05vZGUpOwogCi0gICAgICAgIHZhciBl
ZGl0SW5mbyA9IHRoaXMuX2d1ZXNzRWRpdFJhbmdlQmFzZWRPblNlbGVjdGlvbihkaXJ0eUxpbmVz
LCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKTsKLSAgICAgICAgaWYgKCFlZGl0SW5mbykKLSAg
ICAgICAgICAgIGVkaXRJbmZvID0gdGhpcy5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uRGlmZihkaXJ0
eUxpbmVzLCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKTsKKyAgICAgICAgdmFyIHN0YXJ0TGlu
ZSA9IGRpcnR5TGluZXMuc3RhcnQ7CisgICAgICAgIHZhciBlbmRMaW5lID0gZGlydHlMaW5lcy5l
bmQ7CisKKyAgICAgICAgdmFyIGVkaXRJbmZvID0gdGhpcy5fZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9u
U2VsZWN0aW9uKHN0YXJ0TGluZSwgZW5kTGluZSwgbGluZXMpOworICAgICAgICBpZiAoIWVkaXRJ
bmZvKSB7CisgICAgICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmRlYnVnRGVmYXVsdFRleHRFZGl0
b3IpCisgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJGYWxsaW5nIGJhY2sgdG8gZXhwZW5z
aXZlIGVkaXQiKTsKKyAgICAgICAgICAgIHZhciByYW5nZSA9IG5ldyBXZWJJbnNwZWN0b3IuVGV4
dFJhbmdlKHN0YXJ0TGluZSwgMCwgZW5kTGluZSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgo
ZW5kTGluZSkpOworICAgICAgICAgICAgaWYgKCFsaW5lcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAvLyBFbnRpcmUgZGFtYWdlZCBhcmVhIGhhcyBjb2xsYXBzZWQuIFJlcGxhY2UgZXZlcnl0
aGluZyBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgbGluZXMgd2l0aCBub3RoaW5nLgorICAgICAgICAg
ICAgICAgIGVkaXRJbmZvID0gbmV3IFdlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRvci5FZGl0
SW5mbyh0aGlzLl90ZXh0TW9kZWwuZ3Jvd1JhbmdlUmlnaHQocmFuZ2UpLCAiIik7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBlZGl0SW5mbyA9IG5ldyBXZWJJbnNwZWN0b3Iu
RGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm8ocmFuZ2UsIGxpbmVzLmpvaW4oIlxuIikpOworICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2UoZWRpdEluZm8u
cmFuZ2UpID09PSBlZGl0SW5mby50ZXh0KQogICAgICAgICAgICAgcmV0dXJuOyAvLyBOb29wCiAK
LSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICB2
YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKGNvbGxlY3RMaW5lc0Zyb21Ob2RlKTsK
IAogICAgICAgICAvLyBVbmluZGVudCBhZnRlciBibG9jawogICAgICAgICBpZiAoZWRpdEluZm8u
dGV4dCA9PT0gIn0iICYmIGVkaXRJbmZvLnJhbmdlLmlzRW1wdHkoKSAmJiBzZWxlY3Rpb24uaXNF
bXB0eSgpICYmICF0aGlzLl90ZXh0TW9kZWwubGluZShlZGl0SW5mby5yYW5nZS5lbmRMaW5lKS50
cmltKCkpIHsKQEAgLTIxNTYsMzAgKzIxNzEsMjcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0g
e09iamVjdH0gZGlydHlMaW5lcwogICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydExpbmUKICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gZW5kTGluZQogICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmlu
Zz59IGxpbmVzCiAgICAgICogQHJldHVybiB7P1dlYkluc3BlY3Rvci5EZWZhdWx0VGV4dEVkaXRv
ci5FZGl0SW5mb30KICAgICAgKi8KLSAgICBfZ3Vlc3NFZGl0UmFuZ2VCYXNlZE9uU2VsZWN0aW9u
OiBmdW5jdGlvbihkaXJ0eUxpbmVzLCBzdGFydExpbmUsIGVuZExpbmUsIGxpbmVzKQorICAgIF9n
dWVzc0VkaXRSYW5nZUJhc2VkT25TZWxlY3Rpb246IGZ1bmN0aW9uKHN0YXJ0TGluZSwgZW5kTGlu
ZSwgbGluZXMpCiAgICAgewotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHJlcGxhY2luZyBsYXN0
IHNlbGVjdGlvbiB3aXRoIHRleHRJbnB1dCBkYXRhIHJlc3VsdHMgaW4gcHJlc2VudCBET00uCi0g
ICAgICAgIC8vIElmIHRoYXQgaXMgc28sIHdlIGhhdmUgcHJlY2lzZSBpbnB1dCBmb3IgdGhlIGVk
aXRSYW5nZSBjYWxsLgorICAgICAgICAvLyBBbmFseXplIGlucHV0IGRhdGEKICAgICAgICAgdmFy
IHRleHRJbnB1dERhdGEgPSB0aGlzLl90ZXh0SW5wdXREYXRhOwogICAgICAgICBkZWxldGUgdGhp
cy5fdGV4dElucHV0RGF0YTsKICAgICAgICAgdmFyIGlzQmFja3NwYWNlID0gdGhpcy5fa2V5RG93
bkNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuQmFja3NwYWNlLmNv
ZGU7CiAgICAgICAgIHZhciBpc0RlbGV0ZSA9IHRoaXMuX2tleURvd25Db2RlID09PSBXZWJJbnNw
ZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkRlbGV0ZS5jb2RlOwotICAgICAgICBkZWxldGUg
dGhpcy5fa2V5RG93bkNvZGU7CiAKICAgICAgICAgaWYgKCF0ZXh0SW5wdXREYXRhICYmIChpc0Rl
bGV0ZSB8fCBpc0JhY2tzcGFjZSkpCiAgICAgICAgICAgICB0ZXh0SW5wdXREYXRhID0gIiI7CiAK
KyAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGlzIG5vIGlucHV0IGRhdGEgb3Igc2VsZWN0aW9u
CiAgICAgICAgIGlmICh0eXBlb2YgdGV4dElucHV0RGF0YSA9PT0gInVuZGVmaW5lZCIgfHwgIXRo
aXMuX2xhc3RTZWxlY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYg
KGRpcnR5TGluZXMuc3RhcnQgPiB0aGlzLl9sYXN0U2VsZWN0aW9uLnN0YXJ0TGluZSB8fCBkaXJ0
eUxpbmVzLmVuZCA8IHRoaXMuX2xhc3RTZWxlY3Rpb24uZW5kTGluZSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwogCisgICAgICAgIC8vIEFkanVzdCBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGtl
eWJvYXJkIGFjdGlvbnMgKGdyb3cgZm9yIGJhY2tzcGFjZSwgZXRjLikuCiAgICAgICAgIHRleHRJ
bnB1dERhdGEgPSB0ZXh0SW5wdXREYXRhIHx8ICIiOwogICAgICAgICB2YXIgcmFuZ2UgPSB0aGlz
Ll9sYXN0U2VsZWN0aW9uLm5vcm1hbGl6ZSgpOwogICAgICAgICBpZiAoaXNCYWNrc3BhY2UgJiYg
cmFuZ2UuaXNFbXB0eSgpKQpAQCAtMjE4Nyw3OCArMjE5OSw1MSBAQCBXZWJJbnNwZWN0b3IuVGV4
dEVkaXRvck1haW5QYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGVsc2UgaWYgKGlzRGVsZXRl
ICYmIHJhbmdlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5fdGV4dE1vZGVs
Lmdyb3dSYW5nZVJpZ2h0KHJhbmdlKTsKIAotICAgICAgICAvLyBXZSB3aWxsIGNsb25lIHRleHQg
bW9kZWwgYW5kIHJlcGxhY2UgbGFzdCBzZWxlY3Rpb24gd2l0aCB0ZXh0IGlucHV0IGRhdGEgdGhl
cmUuCi0gICAgICAgIHZhciBkb21Nb2RlbCA9IHRoaXMuX3RleHRNb2RlbC5zbGljZShzdGFydExp
bmUsIGVuZExpbmUpOwotICAgICAgICBkb21Nb2RlbC5lZGl0UmFuZ2UocmFuZ2Uuc2hpZnQoLXN0
YXJ0TGluZSksIHRleHRJbnB1dERhdGEpOworICAgICAgICAvLyBUZXN0IHRoYXQgc2VsZWN0aW9u
IGludGVyc2VjdHMgZGFtYWdlZCBsaW5lcworICAgICAgICBpZiAoc3RhcnRMaW5lID4gcmFuZ2Uu
ZW5kTGluZSB8fCBlbmRMaW5lIDwgcmFuZ2Uuc3RhcnRMaW5lKQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisKKyAgICAgICAgdmFyIHJlcGxhY2VtZW50TGluZUNvdW50ID0gdGV4dElucHV0RGF0
YS5zcGxpdCgiXG4iKS5sZW5ndGggLSAxOworICAgICAgICB2YXIgbGluZUNvdW50RGVsdGEgPSBy
ZXBsYWNlbWVudExpbmVDb3VudCAtIHJhbmdlLmxpbmVzQ291bnQ7CisgICAgICAgIGlmIChzdGFy
dExpbmUgKyBsaW5lcy5sZW5ndGggLSBlbmRMaW5lIC0gMSAhPT0gbGluZUNvdW50RGVsdGEpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAvLyBDbG9uZSB0ZXh0IG1vZGVsIG9m
IHRoZSBzaXplIHRoYXQgZml0cyBib3RoOiBzZWxlY3Rpb24gYmVmb3JlIGVkaXQgYW5kIHRoZSBk
YW1hZ2VkIGxpbmVzIGFmdGVyIGVkaXQuCisgICAgICAgIHZhciBjbG9uZUZyb21MaW5lID0gTWF0
aC5taW4ocmFuZ2Uuc3RhcnRMaW5lLCBzdGFydExpbmUpOworICAgICAgICB2YXIgcG9zdExhc3RM
aW5lID0gc3RhcnRMaW5lICsgbGluZXMubGVuZ3RoICsgbGluZUNvdW50RGVsdGE7CisgICAgICAg
IHZhciBjbG9uZVRvTGluZSA9IE1hdGgubWluKE1hdGgubWF4KHBvc3RMYXN0TGluZSwgcmFuZ2Uu
ZW5kTGluZSkgKyAxLCB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCk7CisgICAgICAgIHZhciBk
b21Nb2RlbCA9IHRoaXMuX3RleHRNb2RlbC5zbGljZShjbG9uZUZyb21MaW5lLCBjbG9uZVRvTGlu
ZSk7CisgICAgICAgIGRvbU1vZGVsLmVkaXRSYW5nZShyYW5nZS5zaGlmdCgtY2xvbmVGcm9tTGlu
ZSksIHRleHRJbnB1dERhdGEpOwogCiAgICAgICAgIC8vIFRoZW4gd2UnbGwgdGVzdCBpZiB0aGlz
IG5ldyBtb2RlbCBtYXRjaGVzIHRoZSBET00gbGluZXMuCi0gICAgICAgIGZvciAodmFyIGkgPSAw
OyAgaSA8IGRvbU1vZGVsLmxpbmVzQ291bnQ7ICsraSkgewotICAgICAgICAgICAgaWYgKGRvbU1v
ZGVsLmxpbmUoaSkgIT09IGxpbmVzW2ldKQorICAgICAgICBmb3IgKHZhciBpID0gMDsgIGkgPCBs
aW5lcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGRvbU1vZGVsLmxpbmUoaSArIHN0
YXJ0TGluZSAtIGNsb25lRnJvbUxpbmUpICE9PSBsaW5lc1tpXSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5E
ZWZhdWx0VGV4dEVkaXRvci5FZGl0SW5mbyhyYW5nZSwgdGV4dElucHV0RGF0YSk7CiAgICAgfSwK
IAotICAgIC8qKgotICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkaXJ0eUxpbmVzCi0gICAgICogQHBh
cmFtIHtudW1iZXJ9IHN0YXJ0TGluZQotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRMaW5lCi0g
ICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbGluZXMKLSAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuRGVmYXVsdFRleHRFZGl0b3IuRWRpdEluZm99Ci0gICAgICovCi0gICAgX2d1ZXNz
RWRpdFJhbmdlQmFzZWRPbkRpZmY6IGZ1bmN0aW9uKGRpcnR5TGluZXMsIHN0YXJ0TGluZSwgZW5k
TGluZSwgbGluZXMpCisgICAgX2Fzc2VydERPTU1hdGNoZXNUZXh0TW9kZWw6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVpbmcgcmVwbGFj
ZWQgYnkgbGluZXMsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSAwOwot
ICAgICAgICB3aGlsZSAoc3RhcnRMaW5lIDwgZGlydHlMaW5lcy5zdGFydCAmJiBzdGFydE9mZnNl
dCA8IGxpbmVzLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHRoaXMuX3RleHRNb2RlbC5saW5l
KHN0YXJ0TGluZSkgIT09IGxpbmVzW3N0YXJ0T2Zmc2V0XSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICsrc3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICArK3N0YXJ0TGluZTsK
LSAgICAgICAgfQorICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5kZWJ1Z0RlZmF1bHRUZXh0RWRp
dG9yKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBlbmRPZmZzZXQgPSBsaW5l
cy5sZW5ndGg7Ci0gICAgICAgIHdoaWxlIChlbmRMaW5lID4gZGlydHlMaW5lcy5lbmQgJiYgZW5k
T2Zmc2V0ID4gc3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl90ZXh0TW9kZWwu
bGluZShlbmRMaW5lIC0gMSkgIT09IGxpbmVzW2VuZE9mZnNldCAtIDFdKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgLS1lbmRPZmZzZXQ7Ci0gICAgICAgICAgICAtLWVuZExp
bmU7Ci0gICAgICAgIH0KLQotICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOwotCi0gICAgICAgIC8vIFRyeSB0byBkZWNyZWFzZSB0aGUgcmFuZ2UgYmVp
bmcgcmVwbGFjZWQgYnkgY29sdW1uIG9mZnNldHMsIGlmIHBvc3NpYmxlLgotICAgICAgICB2YXIg
c3RhcnRDb2x1bW4gPSAwOwotICAgICAgICB2YXIgZW5kQ29sdW1uID0gdGhpcy5fdGV4dE1vZGVs
LmxpbmVMZW5ndGgoZW5kTGluZSAtIDEpOwotICAgICAgICBpZiAobGluZXMubGVuZ3RoID4gMCkg
ewotICAgICAgICAgICAgdmFyIGxpbmUxID0gdGhpcy5fdGV4dE1vZGVsLmxpbmUoc3RhcnRMaW5l
KTsKLSAgICAgICAgICAgIHZhciBsaW5lMiA9IGxpbmVzWzBdOwotICAgICAgICAgICAgd2hpbGUg
KGxpbmUxW3N0YXJ0Q29sdW1uXSAmJiBsaW5lMVtzdGFydENvbHVtbl0gPT09IGxpbmUyW3N0YXJ0
Q29sdW1uXSkKLSAgICAgICAgICAgICAgICArK3N0YXJ0Q29sdW1uOwotICAgICAgICAgICAgbGlu
ZXNbMF0gPSBsaW5lMi5zdWJzdHJpbmcoc3RhcnRDb2x1bW4pOwotCi0gICAgICAgICAgICBsaW5l
MSA9IHRoaXMuX3RleHRNb2RlbC5saW5lKGVuZExpbmUgLSAxKTsKLSAgICAgICAgICAgIGxpbmUy
ID0gbGluZXNbbGluZXMubGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGVuZENvbHVtbiAmJiBpIDwgbGluZTIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhcnRMaW5lID09PSBlbmRMaW5lIC0gMSAmJiBlbmRDb2x1bW4gLSBpIDw9IHN0YXJ0
Q29sdW1uKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAo
bGluZTFbZW5kQ29sdW1uIC0gaSAtIDFdICE9PSBsaW5lMltsaW5lMi5sZW5ndGggLSBpIC0gMV0p
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGkpIHsKLSAgICAgICAgICAgICAgICBlbmRDb2x1bW4gLT0gaTsKLSAgICAgICAgICAgICAg
ICBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSA9IGxpbmUyLnN1YnN0cmluZygwLCBsaW5lMi5sZW5n
dGggLSBpKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5lbGVtZW50LmlubmVyVGV4dCA9
PT0gdGhpcy5fdGV4dE1vZGVsLnRleHQoKSArICJcbiIsICJET00gZG9lcyBub3QgbWF0Y2ggbW9k
ZWwuIik7CisgICAgICAgIGZvciAodmFyIGxpbmVSb3cgPSB0aGlzLl9jb250YWluZXIuZmlyc3RD
aGlsZDsgbGluZVJvdzsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxpbmcpIHsKKyAgICAgICAg
ICAgIHZhciBsaW5lTnVtYmVyID0gbGluZVJvdy5saW5lTnVtYmVyOworICAgICAgICAgICAgaWYg
KHR5cGVvZiBsaW5lTnVtYmVyICE9PSAibnVtYmVyIikgeworICAgICAgICAgICAgICAgIGNvbnNv
bGUud2FybigiTm8gbGluZSBudW1iZXIgb24gbGluZSByb3ciKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsaW5lUm93Ll9jaHVuaykg
eworICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGxpbmVSb3cuX2NodW5rOworICAgICAgICAg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGxpbmVOdW1iZXIgPT09IGNodW5rLnN0YXJ0TGluZSk7Cisg
ICAgICAgICAgICAgICAgdmFyIGNodW5rVGV4dCA9IHRoaXMuX3RleHRNb2RlbC5jb3B5UmFuZ2Uo
bmV3IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2UoY2h1bmsuc3RhcnRMaW5lLCAwLCBjaHVuay5lbmRM
aW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxpbmVMZW5ndGgoY2h1bmsuZW5kTGluZSAtIDEpKSk7
CisgICAgICAgICAgICAgICAgaWYgKGNodW5rVGV4dCAhPT0gbGluZVJvdy50ZXh0Q29udGVudCkK
KyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCJDaHVuayBpcyBub3QgbWF0Y2hpbmc6
ICVkICVPIiwgbGluZU51bWJlciwgbGluZVJvdyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRo
aXMuX3RleHRNb2RlbC5saW5lKGxpbmVOdW1iZXIpICE9PSBsaW5lUm93LnRleHRDb250ZW50KQor
ICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiTGluZSBpcyBub3QgbWF0Y2hpbmc6ICVkICVP
IiwgbGluZU51bWJlciwgbGluZVJvdyk7CiAgICAgICAgIH0KLQotICAgICAgICB2YXIgcmFuZ2U7
Ci0gICAgICAgIGlmIChsaW5lcy5sZW5ndGggPT09IDAgJiYgZW5kTGluZSA8IHRoaXMuX3RleHRN
b2RlbC5saW5lc0NvdW50KQotICAgICAgICAgICAgcmFuZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLlRl
eHRSYW5nZShzdGFydExpbmUsIDAsIGVuZExpbmUsIDApOwotICAgICAgICBlbHNlIGlmIChsaW5l
cy5sZW5ndGggPT09IDAgJiYgc3RhcnRMaW5lID4gMCkKLSAgICAgICAgICAgIHJhbmdlID0gbmV3
IFdlYkluc3BlY3Rvci5UZXh0UmFuZ2Uoc3RhcnRMaW5lIC0gMSwgdGhpcy5fdGV4dE1vZGVsLmxp
bmVMZW5ndGgoc3RhcnRMaW5lIC0gMSksIGVuZExpbmUgLSAxLCB0aGlzLl90ZXh0TW9kZWwubGlu
ZUxlbmd0aChlbmRMaW5lIC0gMSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByYW5nZSA9
IG5ldyBXZWJJbnNwZWN0b3IuVGV4dFJhbmdlKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4sIGVuZExp
bmUgLSAxLCBlbmRDb2x1bW4pOwotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5EZWZh
dWx0VGV4dEVkaXRvci5FZGl0SW5mbyhyYW5nZSwgbGluZXMuam9pbigiXG4iKSk7CiAgICAgfSwK
IAogICAgIC8qKgpAQCAtMjM0NCw3ICsyMzI5LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JN
YWluUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB2YXIgZmlyc3RMaW5lUm93OwogICAgICAg
ICBpZiAoZmlyc3RDaHVua051bWJlcikgewogICAgICAgICAgICAgdmFyIGNodW5rID0gdGhpcy5f
dGV4dENodW5rc1tmaXJzdENodW5rTnVtYmVyIC0gMV07Ci0gICAgICAgICAgICBmaXJzdExpbmVS
b3cgPSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFy
dExpbmUgKyBjaHVuay5saW5lc0NvdW50IC0gMSkgOiBjaHVuay5lbGVtZW50OworICAgICAgICAg
ICAgZmlyc3RMaW5lUm93ID0gY2h1bmsuZXhwYW5kZWQgPyBjaHVuay5leHBhbmRlZExpbmVSb3co
Y2h1bmsuc3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudCAtIDEpIDogY2h1bmsuZWxlbWVudDsK
ICAgICAgICAgICAgIGZpcnN0TGluZVJvdyA9IGZpcnN0TGluZVJvdy5uZXh0U2libGluZzsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmaXJzdExpbmVSb3cgPSB0aGlzLl9jb250YWluZXIu
Zmlyc3RDaGlsZDsKQEAgLTIzNTYsNyArMjM0MSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9y
TWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIHZhciBsaW5lTnVtYmVyID0gY2h1bmsuc3RhcnRMaW5lOwogICAgICAgICAgICAgZm9yICh2
YXIgbGluZVJvdyA9IGZpcnN0TGluZVJvdzsgbGluZVJvdyAmJiBsaW5lTnVtYmVyIDwgY2h1bmsu
c3RhcnRMaW5lICsgY2h1bmsubGluZXNDb3VudDsgbGluZVJvdyA9IGxpbmVSb3cubmV4dFNpYmxp
bmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZVJvdy5saW5lTnVtYmVyICE9PSBsaW5lTnVt
YmVyIHx8IGxpbmVSb3cgIT09IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhsaW5lTnVtYmVyKSB8
fCBsaW5lUm93LnRleHRDb250ZW50ICE9PSB0aGlzLl90ZXh0TW9kZWwubGluZShsaW5lTnVtYmVy
KSB8fCAhbGluZVJvdy5maXJzdENoaWxkKQorICAgICAgICAgICAgICAgIGlmIChsaW5lUm93Lmxp
bmVOdW1iZXIgIT09IGxpbmVOdW1iZXIgfHwgbGluZVJvdyAhPT0gY2h1bmsuZXhwYW5kZWRMaW5l
Um93KGxpbmVOdW1iZXIpIHx8IGxpbmVSb3cudGV4dENvbnRlbnQgIT09IHRoaXMuX3RleHRNb2Rl
bC5saW5lKGxpbmVOdW1iZXIpIHx8ICFsaW5lUm93LmZpcnN0Q2hpbGQpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKICAgICAgICAgICAg
IH0KQEAgLTIzODcsNyArMjM3Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpblBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGZpcnN0VW5tb2RpZmllZExpbmVSb3cgPSBudWxs
OwogICAgICAgICBjaHVuayA9IHRoaXMuX3RleHRDaHVua3NbbGFzdENodW5rTnVtYmVyICsgMV07
CiAgICAgICAgIGlmIChjaHVuaykKLSAgICAgICAgICAgIGZpcnN0VW5tb2RpZmllZExpbmVSb3cg
PSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmdldEV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExp
bmUpIDogY2h1bmsuZWxlbWVudDsKKyAgICAgICAgICAgIGZpcnN0VW5tb2RpZmllZExpbmVSb3cg
PSBjaHVuay5leHBhbmRlZCA/IGNodW5rLmV4cGFuZGVkTGluZVJvdyhjaHVuay5zdGFydExpbmUp
IDogY2h1bmsuZWxlbWVudDsKIAogICAgICAgICB3aGlsZSAoZmlyc3RMaW5lUm93ICYmIGZpcnN0
TGluZVJvdyAhPT0gZmlyc3RVbm1vZGlmaWVkTGluZVJvdykgewogICAgICAgICAgICAgdmFyIGxp
bmVSb3cgPSBmaXJzdExpbmVSb3c7CkBAIC0yNDQxLDMyICsyNDI2LDMxIEBAIFdlYkluc3BlY3Rv
ci5UZXh0RWRpdG9yTWFpblBhbmVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCi0g
ICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gbGluZXMKLSAgICAgKiBAcGFyYW0ge0VsZW1l
bnR9IGVsZW1lbnQKKyAgICAgKiBAcGFyYW0ge05vZGV9IGZyb20KKyAgICAgKiBAcGFyYW0ge05v
ZGV9IHRvCisgICAgICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59CiAgICAgICovCi0gICAgX2Nv
bGxlY3RMaW5lc0Zyb21EaXY6IGZ1bmN0aW9uKGxpbmVzLCBlbGVtZW50KQorICAgIF9jb2xsZWN0
TGluZXNGcm9tRE9NOiBmdW5jdGlvbihmcm9tLCB0bykKICAgICB7CiAgICAgICAgIHZhciB0ZXh0
Q29udGVudHMgPSBbXTsKLSAgICAgICAgdmFyIG5vZGUgPSBlbGVtZW50Lm5vZGVUeXBlID09PSBO
b2RlLlRFWFRfTk9ERSA/IGVsZW1lbnQgOiBlbGVtZW50LnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVu
dCk7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC5kZWNv
cmF0aW9uc0VsZW1lbnQgPT09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5u
ZXh0U2libGluZzsKKyAgICAgICAgdmFyIGhhc0NvbnRlbnQgPSBmYWxzZTsKKyAgICAgICAgZm9y
ICh2YXIgbm9kZSA9IGZyb20gPyBmcm9tLm5leHRTaWJsaW5nIDogdGhpcy5fY29udGFpbmVyOyBu
b2RlICYmIG5vZGUgIT09IHRvOyBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKHRoaXMuX2Nv
bnRhaW5lcikpIHsKKyAgICAgICAgICAgIGlmIChub2RlLl9pc0RlY29yYXRpb25zRWxlbWVudCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhh
c0NvbnRlbnQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9Mb3dlckNh
c2UoKSA9PT0gImJyIikKICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudHMucHVzaCgiXG4iKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKQog
ICAgICAgICAgICAgICAgIHRleHRDb250ZW50cy5wdXNoKG5vZGUudGV4dENvbnRlbnQpOwotICAg
ICAgICAgICAgbm9kZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKICAgICAgICAg
fQorICAgICAgICBpZiAoIWhhc0NvbnRlbnQpCisgICAgICAgICAgICByZXR1cm4gW107CiAKICAg
ICAgICAgdmFyIHRleHRDb250ZW50ID0gdGV4dENvbnRlbnRzLmpvaW4oIiIpOwogICAgICAgICAv
LyBUaGUgbGFzdCBcbiAoaWYgYW55KSBkb2VzIG5vdCAiY291bnQiIGluIGEgRElWLgogICAgICAg
ICB0ZXh0Q29udGVudCA9IHRleHRDb250ZW50LnJlcGxhY2UoL1xuJC8sICIiKTsKIAotICAgICAg
ICB0ZXh0Q29udGVudHMgPSB0ZXh0Q29udGVudC5zcGxpdCgiXG4iKTsKLSAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0ZXh0Q29udGVudHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBsaW5l
cy5wdXNoKHRleHRDb250ZW50c1tpXSk7CisgICAgICAgIHJldHVybiB0ZXh0Q29udGVudC5zcGxp
dCgiXG4iKTsKICAgICB9LAogCiAgICAgX2hhbmRsZVNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24o
ZXZlbnQpCkBAIC0yNDk0LDYgKzI0NzgsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dEVkaXRvck1haW5D
aHVuayA9IGZ1bmN0aW9uKGNodW5rZWRQYW5lbCwgc3RhcnRMaW5lLCBlbmRMaW5lKQogICAgIHRo
aXMuZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgIHRoaXMuZWxl
bWVudC5saW5lTnVtYmVyID0gc3RhcnRMaW5lOwogICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUg
PSAid2Via2l0LWxpbmUtY29udGVudCI7CisgICAgdGhpcy5lbGVtZW50Ll9jaHVuayA9IHRoaXM7
CiAKICAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7CiAgICAgZW5kTGluZSA9IE1hdGgu
bWluKHRoaXMuX3RleHRNb2RlbC5saW5lc0NvdW50LCBlbmRMaW5lKTsKQEAgLTI1MTQsNiArMjQ5
OSw3IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudCkgewogICAgICAg
ICAgICAgICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuZGVjb3JhdGlv
bnNFbGVtZW50LmNsYXNzTmFtZSA9ICJ3ZWJraXQtbGluZS1kZWNvcmF0aW9ucyI7CisgICAgICAg
ICAgICAgICAgdGhpcy5lbGVtZW50LmRlY29yYXRpb25zRWxlbWVudC5faXNEZWNvcmF0aW9uc0Vs
ZW1lbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0
aGlzLmVsZW1lbnQuZGVjb3JhdGlvbnNFbGVtZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHRoaXMuZWxlbWVudC5kZWNvcmF0aW9uc0VsZW1lbnQuYXBwZW5kQ2hpbGQoZGVjb3JhdGlv
bik7CkBAIC0yNTYxLDYgKzI1NDcsMTQgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRMaW5lOwogICAgIH0s
CiAKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtudW1iZXJ9CisgICAgICovCisgICAgZ2V0IGVu
ZExpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0TGluZSArIHRoaXMubGlu
ZXNDb3VudDsKKyAgICB9LAorCiAgICAgc2V0IHN0YXJ0TGluZShzdGFydExpbmUpCiAgICAgewog
ICAgICAgICB0aGlzLl9zdGFydExpbmUgPSBzdGFydExpbmU7CkBAIC0yNjU4LDEwICsyNjUyLDIy
IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yTWFpbkNodW5rLnByb3RvdHlwZSA9IHsKICAgICB9
LAogCiAgICAgLyoqCisgICAgICogQ2FsbGVkIG9uIHBvdGVudGlhbGx5IGRhbWFnZWQgLyBpbmNv
bnNpc3RlbnQgY2h1bmsKKyAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZU51bWJlcgorICAgICAq
IEByZXR1cm4gez9Ob2RlfQorICAgICAqLworICAgIGxpbmVSb3dDb250YWluaW5nTGluZTogZnVu
Y3Rpb24obGluZU51bWJlcikKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZXhwYW5kZWQpCisg
ICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50OworICAgICAgICByZXR1cm4gdGhpcy5leHBh
bmRlZExpbmVSb3cobGluZU51bWJlcik7CisgICAgfSwKKworICAgIC8qKgogICAgICAqIEBwYXJh
bSB7bnVtYmVyfSBsaW5lTnVtYmVyCiAgICAgICogQHJldHVybiB7RWxlbWVudH0KICAgICAgKi8K
LSAgICBnZXRFeHBhbmRlZExpbmVSb3c6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgZXhwYW5k
ZWRMaW5lUm93OiBmdW5jdGlvbihsaW5lTnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlz
Ll9leHBhbmRlZCB8fCBsaW5lTnVtYmVyIDwgdGhpcy5zdGFydExpbmUgfHwgbGluZU51bWJlciA+
PSB0aGlzLnN0YXJ0TGluZSArIHRoaXMubGluZXNDb3VudCkKICAgICAgICAgICAgIHJldHVybiBu
dWxsOwpAQCAtMjY4NywzICsyNjkzLDUgQEAgV2ViSW5zcGVjdG9yLlRleHRFZGl0b3JNYWluQ2h1
bmsucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOwogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLmRl
YnVnRGVmYXVsdFRleHRFZGl0b3IgPSBmYWxzZTsK
</data>
<flag name="review"
          id="190599"
          type_id="1"
          status="+"
          setter="vsevik"
    />
          </attachment>
      

    </bug>

</bugzilla>