<?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>60160</bug_id>
          
          <creation_ts>2011-05-04 05:45:44 -0700</creation_ts>
          <short_desc>Web Inspector: expose shadow DOM in the Elements panel</short_desc>
          <delta_ts>2012-02-08 21:49:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Kosyakov">caseq</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>mathias</cc>
    
    <cc>mike</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>silviapf</cc>
    
    <cc>sjl</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>397842</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 05:45:44 -0700</bug_when>
    <thetext>This adds a pseudo-child called &quot;(shadow)&quot; thats hosts the shadow subtree of a DOM element (if present).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397843</commentid>
    <comment_count>1</comment_count>
      <attachid>92222</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 05:46:25 -0700</bug_when>
    <thetext>Created attachment 92222
screenshot</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397846</commentid>
    <comment_count>2</comment_count>
      <attachid>92223</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 05:57:58 -0700</bug_when>
    <thetext>Created attachment 92223
patch

Comments on the ways to visually distinguish shadow DOM elements are welcome. So far, these are &quot;opacity: 0.7&quot;. Pavel suggests we use a different background for the entire block, but I don&apos;t find this attractive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397848</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-04 05:59:21 -0700</bug_when>
    <thetext>Attachment 92223 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1

Source/WebCore/inspector/front-end/ElementsPanel.js:664:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1268:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1420:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1421:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1421:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1422:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/inspector/InspectorDOMAgent.cpp:1423:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:570:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:571:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:572:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:573:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:574:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:575:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:576:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:577:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:578:  Line contains tab character.  [whitespace/tab] [5]
Source/WebCore/inspector/front-end/ElementsTreeOutline.js:1386:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 17 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397861</commentid>
    <comment_count>4</comment_count>
      <attachid>92227</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 06:08:21 -0700</bug_when>
    <thetext>Created attachment 92227
patch

- style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397876</commentid>
    <comment_count>5</comment_count>
      <attachid>92223</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2011-05-04 06:28:53 -0700</bug_when>
    <thetext>Comment on attachment 92223
patch

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

&gt; LayoutTests/inspector/elements/shadow-dom-expected.txt:20
&gt; +        - &lt;div&gt;

Would be nice if the test used our own element with simpler shadow tree and would depend on the internal structure of &lt;video&gt; element.

&gt; Source/WebCore/dom/Element.cpp:1188
&gt; +    InspectorInstrumentation::willInsertDOMNode(document(), newRoot.get(), this);

Should it be willInsertShadowRoot?

&gt; Source/WebCore/inspector/front-end/DOMAgent.js:321
&gt; +            child._inShadowTree = this._inShadowTree;

This way all child nodes including non-shadow ones will be considered as shadow elements. We should support the case when an element with shadow tree contains non-shadow elements.

&gt;&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:570
&gt;&gt; +	    // If we ever had shadow root child, it&apos;s going to be second to last (before closing tag)
&gt; 
&gt; Line contains tab character.  [whitespace/tab] [5]

Why is this? Can we check for the shadow root in a more clear way?

&gt;&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:571
&gt;&gt; +	    var shadowRootChild = treeElement.children[treeElement.children.length - 2];
&gt; 
&gt; Line contains tab character.  [whitespace/tab] [5]

This will throw if children.length &lt; 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397883</commentid>
    <comment_count>6</comment_count>
      <attachid>92223</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 06:45:34 -0700</bug_when>
    <thetext>Comment on attachment 92223
patch

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

&gt;&gt; LayoutTests/inspector/elements/shadow-dom-expected.txt:20
&gt;&gt; +        - &lt;div&gt;
&gt; 
&gt; Would be nice if the test used our own element with simpler shadow tree and would depend on the internal structure of &lt;video&gt; element.

We can&apos;t do that unless we do it in DumpRenderTree -- shadow DOM is not accessible from JavaScript. I don&apos;t think this is worth the hassle, given this would have to be implemented for multiple platforms.

&gt;&gt; Source/WebCore/dom/Element.cpp:1188
&gt;&gt; +    InspectorInstrumentation::willInsertDOMNode(document(), newRoot.get(), this);
&gt; 
&gt; Should it be willInsertShadowRoot?

It _may_ -- I was just trying to keep instrumentation interface narrow. That is, I don&apos;t think we have to distinguish between adding a new node as a child or as a shadow root here. I can add a separate method, though, if you think it&apos;s worth it.

&gt;&gt; Source/WebCore/inspector/front-end/DOMAgent.js:321
&gt;&gt; +            child._inShadowTree = this._inShadowTree;
&gt; 
&gt; This way all child nodes including non-shadow ones will be considered as shadow elements. We should support the case when an element with shadow tree contains non-shadow elements.

That&apos;s the intent, everything under shadow root belongs to shadow tree, there&apos;s no elements exposed via normal DOM interfaces under shadow root. This property in particular mirrors Node::inShadowTree() (we need this to visually distinguish entire contents of the shadow tree in the UI)

&gt;&gt;&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:570
&gt;&gt;&gt; +	    // If we ever had shadow root child, it&apos;s going to be second to last (before closing tag)
&gt;&gt; 
&gt;&gt; Line contains tab character.  [whitespace/tab] [5]
&gt; 
&gt; Why is this? Can we check for the shadow root in a more clear way?

The intent here is to find a shadow root node within the existing children. We can probably scan the children (see how it happens above within the loop in updateChildrenOfNode()), but I don&apos;t think it&apos;s going to be any more clear (but definitely less efficient). Alternatively, we can store a separate reference to a particular child, but this way we should be careful to drop it when children are removed. I agree this code stinks, but any alternatives I see don&apos;t seem to be much better :)

&gt;&gt;&gt; Source/WebCore/inspector/front-end/ElementsTreeOutline.js:571
&gt;&gt;&gt; +	    var shadowRootChild = treeElement.children[treeElement.children.length - 2];
&gt;&gt; 
&gt;&gt; Line contains tab character.  [whitespace/tab] [5]
&gt; 
&gt; This will throw if children.length &lt; 2.

Nope, it&apos;s JavaScript. ([])[-1] === undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397886</commentid>
    <comment_count>7</comment_count>
      <attachid>92227</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-04 06:47:19 -0700</bug_when>
    <thetext>Comment on attachment 92227
patch

This is great! Thanks folks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397891</commentid>
    <comment_count>8</comment_count>
      <attachid>92223</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 06:50:29 -0700</bug_when>
    <thetext>Comment on attachment 92223
patch

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

&gt;&gt;&gt; LayoutTests/inspector/elements/shadow-dom-expected.txt:20
&gt;&gt;&gt; +        - &lt;div&gt;
&gt;&gt; 
&gt;&gt; Would be nice if the test used our own element with simpler shadow tree and would depend on the internal structure of &lt;video&gt; element.
&gt; 
&gt; We can&apos;t do that unless we do it in DumpRenderTree -- shadow DOM is not accessible from JavaScript. I don&apos;t think this is worth the hassle, given this would have to be implemented for multiple platforms.

Actually, I just realized that we already expose LayoutTestController.ensureShadowRoot() -- so I&apos;ll get rid of &lt;video&gt; here and will switch to a manually build shadow tree. Thanks for the idea!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397922</commentid>
    <comment_count>9</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2011-05-04 08:08:47 -0700</bug_when>
    <thetext>Manually committed r85751: http://trac.webkit.org/changeset/85751</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398070</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-05-04 10:58:15 -0700</bug_when>
    <thetext>Cool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525937</commentid>
    <comment_count>11</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2011-12-21 19:47:02 -0800</bug_when>
    <thetext>Note: this was removed in bug 62188.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525938</commentid>
    <comment_count>12</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2011-12-21 19:48:37 -0800</bug_when>
    <thetext>I needed to debug shadow dom in chrome, so I have recreated this patch for current TOT chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525943</commentid>
    <comment_count>13</comment_count>
    <who name="sideshowbarker">mike</who>
    <bug_when>2011-12-21 20:06:08 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I needed to debug shadow dom in chrome, so I have recreated this patch for current TOT chrome.

Seems like the discussion on this should move over to bug 62220</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525959</commentid>
    <comment_count>14</comment_count>
      <attachid>120263</attachid>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2011-12-21 20:42:23 -0800</bug_when>
    <thetext>Created attachment 120263
Updated patch, no tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525960</commentid>
    <comment_count>15</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2011-12-21 20:44:36 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Seems like the discussion on this should move over to bug 62220

I didn&apos;t include the tests from the previous patches, so would like to keep it here, so somebody can take this code, add tests ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552844</commentid>
    <comment_count>16</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2012-02-08 21:49:58 -0800</bug_when>
    <thetext>Discussion should be moved to bug 78202.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>92222</attachid>
            <date>2011-05-04 05:46:25 -0700</date>
            <delta_ts>2011-05-04 05:46:25 -0700</delta_ts>
            <desc>screenshot</desc>
            <filename>shadow-dom-screenshot.png</filename>
            <type>image/png</type>
            <size>16969</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92223</attachid>
            <date>2011-05-04 05:57:58 -0700</date>
            <delta_ts>2011-05-04 06:50:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>shadow-dom.diff</filename>
            <type>text/plain</type>
            <size>30466</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZTM2Nzg0Li5hNjQ3ZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUt
MDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBleHBvc2Ug
c2hhZG93IERPTSBpbiB0aGUgRWxlbWVudHMgcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTYwCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZV9FbGVtZW50VGVz
dC5JbnNwZWN0b3JUZXN0Lm5vZGVXaXRoSWQucHJvY2Vzc0NoaWxkcmVuKToKKyAgICAgICAgKGlu
aXRpYWxpemVfRWxlbWVudFRlc3QuSW5zcGVjdG9yVGVzdC5ub2RlV2l0aElkLmRvY3VtZW50UmVx
dWVzdGVkKToKKyAgICAgICAgKGluaXRpYWxpemVfRWxlbWVudFRlc3QuSW5zcGVjdG9yVGVzdC5u
b2RlV2l0aElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMvc2hhZG93LWRvbS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9lbGVtZW50cy9zaGFkb3ctZG9t
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTA1LTA0ICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBHZW50aWxjb3JlLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdC5qcyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3QuanMKaW5kZXgg
ODZhOTA3ZC4uMDI3MTQ1NzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2VsZW1lbnRzLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZWxlbWVudHMtdGVzdC5qcwpAQCAtMjIsNiArMjIsMTAgQEAgSW5zcGVjdG9yVGVzdC5u
b2RlV2l0aElkID0gZnVuY3Rpb24oaWRWYWx1ZSwgY2FsbGJhY2spCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMrKzsKICAgICAgICAgICAgIGNoaWxkTm9kZS5nZXRD
aGlsZE5vZGVzKHByb2Nlc3NDaGlsZHJlbi5iaW5kKG51bGwsIGZhbHNlKSk7CisgICAgICAgICAg
ICBpZiAoY2hpbGROb2RlLnNoYWRvd1Jvb3QpIHsKKyAgICAgICAgICAgICAgICBwZW5kaW5nUmVx
dWVzdHMrKzsKKyAgICAgICAgICAgICAgICBjaGlsZE5vZGUuc2hhZG93Um9vdC5nZXRDaGlsZE5v
ZGVzKHByb2Nlc3NDaGlsZHJlbi5iaW5kKG51bGwsIGZhbHNlKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAodG9wTGV2ZWwpCkBAIC0zNCw3ICszOCw3IEBAIEluc3Bl
Y3RvclRlc3Qubm9kZVdpdGhJZCA9IGZ1bmN0aW9uKGlkVmFsdWUsIGNhbGxiYWNrKQogICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5yZXF1ZXN0RG9jdW1lbnQoZG9jdW1lbnRSZXF1ZXN0ZWQuYmlu
ZCh0aGlzKSk7CiAgICAgZnVuY3Rpb24gZG9jdW1lbnRSZXF1ZXN0ZWQoZG9jKQogICAgIHsKLSAg
ICAgICAgZG9jLmdldENoaWxkTm9kZXMocHJvY2Vzc0NoaWxkcmVuLmJpbmQodGhpcywgdHJ1ZSkp
OworICAgICAgICBkb2MuZ2V0Q2hpbGROb2Rlcyhwcm9jZXNzQ2hpbGRyZW4uYmluZChudWxsLCB0
cnVlKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzL3NoYWRvdy1kb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzL3NoYWRvdy1kb20tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmZDU3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZWxlbWVudHMvc2hhZG93LWRvbS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MiBAQAorVGVz
dHMgdGhhdCBzaGFkb3cgRE9NIHRyZWUgaXMgcHJvcGVybHkgZGlzcGxheWVkLgorCisgCisKK1J1
bm5pbmc6IHRlc3REdW1wSW5pdGlhbAorLSA8bWV0ZXIgaWQ9Im1ldGVyIiBtaW49IjUiIG1heD0i
NDAiIHZhbHVlPSIxMy41Ij4KKyAgICAtIChzaGFkb3cpCisgICAgLSA8ZGl2PgorICAgICAgICAg
IDxkaXYgc3R5bGU9IndpZHRoOiAyNC4yODU3MTQyODU3MTQyODUlOyAiPjwvZGl2PgorICAgICAg
PC9kaXY+CisgIDwvbWV0ZXI+CisKK1J1bm5pbmc6IHRlc3REdW1wVXBkYXRlZAorQmVmb3JlIGNv
bnRyb2xzIGVuYWJsZWQKKyAgPHZpZGVvIGlkPSJ2aWRlbyI+PC92aWRlbz4KK0FmdGVyIGNvbnRy
b2xzIGVuYWJsZWQKKy0gPHZpZGVvIGlkPSJ2aWRlbyIgY29udHJvbHM+CisgICAgLSAoc2hhZG93
KQorICAgIC0gPGRpdj4KKyAgICAgICAgLSA8ZGl2PgorICAgICAgICAgICAgICA8aW5wdXQgdHlw
ZT0iYnV0dG9uIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiI+CisgICAgICAg
ICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyAiPgorICAg
ICAgICAgICAgLSA8ZGl2IHN0eWxlPgorICAgICAgICAgICAgICAgICAgPGRpdj4wMDowMCAvIDAw
OjAwPC9kaXY+CisgICAgICAgICAgICAgICAgLSA8aW5wdXQgdHlwZT0icmFuZ2UiIHByZWNpc2lv
bj0iZmxvYXQiIG1heD0iMCI+CisgICAgICAgICAgICAgICAgICAgIC0gKHNoYWRvdykKKyAgICAg
ICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9pbnB1dD4K
KyAgICAgICAgICAgICAgICAgIDxkaXY+MDA6MDA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+
CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iPgorICAgICAgICAgICAgICA8aW5w
dXQgdHlwZT0iYnV0dG9uIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgc3R5
bGU9ImRpc3BsYXk6IG5vbmU7ICI+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24i
PgorICAgICAgICAgICAgLSA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBub25lOyAiPgorICAgICAgICAg
ICAgICAgIC0gPGlucHV0IHR5cGU9InJhbmdlIiBwcmVjaXNpb249ImZsb2F0IiBtYXg9IjEiIHZh
bHVlPSIxIj4KKyAgICAgICAgICAgICAgICAgICAgLSAoc2hhZG93KQorICAgICAgICAgICAgICAg
ICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2lucHV0PgorICAgICAgICAg
ICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIj4KKyAgICAgICAgICAgIC0gPGlucHV0IHR5
cGU9InJhbmdlIiBwcmVjaXNpb249ImZsb2F0IiBtYXg9IjEiIHZhbHVlPSIxIj4KKyAgICAgICAg
ICAgICAgICAtIChzaGFkb3cpCisgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAg
ICAgICAgICA8L2lucHV0PgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIj4KKyAg
ICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICA8L3ZpZGVvPgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMvc2hhZG93LWRvbS5odG1sIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2VsZW1lbnRzL3NoYWRvdy1kb20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YTcxNzEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2VsZW1lbnRzL3NoYWRvdy1kb20uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IGVuYWJsZUNvbnRyb2xzKCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8i
KS5jb250cm9scyA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3BlY3Rv
clRlc3QucnVuVGVzdFN1aXRlKFsKKyAgICAgICAgZnVuY3Rpb24gdGVzdER1bXBJbml0aWFsKG5l
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwYW5kRWxlbWVudHNU
cmVlKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9k
ZVdpdGhJZCgibWV0ZXIiLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZHVtcEVsZW1lbnRzVHJlZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV4dCgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0s
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdER1bXBVcGRhdGVkKG5leHQpIHsKKyAgICAgICAgICAg
IHZhciB2aWRlbzsKKworICAgICAgICAgICAgZnVuY3Rpb24gZHVtcFdpdGhDb250cm9sc0VuYWJs
ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJBZnRlciBjb250cm9scyBlbmFibGVkIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmR1bXBFbGVtZW50c1RyZWUodmlkZW8pOworICAgICAgICAg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgidmlkZW8iLCBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmlkZW8gPSBub2RlOworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJCZWZvcmUgY29udHJvbHMgZW5hYmxlZCIpOwor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZHVtcEVsZW1lbnRzVHJlZShub2RlKTsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJlbmFibGVDb250cm9s
cygpIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
YW5kRWxlbWVudHNUcmVlKGR1bXBXaXRoQ29udHJvbHNFbmFibGVkKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgXSk7Cit9CisKKzwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD4KK1Rlc3RzIHRoYXQg
c2hhZG93IERPTSB0cmVlIGlzIHByb3Blcmx5IGRpc3BsYXllZC4KKzwvcD4KKworPG1ldGVyIGlk
PSJtZXRlciIgbWluPSI1IiBtYXg9IjQwIiB2YWx1ZT0iMTMuNSI+PC9tZXRlcj4KKzx2aWRlbyBp
ZD0idmlkZW8iPjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM0NDkx
OS4uZTgzZDc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTA1LTA0ICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXhwb3NlIHNoYWRvdyBE
T00gaW4gdGhlIEVsZW1lbnRzIHBhbmVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDE2MAorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9lbGVtZW50
cy9zaGFkb3ctZG9tLmh0bWwKKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmlzQ29udGFpbmVyTm9k
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
T01Ob2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pblNoYWRv
d1RyZWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9zZXRTaGFk
b3dSb290UGF5bG9hZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUu
X3JlbnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2Jp
bmROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnF1ZXJ5
U2VsZWN0b3JBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5f
c2hhZG93Um9vdFVwZGF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURpc3BhdGNoZXIu
cHJvdG90eXBlLnNlYXJjaFJlc3VsdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURpc3Bh
dGNoZXIucHJvdG90eXBlLnNoYWRvd1Jvb3RVcGRhdGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUu
X25vZGVVcGRhdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5fYXR0cmlidXRlc1VwZGF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlLl9ub2RlUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUudXBkYXRlTW9kaWZpZWROb2Rlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUudXBkYXRlQnJlYWRjcnVtYik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVDaGlsZHJlbi51cGRhdGVD
aGlsZHJlbk9mTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX3VwZGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzOgorICAgICAgICAoI2VsZW1lbnRzLWNvbnRl
bnQgLmRvbS1zaGFkb3ctcm9vdCk6CisgICAgICAgICgub3V0bGluZS1kaXNjbG9zdXJlIGxpIC53
ZWJraXQtaHRtbC10YWcuc2hhZG93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qczoKKwogMjAxMS0wNS0wNCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGNmYTZiMjQuLjI2MjdiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTExODUs
MTEgKzExODUsMTMgQEAgU2hhZG93Um9vdCogRWxlbWVudDo6ZW5zdXJlU2hhZG93Um9vdCgpCiAK
ICAgICBSZWZQdHI8U2hhZG93Um9vdD4gbmV3Um9vdCA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1
bWVudCgpKTsKICAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QgPSBuZXdSb290Lmdl
dCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9j
dW1lbnQoKSwgbmV3Um9vdC5nZXQoKSwgdGhpcyk7CiAgICAgbmV3Um9vdC0+c2V0U2hhZG93SG9z
dCh0aGlzKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICBuZXdSb290LT5pbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogICAgIGlmIChhdHRhY2hlZCgpKQogICAgICAgICBuZXdSb290LT5s
YXp5QXR0YWNoKCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01O
b2RlKGRvY3VtZW50KCksIG5ld1Jvb3QuZ2V0KCkpOwogICAgIHJldHVybiBuZXdSb290LmdldCgp
OwogfQogCkBAIC0xMjAwLDYgKzEyMDIsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jv
b3QoKQogCiAgICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKICAgICBpZiAo
UmVmUHRyPE5vZGU+IG9sZFJvb3QgPSBkYXRhLT5tX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZShkb2N1bWVudCgpLCB0aGlz
KTsKICAgICAgICAgZGF0YS0+bV9zaGFkb3dSb290ID0gMDsKICAgICAgICAgZG9jdW1lbnQoKS0+
cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUob2xkUm9vdC5nZXQoKSk7CiAgICAgICAgIG9sZFJv
b3QtPnNldFNoYWRvd0hvc3QoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24KaW5kZXggNWU2M2M3ZC4uNWI2YWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbgpAQCAtOTk5LDYgKzk5OSwxNCBAQAogICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vZGVJZHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAiaW50
ZWdlciIgfSwgImRlc2NyaXB0aW9uIjogIklkcyBvZiB0aGUgc2VhcmNoIHJlc3VsdCBub2Rlcy4i
IH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQ
dXNoZXMgc2VhcmNoIHJlc3VsdHMgaW5pdGlhdGVkIHVzaW5nIDxjb2RlPnBlcmZvcm1TZWFyY2g8
L2NvZGU+IHRvIHRoZSBjbGllbnQuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAibmFtZSI6ICJzaGFkb3dSb290VXBkYXRlZCIsCisgICAgICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaG9zdElk
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJJZCBvZiB0aGUgaG9zdCBub2Rl
IHRoYXQgaGFkIHNoYWRvdyByb290IGNoYW5nZWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNoYWRvd1Jvb3QiLCAiJHJlZiI6ICJET01Ob2RlIiwgImRlc2NyaXB0aW9uIjog
IkRhdGEgZm9yIG5ldyBzaGFkb3cgcm9vdCAobnVsbCBpZiBzaGFkb3cgcm9vdCByZW1vdmVkKS4i
IH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJG
aXJlZCB3aGVuIHNoYWRvdyByb290IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIG5vZGUuIgog
ICAgICAgICAgICAgfQogICAgICAgICBdCiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGIyODVjYWYuLmI2NDU1YjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzYs
NiArNzYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5
bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogCkBAIC00NTIsNyArNDUzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RG9jdW1lbnQoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogcm9vdCkKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlk
KQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUg
fHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVU
eXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpKQorICAgIGlmICghbm9kZSB8fCAhaXNDb250YWluZXJO
b2RlKCpub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2NoaWxkcmVuUmVxdWVzdGVk
LmNvbnRhaW5zKG5vZGVJZCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjIsNiArMTAyMyw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqIG5vZGUsIGluCiAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05P
REU6CiAgICAgICAgICAgICBsb2NhbE5hbWUgPSBub2RlLT5sb2NhbE5hbWUoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlNIQURPV19ST09UX05PREU6CiAgICAgICAg
IGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CkBAIC0xMDM4LDcgKzEwNDAsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yTm9kZShOb2RlKiBub2RlLCBpbgogICAgIHZhbHVlLT5zZXRTdHJpbmcoImxvY2FsTmFtZSIs
IGxvY2FsTmFtZSk7CiAgICAgdmFsdWUtPnNldFN0cmluZygibm9kZVZhbHVlIiwgbm9kZVZhbHVl
KTsKIAotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSB8fCBu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7CisgICAgaWYgKGlzQ29udGFpbmVy
Tm9kZSgqbm9kZSkpIHsKICAgICAgICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291
bnQobm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50Iiwgbm9k
ZUNvdW50KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGlsZHJlbiA9IGJ1aWxk
QXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOwpAQCAtMTA1
Miw2ICsxMDU0LDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW4KICAgICAgICAgICAgICAgICBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVP
d25lckVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0U3RyaW5nKCJk
b2N1bWVudFVSTCIsIGRvY3VtZW50VVJMU3RyaW5nKGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVu
dCgpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93
Um9vdCA9IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0
T2JqZWN0KCJzaGFkb3dSb290IiwgYnVpbGRPYmplY3RGb3JOb2RlKHNoYWRvd1Jvb3QsIGRlcHRo
LCBub2Rlc01hcCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTdHJpbmco
ImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpKTsKQEAgLTEyMjMsMTIg
KzEyMjcsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2Rl
KiBub2RlKQogICAgIC8vIFdlIGNvdWxkIGJlIGF0dGFjaGluZyBleGlzdGluZyBzdWJ0cmVlLiBG
b3JnZXQgdGhlIGJpbmRpbmdzLgogICAgIHVuYmluZChub2RlLCAmbV9kb2N1bWVudE5vZGVUb0lk
TWFwKTsKIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
KyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5pc1NoYWRvd1Jvb3QoKSA/IG5vZGUt
PnNoYWRvd0hvc3QoKSA6IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpbnQgcGFyZW50SWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlmIHBhcmVu
dCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgJm1fZG9jdW1l
bnROb2RlVG9JZE1hcCk7CisgICAgICAgIG1fZnJvbnRlbmQtPnNoYWRvd1Jvb3RVcGRhdGVkKHBh
cmVudElkLCB2YWx1ZS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlm
ICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJZCkpIHsKICAgICAgICAgLy8g
Tm8gY2hpbGRyZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3RpZnkgb24gY2hhbmdlcyBvZiBo
YXNDaGlsZHJlbi4KICAgICAgICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlQ291bnRVcGRhdGVkKHBh
cmVudElkLCBpbm5lckNoaWxkTm9kZUNvdW50KHBhcmVudCkpOwpAQCAtMTI0Niw3ICsxMjU1LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQog
ICAgIGlmIChpc1doaXRlc3BhY2Uobm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLT5pc1NoYWRvd1Jvb3QoKSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gSWYgcGFyZW50IGlzIG5vdCBtYXBwZWQgeWV0IC0+IGln
bm9yZSB0aGUgZXZlbnQuCiAgICAgaWYgKCFwYXJlbnRJZCkKQEAgLTEyNTUsNyArMTI2NCw5IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAg
ICBpZiAobV9kb21MaXN0ZW5lcikKICAgICAgICAgbV9kb21MaXN0ZW5lci0+ZGlkUmVtb3ZlRE9N
Tm9kZShub2RlKTsKIAotICAgIGlmICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJl
bnRJZCkpIHsKKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpCisgICAgCW1fZnJvbnRlbmQt
PnNoYWRvd1Jvb3RVcGRhdGVkKHBhcmVudElkLCAwKTsKKyAgICBlbHNlIGlmICghbV9jaGlsZHJl
blJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJZCkpIHsKICAgICAgICAgLy8gTm8gY2hpbGRyZW4g
YXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3RpZnkgb24gY2hhbmdlcyBvZiBoYXNDaGlsZHJlbi4K
ICAgICAgICAgaWYgKGlubmVyQ2hpbGROb2RlQ291bnQocGFyZW50KSA9PSAxKQogICAgICAgICAg
ICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlQ291bnRVcGRhdGVkKHBhcmVudElkLCAwKTsKQEAgLTE0
MDQsNiArMTQxNSwxNSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkcmF3Tm9kZUhpZ2hsaWdo
dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgRE9NTm9kZUhpZ2hsaWdodGVy
OjpEcmF3Tm9kZUhpZ2hsaWdodChjb250ZXh0LCBtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSwgbW9k
ZSk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmlzQ29udGFpbmVyTm9kZShjb25zdCBO
b2RlJiBub2RlKQoreworICBOb2RlOjpOb2RlVHlwZSB0eXBlID0gbm9kZS5ub2RlVHlwZSgpOwor
ICByZXR1cm4gdHlwZSA9PSBOb2RlOjpFTEVNRU5UX05PREUgfHwKKyAgICAgIHR5cGUgPT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSB8fAorICAgICAgdHlwZSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVO
VF9OT0RFIHx8CisgICAgICB0eXBlID09IE5vZGU6OlNIQURPV19ST09UX05PREU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGU0N2EwOTQu
LjVkMWIwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCkBAIC0yMDcsNiArMjA3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlzY2FyZEJpbmRp
bmdzKCk7CiAKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lck5vZGUoY29uc3QgTm9kZSYpOwog
ICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIG1faW5zdHJ1bWVudGluZ0FnZW50czsKICAgICBJbnNw
ZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3BlY3RvckNsaWVudCogbV9jbGll
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFn
ZW50LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpp
bmRleCA0MjEwZTQyLi5kOTE2ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTY3LDYgKzY3LDggQEAgV2ViSW5zcGVjdG9yLkRPTU5v
ZGUgPSBmdW5jdGlvbihkb2MsIHBheWxvYWQpIHsKICAgICAgICAgICAgIHRoaXMub3duZXJEb2N1
bWVudC5ib2R5ID0gdGhpczsKICAgICAgICAgaWYgKHBheWxvYWQuZG9jdW1lbnRVUkwpCiAgICAg
ICAgICAgICB0aGlzLmRvY3VtZW50VVJMID0gcGF5bG9hZC5kb2N1bWVudFVSTDsKKyAgICAgICAg
aWYgKHBheWxvYWQuc2hhZG93Um9vdCkKKyAgICAgICAgICAgIHRoaXMuX3NldFNoYWRvd1Jvb3RQ
YXlsb2FkKHBheWxvYWQuc2hhZG93Um9vdCk7CiAgICAgfSBlbHNlIGlmICh0aGlzLl9ub2RlVHlw
ZSA9PT0gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUpIHsKICAgICAgICAgdGhpcy5wdWJsaWNJZCA9
IHBheWxvYWQucHVibGljSWQ7CiAgICAgICAgIHRoaXMuc3lzdGVtSWQgPSBwYXlsb2FkLnN5c3Rl
bUlkOwpAQCAtOTUsNiArOTcsMTEgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZVR5cGU7CiAgICAgfSwKIAorICAgIGluU2hhZG93
VHJlZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2luU2hhZG93VHJl
ZTsKKyAgICB9LAorCiAgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0aGlzLl9ub2RlTmFtZTsKQEAgLTI4NCw2ICsyOTEsMTcgQEAgV2ViSW5zcGVjdG9yLkRP
TU5vZGUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZW51bWJlcigpOwogICAgIH0sCiAK
KyAgICBfc2V0U2hhZG93Um9vdFBheWxvYWQ6IGZ1bmN0aW9uKHBheWxvYWQpCisgICAgeworICAg
ICAgICBpZiAoIXBheWxvYWQpIHsKKyAgICAgICAgICAgIHRoaXMuc2hhZG93Um9vdCA9IG51bGw7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5zaGFkb3dSb290
ID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlKHRoaXMub3duZXJEb2N1bWVudCwgcGF5bG9hZCk7
CisgICAgICAgIHRoaXMuc2hhZG93Um9vdC5wYXJlbnROb2RlID0gdGhpczsKKyAgICAgICAgdGhp
cy5zaGFkb3dSb290Ll9pblNoYWRvd1RyZWUgPSB0cnVlOworICAgIH0sCisKICAgICBfcmVudW1i
ZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2NoaWxkTm9kZUNvdW50ID0gdGhp
cy5jaGlsZHJlbi5sZW5ndGg7CkBAIC0zMDAsNiArMzE4LDcgQEAgV2ViSW5zcGVjdG9yLkRPTU5v
ZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgY2hpbGQubmV4dFNpYmxpbmcgPSBpICsgMSA8
IHRoaXMuX2NoaWxkTm9kZUNvdW50ID8gdGhpcy5jaGlsZHJlbltpICsgMV0gOiBudWxsOwogICAg
ICAgICAgICAgY2hpbGQucHJldlNpYmxpbmcgPSBpIC0gMSA+PSAwID8gdGhpcy5jaGlsZHJlbltp
IC0gMV0gOiBudWxsOwogICAgICAgICAgICAgY2hpbGQucGFyZW50Tm9kZSA9IHRoaXM7CisgICAg
ICAgICAgICBjaGlsZC5faW5TaGFkb3dUcmVlID0gdGhpcy5faW5TaGFkb3dUcmVlOwogICAgICAg
ICB9CiAgICAgfSwKIApAQCAtMzQ2LDcgKzM2NSw4IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5F
dmVudHMgPSB7CiAgICAgTm9kZUluc2VydGVkOiAiTm9kZUluc2VydGVkIiwKICAgICBOb2RlUmVt
b3ZlZDogIk5vZGVSZW1vdmVkIiwKICAgICBEb2N1bWVudFVwZGF0ZWQ6ICJEb2N1bWVudFVwZGF0
ZWQiLAotICAgIENoaWxkTm9kZUNvdW50VXBkYXRlZDogIkNoaWxkTm9kZUNvdW50VXBkYXRlZCIK
KyAgICBDaGlsZE5vZGVDb3VudFVwZGF0ZWQ6ICJDaGlsZE5vZGVDb3VudFVwZGF0ZWQiLAorICAg
IFNoYWRvd1Jvb3RVcGRhdGVkOiAiU2hhZG93Um9vdFVwZGF0ZWQiLAogfQogCiBXZWJJbnNwZWN0
b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewpAQCAtNDg2LDYgKzUwNiw5IEBAIFdlYkluc3BlY3Rv
ci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hp
bGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ld
OwogICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVbY2hpbGQuaWRdID0gY2hpbGQ7CisgICAg
ICAgICAgICBpZiAoY2hpbGQuc2hhZG93Um9vdCkKKyAgICAgICAgICAgICAgICB0aGlzLl9pZFRv
RE9NTm9kZVtjaGlsZC5zaGFkb3dSb290LmlkXSA9IGNoaWxkLnNoYWRvd1Jvb3Q7CisKICAgICAg
ICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikKICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTm9k
ZXMoY2hpbGQuY2hpbGRyZW4pOwogICAgICAgICB9CkBAIC01MzgsNiArNTYxLDE3IEBAIFdlYklu
c3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgcXVlcnlTZWxlY3RvckFsbDogZnVu
Y3Rpb24obm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgRE9NQWdl
bnQucXVlcnlTZWxlY3RvckFsbChub2RlSWQsIHNlbGVjdG9ycywgdGhpcy5fd3JhcENsaWVudENh
bGxiYWNrKGNhbGxiYWNrKSk7CisgICAgfSwKKworICAgIF9zaGFkb3dSb290VXBkYXRlZDogZnVu
Y3Rpb24oaG9zdElkLCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAgdmFyIGhvc3QgPSB0aGlzLl9p
ZFRvRE9NTm9kZVtob3N0SWRdOworICAgICAgICBpZiAoaG9zdC5zaGFkb3dSb290ICYmICFwYXls
b2FkKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9ET01Ob2RlW2hvc3Quc2hhZG93Um9v
dC5pZF07CisgICAgICAgIGhvc3QuX3NldFNoYWRvd1Jvb3RQYXlsb2FkKHBheWxvYWQpOworICAg
ICAgICBpZiAoaG9zdC5zaGFkb3dSb290KQorICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVb
aG9zdC5zaGFkb3dSb290LmlkXSA9IGhvc3Quc2hhZG93Um9vdDsKKyAgICAgICAgdGhpcy5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5TaGFkb3dS
b290VXBkYXRlZCwgaG9zdCk7CiAgICAgfQogfQogCkBAIC01OTMsNSArNjI3LDEwIEBAIFdlYklu
c3BlY3Rvci5ET01EaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIGlmICh0
aGlzLl9kb21BZ2VudC5fc2VhcmNoUmVzdWx0Q29sbGVjdG9yKQogICAgICAgICAgICAgdGhpcy5f
ZG9tQWdlbnQuX3NlYXJjaFJlc3VsdENvbGxlY3Rvcihub2RlSWRzKTsKKyAgICB9LAorCisgICAg
c2hhZG93Um9vdFVwZGF0ZWQ6IGZ1bmN0aW9uKGhvc3RJZCwgc2hhZG93Um9vdCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2RvbUFnZW50Ll9zaGFkb3dSb290VXBkYXRlZChob3N0SWQsIHNoYWRvd1Jv
b3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCBmYmQ1MTM5Li5kMGQyYzJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC0x
MTMsMTIgKzExMywxMyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbCA9IGZ1bmN0aW9uKCkK
IAogICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRzKCk7CiAKLSAgICBXZWJJbnNwZWN0b3IuZG9t
QWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLk5vZGVJ
bnNlcnRlZCwgdGhpcy5fbm9kZUluc2VydGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZG9t
QWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLk5vZGVJ
bnNlcnRlZCwgdGhpcy5fbm9kZVVwZGF0ZWQuYmluZCh0aGlzLCB0cnVlKSk7CiAgICAgV2ViSW5z
cGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2
ZW50cy5Ob2RlUmVtb3ZlZCwgdGhpcy5fbm9kZVJlbW92ZWQsIHRoaXMpOwogICAgIFdlYkluc3Bl
Y3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVu
dHMuQXR0ck1vZGlmaWVkLCB0aGlzLl9hdHRyaWJ1dGVzVXBkYXRlZCwgdGhpcyk7Ci0gICAgV2Vi
SW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50
LkV2ZW50cy5DaGFyYWN0ZXJEYXRhTW9kaWZpZWQsIHRoaXMuX2NoYXJhY3RlckRhdGFNb2RpZmll
ZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5DaGFyYWN0ZXJEYXRhTW9kaWZpZWQsIHRoaXMuX25v
ZGVVcGRhdGVkLmJpbmQodGhpcywgZmFsc2UpKTsKICAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkRvY3VtZW50VXBk
YXRlZCwgdGhpcy5fZG9jdW1lbnRVcGRhdGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZG9t
QWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLkNoaWxk
Tm9kZUNvdW50VXBkYXRlZCwgdGhpcy5fY2hpbGROb2RlQ291bnRVcGRhdGVkLCB0aGlzKTsKKyAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9N
QWdlbnQuRXZlbnRzLlNoYWRvd1Jvb3RVcGRhdGVkLCB0aGlzLl9ub2RlVXBkYXRlZC5iaW5kKHRo
aXMsIHRydWUpKTsKIAogICAgIHRoaXMucmVjZW50bHlNb2RpZmllZE5vZGVzID0gW107CiB9CkBA
IC00MzEsMzMgKzQzMiwyNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pc0VkaXRpbmdTdHlsZTsKICAgICB9LAogCi0gICAg
X2F0dHJpYnV0ZXNVcGRhdGVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfbm9kZVVwZGF0ZWQ6IGZ1
bmN0aW9uKGhpZXJhcmNoeVVwZGF0ZWQsIGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5yZWNl
bnRseU1vZGlmaWVkTm9kZXMucHVzaCh7bm9kZTogZXZlbnQuZGF0YSwgdXBkYXRlZDogdHJ1ZX0p
OworICAgICAgICB2YXIgdXBkYXRlZE5vZGVEZXRhaWxzID0geyBub2RlOiBldmVudC5kYXRhIH07
CisgICAgICAgIGlmIChoaWVyYXJjaHlVcGRhdGVkKQorICAgICAgICAgICAgdXBkYXRlZE5vZGVE
ZXRhaWxzLnBhcmVudCA9IGV2ZW50LmRhdGEucGFyZW50Tm9kZTsKKyAgICAgICAgdGhpcy5yZWNl
bnRseU1vZGlmaWVkTm9kZXMucHVzaCh1cGRhdGVkTm9kZURldGFpbHMpOwogICAgICAgICBpZiAo
dGhpcy52aXNpYmxlKQogICAgICAgICAgICAgdGhpcy5fdXBkYXRlTW9kaWZpZWROb2Rlc1Nvb24o
KTsKLQotICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdGluZ1N0eWxlICYmIGV2ZW50LmRhdGEgPT09
IHRoaXMuZm9jdXNlZERPTU5vZGUpCi0gICAgICAgICAgICB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdl
ZCgpOwogICAgIH0sCiAKLSAgICBfY2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBmdW5jdGlvbihldmVu
dCkKKyAgICBfYXR0cmlidXRlc1VwZGF0ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAg
ICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMucHVzaCh7bm9kZTogZXZlbnQuZGF0YSwgdXBk
YXRlZDogdHJ1ZX0pOwotICAgICAgICBpZiAodGhpcy52aXNpYmxlKQotICAgICAgICAgICAgdGhp
cy5fdXBkYXRlTW9kaWZpZWROb2Rlc1Nvb24oKTsKLSAgICB9LAorICAgICAgICB0aGlzLl9ub2Rl
VXBkYXRlZChmYWxzZSwgZXZlbnQpOwogCi0gICAgX25vZGVJbnNlcnRlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICB0aGlzLnJlY2VudGx5TW9kaWZpZWROb2Rlcy5wdXNoKHtub2Rl
OiBldmVudC5kYXRhLCBwYXJlbnQ6IGV2ZW50LmRhdGEucGFyZW50Tm9kZSwgaW5zZXJ0ZWQ6IHRy
dWV9KTsKLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0
ZU1vZGlmaWVkTm9kZXNTb29uKCk7CisgICAgICAgIGlmICghdGhpcy5faXNFZGl0aW5nU3R5bGUg
JiYgZXZlbnQuZGF0YSA9PT0gdGhpcy5mb2N1c2VkRE9NTm9kZSkKKyAgICAgICAgICAgIHRoaXMu
X3N0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgfSwKIAogICAgIF9ub2RlUmVtb3ZlZDogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewotICAgICAgICB0aGlzLnJlY2VudGx5TW9kaWZpZWROb2Rlcy5wdXNo
KHtub2RlOiBldmVudC5kYXRhLm5vZGUsIHBhcmVudDogZXZlbnQuZGF0YS5wYXJlbnQsIHJlbW92
ZWQ6IHRydWV9KTsKKyAgICAgICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMucHVzaCh7bm9k
ZTogZXZlbnQuZGF0YS5ub2RlLCBwYXJlbnQ6IGV2ZW50LmRhdGEucGFyZW50fSk7CiAgICAgICAg
IGlmICh0aGlzLnZpc2libGUpCiAgICAgICAgICAgICB0aGlzLl91cGRhdGVNb2RpZmllZE5vZGVz
U29vbigpOwogICAgIH0sCkBAIC00OTAsMTYgKzQ4NSwxMyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5yZWNl
bnRseU1vZGlmaWVkTm9kZXNbaV0ucGFyZW50OwogICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlz
LnJlY2VudGx5TW9kaWZpZWROb2Rlc1tpXS5ub2RlOwogCi0gICAgICAgICAgICBpZiAodGhpcy5y
ZWNlbnRseU1vZGlmaWVkTm9kZXNbaV0udXBkYXRlZCkgeworICAgICAgICAgICAgaWYgKCFwYXJl
bnQpIHsKICAgICAgICAgICAgICAgICB2YXIgbm9kZUl0ZW0gPSB0aGlzLnRyZWVPdXRsaW5lLmZp
bmRUcmVlRWxlbWVudChub2RlKTsKICAgICAgICAgICAgICAgICBpZiAobm9kZUl0ZW0pCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJdGVtLnVwZGF0ZVRpdGxlKCk7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcGFyZW50KQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICB2YXIgcGFyZW50Tm9kZUl0ZW0g
PSB0aGlzLnRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChwYXJlbnQpOwogICAgICAgICAgICAg
aWYgKHBhcmVudE5vZGVJdGVtICYmICFwYXJlbnROb2RlSXRlbS5hbHJlYWR5VXBkYXRlZENoaWxk
cmVuKSB7CiAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZUl0ZW0udXBkYXRlQ2hpbGRyZW4oKTsK
QEAgLTY2OSw2ICs2NjEsMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gIjwhRE9DVFlQRT4iOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIAorCSAgICAgICAgY2FzZSBOb2RlLlNIQURPV19ST09U
X05PREU6CisgICAgICAgICAgICAgICAgICAgIGNydW1iVGl0bGUgPSAiKHNoYWRvdykiOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgIGNydW1iVGl0bGUgPSB0aGlzLnRyZWVPdXRsaW5lLm5vZGVOYW1lVG9D
b3JyZWN0Q2FzZShjdXJyZW50Lm5vZGVOYW1lKCkpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5l
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRs
aW5lLmpzCmluZGV4IGFmNDVmYmYuLjU3MjBjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMKQEAgLTMw
MCw3ICszMDAsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlT3V0bGluZS5wcm90b3R5cGUu
X19wcm90b19fID0gVHJlZU91dGxpbmUucHJvdG90eXBlOwogV2ViSW5zcGVjdG9yLkVsZW1lbnRz
VHJlZUVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBlbGVtZW50Q2xvc2VUYWcpCiB7CiAgICAgdGhp
cy5fZWxlbWVudENsb3NlVGFnID0gZWxlbWVudENsb3NlVGFnOwotICAgIHZhciBoYXNDaGlsZHJl
bk92ZXJyaWRlID0gIWVsZW1lbnRDbG9zZVRhZyAmJiBub2RlLmhhc0NoaWxkTm9kZXMoKSAmJiAh
dGhpcy5fc2hvd0lubGluZVRleHQobm9kZSk7CisgICAgdmFyIGhhc0NoaWxkcmVuT3ZlcnJpZGUg
PSAhZWxlbWVudENsb3NlVGFnICYmIChub2RlLmhhc0NoaWxkTm9kZXMoKSB8fCBub2RlLnNoYWRv
d1Jvb3QpICYmICF0aGlzLl9zaG93SW5saW5lVGV4dChub2RlKTsKIAogICAgIC8vIFRoZSB0aXRs
ZSB3aWxsIGJlIHVwZGF0ZWQgaW4gb25hdHRhY2guCiAgICAgVHJlZUVsZW1lbnQuY2FsbCh0aGlz
LCAiIiwgbm9kZSwgaGFzQ2hpbGRyZW5PdmVycmlkZSk7CkBAIC01NjcsNiArNTY3LDE1IEBAIFdl
Ykluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
ICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwogICAgICAgICAgICAgICAgICsrdHJlZUNo
aWxkSW5kZXg7CiAgICAgICAgICAgICB9CisJICAgIC8vIElmIHdlIGV2ZXIgaGFkIHNoYWRvdyBy
b290IGNoaWxkLCBpdCdzIGdvaW5nIHRvIGJlIHNlY29uZCB0byBsYXN0IChiZWZvcmUgY2xvc2lu
ZyB0YWcpCisJICAgIHZhciBzaGFkb3dSb290Q2hpbGQgPSB0cmVlRWxlbWVudC5jaGlsZHJlblt0
cmVlRWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAyXTsKKwkgICAgaWYgKHNoYWRvd1Jvb3RDaGls
ZCAmJiBzaGFkb3dSb290Q2hpbGQucmVwcmVzZW50ZWRPYmplY3Qubm9kZVR5cGUoKSA9PT0gTm9k
ZS5TSEFET1dfUk9PVF9OT0RFKSB7CisJCWlmICghbm9kZS5zaGFkb3dSb290KQorCQkgICAgdHJl
ZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc2hhZG93Um9vdENoaWxkKTsKKwkJZWxzZQorCQkgICAgdHJl
ZUVsZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPSBub2RlLnNoYWRvd1Jvb3Q7CisJICAgIH0gZWxz
ZSBpZiAobm9kZS5zaGFkb3dSb290KQorCQl0cmVlRWxlbWVudC5pbnNlcnRDaGlsZEVsZW1lbnQo
bm9kZS5zaGFkb3dSb290LCB0cmVlQ2hpbGRJbmRleCk7CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBSZW1vdmUgYW55IHRyZWUgZWxlbWVudHMgdGhhdCBubyBsb25nZXIgaGF2ZSB0aGlzIG5vZGUg
KG9yIHRoaXMgbm9kZSdzIGNvbnRlbnREb2N1bWVudCkgYXMgdGhlaXIgcGFyZW50LgpAQCAtMTI1
NywxMCArMTI2NiwxNSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHJldHVybiBodG1sOwogICAgIH0sCiAKLSAgICBfdGFnSFRNTDogZnVu
Y3Rpb24odGFnTmFtZSwgaXNDbG9zaW5nVGFnLCBpc0Rpc3RpbmN0VHJlZUVsZW1lbnQsIGxpbmtp
ZnkpCisgICAgX3RhZ0hUTUw6IGZ1bmN0aW9uKHRhZ05hbWUsIGlzQ2xvc2luZ1RhZywgaXNEaXN0
aW5jdFRyZWVFbGVtZW50LCBsaW5raWZ5LCBpc1NoYWRvdykKICAgICB7CiAgICAgICAgIHZhciBu
b2RlID0gdGhpcy5yZXByZXNlbnRlZE9iamVjdDsKLSAgICAgICAgdmFyIHJlc3VsdCA9ICI8c3Bh
biBjbGFzcz1cIndlYmtpdC1odG1sLXRhZyIgKyAoaXNDbG9zaW5nVGFnICYmIGlzRGlzdGluY3RU
cmVlRWxlbWVudCA/ICIgY2xvc2UiIDogIiIpICArICJcIj4mbHQ7IjsKKyAgICAgICAgdmFyIGNs
YXNzZXMgPSBbICJ3ZWJraXQtaHRtbC10YWciIF07CisgICAgICAgIGlmIChpc0Nsb3NpbmdUYWcg
JiYgaXNEaXN0aW5jdFRyZWVFbGVtZW50KQorICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCJjbG9z
ZSIpOworICAgICAgICBpZiAoaXNTaGFkb3cpCisgICAgICAgICAgICBjbGFzc2VzLnB1c2goInNo
YWRvdyIpOworICAgICAgICB2YXIgcmVzdWx0ID0gIjxzcGFuIGNsYXNzPVwiIiArIGNsYXNzZXMu
am9pbigiICIpICsgIlwiPiZsdDsiOwogICAgICAgICByZXN1bHQgKz0gIjxzcGFuICIgKyAoaXND
bG9zaW5nVGFnID8gIiIgOiAiY2xhc3M9XCJ3ZWJraXQtaHRtbC10YWctbmFtZVwiIikgKyAiPiIg
KyAoaXNDbG9zaW5nVGFnID8gIi8iIDogIiIpICsgdGFnTmFtZSArICI8L3NwYW4+IjsKICAgICAg
ICAgaWYgKCFpc0Nsb3NpbmdUYWcgJiYgbm9kZS5oYXNBdHRyaWJ1dGVzKCkpIHsKICAgICAgICAg
ICAgIHZhciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzKCk7CkBAIC0xMjk2LDEyICsxMzEw
LDEyIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6CiAgICAgICAgICAgICAgICAgdmFyIHRh
Z05hbWUgPSB0aGlzLnRyZWVPdXRsaW5lLm5vZGVOYW1lVG9Db3JyZWN0Q2FzZShub2RlLm5vZGVO
YW1lKCkpLmVzY2FwZUhUTUwoKTsKICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudENs
b3NlVGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm8udGl0bGVIVE1MID0gdGhpcy5fdGFn
SFRNTCh0YWdOYW1lLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby50aXRs
ZUhUTUwgPSB0aGlzLl90YWdIVE1MKHRhZ05hbWUsIHRydWUsIHRydWUsIGZhbHNlLCBub2RlLmlu
U2hhZG93VHJlZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaW5mby5oYXNDaGlsZHJlbiA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB2YXIgdGl0bGVIVE1MID0gdGhpcy5fdGFnSFRNTCh0YWdOYW1lLCBmYWxz
ZSwgZmFsc2UsIGxpbmtpZnkpOworICAgICAgICAgICAgICAgIHZhciB0aXRsZUhUTUwgPSB0aGlz
Ll90YWdIVE1MKHRhZ05hbWUsIGZhbHNlLCBmYWxzZSwgbGlua2lmeSwgbm9kZS5pblNoYWRvd1Ry
ZWUoKSk7CiAKICAgICAgICAgICAgICAgICB2YXIgdGV4dENoaWxkID0gdGhpcy5fc2luZ2xlVGV4
dENoaWxkKG5vZGUpOwogICAgICAgICAgICAgICAgIHZhciBzaG93SW5saW5lVGV4dCA9IHRleHRD
aGlsZCAmJiB0ZXh0Q2hpbGQubm9kZVZhbHVlKCkubGVuZ3RoIDwgUHJlZmVyZW5jZXMubWF4SW5s
aW5lVGV4dENoaWxkTGVuZ3RoOwpAQCAtMTMwOSwxNCArMTMyMywxNCBAQCBXZWJJbnNwZWN0b3Iu
RWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLmV4cGFuZGVkICYmICghc2hvd0lubGluZVRleHQgJiYgKHRoaXMudHJlZU91dGxpbmUuaXNY
TUxNaW1lVHlwZSB8fCAhV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQuRm9yYmlkZGVu
Q2xvc2luZ1RhZ0VsZW1lbnRzW3RhZ05hbWVdKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuaGFzQ2hpbGRyZW4pCiAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUhUTUwgKz0g
IjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGV4dC1ub2RlXCI+JiM4MjMwOzwvc3Bhbj4mIzgy
MDM7IjsKLSAgICAgICAgICAgICAgICAgICAgdGl0bGVIVE1MICs9IHRoaXMuX3RhZ0hUTUwodGFn
TmFtZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB0aXRsZUhUTUwgKz0gdGhp
cy5fdGFnSFRNTCh0YWdOYW1lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIG5vZGUuaW5TaGFkb3dUcmVl
KCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZWxl
bWVudCBvbmx5IGhhcyBhIHNpbmdsZSBjaGlsZCB0aGF0IGlzIGEgdGV4dCBub2RlLAogICAgICAg
ICAgICAgICAgIC8vIGp1c3Qgc2hvdyB0aGF0IHRleHQgYW5kIHRoZSBjbG9zaW5nIHRhZyBpbmxp
bmUgcmF0aGVyIHRoYW4KICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYSBzdWJ0cmVlIGZvciB0
aGVtCiAgICAgICAgICAgICAgICAgaWYgKHNob3dJbmxpbmVUZXh0KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHRpdGxlSFRNTCArPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQtaHRtbC10ZXh0LW5vZGVc
Ij4iICsgdGV4dENoaWxkLm5vZGVWYWx1ZSgpLmVzY2FwZUhUTUwoKSArICI8L3NwYW4+JiM4MjAz
OyIgKyB0aGlzLl90YWdIVE1MKHRhZ05hbWUsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGl0bGVIVE1MICs9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRleHQtbm9kZVwi
PiIgKyB0ZXh0Q2hpbGQubm9kZVZhbHVlKCkuZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj4mIzgyMDM7
IiArIHRoaXMuX3RhZ0hUTUwodGFnTmFtZSwgdHJ1ZSwgZmFsc2UsIG5vZGUuaW5TaGFkb3dUcmVl
KCkpOwogICAgICAgICAgICAgICAgICAgICBpbmZvLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGluZm8udGl0bGVIVE1MID0gdGl0bGVIVE1M
OwpAQCAtMTM2OCw2ICsxMzgyLDExIEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREU6
CiAgICAgICAgICAgICAgICAgaW5mby50aXRsZUhUTUwgPSAiPHNwYW4gY2xhc3M9XCJ3ZWJraXQt
aHRtbC10ZXh0LW5vZGVcIj4mbHQ7IVtDREFUQVsiICsgbm9kZS5ub2RlVmFsdWUoKS5lc2NhcGVI
VE1MKCkgKyAiXV0mZ3Q7PC9zcGFuPiI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAg
Y2FzZSBOb2RlLlNIQURPV19ST09UX05PREU6CisgICAgICAgICAgICAgICAgaW5mby50aXRsZUhU
TUwgPSAiPHNwYW4gY2xhc3M9XCJkb20tc2hhZG93LXJvb3RcIj4oc2hhZG93KTwvc3Bhbj4iOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGluZm8udGl0bGVIVE1MID0gdGhpcy50cmVlT3V0bGluZS5ub2RlTmFtZVRvQ29ycmVj
dENhc2Uobm9kZS5ub2RlTmFtZSgpKS5jb2xsYXBzZVdoaXRlc3BhY2UoKS5lc2NhcGVIVE1MKCk7
CiAgICAgICAgIH0KQEAgLTEzNzcsNyArMTM5Niw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9zaW5nbGVUZXh0Q2hpbGQ6IGZ1bmN0aW9u
KG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgIGlmICghbm9kZSB8fCBu
b2RlLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICB2YXIg
Zmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA0NjA3ZTY2Li42YzhhZWI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBA
IC0xMDU2LDYgKzEwNTYsMTAgQEAgYm9keS5wbGF0Zm9ybS1saW51eCAubW9ub3NwYWNlLCBib2R5
LnBsYXRmb3JtLWxpbnV4IC5zb3VyY2UtY29kZSB7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OwogfQogCisjZWxlbWVudHMtY29udGVudCAuZG9tLXNoYWRvdy1yb290IHsKKyAgICBjb2xvcjog
cmdiKDkwLCA5MCwgOTApOworfQorCiAjZWxlbWVudHMtc2lkZWJhciB7CiAgICAgcG9zaXRpb246
IGFic29sdXRlOwogICAgIHRvcDogMDsKQEAgLTEyMzIsNiArMTIzNiwxMCBAQCBib2R5LnBsYXRm
b3JtLWxpbnV4IC5tb25vc3BhY2UsIGJvZHkucGxhdGZvcm0tbGludXggLnNvdXJjZS1jb2RlIHsK
ICAgICB0ZXh0LWluZGVudDogLTEycHgKIH0KIAorLm91dGxpbmUtZGlzY2xvc3VyZSBsaSAud2Vi
a2l0LWh0bWwtdGFnLnNoYWRvdyB7CisgICAgb3BhY2l0eTogMC43OworfQorCiAub3V0bGluZS1k
aXNjbG9zdXJlIGxpIC53ZWJraXQtaHRtbC10YWcuY2xvc2UgewogICAgIG1hcmdpbi1sZWZ0OiAt
MTJweDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
dXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanMKaW5kZXggNjRhN2E5Zi4uYzMzYWRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTIyOCw3ICsyMjgsOSBAQCBOb2RlLnBy
b3RvdHlwZS5lbmNsb3NpbmdOb2RlV2l0aENsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKQogICAg
IHJldHVybiB0aGlzLnBhcmVudE5vZGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhjbGFz
c05hbWUpOwogfQogCi1FbGVtZW50LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uKHF1ZXJ5KSAK
K05vZGUuU0hBRE9XX1JPT1RfTk9ERSA9IDE0OworCitFbGVtZW50LnByb3RvdHlwZS5xdWVyeSA9
IGZ1bmN0aW9uKHF1ZXJ5KQogewogICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZXZhbHVh
dGUocXVlcnksIHRoaXMsIG51bGwsIFhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBF
LCBudWxsKS5zaW5nbGVOb2RlVmFsdWU7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92227</attachid>
            <date>2011-05-04 06:08:21 -0700</date>
            <delta_ts>2011-05-04 06:47:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>shadow-dom.diff</filename>
            <type>text/plain</type>
            <size>30580</size>
            <attacher name="Andrey Kosyakov">caseq</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZTM2Nzg0Li5hNjQ3ZGZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDUt
MDQgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBleHBvc2Ug
c2hhZG93IERPTSBpbiB0aGUgRWxlbWVudHMgcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMTYwCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzOgorICAgICAgICAoaW5pdGlhbGl6ZV9FbGVtZW50VGVz
dC5JbnNwZWN0b3JUZXN0Lm5vZGVXaXRoSWQucHJvY2Vzc0NoaWxkcmVuKToKKyAgICAgICAgKGlu
aXRpYWxpemVfRWxlbWVudFRlc3QuSW5zcGVjdG9yVGVzdC5ub2RlV2l0aElkLmRvY3VtZW50UmVx
dWVzdGVkKToKKyAgICAgICAgKGluaXRpYWxpemVfRWxlbWVudFRlc3QuSW5zcGVjdG9yVGVzdC5u
b2RlV2l0aElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZWxlbWVudHMvc2hhZG93LWRvbS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9lbGVtZW50cy9zaGFkb3ctZG9t
Lmh0bWw6IEFkZGVkLgorCiAyMDExLTA1LTA0ICBTYXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBHZW50aWxjb3JlLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMtdGVzdC5qcyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2VsZW1lbnRzLXRlc3QuanMKaW5kZXgg
ODZhOTA3ZC4uMDI3MTQ1NzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL2VsZW1lbnRzLXRlc3QuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZWxlbWVudHMtdGVzdC5qcwpAQCAtMjIsNiArMjIsMTAgQEAgSW5zcGVjdG9yVGVzdC5u
b2RlV2l0aElkID0gZnVuY3Rpb24oaWRWYWx1ZSwgY2FsbGJhY2spCiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMrKzsKICAgICAgICAgICAgIGNoaWxkTm9kZS5nZXRD
aGlsZE5vZGVzKHByb2Nlc3NDaGlsZHJlbi5iaW5kKG51bGwsIGZhbHNlKSk7CisgICAgICAgICAg
ICBpZiAoY2hpbGROb2RlLnNoYWRvd1Jvb3QpIHsKKyAgICAgICAgICAgICAgICBwZW5kaW5nUmVx
dWVzdHMrKzsKKyAgICAgICAgICAgICAgICBjaGlsZE5vZGUuc2hhZG93Um9vdC5nZXRDaGlsZE5v
ZGVzKHByb2Nlc3NDaGlsZHJlbi5iaW5kKG51bGwsIGZhbHNlKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAodG9wTGV2ZWwpCkBAIC0zNCw3ICszOCw3IEBAIEluc3Bl
Y3RvclRlc3Qubm9kZVdpdGhJZCA9IGZ1bmN0aW9uKGlkVmFsdWUsIGNhbGxiYWNrKQogICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5yZXF1ZXN0RG9jdW1lbnQoZG9jdW1lbnRSZXF1ZXN0ZWQuYmlu
ZCh0aGlzKSk7CiAgICAgZnVuY3Rpb24gZG9jdW1lbnRSZXF1ZXN0ZWQoZG9jKQogICAgIHsKLSAg
ICAgICAgZG9jLmdldENoaWxkTm9kZXMocHJvY2Vzc0NoaWxkcmVuLmJpbmQodGhpcywgdHJ1ZSkp
OworICAgICAgICBkb2MuZ2V0Q2hpbGROb2Rlcyhwcm9jZXNzQ2hpbGRyZW4uYmluZChudWxsLCB0
cnVlKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzL3NoYWRvdy1kb20tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Vs
ZW1lbnRzL3NoYWRvdy1kb20tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJmZDU3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZWxlbWVudHMvc2hhZG93LWRvbS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1MiBAQAorVGVz
dHMgdGhhdCBzaGFkb3cgRE9NIHRyZWUgaXMgcHJvcGVybHkgZGlzcGxheWVkLgorCisgCisKK1J1
bm5pbmc6IHRlc3REdW1wSW5pdGlhbAorLSA8bWV0ZXIgaWQ9Im1ldGVyIiBtaW49IjUiIG1heD0i
NDAiIHZhbHVlPSIxMy41Ij4KKyAgICAtIChzaGFkb3cpCisgICAgLSA8ZGl2PgorICAgICAgICAg
IDxkaXYgc3R5bGU9IndpZHRoOiAyNC4yODU3MTQyODU3MTQyODUlOyAiPjwvZGl2PgorICAgICAg
PC9kaXY+CisgIDwvbWV0ZXI+CisKK1J1bm5pbmc6IHRlc3REdW1wVXBkYXRlZAorQmVmb3JlIGNv
bnRyb2xzIGVuYWJsZWQKKyAgPHZpZGVvIGlkPSJ2aWRlbyI+PC92aWRlbz4KK0FmdGVyIGNvbnRy
b2xzIGVuYWJsZWQKKy0gPHZpZGVvIGlkPSJ2aWRlbyIgY29udHJvbHM+CisgICAgLSAoc2hhZG93
KQorICAgIC0gPGRpdj4KKyAgICAgICAgLSA8ZGl2PgorICAgICAgICAgICAgICA8aW5wdXQgdHlw
ZT0iYnV0dG9uIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiI+CisgICAgICAg
ICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHN0eWxlPSJkaXNwbGF5OiBub25lOyAiPgorICAg
ICAgICAgICAgLSA8ZGl2IHN0eWxlPgorICAgICAgICAgICAgICAgICAgPGRpdj4wMDowMCAvIDAw
OjAwPC9kaXY+CisgICAgICAgICAgICAgICAgLSA8aW5wdXQgdHlwZT0icmFuZ2UiIHByZWNpc2lv
bj0iZmxvYXQiIG1heD0iMCI+CisgICAgICAgICAgICAgICAgICAgIC0gKHNoYWRvdykKKyAgICAg
ICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9pbnB1dD4K
KyAgICAgICAgICAgICAgICAgIDxkaXY+MDA6MDA8L2Rpdj4KKyAgICAgICAgICAgICAgPC9kaXY+
CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iPgorICAgICAgICAgICAgICA8aW5w
dXQgdHlwZT0iYnV0dG9uIj4KKyAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgc3R5
bGU9ImRpc3BsYXk6IG5vbmU7ICI+CisgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24i
PgorICAgICAgICAgICAgLSA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBub25lOyAiPgorICAgICAgICAg
ICAgICAgIC0gPGlucHV0IHR5cGU9InJhbmdlIiBwcmVjaXNpb249ImZsb2F0IiBtYXg9IjEiIHZh
bHVlPSIxIj4KKyAgICAgICAgICAgICAgICAgICAgLSAoc2hhZG93KQorICAgICAgICAgICAgICAg
ICAgICAgIDxkaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2lucHV0PgorICAgICAgICAg
ICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiI+CisgICAgICAgICAgICAgIDwvZGl2PgorICAg
ICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIj4KKyAgICAgICAgICAgIC0gPGlucHV0IHR5
cGU9InJhbmdlIiBwcmVjaXNpb249ImZsb2F0IiBtYXg9IjEiIHZhbHVlPSIxIj4KKyAgICAgICAg
ICAgICAgICAtIChzaGFkb3cpCisgICAgICAgICAgICAgICAgICA8ZGl2PjwvZGl2PgorICAgICAg
ICAgICAgICA8L2lucHV0PgorICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIj4KKyAg
ICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICA8L3ZpZGVvPgorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZWxlbWVudHMvc2hhZG93LWRvbS5odG1sIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2VsZW1lbnRzL3NoYWRvdy1kb20uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YTcxNzEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2VsZW1lbnRzL3NoYWRvdy1kb20uaHRtbApAQCAtMCwwICsxLDYwIEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9lbGVtZW50cy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IGVuYWJsZUNvbnRyb2xzKCkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidmlkZW8i
KS5jb250cm9scyA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIEluc3BlY3Rv
clRlc3QucnVuVGVzdFN1aXRlKFsKKyAgICAgICAgZnVuY3Rpb24gdGVzdER1bXBJbml0aWFsKG5l
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwYW5kRWxlbWVudHNU
cmVlKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9k
ZVdpdGhJZCgibWV0ZXIiLCBmdW5jdGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIElu
c3BlY3RvclRlc3QuZHVtcEVsZW1lbnRzVHJlZShub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV4dCgpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0s
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdER1bXBVcGRhdGVkKG5leHQpIHsKKyAgICAgICAgICAg
IHZhciB2aWRlbzsKKworICAgICAgICAgICAgZnVuY3Rpb24gZHVtcFdpdGhDb250cm9sc0VuYWJs
ZWQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KCJBZnRlciBjb250cm9scyBlbmFibGVkIik7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9y
VGVzdC5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmR1bXBFbGVtZW50c1RyZWUodmlkZW8pOworICAgICAgICAg
ICAgICAgICAgICBuZXh0KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEluc3BlY3RvclRlc3Quc2VsZWN0Tm9kZVdpdGhJZCgidmlkZW8iLCBmdW5j
dGlvbihub2RlKSB7CisgICAgICAgICAgICAgICAgdmlkZW8gPSBub2RlOworICAgICAgICAgICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJCZWZvcmUgY29udHJvbHMgZW5hYmxlZCIpOwor
ICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZHVtcEVsZW1lbnRzVHJlZShub2RlKTsKKyAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV2YWx1YXRlSW5QYWdlKCJlbmFibGVDb250cm9s
cygpIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhw
YW5kRWxlbWVudHNUcmVlKGR1bXBXaXRoQ29udHJvbHNFbmFibGVkKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgXSk7Cit9CisKKzwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD4KK1Rlc3RzIHRoYXQg
c2hhZG93IERPTSB0cmVlIGlzIHByb3Blcmx5IGRpc3BsYXllZC4KKzwvcD4KKworPG1ldGVyIGlk
PSJtZXRlciIgbWluPSI1IiBtYXg9IjQwIiB2YWx1ZT0iMTMuNSI+PC9tZXRlcj4KKzx2aWRlbyBp
ZD0idmlkZW8iPjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM0NDkx
OS4uZTgzZDc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDExLTA1LTA0ICBBbmRy
ZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogZXhwb3NlIHNoYWRvdyBE
T00gaW4gdGhlIEVsZW1lbnRzIHBhbmVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MDE2MAorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rvci9lbGVtZW50
cy9zaGFkb3ctZG9tLmh0bWwKKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZVNoYWRvd1Jvb3QpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6cmVtb3ZlU2hhZG93Um9vdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmlzQ29udGFpbmVyTm9k
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5E
T01Ob2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5pblNoYWRv
d1RyZWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLl9zZXRTaGFk
b3dSb290UGF5bG9hZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUu
X3JlbnVtYmVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX2Jp
bmROb2Rlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlLnF1ZXJ5
U2VsZWN0b3JBbGwpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5f
c2hhZG93Um9vdFVwZGF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURpc3BhdGNoZXIu
cHJvdG90eXBlLnNlYXJjaFJlc3VsdHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTURpc3Bh
dGNoZXIucHJvdG90eXBlLnNoYWRvd1Jvb3RVcGRhdGVkKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUu
X25vZGVVcGRhdGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsLnByb3Rv
dHlwZS5fYXR0cmlidXRlc1VwZGF0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRz
UGFuZWwucHJvdG90eXBlLl9ub2RlUmVtb3ZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbC5wcm90b3R5cGUudXBkYXRlTW9kaWZpZWROb2Rlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUudXBkYXRlQnJlYWRjcnVtYik6CisgICAg
ICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVDaGlsZHJlbi51cGRhdGVD
aGlsZHJlbk9mTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX3VwZGF0ZUNoaWxkcmVuKToKKyAgICAgICAgKCk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzOgorICAgICAgICAoI2VsZW1lbnRzLWNvbnRl
bnQgLmRvbS1zaGFkb3ctcm9vdCk6CisgICAgICAgICgub3V0bGluZS1kaXNjbG9zdXJlIGxpIC53
ZWJraXQtaHRtbC10YWcuc2hhZG93KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qczoKKwogMjAxMS0wNS0wNCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGNmYTZiMjQuLjI2MjdiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTExODUs
MTEgKzExODUsMTMgQEAgU2hhZG93Um9vdCogRWxlbWVudDo6ZW5zdXJlU2hhZG93Um9vdCgpCiAK
ICAgICBSZWZQdHI8U2hhZG93Um9vdD4gbmV3Um9vdCA9IFNoYWRvd1Jvb3Q6OmNyZWF0ZShkb2N1
bWVudCgpKTsKICAgICBlbnN1cmVSYXJlRGF0YSgpLT5tX3NoYWRvd1Jvb3QgPSBuZXdSb290Lmdl
dCgpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERPTU5vZGUoZG9j
dW1lbnQoKSwgbmV3Um9vdC5nZXQoKSwgdGhpcyk7CiAgICAgbmV3Um9vdC0+c2V0U2hhZG93SG9z
dCh0aGlzKTsKICAgICBpZiAoaW5Eb2N1bWVudCgpKQogICAgICAgICBuZXdSb290LT5pbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogICAgIGlmIChhdHRhY2hlZCgpKQogICAgICAgICBuZXdSb290LT5s
YXp5QXR0YWNoKCk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnNlcnRET01O
b2RlKGRvY3VtZW50KCksIG5ld1Jvb3QuZ2V0KCkpOwogICAgIHJldHVybiBuZXdSb290LmdldCgp
OwogfQogCkBAIC0xMjAwLDYgKzEyMDIsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZVNoYWRvd1Jv
b3QoKQogCiAgICAgRWxlbWVudFJhcmVEYXRhKiBkYXRhID0gcmFyZURhdGEoKTsKICAgICBpZiAo
UmVmUHRyPE5vZGU+IG9sZFJvb3QgPSBkYXRhLT5tX3NoYWRvd1Jvb3QpIHsKKyAgICAgICAgSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsUmVtb3ZlRE9NTm9kZShkb2N1bWVudCgpLCB0aGlz
KTsKICAgICAgICAgZGF0YS0+bV9zaGFkb3dSb290ID0gMDsKICAgICAgICAgZG9jdW1lbnQoKS0+
cmVtb3ZlRm9jdXNlZE5vZGVPZlN1YnRyZWUob2xkUm9vdC5nZXQoKSk7CiAgICAgICAgIG9sZFJv
b3QtPnNldFNoYWRvd0hvc3QoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24KaW5kZXggNWU2M2M3ZC4uNWI2YWNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbgpAQCAtOTk5LDYgKzk5OSwxNCBAQAogICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vZGVJZHMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAiaW50
ZWdlciIgfSwgImRlc2NyaXB0aW9uIjogIklkcyBvZiB0aGUgc2VhcmNoIHJlc3VsdCBub2Rlcy4i
IH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQ
dXNoZXMgc2VhcmNoIHJlc3VsdHMgaW5pdGlhdGVkIHVzaW5nIDxjb2RlPnBlcmZvcm1TZWFyY2g8
L2NvZGU+IHRvIHRoZSBjbGllbnQuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAibmFtZSI6ICJzaGFkb3dSb290VXBkYXRlZCIsCisgICAgICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaG9zdElk
IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJJZCBvZiB0aGUgaG9zdCBub2Rl
IHRoYXQgaGFkIHNoYWRvdyByb290IGNoYW5nZWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNoYWRvd1Jvb3QiLCAiJHJlZiI6ICJET01Ob2RlIiwgImRlc2NyaXB0aW9uIjog
IkRhdGEgZm9yIG5ldyBzaGFkb3cgcm9vdCAobnVsbCBpZiBzaGFkb3cgcm9vdCByZW1vdmVkKS4i
IH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJG
aXJlZCB3aGVuIHNoYWRvdyByb290IGlzIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSBhIG5vZGUuIgog
ICAgICAgICAgICAgfQogICAgICAgICBdCiAgICAgfSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGIyODVjYWYuLmJlOTZjNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzYs
NiArNzYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5
bGVDb25zdGFudHMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgogCkBAIC00NTIsNyArNDUzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RG9jdW1lbnQoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piogcm9vdCkKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlk
KQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIW5vZGUg
fHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVU
eXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6
OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpKQorICAgIGlmICghbm9kZSB8fCAhaXNDb250YWluZXJO
b2RlKCpub2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2NoaWxkcmVuUmVxdWVzdGVk
LmNvbnRhaW5zKG5vZGVJZCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjIsNiArMTAyMyw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqIG5vZGUsIGluCiAgICAgICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05P
REU6CiAgICAgICAgICAgICBsb2NhbE5hbWUgPSBub2RlLT5sb2NhbE5hbWUoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGU6OlNIQURPV19ST09UX05PREU6CiAgICAgICAg
IGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6CkBAIC0xMDM4LDcgKzEwNDAsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yTm9kZShOb2RlKiBub2RlLCBpbgogICAgIHZhbHVlLT5zZXRTdHJpbmcoImxvY2FsTmFtZSIs
IGxvY2FsTmFtZSk7CiAgICAgdmFsdWUtPnNldFN0cmluZygibm9kZVZhbHVlIiwgbm9kZVZhbHVl
KTsKIAotICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSB8fCBu
b2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX05PREUgfHwgbm9kZS0+bm9kZVR5cGUo
KSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7CisgICAgaWYgKGlzQ29udGFpbmVy
Tm9kZSgqbm9kZSkpIHsKICAgICAgICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291
bnQobm9kZSk7CiAgICAgICAgIHZhbHVlLT5zZXROdW1iZXIoImNoaWxkTm9kZUNvdW50Iiwgbm9k
ZUNvdW50KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjaGlsZHJlbiA9IGJ1aWxk
QXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOwpAQCAtMTA1
Miw2ICsxMDU0LDggQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW4KICAgICAgICAgICAgICAgICBI
VE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVP
d25lckVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0U3RyaW5nKCJk
b2N1bWVudFVSTCIsIGRvY3VtZW50VVJMU3RyaW5nKGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVu
dCgpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93
Um9vdCA9IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0
T2JqZWN0KCJzaGFkb3dSb290IiwgYnVpbGRPYmplY3RGb3JOb2RlKHNoYWRvd1Jvb3QsIGRlcHRo
LCBub2Rlc01hcCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTdHJpbmco
ImRvY3VtZW50VVJMIiwgZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpKTsKQEAgLTEyMjMsMTIg
KzEyMjcsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2Rl
KiBub2RlKQogICAgIC8vIFdlIGNvdWxkIGJlIGF0dGFjaGluZyBleGlzdGluZyBzdWJ0cmVlLiBG
b3JnZXQgdGhlIGJpbmRpbmdzLgogICAgIHVuYmluZChub2RlLCAmbV9kb2N1bWVudE5vZGVUb0lk
TWFwKTsKIAotICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
KyAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBub2RlLT5pc1NoYWRvd1Jvb3QoKSA/IG5vZGUt
PnNoYWRvd0hvc3QoKSA6IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpbnQgcGFyZW50SWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlmIHBhcmVu
dCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICByZXR1cm47
CiAKKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpIHsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgJm1fZG9jdW1l
bnROb2RlVG9JZE1hcCk7CisgICAgICAgIG1fZnJvbnRlbmQtPnNoYWRvd1Jvb3RVcGRhdGVkKHBh
cmVudElkLCB2YWx1ZS5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlm
ICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJZCkpIHsKICAgICAgICAgLy8g
Tm8gY2hpbGRyZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3RpZnkgb24gY2hhbmdlcyBvZiBo
YXNDaGlsZHJlbi4KICAgICAgICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlQ291bnRVcGRhdGVkKHBh
cmVudElkLCBpbm5lckNoaWxkTm9kZUNvdW50KHBhcmVudCkpOwpAQCAtMTI0Niw3ICsxMjU1LDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQog
ICAgIGlmIChpc1doaXRlc3BhY2Uobm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLT5pc1NoYWRvd1Jvb3QoKSA/IG5vZGUtPnNoYWRvd0hvc3QoKSA6IG5v
ZGUtPnBhcmVudE5vZGUoKTsKICAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gSWYgcGFyZW50IGlzIG5vdCBtYXBwZWQgeWV0IC0+IGln
bm9yZSB0aGUgZXZlbnQuCiAgICAgaWYgKCFwYXJlbnRJZCkKQEAgLTEyNTUsNyArMTI2NCw5IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKICAg
ICBpZiAobV9kb21MaXN0ZW5lcikKICAgICAgICAgbV9kb21MaXN0ZW5lci0+ZGlkUmVtb3ZlRE9N
Tm9kZShub2RlKTsKIAotICAgIGlmICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJl
bnRJZCkpIHsKKyAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkpCisgICAgICAgIG1fZnJvbnRl
bmQtPnNoYWRvd1Jvb3RVcGRhdGVkKHBhcmVudElkLCAwKTsKKyAgICBlbHNlIGlmICghbV9jaGls
ZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJZCkpIHsKICAgICAgICAgLy8gTm8gY2hpbGRy
ZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3RpZnkgb24gY2hhbmdlcyBvZiBoYXNDaGlsZHJl
bi4KICAgICAgICAgaWYgKGlubmVyQ2hpbGROb2RlQ291bnQocGFyZW50KSA9PSAxKQogICAgICAg
ICAgICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlQ291bnRVcGRhdGVkKHBhcmVudElkLCAwKTsKQEAg
LTE0MDQsNiArMTQxNSwxNSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgRE9NTm9kZUhpZ2hsaWdo
dGVyOjpEcmF3Tm9kZUhpZ2hsaWdodChjb250ZXh0LCBtX2hpZ2hsaWdodGVkTm9kZS5nZXQoKSwg
bW9kZSk7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmlzQ29udGFpbmVyTm9kZShjb25z
dCBOb2RlJiBub2RlKQoreworICAgICBOb2RlOjpOb2RlVHlwZSB0eXBlID0gbm9kZS5ub2RlVHlw
ZSgpOworICAgICByZXR1cm4gdHlwZSA9PSBOb2RlOjpFTEVNRU5UX05PREUKKyAgICAgICAgIHx8
IHR5cGUgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERQorICAgICAgICAgfHwgdHlwZSA9PSBOb2RlOjpE
T0NVTUVOVF9GUkFHTUVOVF9OT0RFCisgICAgICAgICB8fCB0eXBlID09IE5vZGU6OlNIQURPV19S
T09UX05PREU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCmluZGV4IGU0N2EwOTQuLjVkMWIwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0yMDcsNiArMjA3LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CiAKKyAgICBzdGF0aWMgYm9vbCBpc0NvbnRhaW5lck5v
ZGUoY29uc3QgTm9kZSYpOwogICAgIEluc3RydW1lbnRpbmdBZ2VudHMqIG1faW5zdHJ1bWVudGlu
Z0FnZW50czsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50OwogICAgIEluc3Bl
Y3RvckNsaWVudCogbV9jbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9ET01BZ2VudC5qcwppbmRleCA0MjEwZTQyLi5kOTE2ZWZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTY3LDYgKzY3LDggQEAg
V2ViSW5zcGVjdG9yLkRPTU5vZGUgPSBmdW5jdGlvbihkb2MsIHBheWxvYWQpIHsKICAgICAgICAg
ICAgIHRoaXMub3duZXJEb2N1bWVudC5ib2R5ID0gdGhpczsKICAgICAgICAgaWYgKHBheWxvYWQu
ZG9jdW1lbnRVUkwpCiAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VVJMID0gcGF5bG9hZC5kb2N1
bWVudFVSTDsKKyAgICAgICAgaWYgKHBheWxvYWQuc2hhZG93Um9vdCkKKyAgICAgICAgICAgIHRo
aXMuX3NldFNoYWRvd1Jvb3RQYXlsb2FkKHBheWxvYWQuc2hhZG93Um9vdCk7CiAgICAgfSBlbHNl
IGlmICh0aGlzLl9ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9UWVBFX05PREUpIHsKICAgICAg
ICAgdGhpcy5wdWJsaWNJZCA9IHBheWxvYWQucHVibGljSWQ7CiAgICAgICAgIHRoaXMuc3lzdGVt
SWQgPSBwYXlsb2FkLnN5c3RlbUlkOwpAQCAtOTUsNiArOTcsMTEgQEAgV2ViSW5zcGVjdG9yLkRP
TU5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZVR5cGU7CiAgICAg
fSwKIAorICAgIGluU2hhZG93VHJlZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2luU2hhZG93VHJlZTsKKyAgICB9LAorCiAgICAgbm9kZU5hbWU6IGZ1bmN0aW9uKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9ub2RlTmFtZTsKQEAgLTI4NCw2ICsyOTEsMTcg
QEAgV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9yZW51
bWJlcigpOwogICAgIH0sCiAKKyAgICBfc2V0U2hhZG93Um9vdFBheWxvYWQ6IGZ1bmN0aW9uKHBh
eWxvYWQpCisgICAgeworICAgICAgICBpZiAoIXBheWxvYWQpIHsKKyAgICAgICAgICAgIHRoaXMu
c2hhZG93Um9vdCA9IG51bGw7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5zaGFkb3dSb290ID0gbmV3IFdlYkluc3BlY3Rvci5ET01Ob2RlKHRoaXMub3duZXJE
b2N1bWVudCwgcGF5bG9hZCk7CisgICAgICAgIHRoaXMuc2hhZG93Um9vdC5wYXJlbnROb2RlID0g
dGhpczsKKyAgICAgICAgdGhpcy5zaGFkb3dSb290Ll9pblNoYWRvd1RyZWUgPSB0cnVlOworICAg
IH0sCisKICAgICBfcmVudW1iZXI6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIHRoaXMuX2No
aWxkTm9kZUNvdW50ID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7CkBAIC0zMDAsNiArMzE4LDcgQEAg
V2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgY2hpbGQubmV4
dFNpYmxpbmcgPSBpICsgMSA8IHRoaXMuX2NoaWxkTm9kZUNvdW50ID8gdGhpcy5jaGlsZHJlbltp
ICsgMV0gOiBudWxsOwogICAgICAgICAgICAgY2hpbGQucHJldlNpYmxpbmcgPSBpIC0gMSA+PSAw
ID8gdGhpcy5jaGlsZHJlbltpIC0gMV0gOiBudWxsOwogICAgICAgICAgICAgY2hpbGQucGFyZW50
Tm9kZSA9IHRoaXM7CisgICAgICAgICAgICBjaGlsZC5faW5TaGFkb3dUcmVlID0gdGhpcy5faW5T
aGFkb3dUcmVlOwogICAgICAgICB9CiAgICAgfSwKIApAQCAtMzQ2LDcgKzM2NSw4IEBAIFdlYklu
c3BlY3Rvci5ET01BZ2VudC5FdmVudHMgPSB7CiAgICAgTm9kZUluc2VydGVkOiAiTm9kZUluc2Vy
dGVkIiwKICAgICBOb2RlUmVtb3ZlZDogIk5vZGVSZW1vdmVkIiwKICAgICBEb2N1bWVudFVwZGF0
ZWQ6ICJEb2N1bWVudFVwZGF0ZWQiLAotICAgIENoaWxkTm9kZUNvdW50VXBkYXRlZDogIkNoaWxk
Tm9kZUNvdW50VXBkYXRlZCIKKyAgICBDaGlsZE5vZGVDb3VudFVwZGF0ZWQ6ICJDaGlsZE5vZGVD
b3VudFVwZGF0ZWQiLAorICAgIFNoYWRvd1Jvb3RVcGRhdGVkOiAiU2hhZG93Um9vdFVwZGF0ZWQi
LAogfQogCiBXZWJJbnNwZWN0b3IuRE9NQWdlbnQucHJvdG90eXBlID0gewpAQCAtNDg2LDYgKzUw
Niw5IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIHZhciBj
aGlsZCA9IGNoaWxkcmVuW2ldOwogICAgICAgICAgICAgdGhpcy5faWRUb0RPTU5vZGVbY2hpbGQu
aWRdID0gY2hpbGQ7CisgICAgICAgICAgICBpZiAoY2hpbGQuc2hhZG93Um9vdCkKKyAgICAgICAg
ICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZVtjaGlsZC5zaGFkb3dSb290LmlkXSA9IGNoaWxkLnNo
YWRvd1Jvb3Q7CisKICAgICAgICAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikKICAgICAgICAgICAg
ICAgICB0aGlzLl9iaW5kTm9kZXMoY2hpbGQuY2hpbGRyZW4pOwogICAgICAgICB9CkBAIC01Mzgs
NiArNTYxLDE3IEBAIFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgcXVl
cnlTZWxlY3RvckFsbDogZnVuY3Rpb24obm9kZUlkLCBzZWxlY3RvcnMsIGNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgRE9NQWdlbnQucXVlcnlTZWxlY3RvckFsbChub2RlSWQsIHNlbGVjdG9ycywg
dGhpcy5fd3JhcENsaWVudENhbGxiYWNrKGNhbGxiYWNrKSk7CisgICAgfSwKKworICAgIF9zaGFk
b3dSb290VXBkYXRlZDogZnVuY3Rpb24oaG9zdElkLCBwYXlsb2FkKQorICAgIHsKKyAgICAgICAg
dmFyIGhvc3QgPSB0aGlzLl9pZFRvRE9NTm9kZVtob3N0SWRdOworICAgICAgICBpZiAoaG9zdC5z
aGFkb3dSb290ICYmICFwYXlsb2FkKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2lkVG9ET01O
b2RlW2hvc3Quc2hhZG93Um9vdC5pZF07CisgICAgICAgIGhvc3QuX3NldFNoYWRvd1Jvb3RQYXls
b2FkKHBheWxvYWQpOworICAgICAgICBpZiAoaG9zdC5zaGFkb3dSb290KQorICAgICAgICAgICAg
dGhpcy5faWRUb0RPTU5vZGVbaG9zdC5zaGFkb3dSb290LmlkXSA9IGhvc3Quc2hhZG93Um9vdDsK
KyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRPTUFn
ZW50LkV2ZW50cy5TaGFkb3dSb290VXBkYXRlZCwgaG9zdCk7CiAgICAgfQogfQogCkBAIC01OTMs
NSArNjI3LDEwIEBAIFdlYkluc3BlY3Rvci5ET01EaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKICAg
ICB7CiAgICAgICAgIGlmICh0aGlzLl9kb21BZ2VudC5fc2VhcmNoUmVzdWx0Q29sbGVjdG9yKQog
ICAgICAgICAgICAgdGhpcy5fZG9tQWdlbnQuX3NlYXJjaFJlc3VsdENvbGxlY3Rvcihub2RlSWRz
KTsKKyAgICB9LAorCisgICAgc2hhZG93Um9vdFVwZGF0ZWQ6IGZ1bmN0aW9uKGhvc3RJZCwgc2hh
ZG93Um9vdCkKKyAgICB7CisgICAgICAgIHRoaXMuX2RvbUFnZW50Ll9zaGFkb3dSb290VXBkYXRl
ZChob3N0SWQsIHNoYWRvd1Jvb3QpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcwppbmRleCBmYmQ1MTM5Li40ZDk0
MWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1BhbmVsLmpzCkBAIC0xMTMsMTIgKzExMywxMyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNQ
YW5lbCA9IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuX3JlZ2lzdGVyU2hvcnRjdXRzKCk7CiAKLSAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9N
QWdlbnQuRXZlbnRzLk5vZGVJbnNlcnRlZCwgdGhpcy5fbm9kZUluc2VydGVkLCB0aGlzKTsKKyAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9N
QWdlbnQuRXZlbnRzLk5vZGVJbnNlcnRlZCwgdGhpcy5fbm9kZVVwZGF0ZWQuYmluZCh0aGlzLCB0
cnVlKSk7CiAgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5z
cGVjdG9yLkRPTUFnZW50LkV2ZW50cy5Ob2RlUmVtb3ZlZCwgdGhpcy5fbm9kZVJlbW92ZWQsIHRo
aXMpOwogICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3Bl
Y3Rvci5ET01BZ2VudC5FdmVudHMuQXR0ck1vZGlmaWVkLCB0aGlzLl9hdHRyaWJ1dGVzVXBkYXRl
ZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5DaGFyYWN0ZXJEYXRhTW9kaWZpZWQsIHRoaXMuX2No
YXJhY3RlckRhdGFNb2RpZmllZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cy5DaGFyYWN0ZXJEYXRh
TW9kaWZpZWQsIHRoaXMuX25vZGVVcGRhdGVkLmJpbmQodGhpcywgZmFsc2UpKTsKICAgICBXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9NQWdlbnQu
RXZlbnRzLkRvY3VtZW50VXBkYXRlZCwgdGhpcy5fZG9jdW1lbnRVcGRhdGVkLCB0aGlzKTsKICAg
ICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRE9N
QWdlbnQuRXZlbnRzLkNoaWxkTm9kZUNvdW50VXBkYXRlZCwgdGhpcy5fY2hpbGROb2RlQ291bnRV
cGRhdGVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZG9tQWdlbnQuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRE9NQWdlbnQuRXZlbnRzLlNoYWRvd1Jvb3RVcGRhdGVkLCB0aGlzLl9u
b2RlVXBkYXRlZC5iaW5kKHRoaXMsIHRydWUpKTsKIAogICAgIHRoaXMucmVjZW50bHlNb2RpZmll
ZE5vZGVzID0gW107CiB9CkBAIC00MzEsMzMgKzQzMiwyNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9pc0VkaXRpbmdTdHls
ZTsKICAgICB9LAogCi0gICAgX2F0dHJpYnV0ZXNVcGRhdGVkOiBmdW5jdGlvbihldmVudCkKKyAg
ICBfbm9kZVVwZGF0ZWQ6IGZ1bmN0aW9uKGhpZXJhcmNoeVVwZGF0ZWQsIGV2ZW50KQogICAgIHsK
LSAgICAgICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMucHVzaCh7bm9kZTogZXZlbnQuZGF0
YSwgdXBkYXRlZDogdHJ1ZX0pOworICAgICAgICB2YXIgdXBkYXRlZE5vZGVEZXRhaWxzID0geyBu
b2RlOiBldmVudC5kYXRhIH07CisgICAgICAgIGlmIChoaWVyYXJjaHlVcGRhdGVkKQorICAgICAg
ICAgICAgdXBkYXRlZE5vZGVEZXRhaWxzLnBhcmVudCA9IGV2ZW50LmRhdGEucGFyZW50Tm9kZTsK
KyAgICAgICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMucHVzaCh1cGRhdGVkTm9kZURldGFp
bHMpOwogICAgICAgICBpZiAodGhpcy52aXNpYmxlKQogICAgICAgICAgICAgdGhpcy5fdXBkYXRl
TW9kaWZpZWROb2Rlc1Nvb24oKTsKLQotICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdGluZ1N0eWxl
ICYmIGV2ZW50LmRhdGEgPT09IHRoaXMuZm9jdXNlZERPTU5vZGUpCi0gICAgICAgICAgICB0aGlz
Ll9zdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgIH0sCiAKLSAgICBfY2hhcmFjdGVyRGF0YU1vZGlm
aWVkOiBmdW5jdGlvbihldmVudCkKKyAgICBfYXR0cmlidXRlc1VwZGF0ZWQ6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXMucHVzaCh7bm9k
ZTogZXZlbnQuZGF0YSwgdXBkYXRlZDogdHJ1ZX0pOwotICAgICAgICBpZiAodGhpcy52aXNpYmxl
KQotICAgICAgICAgICAgdGhpcy5fdXBkYXRlTW9kaWZpZWROb2Rlc1Nvb24oKTsKLSAgICB9LAor
ICAgICAgICB0aGlzLl9ub2RlVXBkYXRlZChmYWxzZSwgZXZlbnQpOwogCi0gICAgX25vZGVJbnNl
cnRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLnJlY2VudGx5TW9kaWZp
ZWROb2Rlcy5wdXNoKHtub2RlOiBldmVudC5kYXRhLCBwYXJlbnQ6IGV2ZW50LmRhdGEucGFyZW50
Tm9kZSwgaW5zZXJ0ZWQ6IHRydWV9KTsKLSAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkKLSAgICAg
ICAgICAgIHRoaXMuX3VwZGF0ZU1vZGlmaWVkTm9kZXNTb29uKCk7CisgICAgICAgIGlmICghdGhp
cy5faXNFZGl0aW5nU3R5bGUgJiYgZXZlbnQuZGF0YSA9PT0gdGhpcy5mb2N1c2VkRE9NTm9kZSkK
KyAgICAgICAgICAgIHRoaXMuX3N0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgfSwKIAogICAgIF9u
b2RlUmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB0aGlzLnJlY2VudGx5
TW9kaWZpZWROb2Rlcy5wdXNoKHtub2RlOiBldmVudC5kYXRhLm5vZGUsIHBhcmVudDogZXZlbnQu
ZGF0YS5wYXJlbnQsIHJlbW92ZWQ6IHRydWV9KTsKKyAgICAgICAgdGhpcy5yZWNlbnRseU1vZGlm
aWVkTm9kZXMucHVzaCh7bm9kZTogZXZlbnQuZGF0YS5ub2RlLCBwYXJlbnQ6IGV2ZW50LmRhdGEu
cGFyZW50fSk7CiAgICAgICAgIGlmICh0aGlzLnZpc2libGUpCiAgICAgICAgICAgICB0aGlzLl91
cGRhdGVNb2RpZmllZE5vZGVzU29vbigpOwogICAgIH0sCkBAIC00OTAsMTYgKzQ4NSwxMyBAQCBX
ZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIg
cGFyZW50ID0gdGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXNbaV0ucGFyZW50OwogICAgICAgICAg
ICAgdmFyIG5vZGUgPSB0aGlzLnJlY2VudGx5TW9kaWZpZWROb2Rlc1tpXS5ub2RlOwogCi0gICAg
ICAgICAgICBpZiAodGhpcy5yZWNlbnRseU1vZGlmaWVkTm9kZXNbaV0udXBkYXRlZCkgeworICAg
ICAgICAgICAgaWYgKCFwYXJlbnQpIHsKICAgICAgICAgICAgICAgICB2YXIgbm9kZUl0ZW0gPSB0
aGlzLnRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChub2RlKTsKICAgICAgICAgICAgICAgICBp
ZiAobm9kZUl0ZW0pCiAgICAgICAgICAgICAgICAgICAgIG5vZGVJdGVtLnVwZGF0ZVRpdGxlKCk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcGFyZW50KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCiAgICAgICAgICAgICB2
YXIgcGFyZW50Tm9kZUl0ZW0gPSB0aGlzLnRyZWVPdXRsaW5lLmZpbmRUcmVlRWxlbWVudChwYXJl
bnQpOwogICAgICAgICAgICAgaWYgKHBhcmVudE5vZGVJdGVtICYmICFwYXJlbnROb2RlSXRlbS5h
bHJlYWR5VXBkYXRlZENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICAgcGFyZW50Tm9kZUl0ZW0u
dXBkYXRlQ2hpbGRyZW4oKTsKQEAgLTY2OSw2ICs2NjEsMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0g
IjwhRE9DVFlQRT4iOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAg
ICAgIGNhc2UgTm9kZS5TSEFET1dfUk9PVF9OT0RFOgorICAgICAgICAgICAgICAgICAgICBjcnVt
YlRpdGxlID0gIihzaGFkb3cpIjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gdGhp
cy50cmVlT3V0bGluZS5ub2RlTmFtZVRvQ29ycmVjdENhc2UoY3VycmVudC5ub2RlTmFtZSgpKTsK
ICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCBhZjQ1ZmJmLi42ZjJhZjY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJl
ZU91dGxpbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1RyZWVPdXRsaW5lLmpzCkBAIC0zMDAsNyArMzAwLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVPdXRsaW5lLnByb3RvdHlw
ZTsKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgZWxl
bWVudENsb3NlVGFnKQogewogICAgIHRoaXMuX2VsZW1lbnRDbG9zZVRhZyA9IGVsZW1lbnRDbG9z
ZVRhZzsKLSAgICB2YXIgaGFzQ2hpbGRyZW5PdmVycmlkZSA9ICFlbGVtZW50Q2xvc2VUYWcgJiYg
bm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIXRoaXMuX3Nob3dJbmxpbmVUZXh0KG5vZGUpOworICAg
IHZhciBoYXNDaGlsZHJlbk92ZXJyaWRlID0gIWVsZW1lbnRDbG9zZVRhZyAmJiAobm9kZS5oYXND
aGlsZE5vZGVzKCkgfHwgbm9kZS5zaGFkb3dSb290KSAmJiAhdGhpcy5fc2hvd0lubGluZVRleHQo
bm9kZSk7CiAKICAgICAvLyBUaGUgdGl0bGUgd2lsbCBiZSB1cGRhdGVkIGluIG9uYXR0YWNoLgog
ICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgIiIsIG5vZGUsIGhhc0NoaWxkcmVuT3ZlcnJpZGUp
OwpAQCAtNTY3LDYgKzU2NywxNSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0U2libGluZzsK
ICAgICAgICAgICAgICAgICArK3RyZWVDaGlsZEluZGV4OwogICAgICAgICAgICAgfQorICAgICAg
ICAgICAgLy8gSWYgd2UgZXZlciBoYWQgc2hhZG93IHJvb3QgY2hpbGQsIGl0J3MgZ29pbmcgdG8g
YmUgc2Vjb25kIHRvIGxhc3QgKGJlZm9yZSBjbG9zaW5nIHRhZykKKyAgICAgICAgICAgIHZhciBz
aGFkb3dSb290Q2hpbGQgPSB0cmVlRWxlbWVudC5jaGlsZHJlblt0cmVlRWxlbWVudC5jaGlsZHJl
bi5sZW5ndGggLSAyXTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290Q2hpbGQgJiYgc2hhZG93
Um9vdENoaWxkLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVUeXBlKCkgPT09IE5vZGUuU0hBRE9XX1JP
T1RfTk9ERSkgeworICAgICAgICAgICAgaWYgKCFub2RlLnNoYWRvd1Jvb3QpCisgICAgICAgICAg
ICAgICAgdHJlZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc2hhZG93Um9vdENoaWxkKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5yZXByZXNlbnRlZE9iamVjdCA9
IG5vZGUuc2hhZG93Um9vdDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5zaGFkb3dSb290
KQorICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50Lmluc2VydENoaWxkRWxlbWVudChub2RlLnNo
YWRvd1Jvb3QsIHRyZWVDaGlsZEluZGV4KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlbW92
ZSBhbnkgdHJlZSBlbGVtZW50cyB0aGF0IG5vIGxvbmdlciBoYXZlIHRoaXMgbm9kZSAob3IgdGhp
cyBub2RlJ3MgY29udGVudERvY3VtZW50KSBhcyB0aGVpciBwYXJlbnQuCkBAIC0xMjU3LDEwICsx
MjY2LDE1IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgcmV0dXJuIGh0bWw7CiAgICAgfSwKIAotICAgIF90YWdIVE1MOiBmdW5jdGlvbih0
YWdOYW1lLCBpc0Nsb3NpbmdUYWcsIGlzRGlzdGluY3RUcmVlRWxlbWVudCwgbGlua2lmeSkKKyAg
ICBfdGFnSFRNTDogZnVuY3Rpb24odGFnTmFtZSwgaXNDbG9zaW5nVGFnLCBpc0Rpc3RpbmN0VHJl
ZUVsZW1lbnQsIGxpbmtpZnksIGlzU2hhZG93KQogICAgIHsKICAgICAgICAgdmFyIG5vZGUgPSB0
aGlzLnJlcHJlc2VudGVkT2JqZWN0OwotICAgICAgICB2YXIgcmVzdWx0ID0gIjxzcGFuIGNsYXNz
PVwid2Via2l0LWh0bWwtdGFnIiArIChpc0Nsb3NpbmdUYWcgJiYgaXNEaXN0aW5jdFRyZWVFbGVt
ZW50ID8gIiBjbG9zZSIgOiAiIikgICsgIlwiPiZsdDsiOworICAgICAgICB2YXIgY2xhc3NlcyA9
IFsgIndlYmtpdC1odG1sLXRhZyIgXTsKKyAgICAgICAgaWYgKGlzQ2xvc2luZ1RhZyAmJiBpc0Rp
c3RpbmN0VHJlZUVsZW1lbnQpCisgICAgICAgICAgICBjbGFzc2VzLnB1c2goImNsb3NlIik7Cisg
ICAgICAgIGlmIChpc1NoYWRvdykKKyAgICAgICAgICAgIGNsYXNzZXMucHVzaCgic2hhZG93Iik7
CisgICAgICAgIHZhciByZXN1bHQgPSAiPHNwYW4gY2xhc3M9XCIiICsgY2xhc3Nlcy5qb2luKCIg
IikgKyAiXCI+Jmx0OyI7CiAgICAgICAgIHJlc3VsdCArPSAiPHNwYW4gIiArIChpc0Nsb3NpbmdU
YWcgPyAiIiA6ICJjbGFzcz1cIndlYmtpdC1odG1sLXRhZy1uYW1lXCIiKSArICI+IiArIChpc0Ns
b3NpbmdUYWcgPyAiLyIgOiAiIikgKyB0YWdOYW1lICsgIjwvc3Bhbj4iOwogICAgICAgICBpZiAo
IWlzQ2xvc2luZ1RhZyAmJiBub2RlLmhhc0F0dHJpYnV0ZXMoKSkgewogICAgICAgICAgICAgdmFy
IGF0dHJpYnV0ZXMgPSBub2RlLmF0dHJpYnV0ZXMoKTsKQEAgLTEyOTYsMTIgKzEzMTAsMTIgQEAg
V2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKICAgICAgICAgICAgICAgICB2YXIgdGFnTmFtZSA9
IHRoaXMudHJlZU91dGxpbmUubm9kZU5hbWVUb0NvcnJlY3RDYXNlKG5vZGUubm9kZU5hbWUoKSku
ZXNjYXBlSFRNTCgpOwogICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50Q2xvc2VUYWcp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW5mby50aXRsZUhUTUwgPSB0aGlzLl90YWdIVE1MKHRh
Z05hbWUsIHRydWUsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBpbmZvLnRpdGxlSFRNTCA9
IHRoaXMuX3RhZ0hUTUwodGFnTmFtZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIG5vZGUuaW5TaGFkb3dU
cmVlKCkpOwogICAgICAgICAgICAgICAgICAgICBpbmZvLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIHZhciB0aXRsZUhUTUwgPSB0aGlzLl90YWdIVE1MKHRhZ05hbWUsIGZhbHNlLCBmYWxz
ZSwgbGlua2lmeSk7CisgICAgICAgICAgICAgICAgdmFyIHRpdGxlSFRNTCA9IHRoaXMuX3RhZ0hU
TUwodGFnTmFtZSwgZmFsc2UsIGZhbHNlLCBsaW5raWZ5LCBub2RlLmluU2hhZG93VHJlZSgpKTsK
IAogICAgICAgICAgICAgICAgIHZhciB0ZXh0Q2hpbGQgPSB0aGlzLl9zaW5nbGVUZXh0Q2hpbGQo
bm9kZSk7CiAgICAgICAgICAgICAgICAgdmFyIHNob3dJbmxpbmVUZXh0ID0gdGV4dENoaWxkICYm
IHRleHRDaGlsZC5ub2RlVmFsdWUoKS5sZW5ndGggPCBQcmVmZXJlbmNlcy5tYXhJbmxpbmVUZXh0
Q2hpbGRMZW5ndGg7CkBAIC0xMzA5LDE0ICsxMzIzLDE0IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50
c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZXhw
YW5kZWQgJiYgKCFzaG93SW5saW5lVGV4dCAmJiAodGhpcy50cmVlT3V0bGluZS5pc1hNTE1pbWVU
eXBlIHx8ICFXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5Gb3JiaWRkZW5DbG9zaW5n
VGFnRWxlbWVudHNbdGFnTmFtZV0pKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5o
YXNDaGlsZHJlbikKICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSFRNTCArPSAiPHNwYW4g
Y2xhc3M9XCJ3ZWJraXQtaHRtbC10ZXh0LW5vZGVcIj4mIzgyMzA7PC9zcGFuPiYjODIwMzsiOwot
ICAgICAgICAgICAgICAgICAgICB0aXRsZUhUTUwgKz0gdGhpcy5fdGFnSFRNTCh0YWdOYW1lLCB0
cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHRpdGxlSFRNTCArPSB0aGlzLl90YWdI
VE1MKHRhZ05hbWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgbm9kZS5pblNoYWRvd1RyZWUoKSk7CiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IG9u
bHkgaGFzIGEgc2luZ2xlIGNoaWxkIHRoYXQgaXMgYSB0ZXh0IG5vZGUsCiAgICAgICAgICAgICAg
ICAgLy8ganVzdCBzaG93IHRoYXQgdGV4dCBhbmQgdGhlIGNsb3NpbmcgdGFnIGlubGluZSByYXRo
ZXIgdGhhbgogICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBhIHN1YnRyZWUgZm9yIHRoZW0KICAg
ICAgICAgICAgICAgICBpZiAoc2hvd0lubGluZVRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAg
dGl0bGVIVE1MICs9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRleHQtbm9kZVwiPiIgKyB0
ZXh0Q2hpbGQubm9kZVZhbHVlKCkuZXNjYXBlSFRNTCgpICsgIjwvc3Bhbj4mIzgyMDM7IiArIHRo
aXMuX3RhZ0hUTUwodGFnTmFtZSwgdHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB0
aXRsZUhUTUwgKz0gIjxzcGFuIGNsYXNzPVwid2Via2l0LWh0bWwtdGV4dC1ub2RlXCI+IiArIHRl
eHRDaGlsZC5ub2RlVmFsdWUoKS5lc2NhcGVIVE1MKCkgKyAiPC9zcGFuPiYjODIwMzsiICsgdGhp
cy5fdGFnSFRNTCh0YWdOYW1lLCB0cnVlLCBmYWxzZSwgbm9kZS5pblNoYWRvd1RyZWUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGluZm8uaGFzQ2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgaW5mby50aXRsZUhUTUwgPSB0aXRsZUhUTUw7CkBAIC0x
MzY4LDYgKzEzODIsMTEgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90
eXBlID0gewogICAgICAgICAgICAgY2FzZSBOb2RlLkNEQVRBX1NFQ1RJT05fTk9ERToKICAgICAg
ICAgICAgICAgICBpbmZvLnRpdGxlSFRNTCA9ICI8c3BhbiBjbGFzcz1cIndlYmtpdC1odG1sLXRl
eHQtbm9kZVwiPiZsdDshW0NEQVRBWyIgKyBub2RlLm5vZGVWYWx1ZSgpLmVzY2FwZUhUTUwoKSAr
ICJdXSZndDs8L3NwYW4+IjsKICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
Y2FzZSBOb2RlLlNIQURPV19ST09UX05PREU6CisgICAgICAgICAgICAgICAgaW5mby50aXRsZUhU
TUwgPSAiPHNwYW4gY2xhc3M9XCJkb20tc2hhZG93LXJvb3RcIj4oc2hhZG93KTwvc3Bhbj4iOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIGluZm8udGl0bGVIVE1MID0gdGhpcy50cmVlT3V0bGluZS5ub2RlTmFtZVRvQ29ycmVj
dENhc2Uobm9kZS5ub2RlTmFtZSgpKS5jb2xsYXBzZVdoaXRlc3BhY2UoKS5lc2NhcGVIVE1MKCk7
CiAgICAgICAgIH0KQEAgLTEzNzcsNyArMTM5Niw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgIF9zaW5nbGVUZXh0Q2hpbGQ6IGZ1bmN0aW9u
KG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgIGlmICghbm9kZSB8fCBu
b2RlLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKIAogICAgICAgICB2YXIg
Zmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA0NjA3ZTY2Li42YzhhZWI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBA
IC0xMDU2LDYgKzEwNTYsMTAgQEAgYm9keS5wbGF0Zm9ybS1saW51eCAubW9ub3NwYWNlLCBib2R5
LnBsYXRmb3JtLWxpbnV4IC5zb3VyY2UtY29kZSB7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OwogfQogCisjZWxlbWVudHMtY29udGVudCAuZG9tLXNoYWRvdy1yb290IHsKKyAgICBjb2xvcjog
cmdiKDkwLCA5MCwgOTApOworfQorCiAjZWxlbWVudHMtc2lkZWJhciB7CiAgICAgcG9zaXRpb246
IGFic29sdXRlOwogICAgIHRvcDogMDsKQEAgLTEyMzIsNiArMTIzNiwxMCBAQCBib2R5LnBsYXRm
b3JtLWxpbnV4IC5tb25vc3BhY2UsIGJvZHkucGxhdGZvcm0tbGludXggLnNvdXJjZS1jb2RlIHsK
ICAgICB0ZXh0LWluZGVudDogLTEycHgKIH0KIAorLm91dGxpbmUtZGlzY2xvc3VyZSBsaSAud2Vi
a2l0LWh0bWwtdGFnLnNoYWRvdyB7CisgICAgb3BhY2l0eTogMC43OworfQorCiAub3V0bGluZS1k
aXNjbG9zdXJlIGxpIC53ZWJraXQtaHRtbC10YWcuY2xvc2UgewogICAgIG1hcmdpbi1sZWZ0OiAt
MTJweDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
dXRpbGl0aWVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRp
ZXMuanMKaW5kZXggNjRhN2E5Zi4uYzMzYWRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC91dGlsaXRpZXMuanMKQEAgLTIyOCw3ICsyMjgsOSBAQCBOb2RlLnBy
b3RvdHlwZS5lbmNsb3NpbmdOb2RlV2l0aENsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lKQogICAg
IHJldHVybiB0aGlzLnBhcmVudE5vZGUuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcyhjbGFz
c05hbWUpOwogfQogCi1FbGVtZW50LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uKHF1ZXJ5KSAK
K05vZGUuU0hBRE9XX1JPT1RfTk9ERSA9IDE0OworCitFbGVtZW50LnByb3RvdHlwZS5xdWVyeSA9
IGZ1bmN0aW9uKHF1ZXJ5KQogewogICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuZXZhbHVh
dGUocXVlcnksIHRoaXMsIG51bGwsIFhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBF
LCBudWxsKS5zaW5nbGVOb2RlVmFsdWU7CiB9Cg==
</data>
<flag name="review"
          id="85174"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120263</attachid>
            <date>2011-12-21 20:42:23 -0800</date>
            <delta_ts>2011-12-21 20:42:23 -0800</delta_ts>
            <desc>Updated patch, no tests</desc>
            <filename>patch.git.diff</filename>
            <type>text/plain</type>
            <size>19480</size>
            <attacher name="Silvia Pfeiffer">silviapf</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5Mjg3YjMwLi5lNzM3NzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAg
QEAKKzIwMTEtMTItMjEgIFNpbHZpYSBQZmVpZmZlciAgPHNpbHZpYXBmQGNocm9taXVtLm9yZz4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBleHBvc2Ugc2hhZG93IERPTSBpbiB0aGUgRWxlbWVu
dHMgcGFuZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYwMTYwCisgCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpyZW1vdmVTaGFkb3dSb290KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnB1
c2hDaGlsZE5vZGVzVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRP
TUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTU5vZGUpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBlLmluU2hhZG93VHJlZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUuX3NldFNoYWRvd1Jvb3RQYXlsb2FkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5ET01Ob2RlLnByb3RvdHlwZS5fcmVudW1iZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRPTUFnZW50LnByb3RvdHlwZS5fYmluZE5vZGVzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01BZ2VudC5wcm90b3R5cGUuX3NoYWRvd1Jvb3RVcGRhdGVkKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5ET01EaXNwYXRjaGVyLnByb3RvdHlwZS5jaGlsZE5vZGVSZW1v
dmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01EaXNwYXRjaGVyLnByb3RvdHlwZS5zaGFk
b3dSb290VXBkYXRlZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Bh
bmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlLnVw
ZGF0ZUJyZWFkY3J1bWIpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5f
dXBkYXRlQ2hpbGRyZW4udXBkYXRlQ2hpbGRyZW5PZk5vZGUpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl91cGRhdGVDaGlsZHJlbik6CisgICAg
ICAgICgpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAg
ICAgICAgKC5vdXRsaW5lLWRpc2Nsb3N1cmUgbGkgLndlYmtpdC1odG1sLXRhZy5zaGFkb3cpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdXRpbGl0aWVzLmpzOgorCiAyMDExLTEyLTE2
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUG9zdHBvbmUgZGVsZXRl
UmVuZGVyYnVmZmVyL2RlbGV0ZVRleHR1cmUgdW50aWwgYWxsIGZyYW1lYnVmZmVyIGF0dGFjaG1l
bnQgcG9pbnRzIGFyZSByZW1vdmVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDI3ZjM0Njku
LjA0OThhODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTExOTksNiArMTE5OSw3IEBAIHZv
aWQgRWxlbWVudDo6c2V0U2hhZG93Um9vdChQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHBycFNoYWRv
d1Jvb3QsIEV4Y2VwdGlvbkNvZGUmCiAgICAgcmVtb3ZlU2hhZG93Um9vdCgpOwogCiAgICAgZW5z
dXJlUmFyZURhdGEoKS0+bV9zaGFkb3dSb290ID0gc2hhZG93Um9vdC5nZXQoKTsKKyAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxJbnNlcnRET01Ob2RlKGRvY3VtZW50KCksIHNoYWRv
d1Jvb3QuZ2V0KCksIHRoaXMpOwogICAgIHNoYWRvd1Jvb3QtPnNldFNoYWRvd0hvc3QodGhpcyk7
CiAgICAgaWYgKGluRG9jdW1lbnQoKSkKICAgICAgICAgc2hhZG93Um9vdC0+aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKQEAgLTEyMDcsNiArMTIwOCw4IEBAIHZvaWQgRWxlbWVudDo6c2V0U2hhZG93
Um9vdChQYXNzUmVmUHRyPFNoYWRvd1Jvb3Q+IHBycFNoYWRvd1Jvb3QsIEV4Y2VwdGlvbkNvZGUm
CiAgICAgICAgIGZvciAoTm9kZSogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgY2hpbGQtPmRldGFjaCgpOwogICAg
IH0KKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEluc2VydERPTU5vZGUoZG9jdW1l
bnQoKSwgc2hhZG93Um9vdC5nZXQoKSk7CisgCiB9CiAKIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OmVu
c3VyZVNoYWRvd1Jvb3QoKQpAQCAtMTIyNyw2ICsxMjMwLDcgQEAgdm9pZCBFbGVtZW50OjpyZW1v
dmVTaGFkb3dSb290KCkKIAogICAgIEVsZW1lbnRSYXJlRGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7
CiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiBvbGRSb290ID0gZGF0YS0+bV9zaGFkb3dSb290
KSB7CisgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbFJlbW92ZURPTU5vZGUo
ZG9jdW1lbnQoKSwgb2xkUm9vdC5nZXQoKSk7CiAgICAgICAgIGRhdGEtPm1fc2hhZG93Um9vdCA9
IDA7CiAgICAgICAgIGRvY3VtZW50KCktPnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKG9sZFJv
b3QuZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcAppbmRleCBiZjA4ZjNjLi5lZGQ5MTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJTdHlsZVNoZWV0TGlzdC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJY
UGF0aFJlc3VsdC5oIgpAQCAtMzY5LDcgKzM3MCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldERvY3VtZW50KEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJvb3Qp
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5v
ZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFu
b2RlIHx8IChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9ERSAmJiBub2RlLT5u
b2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBO
b2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSkKKyAgICBpZiAoIW5vZGUgfHwgKG5vZGUtPm5v
ZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX0ZS
QUdNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpTSEFET1dfUk9PVF9OT0RF
KSkKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5z
KG5vZGVJZCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNDMsNiArMTE0NCw3IEBAIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2Rl
KE5vZGUqIG5vZGUsIGluCiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAgICAgICAg
bG9jYWxOYW1lID0gbm9kZS0+bG9jYWxOYW1lKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Tm9kZTo6U0hBRE9XX1JPT1RfTk9ERToKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5U
X05PREU6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfTk9ERToKQEAg
LTExNjAsNyArMTE2Miw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGluCiAgICAgICAgIC5zZXRM
b2NhbE5hbWUobG9jYWxOYW1lKQogICAgICAgICAuc2V0Tm9kZVZhbHVlKG5vZGVWYWx1ZSk7CiAK
LSAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgfHwgbm9kZS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9OT0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0g
Tm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERSkgeworICAgIGlmIChub2RlLT5ub2RlVHlwZSgp
ID09IE5vZGU6OkVMRU1FTlRfTk9ERSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VN
RU5UX05PREUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9O
T0RFIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6U0hBRE9XX1JPT1RfTk9ERSkgewogICAg
ICAgICBpbnQgbm9kZUNvdW50ID0gaW5uZXJDaGlsZE5vZGVDb3VudChub2RlKTsKICAgICAgICAg
dmFsdWUtPnNldENoaWxkTm9kZUNvdW50KG5vZGVDb3VudCk7CiAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9k
ZSwgZGVwdGgsIG5vZGVzTWFwKTsKQEAgLTExNzQsNiArMTE3Niw4IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUq
IG5vZGUsIGluCiAgICAgICAgICAgICAgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93
bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAgICAg
ICAgICAgICAgdmFsdWUtPnNldERvY3VtZW50VVJMKGRvY3VtZW50VVJMU3RyaW5nKGZyYW1lT3du
ZXItPmNvbnRlbnREb2N1bWVudCgpKSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
U2hhZG93Um9vdCogc2hhZG93Um9vdCA9IGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSkKKyAgICAgICAg
ICAgICAgICB2YWx1ZS0+c2V0T2JqZWN0KCJzaGFkb3dSb290IiwgYnVpbGRPYmplY3RGb3JOb2Rl
KHNoYWRvd1Jvb3QsIGRlcHRoLCBub2Rlc01hcCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewogICAgICAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKTsKICAgICAgICAgICAg
IHZhbHVlLT5zZXREb2N1bWVudFVSTChkb2N1bWVudFVSTFN0cmluZyhkb2N1bWVudCkpOwpAQCAt
MTM0OCwxMiArMTM1MiwxNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01O
b2RlKE5vZGUqIG5vZGUpCiAgICAgLy8gV2UgY291bGQgYmUgYXR0YWNoaW5nIGV4aXN0aW5nIHN1
YnRyZWUuIEZvcmdldCB0aGUgYmluZGluZ3MuCiAgICAgdW5iaW5kKG5vZGUsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOwogCi0gICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50
Tm9kZSgpOworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPmlzU2hhZG93Um9vdCgp
ID8gbm9kZS0+c2hhZG93SG9zdCgpIDogbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGludCBwYXJl
bnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBSZXR1cm4g
aWYgcGFyZW50IGlzIG5vdCBtYXBwZWQgeWV0LgogICAgIGlmICghcGFyZW50SWQpCiAgICAgICAg
IHJldHVybjsKIAorICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCAm
bV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICAgICAgbV9mcm9udGVuZC0+c2hhZG93Um9vdFVw
ZGF0ZWQocGFyZW50SWQsIHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAgICAgaWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAg
ICAgICAvLyBObyBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFu
Z2VzIG9mIGhhc0NoaWxkcmVuLgogICAgICAgICBtX2Zyb250ZW5kLT5jaGlsZE5vZGVDb3VudFVw
ZGF0ZWQocGFyZW50SWQsIGlubmVyQ2hpbGROb2RlQ291bnQocGFyZW50KSk7CkBAIC0xMzcxLDcg
KzEzODAsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUq
IG5vZGUpCiAgICAgaWYgKGlzV2hpdGVzcGFjZShub2RlKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIENvbnRh
aW5lck5vZGUqIHBhcmVudCA9IG5vZGUtPmlzU2hhZG93Um9vdCgpID8gbm9kZS0+c2hhZG93SG9z
dCgpIDogbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBJZiBwYXJlbnQgaXMgbm90IG1hcHBlZCB5
ZXQgLT4gaWdub3JlIHRoZSBldmVudC4KICAgICBpZiAoIXBhcmVudElkKQpAQCAtMTM4MCw3ICsx
Mzg5LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBu
b2RlKQogICAgIGlmIChtX2RvbUxpc3RlbmVyKQogICAgICAgICBtX2RvbUxpc3RlbmVyLT5kaWRS
ZW1vdmVET01Ob2RlKG5vZGUpOwogCi0gICAgaWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRh
aW5zKHBhcmVudElkKSkgeworICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAg
bV9mcm9udGVuZC0+c2hhZG93Um9vdFVwZGF0ZWQocGFyZW50SWQsIDApOworICAgIGVsc2UgaWYg
KCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAgICAgICAvLyBO
byBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFuZ2VzIG9mIGhh
c0NoaWxkcmVuLgogICAgICAgICBpZiAoaW5uZXJDaGlsZE5vZGVDb3VudChwYXJlbnQpID09IDEp
CiAgICAgICAgICAgICBtX2Zyb250ZW5kLT5jaGlsZE5vZGVDb3VudFVwZGF0ZWQocGFyZW50SWQs
IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01B
Z2VudC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMK
aW5kZXggOGUyMzNjYy4uOThjOGVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC03Miw2ICs3Miw4IEBAIFdlYkluc3BlY3Rvci5ET01O
b2RlID0gZnVuY3Rpb24oZG9jLCBwYXlsb2FkKSB7CiAgICAgICAgICAgICB0aGlzLm93bmVyRG9j
dW1lbnQuYm9keSA9IHRoaXM7CiAgICAgICAgIGlmIChwYXlsb2FkLmRvY3VtZW50VVJMKQogICAg
ICAgICAgICAgdGhpcy5kb2N1bWVudFVSTCA9IHBheWxvYWQuZG9jdW1lbnRVUkw7CisgICAgICAg
IGlmIChwYXlsb2FkLnNoYWRvd1Jvb3QpCisgICAgICAgICAgICB0aGlzLl9zZXRTaGFkb3dSb290
UGF5bG9hZChwYXlsb2FkLnNoYWRvd1Jvb3QpOwogICAgIH0gZWxzZSBpZiAodGhpcy5fbm9kZVR5
cGUgPT09IE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFKSB7CiAgICAgICAgIHRoaXMucHVibGljSWQg
PSBwYXlsb2FkLnB1YmxpY0lkOwogICAgICAgICB0aGlzLnN5c3RlbUlkID0gcGF5bG9hZC5zeXN0
ZW1JZDsKQEAgLTExMSw2ICsxMTMsMTQgQEAgV2ViSW5zcGVjdG9yLkRPTU5vZGUucHJvdG90eXBl
ID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAq
LworICAgIGluU2hhZG93VHJlZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2luU2hhZG93VHJlZTsKKyAgICB9LCAKKworICAgIC8qKgogICAgICAqIEByZXR1cm4ge3N0
cmluZ30KICAgICAgKi8KICAgICBub2RlTmFtZTogZnVuY3Rpb24oKQpAQCAtNDA4LDYgKzQxOCwy
MCBAQCBXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3Jl
bnVtYmVyKCk7CiAgICAgfSwKIAorICAgIC8qKgorICAgICAqIEBwYXJhbSB7RE9NQWdlbnQuTm9k
ZX0gcGF5bG9hZAorICAgICAqLworICAgIF9zZXRTaGFkb3dSb290UGF5bG9hZDogZnVuY3Rpb24o
cGF5bG9hZCkKKyAgICB7CisgICAgICAgIGlmICghcGF5bG9hZCkgeworICAgICAgICAgICAgdGhp
cy5zaGFkb3dSb290ID0gbnVsbDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLnNoYWRvd1Jvb3QgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTU5vZGUodGhpcy5vd25l
ckRvY3VtZW50LCBwYXlsb2FkKTsKKyAgICAgICAgdGhpcy5zaGFkb3dSb290LnBhcmVudE5vZGUg
PSB0aGlzOworICAgICAgICB0aGlzLnNoYWRvd1Jvb3QuX2luU2hhZG93VHJlZSA9IHRydWU7Cisg
ICAgfSwKKwogICAgIF9yZW51bWJlcjogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5f
Y2hpbGROb2RlQ291bnQgPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDsKQEAgLTQyNCw2ICs0NDgsNyBA
QCBXZWJJbnNwZWN0b3IuRE9NTm9kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjaGlsZC5u
ZXh0U2libGluZyA9IGkgKyAxIDwgdGhpcy5fY2hpbGROb2RlQ291bnQgPyB0aGlzLmNoaWxkcmVu
W2kgKyAxXSA6IG51bGw7CiAgICAgICAgICAgICBjaGlsZC5wcmV2U2libGluZyA9IGkgLSAxID49
IDAgPyB0aGlzLmNoaWxkcmVuW2kgLSAxXSA6IG51bGw7CiAgICAgICAgICAgICBjaGlsZC5wYXJl
bnROb2RlID0gdGhpczsKKyAgICAgICAgICAgIGNoaWxkLl9pblNoYWRvd1RyZWUgPSB0aGlzLl9p
blNoYWRvd1RyZWU7CiAgICAgICAgIH0KICAgICB9LAogCkBAIC01MzksNiArNTY0LDcgQEAgV2Vi
SW5zcGVjdG9yLkRPTUFnZW50LkV2ZW50cyA9IHsKICAgICBOb2RlUmVtb3ZlZDogIk5vZGVSZW1v
dmVkIiwKICAgICBEb2N1bWVudFVwZGF0ZWQ6ICJEb2N1bWVudFVwZGF0ZWQiLAogICAgIENoaWxk
Tm9kZUNvdW50VXBkYXRlZDogIkNoaWxkTm9kZUNvdW50VXBkYXRlZCIsCisgICAgU2hhZG93Um9v
dFVwZGF0ZWQ6ICJTaGFkb3dSb290VXBkYXRlZCIsCiAgICAgSW5zcGVjdEVsZW1lbnRSZXF1ZXN0
ZWQ6ICJJbnNwZWN0RWxlbWVudFJlcXVlc3RlZCIsCiAgICAgU3R5bGVJbnZhbGlkYXRlZDogIlN0
eWxlSW52YWxpZGF0ZWQiCiB9CkBAIC03NzcsNiArODAzLDggQEAgV2ViSW5zcGVjdG9yLkRPTUFn
ZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5s
ZW5ndGg7ICsraSkgewogICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07CiAgICAg
ICAgICAgICB0aGlzLl9pZFRvRE9NTm9kZVtjaGlsZC5pZF0gPSBjaGlsZDsKKyAgICAgICAgICAg
IGlmIChjaGlsZC5zaGFkb3dSb290KQorICAgICAgICAgICAgICAgIHRoaXMuX2lkVG9ET01Ob2Rl
W2NoaWxkLnNoYWRvd1Jvb3QuaWRdID0gY2hpbGQuc2hhZG93Um9vdDsKICAgICAgICAgICAgIGlm
IChjaGlsZC5jaGlsZHJlbikKICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTm9kZXMoY2hpbGQu
Y2hpbGRyZW4pOwogICAgICAgICB9CkBAIC05MDcsNiArOTM1LDE3IEBAIFdlYkluc3BlY3Rvci5E
T01BZ2VudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIERPTUFnZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
bm9kZUlkLCBzZWxlY3RvcnMsIHRoaXMuX3dyYXBDbGllbnRDYWxsYmFjayhjYWxsYmFjaykpOwog
ICAgIH0sCiAKKyAgICBfc2hhZG93Um9vdFVwZGF0ZWQ6IGZ1bmN0aW9uKGhvc3RJZCwgcGF5bG9h
ZCkKKyAgICB7CisgICAgICAgIHZhciBob3N0ID0gdGhpcy5faWRUb0RPTU5vZGVbaG9zdElkXTsK
KyAgICAgICAgaWYgKGhvc3Quc2hhZG93Um9vdCAmJiAhcGF5bG9hZCkKKyAgICAgICAgICAgIGRl
bGV0ZSB0aGlzLl9pZFRvRE9NTm9kZVtob3N0LnNoYWRvd1Jvb3QuaWRdOworICAgICAgICBob3N0
Ll9zZXRTaGFkb3dSb290UGF5bG9hZChwYXlsb2FkKTsKKyAgICAgICAgaWYgKGhvc3Quc2hhZG93
Um9vdCkKKyAgICAgICAgICAgIHRoaXMuX2lkVG9ET01Ob2RlW2hvc3Quc2hhZG93Um9vdC5pZF0g
PSBob3N0LnNoYWRvd1Jvb3Q7CisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuU2hhZG93Um9vdFVwZGF0ZWQsIGhvc3QpOwor
ICAgIH0sCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gez9udW1iZXJ9IG5vZGVJZAogICAgICAq
IEBwYXJhbSB7c3RyaW5nPX0gbW9kZQpAQCAtMTA2MCw2ICsxMDk5LDExIEBAIFdlYkluc3BlY3Rv
ci5ET01EaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKICAgICBjaGlsZE5vZGVSZW1vdmVkOiBmdW5j
dGlvbihwYXJlbnROb2RlSWQsIG5vZGVJZCkKICAgICB7CiAgICAgICAgIHRoaXMuX2RvbUFnZW50
Ll9jaGlsZE5vZGVSZW1vdmVkKHBhcmVudE5vZGVJZCwgbm9kZUlkKTsKKyAgICB9LAorCisgICAg
c2hhZG93Um9vdFVwZGF0ZWQ6IGZ1bmN0aW9uKGhvc3RJZCwgc2hhZG93Um9vdCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2RvbUFnZW50Ll9zaGFkb3dSb290VXBkYXRlZChob3N0SWQsIHNoYWRvd1Jv
b3QpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FbGVtZW50c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IGUyNmEyZmUuLmVlMDU4MzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzUGFuZWwuanMKQEAg
LTU1OSw2ICs1NTksMTAgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzUGFuZWwucHJvdG90eXBlID0g
ewogICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gIjwhRE9DVFlQRT4iOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5TSEFET1df
Uk9PVF9OT0RFOgorICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gIihzaGFkb3cpIjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgICAgICBjcnVtYlRpdGxlID0gY3VycmVudC5ub2RlTmFtZUluQ29ycmVj
dENhc2UoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCA5ZmM3NjBiLi40
NDA5YjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzVHJlZU91dGxpbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCkBAIC01MDYsNyArNTA2LDcgQEAgV2ViSW5zcGVj
dG9yLkVsZW1lbnRzVHJlZU91dGxpbmUucHJvdG90eXBlLl9fcHJvdG9fXyA9IFRyZWVPdXRsaW5l
LnByb3RvdHlwZTsKIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50ID0gZnVuY3Rpb24o
bm9kZSwgZWxlbWVudENsb3NlVGFnKQogewogICAgIHRoaXMuX2VsZW1lbnRDbG9zZVRhZyA9IGVs
ZW1lbnRDbG9zZVRhZzsKLSAgICB2YXIgaGFzQ2hpbGRyZW5PdmVycmlkZSA9ICFlbGVtZW50Q2xv
c2VUYWcgJiYgbm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIXRoaXMuX3Nob3dJbmxpbmVUZXh0KG5v
ZGUpOworICAgIHZhciBoYXNDaGlsZHJlbk92ZXJyaWRlID0gIWVsZW1lbnRDbG9zZVRhZyAmJiAo
bm9kZS5oYXNDaGlsZE5vZGVzKCkgfHwgbm9kZS5zaGFkb3dSb290KSAmJiAhdGhpcy5fc2hvd0lu
bGluZVRleHQobm9kZSk7CiAKICAgICAvLyBUaGUgdGl0bGUgd2lsbCBiZSB1cGRhdGVkIGluIG9u
YXR0YWNoLgogICAgIFRyZWVFbGVtZW50LmNhbGwodGhpcywgIiIsIG5vZGUsIGhhc0NoaWxkcmVu
T3ZlcnJpZGUpOwpAQCAtODI5LDYgKzgyOSwxNSBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVl
RWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC5uZXh0
U2libGluZzsKICAgICAgICAgICAgICAgICArK3RyZWVDaGlsZEluZGV4OwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gSWYgd2UgZXZlciBoYWQgc2hhZG93IHJvb3QgY2hpbGQsIGl0J3Mg
Z29pbmcgdG8gYmUgc2Vjb25kIHRvIGxhc3QgKGJlZm9yZSBjbG9zaW5nIHRhZykKKyAgICAgICAg
ICAgIHZhciBzaGFkb3dSb290Q2hpbGQgPSB0cmVlRWxlbWVudC5jaGlsZHJlblt0cmVlRWxlbWVu
dC5jaGlsZHJlbi5sZW5ndGggLSAyXTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dSb290Q2hpbGQg
JiYgc2hhZG93Um9vdENoaWxkLnJlcHJlc2VudGVkT2JqZWN0Lm5vZGVUeXBlKCkgPT09IE5vZGUu
U0hBRE9XX1JPT1RfTk9ERSkgeworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaGFkb3dSb290
KQorICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5yZW1vdmVDaGlsZChzaGFkb3dSb290
Q2hpbGQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHJlZUVs
ZW1lbnQucmVwcmVzZW50ZWRPYmplY3QgPSBub2RlLnNoYWRvd1Jvb3Q7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKG5vZGUuc2hhZG93Um9vdCkKKyAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5p
bnNlcnRDaGlsZEVsZW1lbnQobm9kZS5zaGFkb3dSb290LCB0cmVlQ2hpbGRJbmRleCk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBSZW1vdmUgYW55IHRyZWUgZWxlbWVudHMgdGhhdCBubyBsb25n
ZXIgaGF2ZSB0aGlzIG5vZGUgKG9yIHRoaXMgbm9kZSdzIGNvbnRlbnREb2N1bWVudCkgYXMgdGhl
aXIgcGFyZW50LgpAQCAtMTQ5MCwxMiArMTQ5OSwxNCBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNU
cmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtmdW5jdGlv
bihzdHJpbmcsIHN0cmluZywgc3RyaW5nLCBib29sZWFuPSwgc3RyaW5nPSk9fSBsaW5raWZ5CiAg
ICAgICovCi0gICAgX2J1aWxkVGFnRE9NOiBmdW5jdGlvbihwYXJlbnRFbGVtZW50LCB0YWdOYW1l
LCBpc0Nsb3NpbmdUYWcsIGlzRGlzdGluY3RUcmVlRWxlbWVudCwgbGlua2lmeSkKKyAgICBfYnVp
bGRUYWdET006IGZ1bmN0aW9uKHBhcmVudEVsZW1lbnQsIHRhZ05hbWUsIGlzQ2xvc2luZ1RhZywg
aXNEaXN0aW5jdFRyZWVFbGVtZW50LCBsaW5raWZ5LCBpc1NoYWRvdykKICAgICB7CiAgICAgICAg
IHZhciBub2RlID0gLyoqIEB0eXBlIFdlYkluc3BlY3Rvci5ET01Ob2RlICovIHRoaXMucmVwcmVz
ZW50ZWRPYmplY3Q7CiAgICAgICAgIHZhciBjbGFzc2VzID0gWyAid2Via2l0LWh0bWwtdGFnIiBd
OwogICAgICAgICBpZiAoaXNDbG9zaW5nVGFnICYmIGlzRGlzdGluY3RUcmVlRWxlbWVudCkKICAg
ICAgICAgICAgIGNsYXNzZXMucHVzaCgiY2xvc2UiKTsKKyAgICAgICAgaWYgKGlzU2hhZG93KQor
ICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCJzaGFkb3ciKTsKICAgICAgICAgdmFyIHRhZ0VsZW1l
bnQgPSBwYXJlbnRFbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgY2xhc3Nlcy5qb2luKCIgIikp
OwogICAgICAgICB0YWdFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCI8IikpOwogICAgICAgICB2YXIgdGFnTmFtZUVsZW1lbnQgPSB0YWdFbGVtZW50LmNyZWF0ZUNo
aWxkKCJzcGFuIiwgaXNDbG9zaW5nVGFnID8gIiIgOiAid2Via2l0LWh0bWwtdGFnLW5hbWUiKTsK
QEAgLTE1MzQsMTIgKzE1NDUsMTIgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKICAgICAg
ICAgICAgICAgICB2YXIgdGFnTmFtZSA9IG5vZGUubm9kZU5hbWVJbkNvcnJlY3RDYXNlKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRDbG9zZVRhZykgewotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9idWlsZFRhZ0RPTShpbmZvLnRpdGxlRE9NLCB0YWdOYW1lLCB0cnVlLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRUYWdET00oaW5mby50aXRsZURP
TSwgdGFnTmFtZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIG5vZGUuaW5TaGFkb3dUcmVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpbmZvLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRoaXMu
X2J1aWxkVGFnRE9NKGluZm8udGl0bGVET00sIHRhZ05hbWUsIGZhbHNlLCBmYWxzZSwgbGlua2lm
eSk7CisgICAgICAgICAgICAgICAgdGhpcy5fYnVpbGRUYWdET00oaW5mby50aXRsZURPTSwgdGFn
TmFtZSwgZmFsc2UsIGZhbHNlLCBsaW5raWZ5LCBub2RlLmluU2hhZG93VHJlZSgpKTsKIAogICAg
ICAgICAgICAgICAgIHZhciB0ZXh0Q2hpbGQgPSB0aGlzLl9zaW5nbGVUZXh0Q2hpbGQobm9kZSk7
CiAgICAgICAgICAgICAgICAgdmFyIHNob3dJbmxpbmVUZXh0ID0gdGV4dENoaWxkICYmIHRleHRD
aGlsZC5ub2RlVmFsdWUoKS5sZW5ndGggPCBQcmVmZXJlbmNlcy5tYXhJbmxpbmVUZXh0Q2hpbGRM
ZW5ndGg7CkBAIC0xNTUwLDcgKzE1NjEsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Tm9kZUVsZW1l
bnQudGV4dENvbnRlbnQgPSAiXHUyMDI2IjsKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u
dGl0bGVET00uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjAwQiIpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0aGlzLl9idWlsZFRh
Z0RPTShpbmZvLnRpdGxlRE9NLCB0YWdOYW1lLCB0cnVlLCBmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX2J1aWxkVGFnRE9NKGluZm8udGl0bGVET00sIHRhZ05hbWUsIHRydWUsIGZh
bHNlLCBmYWxzZSwgbm9kZS5pblNoYWRvd1RyZWUoKSk7CiAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IG9ubHkgaGFzIGEgc2luZ2xlIGNoaWxk
IHRoYXQgaXMgYSB0ZXh0IG5vZGUsCkBAIC0xNjExLDYgKzE2MjIsMTIgQEAgV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHZhciBj
ZGF0YUVsZW1lbnQgPSBpbmZvLnRpdGxlRE9NLmNyZWF0ZUNoaWxkKCJzcGFuIiwgIndlYmtpdC1o
dG1sLXRleHQtbm9kZSIpOwogICAgICAgICAgICAgICAgIGNkYXRhRWxlbWVudC5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiPCFbQ0RBVEFbIiArIG5vZGUubm9kZVZhbHVlKCkg
KyAiXV0+IikpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE5v
ZGUuU0hBRE9XX1JPT1RfTk9ERToKKyAgICAgICAgICAgICAgICB2YXIgY2RhdGFFbGVtZW50ID0g
aW5mby50aXRsZURPTS5jcmVhdGVDaGlsZCgic3BhbiIsICJkb20tc2hhZG93LXJvb3QiKTsKKyAg
ICAgICAgICAgICAgICBjZGF0YUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIihzaGFkb3cpIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0RWxlbWVudCA9IGluZm8udGl0
bGVET00uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZS5ub2RlTmFtZUlu
Q29ycmVjdENhc2UoKS5jb2xsYXBzZVdoaXRlc3BhY2UoKSkpOwogICAgICAgICB9CkBAIC0xNjIw
LDcgKzE2MzcsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7CiAKICAgICBfc2luZ2xlVGV4dENoaWxkOiBmdW5jdGlvbihub2RlKQogICAgIHsKLSAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICBpZiAoIW5vZGUgfHwgbm9kZS5zaGFkb3dSb290KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGw7CiAKICAgICAgICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZp
cnN0Q2hpbGQ7CkBAIC0xNzM5LDYgKzE3NTYsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVl
VXBkYXRlciA9IGZ1bmN0aW9uKHRyZWVPdXRsaW5lKQogICAgIFdlYkluc3BlY3Rvci5kb21BZ2Vu
dC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuQ2hhcmFjdGVy
RGF0YU1vZGlmaWVkLCB0aGlzLl9jaGFyYWN0ZXJEYXRhTW9kaWZpZWQsIHRoaXMpOwogICAgIFdl
Ykluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5ET01BZ2Vu
dC5FdmVudHMuRG9jdW1lbnRVcGRhdGVkLCB0aGlzLl9kb2N1bWVudFVwZGF0ZWQsIHRoaXMpOwog
ICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
T01BZ2VudC5FdmVudHMuQ2hpbGROb2RlQ291bnRVcGRhdGVkLCB0aGlzLl9jaGlsZE5vZGVDb3Vu
dFVwZGF0ZWQsIHRoaXMpOworICAgIFdlYkluc3BlY3Rvci5kb21BZ2VudC5hZGRFdmVudExpc3Rl
bmVyKFdlYkluc3BlY3Rvci5ET01BZ2VudC5FdmVudHMuU2hhZG93Um9vdFVwZGF0ZWQsIHRoaXMu
X25vZGVVcGRhdGVkLmJpbmQodGhpcywgdHJ1ZSkpOwogCiAgICAgdGhpcy5fdHJlZU91dGxpbmUg
PSB0cmVlT3V0bGluZTsKICAgICB0aGlzLl9yZWNlbnRseU1vZGlmaWVkTm9kZXMgPSBbXTsKQEAg
LTE3ODUsNiArMTgwMywxNiBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlVXBkYXRlci5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLl91cGRhdGVNb2RpZmllZE5vZGVzU29vbigpOwog
ICAgIH0sCiAKKyAgICBfbm9kZVVwZGF0ZWQ6IGZ1bmN0aW9uKGhpZXJhcmNoeVVwZGF0ZWQsIGV2
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHVwZGF0ZWROb2RlRGV0YWlscyA9IHsgbm9kZTogZXZl
bnQuZGF0YSB9OworICAgICAgICBpZiAoaGllcmFyY2h5VXBkYXRlZCkKKyAgICAgICAgICAgIHVw
ZGF0ZWROb2RlRGV0YWlscy5wYXJlbnQgPSBldmVudC5kYXRhLnBhcmVudE5vZGU7CisgICAgICAg
IHRoaXMucmVjZW50bHlNb2RpZmllZE5vZGVzLnB1c2godXBkYXRlZE5vZGVEZXRhaWxzKTsKKyAg
ICAgICAgaWYgKHRoaXMuX3RyZWVPdXRsaW5lLl92aXNpYmxlKQorICAgICAgICAgICAgdGhpcy5f
dXBkYXRlTW9kaWZlaWROb2Rlc1Nvb24oKTsKKyAgICB9LAorCiAgICAgX2NoaWxkTm9kZUNvdW50
VXBkYXRlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgdHJlZUVsZW1lbnQg
PSB0aGlzLl90cmVlT3V0bGluZS5maW5kVHJlZUVsZW1lbnQoZXZlbnQuZGF0YSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKaW5kZXggNGM1
NGQ4Yy4uZGFjZmY0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuY3NzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmNzcwpAQCAtMTA1OCw2ICsxMDU4LDEwIEBAIGlmcmFtZS5wYW5lbC5leHRl
bnNpb24gewogICAgIG1hcmdpbi1sZWZ0OiAtMTJweAogfQogCisub3V0bGluZS1kaXNjbG9zdXJl
IGxpIC53ZWJraXQtaHRtbC10YWcuc2hhZG93IHsKKyBvcGFjaXR5OiAwLjc7Cit9CisKIC5vdXRs
aW5lLWRpc2Nsb3N1cmUgbGkgLndlYmtpdC1odG1sLXRhZy5jbG9zZSB7CiAgICAgbWFyZ2luLWxl
ZnQ6IC0xMnB4OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC91dGlsaXRpZXMuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0
aWxpdGllcy5qcwppbmRleCA3Mzk0YjI4Li5iYTc1YWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3V0aWxpdGllcy5qcwpAQCAtMjMxLDYgKzIzMSw4IEBAIE5v
ZGUucHJvdG90eXBlLmVuY2xvc2luZ05vZGVXaXRoQ2xhc3MgPSBmdW5jdGlvbihjbGFzc05hbWUp
CiAgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENsYXNz
KGNsYXNzTmFtZSk7CiB9CiAKK05vZGUuU0hBRE9XX1JPT1RfTk9ERSA9IDE0OworCiBFbGVtZW50
LnByb3RvdHlwZS5xdWVyeSA9IGZ1bmN0aW9uKHF1ZXJ5KQogewogICAgIHJldHVybiB0aGlzLm93
bmVyRG9jdW1lbnQuZXZhbHVhdGUocXVlcnksIHRoaXMsIG51bGwsIFhQYXRoUmVzdWx0LkZJUlNU
X09SREVSRURfTk9ERV9UWVBFLCBudWxsKS5zaW5nbGVOb2RlVmFsdWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>