<?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>40733</bug_id>
          
          <creation_ts>2010-06-16 13:47:58 -0700</creation_ts>
          <short_desc>Web Inspector: move InjectedScript&apos;s get/setOuterHTML, addInspectedNode and clearConsole to natives.</short_desc>
          <delta_ts>2010-06-17 13:01:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>239057</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-16 13:47:58 -0700</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239075</commentid>
    <comment_count>1</comment_count>
      <attachid>58928</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-16 14:03:28 -0700</bug_when>
    <thetext>Created attachment 58928
[PATCH] Proposed change.

I am currently manually testing the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239077</commentid>
    <comment_count>2</comment_count>
      <attachid>58929</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-16 14:05:43 -0700</bug_when>
    <thetext>Created attachment 58929
[PATCH] Same + IDL cleanup. Sorry for noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239129</commentid>
    <comment_count>3</comment_count>
      <attachid>58929</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-16 15:57:26 -0700</bug_when>
    <thetext>Comment on attachment 58929
[PATCH] Same + IDL cleanup. Sorry for noise.

Some nice generic cleanup along the way, excellent!


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog

Could use a description about why this is desired. In the
past this was desired so information in &lt;iframe&gt;s could
be accessed easier. Is that the same case here?


&gt; diff --git a/WebCore/inspector/InspectorDOMAgent.cpp b/WebCore/inspector/InspectorDOMAgent.cpp
&gt; -void InspectorDOMAgent::changeTagName(long callId, long nodeId, const AtomicString&amp; tagName, bool expanded)
&gt; +void InspectorDOMAgent::changeTagName(long callId, long nodeId, const String&amp; tagName)
&gt;  {
&gt;      Node* oldNode = nodeForId(nodeId);
&gt;      if (!oldNode || !oldNode-&gt;isElementNode()) {
&gt;          // Use -1 to denote an error condition.
&gt; -        m_frontend-&gt;didChangeTagName(callId, -1);
&gt; +        m_frontend-&gt;didChangeTagName(callId, 0);
&gt;          return;
&gt;      }
&gt;  
&gt; +    bool childrenRequested = m_childrenRequested.contains(nodeId);

Good changes to this function (thanks for cleaning up after me)!

Does removing `expanded`, and switching to `m_childrenRequested`
handle cases where it was expanded previously but was collapsed
when edited. The scenario I&apos;m thinking of:

  HTML:
  &lt;div&gt;
    &lt;p&gt;Hello World&lt;/p&gt;
  &lt;/div&gt;

  User Actions:
    - expand the &lt;div&gt; (m_childrenRequested gets populated)
    - collapse the &lt;div&gt; (does m_childrenRequested get altered?)
    - user edits &lt;div&gt; tagname to be &lt;section&gt;
    - is &lt;section&gt; collapsed or expanded? I would expect collapsed.

Also, please remove the now defunct comment:

  // Use -1 to denote an error condition.


&gt; +        Vector&lt;long&gt; m_inspectedNodes;

Is there a way to optimize this to be of a particular length?
We know there should only ever be 5 we want to keep, and 1
that should be deleted soon after. In the constructor, can
we limit this to a size of 6 or so. That way it doesn&apos;t take
up any more space than necessary?


&gt; +++ b/WebCore/inspector/front-end/InjectedScript.js
&gt; @@ -83,7 +83,6 @@ InjectedScript.releaseWrapperObjectGroup = function(objectGroupName) {
&gt;  // Called from within InspectorController on the &apos;inspected page&apos; side.
&gt;  InjectedScript.reset = function()
&gt;  {
&gt; -    InjectedScript._inspectedNodes = [];
&gt;  }
&gt;  
&gt;  InjectedScript.reset();

Again, this is back to empty and can be removed, unless
you have a particular reason to keep it in. You mentioned
before that chromium might have overridden it, but it
turned out it wasn&apos;t overridden.


&gt; InjectedScriptHost.clearConsoleMessages()
&gt; InspectorBackend.clearConsoleMessages()

There are now two, identical functions on both sides. Maybe
there are others. Can you think of a way these can be shared,
so there aren&apos;t multiple implementations / duplicated code?
Thats out of the scope of this patch, but something to keep
in mind.


r=me unless the &quot;expand&quot; scenario I mentioned above doesn&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239249</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-16 23:26:42 -0700</bug_when>
    <thetext>&gt; Some nice generic cleanup along the way, excellent!

Stop appreciating and join the cleanup rush already :)

&gt; 
&gt; Could use a description about why this is desired. In the
&gt; past this was desired so information in &lt;iframe&gt;s could
&gt; be accessed easier. Is that the same case here?
&gt; 

Correct. + more rationale added. Done.

&gt; &gt; +    bool childrenRequested = m_childrenRequested.contains(nodeId);
&gt; 
&gt; Good changes to this function (thanks for cleaning up after me)!
&gt; 
&gt; Does removing `expanded`, and switching to `m_childrenRequested`
&gt; handle cases where it was expanded previously but was collapsed
&gt; when edited. The scenario I&apos;m thinking of:
&gt; 
&gt;   HTML:
&gt;   &lt;div&gt;
&gt;     &lt;p&gt;Hello World&lt;/p&gt;
&gt;   &lt;/div&gt;
&gt; 
&gt;   User Actions:
&gt;     - expand the &lt;div&gt; (m_childrenRequested gets populated)
&gt;     - collapse the &lt;div&gt; (does m_childrenRequested get altered?)
&gt;     - user edits &lt;div&gt; tagname to be &lt;section&gt;
&gt;     - is &lt;section&gt; collapsed or expanded? I would expect collapsed.
&gt; 

wasExpanded flag is still being used in the front-end, so that expand state would be restored. I am using additional information about the fact whether children were sent to the front-end from within DOM agent instead of passing this &apos;view&apos; information in the request to the model. Knowing that children were requested is enough to provide desired behavior.

&gt; Also, please remove the now defunct comment:
&gt; 
&gt;   // Use -1 to denote an error condition.
&gt; 

Done here and in removeNode. Also assigned ExceptionCode code = 0, and renamed all &apos;code&apos; to &apos;ec&apos; for consistency.
&gt; 
&gt; &gt; +        Vector&lt;long&gt; m_inspectedNodes;
&gt; 
&gt; Is there a way to optimize this to be of a particular length?
&gt; We know there should only ever be 5 we want to keep, and 1
&gt; that should be deleted soon after. In the constructor, can
&gt; we limit this to a size of 6 or so. That way it doesn&apos;t take
&gt; up any more space than necessary?
&gt; 

I would not bother. This happens when selecting node manually, i.e. user-initiated UI operation. Shifting an array of 5 is not a big deal.

&gt; 
&gt; &gt; +++ b/WebCore/inspector/front-end/InjectedScript.js
&gt; &gt; @@ -83,7 +83,6 @@ InjectedScript.releaseWrapperObjectGroup = function(objectGroupName) {
&gt; &gt;  // Called from within InspectorController on the &apos;inspected page&apos; side.
&gt; &gt;  InjectedScript.reset = function()
&gt; &gt;  {
&gt; &gt; -    InjectedScript._inspectedNodes = [];
&gt; &gt;  }
&gt; &gt;  
&gt; &gt;  InjectedScript.reset();
&gt; 
&gt; Again, this is back to empty and can be removed, unless
&gt; you have a particular reason to keep it in. You mentioned
&gt; before that chromium might have overridden it, but it
&gt; turned out it wasn&apos;t overridden.
&gt; 

Ok, ok. Done.

&gt; 
&gt; &gt; InjectedScriptHost.clearConsoleMessages()
&gt; &gt; InspectorBackend.clearConsoleMessages()
&gt; 
&gt; There are now two, identical functions on both sides. Maybe
&gt; there are others. Can you think of a way these can be shared,
&gt; so there aren&apos;t multiple implementations / duplicated code?
&gt; Thats out of the scope of this patch, but something to keep
&gt; in mind.
&gt; 

Both are API facades immediately delegating to the same InspectorController&apos;s implementation. We need it to be both: a part of InspectorBackend API and for Console API&apos;s clear command (i.e. on InjectedScriptHost API).

&gt; 
&gt; r=me unless the &quot;expand&quot; scenario I mentioned above doesn&apos;t work.

I&apos;ll manually test prior to landing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239310</commentid>
    <comment_count>5</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-17 02:45:31 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/inspector/InjectedScriptHost.cpp
	M	WebCore/inspector/InjectedScriptHost.h
	M	WebCore/inspector/InjectedScriptHost.idl
	M	WebCore/inspector/InspectorBackend.cpp
	M	WebCore/inspector/InspectorBackend.h
	M	WebCore/inspector/InspectorBackend.idl
	M	WebCore/inspector/InspectorDOMAgent.cpp
	M	WebCore/inspector/InspectorDOMAgent.h
	M	WebCore/inspector/InspectorFrontend.cpp
	M	WebCore/inspector/InspectorFrontend.h
	M	WebCore/inspector/front-end/ConsoleView.js
	M	WebCore/inspector/front-end/DOMAgent.js
	M	WebCore/inspector/front-end/ElementsPanel.js
	M	WebCore/inspector/front-end/ElementsTreeOutline.js
	M	WebCore/inspector/front-end/InjectedScript.js
	M	WebCore/inspector/front-end/InjectedScriptAccess.js
Committed r61317</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239469</commentid>
    <comment_count>6</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-06-17 10:50:37 -0700</bug_when>
    <thetext>&gt; Both are API facades immediately delegating to the same InspectorController&apos;s
&gt; implementation. We need it to be both: a part of InspectorBackend API and for
&gt; Console API&apos;s clear command (i.e. on InjectedScriptHost API).

Yes, we need it in both. But it is still duplicated code, no matter how simple
it is. A possible solution, but lame, would be some shared IDL object, like
InspectorSharedObject which contained the clearConsole. But, like I said,
that is a lame idea. Another idea might be an abstract InspectorShared class
that both InspectorBackend and InjectedScriptHost subclass. But that seems
like unnecessary complication and still both IDLs would have the duplicated method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239538</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-06-17 13:01:26 -0700</bug_when>
    <thetext>&gt; Yes, we need it in both. But it is still duplicated code, no matter how simple
&gt; it is. A possible solution, but lame, would be some shared IDL object, like
&gt; InspectorSharedObject which contained the clearConsole. But, like I said,
&gt; that is a lame idea. Another idea might be an abstract InspectorShared class
&gt; that both InspectorBackend and InjectedScriptHost subclass. But that seems
&gt; like unnecessary complication and still both IDLs would have the duplicated method.

For the sake of the record, the fragment you are considering &apos;duplicated code&apos; is:

&gt;&gt; BEGIN OF DUPLICATED CODE

if (m_inspectorController)
    m_inspectorController-&gt;clearConsoleMessages();

&gt;&gt; END OF DUPLICATED CODE

So you are suggesting organizing hierarchies of IDLs... Or classes. Where one of them defines remote debugging interface and the other serves  as a bridge to the injected javascript code (i.e. they are from different domains)... With InspectorBackend to stop being an actual binding shortly... Joe, I&apos;d say I can live with the duplicated code above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58928</attachid>
            <date>2010-06-16 14:03:28 -0700</date>
            <delta_ts>2010-06-16 14:05:43 -0700</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>move_more</filename>
            <type>text/plain</type>
            <size>24730</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjg0N2M2Ni4uYmRjZGQ2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGdldC9zZXRPdXRlckhUTUws
IGFkZEluc3BlY3RlZE5vZGUgYW5kCisgICAgICAgIGNsZWFyQ29uc29sZSB0byBuYXRpdmUgSW5z
cGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwNzMzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkTm9k
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDo6Z2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OnNldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjph
ZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6Omluc3BlY3RlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmdldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjphZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldE91dGVySFRNTCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0T3V0ZXJIVE1MKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbnNvbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3
LnByb3RvdHlwZS5yZXF1ZXN0Q2xlYXJNZXNzYWdlcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC50aGlzLnRy
ZWVPdXRsaW5lLmZvY3VzZWROb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVP
dXRsaW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJv
dG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5jaGFuZ2VUYWdOYW1lQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdO
YW1lRWRpdGluZ0NvbW1pdHRlZCk6CisgICAgICAgICgpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzOgorCiAyMDEwLTA2LTE2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCmluZGV4IDRjM2M3YWUuLmUzZGE4MTAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtMTIzLDYgKzEyMywxNSBAQCBs
b25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCkKICAgICByZXR1cm4gZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bm9kZSk7CiB9CiAKK2xvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWROb2RlKHVuc2ln
bmVkIG51bSkKK3sKKyAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpOworICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGRvbUFnZW50LT5pbnNwZWN0ZWROb2RlKG51bSk7Cit9CisKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiBEYXRhYmFzZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUZvcklkKGxvbmcg
ZGF0YWJhc2VJZCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXgg
NjZjZjQxZS4uZGY2ZjBiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgK
QEAgLTY4LDggKzY4LDggQEAgcHVibGljOgogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0KTsKICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOwogICAgIGxvbmcgcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlLCBib29sIHdpdGhDaGlsZHJlbiwgYm9vbCBz
ZWxlY3RJblVJKTsKLQogICAgIGxvbmcgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgbG9uZyBpbnNwZWN0ZWROb2RlKHVuc2lnbmVkIG51bSk7CiAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBkYXRh
YmFzZUlkKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggMWVlZGRh
MS4uMDcxNDBjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTM1
OSwxMCArMzU5LDI4IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlTm9kZShsb25nIGNh
bGxJZCwgbG9uZyBub2RlSWQpCiAgICAgICAgIGRvbUFnZW50LT5yZW1vdmVOb2RlKGNhbGxJZCwg
bm9kZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjaGFuZ2VUYWdOYW1lKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIGV4
cGFuZGVkKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElk
LCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewogICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQotICAgICAgICBkb21B
Z2VudC0+Y2hhbmdlVGFnTmFtZShjYWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwor
ICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShjYWxsSWQsIG5vZGVJZCwgdGFnTmFtZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5z
cGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmdldE91dGVySFRNTChjYWxsSWQs
IG5vZGVJZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0T3V0ZXJIVE1MKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCit7CisgICAgaWYg
KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCisgICAg
ICAgIGRvbUFnZW50LT5zZXRPdXRlckhUTUwoY2FsbElkLCBub2RlSWQsIG91dGVySFRNTCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCkK
K3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdl
bnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmFkZEluc3BlY3RlZE5vZGUobm9kZUlkKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpwZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgcXVlcnks
IGJvb2wgcnVuU3luY2hyb25vdXNseSkKQEAgLTM3Nyw2ICszOTUsMTIgQEAgdm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCgpCiAgICAgICAgIGRvbUFnZW50LT5zZWFyY2hDYW5j
ZWxlZCgpOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JP
bmx5KQogewogICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCmluZGV4IDYxZDczYjgu
LmEzOWJhNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKQEAgLTExOSwxMCAr
MTE5LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQpOwog
ICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwotICAgIHZvaWQg
Y2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgYm9vbCBleHBhbmRlZCk7CisgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKTsKKyAgICB2b2lkIGdl
dE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgIHZvaWQgc2V0T3V0ZXJI
VE1MKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpOwor
ICAgIHZvaWQgYWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBwZXJmb3Jt
U2VhcmNoKGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAg
dm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCisgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygp
OworCiAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1
dGhPbmx5KTsKICAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgdm9pZCBn
ZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBjMDA3OGVlLi4xYzc1M2FjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTQsMTAgKzk0LDMwIEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW4gbG9uZyBjYWxsSWQs
IGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShpbiBsb25nIG5vZGVJZCk7
CiAgICAgICAgIHZvaWQgcmVtb3ZlTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQp
OwotICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9k
ZUlkLCBpbiBET01TdHJpbmcgbmV3VGFnTmFtZSwgaW4gYm9vbGVhbiBleHBhbmRlZCk7CisgICAg
ICAgIHZvaWQgY2hhbmdlVGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIGlu
IERPTVN0cmluZyBuZXdUYWdOYW1lKTsKKyAgICAgICAgdm9pZCBnZXRPdXRlckhUTUwoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBzZXRPdXRlckhUTUwoaW4g
bG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBET01TdHJpbmcgb3V0ZXJIVE1MKTsKKyAg
ICAgICAgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9p
ZCBwZXJmb3JtU2VhcmNoKGluIERPTVN0cmluZyBxdWVyeSwgaW4gYm9vbGVhbiBydW5TeW5jaHJv
bm91c2x5KTsKICAgICAgICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCisgICAgICAgIHZvaWQg
Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKKworLyoKKyAgICAgICAgdm9pZCBldmFsdWF0ZShpbiBE
T01TdHJpbmcgZXhwcmVzc2lvbiwgaW4gRE9NU3RyaW5nIG9iamVjdEdyb3VwKTsKKyAgICAgICAg
dm9pZCBldmFsdWF0ZUluQ2FsbEZyYW1lKGluIERPTVN0cmluZyBjYWxsRnJhbWVJZCwgaW4gRE9N
U3RyaW5nIGNvZGUsIGluIERPTVN0cmluZyBvYmplY3RHcm91cCk7CisgICAgICAgIHZvaWQgZ2V0
Q29tcGxldGlvbnMoaW4gRE9NU3RyaW5nIGV4cHJlc3Npb24sIGluIGJvb2xlYW4gaW5jbHVkZUlu
c3BlY3RvckNvbW1hbmRMaW5lQVBJLCBpbiBET01TdHJpbmcgY2FsbEZyYW1lSWQpOworICAgICAg
ICB2b2lkIGdldE5vZGVQcm9wZXJ0eVZhbHVlKGluIGxvbmcgbm9kZUlkLCBpbiBET01TdHJpbmcg
cHJvcGVydHlOYW1lKTsKKworSW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyA9IGZ1bmN0aW9u
KG9iamVjdFByb3h5LCBpZ25vcmVIYXNPd25Qcm9wZXJ0eSwgYWJicmV2aWF0ZSkKK0luamVjdGVk
U2NyaXB0LmdldFByb3RvdHlwZXMgPSBmdW5jdGlvbihub2RlSWQpCitJbmplY3RlZFNjcmlwdC5v
cGVuSW5JbnNwZWN0ZWRXaW5kb3cgPSBmdW5jdGlvbih1cmwpCitJbmplY3RlZFNjcmlwdC5wdXNo
Tm9kZVRvRnJvbnRlbmQgPSBmdW5jdGlvbihvYmplY3RQcm94eSkKK0luamVjdGVkU2NyaXB0Lm5v
ZGVCeVBhdGggPSBmdW5jdGlvbihwYXRoKQorSW5qZWN0ZWRTY3JpcHQuc2V0T3V0ZXJIVE1MID0g
ZnVuY3Rpb24obm9kZUlkLCB2YWx1ZSwgZXhwYW5kZWQpCitJbmplY3RlZFNjcmlwdC5zZXRQcm9w
ZXJ0eVZhbHVlID0gZnVuY3Rpb24ob2JqZWN0UHJveHksIHByb3BlcnR5TmFtZSwgZXhwcmVzc2lv
bikKK0luamVjdGVkU2NyaXB0LmV2YWx1YXRlT25TZWxmID0gZnVuY3Rpb24oZnVuY0JvZHksIGFy
Z3MpCisqLwogICAgICAgICB2b2lkIGhpZ2hsaWdodERPTU5vZGUoaW4gbG9uZyBub2RlSWQpOwog
ICAgICAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiMTUyZGMzLi5jYmVhYjBkIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01Myw5ICs1Myw5IEBACiAjaW5jbHVkZSAi
RXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5o
IgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKLSNpbmNsdWRlICJtYXJrdXAu
aCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCkBAIC0zNTUsMTIgKzM1NSwyMCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpCiAgICAgbV9mcm9udGVu
ZC0+c2V0Q2hpbGROb2Rlcyhub2RlSWQsIGNoaWxkcmVuKTsKIH0KIAorbG9uZyBJbnNwZWN0b3JE
T01BZ2VudDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBudW0pCit7CisgICAgaWYgKG51bSA8IG1f
aW5zcGVjdGVkTm9kZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9pbnNwZWN0ZWROb2Rlc1tu
dW1dOworICAgIHJldHVybiAwOworfQorCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJk
QmluZGluZ3MoKQogewogICAgIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5jbGVhcigpOwogICAgIG1f
aWRUb05vZGUuY2xlYXIoKTsKICAgICByZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogICAgIG1fY2hp
bGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKKyAgICBtX2luc3BlY3RlZE5vZGVzLmNsZWFyKCk7CiB9
CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQobG9uZyBpZCkKQEAgLTUwMiwx
OSArNTEwLDIxIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUobG9uZyBjYWxs
SWQsIGxvbmcgbm9kZUlkKQogICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZU5vZGUoY2FsbElkLCBu
b2RlSWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFuZ2VUYWdOYW1lKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIGV4
cGFuZGVkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdlVGFnTmFtZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSkKIHsKICAgICBOb2RlKiBvbGRO
b2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFvbGROb2RlIHx8ICFvbGROb2RlLT5p
c0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgLy8gVXNlIC0xIHRvIGRlbm90ZSBhbiBlcnJvciBj
b25kaXRpb24uCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAt
MSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAwKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGJvb2wgY2hpbGRyZW5SZXF1ZXN0ZWQgPSBtX2No
aWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCk7CisKICAgICBFeGNlcHRpb25Db2RlIGNv
ZGUgPSAwOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtID0gb2xkTm9kZS0+ZG9jdW1lbnQo
KS0+Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCBjb2RlKTsKICAgICBpZiAoY29kZSkgewotICAgICAg
ICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgLTEpOworICAgICAgICBtX2Zy
b250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgMCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTUzNSwxNiArNTQ1LDU1IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYW5n
ZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNTdHJpCiAgICAg
cGFyZW50LT5yZW1vdmVDaGlsZChvbGROb2RlLCBjb2RlKTsKIAogICAgIGlmIChjb2RlKSB7Ci0g
ICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAtMSk7CisgICAgICAg
IG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAwKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGxvbmcgbmV3SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5ld0Vs
ZW0uZ2V0KCkpOwotICAgIGlmIChleHBhbmRlZCkKKyAgICBpZiAoY2hpbGRyZW5SZXF1ZXN0ZWQp
CiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CiAgICAgbV9mcm9udGVu
ZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIG5ld0lkKTsKIH0KIAordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKK3sKKyAgICBO
b2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0T3V0ZXJIVE1MKGNh
bGxJZCwgIiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSFRNTEVsZW1lbnQqIGh0
bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKKyAgICBtX2Zyb250
ZW5kLT5kaWRHZXRPdXRlckhUTUwoY2FsbElkLCBodG1sRWxlbWVudC0+b3V0ZXJIVE1MKCkpOwor
fQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkKK3sKKyAgICBOb2RlKiBub2RlID0g
bm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50
KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0T3V0ZXJIVE1MKGNhbGxJZCwgMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9j
aGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpOworICAgIE5vZGUqIHByZXZpb3VzU2li
bGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIHBhcmVudE5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICBIVE1MRWxlbWVudCogaHRtbEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGh0bWxFbGVtZW50LT5zZXRPdXRlckhUTUwob3V0ZXJIVE1MLCBlYyk7CisgICAgaWYgKGVj
KQorICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCAwKTsKKworICAg
IE5vZGUqIG5ld05vZGUgPSBwcmV2aW91c1NpYmxpbmcgPyBwcmV2aW91c1NpYmxpbmctPm5leHRT
aWJsaW5nKCkgOiBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7CisKKyAgICBsb25nIG5ld0lkID0g
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlKTsKKyAgICBpZiAoY2hpbGRyZW5SZXF1ZXN0
ZWQpCisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CisKKyAgICBtX2Zy
b250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCBuZXdJZCk7Cit9CisKIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldFRleHROb2RlVmFsdWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlk
KTsKQEAgLTYzMiw2ICs2ODEsMTMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRM
aXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCkKICAgICBtX2Zyb250ZW5k
LT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBub2RlSWQsIGxpc3RlbmVyc0Fy
cmF5KTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkSW5zcGVjdGVkTm9kZShsb25n
IG5vZGVJZCkKK3sKKyAgICBtX2luc3BlY3RlZE5vZGVzLnByZXBlbmQobm9kZUlkKTsKKyAgICB3
aGlsZSAobV9pbnNwZWN0ZWROb2Rlcy5zaXplKCkgPiA1KQorICAgICAgICBtX2luc3BlY3RlZE5v
ZGVzLnJlbW92ZUxhc3QoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNl
YXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hy
b25vdXNseSkKIHsKICAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBhcmUgbWlzc2luZyBoZXJlOgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYTk2MjU2OS4uNDk4MDczYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xMDIsOSArMTAyLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUobG9uZyBjYWxs
SWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwogICAgICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShsb25nIGNhbGxJZCwgbG9uZyBlbGVt
ZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgIHZvaWQgcmVtb3ZlTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpOwotICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBj
YWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGJvb2wgZXhw
YW5kZWQpOworICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUpOworICAgICAgICB2b2lkIGdldE91dGVySFRNTChs
b25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2b2lkIHNldE91dGVySFRNTChsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKTsKICAgICAgICAg
dm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgYWRkSW5zcGVjdGVkTm9kZShsb25n
IG5vZGVJZCk7CiAgICAgICAgIHZvaWQgcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRl
c3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAgICAgIHZvaWQg
c2VhcmNoQ2FuY2VsZWQoKTsKIApAQCAtMTM0LDYgKzEzNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgTm9kZSogbm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKICAgICAg
ICAgbG9uZyBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUpOwogICAgICAgICB2b2lk
IHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChsb25nIG5vZGVJZCk7CisgICAgICAgIGxvbmcgaW5z
cGVjdGVkTm9kZSh1bnNpZ25lZCBudW0pOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGlj
IENTU1N0eWxlU2hlZXQqIGdldFBhcmVudFN0eWxlU2hlZXQoQ1NTU3R5bGVEZWNsYXJhdGlvbiop
OwpAQCAtMjAwLDYgKzIwNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRGVxdWU8
TWF0Y2hKb2IqPiBtX3BlbmRpbmdNYXRjaEpvYnM7CiAgICAgICAgIFRpbWVyPEluc3BlY3RvckRP
TUFnZW50PiBtX21hdGNoSm9ic1RpbWVyOwogICAgICAgICBIYXNoU2V0PFJlZlB0cjxOb2RlPiA+
IG1fc2VhcmNoUmVzdWx0czsKKyAgICAgICAgVmVjdG9yPGxvbmc+IG1faW5zcGVjdGVkTm9kZXM7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwCmluZGV4IGM5YWE3MzAuLmZhZDMzMDMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTUxNCw2ICs1MTQsMjQgQEAgdm9pZCBJbnNwZWN0
b3JGcm9udGVuZDo6ZGlkQ2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpCiAg
ICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRP
dXRlckhUTUwobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQoreworICAgIFNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IAor
ICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRPdXRlckhUTUwiKTsKKyAgICBmdW5j
dGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50
KG91dGVySFRNTCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQoreworICAg
IFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7
IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRTZXRPdXRlckhUTUwiKTsKKyAgICBm
dW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KG5vZGVJZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQorCiB2b2lkIEluc3BlY3RvckZy
b250ZW5kOjpkaWRHZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkKQogewogICAgIFNjcmlwdEZ1bmN0
aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3BhdGNoIik7IApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggMTc2MjAxNC4uMGU5NjY4OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC0xNDIsNiArMTQyLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZEdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5JiBsaXN0ZW5lcnNBcnJheSk7
CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwog
ICAgICAgICB2b2lkIGRpZENoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsK
KyAgICAgICAgdm9pZCBkaWRHZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
b3V0ZXJIVE1MKTsKKyAgICAgICAgdm9pZCBkaWRTZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkKTsKIAogICAgICAgICB2b2lkIGRpZEdldFN0eWxlcyhsb25nIGNhbGxJZCwgY29u
c3QgU2NyaXB0VmFsdWUmIHN0eWxlcyk7CiAgICAgICAgIHZvaWQgZGlkR2V0QWxsU3R5bGVzKGxv
bmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgc3R5bGVzKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCBkMWYzNDdiLi4xMDYzMjRlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZVZpZXcuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3LmpzCkBAIC0yOTYsNyArMjk2LDcg
QEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgIHJlcXVlc3RD
bGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5nZXREZWZhdWx0KCkuY2xlYXJDb25zb2xlTWVzc2FnZXMoZnVuY3Rpb24oKSB7fSk7Cisg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQuY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKICAgICB9LAog
CiAgICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RPTUFnZW50LmpzCmluZGV4IDViZGUxMmYuLmMzNWRjZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTY2OSw2ICs2NjksOCBAQCBXZWJJbnNwZWN0b3IuZGlk
UmVtb3ZlQXR0cmlidXRlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsK
IFdlYkluc3BlY3Rvci5kaWRTZXRUZXh0Tm9kZVZhbHVlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRSZW1vdmVOb2RlID0gV2ViSW5zcGVj
dG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRDaGFuZ2VUYWdO
YW1lID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKK1dlYkluc3BlY3Rv
ci5kaWRHZXRPdXRlckhUTUwgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNr
OworV2ViSW5zcGVjdG9yLmRpZFNldE91dGVySFRNTCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2Rl
ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIAogV2ViSW5zcGVjdG9y
LmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNQYW5lbC5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCmluZGV4IDU1YmE4
MmQuLjBiZTU2ODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVt
ZW50c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Bh
bmVsLmpzCkBAIC01OSw3ICs1OSw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1BhbmVsID0gZnVu
Y3Rpb24oKQogICAgICAgICB0aGlzLnBhbmVsLnVwZGF0ZUV2ZW50TGlzdGVuZXJzKCk7CiAKICAg
ICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRET01Ob2RlKQotICAgICAgICAgICAgSW5qZWN0ZWRTY3Jp
cHRBY2Nlc3MuZ2V0KHRoaXMuX2ZvY3VzZWRET01Ob2RlLmluamVjdGVkU2NyaXB0SWQpLmFkZElu
c3BlY3RlZE5vZGUodGhpcy5fZm9jdXNlZERPTU5vZGUuaWQsIGZ1bmN0aW9uKCkge30pOworICAg
ICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRJbnNwZWN0ZWROb2RlKHRoaXMuX2ZvY3VzZWRE
T01Ob2RlLmlkKTsKICAgICB9OwogCiAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGls
ZCh0aGlzLnRyZWVPdXRsaW5lLmVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCBlOGZlY2IwLi4xYjg0YjgzIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1l
bnQucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIGNoYW5nZVRhZ05hbWVDYWxsYmFj
ayhub2RlSWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub2RlSWQgPT09IC0xKSB7Cisg
ICAgICAgICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICAgICAgICAgIGNhbmNlbCgpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTExMTEsNyArMTExMSw3IEBA
IFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAg
fQogCiAgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjaGFu
Z2VUYWdOYW1lQ2FsbGJhY2spOwotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmNoYW5nZVRhZ05h
bWUoY2FsbElkLCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmlkLCBuZXdUZXh0LCB3YXNFeHBhbmRl
ZCk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuY2hhbmdlVGFnTmFtZShjYWxsSWQsIHRoaXMu
cmVwcmVzZW50ZWRPYmplY3QuaWQsIG5ld1RleHQpOwogICAgIH0sCiAKICAgICBfdGV4dE5vZGVF
ZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdUZXh0KQpAQCAtMTM4MiwxMCAr
MTM4MiwxMiBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgZnVuY3Rpb24gY29tbWl0Q2hhbmdlKHZhbHVlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5pbmplY3RlZFNjcmlwdElkKS5z
ZXRPdXRlckhUTUwobm9kZS5pZCwgdmFsdWUsIHdhc0V4cGFuZGVkLCBzZWxlY3ROb2RlLmJpbmQo
dGhpcykpOworICAgICAgICAgICAgdmFyIHNldENhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFj
ay53cmFwKHNlbGVjdE5vZGUpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRPdXRl
ckhUTUwoc2V0Q2FsbElkLCBub2RlLmlkLCB2YWx1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5pbmplY3RlZFNjcmlwdElkKS5nZXROb2RlUHJv
cGVydHlWYWx1ZShub2RlLmlkLCAib3V0ZXJIVE1MIiwgdGhpcy5fc3RhcnRFZGl0aW5nQXNIVE1M
LmJpbmQodGhpcywgY29tbWl0Q2hhbmdlKSk7CisgICAgICAgIHZhciBnZXRDYWxsSWQgPSBXZWJJ
bnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh0aGlzLl9zdGFydEVkaXRpbmdBc0hUTUwuYmluZCh0aGlz
LCBjb21taXRDaGFuZ2UpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRPdXRlckhUTUwo
Z2V0Q2FsbElkLCBub2RlLmlkKTsKICAgICB9LAogCiAgICAgX2NvcHlIVE1MOiBmdW5jdGlvbigp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanMKaW5kZXgg
YWJiYmFiOS4uYzA2YTZmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Jbmpl
Y3RlZFNjcmlwdC5qcwpAQCAtODMsNyArODMsNiBAQCBJbmplY3RlZFNjcmlwdC5yZWxlYXNlV3Jh
cHBlck9iamVjdEdyb3VwID0gZnVuY3Rpb24ob2JqZWN0R3JvdXBOYW1lKSB7CiAvLyBDYWxsZWQg
ZnJvbSB3aXRoaW4gSW5zcGVjdG9yQ29udHJvbGxlciBvbiB0aGUgJ2luc3BlY3RlZCBwYWdlJyBz
aWRlLgogSW5qZWN0ZWRTY3JpcHQucmVzZXQgPSBmdW5jdGlvbigpCiB7Ci0gICAgSW5qZWN0ZWRT
Y3JpcHQuX2luc3BlY3RlZE5vZGVzID0gW107CiB9CiAKIEluamVjdGVkU2NyaXB0LnJlc2V0KCk7
CkBAIC0yMTksMjkgKzIxOCw2IEBAIEluamVjdGVkU2NyaXB0LnNldFByb3BlcnR5VmFsdWUgPSBm
dW5jdGlvbihvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHByZXNzaW9uCiAgICAgfQogfQog
Ci1JbmplY3RlZFNjcmlwdC5nZXROb2RlUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKG5vZGVJZCwg
cHJvcGVydHlOYW1lKQotewotICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJ
ZChub2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZh
ciByZXN1bHQgPSBub2RlW3Byb3BlcnR5TmFtZV07Ci0gICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5k
ZWZpbmVkID8gcmVzdWx0IDogZmFsc2U7Ci19Ci0KLUluamVjdGVkU2NyaXB0LnNldE91dGVySFRN
TCA9IGZ1bmN0aW9uKG5vZGVJZCwgdmFsdWUsIGV4cGFuZGVkKQotewotICAgIHZhciBub2RlID0g
SW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTsKLSAg
ICB2YXIgcHJldlNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZzsKLSAgICBub2RlLm91dGVy
SFRNTCA9IHZhbHVlOwotICAgIHZhciBuZXdOb2RlID0gcHJldlNpYmxpbmcgPyBwcmV2U2libGlu
Zy5uZXh0U2libGluZyA6IHBhcmVudC5maXJzdENoaWxkOwotCi0gICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0SG9zdC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5ld05vZGUsIGV4cGFuZGVkLCBmYWxz
ZSk7Ci19Ci0KIEluamVjdGVkU2NyaXB0Ll9wb3B1bGF0ZVByb3BlcnR5TmFtZXMgPSBmdW5jdGlv
bihvYmplY3QsIHJlc3VsdFNldCkKIHsKICAgICBmb3IgKHZhciBvID0gb2JqZWN0OyBvOyBvID0g
by5fX3Byb3RvX18pIHsKQEAgLTM0MywxOSArMzE5LDYgQEAgSW5qZWN0ZWRTY3JpcHQuX2V2YWx1
YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwgZXhwcmVzc2lvbiwgZG9udFVz
ZUMKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUluamVjdGVkU2NyaXB0LmFkZEluc3BlY3RlZE5v
ZGUgPSBmdW5jdGlvbihub2RlSWQpCi17Ci0gICAgdmFyIG5vZGUgPSBJbmplY3RlZFNjcmlwdC5f
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB2YXIgaW5zcGVjdGVkTm9kZXMgPSBJbmplY3RlZFNjcmlwdC5faW5zcGVjdGVkTm9k
ZXM7Ci0gICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2RlKTsKLSAgICBpZiAoaW5zcGVjdGVk
Tm9kZXMubGVuZ3RoID49IDUpCi0gICAgICAgIGluc3BlY3RlZE5vZGVzLnBvcCgpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCiBJbmplY3RlZFNjcmlwdC5nZXROb2RlSWQgPSBmdW5jdGlvbihub2Rl
KQogewogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChub2RlLCBmYWxzZSwgZmFsc2UpOwpAQCAtNDAwLDE3ICszNjMsMTAgQEAgSW5qZWN0ZWRTY3Jp
cHQuX2NhbGxGcmFtZUZvcklkID0gZnVuY3Rpb24oaWQpCiAgICAgcmV0dXJuIGNhbGxGcmFtZTsK
IH0KIAotSW5qZWN0ZWRTY3JpcHQuY2xlYXJDb25zb2xlTWVzc2FnZXMgPSBmdW5jdGlvbigpCi17
Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0LmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KIEluamVjdGVkU2NyaXB0Ll9yZXNvbHZlT2JqZWN0ID0gZnVuY3Rpb24o
b2JqZWN0UHJveHkpCiB7CiAgICAgdmFyIG9iamVjdCA9IEluamVjdGVkU2NyaXB0Ll9vYmplY3RG
b3JJZChvYmplY3RQcm94eS5vYmplY3RJZCk7CiAgICAgdmFyIHBhdGggPSBvYmplY3RQcm94eS5w
YXRoOwotICAgIHZhciBwcm90b0RlcHRoID0gb2JqZWN0UHJveHkucHJvdG9EZXB0aDsKIAogICAg
IC8vIEZvbGxvdyB0aGUgcHJvcGVydHkgcGF0aC4KICAgICBmb3IgKHZhciBpID0gMDsgSW5qZWN0
ZWRTY3JpcHQuX2lzRGVmaW5lZChvYmplY3QpICYmIHBhdGggJiYgaSA8IHBhdGgubGVuZ3RoOyAr
K2kpCkBAIC03MDcsNyArNjYzLDEzIEBAIEluamVjdGVkU2NyaXB0Ll9ub3JtYWxpemVFdmVudFR5
cGVzID0gZnVuY3Rpb24odHlwZXMpCiAgICAgICAgICAgICByZXN1bHQucHVzaCh0eXBlc1tpXSk7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7Ci19OworfQorCitJbmplY3RlZFNjcmlwdC5faW5z
cGVjdGVkTm9kZSA9IGZ1bmN0aW9uKG51bSkKK3sKKyAgICB2YXIgbm9kZUlkID0gSW5qZWN0ZWRT
Y3JpcHRIb3N0Lmluc3BlY3RlZE5vZGUobnVtKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQu
X25vZGVGb3JJZChub2RlSWQpOworfQogCiBmdW5jdGlvbiBDb21tYW5kTGluZUFQSSgpCiB7CkBA
IC04MjksMjcgKzc5MSwyNyBAQCBDb21tYW5kTGluZUFQSS5wcm90b3R5cGUgPSB7CiAKICAgICBn
ZXQgJDAoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWRO
b2Rlc1swXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDAp
OwogICAgIH0sCiAKICAgICBnZXQgJDEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0Ll9pbnNwZWN0ZWROb2Rlc1sxXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0
Ll9pbnNwZWN0ZWROb2RlKDEpOwogICAgIH0sCiAKICAgICBnZXQgJDIoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2Rlc1syXTsKKyAgICAgICAgcmV0
dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDIpOwogICAgIH0sCiAKICAgICBnZXQg
JDMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2Rl
c1szXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDMpOwog
ICAgIH0sCiAKICAgICBnZXQgJDQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0Ll9pbnNwZWN0ZWROb2Rlc1s0XTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9p
bnNwZWN0ZWROb2RlKDQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCmluZGV4IGMzODgyMTMuLjhjY2M4Nzkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdEFj
Y2Vzcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuanMKQEAgLTcwLDE4ICs3MCwxNCBAQCBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFs
bEhhbmRsZXIgPSBmdW5jdGlvbihtZXRob2ROYW1lLCBhc3luYykKIC8vIC0gTWFrZSBzdXJlIGNv
cnJlc3BvbmRpbmcgbWV0aG9kcyBpbiBJbmplY3RlZFNjcmlwdCByZXR1cm4gbm9uLW51bGwgYW5k
IG5vbi11bmRlZmluZWQgdmFsdWVzLAogLy8gLSBNYWtlIHN1cmUgbGFzdCBwYXJhbWV0ZXIgb2Yg
YWxsIHRoZSBJbmplY3RlZFNyaXB0QWNjZXNzLiogY2FsbHMgaXMgYSBjYWxsYmFjayBmdW5jdGlv
bi4KIC8vIFdlIGtlZXAgdGhlc2Ugc29ydGVkLgotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3Rh
bGxIYW5kbGVyKCJhZGRJbnNwZWN0ZWROb2RlIik7Ci1JbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vz
cy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlIik7CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5z
dGFsbEhhbmRsZXIoImV2YWx1YXRlSW5DYWxsRnJhbWUiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsKLUluamVjdGVkU2NyaXB0QWNjZXNz
Ll9pbnN0YWxsSGFuZGxlcigiZ2V0Tm9kZVByb3BlcnR5VmFsdWUiKTsKIEluamVjdGVkU2NyaXB0
QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0UHJvcGVydGllcyIpOwogSW5qZWN0ZWRTY3JpcHRB
Y2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7CiBJbmplY3RlZFNjcmlwdEFj
Y2Vzcy5faW5zdGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdpbmRvdyIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwdXNoTm9kZVRvRnJvbnRlbmQiKTsKIEluamVj
dGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigibm9kZUJ5UGF0aCIpOwotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRPdXRlckhUTUwiKTsKIEluamVjdGVkU2Ny
aXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlWYWx1ZSIpOwogSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZU9uU2VsZiIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58929</attachid>
            <date>2010-06-16 14:05:43 -0700</date>
            <delta_ts>2010-06-16 15:57:26 -0700</delta_ts>
            <desc>[PATCH] Same + IDL cleanup. Sorry for noise.</desc>
            <filename>move_more</filename>
            <type>text/plain</type>
            <size>23836</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mjg0N2M2Ni4uYmRjZGQ2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0wNi0xNiAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb3ZlIGdldC9zZXRPdXRlckhUTUws
IGFkZEluc3BlY3RlZE5vZGUgYW5kCisgICAgICAgIGNsZWFyQ29uc29sZSB0byBuYXRpdmUgSW5z
cGVjdG9yRE9NQWdlbnQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQwNzMzCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluamVjdGVkU2NyaXB0SG9zdDo6aW5zcGVjdGVkTm9k
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckJhY2tlbmQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QmFja2VuZDo6Z2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tl
bmQ6OnNldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjph
ZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhY2tlbmQ6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6Omluc3BlY3RlZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmdldE91dGVySFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6c2V0T3V0ZXJIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjphZGRJbnNwZWN0ZWROb2RlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6OmRpZEdldE91dGVySFRNTCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0T3V0ZXJIVE1MKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbnNvbGVWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3
LnByb3RvdHlwZS5yZXF1ZXN0Q2xlYXJNZXNzYWdlcyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1l
bnRzUGFuZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNQYW5lbC50aGlzLnRy
ZWVPdXRsaW5lLmZvY3VzZWROb2RlQ2hhbmdlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxl
bWVudHNQYW5lbCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVP
dXRsaW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJv
dG90eXBlLl90YWdOYW1lRWRpdGluZ0NvbW1pdHRlZC5jaGFuZ2VUYWdOYW1lQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl90YWdO
YW1lRWRpdGluZ0NvbW1pdHRlZCk6CisgICAgICAgICgpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvSW5qZWN0ZWRTY3JpcHQuanM6CisgICAgICAgIChpbmplY3RlZFNjcmlwdENvbnN0
cnVjdG9yKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNj
ZXNzLmpzOgorCiAyMDEwLTA2LTE2ICBCcmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwCmluZGV4IDRjM2M3YWUuLmUzZGE4MTAgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcApAQCAtMTIzLDYgKzEyMywxNSBAQCBs
b25nIEluamVjdGVkU2NyaXB0SG9zdDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCkKICAgICByZXR1cm4gZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bm9kZSk7CiB9CiAKK2xvbmcgSW5qZWN0ZWRTY3JpcHRIb3N0OjppbnNwZWN0ZWROb2RlKHVuc2ln
bmVkIG51bSkKK3sKKyAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpOworICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGRvbUFnZW50LT5pbnNwZWN0ZWROb2RlKG51bSk7Cit9CisKICNpZiBFTkFCTEUoREFU
QUJBU0UpCiBEYXRhYmFzZSogSW5qZWN0ZWRTY3JpcHRIb3N0OjpkYXRhYmFzZUZvcklkKGxvbmcg
ZGF0YWJhc2VJZCkKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0SG9zdC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgKaW5kZXgg
NjZjZjQxZS4uZGY2ZjBiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRIb3N0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmgK
QEAgLTY4LDggKzY4LDggQEAgcHVibGljOgogICAgIHZvaWQgY29weVRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0KTsKICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOwogICAgIGxvbmcgcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlLCBib29sIHdpdGhDaGlsZHJlbiwgYm9vbCBz
ZWxlY3RJblVJKTsKLQogICAgIGxvbmcgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgbG9uZyBpbnNwZWN0ZWROb2RlKHVuc2lnbmVkIG51bSk7CiAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlRm9ySWQobG9uZyBkYXRh
YmFzZUlkKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggMWVlZGRh
MS4uMDcxNDBjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTM1
OSwxMCArMzU5LDI4IEBAIHZvaWQgSW5zcGVjdG9yQmFja2VuZDo6cmVtb3ZlTm9kZShsb25nIGNh
bGxJZCwgbG9uZyBub2RlSWQpCiAgICAgICAgIGRvbUFnZW50LT5yZW1vdmVOb2RlKGNhbGxJZCwg
bm9kZUlkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjaGFuZ2VUYWdOYW1lKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBib29sIGV4
cGFuZGVkKQordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpjaGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElk
LCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewogICAgIGlmIChJbnNwZWN0
b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JET01BZ2VudCgpKQotICAgICAgICBkb21B
Z2VudC0+Y2hhbmdlVGFnTmFtZShjYWxsSWQsIG5vZGVJZCwgdGFnTmFtZSwgZXhwYW5kZWQpOwor
ICAgICAgICBkb21BZ2VudC0+Y2hhbmdlVGFnTmFtZShjYWxsSWQsIG5vZGVJZCwgdGFnTmFtZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6Z2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBs
b25nIG5vZGVJZCkKK3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5z
cGVjdG9yRE9NQWdlbnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmdldE91dGVySFRNTChjYWxsSWQs
IG5vZGVJZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6c2V0T3V0ZXJIVE1MKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCit7CisgICAgaWYg
KEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IGluc3BlY3RvckRPTUFnZW50KCkpCisgICAg
ICAgIGRvbUFnZW50LT5zZXRPdXRlckhUTUwoY2FsbElkLCBub2RlSWQsIG91dGVySFRNTCk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZDo6YWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCkK
K3sKKyAgICBpZiAoSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gaW5zcGVjdG9yRE9NQWdl
bnQoKSkKKyAgICAgICAgZG9tQWdlbnQtPmFkZEluc3BlY3RlZE5vZGUobm9kZUlkKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpwZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgcXVlcnks
IGJvb2wgcnVuU3luY2hyb25vdXNseSkKQEAgLTM3Nyw2ICszOTUsMTIgQEAgdm9pZCBJbnNwZWN0
b3JCYWNrZW5kOjpzZWFyY2hDYW5jZWxlZCgpCiAgICAgICAgIGRvbUFnZW50LT5zZWFyY2hDYW5j
ZWxlZCgpOwogfQogCit2b2lkIEluc3BlY3RvckJhY2tlbmQ6OmNsZWFyQ29uc29sZU1lc3NhZ2Vz
KCkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JDb250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7Cit9CisKIHZvaWQgSW5zcGVjdG9y
QmFja2VuZDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JP
bmx5KQogewogICAgIGlmIChJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBpbnNwZWN0b3JE
T01BZ2VudCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oCmluZGV4IDYxZDczYjgu
LmEzOWJhNTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgKQEAgLTExOSwxMCAr
MTE5LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShsb25n
IGNhbGxJZCwgbG9uZyBub2RlSWQpOwogICAgIHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQpOwog
ICAgIHZvaWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwotICAgIHZvaWQg
Y2hhbmdlVGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgYm9vbCBleHBhbmRlZCk7CisgICAgdm9pZCBjaGFuZ2VUYWdOYW1lKGxvbmcg
Y2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKTsKKyAgICB2b2lkIGdl
dE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgIHZvaWQgc2V0T3V0ZXJI
VE1MKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpOwor
ICAgIHZvaWQgYWRkSW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCk7CiAgICAgdm9pZCBwZXJmb3Jt
U2VhcmNoKGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNseSk7CiAgICAg
dm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCisgICAgdm9pZCBjbGVhckNvbnNvbGVNZXNzYWdlcygp
OworCiAgICAgdm9pZCBnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1
dGhPbmx5KTsKICAgICB2b2lkIGdldEFsbFN0eWxlcyhsb25nIGNhbGxJZCk7CiAgICAgdm9pZCBn
ZXRJbmxpbmVTdHlsZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kLmlkbAppbmRleCBjMDA3OGVlLi42ODIwMTcxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kLmlkbApAQCAtOTQsMTAgKzk0LDE1IEBAIG1vZHVsZSBjb3Jl
IHsKICAgICAgICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoaW4gbG9uZyBjYWxsSWQs
IGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShpbiBsb25nIG5vZGVJZCk7
CiAgICAgICAgIHZvaWQgcmVtb3ZlTm9kZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQp
OwotICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUoaW4gbG9uZyBjYWxsSWQsIGluIGxvbmcgbm9k
ZUlkLCBpbiBET01TdHJpbmcgbmV3VGFnTmFtZSwgaW4gYm9vbGVhbiBleHBhbmRlZCk7CisgICAg
ICAgIHZvaWQgY2hhbmdlVGFnTmFtZShpbiBsb25nIGNhbGxJZCwgaW4gbG9uZyBub2RlSWQsIGlu
IERPTVN0cmluZyBuZXdUYWdOYW1lKTsKKyAgICAgICAgdm9pZCBnZXRPdXRlckhUTUwoaW4gbG9u
ZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBzZXRPdXRlckhUTUwoaW4g
bG9uZyBjYWxsSWQsIGluIGxvbmcgbm9kZUlkLCBpbiBET01TdHJpbmcgb3V0ZXJIVE1MKTsKKyAg
ICAgICAgdm9pZCBhZGRJbnNwZWN0ZWROb2RlKGluIGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9p
ZCBwZXJmb3JtU2VhcmNoKGluIERPTVN0cmluZyBxdWVyeSwgaW4gYm9vbGVhbiBydW5TeW5jaHJv
bm91c2x5KTsKICAgICAgICAgdm9pZCBzZWFyY2hDYW5jZWxlZCgpOwogCisgICAgICAgIHZvaWQg
Y2xlYXJDb25zb2xlTWVzc2FnZXMoKTsKKwogICAgICAgICB2b2lkIGhpZ2hsaWdodERPTU5vZGUo
aW4gbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGhpZGVET01Ob2RlSGlnaGxpZ2h0KCk7CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBiMTUyZGMzLi5jYmVh
YjBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01Myw5ICs1
Myw5IEBACiAjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIK
LSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVk
ZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCkBAIC0zNTUsMTIgKzM1NSwyMCBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2Rl
SWQpCiAgICAgbV9mcm9udGVuZC0+c2V0Q2hpbGROb2Rlcyhub2RlSWQsIGNoaWxkcmVuKTsKIH0K
IAorbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBudW0pCit7
CisgICAgaWYgKG51bSA8IG1faW5zcGVjdGVkTm9kZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4g
bV9pbnNwZWN0ZWROb2Rlc1tudW1dOworICAgIHJldHVybiAwOworfQorCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaXNjYXJkQmluZGluZ3MoKQogewogICAgIG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5jbGVhcigpOwogICAgIG1faWRUb05vZGUuY2xlYXIoKTsKICAgICByZWxlYXNlRGFuZ2xpbmdO
b2RlcygpOwogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKKyAgICBtX2luc3BlY3Rl
ZE5vZGVzLmNsZWFyKCk7CiB9CiAKIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQo
bG9uZyBpZCkKQEAgLTUwMiwxOSArNTEwLDIxIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
bW92ZU5vZGUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKQogICAgIG1fZnJvbnRlbmQtPmRpZFJl
bW92ZU5vZGUoY2FsbElkLCBub2RlSWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojpj
aGFuZ2VUYWdOYW1lKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBib29sIGV4cGFuZGVkKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhbmdl
VGFnTmFtZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSkK
IHsKICAgICBOb2RlKiBvbGROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFvbGRO
b2RlIHx8ICFvbGROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgLy8gVXNlIC0xIHRv
IGRlbm90ZSBhbiBlcnJvciBjb25kaXRpb24uCi0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5n
ZVRhZ05hbWUoY2FsbElkLCAtMSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05h
bWUoY2FsbElkLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGJvb2wgY2hpbGRy
ZW5SZXF1ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCk7CisKICAg
ICBFeGNlcHRpb25Db2RlIGNvZGUgPSAwOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtID0g
b2xkTm9kZS0+ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCBjb2RlKTsKICAgICBp
ZiAoY29kZSkgewotICAgICAgICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwg
LTEpOworICAgICAgICBtX2Zyb250ZW5kLT5kaWRDaGFuZ2VUYWdOYW1lKGNhbGxJZCwgMCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTUzNSwxNiArNTQ1LDU1IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmNoYW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25z
dCBBdG9taWNTdHJpCiAgICAgcGFyZW50LT5yZW1vdmVDaGlsZChvbGROb2RlLCBjb2RlKTsKIAog
ICAgIGlmIChjb2RlKSB7Ci0gICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2Fs
bElkLCAtMSk7CisgICAgICAgIG1fZnJvbnRlbmQtPmRpZENoYW5nZVRhZ05hbWUoY2FsbElkLCAw
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGxvbmcgbmV3SWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5ld0VsZW0uZ2V0KCkpOwotICAgIGlmIChleHBhbmRlZCkKKyAgICBpZiAo
Y2hpbGRyZW5SZXF1ZXN0ZWQpCiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJ
ZCk7CiAgICAgbV9mcm9udGVuZC0+ZGlkQ2hhbmdlVGFnTmFtZShjYWxsSWQsIG5ld0lkKTsKIH0K
IAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+
ZGlkR2V0T3V0ZXJIVE1MKGNhbGxJZCwgIiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgSFRNTEVsZW1lbnQqIGh0bWxFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihu
b2RlKTsKKyAgICBtX2Zyb250ZW5kLT5kaWRHZXRPdXRlckhUTUwoY2FsbElkLCBodG1sRWxlbWVu
dC0+b3V0ZXJIVE1MKCkpOworfQorCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhU
TUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkKK3sK
KyAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFub2RlIHx8ICFu
b2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0T3V0ZXJI
VE1MKGNhbGxJZCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGNoaWxk
cmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpOworICAg
IE5vZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisKKyAgICBIVE1MRWxlbWVudCog
aHRtbEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG5vZGUpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGh0bWxFbGVtZW50LT5zZXRPdXRlckhUTUwob3V0ZXJIVE1M
LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwo
Y2FsbElkLCAwKTsKKworICAgIE5vZGUqIG5ld05vZGUgPSBwcmV2aW91c1NpYmxpbmcgPyBwcmV2
aW91c1NpYmxpbmctPm5leHRTaWJsaW5nKCkgOiBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7CisK
KyAgICBsb25nIG5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChuZXdOb2RlKTsKKyAgICBp
ZiAoY2hpbGRyZW5SZXF1ZXN0ZWQpCisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChu
ZXdJZCk7CisKKyAgICBtX2Zyb250ZW5kLT5kaWRTZXRPdXRlckhUTUwoY2FsbElkLCBuZXdJZCk7
Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFRleHROb2RlVmFsdWUobG9uZyBjYWxs
SWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewogICAgIE5vZGUqIG5vZGUg
PSBub2RlRm9ySWQobm9kZUlkKTsKQEAgLTYzMiw2ICs2ODEsMTMgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJ
ZCkKICAgICBtX2Zyb250ZW5kLT5kaWRHZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoY2FsbElkLCBu
b2RlSWQsIGxpc3RlbmVyc0FycmF5KTsKIH0KIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRk
SW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCkKK3sKKyAgICBtX2luc3BlY3RlZE5vZGVzLnByZXBl
bmQobm9kZUlkKTsKKyAgICB3aGlsZSAobV9pbnNwZWN0ZWROb2Rlcy5zaXplKCkgPiA1KQorICAg
ICAgICBtX2luc3BlY3RlZE5vZGVzLnJlbW92ZUxhc3QoKTsKK30KKwogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6cGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVl
cnksIGJvb2wgcnVuU3luY2hyb25vdXNseSkKIHsKICAgICAvLyBGSVhNRTogRmV3IHRoaW5ncyBh
cmUgbWlzc2luZyBoZXJlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXgg
YTk2MjU2OS4uNDk4MDczYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBA
IC0xMDIsOSArMTAyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRB
dHRyaWJ1dGUobG9uZyBjYWxsSWQsIGxvbmcgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOwogICAgICAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShsb25n
IGNhbGxJZCwgbG9uZyBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgIHZv
aWQgcmVtb3ZlTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOwotICAgICAgICB2b2lkIGNo
YW5nZVRhZ05hbWUobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIGJvb2wgZXhwYW5kZWQpOworICAgICAgICB2b2lkIGNoYW5nZVRhZ05hbWUobG9u
ZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUpOworICAgICAgICB2
b2lkIGdldE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQpOworICAgICAgICB2b2lk
IHNldE91dGVySFRNTChsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0
ZXJIVE1MKTsKICAgICAgICAgdm9pZCBzZXRUZXh0Tm9kZVZhbHVlKGxvbmcgY2FsbElkLCBsb25n
IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgIHZvaWQgZ2V0RXZlbnRMaXN0
ZW5lcnNGb3JOb2RlKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCk7CisgICAgICAgIHZvaWQgYWRk
SW5zcGVjdGVkTm9kZShsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgcGVyZm9ybVNlYXJjaChj
b25zdCBTdHJpbmcmIHdoaXRlc3BhY2VUcmltbWVkUXVlcnksIGJvb2wgcnVuU3luY2hyb25vdXNs
eSk7CiAgICAgICAgIHZvaWQgc2VhcmNoQ2FuY2VsZWQoKTsKIApAQCAtMTM0LDYgKzEzNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgTm9kZSogbm9kZUZvclBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKTsKICAgICAgICAgbG9uZyBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5v
ZGUpOwogICAgICAgICB2b2lkIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChsb25nIG5vZGVJZCk7
CisgICAgICAgIGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBudW0pOwogCiAgICAgcHJpdmF0
ZToKICAgICAgICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIGdldFBhcmVudFN0eWxlU2hlZXQoQ1NT
U3R5bGVEZWNsYXJhdGlvbiopOwpAQCAtMjAwLDYgKzIwNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgRGVxdWU8TWF0Y2hKb2IqPiBtX3BlbmRpbmdNYXRjaEpvYnM7CiAgICAgICAg
IFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiBtX21hdGNoSm9ic1RpbWVyOwogICAgICAgICBIYXNo
U2V0PFJlZlB0cjxOb2RlPiA+IG1fc2VhcmNoUmVzdWx0czsKKyAgICAgICAgVmVjdG9yPGxvbmc+
IG1faW5zcGVjdGVkTm9kZXM7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCmluZGV4IGM5YWE3MzAuLmZhZDMzMDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKQEAgLTUxNCw2ICs1MTQs
MjQgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkQ2hhbmdlVGFnTmFtZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQpCiAgICAgZnVuY3Rpb24uY2FsbCgpOwogfQogCit2b2lkIEluc3BlY3Rv
ckZyb250ZW5kOjpkaWRHZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgb3V0
ZXJIVE1MKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3Rv
ciwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRHZXRPdXRl
ckhUTUwiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1bmN0
aW9uLmFwcGVuZEFyZ3VtZW50KG91dGVySFRNTCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQor
Cit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRTZXRPdXRlckhUTUwobG9uZyBjYWxsSWQsIGxv
bmcgbm9kZUlkKQoreworICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3Bl
Y3RvciwgImRpc3BhdGNoIik7IAorICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KCJkaWRTZXRP
dXRlckhUTUwiKTsKKyAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsSWQpOworICAgIGZ1
bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG5vZGVJZCk7CisgICAgZnVuY3Rpb24uY2FsbCgpOworfQor
CiB2b2lkIEluc3BlY3RvckZyb250ZW5kOjpkaWRHZXRDaGlsZE5vZGVzKGxvbmcgY2FsbElkKQog
ewogICAgIFNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihtX3dlYkluc3BlY3RvciwgImRpc3Bh
dGNoIik7IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKaW5kZXggMTc2MjAxNC4u
MGU5NjY4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCkBAIC0xNDIsNiAr
MTQyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpZEdldEV2ZW50TGlz
dGVuZXJzRm9yTm9kZShsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGNvbnN0IFNjcmlwdEFycmF5
JiBsaXN0ZW5lcnNBcnJheSk7CiAgICAgICAgIHZvaWQgZGlkUmVtb3ZlTm9kZShsb25nIGNhbGxJ
ZCwgbG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIGRpZENoYW5nZVRhZ05hbWUobG9uZyBjYWxs
SWQsIGxvbmcgbm9kZUlkKTsKKyAgICAgICAgdm9pZCBkaWRHZXRPdXRlckhUTUwobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKTsKKyAgICAgICAgdm9pZCBkaWRTZXRPdXRlckhU
TUwobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkKTsKIAogICAgICAgICB2b2lkIGRpZEdldFN0eWxl
cyhsb25nIGNhbGxJZCwgY29uc3QgU2NyaXB0VmFsdWUmIHN0eWxlcyk7CiAgICAgICAgIHZvaWQg
ZGlkR2V0QWxsU3R5bGVzKGxvbmcgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYgc3R5bGVzKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlVmlldy5qcwppbmRleCBkMWYzNDdi
Li4xMDYzMjRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29s
ZVZpZXcuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGVWaWV3Lmpz
CkBAIC0yOTYsNyArMjk2LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVWaWV3LnByb3RvdHlwZSA9
IHsKIAogICAgIHJlcXVlc3RDbGVhck1lc3NhZ2VzOiBmdW5jdGlvbigpCiAgICAgewotICAgICAg
ICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXREZWZhdWx0KCkuY2xlYXJDb25zb2xlTWVzc2FnZXMo
ZnVuY3Rpb24oKSB7fSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuY2xlYXJDb25zb2xlTWVz
c2FnZXMoKTsKICAgICB9LAogCiAgICAgY2xlYXJNZXNzYWdlczogZnVuY3Rpb24oKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCmluZGV4IDViZGUxMmYuLmMzNWRjZTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcworKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKQEAgLTY2OSw2ICs2NjksOCBA
QCBXZWJJbnNwZWN0b3IuZGlkUmVtb3ZlQXR0cmlidXRlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNr
LnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRTZXRUZXh0Tm9kZVZhbHVlID0gV2Vi
SW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3BlY3Rvci5kaWRSZW1v
dmVOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKIFdlYkluc3Bl
Y3Rvci5kaWRDaGFuZ2VUYWdOYW1lID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxs
YmFjazsKK1dlYkluc3BlY3Rvci5kaWRHZXRPdXRlckhUTUwgPSBXZWJJbnNwZWN0b3IuQ2FsbGJh
Y2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZFNldE91dGVySFRNTCA9IFdlYklu
c3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CiBXZWJJbnNwZWN0b3IuZGlkR2V0RXZl
bnRMaXN0ZW5lcnNGb3JOb2RlID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFj
azsKIAogV2ViSW5zcGVjdG9yLmRpZEdldFN0eWxlcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5w
cm9jZXNzQ2FsbGJhY2s7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RWxlbWVudHNQYW5lbC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1Bh
bmVsLmpzCmluZGV4IDU1YmE4MmQuLjBiZTU2ODAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9FbGVtZW50c1BhbmVsLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FbGVtZW50c1BhbmVsLmpzCkBAIC01OSw3ICs1OSw3IEBAIFdlYkluc3BlY3Rvci5F
bGVtZW50c1BhbmVsID0gZnVuY3Rpb24oKQogICAgICAgICB0aGlzLnBhbmVsLnVwZGF0ZUV2ZW50
TGlzdGVuZXJzKCk7CiAKICAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRET01Ob2RlKQotICAgICAg
ICAgICAgSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuZ2V0KHRoaXMuX2ZvY3VzZWRET01Ob2RlLmluamVj
dGVkU2NyaXB0SWQpLmFkZEluc3BlY3RlZE5vZGUodGhpcy5fZm9jdXNlZERPTU5vZGUuaWQsIGZ1
bmN0aW9uKCkge30pOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRJbnNwZWN0ZWRO
b2RlKHRoaXMuX2ZvY3VzZWRET01Ob2RlLmlkKTsKICAgICB9OwogCiAgICAgdGhpcy5jb250ZW50
RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRyZWVPdXRsaW5lLmVsZW1lbnQpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCBl
OGZlY2IwLi4xYjg0YjgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RWxlbWVudHNUcmVlT3V0bGluZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RWxlbWVudHNUcmVlT3V0bGluZS5qcwpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgV2ViSW5zcGVjdG9y
LkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIGZ1bmN0aW9uIGNo
YW5nZVRhZ05hbWVDYWxsYmFjayhub2RlSWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChu
b2RlSWQgPT09IC0xKSB7CisgICAgICAgICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICAgICAg
ICAgIGNhbmNlbCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAg
LTExMTEsNyArMTExMSw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChjaGFuZ2VUYWdOYW1lQ2FsbGJhY2spOwotICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmNoYW5nZVRhZ05hbWUoY2FsbElkLCB0aGlzLnJlcHJlc2VudGVkT2JqZWN0LmlkLCBu
ZXdUZXh0LCB3YXNFeHBhbmRlZCk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuY2hhbmdlVGFn
TmFtZShjYWxsSWQsIHRoaXMucmVwcmVzZW50ZWRPYmplY3QuaWQsIG5ld1RleHQpOwogICAgIH0s
CiAKICAgICBfdGV4dE5vZGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdU
ZXh0KQpAQCAtMTM4MiwxMCArMTM4MiwxMiBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZnVuY3Rpb24gY29tbWl0Q2hhbmdlKHZhbHVl
KQogICAgICAgICB7Ci0gICAgICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5p
bmplY3RlZFNjcmlwdElkKS5zZXRPdXRlckhUTUwobm9kZS5pZCwgdmFsdWUsIHdhc0V4cGFuZGVk
LCBzZWxlY3ROb2RlLmJpbmQodGhpcykpOworICAgICAgICAgICAgdmFyIHNldENhbGxJZCA9IFdl
Ykluc3BlY3Rvci5DYWxsYmFjay53cmFwKHNlbGVjdE5vZGUpOworICAgICAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5zZXRPdXRlckhUTUwoc2V0Q2FsbElkLCBub2RlLmlkLCB2YWx1ZSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBJbmplY3RlZFNjcmlwdEFjY2Vzcy5nZXQobm9kZS5pbmplY3RlZFNj
cmlwdElkKS5nZXROb2RlUHJvcGVydHlWYWx1ZShub2RlLmlkLCAib3V0ZXJIVE1MIiwgdGhpcy5f
c3RhcnRFZGl0aW5nQXNIVE1MLmJpbmQodGhpcywgY29tbWl0Q2hhbmdlKSk7CisgICAgICAgIHZh
ciBnZXRDYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcCh0aGlzLl9zdGFydEVkaXRp
bmdBc0hUTUwuYmluZCh0aGlzLCBjb21taXRDaGFuZ2UpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5nZXRPdXRlckhUTUwoZ2V0Q2FsbElkLCBub2RlLmlkKTsKICAgICB9LAogCiAgICAgX2Nv
cHlIVE1MOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5qZWN0
ZWRTY3JpcHQuanMKaW5kZXggYWJiYmFiOS4uYzA2YTZmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9JbmplY3RlZFNjcmlwdC5qcwpAQCAtODMsNyArODMsNiBAQCBJbmplY3Rl
ZFNjcmlwdC5yZWxlYXNlV3JhcHBlck9iamVjdEdyb3VwID0gZnVuY3Rpb24ob2JqZWN0R3JvdXBO
YW1lKSB7CiAvLyBDYWxsZWQgZnJvbSB3aXRoaW4gSW5zcGVjdG9yQ29udHJvbGxlciBvbiB0aGUg
J2luc3BlY3RlZCBwYWdlJyBzaWRlLgogSW5qZWN0ZWRTY3JpcHQucmVzZXQgPSBmdW5jdGlvbigp
CiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQuX2luc3BlY3RlZE5vZGVzID0gW107CiB9CiAKIEluamVj
dGVkU2NyaXB0LnJlc2V0KCk7CkBAIC0yMTksMjkgKzIxOCw2IEBAIEluamVjdGVkU2NyaXB0LnNl
dFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbihvYmplY3RQcm94eSwgcHJvcGVydHlOYW1lLCBleHBy
ZXNzaW9uCiAgICAgfQogfQogCi1JbmplY3RlZFNjcmlwdC5nZXROb2RlUHJvcGVydHlWYWx1ZSA9
IGZ1bmN0aW9uKG5vZGVJZCwgcHJvcGVydHlOYW1lKQotewotICAgIHZhciBub2RlID0gSW5qZWN0
ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHZhciByZXN1bHQgPSBub2RlW3Byb3BlcnR5TmFtZV07Ci0gICAgcmV0
dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZmFsc2U7Ci19Ci0KLUluamVjdGVk
U2NyaXB0LnNldE91dGVySFRNTCA9IGZ1bmN0aW9uKG5vZGVJZCwgdmFsdWUsIGV4cGFuZGVkKQot
ewotICAgIHZhciBub2RlID0gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFyIHBhcmVudCA9IG5v
ZGUucGFyZW50Tm9kZTsKLSAgICB2YXIgcHJldlNpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGlu
ZzsKLSAgICBub2RlLm91dGVySFRNTCA9IHZhbHVlOwotICAgIHZhciBuZXdOb2RlID0gcHJldlNp
YmxpbmcgPyBwcmV2U2libGluZy5uZXh0U2libGluZyA6IHBhcmVudC5maXJzdENoaWxkOwotCi0g
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0SG9zdC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5ld05v
ZGUsIGV4cGFuZGVkLCBmYWxzZSk7Ci19Ci0KIEluamVjdGVkU2NyaXB0Ll9wb3B1bGF0ZVByb3Bl
cnR5TmFtZXMgPSBmdW5jdGlvbihvYmplY3QsIHJlc3VsdFNldCkKIHsKICAgICBmb3IgKHZhciBv
ID0gb2JqZWN0OyBvOyBvID0gby5fX3Byb3RvX18pIHsKQEAgLTM0MywxOSArMzE5LDYgQEAgSW5q
ZWN0ZWRTY3JpcHQuX2V2YWx1YXRlT24gPSBmdW5jdGlvbihldmFsRnVuY3Rpb24sIG9iamVjdCwg
ZXhwcmVzc2lvbiwgZG9udFVzZUMKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLUluamVjdGVkU2Ny
aXB0LmFkZEluc3BlY3RlZE5vZGUgPSBmdW5jdGlvbihub2RlSWQpCi17Ci0gICAgdmFyIG5vZGUg
PSBJbmplY3RlZFNjcmlwdC5fbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB2YXIgaW5zcGVjdGVkTm9kZXMgPSBJbmplY3RlZFNj
cmlwdC5faW5zcGVjdGVkTm9kZXM7Ci0gICAgaW5zcGVjdGVkTm9kZXMudW5zaGlmdChub2RlKTsK
LSAgICBpZiAoaW5zcGVjdGVkTm9kZXMubGVuZ3RoID49IDUpCi0gICAgICAgIGluc3BlY3RlZE5v
ZGVzLnBvcCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBJbmplY3RlZFNjcmlwdC5nZXROb2Rl
SWQgPSBmdW5jdGlvbihub2RlKQogewogICAgIHJldHVybiBJbmplY3RlZFNjcmlwdEhvc3QucHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChub2RlLCBmYWxzZSwgZmFsc2UpOwpAQCAtNDAwLDE3ICszNjMs
MTAgQEAgSW5qZWN0ZWRTY3JpcHQuX2NhbGxGcmFtZUZvcklkID0gZnVuY3Rpb24oaWQpCiAgICAg
cmV0dXJuIGNhbGxGcmFtZTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQuY2xlYXJDb25zb2xlTWVzc2Fn
ZXMgPSBmdW5jdGlvbigpCi17Ci0gICAgSW5qZWN0ZWRTY3JpcHRIb3N0LmNsZWFyQ29uc29sZU1l
c3NhZ2VzKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIEluamVjdGVkU2NyaXB0Ll9yZXNvbHZl
T2JqZWN0ID0gZnVuY3Rpb24ob2JqZWN0UHJveHkpCiB7CiAgICAgdmFyIG9iamVjdCA9IEluamVj
dGVkU2NyaXB0Ll9vYmplY3RGb3JJZChvYmplY3RQcm94eS5vYmplY3RJZCk7CiAgICAgdmFyIHBh
dGggPSBvYmplY3RQcm94eS5wYXRoOwotICAgIHZhciBwcm90b0RlcHRoID0gb2JqZWN0UHJveHku
cHJvdG9EZXB0aDsKIAogICAgIC8vIEZvbGxvdyB0aGUgcHJvcGVydHkgcGF0aC4KICAgICBmb3Ig
KHZhciBpID0gMDsgSW5qZWN0ZWRTY3JpcHQuX2lzRGVmaW5lZChvYmplY3QpICYmIHBhdGggJiYg
aSA8IHBhdGgubGVuZ3RoOyArK2kpCkBAIC03MDcsNyArNjYzLDEzIEBAIEluamVjdGVkU2NyaXB0
Ll9ub3JtYWxpemVFdmVudFR5cGVzID0gZnVuY3Rpb24odHlwZXMpCiAgICAgICAgICAgICByZXN1
bHQucHVzaCh0eXBlc1tpXSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7Ci19OworfQorCitJ
bmplY3RlZFNjcmlwdC5faW5zcGVjdGVkTm9kZSA9IGZ1bmN0aW9uKG51bSkKK3sKKyAgICB2YXIg
bm9kZUlkID0gSW5qZWN0ZWRTY3JpcHRIb3N0Lmluc3BlY3RlZE5vZGUobnVtKTsKKyAgICByZXR1
cm4gSW5qZWN0ZWRTY3JpcHQuX25vZGVGb3JJZChub2RlSWQpOworfQogCiBmdW5jdGlvbiBDb21t
YW5kTGluZUFQSSgpCiB7CkBAIC04MjksMjcgKzc5MSwyNyBAQCBDb21tYW5kTGluZUFQSS5wcm90
b3R5cGUgPSB7CiAKICAgICBnZXQgJDAoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVk
U2NyaXB0Ll9pbnNwZWN0ZWROb2Rlc1swXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0
Ll9pbnNwZWN0ZWROb2RlKDApOwogICAgIH0sCiAKICAgICBnZXQgJDEoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2Rlc1sxXTsKKyAgICAgICAgcmV0
dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDEpOwogICAgIH0sCiAKICAgICBnZXQg
JDIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2Rl
c1syXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDIpOwog
ICAgIH0sCiAKICAgICBnZXQgJDMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEluamVjdGVkU2Ny
aXB0Ll9pbnNwZWN0ZWROb2Rlc1szXTsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0Ll9p
bnNwZWN0ZWROb2RlKDMpOwogICAgIH0sCiAKICAgICBnZXQgJDQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2Rlc1s0XTsKKyAgICAgICAgcmV0dXJu
IEluamVjdGVkU2NyaXB0Ll9pbnNwZWN0ZWROb2RlKDQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luamVjdGVkU2NyaXB0QWNjZXNzLmpzCmluZGV4
IGMzODgyMTMuLjhjY2M4NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9JbmplY3RlZFNjcmlwdEFjY2Vzcy5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuanMKQEAgLTcwLDE4ICs3MCwxNCBAQCBJbmplY3RlZFNj
cmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIgPSBmdW5jdGlvbihtZXRob2ROYW1lLCBhc3luYykK
IC8vIC0gTWFrZSBzdXJlIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyBpbiBJbmplY3RlZFNjcmlwdCBy
ZXR1cm4gbm9uLW51bGwgYW5kIG5vbi11bmRlZmluZWQgdmFsdWVzLAogLy8gLSBNYWtlIHN1cmUg
bGFzdCBwYXJhbWV0ZXIgb2YgYWxsIHRoZSBJbmplY3RlZFNyaXB0QWNjZXNzLiogY2FsbHMgaXMg
YSBjYWxsYmFjayBmdW5jdGlvbi4KIC8vIFdlIGtlZXAgdGhlc2Ugc29ydGVkLgotSW5qZWN0ZWRT
Y3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJhZGRJbnNwZWN0ZWROb2RlIik7Ci1JbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImNsZWFyQ29uc29sZU1lc3NhZ2VzIik7CiBJ
bmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlIik7CiBJbmplY3Rl
ZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoImV2YWx1YXRlSW5DYWxsRnJhbWUiKTsKIElu
amVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Q29tcGxldGlvbnMiKTsKLUlu
amVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0Tm9kZVByb3BlcnR5VmFsdWUi
KTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigiZ2V0UHJvcGVydGllcyIp
OwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJnZXRQcm90b3R5cGVzIik7
CiBJbmplY3RlZFNjcmlwdEFjY2Vzcy5faW5zdGFsbEhhbmRsZXIoIm9wZW5Jbkluc3BlY3RlZFdp
bmRvdyIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJwdXNoTm9kZVRv
RnJvbnRlbmQiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigibm9kZUJ5
UGF0aCIpOwotSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJzZXRPdXRlckhU
TUwiKTsKIEluamVjdGVkU2NyaXB0QWNjZXNzLl9pbnN0YWxsSGFuZGxlcigic2V0UHJvcGVydHlW
YWx1ZSIpOwogSW5qZWN0ZWRTY3JpcHRBY2Nlc3MuX2luc3RhbGxIYW5kbGVyKCJldmFsdWF0ZU9u
U2VsZiIpOwogCg==
</data>
<flag name="review"
          id="45467"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>