<?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>19933</bug_id>
          
          <creation_ts>2008-07-07 13:17:10 -0700</creation_ts>
          <short_desc>nodeIterator with filter fails on documents not in a frame</short_desc>
          <delta_ts>2008-07-11 10:58:25 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>dino</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>85381</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 13:17:10 -0700</bug_when>
    <thetext>I&apos;m trying to use node iterators on an XML document fetched via XMLHttpRequest, like this:

function subElementWithNodeName(inElement, inName)
{
  var upperName = inName.toUpperCase();
  var iter = document.createNodeIterator(inElement, NodeFilter.SHOW_ELEMENT, null);
  var curNode;
  while (curNode = iter.nextNode())
  {
    if (curNode.nodeName.toUpperCase() == upperName)
      return curNode;
  }
  return null;
}

However, iter.nextNode() always returns null right away, without giving back child elements of &apos;inElement&apos; (which do exist).

Some debugging reveals this:

short JSNodeFilterCondition::acceptNode(Node* filterNode, JSValue*&amp; exception) const
{
    // FIXME: It makes no sense for this to depend on the document being in a frame!
    Frame* frame = filterNode-&gt;document()-&gt;frame();
    if (!frame)
        return NodeFilter::FILTER_REJECT;

....

which is where it fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85382</commentid>
    <comment_count>1</comment_count>
      <attachid>22139</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 13:21:30 -0700</bug_when>
    <thetext>Created attachment 22139
Patch to pass ExecState down to node filters

Here&apos;s a first cut at a patch, with testcases. Some things that I&apos;m not clear about:
* Where should we call exec-&gt;clearException()?
* Which methods need to be null-exec safe? We should assert in the others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85383</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 13:22:41 -0700</bug_when>
    <thetext>&lt;rdar://problem/6054693&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85390</commentid>
    <comment_count>3</comment_count>
      <attachid>22139</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-07 14:47:23 -0700</bug_when>
    <thetext>Comment on attachment 22139
Patch to pass ExecState down to node filters

Great!

I would have made the ExecState* the first argument because that&apos;s the usual convention in code that involves ExecState, but I think it&apos;s OK to have it as the last one.

+    if (!exec)
+        return NodeFilter::FILTER_REJECT;

I think this merits a comment. Specifically that this case will only arise when calling from a non-JavaScript language to a JavaScript filter, when the document in question is not associated with a frame.

     if (exec-&gt;hadException()) {
-        exception = takeException(exec);
         return NodeFilter::FILTER_REJECT;
     }

One-line if statement bodies don&apos;t get braces in the WebKit coding style. Please remove the braces in these cases.

+        virtual short acceptNode(Node*, KJS::ExecState* exec) const;

We don&apos;t give the argument name in function declarations when the type makes the argument&apos;s purpose clear. So the name &quot;exec&quot; should be omitted here and in the various other similar places.

+    short result = impl()-&gt;acceptNode(toNode(args[0]), exec);
     return jsNumber(exec, result);

Why not merge this into a single line?

+    if (exec-&gt;hadException()) {
+        exec-&gt;clearException();
         return jsUndefined();
     }

The clearException here is incorrect. We do want to pass the exception on to the caller. This mistake should have made tests fail. I don&apos;t know why it didn&apos;t. I guess we don&apos;t have sufficient test coverage for our existing exception behavior!

+short ObjCNodeFilterCondition::acceptNode(Node* node, ExecState* exec) const

Although we haven&apos;t turned the warning on, we do omit the names of unused arguments. Please do that here.

+    if (node &amp;&amp; node-&gt;document()) {
+        Frame* frame = node-&gt;document()-&gt;frame();
+        if (frame)
+            return frame-&gt;script()-&gt;globalObject()-&gt;globalExec();
+    }
+    return 0;

We normally prefer the early return style. I&apos;d write it like this:

    if (!node)
        return 0;
    Document* document = node-&gt;document();
    if (!document)
        return 0;
    Frame* frame = document-&gt;frame();
    if (!frame)
        return 0;
    return frame-&gt;script()-&gt;globalObject()-&gt;globalExec();

Also, I&apos;m not sure we&apos;re guaranteed globalObject() can&apos;t be 0. What happens if JavaScript is disabled?

I think you need to do the execStateFromNode thing for NodeIterator as well as TreeWalker. You should move that function to Traversal and do it for both. Also I think it can be a static member function. But also, since you&apos;re using it for NodeFilter too, maybe you can find a place to put it where it can be one shared copy.

+        exec-&gt;clearException();  // rignt thing to do?

This is not the right thing to do, although it will do no harm. You can just leave this line of code out (and fix the typo that way).

+    if (exec)
+        exec-&gt;clearException();

Similarly, these are not needed, but will do no harm.

Please check Acid3 to make sure we still have 100/100.

review- for the incorrect clearException calls (the ones that will do harm) and the lack of execStateFromNode in NodeIterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85405</commentid>
    <comment_count>4</comment_count>
      <attachid>22145</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 16:43:37 -0700</bug_when>
    <thetext>Created attachment 22145
Revised patch addressing comments

New patch addressing review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85406</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 16:44:25 -0700</bug_when>
    <thetext>Note that previous patch did break exception tests; with this patch test succeed, and Acid3 passes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85411</commentid>
    <comment_count>6</comment_count>
      <attachid>22145</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-07-07 17:14:02 -0700</bug_when>
    <thetext>Comment on attachment 22145
Revised patch addressing comments

     /* exec should only be null when calling from a non-JavaScript language to
        a JavaScript filter, when the document in question is not associated
        with a frame
     */

We normally use &quot;//&quot; comments, not &quot;/*&quot;. I also would prefer that the comment be a sentence with a capital letter and period. Here&apos;s my suggested wording:

    // The exec argument here should only be null if this was called from a
    // non-JavaScript language, and this is a JavaScript filter, and the document
    // in question is not associated with the frame. In that case, we&apos;re going to
    // behave incorrectly, and just reject nodes instead of calling the filter function.
    // To fix that we&apos;d need to come up with a way to find a suitable JavaScript
    // execution context for the filter function to run in.

I know that&apos;s pretty wordy, sorry.

    /* static */
    ExecState* NodeFilter::execStateFromNode(Node* node)

We don&apos;t normally add a comment like this before a static member function.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85412</commentid>
    <comment_count>7</comment_count>
      <attachid>22146</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-07-07 17:22:20 -0700</bug_when>
    <thetext>Created attachment 22146
Final patch

Address final comments. Transferring r=darin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85430</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-07 20:21:44 -0700</bug_when>
    <thetext>committed by me - r35054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85493</commentid>
    <comment_count>9</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-08 15:06:13 -0700</bug_when>
    <thetext>Missed a test file. Now in r35064</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22139</attachid>
            <date>2008-07-07 13:21:30 -0700</date>
            <delta_ts>2008-07-07 16:43:37 -0700</delta_ts>
            <desc>Patch to pass ExecState down to node filters</desc>
            <filename>nodeiterator_patch.txt</filename>
            <type>text/plain</type>
            <size>34142</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjJhY2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVudHM6CisKK3JlY29yZHMK
KworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0dXJlcyAy
MDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9zcyB0aGUgVW5pdmVyc2Ug
MjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0xNSAyMDA3LTA5LTI4CisK
K2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0
dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNyb3NzIHRoZSBVbml2ZXJz
ZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQgcmF0ZWQKKworcG9zdGRh
dGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5LTI4CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbCBiL0xheW91dFRl
c3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk1NDFmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4g
Cis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFkPiAKKzxib2R5
PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9ImZvbnQtZmFt
aWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1s
JzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAgdmFyIHJlcXVl
c3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVuKCJHRVQiLCBk
YXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVycmlkZU1pbWVU
eXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7CisKKyAgICAg
ICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8gb25seSBpZiAi
T0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVxdWVzdC5zdGF0
dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAgICAgICAgICAg
ICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAgICAgaWYgKG4u
dGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7CisgICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0KKworICAgICAg
ZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBpdGVyID0gZG9j
dW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKHhtbERvYywgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQs
IHRlc3ROb2RlRml0ZXIpOworICAgICAgICB2YXIgY3VyTm9kZTsKKyAgICAgICAgd2hpbGUgKGN1
ck5vZGUgPSBpdGVyLm5leHROb2RlKCkpIHsKKyAgICAgICAgICBkb2N1bWVudC53cml0ZSgnPGgz
PicgKyBjdXJOb2RlLnRhZ05hbWUgKyAnPC9oMz48cD4nICsgY3VyTm9kZS50ZXh0Q29udGVudCAr
ICc8L3A+Jyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZldGNoWE1MKCk7CisKKyAgICA8
L3NjcmlwdD4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmF2ZXJzYWwvcmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1sIGIvTGF5
b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1kYXRhLnhtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI4OWFmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1k
YXRhLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPHJlY29yZHMgZGF0ZT0iTW9uLCAxOSBGZWIgMjAwNyAwMDo0MDozOSAtMDgwMCI+
CisgIDxtb3ZpZWluZm8gaWQ9IjIxNDciPgorICAgIDxpbmZvPgorICAgICAgPHRpdGxlPgorICAg
ICAgICBBY3Jvc3MgdGhlIFVuaXZlcnNlCisgICAgICA8L3RpdGxlPgorICAgICAgPHJ1bnRpbWU+
CisgICAgICAgIDI6MzAKKyAgICAgIDwvcnVudGltZT4KKyAgICAgIDxyYXRpbmc+CisgICAgICAg
IE5vdCB5ZXQgcmF0ZWQKKyAgICAgIDwvcmF0aW5nPgorICAgICAgPHN0dWRpbz4KKyAgICAgICAg
U29ueSBQaWN0dXJlcworICAgICAgPC9zdHVkaW8+CisgICAgICA8cG9zdGRhdGU+CisgICAgICAg
IDIwMDctMDItMTUKKyAgICAgIDwvcG9zdGRhdGU+CisgICAgICA8cmVsZWFzZWRhdGU+CisgICAg
ICAgIDIwMDctMDktMjgKKyAgICAgIDwvcmVsZWFzZWRhdGU+CisgICAgPC9pbmZvPgorICA8L21v
dmllaW5mbz4KKzwvcmVjb3Jkcz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC90
cmVlLXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3RyZWUt
d2Fsa2VyLTAwNi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTQ2MmFjYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYXZlcnNhbC90cmVl
LXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVu
dHM6CisKK3JlY29yZHMKKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQg
U29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9z
cyB0aGUgVW5pdmVyc2UgMjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0x
NSAyMDA3LTA5LTI4CisKK2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQg
cmF0ZWQgU29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNy
b3NzIHRoZSBVbml2ZXJzZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQg
cmF0ZWQKKworcG9zdGRhdGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5
LTI4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0
bWwgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYzBkZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3RyYXZlcnNhbC90cmVlLXdhbGtlci0wMDYuaHRtbApAQCAtMCwwICsxLDQ4IEBA
Cis8aHRtbD4gCis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFk
PiAKKzxib2R5PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9
ImZvbnQtZmFtaWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKworICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5
LWRhdGEueG1sJzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAg
dmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVu
KCJHRVQiLCBkYXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVy
cmlkZU1pbWVUeXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7
CisKKyAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8g
b25seSBpZiAiT0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVx
dWVzdC5zdGF0dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAg
ICAgICAgICAgICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAg
ICAgaWYgKG4udGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NL
SVA7CisgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0K
KworICAgICAgZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBp
dGVyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih4bWxEb2MsIE5vZGVGaWx0ZXIuU0hPV19F
TEVNRU5ULCB0ZXN0Tm9kZUZpdGVyLCBmYWxzZSk7CisgICAgICAgIHZhciBjdXJOb2RlOworICAg
ICAgICB3aGlsZSAoY3VyTm9kZSA9IGl0ZXIubmV4dE5vZGUoKSkgeworICAgICAgICAgIGRvY3Vt
ZW50LndyaXRlKCc8aDM+JyArIGN1ck5vZGUudGFnTmFtZSArICc8L2gzPjxwPicgKyBjdXJOb2Rl
LnRleHRDb250ZW50ICsgJzwvcD4nKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZmV0Y2hY
TUwoKTsKKworICAgIDwvc2NyaXB0PgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRleCA2MWMzOTRh
Li5jYjZhMGJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCkBAIC0yMCwyNiArMjAsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU05vZGVGaWx0ZXJDb25kaXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0
ZXIuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCi0vLyBGSVhNRTogQWRkIHRha2VFeGNlcHRpb24gYXMgYSBt
ZW1iZXIgb2YgRXhlY1N0YXRlPwotc3RhdGljIEpTVmFsdWUqIHRha2VFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGV4Y2VwdGlvbjsKLX0K
LQogSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZSog
ZmlsdGVyKQogICAgIDogbV9maWx0ZXIoZmlsdGVyKQogewpAQCAtNTEsMTMgKzQwLDggQEAgdm9p
ZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogICAgICAgICBtX2ZpbHRlci0+bWFyaygp
OwogfQogCi1zaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogZmls
dGVyTm9kZSwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKK3Nob3J0IEpTTm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBmaWx0ZXJOb2RlLCBFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IEl0IG1ha2VzIG5vIHNlbnNlIGZvciB0aGlzIHRvIGRlcGVu
ZCBvbiB0aGUgZG9jdW1lbnQgYmVpbmcgaW4gYSBmcmFtZSEKLSAgICBGcmFtZSogZnJhbWUgPSBm
aWx0ZXJOb2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwotCiAgICAgSlNMb2NrIGxvY2soZmFs
c2UpOwogCiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CkBAIC02NSwyMSArNDksMjAgQEAgc2hvcnQg
SlNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqIGZpbHRlck5vZGUsIEpTVmFs
dWUqJiBleGNlcHRpb24pIGMKICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQogICAg
ICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKIAotICAgIEV4ZWNTdGF0ZSog
ZXhlYyA9IGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAg
ICBpZiAoIWV4ZWMpCisgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwor
CiAgICAgQXJnTGlzdCBhcmdzOwogICAgIGFyZ3MuYXBwZW5kKHRvSlMoZXhlYywgZmlsdGVyTm9k
ZSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24g
PSB0YWtlRXhjZXB0aW9uKGV4ZWMpOwogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVS
X1JFSkVDVDsKICAgICB9CiAgICAgSlNWYWx1ZSogcmVzdWx0ID0gY2FsbChleGVjLCBtX2ZpbHRl
ciwgY2FsbFR5cGUsIGNhbGxEYXRhLCBtX2ZpbHRlciwgYXJncyk7CiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHRha2VFeGNlcHRpb24oZXhlYyk7
CiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwogICAgIH0KICAgICBp
bnQgaW50UmVzdWx0ID0gcmVzdWx0LT50b0ludDMyKGV4ZWMpOwogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24gPSB0YWtlRXhjZXB0aW9uKGV4ZWMpOwog
ICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKICAgICB9CiAgICAgcmV0
dXJuIGludFJlc3VsdDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmls
dGVyQ29uZGl0aW9uLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlv
bi5oCmluZGV4IDNhNDc0NzAuLjI2MGVmNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05v
ZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEtKUzo6SlNWYWx1
ZSogZmlsdGVyKTsKIAotICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSosIEtK
Uzo6SlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNj
ZXB0Tm9kZShOb2RlKiwgS0pTOjpFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OwogICAgICAgICB2aXJ0
dWFsIHZvaWQgbWFyaygpOwogCiAgICAgICAgIEtKUzo6SlNWYWx1ZSogbV9maWx0ZXI7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAKaW5kZXggY2FlMWQ1NC4uOGVk
Yjc1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcApAQCAt
NDMsMTAgKzQzLDcgQEAgdm9pZCBKU05vZGVGaWx0ZXI6Om1hcmsoKQogCiBKU1ZhbHVlKiBKU05v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgc2hvcnQgcmVzdWx0ID0gaW1w
bCgpLT5hY2NlcHROb2RlKHRvTm9kZShhcmdzWzBdKSwgZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhj
ZXB0aW9uKQotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBzaG9y
dCByZXN1bHQgPSBpbXBsKCktPmFjY2VwdE5vZGUodG9Ob2RlKGFyZ3NbMF0pLCBleGVjKTsKICAg
ICByZXR1cm4ganNOdW1iZXIoZXhlYywgcmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAppbmRleCAwMTYwMGJmLi40NmZlM2EyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcApAQCAtNDAsMTQg
KzQwLDEzIEBAIHZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmsoKQogSlNWYWx1ZSogSlNOb2RlSXRl
cmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwot
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShlYywgZXhjZXB0aW9uKTsK
KyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZWMsIGV4ZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUuZ2V0KCkp
OwpAQCAtNTYsMTQgKzU1LDEzIEBAIEpTVmFsdWUqIEpTTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiBKU1ZhbHVlKiBKU05vZGVJdGVy
YXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
IHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
OwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUoZWMsIGV4Y2Vw
dGlvbik7CisgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShlYywg
ZXhlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBpZiAoZXhjZXB0aW9u
KSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
bm9kZS5nZXQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtl
ckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAK
aW5kZXggN2U2OTJjMC4uMWVmY2NmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fs
a2VyQ3VzdG9tLmNwcApAQCAtMzksMTAgKzM5LDkgQEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmso
KQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwot
ICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnBhcmVudE5vZGUoZXhjZXB0aW9uKTsKLSAgICBpZiAo
ZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAg
IE5vZGUqIG5vZGUgPSBpbXBsKCktPnBhcmVudE5vZGUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgICByZXR1cm4gdG9KUyhleGVjLCBub2Rl
KTsKQEAgLTUwLDEwICs0OSw5IEBAIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVlKiBKU1Ry
ZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwo
KS0+Zmlyc3RDaGlsZChleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAg
ZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+
Zmlyc3RDaGlsZChleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtNjEsMTAgKzU5LDkgQEAg
SlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bGFzdENoaWxkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNl
cHRpb24gPSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RDaGlsZChleGNlcHRpb24p
OwotICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2Vw
dGlvbik7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bGFzdENoaWxkKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgbm9kZSk7CkBAIC03MiwxMCArNjksOSBAQCBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Omxh
c3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgCiBKU1Zh
bHVlKiBKU1RyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIE5vZGUqIG5v
ZGUgPSBpbXBsKCktPm5leHRTaWJsaW5nKGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikg
ewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBOb2RlKiBub2Rl
ID0gaW1wbCgpLT5uZXh0U2libGluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAgICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtODMs
MTAgKzc5LDkgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6
OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5w
cmV2aW91c1NpYmxpbmcoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
PnByZXZpb3VzU2libGluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
KyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiAgICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwpAQCAtOTQsMTAgKzg5
LDkgQEAgSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpw
cmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAg
IEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cHJldmlv
dXNOb2RlKGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICBleGVjLT5z
ZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91
c05vZGUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4
ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAg
IH0KICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKQEAgLTEwNSwxMCArOTksOSBAQCBKU1Zh
bHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRp
b24gPSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGV4Y2VwdGlvbik7Ci0g
ICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9u
KTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMs
IG5vZGUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1dlYkNv
cmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KaW5kZXggN2ZiNDJmNi4uMmFmYTk5MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCkBAIC02OTcsNyArNjk3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOwogICAgIH0KIAotICAg
IHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29u
c3Q7CisgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0OwogCiBwcml2YXRlOgogICAgIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGlkIDxET01O
b2RlRmlsdGVyPiBmaWx0ZXIpCkBAIC03MDgsNyArNzA4LDcgQEAgcHJpdmF0ZToKICAgICBSZXRh
aW5QdHI8aWQgPERPTU5vZGVGaWx0ZXI+ID4gbV9maWx0ZXI7CiB9OwogCi1zaG9ydCBPYmpDTm9k
ZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlLCBKU1ZhbHVlKiYpIGNvbnN0
CitzaG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlLCBF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4g
Tm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVG
aWx0ZXIuY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKaW5kZXggMTg0NGEyZC4uMGU0
MDI0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKKysrIGIvV2ViQ29y
ZS9kb20vTm9kZUZpbHRlci5jcHAKQEAgLTI1LDE0ICsyNSwzMCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29u
dHJvbGxlci5oIgorCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXNob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSwgSlNWYWx1ZSomIGV4
Y2VwdGlvbikgY29uc3QKK3Nob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSwg
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMg
ImVudW1lcmFsIGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAg
cmV0dXJuIG1fY29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9kZSwgZXhjZXB0
aW9uKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKKyAgICByZXR1cm4gbV9j
b25kaXRpb24gPyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShub2RlLCBleGVjKSA6IHN0YXRpY19j
YXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAorS0pTOjpFeGVjU3RhdGUqIE5vZGVGaWx0
ZXI6OmV4ZWNTdGF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKG5vZGUg
JiYgbm9kZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1
bWVudCgpLT5mcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpCisgICAgICAgICAgICByZXR1cm4g
ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKaW5kZXgg
ZTlmMjVlNi4uZjhkMTdlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCisr
KyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaApAQCAtNzAsMTQgKzcwLDE3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTm9kZUZpbHRlcihj
b25kaXRpb24pKTsKICAgICAgICAgfQogCi0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSos
IEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3Q7CisgICAgICAgIHNob3J0IGFjY2VwdE5v
ZGUoTm9kZSosIEtKUzo6RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZvaWQgbWFyaygpIHsg
bV9jb25kaXRpb24tPm1hcmsoKTsgfTsKIAogICAgICAgICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdz
LiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAg
ICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyBLSlM6OkpTVmFsdWUqIGV4
Y2VwdGlvbjsgcmV0dXJuIGFjY2VwdE5vZGUobm9kZSwgZXhjZXB0aW9uKTsgfQorICAgICAgICBz
aG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGFjY2VwdE5vZGUobm9k
ZSwgZXhlY1N0YXRlRnJvbU5vZGUobm9kZSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBO
b2RlRmlsdGVyKFBhc3NSZWZQdHI8Tm9kZUZpbHRlckNvbmRpdGlvbj4gY29uZGl0aW9uKSA6IG1f
Y29uZGl0aW9uKGNvbmRpdGlvbikgeyB9CisKKyAgICAgICAgS0pTOjpFeGVjU3RhdGUqIGV4ZWNT
dGF0ZUZyb21Ob2RlKE5vZGUqKSBjb25zdDsKKwogICAgICAgICBSZWZQdHI8Tm9kZUZpbHRlckNv
bmRpdGlvbj4gbV9jb25kaXRpb247CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9u
LmNwcAppbmRleCA0OGJkY2I0Li5mOGIwNDhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2Rl
RmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9u
LmNwcApAQCAtMzEsNyArMzEsNyBAQCB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXNob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSos
IEpTVmFsdWUqJikgY29uc3QKK3Nob3J0IE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUo
Tm9kZSosIEV4ZWNTdGF0ZSopIGNvbnN0CiB7CiAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9u
LmggYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKaW5kZXggNjkyNTBhNS4uNTAw
NzgxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCisrKyBi
L1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBLSlMgewotICAgIGNsYXNzIEpT
VmFsdWU7CisgICAgY2xhc3MgRXhlY1N0YXRlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlRmlsdGVy
Q29uZGl0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Tm9kZUZpbHRlckNvbmRpdGlvbj4gewogICAg
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+Tm9kZUZpbHRlckNvbmRpdGlvbigpIHsgfQotICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSosIEtKUzo6SlNWYWx1ZSomIGV4Y2Vw
dGlvbikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSos
IEtKUzo6RXhlY1N0YXRlKiBleGVjKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCkgeyB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9y
LmNwcCBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKaW5kZXggZTIyZThlNi4uNTRmZjRj
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9Ob2RlSXRlcmF0b3IuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxranMvRXhlY1N0YXRl
Lmg+CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtODUsNyArODYsNyBAQCBOb2RlSXRlcmF0b3I6On5O
b2RlSXRlcmF0b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1lbnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9y
KHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhj
ZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCitQYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJS
OwpAQCAtOTksMTAgKzEwMCwxMCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4
dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCiAgICAgICAgIC8v
IE5vZGVJdGVyYXRvcnMgdHJlYXQgdGhlIERPTSB0cmVlIGFzIGEgZmxhdCBsaXN0IG9mIG5vZGVz
LgogICAgICAgICAvLyBJbiBvdGhlciB3b3JkcywgRklMVEVSX1JFSkVDVCBkb2VzIG5vdCBwYXNz
IG92ZXIgZGVzY2VuZGFudHMKICAgICAgICAgLy8gb2YgdGhlIHJlamVjdGVkIG5vZGUuIEhlbmNl
LCBGSUxURVJfUkVKRUNUIGlzIHRoZSBzYW1lIGFzIEZJTFRFUl9TS0lQLgotICAgICAgICBleGNl
cHRpb24gPSAwOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOyAgLy8gcmlnbnQgdGhp
bmcgdG8gZG8/CiAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2Fu
ZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5v
ZGUocHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCksIGV4Y2VwdGlvbikgPT0gTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVDsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgYm9vbCBub2RlV2Fz
QWNjZXB0ZWQgPSBhY2NlcHROb2RlKHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpLCBleGVjKSA9PSBO
b2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVXYXNBY2NlcHRlZCkgewog
ICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2RlOwpAQCAtMTE1LDcg
KzExNiw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRp
b25Db2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2UoKTsKIH0KIAotUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShF
eGNlcHRpb25Db2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8Tm9kZT4g
Tm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBpZiAobV9kZXRhY2hlZCkgewogICAgICAgICBlYyA9IElOVkFMSURfU1RB
VEVfRVJSOwpAQCAtMTI5LDEwICsxMzAsMTAgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGkKICAg
ICAgICAgLy8gTm9kZUl0ZXJhdG9ycyB0cmVhdCB0aGUgRE9NIHRyZWUgYXMgYSBmbGF0IGxpc3Qg
b2Ygbm9kZXMuCiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMg
bm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9k
ZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCi0gICAg
ICAgIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7ICAvLyBy
aWdudCB0aGluZyB0byBkbz8KICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0
ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0g
YWNjZXB0Tm9kZShwcm92aXNpb25hbFJlc3VsdC5nZXQoKSwgZXhjZXB0aW9uKSA9PSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUocHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCksIGV4
ZWMpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9kZVdhc0FjY2Vw
dGVkKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZU5vZGUgPSBtX2NhbmRpZGF0ZU5vZGU7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaCBiL1dlYkNvcmUvZG9tL05vZGVJ
dGVyYXRvci5oCmluZGV4IDc1OGMxY2EuLjRjYTQzZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L05vZGVJdGVyYXRvci5oCisrKyBiL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5oCkBAIC00MSw4
ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgICAgICB+Tm9kZUl0
ZXJhdG9yKCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25D
b2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgUGFzc1JlZlB0cjxOb2Rl
PiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYsIEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7
CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYsIEtKUzo6
RXhlY1N0YXRlKiBleGVjKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUo
RXhjZXB0aW9uQ29kZSYsIEtKUzo6RXhlY1N0YXRlKiBleGVjKTsKICAgICAgICAgdm9pZCBkZXRh
Y2goKTsKIAogICAgICAgICBOb2RlKiByZWZlcmVuY2VOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWZlcmVuY2VOb2RlLm5vZGUuZ2V0KCk7IH0KQEAgLTUyLDggKzUyLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUqKTsKIAogICAgICAg
ICAvLyBGb3Igbm9uLUpTIGJpbmRpbmdzLiBTaWxlbnRseSBpZ25vcmVzIHRoZSBKYXZhU2NyaXB0
IGV4Y2VwdGlvbiBpZiBhbnkuCi0gICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gbmV4dE5vZGUoRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBuZXh0Tm9k
ZShlYywgZXhjZXB0aW9uKTsgfQotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9k
ZShFeGNlcHRpb25Db2RlJiBlYykgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIHBy
ZXZpb3VzTm9kZShlYywgZXhjZXB0aW9uKTsgfQorICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5l
eHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShlYywgMCk7IH0KKyAg
ICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIHByZXZpb3VzTm9kZShlYywgMCk7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIE5v
ZGVJdGVyYXRvcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVyZW5jZXMpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcCBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAK
aW5kZXggY2Y0NGQxNS4uMTZkMTdmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2Fs
LmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCkBAIC00MCwxNyArNDAsMTcgQEAg
VHJhdmVyc2FsOjpUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgdW5zaWduZWQg
d2hhdFRvU2hvdywgUGFzc1JlZlB0cjwKIHsKIH0KIAotc2hvcnQgVHJhdmVyc2FsOjphY2NlcHRO
b2RlKE5vZGUqIG5vZGUsIEpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0CitzaG9ydCBUcmF2ZXJz
YWw6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSwgRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBUbyBoYW5kbGUgWE1MIHByb3Blcmx5IHdlIHdvdWxkIGhhdmUgdG8gY2hlY2sg
bV9leHBhbmRFbnRpdHlSZWZlcmVuY2VzLgogCi0gICAgLy8gVGhlIGJpZCB0d2lkZGxpbmcgaGVy
ZSBpcyBkb25lIHRvIG1hcCBET00gbm9kZSB0eXBlcywgd2hpY2ggYXJlIGdpdmVuIGFzIGludGVn
ZXJzIGZyb20KKyAgICAvLyBUaGUgYml0IHR3aWRkbGluZyBoZXJlIGlzIGRvbmUgdG8gbWFwIERP
TSBub2RlIHR5cGVzLCB3aGljaCBhcmUgZ2l2ZW4gYXMgaW50ZWdlcnMgZnJvbQogICAgIC8vIDEg
dGhyb3VnaCAxMiwgdG8gd2hhdFRvU2hvdyBiaXQgbWFza3MuCiAgICAgaWYgKCEoKCgxIDw8IChu
b2RlLT5ub2RlVHlwZSgpIC0gMSkpICYgbV93aGF0VG9TaG93KSkpCiAgICAgICAgIHJldHVybiBO
b2RlRmlsdGVyOjpGSUxURVJfU0tJUDsKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICByZXR1
cm4gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICByZXR1cm4gbV9maWx0ZXItPmFjY2Vw
dE5vZGUobm9kZSwgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbV9maWx0ZXItPmFjY2VwdE5vZGUo
bm9kZSwgZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL1RyYXZlcnNhbC5oIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggY2E1
NDc5Ny4uZGNiZjI5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIv
V2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogbmFtZXNwYWNlIEtK
UyB7CiAgICAgY2xhc3MgSlNWYWx1ZTsKKyAgICBjbGFzcyBFeGVjU3RhdGU7CiB9CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQ2LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBUcmF2ZXJzYWwoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWdu
ZWQgd2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlS
ZWZlcmVuY2VzKTsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwgS0pTOjpKU1ZhbHVl
KiYganNFeGNlcHRpb24pIGNvbnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBL
SlM6OkV4ZWNTdGF0ZSogZXhlYykgY29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQ
dHI8Tm9kZT4gbV9yb290OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAg
Yi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAppbmRleCAwOWMxYzk1Li4wNGMyOWY4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAorKysgYi9XZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcApAQCAtMjUsOSArMjUsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUcmVlV2Fsa2VyLmgiCiAKKyNpbmNsdWRlIDxranMvRXhlY1N0YXRlLmg+CisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiB1
c2luZyBuYW1lc3BhY2UgS0pTOwpAQCAtNTUsMTYgKzU5LDE3IEBAIGlubGluZSBOb2RlKiBUcmVl
V2Fsa2VyOjpzZXRDdXJyZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1cm4gbV9j
dXJyZW50LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEpTVmFsdWUq
JiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBleGNlcHRpb24gPSAwOworICAgIGlmIChleGVjKQorICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAg
IHdoaWxlIChub2RlICE9IHJvb3QoKSkgewogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9u
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3Vs
dCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhlYyk7CisgICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChh
Y2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAg
ICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC03MiwxMiArNzcsMTMgQEAg
Tm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShKU1ZhbHVlKiYgZXhjZXB0aW9uKQogICAgIHJl
dHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEpTVmFsdWUqJiBleGNl
cHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICBleGNlcHRpb24gPSAwOworICAgIGlmIChleGVjKQorICAgICAgICBleGVjLT5jbGVhckV4
Y2VwdGlvbigpOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4
ZWMpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICBzd2l0Y2ggKGFjY2VwdE5vZGVSZXN1bHQpIHsKICAgICAg
ICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTEwNiwxMiArMTEyLDEz
IEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAg
ICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEpTVmFsdWUqJiBl
eGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQog
ewotICAgIGV4Y2VwdGlvbiA9IDA7CisgICAgaWYgKGV4ZWMpCisgICAgICAgIGV4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+bGFz
dENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQor
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBl
eGVjKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAg
ICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6CkBAIC0xNDAsMTYgKzE0Nywx
NyBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAg
ICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEpTVmFs
dWUqJiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGV4Y2VwdGlvbiA9IDA7CisgICAgaWYgKGV4ZWMpCisgICAgICAg
IGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJl
bnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICB3aGls
ZSAoMSkgewogICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBzaWJsaW5nID0gbm9kZS0+cHJldmlv
dXNTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUoc2libGluZy5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShzaWJsaW5nLmdldCgpLCBleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTY5LDI0ICsxNzcsMjUgQEAgTm9kZSogVHJlZVdh
bGtlcjo6cHJldmlvdXNTaWJsaW5nKEpTVmFsdWUqJiBleGNlcHRpb24pCiAgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCBub2RlID09IHJvb3Qo
KSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdl
dCgpLCBleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9k
ZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0K
IAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05v
ZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNl
cHRpb24gPSAwOworICAgIGlmIChleGVjKQorICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJv
b3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChS
ZWZQdHI8Tm9kZT4gc2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewot
ICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2libGluZy5n
ZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzaWJsaW5nLmdldCgpLCBleGVj
KTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAt
MjA2LDMwICsyMTUsMzEgQEAgTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoSlNWYWx1ZSom
IGV4Y2VwdGlvbikKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAg
aWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4Y2Vw
dGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVS
ZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4ZWMpOworICAgICAgICBpZiAoZXhlYyAm
JiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBp
ZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05v
ZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZXhjZXB0aW9uID0gMDsKKyAgICBpZiAoZXhlYykKKyAg
ICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1f
Y3VycmVudDsKICAgICB3aGlsZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgd2hpbGUgKE5v
ZGUqIHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAg
ICAgICBub2RlID0gcHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9k
ZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShub2RlLmdldCgpLCBleGVjKTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
aWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHdoaWxlIChOb2RlKiBsYXN0Q2hpbGQg
PSBub2RlLT5sYXN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBsYXN0Q2hpbGQ7
Ci0gICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQo
KSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAg
ICAgICAgIGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4ZWMpOwor
ICAgICAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJl
c3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTI0NSw4ICsyNTUsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05v
ZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgbm9kZSA9IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUobm9kZS5nZXQoKSwgZXhlYyk7CisgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVz
dWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0
Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC0yNTQsMTUgKzI2NCwxNiBAQCBOb2RlKiBUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gMDsK
IH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05v
ZGUqIFRyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNlcHRp
b24gPSAwOworICAgIGlmIChleGVjKQorICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOwog
ICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAgd2hpbGUg
KE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbm9kZSA9
IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAg
IHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4ZWMpOwor
ICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkp
OwpAQCAtMjcxLDggKzI4Miw4IEBAIENoaWxkcmVuOgogICAgIH0KICAgICB3aGlsZSAoTm9kZSog
bmV4dFNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3QoKSkpIHsKICAgICAg
ICAgbm9kZSA9IG5leHRTaWJsaW5nOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9u
KQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgp
LCBleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50KG5vZGUu
cmVsZWFzZSgpKTsKQEAgLTI4Miw0ICsyOTMsMTUgQEAgQ2hpbGRyZW46CiAgICAgcmV0dXJuIDA7
CiB9CiAKK0tKUzo6RXhlY1N0YXRlKiBUcmVlV2Fsa2VyOjpleGVjU3RhdGVGcm9tTm9kZShOb2Rl
KiBub2RlKSBjb25zdAoreworICAgIGlmIChub2RlICYmIG5vZGUtPmRvY3VtZW50KCkpIHsKKyAg
ICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICAgICAg
aWYgKGZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oIGIv
V2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCmluZGV4IDQxMzg4YmUuLmRlMWNiMWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAorKysgYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2Vy
LmgKQEAgLTQzLDI4ICs0MywzMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIE5vZGUq
IGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50LmdldCgpOyB9CiAgICAgICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoUGFzc1JlZlB0cjxOb2RlPiwgRXhjZXB0aW9uQ29kZSYpOwog
Ci0gICAgICAgIE5vZGUqIHBhcmVudE5vZGUoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAg
ICAgICAgTm9kZSogZmlyc3RDaGlsZChLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAg
ICBOb2RlKiBsYXN0Q2hpbGQoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgTm9k
ZSogcHJldmlvdXNTaWJsaW5nKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0gICAgICAgIE5v
ZGUqIG5leHRTaWJsaW5nKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0gICAgICAgIE5vZGUq
IHByZXZpb3VzTm9kZShLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBOb2RlKiBu
ZXh0Tm9kZShLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOworICAgICAgICBOb2RlKiBwYXJlbnRO
b2RlKEtKUzo6RXhlY1N0YXRlKiBleGVjKTsKKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZChLSlM6
OkV4ZWNTdGF0ZSogZXhlYyk7CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZChLSlM6OkV4ZWNTdGF0
ZSogZXhlYyk7CisgICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZyhLSlM6OkV4ZWNTdGF0ZSog
ZXhlYyk7CisgICAgICAgIE5vZGUqIG5leHRTaWJsaW5nKEtKUzo6RXhlY1N0YXRlKiBleGVjKTsK
KyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEtKUzo6RXhlY1N0YXRlKiBleGVjKTsKKyAgICAg
ICAgTm9kZSogbmV4dE5vZGUoS0pTOjpFeGVjU3RhdGUqIGV4ZWMpOwogCiAgICAgICAgIC8vIEZv
ciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0
aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgS0pTOjpKU1ZhbHVlKiBl
eGNlcHRpb247IHJldHVybiBwYXJlbnROb2RlKGV4Y2VwdGlvbik7IH0KLSAgICAgICAgTm9kZSog
Zmlyc3RDaGlsZCgpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBmaXJzdENoaWxk
KGV4Y2VwdGlvbik7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyBLSlM6OkpTVmFsdWUq
IGV4Y2VwdGlvbjsgcmV0dXJuIGxhc3RDaGlsZChleGNlcHRpb24pOyB9Ci0gICAgICAgIE5vZGUq
IHByZXZpb3VzU2libGluZygpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBwcmV2
aW91c1NpYmxpbmcoZXhjZXB0aW9uKTsgfQotICAgICAgICBOb2RlKiBuZXh0U2libGluZygpIHsg
S0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBuZXh0U2libGluZyhleGNlcHRpb24pOyB9
Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247
IHJldHVybiBwcmV2aW91c05vZGUoZXhjZXB0aW9uKTsgfQotICAgICAgICBOb2RlKiBuZXh0Tm9k
ZSgpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBuZXh0Tm9kZShleGNlcHRpb24p
OyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBwYXJlbnROb2RlKGV4ZWNT
dGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIGZpcnN0Q2hp
bGQoKSB7IHJldHVybiBmaXJzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQo
KSkpOyB9CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZCgpIHsgcmV0dXJuIGxhc3RDaGlsZChleGVj
U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBwcmV2aW91
c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmcoZXhlY1N0YXRlRnJvbU5vZGUobV9j
dXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmcoKSB7IHJldHVybiBu
ZXh0U2libGluZyhleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAg
ICBOb2RlKiBwcmV2aW91c05vZGUoKSB7IHJldHVybiBwcmV2aW91c05vZGUoZXhlY1N0YXRlRnJv
bU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbmV4dE5vZGUoKSB7IHJl
dHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgVHJlZVdhbGtlcihQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25l
ZCB3aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpOwogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0Q3VycmVudChQYXNzUmVmUHRy
PE5vZGU+KTsKIAorICAgICAgICBLSlM6OkV4ZWNTdGF0ZSogZXhlY1N0YXRlRnJvbU5vZGUoTm9k
ZSopIGNvbnN0OworCiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX2N1cnJlbnQ7CiAgICAgfTsKIAo=
</data>
<flag name="review"
          id="9747"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22145</attachid>
            <date>2008-07-07 16:43:37 -0700</date>
            <delta_ts>2008-07-07 17:22:20 -0700</delta_ts>
            <desc>Revised patch addressing comments</desc>
            <filename>nodeiterator_patch.txt</filename>
            <type>text/plain</type>
            <size>33235</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjJhY2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVudHM6CisKK3JlY29yZHMK
KworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0dXJlcyAy
MDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9zcyB0aGUgVW5pdmVyc2Ug
MjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0xNSAyMDA3LTA5LTI4CisK
K2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0
dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNyb3NzIHRoZSBVbml2ZXJz
ZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQgcmF0ZWQKKworcG9zdGRh
dGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5LTI4CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbCBiL0xheW91dFRl
c3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk1NDFmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4g
Cis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFkPiAKKzxib2R5
PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9ImZvbnQtZmFt
aWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1s
JzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAgdmFyIHJlcXVl
c3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVuKCJHRVQiLCBk
YXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVycmlkZU1pbWVU
eXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7CisKKyAgICAg
ICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8gb25seSBpZiAi
T0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVxdWVzdC5zdGF0
dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAgICAgICAgICAg
ICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAgICAgaWYgKG4u
dGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7CisgICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0KKworICAgICAg
ZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBpdGVyID0gZG9j
dW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKHhtbERvYywgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQs
IHRlc3ROb2RlRml0ZXIpOworICAgICAgICB2YXIgY3VyTm9kZTsKKyAgICAgICAgd2hpbGUgKGN1
ck5vZGUgPSBpdGVyLm5leHROb2RlKCkpIHsKKyAgICAgICAgICBkb2N1bWVudC53cml0ZSgnPGgz
PicgKyBjdXJOb2RlLnRhZ05hbWUgKyAnPC9oMz48cD4nICsgY3VyTm9kZS50ZXh0Q29udGVudCAr
ICc8L3A+Jyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZldGNoWE1MKCk7CisKKyAgICA8
L3NjcmlwdD4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmF2ZXJzYWwvcmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1sIGIvTGF5
b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1kYXRhLnhtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI4OWFmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1k
YXRhLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPHJlY29yZHMgZGF0ZT0iTW9uLCAxOSBGZWIgMjAwNyAwMDo0MDozOSAtMDgwMCI+
CisgIDxtb3ZpZWluZm8gaWQ9IjIxNDciPgorICAgIDxpbmZvPgorICAgICAgPHRpdGxlPgorICAg
ICAgICBBY3Jvc3MgdGhlIFVuaXZlcnNlCisgICAgICA8L3RpdGxlPgorICAgICAgPHJ1bnRpbWU+
CisgICAgICAgIDI6MzAKKyAgICAgIDwvcnVudGltZT4KKyAgICAgIDxyYXRpbmc+CisgICAgICAg
IE5vdCB5ZXQgcmF0ZWQKKyAgICAgIDwvcmF0aW5nPgorICAgICAgPHN0dWRpbz4KKyAgICAgICAg
U29ueSBQaWN0dXJlcworICAgICAgPC9zdHVkaW8+CisgICAgICA8cG9zdGRhdGU+CisgICAgICAg
IDIwMDctMDItMTUKKyAgICAgIDwvcG9zdGRhdGU+CisgICAgICA8cmVsZWFzZWRhdGU+CisgICAg
ICAgIDIwMDctMDktMjgKKyAgICAgIDwvcmVsZWFzZWRhdGU+CisgICAgPC9pbmZvPgorICA8L21v
dmllaW5mbz4KKzwvcmVjb3Jkcz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC90
cmVlLXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3RyZWUt
d2Fsa2VyLTAwNi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTQ2MmFjYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYXZlcnNhbC90cmVl
LXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVu
dHM6CisKK3JlY29yZHMKKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQg
U29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9z
cyB0aGUgVW5pdmVyc2UgMjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0x
NSAyMDA3LTA5LTI4CisKK2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQg
cmF0ZWQgU29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNy
b3NzIHRoZSBVbml2ZXJzZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQg
cmF0ZWQKKworcG9zdGRhdGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5
LTI4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0
bWwgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYzBkZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3RyYXZlcnNhbC90cmVlLXdhbGtlci0wMDYuaHRtbApAQCAtMCwwICsxLDQ4IEBA
Cis8aHRtbD4gCis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFk
PiAKKzxib2R5PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9
ImZvbnQtZmFtaWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKworICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5
LWRhdGEueG1sJzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAg
dmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVu
KCJHRVQiLCBkYXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVy
cmlkZU1pbWVUeXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7
CisKKyAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8g
b25seSBpZiAiT0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVx
dWVzdC5zdGF0dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAg
ICAgICAgICAgICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAg
ICAgaWYgKG4udGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NL
SVA7CisgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0K
KworICAgICAgZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBp
dGVyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih4bWxEb2MsIE5vZGVGaWx0ZXIuU0hPV19F
TEVNRU5ULCB0ZXN0Tm9kZUZpdGVyLCBmYWxzZSk7CisgICAgICAgIHZhciBjdXJOb2RlOworICAg
ICAgICB3aGlsZSAoY3VyTm9kZSA9IGl0ZXIubmV4dE5vZGUoKSkgeworICAgICAgICAgIGRvY3Vt
ZW50LndyaXRlKCc8aDM+JyArIGN1ck5vZGUudGFnTmFtZSArICc8L2gzPjxwPicgKyBjdXJOb2Rl
LnRleHRDb250ZW50ICsgJzwvcD4nKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZmV0Y2hY
TUwoKTsKKworICAgIDwvc2NyaXB0PgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRleCA2MWMzOTRh
Li5jMjE1MzEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCkBAIC0yMCwyNiArMjAsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU05vZGVGaWx0ZXJDb25kaXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0
ZXIuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCi0vLyBGSVhNRTogQWRkIHRha2VFeGNlcHRpb24gYXMgYSBt
ZW1iZXIgb2YgRXhlY1N0YXRlPwotc3RhdGljIEpTVmFsdWUqIHRha2VFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGV4Y2VwdGlvbjsKLX0K
LQogSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZSog
ZmlsdGVyKQogICAgIDogbV9maWx0ZXIoZmlsdGVyKQogewpAQCAtNTEsMTMgKzQwLDggQEAgdm9p
ZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogICAgICAgICBtX2ZpbHRlci0+bWFyaygp
OwogfQogCi1zaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogZmls
dGVyTm9kZSwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKK3Nob3J0IEpTTm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9k
ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSXQgbWFrZXMgbm8gc2Vuc2UgZm9yIHRoaXMgdG8g
ZGVwZW5kIG9uIHRoZSBkb2N1bWVudCBiZWluZyBpbiBhIGZyYW1lIQotICAgIEZyYW1lKiBmcmFt
ZSA9IGZpbHRlck5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7Ci0KICAgICBKU0xvY2sgbG9j
ayhmYWxzZSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTY1LDIzICs0OSwyNiBAQCBz
aG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogZmlsdGVyTm9kZSwg
SlNWYWx1ZSomIGV4Y2VwdGlvbikgYwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
CiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogCi0gICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OworICAgIC8qIGV4ZWMgc2hvdWxkIG9ubHkgYmUgbnVsbCB3aGVuIGNhbGxpbmcgZnJvbSBhIG5v
bi1KYXZhU2NyaXB0IGxhbmd1YWdlIHRvCisgICAgICAgYSBKYXZhU2NyaXB0IGZpbHRlciwgd2hl
biB0aGUgZG9jdW1lbnQgaW4gcXVlc3Rpb24gaXMgbm90IGFzc29jaWF0ZWQKKyAgICAgICB3aXRo
IGEgZnJhbWUKKyAgICAqLworICAgIGlmICghZXhlYykKKyAgICAgICAgcmV0dXJuIE5vZGVGaWx0
ZXI6OkZJTFRFUl9SRUpFQ1Q7CisKICAgICBBcmdMaXN0IGFyZ3M7CiAgICAgYXJncy5hcHBlbmQo
dG9KUyhleGVjLCBmaWx0ZXJOb2RlKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHRha2VFeGNlcHRpb24oZXhlYyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVD
VDsKLSAgICB9CisKICAgICBKU1ZhbHVlKiByZXN1bHQgPSBjYWxsKGV4ZWMsIG1fZmlsdGVyLCBj
YWxsVHlwZSwgY2FsbERhdGEsIG1fZmlsdGVyLCBhcmdzKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdGFrZUV4Y2VwdGlvbihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpG
SUxURVJfUkVKRUNUOwotICAgIH0KKwogICAgIGludCBpbnRSZXN1bHQgPSByZXN1bHQtPnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbiA9IHRha2VFeGNlcHRpb24oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVDsKLSAgICB9CisKICAg
ICByZXR1cm4gaW50UmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0
ZXJDb25kaXRpb24uaAppbmRleCAzYTQ3NDcwLi5iZDMxNjUwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIEpTTm9kZUZpbHRlckNvbmRpdGlvbihL
SlM6OkpTVmFsdWUqIGZpbHRlcik7CiAKLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2Rl
KE5vZGUqLCBLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pIGNvbnN0OworICAgICAgICB2aXJ0dWFs
IHNob3J0IGFjY2VwdE5vZGUoS0pTOjpFeGVjU3RhdGUqLCBOb2RlKikgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBtYXJrKCk7CiAKICAgICAgICAgS0pTOjpKU1ZhbHVlKiBtX2ZpbHRlcjsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3VzdG9tLmNwcAppbmRleCBjYWUxZDU0
Li40YjM3NDBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1
c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3Bw
CkBAIC00MywxMSArNDMsNyBAQCB2b2lkIEpTTm9kZUZpbHRlcjo6bWFyaygpCiAKIEpTVmFsdWUq
IEpTTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBzaG9ydCByZXN1bHQg
PSBpbXBsKCktPmFjY2VwdE5vZGUodG9Ob2RlKGFyZ3NbMF0pLCBleGNlcHRpb24pOwotICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwotICAg
IHJldHVybiBqc051bWJlcihleGVjLCByZXN1bHQpOworICAgIHJldHVybiBqc051bWJlcihleGVj
LCBpbXBsKCktPmFjY2VwdE5vZGUoZXhlYywgdG9Ob2RlKGFyZ3NbMF0pKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8Tm9kZUZpbHRlcj4gdG9Ob2RlRmlsdGVyKEpTVmFsdWUqIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVJdGVyYXRvckN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAppbmRleCAwMTYwMGJmLi5lNzYx
NDFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcApA
QCAtNDAsMzIgKzQwLDMwIEBAIHZvaWQgSlNOb2RlSXRlcmF0b3I6Om1hcmsoKQogSlNWYWx1ZSog
SlNOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBKU1ZhbHVlKiBleGNlcHRp
b24gPSAwOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShlYywgZXhj
ZXB0aW9uKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+bmV4dE5vZGUoZXhlYywg
ZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgaWYgKGV4Y2VwdGlvbikg
ewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKworICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQor
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7CiB9CiAKIEpTVmFsdWUqIEpTTm9k
ZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUqIGV4Y2VwdGlv
biA9IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShlYywg
ZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2Rl
KGV4ZWMsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQotICAgIGlmIChleGNl
cHRpb24pIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KKwogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUuZ2V0KCkpOwogfQogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAKaW5kZXggN2U2OTJjMC4uNzY5Njcx
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcApAQCAtMzks
NzggKzM5LDU3IEBAIHZvaWQgSlNUcmVlV2Fsa2VyOjptYXJrKCkKICAgICAKIEpTVmFsdWUqIEpT
VHJlZVdhbGtlcjo6cGFyZW50Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1w
bCgpLT5wYXJlbnROb2RlKGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgp
LT5wYXJlbnROb2RlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5v
ZGUpOwogfQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24g
PSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmZpcnN0Q2hpbGQoZXhjZXB0aW9uKTsKLSAg
ICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24p
OworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmZpcnN0Q2hpbGQoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVX
YWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5s
YXN0Q2hpbGQoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxhc3RD
aGlsZChleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgIH0KICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0K
ICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0g
ICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNpYmxpbmcoZXhjZXB0aW9uKTsKLSAgICBpZiAo
ZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAg
IE5vZGUqIG5vZGUgPSBpbXBsKCktPm5leHRTaWJsaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogICAg
IHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2Vy
OjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQog
ewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+
cHJldmlvdXNTaWJsaW5nKGV4Y2VwdGlvbik7Ci0gICAgaWYgKGV4Y2VwdGlvbikgewotICAgICAg
ICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKyAgICBOb2RlKiBub2RlID0gaW1wbCgp
LT5wcmV2aW91c1NpYmxpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAgcmV0dXJuIHRvSlMoZXhl
Yywgbm9kZSk7CiB9CiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhj
ZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUoZXhjZXB0
aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihl
eGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGVjKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAgICAKIEpTVmFs
dWUqIEpTVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7Ci0gICAgTm9kZSogbm9kZSA9
IGltcGwoKS0+bmV4dE5vZGUoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBs
KCktPm5leHROb2RlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5v
ZGUpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tIGIvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA3ZmI0MmY2Li4zM2NiMzVjIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET00ubW0KQEAgLTY5Nyw3ICs2OTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24oZmlsdGVyKSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoRXhlY1N0YXRlKiwgTm9kZSopIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uKGlkIDxET01Ob2Rl
RmlsdGVyPiBmaWx0ZXIpCkBAIC03MDgsNyArNzA4LDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5Q
dHI8aWQgPERPTU5vZGVGaWx0ZXI+ID4gbV9maWx0ZXI7CiB9OwogCi1zaG9ydCBPYmpDTm9kZUZp
bHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShOb2RlKiBub2RlLCBKU1ZhbHVlKiYpIGNvbnN0Citz
aG9ydCBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2Rl
KiBub2RlKSBjb25zdAogewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0
ZXI6OkZJTFRFUl9SRUpFQ1Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNw
cCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCmluZGV4IDE4NDRhMmQuLmNlNmRjMjIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXIuY3BwCkBAIC0yNSwxNCArMjUsMzggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKKwogdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9y
dCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKE5vZGUqIG5vZGUsIEpTVmFsdWUqJiBleGNlcHRpb24p
IGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9k
ZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBjYXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJh
bCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGluIHJldHVybiIgd2FybmluZwotICAgIHJldHVybiBt
X2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKG5vZGUsIGV4Y2VwdGlvbikgOiBz
dGF0aWNfY2FzdDxzaG9ydD4oRklMVEVSX0FDQ0VQVCk7CisgICAgcmV0dXJuIG1fY29uZGl0aW9u
ID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUoZXhlYywgbm9kZSkgOiBzdGF0aWNfY2FzdDxzaG9y
dD4oRklMVEVSX0FDQ0VQVCk7CiB9CiAKKy8qIHN0YXRpYyAqLworRXhlY1N0YXRlKiBOb2RlRmls
dGVyOjpleGVjU3RhdGVGcm9tTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghZnJhbWUtPnNjcmlwdCgpLT5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXIuaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAppbmRleCBl
OWYyNWU2Li5kMGFmYjljIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKKysr
IGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCkBAIC03MCwxNCArNzAsMTggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlRmlsdGVyKGNv
bmRpdGlvbikpOwogICAgICAgICB9CiAKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwg
S0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9k
ZShLSlM6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdm9pZCBtYXJrKCkgeyBt
X2NvbmRpdGlvbi0+bWFyaygpOyB9OwogCiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3Mu
IFNpbGVudGx5IGlnbm9yZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiBub2RlKSBjb25zdCB7IEtKUzo6SlNWYWx1ZSogZXhj
ZXB0aW9uOyByZXR1cm4gYWNjZXB0Tm9kZShub2RlLCBleGNlcHRpb24pOyB9CisgICAgICAgIHNo
b3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0Tm9kZShleGVj
U3RhdGVGcm9tTm9kZShub2RlKSwgbm9kZSk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIEtKUzo6RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tTm9kZShOb2RlKik7CiAKICAgICBwcml2
YXRlOgogICAgICAgICBOb2RlRmlsdGVyKFBhc3NSZWZQdHI8Tm9kZUZpbHRlckNvbmRpdGlvbj4g
Y29uZGl0aW9uKSA6IG1fY29uZGl0aW9uKGNvbmRpdGlvbikgeyB9CisKICAgICAgICAgUmVmUHRy
PE5vZGVGaWx0ZXJDb25kaXRpb24+IG1fY29uZGl0aW9uOwogICAgIH07CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKaW5kZXggNDhiZGNiNC4uMGZkMzUxMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKQEAgLTMxLDcgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2Nl
cHROb2RlKE5vZGUqLCBKU1ZhbHVlKiYpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9u
OjphY2NlcHROb2RlKEV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAogewogICAgIHJldHVybiBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4
IDY5MjUwYTUuLjg1YTk1OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25k
aXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTI4LDcg
KzI4LDcgQEAKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgS0pTIHsK
LSAgICBjbGFzcyBKU1ZhbHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25k
aXRpb24+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRp
b24oKSB7IH0KLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBLSlM6OkpT
VmFsdWUqJiBleGNlcHRpb24pIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2Nl
cHROb2RlKEtKUzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVh
bCB2b2lkIG1hcmsoKSB7IH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2Rl
SXRlcmF0b3IuY3BwIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAppbmRleCBlMjJlOGU2
Li5lZjQ5YTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBi
L1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgPGtqcy9F
eGVjU3RhdGUuaD4KICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCkBAIC04NSw3ICs4Niw3IEBAIE5vZGVJdGVy
YXRvcjo6fk5vZGVJdGVyYXRvcigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgpLT5kZXRhY2hOb2Rl
SXRlcmF0b3IodGhpcyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0
Tm9kZShFeGNlcHRpb25Db2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8
Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9T
VEFURV9FUlI7CkBAIC05OSwxMCArMTAwLDkgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0
b3I6Om5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKQogICAg
ICAgICAvLyBOb2RlSXRlcmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBv
ZiBub2Rlcy4KICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBu
b3QgcGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2Rl
LiBIZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAg
ICAgZXhjZXB0aW9uID0gMDsKICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0
ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0g
YWNjZXB0Tm9kZShwcm92aXNpb25hbFJlc3VsdC5nZXQoKSwgZXhjZXB0aW9uKSA9PSBOb2RlRmls
dGVyOjpGSUxURVJfQUNDRVBUOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2Rl
V2FzQWNjZXB0ZWQpIHsKICAgICAgICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRl
Tm9kZTsKQEAgLTExNSw3ICsxMTUsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6
bmV4dE5vZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9y
OjpwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCitQ
YXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAg
ZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKQEAgLTEyOSwxMCArMTI5LDkgQEAgUGFzc1JlZlB0cjxO
b2RlPiBOb2RlSXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYywgSlNWYWx1
ZSomIGV4Y2VwdGkKICAgICAgICAgLy8gTm9kZUl0ZXJhdG9ycyB0cmVhdCB0aGUgRE9NIHRyZWUg
YXMgYSBmbGF0IGxpc3Qgb2Ygbm9kZXMuCiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxU
RVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0
aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklM
VEVSX1NLSVAuCi0gICAgICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBw
cm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29sIG5v
ZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUocHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCksIGV4Y2Vw
dGlvbikgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAgICAgaWYgKGV4Y2VwdGlv
bikKKyAgICAgICAgYm9vbCBub2RlV2FzQWNjZXB0ZWQgPSBhY2NlcHROb2RlKGV4ZWMsIHByb3Zp
c2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOworICAgICAg
ICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBpZiAobm9kZVdhc0FjY2VwdGVkKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZU5v
ZGUgPSBtX2NhbmRpZGF0ZU5vZGU7CkBAIC0yMjcsNCArMjI2LDUgQEAgdm9pZCBOb2RlSXRlcmF0
b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKE5vZGUqIHJlbW92ZWROb2RlLCBOb2RlUG9pbnRlciYg
cmVmZXJlbmMKICAgICB9CiB9CiAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmggYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3Iu
aAppbmRleCA3NThjMWNhLi5kMmM2MDc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRl
cmF0b3IuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaApAQCAtMjUsNiArMjUsNyBA
QAogI2lmbmRlZiBOb2RlSXRlcmF0b3JfaAogI2RlZmluZSBOb2RlSXRlcmF0b3JfaAogCisjaW5j
bHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIlRyYXZlcnNhbC5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQxLDggKzQy
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0
b3IoKTsKIAotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUm
LCBLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHBy
ZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShLSlM6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoS0pTOjpFeGVj
U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAg
ICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5u
b2RlLmdldCgpOyB9CkBAIC01Miw4ICs1Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1K
UyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYg
YW55LgotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IEtKUzo6SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4gbmV4dE5vZGUoZWMsIGV4Y2VwdGlv
bik7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgS0pTOjpKU1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBwcmV2aW91c05vZGUoZWMs
IGV4Y2VwdGlvbik7IH0KKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUoTm9kZUZpbHRlcjo6ZXhlY1N0YXRlRnJvbU5v
ZGUocmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJl
dmlvdXNOb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBwcmV2aW91c05vZGUoTm9kZUZp
bHRlcjo6ZXhlY1N0YXRlRnJvbU5vZGUocmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBOb2RlSXRlcmF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQg
d2hhdFRvU2hvdywgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZl
cmVuY2VzKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAgYi9XZWJDb3Jl
L2RvbS9UcmF2ZXJzYWwuY3BwCmluZGV4IGNmNDRkMTUuLjM5MDljN2YgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAKKysrIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcApA
QCAtNDAsMTcgKzQwLDE3IEBAIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4g
cm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8CiB7CiB9CiAKLXNob3J0
IFRyYXZlcnNhbDo6YWNjZXB0Tm9kZShOb2RlKiBub2RlLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBj
b25zdAorc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSog
bm9kZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVG8gaGFuZGxlIFhNTCBwcm9wZXJseSB3ZSB3
b3VsZCBoYXZlIHRvIGNoZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcy4KIAotICAgIC8vIFRo
ZSBiaWQgdHdpZGRsaW5nIGhlcmUgaXMgZG9uZSB0byBtYXAgRE9NIG5vZGUgdHlwZXMsIHdoaWNo
IGFyZSBnaXZlbiBhcyBpbnRlZ2VycyBmcm9tCisgICAgLy8gVGhlIGJpdCB0d2lkZGxpbmcgaGVy
ZSBpcyBkb25lIHRvIG1hcCBET00gbm9kZSB0eXBlcywgd2hpY2ggYXJlIGdpdmVuIGFzIGludGVn
ZXJzIGZyb20KICAgICAvLyAxIHRocm91Z2ggMTIsIHRvIHdoYXRUb1Nob3cgYml0IG1hc2tzLgog
ICAgIGlmICghKCgoMSA8PCAobm9kZS0+bm9kZVR5cGUoKSAtIDEpKSAmIG1fd2hhdFRvU2hvdykp
KQogICAgICAgICByZXR1cm4gTm9kZUZpbHRlcjo6RklMVEVSX1NLSVA7CiAgICAgaWYgKCFtX2Zp
bHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgcmV0
dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKG5vZGUsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIG1f
ZmlsdGVyLT5hY2NlcHROb2RlKGV4ZWMsIG5vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaCBiL1dlYkNvcmUvZG9tL1Ry
YXZlcnNhbC5oCmluZGV4IGNhNTQ3OTcuLjdhOTIyYjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L1RyYXZlcnNhbC5oCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCkBAIC0zMCw2ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBLSlMgewogICAgIGNsYXNzIEpTVmFsdWU7CisgICAgY2xhc3MgRXhl
Y1N0YXRlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0Nyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgVHJhdmVyc2FsKFBhc3NS
ZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4s
IGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUo
Tm9kZSosIEtKUzo6SlNWYWx1ZSomIGpzRXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZShLSlM6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZlB0cjxOb2RlPiBtX3Jvb3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9U
cmVlV2Fsa2VyLmNwcCBiL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCmluZGV4IDA5YzFjOTUu
LjQ0OWNiNjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCisrKyBiL1dl
YkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogCisjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0
ZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5j
bHVkZSAiTm9kZUZpbHRlci5oIgpAQCAtNTUsMTYgKzU2LDE1IEBAIGlubGluZSBOb2RlKiBUcmVl
V2Fsa2VyOjpzZXRDdXJyZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1cm4gbV9j
dXJyZW50LmdldCgpOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEpTVmFsdWUq
JiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBleGNlcHRpb24gPSAwOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJy
ZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewogICAgICAgICBub2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwg
ZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChl
eGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC03MiwxMiAr
NzIsMTEgQEAgTm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShKU1ZhbHVlKiYgZXhjZXB0aW9u
KQogICAgIHJldHVybiAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEpTVmFs
dWUqJiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICBleGNlcHRpb24gPSAwOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHRO
b2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzd2l0Y2ggKGFjY2VwdE5v
ZGVSZXN1bHQpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoK
QEAgLTEwNiwxMiArMTA1LDExIEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoSlNWYWx1
ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFz
dENoaWxkKEpTVmFsdWUqJiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQo
RXhlY1N0YXRlKiBleGVjKQogewotICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgZm9yIChSZWZQdHI8
Tm9kZT4gbm9kZSA9IG1fY3VycmVudC0+bGFzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24p
OwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNo
IChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRF
Ul9BQ0NFUFQ6CkBAIC0xNDAsMTYgKzEzOCwxNSBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hp
bGQoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdh
bGtlcjo6cHJldmlvdXNTaWJsaW5nKEpTVmFsdWUqJiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fs
a2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGV4Y2VwdGlvbiA9
IDA7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0g
cm9vdCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3Ig
KFJlZlB0cjxOb2RlPiBzaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7
ICkgewotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2li
bGluZy5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJsaW5n
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2Rl
UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
OgpAQCAtMTY5LDI0ICsxNjYsMjMgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5n
KEpTVmFsdWUqJiBleGNlcHRpb24pCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7
CiAgICAgICAgIGlmICghbm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdl
dCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKKyAgICAgICAg
aWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQ
VCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6
bmV4dFNpYmxpbmcoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05vZGUqIFRyZWVXYWxrZXI6Om5leHRT
aWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNlcHRpb24gPSAwOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4g
c2libGluZyA9IG5vZGUtPm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAgICAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2libGluZy5nZXQoKSwgZXhjZXB0
aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBhY2Nl
cHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJsaW5nLmdldCgpKTsKKyAgICAgICAg
ICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMjA2LDMwICsyMDIs
MjkgQEAgTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoSlNWYWx1ZSomIGV4Y2VwdGlvbikK
ICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8
IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNob3J0IGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAg
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9k
ZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoSlNWYWx1ZSom
IGV4Y2VwdGlvbikKK05vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4
ZWMpCiB7Ci0gICAgZXhjZXB0aW9uID0gMDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3Vy
cmVudDsKICAgICB3aGlsZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgd2hpbGUgKE5vZGUq
IHByZXZpb3VzU2libGluZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAg
ICBub2RlID0gcHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJl
c3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0
Tm9kZShleGVjLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgaWYg
KGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHdoaWxlIChOb2RlKiBsYXN0Q2hpbGQgPSBu
b2RlLT5sYXN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBsYXN0Q2hpbGQ7Ci0g
ICAgICAgICAgICAgICAgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwg
ZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAg
ICAgIGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3Vs
dCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTI0NSw4ICsyNDAsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUo
SlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgbm9kZSA9IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9k
ZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUo
ZXhlYywgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0
ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3Vy
cmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC0yNTQsMTUgKzI0OSwxNCBAQCBOb2RlKiBUcmVlV2Fs
a2VyOjpwcmV2aW91c05vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gMDsKIH0K
IAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05vZGUq
IFRyZWVXYWxrZXI6Om5leHROb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNlcHRpb24g
PSAwOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAg
d2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
bm9kZSA9IGZpcnN0Q2hpbGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0
KCkpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxl
YXNlKCkpOwpAQCAtMjcxLDggKzI2NSw4IEBAIENoaWxkcmVuOgogICAgIH0KICAgICB3aGlsZSAo
Tm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3QoKSkpIHsK
ICAgICAgICAgbm9kZSA9IG5leHRTaWJsaW5nOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVz
dWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVj
LCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0g
Tm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50
KG5vZGUucmVsZWFzZSgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaCBi
L1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaAppbmRleCA0MTM4OGJlLi45MGJiZjk2IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtl
ci5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZuZGVmIFRyZWVXYWxrZXJfaAogI2RlZmluZSBUcmVl
V2Fsa2VyX2gKIAorI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CkBAIC00MywyMiArNDQsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2Rl
KiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQogICAgICAg
ICB2b2lkIHNldEN1cnJlbnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsK
IAotICAgICAgICBOb2RlKiBwYXJlbnROb2RlKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0g
ICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAg
ICAgTm9kZSogbGFzdENoaWxkKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0gICAgICAgIE5v
ZGUqIHByZXZpb3VzU2libGluZyhLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBO
b2RlKiBuZXh0U2libGluZyhLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBOb2Rl
KiBwcmV2aW91c05vZGUoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgTm9kZSog
bmV4dE5vZGUoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSogcGFyZW50
Tm9kZShLSlM6OkV4ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEtKUzo6RXhl
Y1N0YXRlKik7CisgICAgICAgIE5vZGUqIGxhc3RDaGlsZChLSlM6OkV4ZWNTdGF0ZSopOworICAg
ICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoS0pTOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9k
ZSogbmV4dFNpYmxpbmcoS0pTOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNO
b2RlKEtKUzo6RXhlY1N0YXRlKik7CisgICAgICAgIE5vZGUqIG5leHROb2RlKEtKUzo6RXhlY1N0
YXRlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3Jl
cyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBOb2RlKiBwYXJlbnRO
b2RlKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIHBhcmVudE5vZGUoZXhjZXB0
aW9uKTsgfQotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2Vw
dGlvbjsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhjZXB0aW9uKTsgfQotICAgICAgICBOb2RlKiBsYXN0
Q2hpbGQoKSB7IEtKUzo6SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4gbGFzdENoaWxkKGV4Y2Vw
dGlvbik7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyBLSlM6OkpTVmFsdWUq
IGV4Y2VwdGlvbjsgcmV0dXJuIHByZXZpb3VzU2libGluZyhleGNlcHRpb24pOyB9Ci0gICAgICAg
IE5vZGUqIG5leHRTaWJsaW5nKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIG5l
eHRTaWJsaW5nKGV4Y2VwdGlvbik7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyBL
SlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIHByZXZpb3VzTm9kZShleGNlcHRpb24pOyB9
Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0
dXJuIG5leHROb2RlKGV4Y2VwdGlvbik7IH0KKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsg
cmV0dXJuIHBhcmVudE5vZGUoTm9kZUZpbHRlcjo6ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50
LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hp
bGQoTm9kZUZpbHRlcjo6ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAg
ICAgICAgTm9kZSogbGFzdENoaWxkKCkgeyByZXR1cm4gbGFzdENoaWxkKE5vZGVGaWx0ZXI6OmV4
ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHByZXZp
b3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGluZyhOb2RlRmlsdGVyOjpleGVjU3Rh
dGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0U2libGlu
ZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKE5vZGVGaWx0ZXI6OmV4ZWNTdGF0ZUZyb21Ob2RlKG1f
Y3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJu
IHByZXZpb3VzTm9kZShOb2RlRmlsdGVyOjpleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0
KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKE5vZGVG
aWx0ZXI6OmV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CiAKICAgICBwcml2
YXRlOgogICAgICAgICBUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRU
b1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNl
cyk7Cg==
</data>
<flag name="review"
          id="9751"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22146</attachid>
            <date>2008-07-07 17:22:20 -0700</date>
            <delta_ts>2008-07-07 17:22:20 -0700</delta_ts>
            <desc>Final patch</desc>
            <filename>nodeiterator_patch.txt</filename>
            <type>text/plain</type>
            <size>33505</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NjJhY2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVudHM6CisKK3JlY29yZHMK
KworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0dXJlcyAy
MDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9zcyB0aGUgVW5pdmVyc2Ug
MjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0xNSAyMDA3LTA5LTI4CisK
K2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQgU29ueSBQaWN0
dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNyb3NzIHRoZSBVbml2ZXJz
ZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQgcmF0ZWQKKworcG9zdGRh
dGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5LTI4CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbCBiL0xheW91dFRl
c3RzL3RyYXZlcnNhbC9ub2RlLWl0ZXJhdG9yLTAwOS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk1NDFmOTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90
cmF2ZXJzYWwvbm9kZS1pdGVyYXRvci0wMDkuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4g
Cis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFkPiAKKzxib2R5
PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9ImZvbnQtZmFt
aWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1s
JzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAgdmFyIHJlcXVl
c3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVuKCJHRVQiLCBk
YXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVycmlkZU1pbWVU
eXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7CisKKyAgICAg
ICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8gb25seSBpZiAi
T0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVxdWVzdC5zdGF0
dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAgICAgICAgICAg
ICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAgICAgfQorCisg
ICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAgICAgaWYgKG4u
dGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7CisgICAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0KKworICAgICAg
ZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBpdGVyID0gZG9j
dW1lbnQuY3JlYXRlTm9kZUl0ZXJhdG9yKHhtbERvYywgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQs
IHRlc3ROb2RlRml0ZXIpOworICAgICAgICB2YXIgY3VyTm9kZTsKKyAgICAgICAgd2hpbGUgKGN1
ck5vZGUgPSBpdGVyLm5leHROb2RlKCkpIHsKKyAgICAgICAgICBkb2N1bWVudC53cml0ZSgnPGgz
PicgKyBjdXJOb2RlLnRhZ05hbWUgKyAnPC9oMz48cD4nICsgY3VyTm9kZS50ZXh0Q29udGVudCAr
ICc8L3A+Jyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZldGNoWE1MKCk7CisKKyAgICA8
L3NjcmlwdD4KKyAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmF2ZXJzYWwvcmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5LWRhdGEueG1sIGIvTGF5
b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1kYXRhLnhtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzI4OWFmCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3Jlc291cmNlcy9ub2RlLWl0ZXJhdG9yLTAwOS1k
YXRhLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgorPHJlY29yZHMgZGF0ZT0iTW9uLCAxOSBGZWIgMjAwNyAwMDo0MDozOSAtMDgwMCI+
CisgIDxtb3ZpZWluZm8gaWQ9IjIxNDciPgorICAgIDxpbmZvPgorICAgICAgPHRpdGxlPgorICAg
ICAgICBBY3Jvc3MgdGhlIFVuaXZlcnNlCisgICAgICA8L3RpdGxlPgorICAgICAgPHJ1bnRpbWU+
CisgICAgICAgIDI6MzAKKyAgICAgIDwvcnVudGltZT4KKyAgICAgIDxyYXRpbmc+CisgICAgICAg
IE5vdCB5ZXQgcmF0ZWQKKyAgICAgIDwvcmF0aW5nPgorICAgICAgPHN0dWRpbz4KKyAgICAgICAg
U29ueSBQaWN0dXJlcworICAgICAgPC9zdHVkaW8+CisgICAgICA8cG9zdGRhdGU+CisgICAgICAg
IDIwMDctMDItMTUKKyAgICAgIDwvcG9zdGRhdGU+CisgICAgICA8cmVsZWFzZWRhdGU+CisgICAg
ICAgIDIwMDctMDktMjgKKyAgICAgIDwvcmVsZWFzZWRhdGU+CisgICAgPC9pbmZvPgorICA8L21v
dmllaW5mbz4KKzwvcmVjb3Jkcz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYXZlcnNhbC90
cmVlLXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdHJhdmVyc2FsL3RyZWUt
d2Fsa2VyLTAwNi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTQ2MmFjYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYXZlcnNhbC90cmVl
LXdhbGtlci0wMDYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzMgQEAKK1hNTCBkb2MgZWxlbWVu
dHM6CisKK3JlY29yZHMKKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQgcmF0ZWQg
U29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKworbW92aWVpbmZvCisKK0Fjcm9z
cyB0aGUgVW5pdmVyc2UgMjozMCBOb3QgeWV0IHJhdGVkIFNvbnkgUGljdHVyZXMgMjAwNy0wMi0x
NSAyMDA3LTA5LTI4CisKK2luZm8KKworQWNyb3NzIHRoZSBVbml2ZXJzZSAyOjMwIE5vdCB5ZXQg
cmF0ZWQgU29ueSBQaWN0dXJlcyAyMDA3LTAyLTE1IDIwMDctMDktMjgKKwordGl0bGUKKworQWNy
b3NzIHRoZSBVbml2ZXJzZQorCitydW50aW1lCisKKzI6MzAKKworcmF0aW5nCisKK05vdCB5ZXQg
cmF0ZWQKKworcG9zdGRhdGUKKworMjAwNy0wMi0xNQorCityZWxlYXNlZGF0ZQorCisyMDA3LTA5
LTI4CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0
bWwgYi9MYXlvdXRUZXN0cy90cmF2ZXJzYWwvdHJlZS13YWxrZXItMDA2Lmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYzBkZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3RyYXZlcnNhbC90cmVlLXdhbGtlci0wMDYuaHRtbApAQCAtMCwwICsxLDQ4IEBA
Cis8aHRtbD4gCis8aGVhZD4KKzx0aXRsZT5UcmF2ZXJzYWwgVGVzdDwvdGl0bGU+IAorPC9oZWFk
PiAKKzxib2R5PgorCisgIDxoMj5YTUwgZG9jIGVsZW1lbnRzOjwvaDI+CisgIDxkaXYgc3R5bGU9
ImZvbnQtZmFtaWx5OiBDb3VyaWVyOyBmb250LXNpemU6IDE0OyI+CisgICAgPHNjcmlwdCB0eXBl
PSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKworICAgICAgdmFyIGRhdGFVUkwgPSAncmVzb3VyY2VzL25vZGUtaXRlcmF0b3ItMDA5
LWRhdGEueG1sJzsKKyAgICAgIGZ1bmN0aW9uIGZldGNoWE1MKCkKKyAgICAgIHsKKyAgICAgICAg
dmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgcmVxdWVzdC5vcGVu
KCJHRVQiLCBkYXRhVVJMLCBmYWxzZSAvKiBzeW5jICovKTsKKyAgICAgICAgcmVxdWVzdC5vdmVy
cmlkZU1pbWVUeXBlKCJhcHBsaWNhdGlvbi94bWwiKTsKKyAgICAgICAgcmVxdWVzdC5zZW5kKCk7
CisKKyAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgLy8g
b25seSBpZiAiT0siCisgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCAocmVx
dWVzdC5zdGF0dXMgPT0gMCAmJiByZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGggPiAwKSkKKyAg
ICAgICAgICAgICAgd2Fsa1hNTChyZXF1ZXN0LnJlc3BvbnNlWE1MKTsKKyAgICAgICAgfQorICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiB0ZXN0Tm9kZUZpdGVyKG4pCisgICAgICB7CisgICAgICAg
ICAgaWYgKG4udGFnTmFtZSA9PSAnc3R1ZGlvJykgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NL
SVA7CisgICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsKKyAgICAgIH0K
KworICAgICAgZnVuY3Rpb24gd2Fsa1hNTCh4bWxEb2MpCisgICAgICB7CisgICAgICAgIHZhciBp
dGVyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcih4bWxEb2MsIE5vZGVGaWx0ZXIuU0hPV19F
TEVNRU5ULCB0ZXN0Tm9kZUZpdGVyLCBmYWxzZSk7CisgICAgICAgIHZhciBjdXJOb2RlOworICAg
ICAgICB3aGlsZSAoY3VyTm9kZSA9IGl0ZXIubmV4dE5vZGUoKSkgeworICAgICAgICAgIGRvY3Vt
ZW50LndyaXRlKCc8aDM+JyArIGN1ck5vZGUudGFnTmFtZSArICc8L2gzPjxwPicgKyBjdXJOb2Rl
LnRleHRDb250ZW50ICsgJzwvcD4nKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZmV0Y2hY
TUwoKTsKKworICAgIDwvc2NyaXB0PgorICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAppbmRleCA2MWMzOTRh
Li5iYjYwMDc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNv
bmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRp
b24uY3BwCkBAIC0yMCwyNiArMjAsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU05vZGVGaWx0ZXJDb25kaXRpb24uaCIKIAotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJKU05vZGVGaWx0
ZXIuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCi0jaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxl
ci5oIgogI2luY2x1ZGUgPGtqcy9KU0xvY2suaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgS0pTOwogCi0vLyBGSVhNRTogQWRkIHRha2VFeGNlcHRpb24gYXMgYSBt
ZW1iZXIgb2YgRXhlY1N0YXRlPwotc3RhdGljIEpTVmFsdWUqIHRha2VFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjKQotewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OwotICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGV4Y2VwdGlvbjsKLX0K
LQogSlNOb2RlRmlsdGVyQ29uZGl0aW9uOjpKU05vZGVGaWx0ZXJDb25kaXRpb24oSlNWYWx1ZSog
ZmlsdGVyKQogICAgIDogbV9maWx0ZXIoZmlsdGVyKQogewpAQCAtNTEsMTMgKzQwLDggQEAgdm9p
ZCBKU05vZGVGaWx0ZXJDb25kaXRpb246Om1hcmsoKQogICAgICAgICBtX2ZpbHRlci0+bWFyaygp
OwogfQogCi1zaG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogZmls
dGVyTm9kZSwgSlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3QKK3Nob3J0IEpTTm9kZUZpbHRlckNv
bmRpdGlvbjo6YWNjZXB0Tm9kZShLSlM6OkV4ZWNTdGF0ZSogZXhlYywgTm9kZSogZmlsdGVyTm9k
ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSXQgbWFrZXMgbm8gc2Vuc2UgZm9yIHRoaXMgdG8g
ZGVwZW5kIG9uIHRoZSBkb2N1bWVudCBiZWluZyBpbiBhIGZyYW1lIQotICAgIEZyYW1lKiBmcmFt
ZSA9IGZpbHRlck5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1Q7Ci0KICAgICBKU0xvY2sgbG9j
ayhmYWxzZSk7CiAKICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTY1LDIzICs0OSwyOCBAQCBz
aG9ydCBKU05vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoTm9kZSogZmlsdGVyTm9kZSwg
SlNWYWx1ZSomIGV4Y2VwdGlvbikgYwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
CiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogCi0gICAgRXhlY1N0
YXRlKiBleGVjID0gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygp
OworICAgLy8gVGhlIGV4ZWMgYXJndW1lbnQgaGVyZSBzaG91bGQgb25seSBiZSBudWxsIGlmIHRo
aXMgd2FzIGNhbGxlZCBmcm9tIGEKKyAgIC8vIG5vbi1KYXZhU2NyaXB0IGxhbmd1YWdlLCBhbmQg
dGhpcyBpcyBhIEphdmFTY3JpcHQgZmlsdGVyLCBhbmQgdGhlIGRvY3VtZW50CisgICAvLyBpbiBx
dWVzdGlvbiBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBmcmFtZS4gSW4gdGhhdCBjYXNlLCB3
ZSdyZSBnb2luZyB0bworICAgLy8gYmVoYXZlIGluY29ycmVjdGx5LCBhbmQganVzdCByZWplY3Qg
bm9kZXMgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBmaWx0ZXIgZnVuY3Rpb24uCisgICAvLyBUbyBm
aXggdGhhdCB3ZSdkIG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgd2F5IHRvIGZpbmQgYSBzdWl0YWJs
ZSBKYXZhU2NyaXB0CisgICAvLyBleGVjdXRpb24gY29udGV4dCBmb3IgdGhlIGZpbHRlciBmdW5j
dGlvbiB0byBydW4gaW4uCisgICAgaWYgKCFleGVjKQorICAgICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX1JFSkVDVDsKKwogICAgIEFyZ0xpc3QgYXJnczsKICAgICBhcmdzLmFwcGVuZCh0
b0pTKGV4ZWMsIGZpbHRlck5vZGUpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXhjZXB0aW9uID0gdGFrZUV4Y2VwdGlvbihleGVjKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNU
OwotICAgIH0KKwogICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhlYywgbV9maWx0ZXIsIGNh
bGxUeXBlLCBjYWxsRGF0YSwgbV9maWx0ZXIsIGFyZ3MpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgewotICAgICAgICBleGNlcHRpb24gPSB0YWtlRXhjZXB0aW9uKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXI6OkZJ
TFRFUl9SRUpFQ1Q7Ci0gICAgfQorCiAgICAgaW50IGludFJlc3VsdCA9IHJlc3VsdC0+dG9JbnQz
MihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXhjZXB0
aW9uID0gdGFrZUV4Y2VwdGlvbihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfUkVKRUNUOwotICAgIH0KKwogICAg
IHJldHVybiBpbnRSZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRl
ckNvbmRpdGlvbi5oCmluZGV4IDNhNDc0NzAuLmJkMzE2NTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEtK
Uzo6SlNWYWx1ZSogZmlsdGVyKTsKIAotICAgICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUo
Tm9kZSosIEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwg
c2hvcnQgYWNjZXB0Tm9kZShLSlM6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKICAgICAgICAg
dmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICBLSlM6OkpTVmFsdWUqIG1fZmlsdGVyOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDdXN0b20uY3BwCmluZGV4IGNhZTFkNTQu
LjRiMzc0MGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckN1c3RvbS5jcHAK
QEAgLTQzLDExICs0Myw3IEBAIHZvaWQgSlNOb2RlRmlsdGVyOjptYXJrKCkKIAogSlNWYWx1ZSog
SlNOb2RlRmlsdGVyOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIHNob3J0IHJlc3VsdCA9
IGltcGwoKS0+YWNjZXB0Tm9kZSh0b05vZGUoYXJnc1swXSksIGV4Y2VwdGlvbik7Ci0gICAgaWYg
KGV4Y2VwdGlvbikKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAg
cmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHJlc3VsdCk7CisgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGltcGwoKS0+YWNjZXB0Tm9kZShleGVjLCB0b05vZGUoYXJnc1swXSkpKTsKIH0KIAogUGFzc1Jl
ZlB0cjxOb2RlRmlsdGVyPiB0b05vZGVGaWx0ZXIoSlNWYWx1ZSogdmFsdWUpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCmluZGV4IDAxNjAwYmYuLmU3NjE0
MWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlSXRlcmF0b3JDdXN0b20uY3BwCkBA
IC00MCwzMiArNDAsMzAgQEAgdm9pZCBKU05vZGVJdGVyYXRvcjo6bWFyaygpCiBKU1ZhbHVlKiBK
U05vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTVmFsdWUqIGV4Y2VwdGlv
biA9IDA7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbXBsKCktPm5leHROb2RlKGVjLCBleGNl
cHRpb24pOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5uZXh0Tm9kZShleGVjLCBl
Yyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KLSAgICBpZiAoZXhjZXB0aW9uKSB7
Ci0gICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworCisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CisK
ICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlLmdldCgpKTsKIH0KIAogSlNWYWx1ZSogSlNOb2Rl
SXRlcmF0b3I6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9u
ID0gMDsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGVjLCBl
eGNlcHRpb24pOworICAgIFJlZlB0cjxOb2RlPiBub2RlID0gaW1wbCgpLT5wcmV2aW91c05vZGUo
ZXhlYywgZWMpOwogICAgIGlmIChlYykgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
ZWMpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgaWYgKGV4Y2Vw
dGlvbikgewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXhjZXB0aW9uKTsKKworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQorCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9kZS5nZXQoKSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAppbmRleCA3ZTY5MmMwLi43Njk2NzFi
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTVHJlZVdhbGtlckN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1RyZWVXYWxrZXJDdXN0b20uY3BwCkBAIC0zOSw3
OCArMzksNTcgQEAgdm9pZCBKU1RyZWVXYWxrZXI6Om1hcmsoKQogICAgIAogSlNWYWx1ZSogSlNU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykKIHsKLSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBs
KCktPnBhcmVudE5vZGUoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
PnBhcmVudE5vZGUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9k
ZSk7CiB9CiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9
IDA7Ci0gICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGlsZChleGNlcHRpb24pOwotICAg
IGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7
CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+Zmlyc3RDaGlsZChleGVjKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
ICAgICByZXR1cm4gdG9KUyhleGVjLCBub2RlKTsKIH0KICAgICAKIEpTVmFsdWUqIEpTVHJlZVdh
bGtlcjo6bGFzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
LSAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPmxh
c3RDaGlsZChleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+bGFzdENo
aWxkKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQog
ICAgIAogSlNWYWx1ZSogSlNUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAg
ICBOb2RlKiBub2RlID0gaW1wbCgpLT5uZXh0U2libGluZyhleGNlcHRpb24pOwotICAgIGlmIChl
eGNlcHRpb24pIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAg
Tm9kZSogbm9kZSA9IGltcGwoKS0+bmV4dFNpYmxpbmcoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAg
cmV0dXJuIHRvSlMoZXhlYywgbm9kZSk7CiB9CiAgICAgCiBKU1ZhbHVlKiBKU1RyZWVXYWxrZXI6
OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7
Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0gaW1wbCgpLT5w
cmV2aW91c1NpYmxpbmcoZXhjZXB0aW9uKTsKLSAgICBpZiAoZXhjZXB0aW9uKSB7Ci0gICAgICAg
IGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOworICAgIE5vZGUqIG5vZGUgPSBpbXBsKCkt
PnByZXZpb3VzU2libGluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KICAgICByZXR1cm4gdG9KUyhleGVj
LCBub2RlKTsKIH0KICAgICAKIEpTVmFsdWUqIEpTVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU1ZhbHVlKiBleGNl
cHRpb24gPSAwOwotICAgIE5vZGUqIG5vZGUgPSBpbXBsKCktPnByZXZpb3VzTm9kZShleGNlcHRp
b24pOwotICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4
Y2VwdGlvbik7CisgICAgTm9kZSogbm9kZSA9IGltcGwoKS0+cHJldmlvdXNOb2RlKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQogICAgIHJldHVybiB0b0pTKGV4ZWMsIG5vZGUpOwogfQogICAgIAogSlNWYWx1
ZSogSlNUcmVlV2Fsa2VyOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKLSAgICBOb2RlKiBub2RlID0g
aW1wbCgpLT5uZXh0Tm9kZShleGNlcHRpb24pOwotICAgIGlmIChleGNlcHRpb24pIHsKLSAgICAg
ICAgZXhlYy0+c2V0RXhjZXB0aW9uKGV4Y2VwdGlvbik7CisgICAgTm9kZSogbm9kZSA9IGltcGwo
KS0+bmV4dE5vZGUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9CiAgICAgcmV0dXJuIHRvSlMoZXhlYywgbm9k
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDdmYjQyZjYuLjMzY2IzNWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTS5tbQpAQCAtNjk3LDcgKzY5Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBPYmpDTm9kZUZpbHRlckNvbmRpdGlvbihmaWx0ZXIpKTsKICAgICB9CiAKLSAg
ICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoTm9kZSosIEpTVmFsdWUqJiBleGNlcHRpb24pIGNv
bnN0OworICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShFeGVjU3RhdGUqLCBOb2RlKikgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgT2JqQ05vZGVGaWx0ZXJDb25kaXRpb24oaWQgPERPTU5vZGVG
aWx0ZXI+IGZpbHRlcikKQEAgLTcwOCw3ICs3MDgsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZCA8RE9NTm9kZUZpbHRlcj4gPiBtX2ZpbHRlcjsKIH07CiAKLXNob3J0IE9iakNOb2RlRmls
dGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqIG5vZGUsIEpTVmFsdWUqJikgY29uc3QKK3No
b3J0IE9iakNOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSosIE5vZGUq
IG5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX1JFSkVDVDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3Bw
IGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKaW5kZXggMTg0NGEyZC4uMGE4NWZiMyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlci5jcHAKQEAgLTI1LDE0ICsyNSwzNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgorCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXNob3J0
IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoTm9kZSogbm9kZSwgSlNWYWx1ZSomIGV4Y2VwdGlvbikg
Y29uc3QKK3Nob3J0IE5vZGVGaWx0ZXI6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVjLCBOb2Rl
KiBub2RlKSBjb25zdAogewogICAgIC8vIGNhc3QgdG8gc2hvcnQgc2lsZW5jZXMgImVudW1lcmFs
IGFuZCBub24tZW51bWVyYWwgdHlwZXMgaW4gcmV0dXJuIiB3YXJuaW5nCi0gICAgcmV0dXJuIG1f
Y29uZGl0aW9uID8gbV9jb25kaXRpb24tPmFjY2VwdE5vZGUobm9kZSwgZXhjZXB0aW9uKSA6IHN0
YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKKyAgICByZXR1cm4gbV9jb25kaXRpb24g
PyBtX2NvbmRpdGlvbi0+YWNjZXB0Tm9kZShleGVjLCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0
PihGSUxURVJfQUNDRVBUKTsKIH0KIAorRXhlY1N0YXRlKiBOb2RlRmlsdGVyOjpleGVjU3RhdGVG
cm9tTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgh
ZnJhbWUtPnNjcmlwdCgpLT5pc0VuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworfQor
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05vZGVG
aWx0ZXIuaCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAppbmRleCBlOWYyNWU2Li5kMGFmYjlj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmgKKysrIGIvV2ViQ29yZS9kb20v
Tm9kZUZpbHRlci5oCkBAIC03MCwxNCArNzAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlRmlsdGVyKGNvbmRpdGlvbikpOwogICAg
ICAgICB9CiAKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShOb2RlKiwgS0pTOjpKU1ZhbHVlKiYg
ZXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShLSlM6OkV4ZWNTdGF0
ZSosIE5vZGUqKSBjb25zdDsKICAgICAgICAgdm9pZCBtYXJrKCkgeyBtX2NvbmRpdGlvbi0+bWFy
aygpOyB9OwogCiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9y
ZXMgdGhlIEphdmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgc2hvcnQgYWNjZXB0
Tm9kZShOb2RlKiBub2RlKSBjb25zdCB7IEtKUzo6SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4g
YWNjZXB0Tm9kZShub2RlLCBleGNlcHRpb24pOyB9CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGUo
Tm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0Tm9kZShleGVjU3RhdGVGcm9tTm9kZShu
b2RlKSwgbm9kZSk7IH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIEtKUzo6RXhlY1N0
YXRlKiBleGVjU3RhdGVGcm9tTm9kZShOb2RlKik7CiAKICAgICBwcml2YXRlOgogICAgICAgICBO
b2RlRmlsdGVyKFBhc3NSZWZQdHI8Tm9kZUZpbHRlckNvbmRpdGlvbj4gY29uZGl0aW9uKSA6IG1f
Y29uZGl0aW9uKGNvbmRpdGlvbikgeyB9CisKICAgICAgICAgUmVmUHRyPE5vZGVGaWx0ZXJDb25k
aXRpb24+IG1fY29uZGl0aW9uOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAKaW5kZXggNDhiZGNiNC4uMGZkMzUxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKKysrIGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5j
cHAKQEAgLTMxLDcgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEtKUzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKE5vZGUqLCBK
U1ZhbHVlKiYpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4
ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAogewogICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJf
QUNDRVBUOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5o
IGIvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IDY5MjUwYTUuLjg1YTk1
OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9X
ZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0aW9uLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgS0pTIHsKLSAgICBjbGFzcyBKU1Zh
bHVlOworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9kZUZpbHRlckNv
bmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25kaXRpb24+IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRpb24oKSB7IH0KLSAgICAg
ICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKE5vZGUqLCBLSlM6OkpTVmFsdWUqJiBleGNlcHRp
b24pIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEtKUzo6RXhl
Y1N0YXRlKiwgTm9kZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKSB7
IH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwIGIv
V2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAppbmRleCBlMjJlOGU2Li5lZjQ5YTdkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05v
ZGVJdGVyYXRvci5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgPGtqcy9FeGVjU3RhdGUuaD4KICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJOb2RlRmlsdGVyLmgiCkBAIC04NSw3ICs4Niw3IEBAIE5vZGVJdGVyYXRvcjo6fk5vZGVJdGVy
YXRvcigpCiAgICAgcm9vdCgpLT5kb2N1bWVudCgpLT5kZXRhY2hOb2RlSXRlcmF0b3IodGhpcyk7
CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShFeGNlcHRpb25D
b2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGlvbikKK1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJh
dG9yOjpuZXh0Tm9kZShFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC05
OSwxMCArMTAwLDkgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0b3I6Om5leHROb2RlKEV4
Y2VwdGlvbkNvZGUmIGVjLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKQogICAgICAgICAvLyBOb2RlSXRl
cmF0b3JzIHRyZWF0IHRoZSBET00gdHJlZSBhcyBhIGZsYXQgbGlzdCBvZiBub2Rlcy4KICAgICAg
ICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3QgcGFzcyBvdmVyIGRl
c2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBIZW5jZSwgRklMVEVS
X1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KLSAgICAgICAgZXhjZXB0aW9uID0g
MDsKICAgICAgICAgUmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVO
b2RlLm5vZGU7Ci0gICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShwcm92
aXNpb25hbFJlc3VsdC5nZXQoKSwgZXhjZXB0aW9uKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUND
RVBUOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRl
ZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsK
ICAgICAgICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKQEAgLTExNSw3
ICsxMTUsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhjZXB0
aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpwcmV2aW91c05vZGUo
RXhjZXB0aW9uQ29kZSYgZWMsIEpTVmFsdWUqJiBleGNlcHRpb24pCitQYXNzUmVmUHRyPE5vZGU+
IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKQEAgLTEyOSwxMCArMTI5LDkgQEAgUGFzc1JlZlB0cjxOb2RlPiBOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZShFeGNlcHRpb25Db2RlJiBlYywgSlNWYWx1ZSomIGV4Y2VwdGkKICAg
ICAgICAgLy8gTm9kZUl0ZXJhdG9ycyB0cmVhdCB0aGUgRE9NIHRyZWUgYXMgYSBmbGF0IGxpc3Qg
b2Ygbm9kZXMuCiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMg
bm90IHBhc3Mgb3ZlciBkZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9k
ZS4gSGVuY2UsIEZJTFRFUl9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCi0gICAg
ICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm92aXNpb25hbFJlc3Vs
dCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9
IGFjY2VwdE5vZGUocHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCksIGV4Y2VwdGlvbikgPT0gTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgYm9v
bCBub2RlV2FzQWNjZXB0ZWQgPSBhY2NlcHROb2RlKGV4ZWMsIHByb3Zpc2lvbmFsUmVzdWx0Lmdl
dCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOworICAgICAgICBpZiAoZXhlYyAmJiBl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAobm9k
ZVdhc0FjY2VwdGVkKSB7CiAgICAgICAgICAgICBtX3JlZmVyZW5jZU5vZGUgPSBtX2NhbmRpZGF0
ZU5vZGU7CkBAIC0yMjcsNCArMjI2LDUgQEAgdm9pZCBOb2RlSXRlcmF0b3I6OnVwZGF0ZUZvck5v
ZGVSZW1vdmFsKE5vZGUqIHJlbW92ZWROb2RlLCBOb2RlUG9pbnRlciYgcmVmZXJlbmMKICAgICB9
CiB9CiAKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20v
Tm9kZUl0ZXJhdG9yLmggYi9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAppbmRleCA3NThjMWNh
Li5kMmM2MDc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaAorKysgYi9X
ZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuaApAQCAtMjUsNiArMjUsNyBAQAogI2lmbmRlZiBOb2Rl
SXRlcmF0b3JfaAogI2RlZmluZSBOb2RlSXRlcmF0b3JfaAogCisjaW5jbHVkZSAiTm9kZUZpbHRl
ci5oIgogI2luY2x1ZGUgIlRyYXZlcnNhbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTQxLDggKzQyLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0b3IoKTsKIAotICAgICAg
ICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmLCBLSlM6OkpTVmFsdWUq
JiBleGNlcHRpb24pOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShFeGNl
cHRpb25Db2RlJiwgS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlPiBuZXh0Tm9kZShLSlM6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoS0pTOjpFeGVjU3RhdGUqLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgICAgIHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJl
bmNlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBA
IC01Miw4ICs1Myw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2ls
bEJlUmVtb3ZlZChOb2RlKik7CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2ls
ZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQ
YXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IEtKUzo6SlNWYWx1
ZSogZXhjZXB0aW9uOyByZXR1cm4gbmV4dE5vZGUoZWMsIGV4Y2VwdGlvbik7IH0KLSAgICAgICAg
UGFzc1JlZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgS0pTOjpK
U1ZhbHVlKiBleGNlcHRpb247IHJldHVybiBwcmV2aW91c05vZGUoZWMsIGV4Y2VwdGlvbik7IH0K
KyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gbmV4dE5vZGUoTm9kZUZpbHRlcjo6ZXhlY1N0YXRlRnJvbU5vZGUocmVmZXJlbmNlTm9k
ZSgpKSwgZWMpOyB9CisgICAgICAgIFBhc3NSZWZQdHI8Tm9kZT4gcHJldmlvdXNOb2RlKEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBwcmV2aW91c05vZGUoTm9kZUZpbHRlcjo6ZXhlY1N0YXRl
RnJvbU5vZGUocmVmZXJlbmNlTm9kZSgpKSwgZWMpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBOb2RlSXRlcmF0b3IoUGFzc1JlZlB0cjxOb2RlPiwgdW5zaWduZWQgd2hhdFRvU2hvdywgUGFz
c1JlZlB0cjxOb2RlRmlsdGVyPiwgYm9vbCBleHBhbmRFbnRpdHlSZWZlcmVuY2VzKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5jcHAgYi9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwu
Y3BwCmluZGV4IGNmNDRkMTUuLjM5MDljN2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyYXZl
cnNhbC5jcHAKKysrIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmNwcApAQCAtNDAsMTcgKzQwLDE3
IEBAIFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8CiB7CiB9CiAKLXNob3J0IFRyYXZlcnNhbDo6YWNj
ZXB0Tm9kZShOb2RlKiBub2RlLCBKU1ZhbHVlKiYgZXhjZXB0aW9uKSBjb25zdAorc2hvcnQgVHJh
dmVyc2FsOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSogZXhlYywgTm9kZSogbm9kZSkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogVG8gaGFuZGxlIFhNTCBwcm9wZXJseSB3ZSB3b3VsZCBoYXZlIHRvIGNo
ZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJlbmNlcy4KIAotICAgIC8vIFRoZSBiaWQgdHdpZGRsaW5n
IGhlcmUgaXMgZG9uZSB0byBtYXAgRE9NIG5vZGUgdHlwZXMsIHdoaWNoIGFyZSBnaXZlbiBhcyBp
bnRlZ2VycyBmcm9tCisgICAgLy8gVGhlIGJpdCB0d2lkZGxpbmcgaGVyZSBpcyBkb25lIHRvIG1h
cCBET00gbm9kZSB0eXBlcywgd2hpY2ggYXJlIGdpdmVuIGFzIGludGVnZXJzIGZyb20KICAgICAv
LyAxIHRocm91Z2ggMTIsIHRvIHdoYXRUb1Nob3cgYml0IG1hc2tzLgogICAgIGlmICghKCgoMSA8
PCAobm9kZS0+bm9kZVR5cGUoKSAtIDEpKSAmIG1fd2hhdFRvU2hvdykpKQogICAgICAgICByZXR1
cm4gTm9kZUZpbHRlcjo6RklMVEVSX1NLSVA7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAg
cmV0dXJuIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgcmV0dXJuIG1fZmlsdGVyLT5h
Y2NlcHROb2RlKG5vZGUsIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIG1fZmlsdGVyLT5hY2NlcHRO
b2RlKGV4ZWMsIG5vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuaCBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCmluZGV4
IGNhNTQ3OTcuLjdhOTIyYjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCisr
KyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFj
ZSBLSlMgewogICAgIGNsYXNzIEpTVmFsdWU7CisgICAgY2xhc3MgRXhlY1N0YXRlOwogfQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgVHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4sIHVu
c2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50
aXR5UmVmZXJlbmNlcyk7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSosIEtKUzo6SlNW
YWx1ZSomIGpzRXhjZXB0aW9uKSBjb25zdDsKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZShLSlM6
OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0
cjxOb2RlPiBtX3Jvb3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcCBi
L1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCmluZGV4IDA5YzFjOTUuLjQ0OWNiNjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyZWVX
YWxrZXIuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVHJlZVdhbGtlci5oIgogCisjaW5jbHVkZSA8a2pzL0V4ZWNTdGF0ZS5oPgogI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRl
ci5oIgpAQCAtNTUsMTYgKzU2LDE1IEBAIGlubGluZSBOb2RlKiBUcmVlV2Fsa2VyOjpzZXRDdXJy
ZW50KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKICAgICByZXR1cm4gbV9jdXJyZW50LmdldCgpOwog
fQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEpTVmFsdWUqJiBleGNlcHRpb24pCitO
b2RlKiBUcmVlV2Fsa2VyOjpwYXJlbnROb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNl
cHRpb24gPSAwOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxl
IChub2RlICE9IHJvb3QoKSkgewogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwog
ICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgc2hvcnQg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFj
Y2VwdE5vZGUoZXhlYywgbm9kZS5nZXQoKSk7CisgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHRO
b2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1
cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CkBAIC03MiwxMiArNzIsMTEgQEAgTm9kZSog
VHJlZVdhbGtlcjo6cGFyZW50Tm9kZShKU1ZhbHVlKiYgZXhjZXB0aW9uKQogICAgIHJldHVybiAw
OwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEpTVmFsdWUqJiBleGNlcHRpb24p
CitOb2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBl
eGNlcHRpb24gPSAwOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBh
Y2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24p
CisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUu
Z2V0KCkpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBzd2l0Y2ggKGFjY2VwdE5vZGVSZXN1bHQpIHsKICAg
ICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTEwNiwxMiArMTA1
LDExIEBAIE5vZGUqIFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoSlNWYWx1ZSomIGV4Y2VwdGlvbikK
ICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bGFzdENoaWxkKEpTVmFsdWUq
JiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG1f
Y3VycmVudC0+bGFzdENoaWxkKCk7IG5vZGU7ICkgewotICAgICAgICBzaG9ydCBhY2NlcHROb2Rl
UmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAo
ZXhjZXB0aW9uKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShl
eGVjLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVz
dWx0KSB7CiAgICAgICAgICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6CkBAIC0x
NDAsMTYgKzEzOCwxNSBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoSlNWYWx1ZSomIGV4
Y2VwdGlvbikKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNT
aWJsaW5nKEpTVmFsdWUqJiBleGNlcHRpb24pCitOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1Np
YmxpbmcoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGV4Y2VwdGlvbiA9IDA7CiAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9vdCgpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3IgKFJlZlB0cjxOb2RlPiBz
aWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAgICAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2libGluZy5nZXQoKSwgZXhj
ZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBh
Y2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJsaW5nLmdldCgpKTsKKyAgICAg
ICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTY5LDI0ICsx
NjYsMjMgQEAgTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKEpTVmFsdWUqJiBleGNl
cHRpb24pCiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICgh
bm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShub2RlLmdldCgpLCBleGNlcHRpb24p
OwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKGFj
Y2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVCkKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dFNpYmxpbmcoSlNW
YWx1ZSomIGV4Y2VwdGlvbikKK05vZGUqIFRyZWVXYWxrZXI6Om5leHRTaWJsaW5nKEV4ZWNTdGF0
ZSogZXhlYykKIHsKLSAgICBleGNlcHRpb24gPSAwOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0g
bV9jdXJyZW50OwogICAgIGlmIChub2RlID09IHJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgd2hpbGUgKDEpIHsKICAgICAgICAgZm9yIChSZWZQdHI8Tm9kZT4gc2libGluZyA9IG5vZGUt
Pm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7ICkgewotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9k
ZVJlc3VsdCA9IGFjY2VwdE5vZGUoc2libGluZy5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0g
YWNjZXB0Tm9kZShleGVjLCBzaWJsaW5nLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChleGVjICYm
IGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBO
b2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMjA2LDMwICsyMDIsMjkgQEAgTm9kZSogVHJl
ZVdhbGtlcjo6bmV4dFNpYmxpbmcoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICAgICAgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgp
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQg
PSBhY2NlcHROb2RlKG5vZGUuZ2V0KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRp
b24pCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5v
ZGUuZ2V0KCkpOworICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2Rl
RmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogfQog
Ci1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05v
ZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgZXhj
ZXB0aW9uID0gMDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICB3aGls
ZSAobm9kZSAhPSByb290KCkpIHsKICAgICAgICAgd2hpbGUgKE5vZGUqIHByZXZpb3VzU2libGlu
ZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICBub2RlID0gcHJldmlv
dXNTaWJsaW5nOwotICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2Rl
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1
bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIHdoaWxlIChOb2RlKiBsYXN0Q2hpbGQgPSBub2RlLT5sYXN0Q2hpbGQo
KSkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBsYXN0Q2hpbGQ7Ci0gICAgICAgICAgICAgICAg
YWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIGFjY2VwdE5vZGVS
ZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGlm
IChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVy
OjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI0NSw4
ICsyNDAsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoSlNWYWx1ZSomIGV4Y2Vw
dGlvbikKICAgICAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgbm9kZSA9IHBhcmVudDsKLSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2Vw
dE5vZGUobm9kZS5nZXQoKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5nZXQo
KSk7CisgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6
OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVh
c2UoKSk7CkBAIC0yNTQsMTUgKzI0OSwxNCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05v
ZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKICAgICByZXR1cm4gMDsKIH0KIAotTm9kZSogVHJlZVdh
bGtlcjo6bmV4dE5vZGUoSlNWYWx1ZSomIGV4Y2VwdGlvbikKK05vZGUqIFRyZWVXYWxrZXI6Om5l
eHROb2RlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBleGNlcHRpb24gPSAwOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAgd2hpbGUgKE5vZGUqIGZp
cnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbm9kZSA9IGZpcnN0Q2hp
bGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKG5vZGUuZ2V0
KCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHNob3J0IGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOworICAgICAgICBp
ZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBU
KQogICAgICAgICAgICAgcmV0dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtMjcx
LDggKzI2NSw4IEBAIENoaWxkcmVuOgogICAgIH0KICAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxp
bmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3QoKSkpIHsKICAgICAgICAgbm9kZSA9
IG5leHRTaWJsaW5nOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9k
ZShub2RlLmdldCgpLCBleGNlcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsK
KyAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVCkKICAgICAgICAgICAgIHJldHVybiBzZXRDdXJyZW50KG5vZGUucmVsZWFzZSgp
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuaCBiL1dlYkNvcmUvZG9tL1Ry
ZWVXYWxrZXIuaAppbmRleCA0MTM4OGJlLi45MGJiZjk2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Rv
bS9UcmVlV2Fsa2VyLmgKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCkBAIC0yNSw2ICsy
NSw3IEBACiAjaWZuZGVmIFRyZWVXYWxrZXJfaAogI2RlZmluZSBUcmVlV2Fsa2VyX2gKIAorI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC00MywyMiAr
NDQsMjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudC5nZXQoKTsgfQogICAgICAgICB2b2lkIHNldEN1cnJl
bnROb2RlKFBhc3NSZWZQdHI8Tm9kZT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgICAgICBOb2Rl
KiBwYXJlbnROb2RlKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0gICAgICAgIE5vZGUqIGZp
cnN0Q2hpbGQoS0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgTm9kZSogbGFzdENo
aWxkKEtKUzo6SlNWYWx1ZSomIGV4Y2VwdGlvbik7Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzU2li
bGluZyhLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBOb2RlKiBuZXh0U2libGlu
ZyhLSlM6OkpTVmFsdWUqJiBleGNlcHRpb24pOwotICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUo
S0pTOjpKU1ZhbHVlKiYgZXhjZXB0aW9uKTsKLSAgICAgICAgTm9kZSogbmV4dE5vZGUoS0pTOjpK
U1ZhbHVlKiYgZXhjZXB0aW9uKTsKKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZShLSlM6OkV4ZWNT
dGF0ZSopOworICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEtKUzo6RXhlY1N0YXRlKik7CisgICAg
ICAgIE5vZGUqIGxhc3RDaGlsZChLSlM6OkV4ZWNTdGF0ZSopOworICAgICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcoS0pTOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
S0pTOjpFeGVjU3RhdGUqKTsKKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEtKUzo6RXhlY1N0
YXRlKik7CisgICAgICAgIE5vZGUqIG5leHROb2RlKEtKUzo6RXhlY1N0YXRlKik7CiAKICAgICAg
ICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlw
dCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBOb2RlKiBwYXJlbnROb2RlKCkgeyBLSlM6OkpT
VmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIHBhcmVudE5vZGUoZXhjZXB0aW9uKTsgfQotICAgICAg
ICBOb2RlKiBmaXJzdENoaWxkKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIGZp
cnN0Q2hpbGQoZXhjZXB0aW9uKTsgfQotICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IEtKUzo6
SlNWYWx1ZSogZXhjZXB0aW9uOyByZXR1cm4gbGFzdENoaWxkKGV4Y2VwdGlvbik7IH0KLSAgICAg
ICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0
dXJuIHByZXZpb3VzU2libGluZyhleGNlcHRpb24pOyB9Ci0gICAgICAgIE5vZGUqIG5leHRTaWJs
aW5nKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIG5leHRTaWJsaW5nKGV4Y2Vw
dGlvbik7IH0KLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyBLSlM6OkpTVmFsdWUqIGV4
Y2VwdGlvbjsgcmV0dXJuIHByZXZpb3VzTm9kZShleGNlcHRpb24pOyB9Ci0gICAgICAgIE5vZGUq
IG5leHROb2RlKCkgeyBLSlM6OkpTVmFsdWUqIGV4Y2VwdGlvbjsgcmV0dXJuIG5leHROb2RlKGV4
Y2VwdGlvbik7IH0KKyAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsgcmV0dXJuIHBhcmVudE5v
ZGUoTm9kZUZpbHRlcjo6ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAg
ICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoTm9kZUZpbHRlcjo6
ZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogbGFz
dENoaWxkKCkgeyByZXR1cm4gbGFzdENoaWxkKE5vZGVGaWx0ZXI6OmV4ZWNTdGF0ZUZyb21Ob2Rl
KG1fY3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsg
cmV0dXJuIHByZXZpb3VzU2libGluZyhOb2RlRmlsdGVyOjpleGVjU3RhdGVGcm9tTm9kZShtX2N1
cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBuZXh0U2libGluZygpIHsgcmV0dXJuIG5l
eHRTaWJsaW5nKE5vZGVGaWx0ZXI6OmV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkp
OyB9CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShO
b2RlRmlsdGVyOjpleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAg
ICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKE5vZGVGaWx0ZXI6OmV4ZWNTdGF0
ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBU
cmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQ
dHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Cg==
</data>
<flag name="review"
          id="9752"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>