<?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>19239</bug_id>
          
          <creation_ts>2008-05-24 22:35:35 -0700</creation_ts>
          <short_desc>remove half-there XML Entity DOM object support</short_desc>
          <delta_ts>2008-05-26 13:08:35 -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>XML</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>17510</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>81400</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-24 22:35:35 -0700</bug_when>
    <thetext>Currently, there is a bit of XML Entity support, but not enough to be useful. The actual entities are expanded when encountered, which is good. But we also have an Entity DOM class, which is never instantiated, and an EntityReferece DOM class, which is instantiated only by createEntityReference, but never has any children, so is useless.

For this bug I will change createEntityReference so it will throw NOT_SUPPORTED_ERR for XML documents, just as it does for HTML documents. I think this will create no practical difficulty, since it does nothing useful today, and is highly unlikely to be widely used on the web.

Once this is done, we can guarantee there are no Entity or EntityReference nodes, and hence no read-only nodes, at all in WebKit, so we can remove some relatively costly checks in the code.

Some day if we find a reason and want to bring these node types back, we can find an efficient way to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81418</commentid>
    <comment_count>1</comment_count>
      <attachid>21330</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-24 23:44:24 -0700</bug_when>
    <thetext>Created attachment 21330
patch

Here&apos;s a patch, but there are tons of regression tests that start failing with this patch.

For whatever reason, many of the dom/xhtml tests chose to use EntityReference nodes, even though they could have used any other type of node, to test functions like insertBefore, removeChild, replaceChild, etc.

There are also quite a few tests that use createEntityReference just so we can test all node types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81427</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-25 01:22:57 -0700</bug_when>
    <thetext>I think I can get some of the speedup without removing anything. Working on that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81428</commentid>
    <comment_count>3</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-25 01:42:18 -0700</bug_when>
    <thetext>I think you can get nearly all the speedup by moving the &quot;have tab index&quot; bit from Node to Element, and adding an &quot;is read only&quot; bit to Node (which would only be set for EntityReference nodes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81446</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-25 08:28:30 -0700</bug_when>
    <thetext>In fact, I can get nearly all the speedup by just fixing the algorithm! A single virtual function call is quite affordable. The old algorithm instead did &lt;depth*2 + 1&gt; virtual function calls. That was the real problem. Patch coming shortly.

Moving from a virtual function to a bit will make things even faster, but I don&apos;t think we&apos;ll see this function on the profile once my patch is in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81448</commentid>
    <comment_count>5</comment_count>
      <attachid>21336</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-25 09:22:22 -0700</bug_when>
    <thetext>Created attachment 21336
patch, passes all regression tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81485</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-25 14:21:55 -0700</bug_when>
    <thetext>#ifdef SUPPORT_ENTITY_NODES ... shouldn&apos;t this be ENABLE(ENTITY_NODES)?

Also, given this:

+inline bool Node::isReadOnlyNode() const
+{
+    return nodeType() == ENTITY_REFERENCE_NODE;
+}

I don&apos;t understand why the other branch of the ifdef has overrides of the non-virtual isReadOnlyNode method.

I&apos;m also not sure an ifdef is the best approach here. I don&apos;t think we will ever want to support two different entity modes, so if we expand support, we&apos;ll just want to change the code, not flip the value of a #define. I suggest just doing it without an ifdef and leaving a comment on what would be needed if we supported entity nodes and unexpanded entity references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81486</commentid>
    <comment_count>7</comment_count>
      <attachid>21336</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-25 14:22:50 -0700</bug_when>
    <thetext>Comment on attachment 21336
patch, passes all regression tests

r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81498</commentid>
    <comment_count>8</comment_count>
      <attachid>21343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-25 19:35:35 -0700</bug_when>
    <thetext>Created attachment 21343
patch that doesn&apos;t use any ifdefs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81503</commentid>
    <comment_count>9</comment_count>
      <attachid>21343</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-25 20:14:09 -0700</bug_when>
    <thetext>Comment on attachment 21343
patch that doesn&apos;t use any ifdefs

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81536</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-26 13:08:35 -0700</bug_when>
    <thetext>Committed revision 34138.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21330</attachid>
            <date>2008-05-24 23:44:24 -0700</date>
            <delta_ts>2008-05-25 09:22:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>EntityPatch.txt</filename>
            <type>text/plain</type>
            <size>17051</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDExNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjAgQEAKKzIwMDgtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjM5CisKKyAgICAgICAgUHV0
IGNvZGUgdGhhdCdzIG9ubHkgdXNlZnVsIGlmIHdlIHJlYWxseSBzdXBwb3J0IEVudGl0eSBhbmQg
RW50aXR5UmVmZXJlbmNlCisgICAgICAgIG5vZGVzIGluc2lkZSAjaWZkZWYgU1VQUE9SVF9FTlRJ
VFlfTk9ERVMuCisKKyAgICAgICAgMS4zJSBzcGVlZHVwIG9mIEFjaWQzIHRlc3QgMjYuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9vYmpjL0RPTS5tbTogUmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlLgor
CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
OjpjcmVhdGVFbnRpdHlSZWZlcmVuY2UpOiBSZXR1cm4gTk9UX1NVUFBPUlRFRF9FUlIgZm9yIFhN
TAorICAgICAgICBkb2N1bWVudHMgYXMgd2VsbCBhcyBIVE1MIGRvY3VtZW50cyB1bmxlc3MgU1VQ
UE9SVF9FTlRJVFlfTk9ERVMuCisKKyAgICAgICAgKiBkb20vRW50aXR5LmNwcDogUHV0IHRoZSBl
bnRpcmUgZmlsZSBpbnNpZGUgI2lmZGVmIFNVUFBPUlRfRU5USVRZX05PREVTLgorICAgICAgICAo
V2ViQ29yZTo6RW50aXR5OjpFbnRpdHkpOiBSZW1vdmVkIHVudXNlZCBjb25zdHJ1Y3Rvci4KKyAg
ICAgICAgKFdlYkNvcmU6OkVudGl0eTo6Y2hpbGRUeXBlQWxsb3dlZCk6IFR3ZWFrZWQgc3dpdGNo
IHN0YXRlbWVudC4KKyAgICAgICAgKiBkb20vRW50aXR5Lmg6IEFkZGVkIGEgc3R1YiBpbXBsZW1l
bnRhdGlvbiB0byBiZSB1c2VkIHdoZW4gU1VQUE9SVF9FTlRJVFlfTk9ERVMKKyAgICAgICAgaXMg
c2V0LCBsZWF2aW5nIHVzIHdpdGgganVzdCBlbm91Z2ggZm9yIHRoZSBsYW5ndWFnZSBiaW5kaW5n
cywgYnV0IG5vdCBhIGNsYXNzCisgICAgICAgIHdlIGNhbiBpbnN0YW50aWF0ZS4KKworICAgICAg
ICAqIGRvbS9FbnRpdHlSZWZlcmVuY2UuY3BwOiBQdXQgdGhlIGVudGlyZSBmaWxlIGluc2lkZSAj
aWZkZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMuCisgICAgICAgIChXZWJDb3JlOjpFbnRpdHlSZWZl
cmVuY2U6OkVudGl0eVJlZmVyZW5jZSk6IFJlbW92ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorICAg
ICAgICAoV2ViQ29yZTo6RW50aXR5UmVmZXJlbmNlOjpjbG9uZU5vZGUpOiBUd2Vha2VkIGEgYml0
LCByZXNvbHZpbmcgaXNzdWVzIG1lbnRpb25lZAorICAgICAgICBpbiB0aGUgY29tbWVudHMgaGVy
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkVudGl0eVJlZmVyZW5jZTo6Y2hpbGRUeXBlQWxsb3dlZCk6
IFR3ZWFrZWQgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgKiBkb20vRW50aXR5UmVmZXJlbmNl
Lmg6IFB1dCB0aGUgZW50aXJlIGNsYXNzIGRlZmluaXRpb24gaW5zaWRlCisgICAgICAgICNpZmRl
ZiBTVVBQT1JUX0VOVElUWV9OT0RFUywgbGVhdmluZyB1cyB3aXRoIGp1c3QgZW5vdWdoIGZvciB0
aGUgbGFuZ3VhZ2UKKyAgICAgICAgYmluZGluZ3MsIGJ1dCBub3QgYSBjbGFzcyB3ZSBjYW4gaW5z
dGFudGlhdGUuCisKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmNwcDogQ29tcGlsZSB0aGUg
bm9uLWlubGluZSBpc1JlYWRPbmx5Tm9kZSBvbmx5IHdoZW4KKyAgICAgICAgU1VQUE9SVF9FTlRJ
VFlfTk9ERVMgaXMgZGVmaW5lZC4KKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmg6IEFkZGVk
IGFuIGlubGluZSBpc1JlYWRPbmx5Tm9kZSB0aGF0IHJldHVybnMgZmFsc2Ugd2hlbgorICAgICAg
ICBTVVBQT1JUX0VOVElUWV9OT0RFUyBpcyBub3QgZGVmaW5lZC4KKworICAgICAgICAqIGRvbS9O
b2RlLmNwcDogQ29tcGlsZSB0aGUgbm9uLWlubGluZSBpc1JlYWRPbmx5Tm9kZSBvbmx5IHdoZW4K
KyAgICAgICAgU1VQUE9SVF9FTlRJVFlfTk9ERVMgaXMgZGVmaW5lZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGU6OmlzUmVhZE9ubHlOb2RlKTogVHdlYWtlZCB0aGUgaW1wbGVtZW50YXRpb24gdG8g
YmUgc2xpZ2h0bHkKKyAgICAgICAgbW9yZSBlZmZpY2llbnQuCisgICAgICAgICogZG9tL05vZGUu
aDogQ2hhbmdlZCBpc1JlYWRPbmx5Tm9kZSB0byBiZSBub24tdmlydHVhbC4gVGhlcmUgd2FzIG5v
IHJlYXNvbgorICAgICAgICBmb3IgaXQgdG8gYmUgdmlydHVhbCBhbmQgbm8gb25lIGV2ZXIgb3Zl
cnJvZGUgaXQuIEFkZGVkIGFuIGlubGluZSBpc1JlYWRPbmx5Tm9kZQorICAgICAgICB0aGF0IHJl
dHVybnMgZmFsc2Ugd2hlbiBTVVBQT1JUX0VOVElUWV9OT0RFUyBpcyBub3QgZGVmaW5lZC4KKwor
ICAgICAgICAqIGRvbS9SYW5nZS5jcHA6IEFkZGVkIGFuIGlubGluZSBjb250YWluZWRCeVJlYWRP
bmx5IHRoYXQgcmV0dXJucyBmYWxzZQorICAgICAgICBmb3IgdXNlIHdoZW4gU1VQUE9SVF9FTlRJ
VFlfTk9ERVMgaXMgbm90IGRlZmluZWQuCisKKyAgICAgICAgKiBkb20vVGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0OjpyZXBsYWNlV2hvbGVUZXh0KTogQ2hhbmdlZCB0aGlzIHRvIG1h
dGNoIGFsbCB0aGUgb3RoZXIgRE9NCisgICAgICAgIG11dGF0aW5nIGZ1bmN0aW9ucyBieSBjaGVj
a2luZyBpc1JlYWRPbmx5TW9kZSBhbmQgcmV0dXJuaW5nIE5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUgorICAgICAgICBpZiBpdCdzIHRydWUuIEluc3RlYWQsIHRoZSBmdW5jdGlvbiBoYWQgY29t
bWVudHMgZXhwbGFpbmluZyB3aHkgaXQncyBuZXZlciB0cnVlLAorICAgICAgICBhbmQgYW4gYXNz
ZXJ0aW9uLCBidXQgdGhlcmUncyBubyBnb29kIHJlYXNvbiB0byBkbyB0aGF0IGluIHRoaXMgb25l
IHBsYWNlIGFuZCBub3doZXJlCisgICAgICAgIGVsc2UgaW4gdGhlIERPTSBpbXBsZW1lbnRhdGlv
bi4gVGhlcmUncyBubyByZWFsIGRpZmZlcmVuY2UgLS0gdGhlIGNvbXBpbGVyIHdpbGwgbGVhdmUK
KyAgICAgICAgdGhlIGNvZGUgb3V0LgorCiAyMDA4LTA1LTI0ICBUaW1vdGh5IEhhdGNoZXIgIDx0
aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXhlcyBhIGh1Z2UgbGVhayB3aXRoIHRoZSBJ
bnNwZWN0b3Igd2hlcmUgaXQgd2FzIHByb3RlY3RpbmcKQEAgLTEzNDIsNyArMTM5OSw3IEBACiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyLgogCi0gICAgICAgIC0gSmF2YVNjcmlwdEdsdWUg
cGFydCBvZiBmaXggZm9yOiAiU1FVSVJSRUxGSVNIOiBmdW5jdGlvbiB0b1N0cmluZyBicm9rZW4g
YWZ0ZXIgY2FsbGluZyIKKyAgICAgICAgLSBXZWJDb3JlIHBhcnQgb2YgZml4IGZvcjogIlNRVUlS
UkVMRklTSDogZnVuY3Rpb24gdG9TdHJpbmcgYnJva2VuIGFmdGVyIGNhbGxpbmciCiAgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg2OQogCiAgICAgICAg
ICogYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaDogQWRkZWQuIFNvdXJjZVByb3Zp
ZGVyIHN1YmNsYXNzIGJhY2tlZCBieSBhIFdlYkNvcmU6OlN0cmluZy4KSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3Mvb2JqYy9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTS5tbQkocmV2aXNpb24gMzQxMTQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw2IEBACiAjaW1wb3J0ICJEb2N1bWVudC5oIgog
I2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2ltcG9ydCAiRG9jdW1lbnRUeXBlLmgiCi0j
aW1wb3J0ICJFbnRpdHlSZWZlcmVuY2UuaCIKICNpbXBvcnQgIkV2ZW50LmgiCiAjaW1wb3J0ICJF
dmVudExpc3RlbmVyLmgiCiAjaW1wb3J0ICJFdmVudFRhcmdldC5oIgpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMzQxMTQpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1OSwxNyArNTU5LDIyIEBAIFBhc3NSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9u
PiBEb2N1bWUKICAgICByZXR1cm4gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0aGlzLCB0YXJn
ZXQsIGRhdGEpOwogfQogCi1QYXNzUmVmUHRyPEVudGl0eVJlZmVyZW5jZT4gRG9jdW1lbnQ6OmNy
ZWF0ZUVudGl0eVJlZmVyZW5jZShjb25zdCBTdHJpbmcgJm5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorUGFzc1JlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IERvY3VtZW50OjpjcmVhdGVFbnRpdHlSZWZl
cmVuY2UoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IWlzVmFsaWROYW1lKG5hbWUpKSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9DSEFSQUNURVJfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisjaWZuZGVmIFNVUFBPUlRfRU5USVRZX05PREVT
CisgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsKKyAgICByZXR1cm4gMDsKKyNlbHNlCiAgICAg
aWYgKGlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgZWMgPSBOT1RfU1VQUE9SVEVEX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBuZXcgRW50aXR5UmVmZXJlbmNl
KHRoaXMsIG5hbWUpOworI2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8RWRpdGluZ1RleHQ+IERvY3Vt
ZW50OjpjcmVhdGVFZGl0aW5nVGV4dE5vZGUoY29uc3QgU3RyaW5nICZ0ZXh0KQpJbmRleDogV2Vi
Q29yZS9kb20vRW50aXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbnRpdHkuY3Bw
CShyZXZpc2lvbiAzNDExNCkKKysrIFdlYkNvcmUvZG9tL0VudGl0eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOCArMSw2IEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDI0ICsxNywyMiBAQAog
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCisKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJFbnRpdHkuaCIKIAotbmFtZXNwYWNlIFdlYkNv
cmUgeworI2lmZGVmIFNVUFBPUlRfRU5USVRZX05PREVTCiAKLUVudGl0eTo6RW50aXR5KERvY3Vt
ZW50KiBkb2MpCi0gICAgOiBDb250YWluZXJOb2RlKGRvYykKLXsKLX0KK25hbWVzcGFjZSBXZWJD
b3JlIHsKIAotRW50aXR5OjpFbnRpdHkoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiBuYW1l
KQotICAgIDogQ29udGFpbmVyTm9kZShkb2MpCitFbnRpdHk6OkVudGl0eShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICA6IENvbnRhaW5lck5vZGUoZG9jdW1lbnQp
CiAgICAgLCBtX25hbWUobmFtZSkKIHsKIH0KIAotRW50aXR5OjpFbnRpdHkoRG9jdW1lbnQqIGRv
YywgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3QgU3RyaW5nJiBzeXN0ZW1JZCwgY29uc3Qg
U3RyaW5nJiBub3RhdGlvbk5hbWUpCi0gICAgOiBDb250YWluZXJOb2RlKGRvYykKK0VudGl0eTo6
RW50aXR5KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBwdWJsaWNJZCwgY29uc3Qg
U3RyaW5nJiBzeXN0ZW1JZCwgY29uc3QgU3RyaW5nJiBub3RhdGlvbk5hbWUpCisgICAgOiBDb250
YWluZXJOb2RlKGRvY3VtZW50KQogICAgICwgbV9wdWJsaWNJZChwdWJsaWNJZCkKICAgICAsIG1f
c3lzdGVtSWQoc3lzdGVtSWQpCiAgICAgLCBtX25vdGF0aW9uTmFtZShub3RhdGlvbk5hbWUpCkBA
IC01NSwyNSArNTEsMzMgQEAgTm9kZTo6Tm9kZVR5cGUgRW50aXR5Ojpub2RlVHlwZSgpIGNvbnN0
CiAKIFBhc3NSZWZQdHI8Tm9kZT4gRW50aXR5OjpjbG9uZU5vZGUoYm9vbCAvKmRlZXAqLykKIHsK
LSAgICAvLyBTcGVjIHNheXMgY2xvbmluZyBFbnRpdHkgbm9kZXMgaXMgImltcGxlbWVudGF0aW9u
IGRlcGVuZGVudCIuIFdlIGRvIG5vdCBzdXBwb3J0IGl0LgorICAgIC8vIFNwZWMgc2F5cyBjbG9u
aW5nIEVudGl0eSBub2RlcyBpcyAiaW1wbGVtZW50YXRpb24gZGVwZW5kZW50Ii4gV2UgZG8gbm90
IHlldCBzdXBwb3J0IGl0LgogICAgIHJldHVybiAwOwogfQogCi0vLyBET00gU2VjdGlvbiAxLjEu
MQogYm9vbCBFbnRpdHk6OmNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgY2Fz
ZSBFTlRJVFlfTk9ERToKKyAgICAgICAgY2FzZSBET0NVTUVOVF9OT0RFOgorICAgICAgICBjYXNl
IERPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RF
OgorICAgICAgICBjYXNlIE5PVEFUSU9OX05PREU6CisgICAgICAgIGNhc2UgWFBBVEhfTkFNRVNQ
QUNFX05PREU6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQ0RBVEFf
U0VDVElPTl9OT0RFOgorICAgICAgICBjYXNlIENPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBF
TEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgRU5USVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAg
ICBjYXNlIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgY2FzZSBDT01NRU5U
X05PREU6CiAgICAgICAgIGNhc2UgVEVYVF9OT0RFOgotICAgICAgICBjYXNlIENEQVRBX1NFQ1RJ
T05fTk9ERToKLSAgICAgICAgY2FzZSBFTlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS9kb20vRW50aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRW50aXR5LmgJ
KHJldmlzaW9uIDM0MTE0KQorKysgV2ViQ29yZS9kb20vRW50aXR5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBs
ZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw4ICsyNiwxMCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEVudGl0eSA6IHB1YmxpYyBDb250YWluZXJOb2RlCi17Citj
bGFzcyBFbnRpdHkgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7CisKKyNpZmRlZiBTVVBQT1JUX0VO
VElUWV9OT0RFUworCiBwdWJsaWM6CiAgICAgRW50aXR5KERvY3VtZW50Kik7CiAgICAgRW50aXR5
KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTUwLDYgKzUwLDE2IEBAIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fc3lzdGVtSWQ7CiAgICAgU3RyaW5nIG1fbm90YXRpb25OYW1lOwog
ICAgIFN0cmluZyBtX25hbWU7CisKKyNlbHNlCisKK3B1YmxpYzoKKyAgICBTdHJpbmcgcHVibGlj
SWQoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAg
ICBTdHJpbmcgc3lzdGVtSWQoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4g
U3RyaW5nKCk7IH0KKyAgICBTdHJpbmcgbm90YXRpb25OYW1lKCkgY29uc3QgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9CisKKyNlbmRpZgorCiB9OwogCiB9IC8vbmFt
ZXNwYWNlCkluZGV4OiBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5jcHAJKHJldmlzaW9uIDM0MTE0KQorKysg
V2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4ICsx
LDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIgS2VsbHkgKHBt
a0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMjAgKzE3LDIwIEBACiAgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkVudGl0eVJlZmVyZW5jZS5oIgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7
CisjaWZkZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKIAotRW50aXR5UmVmZXJlbmNlOjpFbnRpdHlS
ZWZlcmVuY2UoRG9jdW1lbnQqIGRvYykKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQotewotfQor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1FbnRpdHlSZWZlcmVuY2U6OkVudGl0eVJlZmVyZW5jZShE
b2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpCi0gICAgOiBDb250YWluZXJO
b2RlKGRvYykKK0VudGl0eVJlZmVyZW5jZTo6RW50aXR5UmVmZXJlbmNlKERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKQorICAgIDogQ29udGFpbmVyTm9kZShkb2N1
bWVudCkKICAgICAsIG1fZW50aXR5TmFtZShlbnRpdHlOYW1lKQogeworICAgIC8vIEZJWE1FOiBJ
ZiB0aGlzIGlzIGEga25vd24gZW50aXR5LCB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlIGFyZSBz
dXBwb3NlZAorICAgIC8vIHRvIGJlIGEgY29weSBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIGNvcnJl
c3BvbmRpbmcgRW50aXR5LgogfQogCiBTdHJpbmcgRW50aXR5UmVmZXJlbmNlOjpub2RlTmFtZSgp
IGNvbnN0CkBAIC00NSwzMSArNDMsMzYgQEAgTm9kZTo6Tm9kZVR5cGUgRW50aXR5UmVmZXJlbmNl
Ojpub2RlVHlwZQogICAgIHJldHVybiBFTlRJVFlfUkVGRVJFTkNFX05PREU7CiB9CiAKLVBhc3NS
ZWZQdHI8Tm9kZT4gRW50aXR5UmVmZXJlbmNlOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQorUGFzc1Jl
ZlB0cjxOb2RlPiBFbnRpdHlSZWZlcmVuY2U6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewog
ICAgIFJlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IGNsb25lID0gbmV3IEVudGl0eVJlZmVyZW5jZShk
b2N1bWVudCgpLCBtX2VudGl0eU5hbWUpOwotICAgIC8vICMjIyBtYWtlIHN1cmUgY2hpbGRyZW4g
YXJlIHJlYWRvbmx5Ci0gICAgLy8gIyMjIHNpbmNlIHdlIGFyZSBhIHJlZmVyZW5jZSwgc2hvdWxk
IHdlIGNsb25lIGNoaWxkcmVuIGFueXdheSAoZXZlbiBpZiBub3QgZGVlcD8pCi0gICAgaWYgKGRl
ZXApCi0gICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CisgICAgY2xvbmVDaGls
ZE5vZGVzKGNsb25lLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwogfQogCi0v
LyBET00gU2VjdGlvbiAxLjEuMQogYm9vbCBFbnRpdHlSZWZlcmVuY2U6OmNoaWxkVHlwZUFsbG93
ZWQoTm9kZVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBB
VFRSSUJVVEVfTk9ERToKKyAgICAgICAgY2FzZSBFTlRJVFlfTk9ERToKKyAgICAgICAgY2FzZSBE
T0NVTUVOVF9OT0RFOgorICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAg
Y2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5PVEFUSU9OX05PREU6
CisgICAgICAgIGNhc2UgWFBBVEhfTkFNRVNQQUNFX05PREU6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgQ0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICBjYXNlIENP
TU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6CisgICAgICAgIGNhc2UgRU5U
SVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05f
Tk9ERToKLSAgICAgICAgY2FzZSBDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgVEVYVF9OT0RF
OgotICAgICAgICBjYXNlIENEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgY2FzZSBFTlRJVFlf
UkVGRVJFTkNFX05PREU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDM0
MTE0KQorKysgV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxMCArMjYsMTEgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBFbnRpdHlSZWZlcmVuY2UgOiBwdWJsaWMgQ29udGFpbmVyTm9k
ZQoteworY2xhc3MgRW50aXR5UmVmZXJlbmNlIDogcHVibGljIENvbnRhaW5lck5vZGUgeworCisj
aWZkZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKKwogcHVibGljOgotICAgIEVudGl0eVJlZmVyZW5j
ZShEb2N1bWVudCopOwogICAgIEVudGl0eVJlZmVyZW5jZShEb2N1bWVudCosIGNvbnN0IFN0cmlu
ZyYgZW50aXR5TmFtZSk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwpA
QCAtNDEsNiArNDAsOSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZW50aXR5
TmFtZTsKKworI2VuZGlmCisKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9t
L05hbWVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFw
LmNwcAkocmV2aXNpb24gMzQxMTQpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjMsOSArMzIzLDEzIEBAIGJvb2wgTmFtZWRBdHRyTWFwOjptYXBz
RXF1aXZhbGVudChjb25zdCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIFNVUFBPUlRf
RU5USVRZX05PREVTCisKIGJvb2wgTmFtZWRBdHRyTWFwOjppc1JlYWRPbmx5Tm9kZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzUmVhZE9ubHlOb2RlKCk7
CiB9CiAKKyNlbmRpZgorCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAkocmV2aXNpb24gMzQxMTQpCisr
KyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEw
NCwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgQXRvbWljU3RyaW5nIG1faWQ7CiB9OwogCisjaWZuZGVm
IFNVUFBPUlRfRU5USVRZX05PREVTCisKK2lubGluZSBib29sIE5hbWVkQXR0ck1hcDo6aXNSZWFk
T25seU5vZGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCisKIH0g
Ly9uYW1lc3BhY2UKIAogI3VuZGVmIGlkCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzQxMTQpCisrKyBXZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODY0LDE4ICs4NjQsMjIgQEAgdm9p
ZCBOb2RlOjpyZW1vdmVkRnJvbURvY3VtZW50KCkKICAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2Up
OwogfQogCi1ib29sIE5vZGU6OmlzUmVhZE9ubHlOb2RlKCkKKyNpZmRlZiBTVVBQT1JUX0VOVElU
WV9OT0RFUworCitib29sIE5vZGU6OmlzUmVhZE9ubHlOb2RlKCkgY29uc3QKIHsKLSAgICAvLyBF
bnRpdHkgJiBFbnRpdHkgUmVmZXJlbmNlIG5vZGVzIGFuZCB0aGVpciBkZXNjZW5kYW50cyBhcmUg
cmVhZC1vbmx5Ci0gICAgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4pIHsKLSAgICAgICAg
aWYgKG4tPm5vZGVUeXBlKCkgPT0gRU5USVRZX05PREUgfHwgbi0+bm9kZVR5cGUoKSA9PSBFTlRJ
VFlfUkVGRVJFTkNFX05PREUpCisgICAgLy8gRW50aXR5ICYgRW50aXR5UmVmZXJlbmNlIG5vZGVz
IGFuZCB0aGVpciBkZXNjZW5kYW50cyBhcmUgcmVhZC1vbmx5LgorICAgIC8vIEZJWE1FOiBJZiB3
ZSBldmVyIGRvIHR1cm4gdGhpcyBvbiwgd2UnbGwgbmVlZCB0byBtYWtlIGl0IGZhc3Rlci4KKyAg
ICBmb3IgKE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
IE5vZGVUeXBlIHR5cGUgPSBuLT5ub2RlVHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBFTlRJ
VFlfTk9ERSB8fCB0eXBlID09IEVOVElUWV9SRUZFUkVOQ0VfTk9ERSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKKyNlbmRpZgorCiBOb2RlICpOb2RlOjpwcmV2aW91c0VkaXRhYmxlKCkg
Y29uc3QKIHsKICAgICBOb2RlICpub2RlID0gcHJldmlvdXNMZWFmTm9kZSgpOwpJbmRleDogV2Vi
Q29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMzQxMTQpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw3
ICszMDEsNyBAQCBwdWJsaWM6CiAgICAgICByZXR1cm4gbV9pbkRvY3VtZW50OyAKICAgICB9CiAg
ICAgCi0gICAgdmlydHVhbCBib29sIGlzUmVhZE9ubHlOb2RlKCk7CisgICAgYm9vbCBpc1JlYWRP
bmx5Tm9kZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVU
eXBlKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2RlQ291
bnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CkBAIC01MTYsNiArNTE2LDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHZp
cnR1YWxIYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKIH07CiAKKyNpZm5k
ZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKKworaW5saW5lIGJvb2wgTm9kZTo6aXNSZWFkT25seU5v
ZGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCisKIH0gLy9uYW1l
c3BhY2UKIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDM0MTE0KQorKysgV2Vi
Q29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAorI2lmbmRlZiBTVVBQT1JUX0VOVElUWV9OT0RFUworCitpbmxpbmUgYm9vbCBS
YW5nZTo6Y29udGFpbmVkQnlSZWFkT25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKIGNsYXNzIFJhbmdlQ291bnRlciB7CiBwdWJs
aWM6CkBAIC0xNTE5LDYgKzE1MjgsOCBAQCB2b2lkIFJhbmdlOjpjaGVja0RlbGV0ZUV4dHJhY3Qo
RXhjZXB0aW9uCiAgICAgfQogfQogCisjaWZkZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKKwogYm9v
bCBSYW5nZTo6Y29udGFpbmVkQnlSZWFkT25seSgpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlKiBu
ID0gbV9zdGFydC5jb250YWluZXIoKTsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewpAQCAtMTUz
Miw2ICsxNTQzLDggQEAgYm9vbCBSYW5nZTo6Y29udGFpbmVkQnlSZWFkT25seSgpIGNvbnN0CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisjZW5kaWYKKwogTm9kZSogUmFuZ2U6OmZpcnN0Tm9kZSgp
IGNvbnN0CiB7CiAgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5lcigpKQpJbmRleDogV2ViQ29yZS9k
b20vVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vVGV4dC5jcHAJKHJldmlzaW9u
IDM0MTE0KQorKysgV2ViQ29yZS9kb20vVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSwx
MiArMTM5LDE1IEBAIFN0cmluZyBUZXh0Ojp3aG9sZVRleHQoKSBjb25zdAogICAgIHJldHVybiBT
dHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dD4gVGV4dDo6cmVwbGFj
ZVdob2xlVGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQsIEV4Y2VwdGlvbkNvZGUmKQorUGFzc1Jl
ZlB0cjxUZXh0PiBUZXh0OjpyZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCAicmVhZC1vbmx5
IiB0ZXh0IG5vZGVzIChubyBFbnRpdHkgbm9kZSBzdXBwb3J0KQotICAgIC8vIFRodXMsIHdlIHJl
bW92ZSBhbGwgYWRqYWNlbnQgdGV4dCBub2RlcywgYW5kIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9m
IHRoaXMgb25lLgotICAgIEFTU0VSVCghaXNSZWFkT25seU5vZGUoKSk7Ci0gICAgLy8gVGhpcyBt
ZXRob2Qgb25seSByYWlzZXMgZXhjZXB0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBFbnRpdHkgbm9k
ZXMgKHdoaWNoIHdlIGRvbid0IHN1cHBvcnQpCisgICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWQtb25seS4KKyAgICBpZiAoaXNSZWFk
T25seU5vZGUoKSkgeworICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gV2UgcmVtb3ZlIGFsbCBhZGphY2Vu
dCB0ZXh0IG5vZGVzLCBhbmQgcmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhpcyBvbmUuCiAKICAg
ICAvLyBQcm90ZWN0IHN0YXJ0VGV4dCBhbmQgZW5kVGV4dCBhZ2FpbnN0IG11dGF0aW9uIGV2ZW50
IGhhbmRsZXJzIHJlbW92aW5nIHRoZSBsYXN0IHJlZgogICAgIFJlZlB0cjxUZXh0PiBzdGFydFRl
eHQgPSBjb25zdF9jYXN0PFRleHQqPihlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUo
dGhpcykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21336</attachid>
            <date>2008-05-25 09:22:22 -0700</date>
            <delta_ts>2008-05-25 19:35:35 -0700</delta_ts>
            <desc>patch, passes all regression tests</desc>
            <filename>EntityPatch.txt</filename>
            <type>text/plain</type>
            <size>17578</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDEyNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDgtMDUtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjM5CisKKyAgICAgICAgUHV0
IGNvZGUgdGhhdCdzIG9ubHkgdXNlZnVsIGlmIHdlIGFkZCBhZGRpdGlvbmFsIHN1cHBvcnQgZm9y
IEVudGl0eSBhbmQKKyAgICAgICAgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGluc2lkZSAjaWZkZWYg
U1VQUE9SVF9FTlRJVFlfTk9ERVMuCisKKyAgICAgICAgMS44JSBzcGVlZHVwIG9mIEFjaWQzIHRl
c3QgMjYuCisKKyAgICAgICAgVGhlIG9ubHkgcmVhZC1vbmx5IG5vZGVzIHdlIGV2ZXIgY3JlYXRl
IGFyZSBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMuCisgICAgICAgIFRoZXNlIGFyZSBvbmx5IGNyZWF0
ZWQgYnkgZXhwbGljaXQgY2FsbHMgdG8gdGhlIERvY3VtZW50LmNyZWF0ZUVudGl0eVJlZmVyZW5j
ZQorICAgICAgICBmdW5jdGlvbi4gU2luY2UgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIHJlYWQtb25s
eSwgdGhlcmUgY2FuIGJlIG5vIGNoaWxkcmVuIG9mCisgICAgICAgIHRoZXNlIG5vZGVzLCBzbyBu
byBvdGhlciB0eXBlcyBvZiBub2RlcyBjYW4gYmUgcmVhZC1vbmx5IGR1ZSB0byB0aGUgcnVsZSB0
aGF0CisgICAgICAgIG1ha2VzIGRlc2NlbmRhbnRzIG9mIEVudGl0eSBhbmQgRW50aXR5UmVmZXJl
bmNlIG5vZGVzIHJlYWQtb25seS4KKworICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOiBS
ZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBkb20vQXR0ci5oOiBPdmVycm9k
ZSBpc1JlYWRPbmx5Tm9kZSB0byByZXR1cm4gZmFsc2Ugd2hlbiBTVVBQT1JUX0VOVElUWV9OT0RF
UworICAgICAgICBpcyBub3QgZGVmaW5lZC4gVGhpcyBpcyBub3QgYSB2aXJ0dWFsIGZ1bmN0aW9u
LCBzbyB0aGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gdGhlCisgICAgICAgIHR5cGUgaXMga25vd24g
dG8gdGhlIGNvbXBpbGVyIGF0IGNvbXBpbGUtdGltZS4KKyAgICAgICAgKiBkb20vQ2hhcmFjdGVy
RGF0YS5oOiBEaXR0by4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOiBEaXR0by4KKyAgICAgICAg
KiBkb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmg6IERpdHRvLgorCisgICAgICAgICogZG9tL0Vu
dGl0eS5jcHA6IFB1dCB0aGUgZW50aXJlIGZpbGUgaW5zaWRlICNpZmRlZiBTVVBQT1JUX0VOVElU
WV9OT0RFUy4KKyAgICAgICAgKFdlYkNvcmU6OkVudGl0eTo6RW50aXR5KTogUmVtb3ZlZCB1bnVz
ZWQgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpFbnRpdHk6OmNoaWxkVHlwZUFsbG93
ZWQpOiBUd2Vha2VkIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgICAgICogZG9tL0VudGl0eS5oOiBB
ZGRlZCBhIHN0dWIgaW1wbGVtZW50YXRpb24gdG8gYmUgdXNlZCB3aGVuIFNVUFBPUlRfRU5USVRZ
X05PREVTCisgICAgICAgIGlzIHNldCwgbGVhdmluZyB1cyB3aXRoIGp1c3QgZW5vdWdoIGZvciB0
aGUgbGFuZ3VhZ2UgYmluZGluZ3MsIGJ1dCBub3QgYSBjbGFzcworICAgICAgICB3ZSBjYW4gaW5z
dGFudGlhdGUuCisKKyAgICAgICAgKiBkb20vRW50aXR5UmVmZXJlbmNlLmNwcDogUmVtb3ZlZCB1
bnVzZWQgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJDb3JlOjpFbnRpdHlSZWZlcmVuY2U6OmNs
b25lTm9kZSk6IFR3ZWFrZWQgYSBiaXQsIHJlc29sdmluZyBpc3N1ZXMgbWVudGlvbmVkCisgICAg
ICAgIGluIHRoZSBjb21tZW50cyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6RW50aXR5UmVmZXJl
bmNlOjpjaGlsZFR5cGVBbGxvd2VkKTogVHdlYWtlZCBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAg
ICAqIGRvbS9FbnRpdHlSZWZlcmVuY2UuaDogUmVtb3ZlZCB1bnVzZWQgY29uc3RydWN0b3IuCisK
KyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmNwcDogQ29tcGlsZSB0aGUgbm9uLWlubGluZSBp
c1JlYWRPbmx5Tm9kZSBvbmx5IHdoZW4KKyAgICAgICAgU1VQUE9SVF9FTlRJVFlfTk9ERVMgaXMg
ZGVmaW5lZC4KKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmg6IEFkZGVkIGFuIGlubGluZSBp
c1JlYWRPbmx5Tm9kZSB0aGF0IHJldHVybnMgZmFsc2Ugd2hlbgorICAgICAgICBTVVBQT1JUX0VO
VElUWV9OT0RFUyBpcyBub3QgZGVmaW5lZC4gU2VlIHRoZSBjaGFuZ2UgdG8gRWxlbWVudC5oIGFi
b3ZlLgorCisgICAgICAgICogZG9tL05vZGUuY3BwOiBDb21waWxlIHRoZSBub24taW5saW5lIGlz
UmVhZE9ubHlOb2RlIG9ubHkgd2hlbgorICAgICAgICBTVVBQT1JUX0VOVElUWV9OT0RFUyBpcyBk
ZWZpbmVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNSZWFkT25seU5vZGUpOiBUd2Vha2Vk
IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBkbyBoYWxmIGFzIG1hbnkKKyAgICAgICAgdmlydHVhbCBm
dW5jdGlvbiBjYWxscyBieSBvbmx5IGNhbGxpbmcgbm9kZVR5cGUgb25jZSBvbiBlYWNoIG5vZGUu
CisgICAgICAgICogZG9tL05vZGUuaDogQ2hhbmdlZCBpc1JlYWRPbmx5Tm9kZSB0byBiZSBub24t
dmlydHVhbC4gVGhlcmUgd2FzIG5vIHJlYXNvbgorICAgICAgICBmb3IgaXQgdG8gYmUgdmlydHVh
bCBhbmQgbm8gb25lIGV2ZXIgb3ZlcnJvZGUgaXQuIEFkZGVkIGFuIGlubGluZSBpc1JlYWRPbmx5
Tm9kZQorICAgICAgICB3aGVuIFNVUFBPUlRfRU5USVRZX05PREVTIGlzIG5vdCBkZWZpbmVkIHdo
aWNoIGNoZWNrcyBvbmx5IHRoZSBzaW5nbGUgbm9kZSB0byBzZWUKKyAgICAgICAgaWYgaXQncyBh
biBFbnRpdHlSZWZlcmVuY2Ugbm9kZSAtLSB3ZSBjcmVhdGUgdGhlbSB3aXRoIG5vIGNoaWxkcmVu
IGFuZCBubyBjaGlsZHJlbgorICAgICAgICBjYW4gYmUgYWRkZWQsIHNvIHRoYXQncyB0aGUgb25s
eSBraW5kIG9mIG5vZGUgdGhhdCBjYW4gYmUgcmVhZC1vbmx5LgorCisgICAgICAgICogZG9tL1Rl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dDo6cmVwbGFjZVdob2xlVGV4dCk6IENoYW5n
ZWQgdGhpcyB0byBtYXRjaCBhbGwgdGhlIG90aGVyIERPTQorICAgICAgICBtdXRhdGluZyBmdW5j
dGlvbnMgYnkgY2hlY2tpbmcgaXNSZWFkT25seU5vZGUgYW5kIHJldHVybmluZyBOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlIKKyAgICAgICAgaWYgaXQncyB0cnVlLiBJbnN0ZWFkLCB0aGUgZnVu
Y3Rpb24gaGFkIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5IGl0J3MgbmV2ZXIgdHJ1ZSwKKyAgICAg
ICAgYW5kIGFuIGFzc2VydGlvbiwgYnV0IHRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gdG8gZG8gdGhh
dCBpbiB0aGlzIG9uZSBwbGFjZSBhbmQgbm93aGVyZQorICAgICAgICBlbHNlIGluIHRoZSBET00g
aW1wbGVtZW50YXRpb24uIExpa2UgbW9zdCBvdGhlciBjaGVja3Mgb2YgaXNSZWFkT25seU5vZGUs
IHRoaXMgaXMgZGVhZAorICAgICAgICBjb2RlIHVudGlsIGFuZCB1bmxlc3Mgd2UgYWRkIG1vcmUg
RW50aXR5IGFuZCBFbnRpdHlSZWZlcmVuY2Ugc3VwcG9ydC4KKwogMjAwOC0wNS0yNSAgTWFyY28g
QmFyaXNpb25lICA8bWFyY28uYmFyaXNpb25lQGNvbGxhYm9yYS5jby51az4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbHAgVG9rZXIuCkBAIC0xMzgwLDcgKzE0NDIsNyBAQAogCiAgICAgICAgIFJl
dmlld2VkIGJ5IE9saXZlci4KIAotICAgICAgICAtIEphdmFTY3JpcHRHbHVlIHBhcnQgb2YgZml4
IGZvcjogIlNRVUlSUkVMRklTSDogZnVuY3Rpb24gdG9TdHJpbmcgYnJva2VuIGFmdGVyIGNhbGxp
bmciCisgICAgICAgIC0gV2ViQ29yZSBwYXJ0IG9mIGZpeCBmb3I6ICJTUVVJUlJFTEZJU0g6IGZ1
bmN0aW9uIHRvU3RyaW5nIGJyb2tlbiBhZnRlciBjYWxsaW5nIgogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4NjkKIAogICAgICAgICAqIGJpbmRpbmdz
L2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmg6IEFkZGVkLiBTb3VyY2VQcm92aWRlciBzdWJjbGFz
cyBiYWNrZWQgYnkgYSBXZWJDb3JlOjpTdHJpbmcuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHJl
dmlzaW9uIDM0MTI2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBvcnQgIkRv
Y3VtZW50RnJhZ21lbnQuaCIKICNpbXBvcnQgIkRvY3VtZW50VHlwZS5oIgotI2ltcG9ydCAiRW50
aXR5UmVmZXJlbmNlLmgiCiAjaW1wb3J0ICJFdmVudC5oIgogI2ltcG9ydCAiRXZlbnRMaXN0ZW5l
ci5oIgogI2ltcG9ydCAiRXZlbnRUYXJnZXQuaCIKSW5kZXg6IFdlYkNvcmUvZG9tL0F0dHIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9BdHRyLmgJKHJldmlzaW9uIDM0MTI2KQorKysgV2Vi
Q29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHNldFNwZWNpZmllZChib29sIHNwZWNpZmllZCkgeyBtX2F0dHJXYXNTcGVj
aWZpZWRPckVsZW1lbnRIYXNSYXJlRGF0YSA9IHNwZWNpZmllZDsgfQogCisjaWZuZGVmIFNVUFBP
UlRfRU5USVRZX05PREVTCisgICAgYm9vbCBpc1JlYWRPbmx5Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CiAg
ICAgUmVmUHRyPEF0dHJpYnV0ZT4gbV9hdHRyaWJ1dGU7CkluZGV4OiBXZWJDb3JlL2RvbS9DaGFy
YWN0ZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCShy
ZXZpc2lvbiAzNDEyNikKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNiArNjEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBvZmZzZXRJ
bkNoYXJhY3RlcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSopOwogICAgIAorI2lmbmRlZiBTVVBQT1JUX0VOVElUWV9OT0RFUworICAgIGJv
b2wgaXNSZWFkT25seU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKIHBy
b3RlY3RlZDoKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9kYXRhOwogCkluZGV4OiBXZWJDb3Jl
L2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5oCShyZXZp
c2lvbiAzNDEyNikKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTkxLDYgKzE5MSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGZpbmlzaFBhcnNpbmdD
aGlsZHJlbigpOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpblBhcnNpbmdDaGlsZHJlbigpIHsgbV9w
YXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCA9IGZhbHNlOyB9CiAKKyNpZm5kZWYgU1VQUE9SVF9FTlRJ
VFlfTk9ERVMKKyAgICBib29sIGlzUmVhZE9ubHlOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEoKTsK
ICAgICBjb25zdCBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhKCkgY29uc3Q7CkluZGV4OiBXZWJD
b3JlL2RvbS9FbnRpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VudGl0eS5jcHAJ
KHJldmlzaW9uIDM0MTI2KQorKysgV2ViQ29yZS9kb20vRW50aXR5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw4ICsxLDYgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBp
bXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0
ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTksMjQgKzE3LDIyIEBACiAg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KKwogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVudGl0eS5oIgogCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7CisjaWZkZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKIAotRW50aXR5OjpFbnRpdHkoRG9jdW1l
bnQqIGRvYykKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQotewotfQorbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1FbnRpdHk6OkVudGl0eShEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIG5hbWUp
Ci0gICAgOiBDb250YWluZXJOb2RlKGRvYykKK0VudGl0eTo6RW50aXR5KERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIDogQ29udGFpbmVyTm9kZShkb2N1bWVudCkK
ICAgICAsIG1fbmFtZShuYW1lKQogewogfQogCi1FbnRpdHk6OkVudGl0eShEb2N1bWVudCogZG9j
LCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBjb25zdCBT
dHJpbmcmIG5vdGF0aW9uTmFtZSkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQorRW50aXR5OjpF
bnRpdHkoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHB1YmxpY0lkLCBjb25zdCBT
dHJpbmcmIHN5c3RlbUlkLCBjb25zdCBTdHJpbmcmIG5vdGF0aW9uTmFtZSkKKyAgICA6IENvbnRh
aW5lck5vZGUoZG9jdW1lbnQpCiAgICAgLCBtX3B1YmxpY0lkKHB1YmxpY0lkKQogICAgICwgbV9z
eXN0ZW1JZChzeXN0ZW1JZCkKICAgICAsIG1fbm90YXRpb25OYW1lKG5vdGF0aW9uTmFtZSkKQEAg
LTU1LDI1ICs1MSwzMyBAQCBOb2RlOjpOb2RlVHlwZSBFbnRpdHk6Om5vZGVUeXBlKCkgY29uc3QK
IAogUGFzc1JlZlB0cjxOb2RlPiBFbnRpdHk6OmNsb25lTm9kZShib29sIC8qZGVlcCovKQogewot
ICAgIC8vIFNwZWMgc2F5cyBjbG9uaW5nIEVudGl0eSBub2RlcyBpcyAiaW1wbGVtZW50YXRpb24g
ZGVwZW5kZW50Ii4gV2UgZG8gbm90IHN1cHBvcnQgaXQuCisgICAgLy8gU3BlYyBzYXlzIGNsb25p
bmcgRW50aXR5IG5vZGVzIGlzICJpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQiLiBXZSBkbyBub3Qg
eWV0IHN1cHBvcnQgaXQuCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8vIERPTSBTZWN0aW9uIDEuMS4x
CiBib29sIEVudGl0eTo6Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFUVFJJQlVURV9OT0RFOgorICAgICAgICBjYXNl
IEVOVElUWV9OT0RFOgorICAgICAgICBjYXNlIERPQ1VNRU5UX05PREU6CisgICAgICAgIGNhc2Ug
RE9DVU1FTlRfVFlQRV9OT0RFOgorICAgICAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6
CisgICAgICAgIGNhc2UgTk9UQVRJT05fTk9ERToKKyAgICAgICAgY2FzZSBYUEFUSF9OQU1FU1BB
Q0VfTk9ERToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBDREFUQV9T
RUNUSU9OX05PREU6CisgICAgICAgIGNhc2UgQ09NTUVOVF9OT0RFOgogICAgICAgICBjYXNlIEVM
RU1FTlRfTk9ERToKKyAgICAgICAgY2FzZSBFTlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAg
IGNhc2UgUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAgICAgICBjYXNlIENPTU1FTlRf
Tk9ERToKICAgICAgICAgY2FzZSBURVhUX05PREU6Ci0gICAgICAgIGNhc2UgQ0RBVEFfU0VDVElP
Tl9OT0RFOgotICAgICAgICBjYXNlIEVOVElUWV9SRUZFUkVOQ0VfTk9ERToKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2RvbS9FbnRpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbnRpdHkuaAko
cmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9FbnRpdHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw4ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDggKzI2LDEwIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgRW50aXR5IDogcHVibGljIENvbnRhaW5lck5vZGUKLXsKK2Ns
YXNzIEVudGl0eSA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKKworI2lmZGVmIFNVUFBPUlRfRU5U
SVRZX05PREVTCisKIHB1YmxpYzoKICAgICBFbnRpdHkoRG9jdW1lbnQqKTsKICAgICBFbnRpdHko
RG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG5hbWUpOwpAQCAtNTAsNiArNTAsMTYgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgbV9zeXN0ZW1JZDsKICAgICBTdHJpbmcgbV9ub3RhdGlvbk5hbWU7CiAg
ICAgU3RyaW5nIG1fbmFtZTsKKworI2Vsc2UKKworcHVibGljOgorICAgIFN0cmluZyBwdWJsaWNJ
ZCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAg
IFN0cmluZyBzeXN0ZW1JZCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBT
dHJpbmcoKTsgfQorICAgIFN0cmluZyBub3RhdGlvbk5hbWUoKSBjb25zdCB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKworI2VuZGlmCisKIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBX
ZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEs
NiBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9u
IGZvciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwyMCArMTcsMTggQEAKICAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRW50aXR5UmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotRW50aXR5UmVmZXJlbmNlOjpFbnRpdHlSZWZlcmVuY2UoRG9jdW1lbnQqIGRvYykKLSAgICA6
IENvbnRhaW5lck5vZGUoZG9jKQotewotfQotCi1FbnRpdHlSZWZlcmVuY2U6OkVudGl0eVJlZmVy
ZW5jZShEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpCi0gICAgOiBDb250
YWluZXJOb2RlKGRvYykKK0VudGl0eVJlZmVyZW5jZTo6RW50aXR5UmVmZXJlbmNlKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKQorICAgIDogQ29udGFpbmVyTm9k
ZShkb2N1bWVudCkKICAgICAsIG1fZW50aXR5TmFtZShlbnRpdHlOYW1lKQogeworICAgIC8vIEZJ
WE1FOiBJZiB0aGlzIGlzIGEga25vd24gZW50aXR5LCB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2Rl
IGFyZSBzdXBwb3NlZAorICAgIC8vIHRvIGJlIGEgY29weSBvZiB0aGUgY2hpbGRyZW4gb2YgdGhl
IGNvcnJlc3BvbmRpbmcgRW50aXR5LgogfQogCiBTdHJpbmcgRW50aXR5UmVmZXJlbmNlOjpub2Rl
TmFtZSgpIGNvbnN0CkBAIC00NSwzMSArNDEsMzQgQEAgTm9kZTo6Tm9kZVR5cGUgRW50aXR5UmVm
ZXJlbmNlOjpub2RlVHlwZQogICAgIHJldHVybiBFTlRJVFlfUkVGRVJFTkNFX05PREU7CiB9CiAK
LVBhc3NSZWZQdHI8Tm9kZT4gRW50aXR5UmVmZXJlbmNlOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQor
UGFzc1JlZlB0cjxOb2RlPiBFbnRpdHlSZWZlcmVuY2U6OmNsb25lTm9kZShib29sIC8qZGVlcCov
KQogewogICAgIFJlZlB0cjxFbnRpdHlSZWZlcmVuY2U+IGNsb25lID0gbmV3IEVudGl0eVJlZmVy
ZW5jZShkb2N1bWVudCgpLCBtX2VudGl0eU5hbWUpOwotICAgIC8vICMjIyBtYWtlIHN1cmUgY2hp
bGRyZW4gYXJlIHJlYWRvbmx5Ci0gICAgLy8gIyMjIHNpbmNlIHdlIGFyZSBhIHJlZmVyZW5jZSwg
c2hvdWxkIHdlIGNsb25lIGNoaWxkcmVuIGFueXdheSAoZXZlbiBpZiBub3QgZGVlcD8pCi0gICAg
aWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZS5nZXQoKSk7CisgICAgY2xv
bmVDaGlsZE5vZGVzKGNsb25lLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmUucmVsZWFzZSgpOwog
fQogCi0vLyBET00gU2VjdGlvbiAxLjEuMQogYm9vbCBFbnRpdHlSZWZlcmVuY2U6OmNoaWxkVHlw
ZUFsbG93ZWQoTm9kZVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBBVFRSSUJVVEVfTk9ERToKKyAgICAgICAgY2FzZSBFTlRJVFlfTk9ERToKKyAgICAgICAg
Y2FzZSBET0NVTUVOVF9OT0RFOgorICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERToKKyAg
ICAgICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgorICAgICAgICBjYXNlIE5PVEFUSU9O
X05PREU6CisgICAgICAgIGNhc2UgWFBBVEhfTkFNRVNQQUNFX05PREU6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQ0RBVEFfU0VDVElPTl9OT0RFOgorICAgICAgICBj
YXNlIENPTU1FTlRfTk9ERToKICAgICAgICAgY2FzZSBFTEVNRU5UX05PREU6CisgICAgICAgIGNh
c2UgRU5USVRZX1JFRkVSRU5DRV9OT0RFOgogICAgICAgICBjYXNlIFBST0NFU1NJTkdfSU5TVFJV
Q1RJT05fTk9ERToKLSAgICAgICAgY2FzZSBDT01NRU5UX05PREU6CiAgICAgICAgIGNhc2UgVEVY
VF9OT0RFOgotICAgICAgICBjYXNlIENEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgY2FzZSBF
TlRJVFlfUkVGRVJFTkNFX05PREU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAkocmV2aXNpb24gMzQxMjYp
CisrKyBXZWJDb3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
ICsxLDYgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0
aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4LDEwICsyNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgRW50aXR5UmVmZXJlbmNlIDogcHVibGljIENvbnRhaW5lck5vZGUKLXsK
K2NsYXNzIEVudGl0eVJlZmVyZW5jZSA6IHB1YmxpYyBDb250YWluZXJOb2RlIHsKIHB1YmxpYzoK
LSAgICBFbnRpdHlSZWZlcmVuY2UoRG9jdW1lbnQqKTsKICAgICBFbnRpdHlSZWZlcmVuY2UoRG9j
dW1lbnQqLCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpOwogCiAgICAgdmlydHVhbCBTdHJpbmcg
bm9kZU5hbWUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2aXNpb24gMzQxMjYp
CisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjMs
OSArMzIzLDEzIEBAIGJvb2wgTmFtZWRBdHRyTWFwOjptYXBzRXF1aXZhbGVudChjb25zdCAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmZGVmIFNVUFBPUlRfRU5USVRZX05PREVTCisKIGJvb2wg
TmFtZWRBdHRyTWFwOjppc1JlYWRPbmx5Tm9kZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZWxl
bWVudCAmJiBtX2VsZW1lbnQtPmlzUmVhZE9ubHlOb2RlKCk7CiB9CiAKKyNlbmRpZgorCiB9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9OYW1lZEF0dHJNYXAuaAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0
dHJNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDYgKzEwNCwxNSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgQXRvbWljU3RyaW5nIG1faWQ7CiB9OwogCisjaWZuZGVmIFNVUFBPUlRfRU5USVRZX05PREVT
CisKK2lubGluZSBib29sIE5hbWVkQXR0ck1hcDo6aXNSZWFkT25seU5vZGUoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCisKIH0gLy9uYW1lc3BhY2UKIAogI3VuZGVm
IGlkCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODY0LDE4ICs4NjQsMjIgQEAgdm9pZCBOb2RlOjpyZW1vdmVkRnJvbURv
Y3VtZW50KCkKICAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2UpOwogfQogCi1ib29sIE5vZGU6Omlz
UmVhZE9ubHlOb2RlKCkKKyNpZmRlZiBTVVBQT1JUX0VOVElUWV9OT0RFUworCitib29sIE5vZGU6
OmlzUmVhZE9ubHlOb2RlKCkgY29uc3QKIHsKLSAgICAvLyBFbnRpdHkgJiBFbnRpdHkgUmVmZXJl
bmNlIG5vZGVzIGFuZCB0aGVpciBkZXNjZW5kYW50cyBhcmUgcmVhZC1vbmx5Ci0gICAgTm9kZSAq
biA9IHRoaXM7Ci0gICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0g
RU5USVRZX05PREUgfHwgbi0+bm9kZVR5cGUoKSA9PSBFTlRJVFlfUkVGRVJFTkNFX05PREUpCisg
ICAgLy8gRW50aXR5ICYgRW50aXR5UmVmZXJlbmNlIG5vZGVzIGFuZCB0aGVpciBkZXNjZW5kYW50
cyBhcmUgcmVhZC1vbmx5LgorICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIGRvIHR1cm4gdGhpcyBv
biwgd2UnbGwgbmVlZCB0byBtYWtlIGl0IGZhc3Rlci4KKyAgICBmb3IgKE5vZGUqIG4gPSB0aGlz
OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIE5vZGVUeXBlIHR5cGUgPSBuLT5u
b2RlVHlwZSgpOworICAgICAgICBpZiAodHlwZSA9PSBFTlRJVFlfTk9ERSB8fCB0eXBlID09IEVO
VElUWV9SRUZFUkVOQ0VfTk9ERSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBu
ID0gbi0+cGFyZW50Tm9kZSgpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNlbmRp
ZgorCiBOb2RlICpOb2RlOjpwcmV2aW91c0VkaXRhYmxlKCkgY29uc3QKIHsKICAgICBOb2RlICpu
b2RlID0gcHJldmlvdXNMZWFmTm9kZSgpOwpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3Jl
L2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICszMDEsNyBAQCBwdWJsaWM6CiAg
ICAgICByZXR1cm4gbV9pbkRvY3VtZW50OyAKICAgICB9CiAgICAgCi0gICAgdmlydHVhbCBib29s
IGlzUmVhZE9ubHlOb2RlKCk7CisgICAgYm9vbCBpc1JlYWRPbmx5Tm9kZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkBAIC01MTYsNiArNTE2
LDE1IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHZpcnR1YWxIYXNUYWdOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKIH07CiAKKyNpZm5kZWYgU1VQUE9SVF9FTlRJVFlfTk9E
RVMKKworaW5saW5lIGJvb2wgTm9kZTo6aXNSZWFkT25seU5vZGUoKSBjb25zdAoreworICAgIHJl
dHVybiBub2RlVHlwZSgpID09IEVOVElUWV9SRUZFUkVOQ0VfTk9ERTsKK30KKworI2VuZGlmCisK
IH0gLy9uYW1lc3BhY2UKIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvZG9tL1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oCShyZXZpc2lvbiAzNDEyNikKKysrIFdlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJ
bnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3MiwxMCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3RvcjxT
dHJpbmc+JikgY29uc3Q7CiAKKyNpZm5kZWYgU1VQUE9SVF9FTlRJVFlfTk9ERVMKKyAgICBib29s
IGlzUmVhZE9ubHlOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCiBwcml2
YXRlOgogICAgIHZvaWQgcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgc2hlZXQpOwogCklu
ZGV4OiBXZWJDb3JlL2RvbS9UZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9UZXh0
LmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9UZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM5LDEyICsxMzksMTUgQEAgU3RyaW5nIFRleHQ6Ondob2xlVGV4dCgpIGNvbnN0
CiAgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KIAotUGFzc1JlZlB0cjxUZXh0
PiBUZXh0OjpyZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgRXhjZXB0aW9u
Q29kZSYpCitQYXNzUmVmUHRyPFRleHQ+IFRleHQ6OnJlcGxhY2VXaG9sZVRleHQoY29uc3QgU3Ry
aW5nJiBuZXdUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBXZSBkb24ndCBzdXBw
b3J0ICJyZWFkLW9ubHkiIHRleHQgbm9kZXMgKG5vIEVudGl0eSBub2RlIHN1cHBvcnQpCi0gICAg
Ly8gVGh1cywgd2UgcmVtb3ZlIGFsbCBhZGphY2VudCB0ZXh0IG5vZGVzLCBhbmQgcmVwbGFjZSB0
aGUgY29udGVudHMgb2YgdGhpcyBvbmUuCi0gICAgQVNTRVJUKCFpc1JlYWRPbmx5Tm9kZSgpKTsK
LSAgICAvLyBUaGlzIG1ldGhvZCBvbmx5IHJhaXNlcyBleGNlcHRpb25zIHdoZW4gZGVhbGluZyB3
aXRoIEVudGl0eSBub2RlcyAod2hpY2ggd2UgZG9uJ3Qgc3VwcG9ydCkKKyAgICAvLyBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZC1vbmx5Lgor
ICAgIGlmIChpc1JlYWRPbmx5Tm9kZSgpKSB7CisgICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSByZW1v
dmUgYWxsIGFkamFjZW50IHRleHQgbm9kZXMsIGFuZCByZXBsYWNlIHRoZSBjb250ZW50cyBvZiB0
aGlzIG9uZS4KIAogICAgIC8vIFByb3RlY3Qgc3RhcnRUZXh0IGFuZCBlbmRUZXh0IGFnYWluc3Qg
bXV0YXRpb24gZXZlbnQgaGFuZGxlcnMgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmCiAgICAgUmVmUHRy
PFRleHQ+IHN0YXJ0VGV4dCA9IGNvbnN0X2Nhc3Q8VGV4dCo+KGVhcmxpZXN0TG9naWNhbGx5QWRq
YWNlbnRUZXh0Tm9kZSh0aGlzKSk7Cg==
</data>
<flag name="review"
          id="9319"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21343</attachid>
            <date>2008-05-25 19:35:35 -0700</date>
            <delta_ts>2008-05-25 20:14:09 -0700</delta_ts>
            <desc>patch that doesn&apos;t use any ifdefs</desc>
            <filename>EntityPatch.txt</filename>
            <type>text/plain</type>
            <size>23357</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDEyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzYgQEAKKzIwMDgtMDUtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjM5CisKKyAgICAgICAgUmVt
b3ZlZCBjb2RlIHRoYXQgd291bGQgb25seSB1c2VmdWwgaWYgaWYgdGhlcmUgd2FzIGFueSB3YXkg
dG8gY3JlYXRlIGFuIEVudGl0eQorICAgICAgICBub2RlIG9yIGlmIHdlIHBvcHVsYXRlZCBFbnRp
dHlSZWZlcmVuY2Ugbm9kZXMuIEl0J3MgbW9yZSBsaWtlbHkgdGhhdCB3ZSdsbCByZW1vdmUKKyAg
ICAgICAgdGhlc2Ugbm9kZSB0eXBlcyBlbnRpcmVseSBpbiBzb21lIGZ1dHVyZSB2ZXJzaW9uIG9m
IFdlYktpdC4KKworICAgICAgICAxLjglIHNwZWVkdXAgb2YgQWNpZDMgdGVzdCAyNi4KKworICAg
ICAgICBUaGUgb25seSByZWFkLW9ubHkgbm9kZXMgd2UgZXZlciBjcmVhdGUgYXJlIEVudGl0eVJl
ZmVyZW5jZSBub2Rlcy4KKyAgICAgICAgVGhlc2UgYXJlIG9ubHkgY3JlYXRlZCBieSBleHBsaWNp
dCBjYWxscyB0byB0aGUgRG9jdW1lbnQuY3JlYXRlRW50aXR5UmVmZXJlbmNlCisgICAgICAgIGZ1
bmN0aW9uLiBTaW5jZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgcmVhZC1vbmx5LCB0aGVyZSBjYW4g
YmUgbm8gY2hpbGRyZW4gb2YKKyAgICAgICAgdGhlc2Ugbm9kZXMsIHNvIG5vIG90aGVyIHR5cGVz
IG9mIG5vZGVzIGNhbiBiZSByZWFkLW9ubHkgZHVlIHRvIHRoZSBydWxlIHRoYXQKKyAgICAgICAg
bWFrZXMgZGVzY2VuZGFudHMgb2YgRW50aXR5IGFuZCBFbnRpdHlSZWZlcmVuY2Ugbm9kZXMgcmVh
ZC1vbmx5LgorCisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZS4KKworICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF0dHI6OnNldFZhbHVlKTogUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpc1JlYWRPbmx5Tm9kZSBjaGVj
ay4KKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OnNldE5vZGVWYWx1ZSk6IERpdHRvLgorICAgICAg
ICAqIGRvbS9DaGFyYWN0ZXJEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3RlckRh
dGE6OnNldERhdGEpOiBSZW1vdmVkIHVubmVjZXNzYXJ5IGlzUmVhZE9ubHlOb2RlIGNoZWNrLgor
ICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6c3Vic3RyaW5nRGF0YSk6IERvbid0IGlu
aXRpYWxpemUgdGhlIGVjIHZhcmlhYmxlIGJlZm9yZQorICAgICAgICBjYWxsaW5nIGNoZWNrQ2hh
ckRhdGFPcGVyYXRpb24sIHNpbmNlIHRoYXQgZnVuY3Rpb24gYWxyZWFkeSBkb2VzIGl0LgorICAg
ICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YSk6IFJlbW92ZWQgdW5uZWNl
c3NhcnkgaXNSZWFkT25seU5vZGUgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJE
YXRhOjppbnNlcnREYXRhKTogRG9uJ3QgaW5pdGlhbGl6ZSBlYy4KKyAgICAgICAgKFdlYkNvcmU6
OkNoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNo
YXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDaGFy
YWN0ZXJEYXRhOjpzZXROb2RlVmFsdWUpOiBSZW1vdmVkIG5vdy1taXNsZWFkaW5nIGNvbW1lbnQu
CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhOjpjaGVja0NoYXJEYXRhT3BlcmF0aW9u
KTogUmVtb3ZlZCB1bm5lY2Vzc2FyeQorICAgICAgICBpc1JlYWRPbmx5Tm9kZSBjaGVjay4KKyAg
ICAgICAgKiBkb20vQ2hhcmFjdGVyRGF0YS5oOiBNYWRlIGNoZWNrQ2hhckRhdGFPcGVyYXRpb24g
cHJpdmF0ZSBhbmQgbm9uLXZpcnR1YWwKKyAgICAgICAgc2luY2UgaXQncyBuZXZlciB1c2VkIG9y
IGRlZmluZWQgaW4gYW55IG90aGVyIGNsYXNzLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKTogUmVtb3ZlZCB1bm5l
ZWRlZCBpc1JlYWRPbmx5Tm9kZSBjaGVjay4KKworICAgICAgICAqIGRvbS9FbnRpdHkuY3BwOiBS
ZW1vdmVkIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhpcyBmaWxlLgorCisgICAgICAgICogZG9t
L0VudGl0eS5oOiBSZXBsYWNlZCB0aGUgY2xhc3Mgd2l0aCBhIHN0dWIgLS0ganVzdCBlbm91Z2gg
dG8ga2VlcCB0aGUKKyAgICAgICAgcHVibGljIGJpbmRpbmdzIChKYXZhU2NyaXB0IGFuZCBPYmpl
Y3RpdmUtQyBjb21waWxpbmcpLCBidXQgdGhlIGNsYXNzIGlzCisgICAgICAgIGFic3RyYWN0IGFu
ZCBjYW4ndCBiZSBpbnN0YW50aWFudGVkLgorCisgICAgICAgICogZG9tL0VudGl0eVJlZmVyZW5j
ZS5jcHA6IFJlbW92ZWQgdW51c2VkIGNvbnN0cnVjdG9yLgorICAgICAgICAoV2ViQ29yZTo6RW50
aXR5UmVmZXJlbmNlOjpjbG9uZU5vZGUpOiBSZW1vdmVkIHVubmVlZGVkIGNvZGUgYW5kIGNvbW1l
bnRzCisgICAgICAgIHRvIGNsb25lIG5vbmV4aXN0ZW50IGNoaWxkIG5vZGVzLgorICAgICAgICAq
IGRvbS9FbnRpdHlSZWZlcmVuY2UuaDogUmVtb3ZlZCB1bnVzZWQgY29uc3RydWN0b3IgYW5kIHVu
bmVjZXNzYXJ5IG92ZXJyaWRlCisgICAgICAgIG9mIGNoaWxkVHlwZUFsbG93ZWQsIHNpbmNlIG5v
IGNoaWxkcmVuIGFyZSBhbGxvd2VkIGF0IGFsbC4KKworICAgICAgICAqIGRvbS9OYW1lZEF0dHJN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRyTWFwOjpzZXROYW1lZEl0ZW0pOiBS
ZW1vdmVkIHVubmVlZGVkIGlzUmVhZE9ubHlOb2RlIGNoZWNrLgorICAgICAgICAoV2ViQ29yZTo6
TmFtZWRBdHRyTWFwOjpyZW1vdmVOYW1lZEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBkb20vTmFt
ZWRBdHRyTWFwLmg6IFJlbW92ZWQgaXNSZWFkT25seU5vZGUgZnVuY3Rpb24uCisKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6IFJlbW92ZWQgdGhlIG9sZCBpc1JlYWRPbmx5Tm9kZSBmdW5jdGlvbi4g
SXQgbWFkZSBsb3RzIG9mCisgICAgICAgIHZpcnR1YWwgbm9kZVR5cGUgZnVuY3Rpb24gY2FsbHMu
CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzUmVhZE9u
bHlOb2RlKTogUmVwbGFjZWQgdGhlIG9sZCB2aXJ0dWFsIGlzUmVhZE9ubHlOb2RlCisgICAgICAg
IGZ1bmN0aW9uIHdpdGggYSBuZXcgc2ltcGxlIG5vbi12aXJ0dWFsIG9uZS4KKworICAgICAgICAq
IGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOjpzZXREYXRhKTogUmVtb3ZlZCB1bm5lZWRlZCBpc1JlYWRPbmx5Tm9k
ZQorICAgICAgICBjaGVjay4KKworICAgICAgICAqIGRvbS9UZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHQ6OnNwbGl0VGV4dCk6IFJlbW92ZWQgdW5uZWVkZWQgaXNSZWFkT25seU5vZGUg
Y2hlY2suCisgICAgICAgIChXZWJDb3JlOjpUZXh0OjpyZXBsYWNlV2hvbGVUZXh0KTogUmVtb3Zl
ZCB1bm5lY2Vzc2FyeSBpc1JlYWRPbmx5Tm9kZSBhc3NlcnRpb24uCisgICAgICAgIFRoZXJlIGlz
IG5vIHJlYXNvbiBmb3IgdGhpcyBmdW5jdGlvbiB0byBnbyBvdXQgb2YgaXRzIHdheSB0byBtZW50
aW9uIHRoZQorICAgICAgICByZWFkLW9ubHkgbm9kZSBpc3N1ZSB3aGVuIG5vbmUgb2YgdGhlIG90
aGVyIERPTSBtdXRhdGlvbiBmdW5jdGlvbnMgZG8uCisKIDIwMDgtMDUtMjUgIENocmlzIEZsZWl6
YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBI
YXJyaXNvbgpAQCAtMTQyOCw3ICsxNTAxLDcgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2
ZXIuCiAKLSAgICAgICAgLSBKYXZhU2NyaXB0R2x1ZSBwYXJ0IG9mIGZpeCBmb3I6ICJTUVVJUlJF
TEZJU0g6IGZ1bmN0aW9uIHRvU3RyaW5nIGJyb2tlbiBhZnRlciBjYWxsaW5nIgorICAgICAgICAt
IFdlYkNvcmUgcGFydCBvZiBmaXggZm9yOiAiU1FVSVJSRUxGSVNIOiBmdW5jdGlvbiB0b1N0cmlu
ZyBicm9rZW4gYWZ0ZXIgY2FsbGluZyIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4ODY5CiAKICAgICAgICAgKiBiaW5kaW5ncy9qcy9TdHJpbmdTb3Vy
Y2VQcm92aWRlci5oOiBBZGRlZC4gU291cmNlUHJvdmlkZXIgc3ViY2xhc3MgYmFja2VkIGJ5IGEg
V2ViQ29yZTo6U3RyaW5nLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCShyZXZpc2lvbiAzNDEyNikK
KysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDYgQEAKICNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50
LmgiCiAjaW1wb3J0ICJEb2N1bWVudFR5cGUuaCIKLSNpbXBvcnQgIkVudGl0eVJlZmVyZW5jZS5o
IgogI2ltcG9ydCAiRXZlbnQuaCIKICNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKICNpbXBvcnQg
IkV2ZW50VGFyZ2V0LmgiCkluZGV4OiBXZWJDb3JlL2RvbS9BdHRyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9BdHRyLmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9B
dHRyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDE4ICsxMDEsOCBAQCBTdHJpbmcgQXR0cjo6
bm9kZVZhbHVlKCkgY29uc3QKICAgICByZXR1cm4gdmFsdWUoKTsKIH0KIAotdm9pZCBBdHRyOjpz
ZXRWYWx1ZSggY29uc3QgU3RyaW5nJiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQXR0cjo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2LCBFeGNlcHRpb25Db2RlJikKIHsKLSAgICBlYyA9IDA7
Ci0KLSAgICAvLyBkbyBub3QgaW50ZXJwcmV0IGVudGl0aWVzIGluIHRoZSBzdHJpbmcsIGl0J3Mg
bGl0ZXJhbCEKLQotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIHdo
ZW4gdGhlIG5vZGUgaXMgcmVhZG9ubHkKLSAgICBpZiAoaXNSZWFkT25seU5vZGUoKSkgewotICAg
ICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIG1faWdub3JlQ2hpbGRyZW5DaGFuZ2VkKys7CiAgICAgcmVtb3ZlQ2hpbGRy
ZW4oKTsKICAgICBtX2F0dHJpYnV0ZS0+c2V0VmFsdWUodi5pbXBsKCkpOwpAQCAtMTI1LDcgKzEx
NSw2IEBAIHZvaWQgQXR0cjo6c2V0VmFsdWUoIGNvbnN0IFN0cmluZyYgdiwgRXgKIAogdm9pZCBB
dHRyOjpzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2LCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IHRha2VuIGNhcmUgb2YgYnkgc2V0
VmFsdWUoKQogICAgIHNldFZhbHVlKHYsIGVjKTsKIH0KIApJbmRleDogV2ViQ29yZS9kb20vQ2hh
cmFjdGVyRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAJKHJldmlzaW9uIDM0MTI2KQorKysgV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSw4IEBAIENoYXJhY3RlckRhdGE6On5DaGFyYWN0ZXJE
YXRhKCkKIHsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
ZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29u
c3QgU3RyaW5nJiBkYXRhLCBFeGNlcHRpb25Db2RlJikKIHsKLSAgICAvLyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCB3aGVuIHRoZSBub2RlIGlzIHJlYWRvbmx5Ci0gICAgaWYg
KGlzUmVhZE9ubHlOb2RlKCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dF
RF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBTdHJpbmdJbXBsKiBkYXRhSW1w
bCA9IGRhdGEuaW1wbCgpID8gZGF0YS5pbXBsKCkgOiBTdHJpbmdJbXBsOjplbXB0eSgpOwogICAg
IGlmIChlcXVhbChtX2RhdGEuZ2V0KCksIGRhdGFJbXBsKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NzgsNyArNzIsNiBAQCB2b2lkIENoYXJhY3RlckRhdGE6OnNldERhdGEoY29uc3QgU3RyaW5nCiAK
IFN0cmluZyBDaGFyYWN0ZXJEYXRhOjpzdWJzdHJpbmdEYXRhKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGVjID0gMDsKICAgICBjaGVj
a0NoYXJEYXRhT3BlcmF0aW9uKG9mZnNldCwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwpAQCAtODYsMTYgKzc5LDggQEAgU3RyaW5nIENoYXJhY3RlckRhdGE6OnN1
YnN0cmluZ0RhdGEodW5zaQogICAgIHJldHVybiBtX2RhdGEtPnN1YnN0cmluZyhvZmZzZXQsIGNv
dW50KTsKIH0KIAotdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKGNvbnN0IFN0cmluZyYg
YXJnLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgQ2hhcmFjdGVyRGF0YTo6YXBwZW5kRGF0YShj
b25zdCBTdHJpbmcmIGFyZywgRXhjZXB0aW9uQ29kZSYpCiB7Ci0gICAgZWMgPSAwOwotCi0gICAg
Ly8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJl
YWRvbmx5Ci0gICAgaWYgKGlzUmVhZE9ubHlOb2RlKCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBTdHJp
bmcgbmV3U3RyID0gbV9kYXRhOwogICAgIG5ld1N0ci5hcHBlbmQoYXJnKTsKIApAQCAtMTEzLDcg
Kzk4LDYgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjphcHBlbmREYXRhKGNvbnN0IFN0cgogCiB2b2lk
IENoYXJhY3RlckRhdGE6Omluc2VydERhdGEodW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcm
IGFyZywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgZWMgPSAwOwogICAgIGNoZWNrQ2hhckRh
dGFPcGVyYXRpb24ob2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm47CkBA
IC0xMzcsNyArMTIxLDYgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjppbnNlcnREYXRhKHVuc2lnbmVk
IAogCiB2b2lkIENoYXJhY3RlckRhdGE6OmRlbGV0ZURhdGEodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgZWMgPSAwOwogICAgIGNoZWNr
Q2hhckRhdGFPcGVyYXRpb24ob2Zmc2V0LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1
cm47CkBAIC0xNjcsNyArMTUwLDYgQEAgdm9pZCBDaGFyYWN0ZXJEYXRhOjpkZWxldGVEYXRhKHVu
c2lnbmVkIAogCiB2b2lkIENoYXJhY3RlckRhdGE6OnJlcGxhY2VEYXRhKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgYXJnLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICBlYyA9IDA7CiAgICAgY2hlY2tDaGFyRGF0YU9wZXJhdGlvbihvZmZzZXQsIGVjKTsK
ICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMCw3ICsxOTIsNiBAQCBib29sIENo
YXJhY3RlckRhdGE6OmNvbnRhaW5zT25seVdoaXRlc3BhCiAKIHZvaWQgQ2hhcmFjdGVyRGF0YTo6
c2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKLSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IHRha2VuIGNhcmUgb2YgYnkg
c2V0RGF0YSgpCiAgICAgc2V0RGF0YShub2RlVmFsdWUsIGVjKTsKIH0KIApAQCAtMjM1LDEyICsy
MTYsNiBAQCB2b2lkIENoYXJhY3RlckRhdGE6OmNoZWNrQ2hhckRhdGFPcGVyYXRpCiAgICAgICAg
IGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICAvLyBO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9u
bHkKLSAgICBpZiAoaXNSZWFkT25seU5vZGUoKSkgewotICAgICAgICBlYyA9IE5PX01PRElGSUNB
VElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIH0KIAogaW50IENoYXJh
Y3RlckRhdGE6Om1heENoYXJhY3Rlck9mZnNldCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2RvbS9D
aGFyYWN0ZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5o
CShyZXZpc2lvbiAzNDEyNikKKysrIFdlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsMTUgKzU2LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXND
aGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGlu
dCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdDsKICAgICBTdHJpbmdJbXBsKiBzdHJpbmcoKSB7
IHJldHVybiBtX2RhdGEuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tDaGFyRGF0YU9w
ZXJhdGlvbih1bnNpZ25lZCBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBvZmZzZXRJbkNoYXJhY3RlcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSopOwotICAgIAorCiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG1fZGF0YTsKIAogICAgIHZvaWQgZGlzcGF0Y2hNb2RpZmllZEV2ZW50KFN0
cmluZ0ltcGwqIG9sZFZhbHVlKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrQ2hhckRhdGFP
cGVyYXRpb24odW5zaWduZWQgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDEyICs0OTIsNiBAQCB2b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTCiAgICAgLy8gYWxsb2NhdGUgYXR0
cmlidXRlbWFwIGlmIG5lY2Vzc2FyeQogICAgIEF0dHJpYnV0ZSogb2xkID0gYXR0cmlidXRlcyhm
YWxzZSktPmdldEF0dHJpYnV0ZUl0ZW0obG9jYWxOYW1lKTsKIAotICAgIC8vIE5PX01PRElGSUNB
VElPTl9BTExPV0VEX0VSUjogUmFpc2VkIHdoZW4gdGhlIG5vZGUgaXMgcmVhZG9ubHkKLSAgICBp
ZiAobmFtZWRBdHRyTWFwLT5pc1JlYWRPbmx5Tm9kZSgpKSB7Ci0gICAgICAgIGVjID0gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAogICAg
IGRvY3VtZW50KCktPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKICAgICBpZiAobG9jYWxOYW1lID09
IGlkQXR0ci5sb2NhbE5hbWUoKSkKQEAgLTUxMywxOSArNTA3LDEzIEBAIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1MKICAgICB9CiB9CiAKLXZvaWQgRWxlbWVudDo6c2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYpCiB7CiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAogICAg
IC8vIGFsbG9jYXRlIGF0dHJpYnV0ZW1hcCBpZiBuZWNlc3NhcnkKICAgICBBdHRyaWJ1dGUqIG9s
ZCA9IGF0dHJpYnV0ZXMoZmFsc2UpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogCi0gICAgLy8g
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgd2hlbiB0aGUgbm9kZSBpcyByZWFk
b25seQotICAgIGlmIChuYW1lZEF0dHJNYXAtPmlzUmVhZE9ubHlOb2RlKCkpIHsKLSAgICAgICAg
ZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBpZiAobmFtZSA9PSBpZEF0dHIpCiAgICAgICAgIHVwZGF0ZUlkKG9sZCA/IG9sZC0+
dmFsdWUoKSA6IG51bGxBdG9tLCB2YWx1ZSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL2RvbS9FbnRp
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0VudGl0eS5jcHAJKHJldmlzaW9uIDM0
MTI2KQorKysgV2ViQ29yZS9kb20vRW50aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSAr
MSBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9u
IGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFBldGVyIEtlbGx5IChwbWtAcG9z
dC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJFbnRpdHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1FbnRpdHk6OkVudGl0eShEb2N1bWVudCogZG9jKQotICAgIDogQ29udGFpbmVyTm9kZShkb2Mp
Ci17Ci19Ci0KLUVudGl0eTo6RW50aXR5KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICA6IENvbnRhaW5lck5vZGUoZG9jKQotICAgICwgbV9uYW1lKG5hbWUpCi17Ci19Ci0K
LUVudGl0eTo6RW50aXR5KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgcHVibGljSWQsIGNv
bnN0IFN0cmluZyYgc3lzdGVtSWQsIGNvbnN0IFN0cmluZyYgbm90YXRpb25OYW1lKQotICAgIDog
Q29udGFpbmVyTm9kZShkb2MpCi0gICAgLCBtX3B1YmxpY0lkKHB1YmxpY0lkKQotICAgICwgbV9z
eXN0ZW1JZChzeXN0ZW1JZCkKLSAgICAsIG1fbm90YXRpb25OYW1lKG5vdGF0aW9uTmFtZSkKLXsK
LX0KLQotU3RyaW5nIEVudGl0eTo6bm9kZU5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBtX25h
bWU7Ci19Ci0KLU5vZGU6Ok5vZGVUeXBlIEVudGl0eTo6bm9kZVR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBFTlRJVFlfTk9ERTsKLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBFbnRpdHk6OmNsb25l
Tm9kZShib29sIC8qZGVlcCovKQotewotICAgIC8vIFNwZWMgc2F5cyBjbG9uaW5nIEVudGl0eSBu
b2RlcyBpcyAiaW1wbGVtZW50YXRpb24gZGVwZW5kZW50Ii4gV2UgZG8gbm90IHN1cHBvcnQgaXQu
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIERPTSBTZWN0aW9uIDEuMS4xCi1ib29sIEVudGl0eTo6
Y2hpbGRUeXBlQWxsb3dlZChOb2RlVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEVMRU1FTlRfTk9ERToKLSAgICAgICAgY2FzZSBQUk9DRVNTSU5HX0lOU1RS
VUNUSU9OX05PREU6Ci0gICAgICAgIGNhc2UgQ09NTUVOVF9OT0RFOgotICAgICAgICBjYXNlIFRF
WFRfTk9ERToKLSAgICAgICAgY2FzZSBDREFUQV9TRUNUSU9OX05PREU6Ci0gICAgICAgIGNhc2Ug
RU5USVRZX1JFRkVSRU5DRV9OT0RFOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCisvKiBSZW1vdmUgdGhpcyBmaWxlIGxhdGVyLiAq
LwpJbmRleDogV2ViQ29yZS9kb20vRW50aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RW50aXR5LmgJKHJldmlzaW9uIDM0MTI2KQorKysgV2ViQ29yZS9kb20vRW50aXR5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsOCArMSw2IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQ
ZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwyOCArMjYsMTMgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBFbnRpdHkgOiBwdWJsaWMgQ29udGFpbmVy
Tm9kZQoteworLy8gRklYTUU6IFRoaXMgYWJzdHJhY3QgY2xhc3MgaXMgb25seSBoZXJlIHNvIHRo
YXQgdGhlIEphdmFTY3JpcHQgYW5kIE9iamVjdGl2ZS1DIGJpbmRpbmdzCisvLyBjYW4gY29udGlu
dWUgdG8gYmUgY29tcGlsZWQuCitjbGFzcyBFbnRpdHkgOiBwdWJsaWMgQ29udGFpbmVyTm9kZSB7
CiBwdWJsaWM6Ci0gICAgRW50aXR5KERvY3VtZW50Kik7Ci0gICAgRW50aXR5KERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBFbnRpdHkoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcm
IHB1YmxpY0lkLCBjb25zdCBTdHJpbmcmIHN5c3RlbUlkLCBjb25zdCBTdHJpbmcmIG5vdGF0aW9u
TmFtZSk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIEVudGl0eQotICAg
IFN0cmluZyBwdWJsaWNJZCgpIGNvbnN0IHsgcmV0dXJuIG1fcHVibGljSWQ7IH0KLSAgICBTdHJp
bmcgc3lzdGVtSWQoKSBjb25zdCB7IHJldHVybiBtX3N5c3RlbUlkOyB9Ci0gICAgU3RyaW5nIG5v
dGF0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm90YXRpb25OYW1lOyB9Ci0KLSAgICB2aXJ0
dWFsIFN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5
cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wg
ZGVlcCk7Ci0gICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwotCi1w
cml2YXRlOgotICAgIFN0cmluZyBtX3B1YmxpY0lkOwotICAgIFN0cmluZyBtX3N5c3RlbUlkOwot
ICAgIFN0cmluZyBtX25vdGF0aW9uTmFtZTsKLSAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmlu
ZyBwdWJsaWNJZCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmco
KTsgfQorICAgIFN0cmluZyBzeXN0ZW1JZCgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIFN0cmluZyBub3RhdGlvbk5hbWUoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KIH07CiAKIH0gLy9uYW1lc3Bh
Y2UKSW5kZXg6IFdlYkNvcmUvZG9tL0VudGl0eVJlZmVyZW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMzQxMjYpCisrKyBXZWJD
b3JlL2RvbS9FbnRpdHlSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsNiBA
QAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZv
ciBLREUuCi0gKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSwxOCArMTcsMTQgQEAKICAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRW50aXR5UmVmZXJlbmNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
RW50aXR5UmVmZXJlbmNlOjpFbnRpdHlSZWZlcmVuY2UoRG9jdW1lbnQqIGRvYykKLSAgICA6IENv
bnRhaW5lck5vZGUoZG9jKQotewotfQotCi1FbnRpdHlSZWZlcmVuY2U6OkVudGl0eVJlZmVyZW5j
ZShEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIGVudGl0eU5hbWUpCi0gICAgOiBDb250YWlu
ZXJOb2RlKGRvYykKK0VudGl0eVJlZmVyZW5jZTo6RW50aXR5UmVmZXJlbmNlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBlbnRpdHlOYW1lKQorICAgIDogQ29udGFpbmVyTm9kZShk
b2N1bWVudCkKICAgICAsIG1fZW50aXR5TmFtZShlbnRpdHlOYW1lKQogewogfQpAQCAtNDUsMzEg
KzM5LDkgQEAgTm9kZTo6Tm9kZVR5cGUgRW50aXR5UmVmZXJlbmNlOjpub2RlVHlwZQogICAgIHJl
dHVybiBFTlRJVFlfUkVGRVJFTkNFX05PREU7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gRW50aXR5
UmVmZXJlbmNlOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQotewotICAgIFJlZlB0cjxFbnRpdHlSZWZl
cmVuY2U+IGNsb25lID0gbmV3IEVudGl0eVJlZmVyZW5jZShkb2N1bWVudCgpLCBtX2VudGl0eU5h
bWUpOwotICAgIC8vICMjIyBtYWtlIHN1cmUgY2hpbGRyZW4gYXJlIHJlYWRvbmx5Ci0gICAgLy8g
IyMjIHNpbmNlIHdlIGFyZSBhIHJlZmVyZW5jZSwgc2hvdWxkIHdlIGNsb25lIGNoaWxkcmVuIGFu
eXdheSAoZXZlbiBpZiBub3QgZGVlcD8pCi0gICAgaWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hp
bGROb2RlcyhjbG9uZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKLX0KLQot
Ly8gRE9NIFNlY3Rpb24gMS4xLjEKLWJvb2wgRW50aXR5UmVmZXJlbmNlOjpjaGlsZFR5cGVBbGxv
d2VkKE5vZGVUeXBlIHR5cGUpCitQYXNzUmVmUHRyPE5vZGU+IEVudGl0eVJlZmVyZW5jZTo6Y2xv
bmVOb2RlKGJvb2wpCiB7Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRUxFTUVO
VF9OT0RFOgotICAgICAgICBjYXNlIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAg
ICAgY2FzZSBDT01NRU5UX05PREU6Ci0gICAgICAgIGNhc2UgVEVYVF9OT0RFOgotICAgICAgICBj
YXNlIENEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgY2FzZSBFTlRJVFlfUkVGRVJFTkNFX05P
REU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4g
bmV3IEVudGl0eVJlZmVyZW5jZShkb2N1bWVudCgpLCBtX2VudGl0eU5hbWUpOwogfQogCiB9IC8v
IG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHJldmlzaW9uIDM0MTI2KQorKysg
V2ViQ29yZS9kb20vRW50aXR5UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOCArMSw2
IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxNiArMjYsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBFbnRpdHlSZWZlcmVuY2UgOiBwdWJsaWMgQ29udGFpbmVyTm9kZQoteworY2xh
c3MgRW50aXR5UmVmZXJlbmNlIDogcHVibGljIENvbnRhaW5lck5vZGUgewogcHVibGljOgotICAg
IEVudGl0eVJlZmVyZW5jZShEb2N1bWVudCopOwogICAgIEVudGl0eVJlZmVyZW5jZShEb2N1bWVu
dCosIGNvbnN0IFN0cmluZyYgZW50aXR5TmFtZSk7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBub2Rl
TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZVR5cGUgbm9kZVR5cGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gY2xvbmVOb2RlKGJvb2wgZGVlcCk7Ci0gICAgdmly
dHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpOwogCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX2VudGl0eU5hbWU7CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAJKHJldmlzaW9uIDM0MTI2
KQorKysgV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcs
MTIgKzk3LDYgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6OnNldE5hbWVkSQogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI6IFJhaXNlZCBpZiB0aGlzIG1hcCBpcyByZWFkb25seS4KLSAgICBpZiAoaXNSZWFkT25seU5v
ZGUoKSkgewotICAgICAgICBlYyA9IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAgLy8gV1JPTkdfRE9DVU1FTlRfRVJSOiBSYWlzZWQg
aWYgYXJnIHdhcyBjcmVhdGVkIGZyb20gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgb25l
IHRoYXQgY3JlYXRlZCB0aGlzIG1hcC4KICAgICBpZiAoYXJnLT5kb2N1bWVudCgpICE9IG1fZWxl
bWVudC0+ZG9jdW1lbnQoKSkgewogICAgICAgICBlYyA9IFdST05HX0RPQ1VNRU5UX0VSUjsKQEAg
LTE0NywxMyArMTQxLDYgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZEF0dHJNYXA6OnNldE5hbWVk
SQogLy8gYmVjYXVzZSBvZiByZW1vdmVOYW1lZEl0ZW0sIHJlbW92ZU5hbWVkSXRlbU5TLCBhbmQg
cmVtb3ZlQXR0cmlidXRlTm9kZS4KIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWRBdHRyTWFwOjpyZW1v
dmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7Ci0gICAgLy8gIyMjIHNob3VsZCB0aGlzIHJlYWxseSBiZSByYWlzZWQgd2hlbiB0aGUgYXR0
cmlidXRlIHRvIHJlbW92ZSBpc24ndCB0aGVyZSBhdCBhbGw/Ci0gICAgLy8gTk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgd2hlbiB0aGUgbm9kZSBpcyByZWFkb25seQotICAgIGlm
IChpc1JlYWRPbmx5Tm9kZSgpKSB7Ci0gICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBBdHRyaWJ1dGUqIGEgPSBn
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogICAgIGlmICghYSkgewogICAgICAgICBlYyA9IE5PVF9G
T1VORF9FUlI7CkBAIC0zMjMsOSArMzEwLDQgQEAgYm9vbCBOYW1lZEF0dHJNYXA6Om1hcHNFcXVp
dmFsZW50KGNvbnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE5hbWVkQXR0ck1hcDo6
aXNSZWFkT25seU5vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVt
ZW50LT5pc1JlYWRPbmx5Tm9kZSgpOwotfQotCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZEF0
dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAkocmV2aXNp
b24gMzQxMjYpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtNjksNyArNjksNiBAQCBwdWJsaWM6CiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXNbaW5kZXhdLmdldCgpOyB9
CiAgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIGNvbnN0OwogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0OwotICAgIGJvb2wgaXNSZWFkT25seU5vZGUoKSBjb25zdDsKICAgICAKICAg
ICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZXMuc2hyaW5rQ2FwYWNpdHkobGVu
Z3RoKCkpOyB9CiAgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpIHsg
bV9hdHRyaWJ1dGVzLnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eSk7IH0KSW5kZXg6IFdlYkNvcmUv
ZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lv
biAzNDEyNikKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAs
NyArMjAwLDcgQEAgdm9pZCBOb2RlOjpzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJiAvKgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gYnkgZGVmYXVsdCBub2RlVmFsdWUgaXMgbnVs
bCwgc28gc2V0dGluZyBpdCBoYXMgbm8gZWZmZWN0CisgICAgLy8gQnkgZGVmYXVsdCwgc2V0dGlu
ZyBub2RlVmFsdWUgaGFzIG5vIGVmZmVjdC4KIH0KIAogUGFzc1JlZlB0cjxOb2RlTGlzdD4gTm9k
ZTo6Y2hpbGROb2RlcygpCkBAIC04NjQsMTggKzg2NCw2IEBAIHZvaWQgTm9kZTo6cmVtb3ZlZEZy
b21Eb2N1bWVudCgpCiAgICAgcmVtb3ZlZEZyb21UcmVlKGZhbHNlKTsKIH0KIAotYm9vbCBOb2Rl
Ojppc1JlYWRPbmx5Tm9kZSgpCi17Ci0gICAgLy8gRW50aXR5ICYgRW50aXR5IFJlZmVyZW5jZSBu
b2RlcyBhbmQgdGhlaXIgZGVzY2VuZGFudHMgYXJlIHJlYWQtb25seQotICAgIE5vZGUgKm4gPSB0
aGlzOwotICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5ub2RlVHlwZSgpID09IEVOVElU
WV9OT0RFIHx8IG4tPm5vZGVUeXBlKCkgPT0gRU5USVRZX1JFRkVSRU5DRV9OT0RFKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQogTm9kZSAqTm9kZTo6cHJldmlvdXNFZGl0YWJsZSgpIGNv
bnN0CiB7CiAgICAgTm9kZSAqbm9kZSA9IHByZXZpb3VzTGVhZk5vZGUoKTsKSW5kZXg6IFdlYkNv
cmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9u
IDM0MTI2KQorKysgV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNyAr
MzAxLDcgQEAgcHVibGljOgogICAgICAgcmV0dXJuIG1faW5Eb2N1bWVudDsgCiAgICAgfQogICAg
IAotICAgIHZpcnR1YWwgYm9vbCBpc1JlYWRPbmx5Tm9kZSgpOworICAgIGJvb2wgaXNSZWFkT25s
eU5vZGUoKSBjb25zdCB7IHJldHVybiBub2RlVHlwZSgpID09IEVOVElUWV9SRUZFUkVOQ0VfTk9E
RTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkluZGV4
OiBXZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHJldmlzaW9uIDM0MTI2KQorKysg
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjUsMTQgKzY1LDggQEAgUHJvY2Vzc2luZ0luc3RydWN0aW9uOjp+UHJvY2Vzc2luZ0luc3RydQog
ICAgICAgICBtX2NhY2hlZFNoZWV0LT5yZW1vdmVDbGllbnQodGhpcyk7CiB9CiAKLXZvaWQgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uOjpzZXREYXRhKGNvbnN0IFN0cmluZyYgZGF0YSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6c2V0RGF0YShjb25zdCBTdHJp
bmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQogewotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExP
V0VEX0VSUjogUmFpc2VkIHdoZW4gdGhlIG5vZGUgaXMgcmVhZG9ubHkuCi0gICAgaWYgKGlzUmVh
ZE9ubHlOb2RlKCkpIHsKLSAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpbnQgb2xkTGVuZ3RoID0gbV9kYXRhLmxl
bmd0aCgpOwogICAgIG1fZGF0YSA9IGRhdGE7CiAgICAgZG9jdW1lbnQoKS0+dGV4dFJlbW92ZWQo
dGhpcywgMCwgb2xkTGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1RleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL1RleHQuY3BwCShyZXZpc2lvbiAzNDEyNikKKysrIFdlYkNvcmUv
ZG9tL1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMiArNjEsNiBAQCBQYXNzUmVmUHRy
PFRleHQ+IFRleHQ6OnNwbGl0VGV4dCh1bnNpZ25lCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9k
ZSBpcyByZWFkb25seS4KLSAgICBpZiAoaXNSZWFkT25seU5vZGUoKSkgewotICAgICAgICBlYyA9
IE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG9sZFN0ciA9IG1fZGF0YTsKICAgICBSZWZQdHI8VGV4
dD4gbmV3VGV4dCA9IGNyZWF0ZU5ldyhvbGRTdHItPnN1YnN0cmluZyhvZmZzZXQpKTsKICAgICBt
X2RhdGEgPSBvbGRTdHItPnN1YnN0cmluZygwLCBvZmZzZXQpOwpAQCAtMTQxLDEwICsxMzUsNyBA
QCBTdHJpbmcgVGV4dDo6d2hvbGVUZXh0KCkgY29uc3QKIAogUGFzc1JlZlB0cjxUZXh0PiBUZXh0
OjpyZXBsYWNlV2hvbGVUZXh0KGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgRXhjZXB0aW9uQ29kZSYp
CiB7Ci0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCAicmVhZC1vbmx5IiB0ZXh0IG5vZGVzIChubyBF
bnRpdHkgbm9kZSBzdXBwb3J0KQotICAgIC8vIFRodXMsIHdlIHJlbW92ZSBhbGwgYWRqYWNlbnQg
dGV4dCBub2RlcywgYW5kIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoaXMgb25lLgotICAgIEFT
U0VSVCghaXNSZWFkT25seU5vZGUoKSk7Ci0gICAgLy8gVGhpcyBtZXRob2Qgb25seSByYWlzZXMg
ZXhjZXB0aW9ucyB3aGVuIGRlYWxpbmcgd2l0aCBFbnRpdHkgbm9kZXMgKHdoaWNoIHdlIGRvbid0
IHN1cHBvcnQpCisgICAgLy8gUmVtb3ZlIGFsbCBhZGphY2VudCB0ZXh0IG5vZGVzLCBhbmQgcmVw
bGFjZSB0aGUgY29udGVudHMgb2YgdGhpcyBvbmUuCiAKICAgICAvLyBQcm90ZWN0IHN0YXJ0VGV4
dCBhbmQgZW5kVGV4dCBhZ2FpbnN0IG11dGF0aW9uIGV2ZW50IGhhbmRsZXJzIHJlbW92aW5nIHRo
ZSBsYXN0IHJlZgogICAgIFJlZlB0cjxUZXh0PiBzdGFydFRleHQgPSBjb25zdF9jYXN0PFRleHQq
PihlYXJsaWVzdExvZ2ljYWxseUFkamFjZW50VGV4dE5vZGUodGhpcykpOwo=
</data>
<flag name="review"
          id="9324"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>