<?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>32085</bug_id>
          
          <creation_ts>2009-12-02 13:23:09 -0800</creation_ts>
          <short_desc>WebSocket should block the same ports that are blocked for resource loading</short_desc>
          <delta_ts>2009-12-04 11:23:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>abarth</cc>
    
    <cc>ukai</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>168141</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-02 13:23:09 -0800</bug_when>
    <thetext>The spec says: &quot;If port is a port to which the user agent is configured to block access, then throw a SECURITY_ERR exception. (User agents typically block access to well-known ports like SMTP.)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168144</commentid>
    <comment_count>1</comment_count>
      <attachid>44178</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-02 13:26:24 -0800</bug_when>
    <thetext>Created attachment 44178
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168172</commentid>
    <comment_count>2</comment_count>
      <attachid>44178</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-02 14:46:53 -0800</bug_when>
    <thetext>Comment on attachment 44178
proposed patch

Dave Levin reminded me that SecurityOrigin is not in platform/, so this is a layering violation. Thinking...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168206</commentid>
    <comment_count>3</comment_count>
      <attachid>44191</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-02 16:17:01 -0800</bug_when>
    <thetext>Created attachment 44191
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168266</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-02 21:12:48 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44191 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168433</commentid>
    <comment_count>5</comment_count>
      <attachid>44191</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-03 09:29:53 -0800</bug_when>
    <thetext>Comment on attachment 44191
proposed patch

&gt; +        Move isDefaultPortForProtocol() to KURL, because that&apos;s a better place for it (SecurityOrigin
&gt; +        is not even in WebCore/platform directory).

I think KURL.h is a good source file for this. But I would slightly prefer a free function to a static member function.

&gt; +    typedef HashMap&lt;String, unsigned&gt; DefaultPortsMap;
&gt; +    DEFINE_STATIC_LOCAL(DefaultPortsMap, defaultPorts, ());
&gt; +    if (defaultPorts.isEmpty()) {
&gt; +        defaultPorts.set(&quot;http&quot;, 80);
&gt; +        defaultPorts.set(&quot;https&quot;, 443);
&gt; +        defaultPorts.set(&quot;ftp&quot;, 21);
&gt; +        defaultPorts.set(&quot;ftps&quot;, 990);
&gt; +    }

Is it safe to use a case-sensitive map for this? Do callers all lowercase the protocol first? Should we assert that the passed in string has no uppercase ASCII letters in it?

&gt; +bool KURL::portAllowed(const KURL&amp; url)

This should be an ordinary member function, not a static member function. Or alternatively it could be a free function.

&gt; +    // If the port is not in the blocked port list, allow it.
&gt; +    if (!std::binary_search(blockedPortList, blockedPortListEnd, port))
&gt; +        return true;

I&apos;d like to see &quot;using namespace std&quot; rather than &quot;std::binary_search&quot;.

I&apos;d like to see an assertion that the list is sorted properly, because it seems it would be easy to accidentally add a new port and not keep the list sorted.

I&apos;m going to say review- because I think you should do at least one of the things I suggest above. If you don&apos;t agree, feel free to put this same patch up for review again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168454</commentid>
    <comment_count>6</comment_count>
      <attachid>44255</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-03 10:34:56 -0800</bug_when>
    <thetext>Created attachment 44255
updated patch

&gt; Is it safe to use a case-sensitive map for this? Do callers all lowercase the
&gt; protocol first? Should we assert that the passed in string has no uppercase
&gt; ASCII letters in it?

They do, but other protocol-related functions in KURL.h allow non-lowercase input, so for consistency, this one should likely do so, too.

An assertion would be a very weak defense, as it won&apos;t fire before the problem actually occurs, which is unlikely to happen in testing.

&gt; I&apos;m going to say review- because I think you should do at least one of the
&gt; things I suggest above.

Most or all of these comments are about moved code, but I&apos;m cool with addressing them, as long as the patch doesn&apos;t get rejected for having changes not related to its main purpose :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168456</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-03 10:36:46 -0800</bug_when>
    <thetext>Attachment 44255 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/KURL.cpp:637:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168458</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-03 10:41:21 -0800</bug_when>
    <thetext>I think that strcmp comparisons should be an exception to the rule, but I can change this when landing if a reviewer tells me to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168463</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-03 11:02:55 -0800</bug_when>
    <thetext>style-queue false positive filed: https://bugs.webkit.org/show_bug.cgi?id=32125.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168838</commentid>
    <comment_count>10</comment_count>
      <attachid>44255</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-12-04 10:42:59 -0800</bug_when>
    <thetext>Comment on attachment 44255
updated patch

&gt;      // JavaScript URLs are &quot;valid&quot; and should be executed even if KURL decides they are invalid.
&gt;      // The free function protocolIsJavaScript() should be used instead. 
&gt; -    ASSERT(strcmp(protocol, &quot;javascript&quot;) != 0);
&gt; +    ASSERT(strcasecmp(protocol, &quot;javascript&quot;) != 0);

I think that it&apos;s not good for us to use strcasecmp since, like the &lt;ctype.h&gt; functions, it depends on the POSIX locale.

While I don&apos;t think it&apos;s urgent to do this, I think we should eventually outlaw strcasecmp in WebKit code with a technique similar to the functions like islower.

On way to rewrite our existing uses of strcasecmp would be to overload the equalIgnoringCase function in PlatformString.h so it can work on two C-style strings. However, this slightly conflicts with a different idea. Dan Bernstein and I discussed making the C-style string arguments to functions like equalIgnoringCase be designed for string literals. So instead of case folding such strings, it would assert they have no non-ASCII characters or uppercase ASCII characters in them, along the lines of what is done in the protocolIs function in KURL.cpp.

Sorry for the long aside -- not really relevant to this bug.

&gt; +    DEFINE_STATIC_LOCAL(DefaultPortsMap, defaultPorts, ());
&gt; +    if (defaultPorts.isEmpty()) {

Sometimes I wish we had a better way to initialize maps than an explicit isEmpty check.

&gt; +bool isDefaultPortForProtocol(unsigned short port, const String&amp; protocol);
&gt; +bool portAllowed(const KURL&amp;); // Blacklist ports that should never be used for Web resources.

Two thoughts about these:

   1) Longer term we might want to move these URL policies *slightly* higher level than then URL class itself. Another source file in the platform directory rather than URL.h itself. Perhaps even in the networking subdirectory of platform.

   2) The second function probably is easier to understand if its sense is reversed, since the concept is a blacklist. The name could be something like hasForbiddenPort or portShouldBeBlocked; maybe even just portBlocked. One other subtle point is that it&apos;s not ports that are blocked, it&apos;s specific port/protocol combinations, so ideally the very short name would reflect this. Maybe hasForbiddenPortProtocolPair -- well, I&apos;m sure we could do better than that. We might think of some even better name. Since the function is still used in only a small number of places I think it&apos;s practical to rename it later, so I&apos;m not to worried about landing it with any of these names.

&gt; -        LOG_ERROR(&quot;Error: wrong url for WebSocket %s&quot;, url.string().utf8().data());
&gt; +        LOG(Network, &quot;Wrong url scheme for WebSocket %s&quot;, url.string().utf8().data());

This change means that you think most people are not interested in the error. LOG_ERROR is used for situations so unusual that anyone using a debug build would want to see a message on the console. Whereas the LOG(Network) variant is for things that someone explicitly wants to turn on. It&apos;s normally used for logging that occurs even in non-failure cases. I think that neither LOG_ERROR nor LOG is really what we&apos;re after. The people most interested in these types of errors are probably using the console in the web inspector, so the big win is hooking this up to that, something the people working on WebSocket have discussed. Lets make sure we do it.

I think I slightly prefer LOG_ERROR here, though.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168853</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-04 11:23:19 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/51703&gt;. Filed bug 32165 about error logging.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44178</attachid>
            <date>2009-12-02 13:26:24 -0800</date>
            <delta_ts>2009-12-02 16:17:01 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>BlockedPort.txt</filename>
            <type>text/plain</type>
            <size>13600</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTYxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMDktMTItMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMDg1CisgICAgICAgIFdl
YlNvY2tldCBzaG91bGQgYmxvY2sgdGhlIHNhbWUgcG9ydHMgdGhhdCBhcmUgYmxvY2tlZCBmb3Ig
cmVzb3VyY2UgbG9hZGluZworCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy91cmwtcGFy
c2luZy5odG1sCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpwb3J0QWxsb3dlZCk6CisgICAgICAgICogcGFnZS9T
ZWN1cml0eU9yaWdpbi5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50aWNhdGlvbik6CisgICAg
ICAgIE1vdmVkIHBvcnRBbGxvd2VkKCkgdG8gU2VjdXJpdHlPcmlnaW4sIGFzIHRoYXQncyB3aGVy
ZSB3ZSBrZWVwIHJlbGF0ZWQgbWV0aG9kcy4KKworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29j
a2V0LmNwcDogKFdlYkNvcmU6OldlYlNvY2tldDo6Y29ubmVjdCk6IFBlciB0aGUgc3BlYywgcmFp
c2UgYSBTRUNVUklUWV9FUlIKKyAgICAgICAgaWYgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gYSBibG9j
a2VkIHBvcnQuCisKIDIwMDktMTItMDIgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BhZ2UvU2Vj
dXJpdHlPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAJKHJldmlzaW9uIDUxNjAwKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsOTQgQEAgYm9vbCBTZWN1cml0eU9yaWdpbjo6
aXNEZWZhdWx0UG9ydEZvclBybwogICAgIHJldHVybiBkZWZhdWx0UG9ydHMuZ2V0KHByb3RvY29s
KSA9PSBwb3J0OwogfQogCitib29sIFNlY3VyaXR5T3JpZ2luOjpwb3J0QWxsb3dlZChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHVybC5wb3J0KCk7CisKKyAg
ICAvLyBTaW5jZSBtb3N0IFVSTHMgZG9uJ3QgaGF2ZSBhIHBvcnQsIHJldHVybiBlYXJseSBmb3Ig
dGhlICJubyBwb3J0IiBjYXNlLgorICAgIGlmICghcG9ydCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAvLyBUaGlzIGJsb2NrZWQgcG9ydCBsaXN0IG1hdGNoZXMgdGhlIHBvcnQgYmxvY2tp
bmcgdGhhdCBNb3ppbGxhIGltcGxlbWVudHMuCisgICAgLy8gU2VlIGh0dHA6Ly93d3cubW96aWxs
YS5vcmcvcHJvamVjdHMvbmV0bGliL1BvcnRCYW5uaW5nLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRp
b24uCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJsb2NrZWRQb3J0TGlzdFtdID0g
eworICAgICAgICAxLCAgICAvLyB0Y3BtdXgKKyAgICAgICAgNywgICAgLy8gZWNobworICAgICAg
ICA5LCAgICAvLyBkaXNjYXJkCisgICAgICAgIDExLCAgIC8vIHN5c3RhdAorICAgICAgICAxMywg
ICAvLyBkYXl0aW1lCisgICAgICAgIDE1LCAgIC8vIG5ldHN0YXQKKyAgICAgICAgMTcsICAgLy8g
cW90ZAorICAgICAgICAxOSwgICAvLyBjaGFyZ2VuCisgICAgICAgIDIwLCAgIC8vIEZUUC1kYXRh
CisgICAgICAgIDIxLCAgIC8vIEZUUC1jb250cm9sCisgICAgICAgIDIyLCAgIC8vIFNTSAorICAg
ICAgICAyMywgICAvLyB0ZWxuZXQKKyAgICAgICAgMjUsICAgLy8gU01UUAorICAgICAgICAzNywg
ICAvLyB0aW1lCisgICAgICAgIDQyLCAgIC8vIG5hbWUKKyAgICAgICAgNDMsICAgLy8gbmljbmFt
ZQorICAgICAgICA1MywgICAvLyBkb21haW4KKyAgICAgICAgNzcsICAgLy8gcHJpdi1yanMKKyAg
ICAgICAgNzksICAgLy8gZmluZ2VyCisgICAgICAgIDg3LCAgIC8vIHR0eWxpbmsKKyAgICAgICAg
OTUsICAgLy8gc3VwZHVwCisgICAgICAgIDEwMSwgIC8vIGhvc3RyaWFtZQorICAgICAgICAxMDIs
ICAvLyBpc28tdHNhcAorICAgICAgICAxMDMsICAvLyBncHBpdG5wCisgICAgICAgIDEwNCwgIC8v
IGFjci1uZW1hCisgICAgICAgIDEwOSwgIC8vIFBPUDIKKyAgICAgICAgMTEwLCAgLy8gUE9QMwor
ICAgICAgICAxMTEsICAvLyBzdW5ycGMKKyAgICAgICAgMTEzLCAgLy8gYXV0aAorICAgICAgICAx
MTUsICAvLyBTRlRQCisgICAgICAgIDExNywgIC8vIHV1Y3AtcGF0aAorICAgICAgICAxMTksICAv
LyBubnRwCisgICAgICAgIDEyMywgIC8vIE5UUAorICAgICAgICAxMzUsICAvLyBsb2Mtc3J2IC8g
ZXBtYXAKKyAgICAgICAgMTM5LCAgLy8gbmV0YmlvcworICAgICAgICAxNDMsICAvLyBJTUFQMgor
ICAgICAgICAxNzksICAvLyBCR1AKKyAgICAgICAgMzg5LCAgLy8gTERBUAorICAgICAgICA0NjUs
ICAvLyBTTVRQK1NTTAorICAgICAgICA1MTIsICAvLyBwcmludCAvIGV4ZWMKKyAgICAgICAgNTEz
LCAgLy8gbG9naW4KKyAgICAgICAgNTE0LCAgLy8gc2hlbGwKKyAgICAgICAgNTE1LCAgLy8gcHJp
bnRlcgorICAgICAgICA1MjYsICAvLyB0ZW1wbworICAgICAgICA1MzAsICAvLyBjb3VyaWVyCisg
ICAgICAgIDUzMSwgIC8vIENoYXQKKyAgICAgICAgNTMyLCAgLy8gbmV0bmV3cworICAgICAgICA1
NDAsICAvLyBVVUNQCisgICAgICAgIDU1NiwgIC8vIHJlbW90ZWZzCisgICAgICAgIDU2MywgIC8v
IE5OVFArU1NMCisgICAgICAgIDU4NywgIC8vIEVTTVRQCisgICAgICAgIDYwMSwgIC8vIHN5c2xv
Zy1jb25uCisgICAgICAgIDYzNiwgIC8vIExEQVArU1NMCisgICAgICAgIDk5MywgIC8vIElNQVAr
U1NMCisgICAgICAgIDk5NSwgIC8vIFBPUDMrU1NMCisgICAgICAgIDIwNDksIC8vIE5GUworICAg
ICAgICAzNjU5LCAvLyBhcHBsZS1zYXNsIC8gUGFzc3dvcmRTZXJ2ZXIgW0FwcGxlIGFkZGl0aW9u
XQorICAgICAgICA0MDQ1LCAvLyBsb2NrZAorICAgICAgICA2MDAwLCAvLyBYMTEKKyAgICB9Owor
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBjb25zdCBibG9ja2VkUG9ydExpc3RFbmQgPSBibG9j
a2VkUG9ydExpc3QgKyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0KSAvIHNpemVvZihibG9ja2VkUG9y
dExpc3RbMF0pOworCisgICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRoZSBibG9ja2VkIHBv
cnQgbGlzdCwgYWxsb3cgaXQuCisgICAgaWYgKCFzdGQ6OmJpbmFyeV9zZWFyY2goYmxvY2tlZFBv
cnRMaXN0LCBibG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIC8vIEFsbG93IHBvcnRzIDIxIGFuZCAyMiBmb3IgRlRQIFVSTHMsIGFzIE1vemlsbGEg
ZG9lcy4KKyAgICBpZiAoKHBvcnQgPT0gMjEgfHwgcG9ydCA9PSAyMikgJiYgdXJsLnByb3RvY29s
SXMoImZ0cCIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEFsbG93IGFueSBwb3J0
IG51bWJlciBpbiBhIGZpbGUgVVJMLCBzaW5jZSB0aGUgcG9ydCBudW1iZXIgaXMgaWdub3JlZC4K
KyAgICBpZiAodXJsLnByb3RvY29sSXMoImZpbGUiKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIFNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbihj
b25zdCBLVVJMJiB1cmwpCiAgICAgOiBtX3Byb3RvY29sKHVybC5wcm90b2NvbCgpLmlzTnVsbCgp
ID8gIiIgOiB1cmwucHJvdG9jb2woKS5sb3dlcigpKQogICAgICwgbV9ob3N0KHVybC5ob3N0KCku
aXNOdWxsKCkgPyAiIiA6IHVybC5ob3N0KCkubG93ZXIoKSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5oCShyZXZpc2lvbiA1MTYwMCkKKysrIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODEsNiArMTgxLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIHN0YXRpYyBib29sIGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1bnNpZ25lZCBzaG9y
dCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKIAorICAgICAgICBzdGF0aWMgYm9vbCBw
b3J0QWxsb3dlZChjb25zdCBLVVJMJik7CisKICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNp
dCBTZWN1cml0eU9yaWdpbihjb25zdCBLVVJMJik7CiAgICAgICAgIGV4cGxpY2l0IFNlY3VyaXR5
T3JpZ2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDUxNjAwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtMzYsOCArMzcsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nOwogCi1z
dGF0aWMgYm9vbCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLQogUmVzb3Vy
Y2VIYW5kbGU6OlJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAogICAgICAg
ICAgYm9vbCBzaG91bGRDb250ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUp
CiAgICAgOiBkKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRoaXMsIHJlcXVlc3QsIGNsaWVu
dCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhh
bmRsZSkpCkBAIC01Nyw3ICs1Niw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291
cmNlSGFuZGwKICAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgaWYgKCFwb3J0QWxsb3dlZChyZXF1ZXN0KSkgeworICAgIGlmICghU2VjdXJpdHlPcmlnaW46
OnBvcnRBbGxvd2VkKHJlcXVlc3QudXJsKCkpKSB7CiAgICAgICAgIG5ld0hhbmRsZS0+c2NoZWR1
bGVGYWlsdXJlKEJsb2NrZWRGYWlsdXJlKTsKICAgICAgICAgcmV0dXJuIG5ld0hhbmRsZS5yZWxl
YXNlKCk7CiAgICAgfQpAQCAtMTEzLDk1ICsxMTIsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpj
bGVhckF1dGhlbnRpY2F0aW9uCiAjZW5kaWYKICAgICBkLT5tX2N1cnJlbnRXZWJDaGFsbGVuZ2Uu
bnVsbGlmeSgpOwogfQotCi1zdGF0aWMgYm9vbCBwb3J0QWxsb3dlZChjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgcG9ydCA9IHJlcXVlc3QudXJs
KCkucG9ydCgpOwotCi0gICAgLy8gU2luY2UgbW9zdCBVUkxzIGRvbid0IGhhdmUgYSBwb3J0LCBy
ZXR1cm4gZWFybHkgZm9yIHRoZSAibm8gcG9ydCIgY2FzZS4KLSAgICBpZiAoIXBvcnQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBibG9ja2VkIHBvcnQgbGlzdCBtYXRjaGVz
IHRoZSBwb3J0IGJsb2NraW5nIHRoYXQgTW96aWxsYSBpbXBsZW1lbnRzLgotICAgIC8vIFNlZSBo
dHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL25ldGxpYi9Qb3J0QmFubmluZy5odG1sIGZv
ciBtb3JlIGluZm9ybWF0aW9uLgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBibG9j
a2VkUG9ydExpc3RbXSA9IHsKLSAgICAgICAgMSwgICAgLy8gdGNwbXV4Ci0gICAgICAgIDcsICAg
IC8vIGVjaG8KLSAgICAgICAgOSwgICAgLy8gZGlzY2FyZAotICAgICAgICAxMSwgICAvLyBzeXN0
YXQKLSAgICAgICAgMTMsICAgLy8gZGF5dGltZQotICAgICAgICAxNSwgICAvLyBuZXRzdGF0Ci0g
ICAgICAgIDE3LCAgIC8vIHFvdGQKLSAgICAgICAgMTksICAgLy8gY2hhcmdlbgotICAgICAgICAy
MCwgICAvLyBGVFAtZGF0YQotICAgICAgICAyMSwgICAvLyBGVFAtY29udHJvbAotICAgICAgICAy
MiwgICAvLyBTU0gKLSAgICAgICAgMjMsICAgLy8gdGVsbmV0Ci0gICAgICAgIDI1LCAgIC8vIFNN
VFAKLSAgICAgICAgMzcsICAgLy8gdGltZQotICAgICAgICA0MiwgICAvLyBuYW1lCi0gICAgICAg
IDQzLCAgIC8vIG5pY25hbWUKLSAgICAgICAgNTMsICAgLy8gZG9tYWluCi0gICAgICAgIDc3LCAg
IC8vIHByaXYtcmpzCi0gICAgICAgIDc5LCAgIC8vIGZpbmdlcgotICAgICAgICA4NywgICAvLyB0
dHlsaW5rCi0gICAgICAgIDk1LCAgIC8vIHN1cGR1cAotICAgICAgICAxMDEsICAvLyBob3N0cmlh
bWUKLSAgICAgICAgMTAyLCAgLy8gaXNvLXRzYXAKLSAgICAgICAgMTAzLCAgLy8gZ3BwaXRucAot
ICAgICAgICAxMDQsICAvLyBhY3ItbmVtYQotICAgICAgICAxMDksICAvLyBQT1AyCi0gICAgICAg
IDExMCwgIC8vIFBPUDMKLSAgICAgICAgMTExLCAgLy8gc3VucnBjCi0gICAgICAgIDExMywgIC8v
IGF1dGgKLSAgICAgICAgMTE1LCAgLy8gU0ZUUAotICAgICAgICAxMTcsICAvLyB1dWNwLXBhdGgK
LSAgICAgICAgMTE5LCAgLy8gbm50cAotICAgICAgICAxMjMsICAvLyBOVFAKLSAgICAgICAgMTM1
LCAgLy8gbG9jLXNydiAvIGVwbWFwCi0gICAgICAgIDEzOSwgIC8vIG5ldGJpb3MKLSAgICAgICAg
MTQzLCAgLy8gSU1BUDIKLSAgICAgICAgMTc5LCAgLy8gQkdQCi0gICAgICAgIDM4OSwgIC8vIExE
QVAKLSAgICAgICAgNDY1LCAgLy8gU01UUCtTU0wKLSAgICAgICAgNTEyLCAgLy8gcHJpbnQgLyBl
eGVjCi0gICAgICAgIDUxMywgIC8vIGxvZ2luCi0gICAgICAgIDUxNCwgIC8vIHNoZWxsCi0gICAg
ICAgIDUxNSwgIC8vIHByaW50ZXIKLSAgICAgICAgNTI2LCAgLy8gdGVtcG8KLSAgICAgICAgNTMw
LCAgLy8gY291cmllcgotICAgICAgICA1MzEsICAvLyBDaGF0Ci0gICAgICAgIDUzMiwgIC8vIG5l
dG5ld3MKLSAgICAgICAgNTQwLCAgLy8gVVVDUAotICAgICAgICA1NTYsICAvLyByZW1vdGVmcwot
ICAgICAgICA1NjMsICAvLyBOTlRQK1NTTAotICAgICAgICA1ODcsICAvLyBFU01UUAotICAgICAg
ICA2MDEsICAvLyBzeXNsb2ctY29ubgotICAgICAgICA2MzYsICAvLyBMREFQK1NTTAotICAgICAg
ICA5OTMsICAvLyBJTUFQK1NTTAotICAgICAgICA5OTUsICAvLyBQT1AzK1NTTAotICAgICAgICAy
MDQ5LCAvLyBORlMKLSAgICAgICAgMzY1OSwgLy8gYXBwbGUtc2FzbCAvIFBhc3N3b3JkU2VydmVy
IFtBcHBsZSBhZGRpdGlvbl0KLSAgICAgICAgNDA0NSwgLy8gbG9ja2QKLSAgICAgICAgNjAwMCwg
Ly8gWDExCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogY29uc3QgYmxvY2tlZFBv
cnRMaXN0RW5kID0gYmxvY2tlZFBvcnRMaXN0Ci0gICAgICAgICsgc2l6ZW9mKGJsb2NrZWRQb3J0
TGlzdCkgLyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0WzBdKTsKLQotICAgIC8vIElmIHRoZSBwb3J0
IGlzIG5vdCBpbiB0aGUgYmxvY2tlZCBwb3J0IGxpc3QsIGFsbG93IGl0LgotICAgIGlmICghc3Rk
OjpiaW5hcnlfc2VhcmNoKGJsb2NrZWRQb3J0TGlzdCwgYmxvY2tlZFBvcnRMaXN0RW5kLCBwb3J0
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBBbGxvdyBwb3J0cyAyMSBhbmQgMjIg
Zm9yIEZUUCBVUkxzLCBhcyBNb3ppbGxhIGRvZXMuCi0gICAgaWYgKChwb3J0ID09IDIxIHx8IHBv
cnQgPT0gMjIpICYmIHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiZnRwIikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gQWxsb3cgYW55IHBvcnQgbnVtYmVyIGluIGEgZmlsZSBVUkws
IHNpbmNlIHRoZSBwb3J0IG51bWJlciBpcyBpZ25vcmVkLgotICAgIGlmIChyZXF1ZXN0LnVybCgp
LnByb3RvY29sSXMoImZpbGUiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19CiAgIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c2hvdWxkQ29udGVudFNuaWZmKCkg
Y29uc3QKIHsKSW5kZXg6IFdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCShyZXZpc2lvbiA1MTYwMCkK
KysrIFdlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjYsMTggKzEyNiwyMyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmws
CiAgICAgbV9wcm90b2NvbCA9IHByb3RvY29sOwogCiAgICAgaWYgKCFtX3VybC5wcm90b2NvbElz
KCJ3cyIpICYmICFtX3VybC5wcm90b2NvbElzKCJ3c3MiKSkgewotICAgICAgICBMT0dfRVJST1Io
IkVycm9yOiB3cm9uZyB1cmwgZm9yIFdlYlNvY2tldCAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXcm9uZyB1cmwgc2NoZW1lIGZvciBXZWJT
b2NrZXQgJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1fc3RhdGUg
PSBDTE9TRUQ7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhtX3Byb3RvY29sKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkVycm9yOiB3cm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICVzIiwgbV9w
cm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXcm9uZyBwcm90
b2NvbCBmb3IgV2ViU29ja2V0ICVzIiwgbV9wcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBpZiBtX3VybC5wb3J0KCkgaXMgYmxvY2tpbmcg
cG9ydCwgcmFpc2UgU0VDVVJJVFlfRVJSLgorICAgIGlmICghU2VjdXJpdHlPcmlnaW46OnBvcnRB
bGxvd2VkKHVybCkpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgcG9ydCAlZCBi
bG9ja2VkIiwgdXJsLnBvcnQoKSk7CisgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9jaGFu
bmVsID0gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
dGhpcywgbV91cmwsIG1fcHJvdG9jb2wpOwogICAgIG1fY2hhbm5lbC0+Y29ubmVjdCgpOwpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNTE2MTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMi0wMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIwODUKKyAg
ICAgICAgV2ViU29ja2V0IHNob3VsZCBibG9jayB0aGUgc2FtZSBwb3J0cyB0aGF0IGFyZSBibG9j
a2VkIGZvciByZXNvdXJjZSBsb2FkaW5nCisKKyAgICAgICAgQWRkZWQgc29tZSB0ZXN0cyBmb3Ig
VVJMIHBhcnNpbmcgKG9uZSBvZiB0aGVtIGV4cGVjdHMgY3VycmVudCBXZWJLaXQgYmVoYXZpb3Is
IG5vdCB3aGF0IHRoZQorICAgICAgICBzcGVjIHNheXMpLgorCisgICAgICAgICogd2Vic29ja2V0
L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2luZy5qczogQWRkZWQuCisgICAgICAgICogd2Vi
c29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
d2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEyLTAyICBC
cmlhbiBXZWluc3RlaW4gIDxid2VpbnN0ZWluQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIt
c3RhbXBlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC1wYXJzaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvdXJsLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBXZWJTb2NrZXQgVVJMIHBhcnNpbmcuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBuZXcgV2ViU29ja2V0KCIvYXBwbGV0Iikg
dGhyZXcgZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFT
UyBuZXcgV2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMToyNS8iKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IFNFQ1VSSVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOC4KK1BBU1MgKG5ldyBXZWJTb2NrZXQo
IndzOi8vMTI3LjAuMC4xL2EvLi4vIikpLlVSTCBpcyAid3M6Ly8xMjcuMC4wLjEvIgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtcGFyc2luZy1leHBlY3Rl
ZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvdXJsLXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXBhcnNpbmcuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWwKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2luZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC1wYXJzaW5nLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2lu
Zy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorZGVzY3JpcHRpb24oIlRlc3QgV2Vi
U29ja2V0IFVSTCBwYXJzaW5nLiIpOworCisvLyBDYW4ndCB1c2UgcmVsYXRpdmUgVVJMcyAtIGJl
Y2F1c2Ugc3BlYyBzYXlzIHNvLCBhbmQgYmVjYXVzZSB0aGUgc2NoZW1lIGlzIGRpZmZlcmVudCBh
bnl3YXkuCitzaG91bGRUaHJvdygnbmV3IFdlYlNvY2tldCgiL2FwcGxldCIpJyk7CisKKy8vIFVB
IGlzIGFsbG93ZWQgdG8gYmxvY2sgYWNjZXNzIHRvIHNvbWUgcG9ydHMsIHdoaWNoIHdlIGRvLgor
c2hvdWxkVGhyb3coJ25ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjI1LyIpJyk7CisKKy8v
IFRoaXMgaXMgd2hhdCB3ZSBjdXJyZW50bHkgZG8sIGJ1dCBub3Qgd2hhdCB0aGUgc3BlYyBzYXlz
IChhcyBvZiBFZGl0b3IncyBEcmFmdCAxIERlY2VtYmVyIDIwMDkpLgorLy8gVGhlIHNwZWMgc2F5
cyB0aGF0IHRoZSBzdHJpbmcgcGFzc2VkIHRvIFdlYlNjb2tldCBjb25zdHJ1Y3RvciBzaG91bGQg
YmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgorc2hvdWxkQmUoJyhuZXcgV2ViU29ja2V0KCJ3czovLzEy
Ny4wLjAuMS9hLy4uLyIpKS5VUkwnLCAnIndzOi8vMTI3LjAuMC4xLyInKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwt
cGFyc2luZy5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWlu
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44191</attachid>
            <date>2009-12-02 16:17:01 -0800</date>
            <delta_ts>2009-12-03 10:34:56 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>BlockPorts.txt</filename>
            <type>text/plain</type>
            <size>18392</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTYxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMDktMTItMDIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMDg1CisgICAgICAgIFdl
YlNvY2tldCBzaG91bGQgYmxvY2sgdGhlIHNhbWUgcG9ydHMgdGhhdCBhcmUgYmxvY2tlZCBmb3Ig
cmVzb3VyY2UgbG9hZGluZworCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy91cmwtcGFy
c2luZy5odG1sCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6bG9jYWxVUkxTY2hlbWVzKToKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luLmg6CisgICAgICAgIE1vdmUgaXNEZWZhdWx0UG9ydEZvclByb3RvY29sKCkg
dG8gS1VSTCwgYmVjYXVzZSB0aGF0J3MgYSBiZXR0ZXIgcGxhY2UgZm9yIGl0IChTZWN1cml0eU9y
aWdpbgorICAgICAgICBpcyBub3QgZXZlbiBpbiBXZWJDb3JlL3BsYXRmb3JtIGRpcmVjdG9yeSku
CisKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50OjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
OjpzZXRQb3J0KToKKyAgICAgICAgVXBkYXRlZCBmb3IgdGhlIG5ldyBsb2NhdGlvbiBvZiBpc0Rl
ZmF1bHRQb3J0Rm9yUHJvdG9jb2woKS4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aXNEZWZhdWx0UG9ydEZvclByb3RvY29sKTogTW92ZWQg
ZnJvbSBTZWN1cml0eU9yaWdpbi4KKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OnBvcnRBbGxvd2Vk
KTogTW92ZWQgZnJvbSBSZXNvdXJjZUhhbmRsZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9LVVJMLmg6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDogKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlOjpjcmVhdGUpOiBVcGRhdGVkIGZvciB0aGUKKyAgICAgICAgbmV3
IGxvY2F0aW9uIG9mIHBvcnRBbGxvd2VkKCkuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNv
Y2tldC5jcHA6IChXZWJDb3JlOjpXZWJTb2NrZXQ6OmNvbm5lY3QpOiBQZXIgdGhlIHNwZWMsIHJh
aXNlIGEgU0VDVVJJVFlfRVJSCisgICAgICAgIGlmIHRyeWluZyB0byBjb25uZWN0IHRvIGEgYmxv
Y2tlZCBwb3J0LgorCiAyMDA5LTEyLTAyICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFuY2hv
ckVsZW1lbnQuY3BwCShyZXZpc2lvbiA1MTYwMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9y
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw3ICszODYsNyBAQCBTdHJpbmcgSFRN
TEFuY2hvckVsZW1lbnQ6Omhvc3QoKSBjb25zdAogICAgIGNvbnN0IEtVUkwmIHVybCA9IGhyZWYo
KTsKICAgICBpZiAodXJsLmhvc3RFbmQoKSA9PSB1cmwucGF0aFN0YXJ0KCkpCiAgICAgICAgIHJl
dHVybiB1cmwuaG9zdCgpOwotICAgIGlmIChTZWN1cml0eU9yaWdpbjo6aXNEZWZhdWx0UG9ydEZv
clByb3RvY29sKHVybC5wb3J0KCksIHVybC5wcm90b2NvbCgpKSkKKyAgICBpZiAoS1VSTDo6aXNE
ZWZhdWx0UG9ydEZvclByb3RvY29sKHVybC5wb3J0KCksIHVybC5wcm90b2NvbCgpKSkKICAgICAg
ICAgcmV0dXJuIHVybC5ob3N0KCk7CiAgICAgcmV0dXJuIHVybC5ob3N0KCkgKyAiOiIgKyBTdHJp
bmc6Om51bWJlcih1cmwucG9ydCgpKTsKIH0KQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIEhUTUxB
bmNob3JFbGVtZW50OjpzZXRIb3N0KGNvbnN0IFN0CiAgICAgICAgICAgICAvLyByZXF1aXJlcyBz
ZXR0aW5nIHRoZSBwb3J0IHRvICIwIiBpZiBpdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nLgogICAg
ICAgICAgICAgdXJsLnNldEhvc3RBbmRQb3J0KHZhbHVlLnN1YnN0cmluZygwLCBzZXBhcmF0b3Ig
KyAxKSArICIwIik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoU2VjdXJpdHlP
cmlnaW46OmlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbChwb3J0LCB1cmwucHJvdG9jb2woKSkpCisg
ICAgICAgICAgICBpZiAoS1VSTDo6aXNEZWZhdWx0UG9ydEZvclByb3RvY29sKHBvcnQsIHVybC5w
cm90b2NvbCgpKSkKICAgICAgICAgICAgICAgICB1cmwuc2V0SG9zdEFuZFBvcnQodmFsdWUuc3Vi
c3RyaW5nKDAsIHNlcGFyYXRvcikpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
IHVybC5zZXRIb3N0QW5kUG9ydCh2YWx1ZS5zdWJzdHJpbmcoMCwgcG9ydEVuZCkpOwpAQCAtNDgy
LDcgKzQ4Miw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFBvcnQoY29uc3QgU3QKICAg
ICAvLyBzcGVjaWZpY2FsbHkgZ29lcyBhZ2FpbnN0IFJGQyAzOTg2IChwMy4yKSBhbmQKICAgICAv
LyByZXF1aXJlcyBzZXR0aW5nIHRoZSBwb3J0IHRvICIwIiBpZiBpdCBpcyBzZXQgdG8gZW1wdHkg
c3RyaW5nLgogICAgIHVuc2lnbmVkIHBvcnQgPSB2YWx1ZS50b1VJbnQoKTsKLSAgICBpZiAoU2Vj
dXJpdHlPcmlnaW46OmlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbChwb3J0LCB1cmwucHJvdG9jb2wo
KSkpCisgICAgaWYgKEtVUkw6OmlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbChwb3J0LCB1cmwucHJv
dG9jb2woKSkpCiAgICAgICAgIHVybC5yZW1vdmVQb3J0KCk7CiAgICAgZWxzZQogICAgICAgICB1
cmwuc2V0UG9ydChwb3J0KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2aXNpb24g
NTE2MDApCisrKyBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NSwyMiArNzUsNiBAQCBzdGF0aWMgVVJMU2NoZW1lc01hcCYgbm9BY2Nlc3NTY2hlbWVz
KCkKICAgICByZXR1cm4gbm9BY2Nlc3NTY2hlbWVzOwogfQogCi1ib29sIFNlY3VyaXR5T3JpZ2lu
Ojppc0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wodW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbCkKLXsKLSAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCB1bnNpZ25lZD4gRGVm
YXVsdFBvcnRzTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGVmYXVsdFBvcnRzTWFwLCBk
ZWZhdWx0UG9ydHMsICgpKTsKLSAgICBpZiAoZGVmYXVsdFBvcnRzLmlzRW1wdHkoKSkgewotICAg
ICAgICBkZWZhdWx0UG9ydHMuc2V0KCJodHRwIiwgODApOwotICAgICAgICBkZWZhdWx0UG9ydHMu
c2V0KCJodHRwcyIsIDQ0Myk7Ci0gICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImZ0cCIsIDIxKTsK
LSAgICAgICAgZGVmYXVsdFBvcnRzLnNldCgiZnRwcyIsIDk5MCk7Ci0gICAgfQotICAgIHJldHVy
biBkZWZhdWx0UG9ydHMuZ2V0KHByb3RvY29sKSA9PSBwb3J0OwotfQotCiBTZWN1cml0eU9yaWdp
bjo6U2VjdXJpdHlPcmlnaW4oY29uc3QgS1VSTCYgdXJsKQogICAgIDogbV9wcm90b2NvbCh1cmwu
cHJvdG9jb2woKS5pc051bGwoKSA/ICIiIDogdXJsLnByb3RvY29sKCkubG93ZXIoKSkKICAgICAs
IG1faG9zdCh1cmwuaG9zdCgpLmlzTnVsbCgpID8gIiIgOiB1cmwuaG9zdCgpLmxvd2VyKCkpCkBA
IC0xMTksNyArMTAzLDcgQEAgU2VjdXJpdHlPcmlnaW46OlNlY3VyaXR5T3JpZ2luKGNvbnN0IEtV
UgogICAgICAgICAgICAgbV9ub0FjY2VzcyA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGlzRGVm
YXVsdFBvcnRGb3JQcm90b2NvbChtX3BvcnQsIG1fcHJvdG9jb2wpKQorICAgIGlmIChLVVJMOjpp
c0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wobV9wb3J0LCBtX3Byb3RvY29sKSkKICAgICAgICAgbV9w
b3J0ID0gMDsKIH0KIApAQCAtNDE1LDcgKzM5OSw3IEBAIHZvaWQgU2VjdXJpdHlPcmlnaW46OnJl
bW92ZVVSTFNjaGVtZVJlZ2kKICAgICBsb2NhbFNjaGVtZXMoKS5yZW1vdmUoc2NoZW1lKTsKIH0K
IAotY29uc3QgVVJMU2NoZW1lc01hcCYgIFNlY3VyaXR5T3JpZ2luOjpsb2NhbFVSTFNjaGVtZXMo
KQorY29uc3QgVVJMU2NoZW1lc01hcCYgU2VjdXJpdHlPcmlnaW46OmxvY2FsVVJMU2NoZW1lcygp
CiB7CiAgICAgcmV0dXJuIGxvY2FsU2NoZW1lcygpOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL1Nl
Y3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
LmgJKHJldmlzaW9uIDUxNjAwKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSw4ICsxNzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHN0YXRpYyB2b2lkIHdoaXRlTGlzdEFjY2Vzc0Zyb21PcmlnaW4oY29uc3QgU2VjdXJpdHlP
cmlnaW4mIHNvdXJjZU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblByb3RvY29sLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRG9tYWlucywgYm9vbCBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucyk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0
cygpOwogCi0gICAgICAgIHN0YXRpYyBib29sIGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1bnNp
Z25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKLQogICAgIHByaXZhdGU6
CiAgICAgICAgIGV4cGxpY2l0IFNlY3VyaXR5T3JpZ2luKGNvbnN0IEtVUkwmKTsKICAgICAgICAg
ZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMLmNwcAkocmV2aXNpb24gNTE2MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogCiAjaW5j
bHVkZSAiQ1N0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KIApAQCAtMTY2OCw2ICsxNjY4LDExMCBAQCB2b2lkIEtVUkw6OnByaW50
KCkgY29uc3QKIH0KICNlbmRpZgogCitib29sIEtVUkw6OmlzRGVmYXVsdFBvcnRGb3JQcm90b2Nv
bCh1bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQoreworICAgIGlm
IChwcm90b2NvbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBEZWZhdWx0UG9ydHNNYXA7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChEZWZhdWx0UG9ydHNNYXAsIGRlZmF1bHRQb3J0cywgKCkpOworICAgIGlm
IChkZWZhdWx0UG9ydHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImh0
dHAiLCA4MCk7CisgICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImh0dHBzIiwgNDQzKTsKKyAgICAg
ICAgZGVmYXVsdFBvcnRzLnNldCgiZnRwIiwgMjEpOworICAgICAgICBkZWZhdWx0UG9ydHMuc2V0
KCJmdHBzIiwgOTkwKTsKKyAgICB9CisgICAgcmV0dXJuIGRlZmF1bHRQb3J0cy5nZXQocHJvdG9j
b2wpID09IHBvcnQ7Cit9CisKK2Jvb2wgS1VSTDo6cG9ydEFsbG93ZWQoY29uc3QgS1VSTCYgdXJs
KQoreworICAgIHVuc2lnbmVkIHNob3J0IHBvcnQgPSB1cmwucG9ydCgpOworCisgICAgLy8gU2lu
Y2UgbW9zdCBVUkxzIGRvbid0IGhhdmUgYSBwb3J0LCByZXR1cm4gZWFybHkgZm9yIHRoZSAibm8g
cG9ydCIgY2FzZS4KKyAgICBpZiAoIXBvcnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gVGhpcyBibG9ja2VkIHBvcnQgbGlzdCBtYXRjaGVzIHRoZSBwb3J0IGJsb2NraW5nIHRoYXQg
TW96aWxsYSBpbXBsZW1lbnRzLgorICAgIC8vIFNlZSBodHRwOi8vd3d3Lm1vemlsbGEub3JnL3By
b2plY3RzL25ldGxpYi9Qb3J0QmFubmluZy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBibG9ja2VkUG9ydExpc3RbXSA9IHsKKyAgICAg
ICAgMSwgICAgLy8gdGNwbXV4CisgICAgICAgIDcsICAgIC8vIGVjaG8KKyAgICAgICAgOSwgICAg
Ly8gZGlzY2FyZAorICAgICAgICAxMSwgICAvLyBzeXN0YXQKKyAgICAgICAgMTMsICAgLy8gZGF5
dGltZQorICAgICAgICAxNSwgICAvLyBuZXRzdGF0CisgICAgICAgIDE3LCAgIC8vIHFvdGQKKyAg
ICAgICAgMTksICAgLy8gY2hhcmdlbgorICAgICAgICAyMCwgICAvLyBGVFAtZGF0YQorICAgICAg
ICAyMSwgICAvLyBGVFAtY29udHJvbAorICAgICAgICAyMiwgICAvLyBTU0gKKyAgICAgICAgMjMs
ICAgLy8gdGVsbmV0CisgICAgICAgIDI1LCAgIC8vIFNNVFAKKyAgICAgICAgMzcsICAgLy8gdGlt
ZQorICAgICAgICA0MiwgICAvLyBuYW1lCisgICAgICAgIDQzLCAgIC8vIG5pY25hbWUKKyAgICAg
ICAgNTMsICAgLy8gZG9tYWluCisgICAgICAgIDc3LCAgIC8vIHByaXYtcmpzCisgICAgICAgIDc5
LCAgIC8vIGZpbmdlcgorICAgICAgICA4NywgICAvLyB0dHlsaW5rCisgICAgICAgIDk1LCAgIC8v
IHN1cGR1cAorICAgICAgICAxMDEsICAvLyBob3N0cmlhbWUKKyAgICAgICAgMTAyLCAgLy8gaXNv
LXRzYXAKKyAgICAgICAgMTAzLCAgLy8gZ3BwaXRucAorICAgICAgICAxMDQsICAvLyBhY3ItbmVt
YQorICAgICAgICAxMDksICAvLyBQT1AyCisgICAgICAgIDExMCwgIC8vIFBPUDMKKyAgICAgICAg
MTExLCAgLy8gc3VucnBjCisgICAgICAgIDExMywgIC8vIGF1dGgKKyAgICAgICAgMTE1LCAgLy8g
U0ZUUAorICAgICAgICAxMTcsICAvLyB1dWNwLXBhdGgKKyAgICAgICAgMTE5LCAgLy8gbm50cAor
ICAgICAgICAxMjMsICAvLyBOVFAKKyAgICAgICAgMTM1LCAgLy8gbG9jLXNydiAvIGVwbWFwCisg
ICAgICAgIDEzOSwgIC8vIG5ldGJpb3MKKyAgICAgICAgMTQzLCAgLy8gSU1BUDIKKyAgICAgICAg
MTc5LCAgLy8gQkdQCisgICAgICAgIDM4OSwgIC8vIExEQVAKKyAgICAgICAgNDY1LCAgLy8gU01U
UCtTU0wKKyAgICAgICAgNTEyLCAgLy8gcHJpbnQgLyBleGVjCisgICAgICAgIDUxMywgIC8vIGxv
Z2luCisgICAgICAgIDUxNCwgIC8vIHNoZWxsCisgICAgICAgIDUxNSwgIC8vIHByaW50ZXIKKyAg
ICAgICAgNTI2LCAgLy8gdGVtcG8KKyAgICAgICAgNTMwLCAgLy8gY291cmllcgorICAgICAgICA1
MzEsICAvLyBDaGF0CisgICAgICAgIDUzMiwgIC8vIG5ldG5ld3MKKyAgICAgICAgNTQwLCAgLy8g
VVVDUAorICAgICAgICA1NTYsICAvLyByZW1vdGVmcworICAgICAgICA1NjMsICAvLyBOTlRQK1NT
TAorICAgICAgICA1ODcsICAvLyBFU01UUAorICAgICAgICA2MDEsICAvLyBzeXNsb2ctY29ubgor
ICAgICAgICA2MzYsICAvLyBMREFQK1NTTAorICAgICAgICA5OTMsICAvLyBJTUFQK1NTTAorICAg
ICAgICA5OTUsICAvLyBQT1AzK1NTTAorICAgICAgICAyMDQ5LCAvLyBORlMKKyAgICAgICAgMzY1
OSwgLy8gYXBwbGUtc2FzbCAvIFBhc3N3b3JkU2VydmVyIFtBcHBsZSBhZGRpdGlvbl0KKyAgICAg
ICAgNDA0NSwgLy8gbG9ja2QKKyAgICAgICAgNjAwMCwgLy8gWDExCisgICAgfTsKKyAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCogY29uc3QgYmxvY2tlZFBvcnRMaXN0RW5kID0gYmxvY2tlZFBvcnRM
aXN0ICsgc2l6ZW9mKGJsb2NrZWRQb3J0TGlzdCkgLyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0WzBd
KTsKKworICAgIC8vIElmIHRoZSBwb3J0IGlzIG5vdCBpbiB0aGUgYmxvY2tlZCBwb3J0IGxpc3Qs
IGFsbG93IGl0LgorICAgIGlmICghc3RkOjpiaW5hcnlfc2VhcmNoKGJsb2NrZWRQb3J0TGlzdCwg
YmxvY2tlZFBvcnRMaXN0RW5kLCBwb3J0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBBbGxvdyBwb3J0cyAyMSBhbmQgMjIgZm9yIEZUUCBVUkxzLCBhcyBNb3ppbGxhIGRvZXMuCisg
ICAgaWYgKChwb3J0ID09IDIxIHx8IHBvcnQgPT0gMjIpICYmIHVybC5wcm90b2NvbElzKCJmdHAi
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBBbGxvdyBhbnkgcG9ydCBudW1iZXIg
aW4gYSBmaWxlIFVSTCwgc2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIGlnbm9yZWQuCisgICAgaWYg
KHVybC5wcm90b2NvbElzKCJmaWxlIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCiB9CiAKICNlbmRpZiAgLy8gIVVTRShHT09HTEVVUkwpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0tV
UkwuaAkocmV2aXNpb24gNTE2MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA3LDYgKzIwNyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHByaW50KCkgY29u
c3Q7CiAjZW5kaWYKIAorICAgIHN0YXRpYyBib29sIGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1
bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKKyAgICBzdGF0aWMg
Ym9vbCBwb3J0QWxsb3dlZChjb25zdCBLVVJMJik7IC8vIEJsYWNrbGlzdCBwb3J0cyB0aGF0IHNo
b3VsZCBuZXZlciBiZSB1c2VkIGZvciBXZWIgcmVzb3VyY2VzLgorCiBwcml2YXRlOgogICAgIHZv
aWQgaW52YWxpZGF0ZSgpOwogICAgIGJvb2wgaXNIaWVyYXJjaGljYWwoKSBjb25zdDsKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkocmV2aXNpb24g
NTE2MDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGJvb2wgc2hvdWxkRm9yY2VDb250ZW50U25pZmZpbmc7CiAKLXN0YXRpYyBib29sIHBvcnRB
bGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotCiBSZXNvdXJjZUhhbmRsZTo6UmVzb3Vy
Y2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNs
aWVudCogY2xpZW50LCBib29sIGRlZmVyc0xvYWRpbmcsCiAgICAgICAgICBib29sIHNob3VsZENv
bnRlbnRTbmlmZiwgYm9vbCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkKICAgICA6IGQobmV3IFJl
c291cmNlSGFuZGxlSW50ZXJuYWwodGhpcywgcmVxdWVzdCwgY2xpZW50LCBkZWZlcnNMb2FkaW5n
LCBzaG91bGRDb250ZW50U25pZmYsIG1pZ2h0RG93bmxvYWRGcm9tSGFuZGxlKSkKQEAgLTU3LDcg
KzU1LDcgQEAgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbAogICAgICAg
ICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBpZiAoIXBvcnRBbGxv
d2VkKHJlcXVlc3QpKSB7CisgICAgaWYgKCFLVVJMOjpwb3J0QWxsb3dlZChyZXF1ZXN0LnVybCgp
KSkgewogICAgICAgICBuZXdIYW5kbGUtPnNjaGVkdWxlRmFpbHVyZShCbG9ja2VkRmFpbHVyZSk7
CiAgICAgICAgIHJldHVybiBuZXdIYW5kbGUucmVsZWFzZSgpOwogICAgIH0KQEAgLTExMyw5NSAr
MTExLDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6Y2xlYXJBdXRoZW50aWNhdGlvbgogI2VuZGlm
CiAgICAgZC0+bV9jdXJyZW50V2ViQ2hhbGxlbmdlLm51bGxpZnkoKTsKIH0KLQotc3RhdGljIGJv
b2wgcG9ydEFsbG93ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIHVu
c2lnbmVkIHNob3J0IHBvcnQgPSByZXF1ZXN0LnVybCgpLnBvcnQoKTsKLQotICAgIC8vIFNpbmNl
IG1vc3QgVVJMcyBkb24ndCBoYXZlIGEgcG9ydCwgcmV0dXJuIGVhcmx5IGZvciB0aGUgIm5vIHBv
cnQiIGNhc2UuCi0gICAgaWYgKCFwb3J0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IFRoaXMgYmxvY2tlZCBwb3J0IGxpc3QgbWF0Y2hlcyB0aGUgcG9ydCBibG9ja2luZyB0aGF0IE1v
emlsbGEgaW1wbGVtZW50cy4KLSAgICAvLyBTZWUgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9q
ZWN0cy9uZXRsaWIvUG9ydEJhbm5pbmcuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYmxvY2tlZFBvcnRMaXN0W10gPSB7Ci0gICAgICAg
IDEsICAgIC8vIHRjcG11eAotICAgICAgICA3LCAgICAvLyBlY2hvCi0gICAgICAgIDksICAgIC8v
IGRpc2NhcmQKLSAgICAgICAgMTEsICAgLy8gc3lzdGF0Ci0gICAgICAgIDEzLCAgIC8vIGRheXRp
bWUKLSAgICAgICAgMTUsICAgLy8gbmV0c3RhdAotICAgICAgICAxNywgICAvLyBxb3RkCi0gICAg
ICAgIDE5LCAgIC8vIGNoYXJnZW4KLSAgICAgICAgMjAsICAgLy8gRlRQLWRhdGEKLSAgICAgICAg
MjEsICAgLy8gRlRQLWNvbnRyb2wKLSAgICAgICAgMjIsICAgLy8gU1NICi0gICAgICAgIDIzLCAg
IC8vIHRlbG5ldAotICAgICAgICAyNSwgICAvLyBTTVRQCi0gICAgICAgIDM3LCAgIC8vIHRpbWUK
LSAgICAgICAgNDIsICAgLy8gbmFtZQotICAgICAgICA0MywgICAvLyBuaWNuYW1lCi0gICAgICAg
IDUzLCAgIC8vIGRvbWFpbgotICAgICAgICA3NywgICAvLyBwcml2LXJqcwotICAgICAgICA3OSwg
ICAvLyBmaW5nZXIKLSAgICAgICAgODcsICAgLy8gdHR5bGluawotICAgICAgICA5NSwgICAvLyBz
dXBkdXAKLSAgICAgICAgMTAxLCAgLy8gaG9zdHJpYW1lCi0gICAgICAgIDEwMiwgIC8vIGlzby10
c2FwCi0gICAgICAgIDEwMywgIC8vIGdwcGl0bnAKLSAgICAgICAgMTA0LCAgLy8gYWNyLW5lbWEK
LSAgICAgICAgMTA5LCAgLy8gUE9QMgotICAgICAgICAxMTAsICAvLyBQT1AzCi0gICAgICAgIDEx
MSwgIC8vIHN1bnJwYwotICAgICAgICAxMTMsICAvLyBhdXRoCi0gICAgICAgIDExNSwgIC8vIFNG
VFAKLSAgICAgICAgMTE3LCAgLy8gdXVjcC1wYXRoCi0gICAgICAgIDExOSwgIC8vIG5udHAKLSAg
ICAgICAgMTIzLCAgLy8gTlRQCi0gICAgICAgIDEzNSwgIC8vIGxvYy1zcnYgLyBlcG1hcAotICAg
ICAgICAxMzksICAvLyBuZXRiaW9zCi0gICAgICAgIDE0MywgIC8vIElNQVAyCi0gICAgICAgIDE3
OSwgIC8vIEJHUAotICAgICAgICAzODksICAvLyBMREFQCi0gICAgICAgIDQ2NSwgIC8vIFNNVFAr
U1NMCi0gICAgICAgIDUxMiwgIC8vIHByaW50IC8gZXhlYwotICAgICAgICA1MTMsICAvLyBsb2dp
bgotICAgICAgICA1MTQsICAvLyBzaGVsbAotICAgICAgICA1MTUsICAvLyBwcmludGVyCi0gICAg
ICAgIDUyNiwgIC8vIHRlbXBvCi0gICAgICAgIDUzMCwgIC8vIGNvdXJpZXIKLSAgICAgICAgNTMx
LCAgLy8gQ2hhdAotICAgICAgICA1MzIsICAvLyBuZXRuZXdzCi0gICAgICAgIDU0MCwgIC8vIFVV
Q1AKLSAgICAgICAgNTU2LCAgLy8gcmVtb3RlZnMKLSAgICAgICAgNTYzLCAgLy8gTk5UUCtTU0wK
LSAgICAgICAgNTg3LCAgLy8gRVNNVFAKLSAgICAgICAgNjAxLCAgLy8gc3lzbG9nLWNvbm4KLSAg
ICAgICAgNjM2LCAgLy8gTERBUCtTU0wKLSAgICAgICAgOTkzLCAgLy8gSU1BUCtTU0wKLSAgICAg
ICAgOTk1LCAgLy8gUE9QMytTU0wKLSAgICAgICAgMjA0OSwgLy8gTkZTCi0gICAgICAgIDM2NTks
IC8vIGFwcGxlLXNhc2wgLyBQYXNzd29yZFNlcnZlciBbQXBwbGUgYWRkaXRpb25dCi0gICAgICAg
IDQwNDUsIC8vIGxvY2tkCi0gICAgICAgIDYwMDAsIC8vIFgxMQotICAgIH07Ci0gICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQqIGNvbnN0IGJsb2NrZWRQb3J0TGlzdEVuZCA9IGJsb2NrZWRQb3J0TGlz
dAotICAgICAgICArIHNpemVvZihibG9ja2VkUG9ydExpc3QpIC8gc2l6ZW9mKGJsb2NrZWRQb3J0
TGlzdFswXSk7Ci0KLSAgICAvLyBJZiB0aGUgcG9ydCBpcyBub3QgaW4gdGhlIGJsb2NrZWQgcG9y
dCBsaXN0LCBhbGxvdyBpdC4KLSAgICBpZiAoIXN0ZDo6YmluYXJ5X3NlYXJjaChibG9ja2VkUG9y
dExpc3QsIGJsb2NrZWRQb3J0TGlzdEVuZCwgcG9ydCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gQWxsb3cgcG9ydHMgMjEgYW5kIDIyIGZvciBGVFAgVVJMcywgYXMgTW96aWxsYSBk
b2VzLgotICAgIGlmICgocG9ydCA9PSAyMSB8fCBwb3J0ID09IDIyKSAmJiByZXF1ZXN0LnVybCgp
LnByb3RvY29sSXMoImZ0cCIpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEFsbG93
IGFueSBwb3J0IG51bWJlciBpbiBhIGZpbGUgVVJMLCBzaW5jZSB0aGUgcG9ydCBudW1iZXIgaXMg
aWdub3JlZC4KLSAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJmaWxlIikpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQogICAKIGJvb2wgUmVzb3Vy
Y2VIYW5kbGU6OnNob3VsZENvbnRlbnRTbmlmZigpIGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmNwcAkocmV2aXNpb24gNTE2MDApCisrKyBXZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKICNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVj
dXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJX
ZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0x
MjYsMTggKzEyNSwyMyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmws
CiAgICAgbV9wcm90b2NvbCA9IHByb3RvY29sOwogCiAgICAgaWYgKCFtX3VybC5wcm90b2NvbElz
KCJ3cyIpICYmICFtX3VybC5wcm90b2NvbElzKCJ3c3MiKSkgewotICAgICAgICBMT0dfRVJST1Io
IkVycm9yOiB3cm9uZyB1cmwgZm9yIFdlYlNvY2tldCAlcyIsIHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXcm9uZyB1cmwgc2NoZW1lIGZvciBXZWJT
b2NrZXQgJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1fc3RhdGUg
PSBDTE9TRUQ7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhtX3Byb3RvY29sKSkgewotICAgICAg
ICBMT0dfRVJST1IoIkVycm9yOiB3cm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICVzIiwgbV9w
cm90b2NvbC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgTE9HKE5ldHdvcmssICJXcm9uZyBwcm90
b2NvbCBmb3IgV2ViU29ja2V0ICVzIiwgbV9wcm90b2NvbC51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIC8vIEZJWE1FOiBpZiBtX3VybC5wb3J0KCkgaXMgYmxvY2tpbmcg
cG9ydCwgcmFpc2UgU0VDVVJJVFlfRVJSLgorICAgIGlmICghS1VSTDo6cG9ydEFsbG93ZWQodXJs
KSkgeworICAgICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCBwb3J0ICVkIGJsb2NrZWQiLCB1
cmwucG9ydCgpKTsKKyAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBtX2NoYW5uZWwgPSBXZWJT
b2NrZXRDaGFubmVsOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCBtX3Vy
bCwgbV9wcm90b2NvbCk7CiAgICAgbV9jaGFubmVsLT5jb25uZWN0KCk7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1MTYxNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDA5LTEyLTAyICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjA4NQorICAgICAgICBXZWJT
b2NrZXQgc2hvdWxkIGJsb2NrIHRoZSBzYW1lIHBvcnRzIHRoYXQgYXJlIGJsb2NrZWQgZm9yIHJl
c291cmNlIGxvYWRpbmcKKworICAgICAgICBBZGRlZCBzb21lIHRlc3RzIGZvciBVUkwgcGFyc2lu
ZyAob25lIG9mIHRoZW0gZXhwZWN0cyBjdXJyZW50IFdlYktpdCBiZWhhdmlvciwgbm90IHdoYXQg
dGhlCisgICAgICAgIHNwZWMgc2F5cykuCisKKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvc2Ny
aXB0LXRlc3RzL3VybC1wYXJzaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVz
dHMvdXJsLXBhcnNpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQv
dGVzdHMvdXJsLXBhcnNpbmcuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMDIgIEFsZXhleSBQcm9z
a3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKSW5kZXg6IExheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy91cmwtcGFyc2luZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtcGFyc2luZy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgV2ViU29ja2V0IFVSTCBwYXJzaW5nLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgbmV3IFdlYlNvY2tldCgiL2FwcGxl
dCIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMi4K
K1BBU1MgbmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6MjUvIikgdGhyZXcgZXhjZXB0aW9u
IEVycm9yOiBTRUNVUklUWV9FUlI6IERPTSBFeGNlcHRpb24gMTguCitQQVNTIChuZXcgV2ViU29j
a2V0KCJ3czovLzEyNy4wLjAuMS9hLy4uLyIpKS5VUkwgaXMgIndzOi8vMTI3LjAuMC4xLyIKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvdXJsLXBhcnNpbmctZXhw
ZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4K
TmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL3dlYnNv
Y2tldC90ZXN0cy91cmwtcGFyc2luZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy91cmwtcGFyc2luZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3VybC1wYXJzaW5nLmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtcGFyc2luZy5odG1sCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL3dlYnNvY2tl
dC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXBhcnNpbmcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2luZy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMvdXJsLXBh
cnNpbmcuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0
IFdlYlNvY2tldCBVUkwgcGFyc2luZy4iKTsKKworLy8gQ2FuJ3QgdXNlIHJlbGF0aXZlIFVSTHMg
LSBiZWNhdXNlIHNwZWMgc2F5cyBzbywgYW5kIGJlY2F1c2UgdGhlIHNjaGVtZSBpcyBkaWZmZXJl
bnQgYW55d2F5Lgorc2hvdWxkVGhyb3coJ25ldyBXZWJTb2NrZXQoIi9hcHBsZXQiKScpOworCisv
LyBVQSBpcyBhbGxvd2VkIHRvIGJsb2NrIGFjY2VzcyB0byBzb21lIHBvcnRzLCB3aGljaCB3ZSBk
by4KK3Nob3VsZFRocm93KCduZXcgV2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMToyNS8iKScpOwor
CisvLyBUaGlzIGlzIHdoYXQgd2UgY3VycmVudGx5IGRvLCBidXQgbm90IHdoYXQgdGhlIHNwZWMg
c2F5cyAoYXMgb2YgRWRpdG9yJ3MgRHJhZnQgMSBEZWNlbWJlciAyMDA5KS4KKy8vIFRoZSBzcGVj
IHNheXMgdGhhdCB0aGUgc3RyaW5nIHBhc3NlZCB0byBXZWJTY29rZXQgY29uc3RydWN0b3Igc2hv
dWxkIGJlIHJldHVybmVkIHVuY2hhbmdlZC4KK3Nob3VsZEJlKCcobmV3IFdlYlNvY2tldCgid3M6
Ly8xMjcuMC4wLjEvYS8uLi8iKSkuVVJMJywgJyJ3czovLzEyNy4wLjAuMS8iJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworaXNTdWNjZXNzZnVsbHlQYXJzZWQoKTsKClByb3Bl
cnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9zY3JpcHQtdGVzdHMv
dXJsLXBhcnNpbmcuanMKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9w
bGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgo=
</data>
<flag name="review"
          id="25989"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44255</attachid>
            <date>2009-12-03 10:34:56 -0800</date>
            <delta_ts>2009-12-04 10:42:59 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>BlockPorts.txt</filename>
            <type>text/plain</type>
            <size>19351</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTY0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDktMTItMDMgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyMDg1CisgICAgICAgIFdl
YlNvY2tldCBzaG91bGQgYmxvY2sgdGhlIHNhbWUgcG9ydHMgdGhhdCBhcmUgYmxvY2tlZCBmb3Ig
cmVzb3VyY2UgbG9hZGluZworCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy91cmwtcGFy
c2luZy5odG1sCisKKyAgICAgICAgKiBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6bG9jYWxVUkxTY2hlbWVzKToKKyAgICAgICAgKiBwYWdlL1Nl
Y3VyaXR5T3JpZ2luLmg6CisgICAgICAgIE1vdmUgaXNEZWZhdWx0UG9ydEZvclByb3RvY29sKCkg
dG8gS1VSTCwgYmVjYXVzZSB0aGF0J3MgYSBiZXR0ZXIgcGxhY2UgZm9yIGl0IChTZWN1cml0eU9y
aWdpbgorICAgICAgICBpcyBub3QgZXZlbiBpbiBXZWJDb3JlL3BsYXRmb3JtIGRpcmVjdG9yeSku
CisKKyAgICAgICAgKiBodG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50Ojpob3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNo
b3JFbGVtZW50OjpzZXRIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50
OjpzZXRQb3J0KToKKyAgICAgICAgVXBkYXRlZCBmb3IgdGhlIG5ldyBsb2NhdGlvbiBvZiBpc0Rl
ZmF1bHRQb3J0Rm9yUHJvdG9jb2woKS4KKworICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6S1VSTDo6cHJvdG9jb2xJcyk6IEluIGFuIGFzc2VydGlvbiwgY29t
cGFyZSB0byAiamF2YXNjcmlwdCIgY2FzZS1pbnNlbnNpdGl2ZWx5LAorICAgICAgICBzaW5jZSB0
aGUgZnVuY3Rpb24gZGVvc24ndCByZXF1aXJlIGxvd2VyIGNhc2UgaW5wdXQuCisgICAgICAgIChX
ZWJDb3JlOjppc0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wpOiBNb3ZlZCBmcm9tIFNlY3VyaXR5T3Jp
Z2luLgorICAgICAgICAoV2ViQ29yZTo6cG9ydEFsbG93ZWQpOiBNb3ZlZCBmcm9tIFJlc291cmNl
SGFuZGxlLgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuaDoKKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwOiAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNy
ZWF0ZSk6IFVwZGF0ZWQgZm9yIHRoZQorICAgICAgICBuZXcgbG9jYXRpb24gb2YgcG9ydEFsbG93
ZWQoKS4KKworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDogKFdlYkNvcmU6Oldl
YlNvY2tldDo6Y29ubmVjdCk6IFBlciB0aGUgc3BlYywgcmFpc2UgYSBTRUNVUklUWV9FUlIKKyAg
ICAgICAgaWYgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gYSBibG9ja2VkIHBvcnQuCisKIDIwMDktMTIt
MDMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90
IHJldmlld2VkOiBjaHJvbWl1bSBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEFu
Y2hvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxl
bWVudC5jcHAJKHJldmlzaW9uIDUxNjQyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDcgKzM4Niw3IEBAIFN0cmluZyBIVE1MQW5j
aG9yRWxlbWVudDo6aG9zdCgpIGNvbnN0CiAgICAgY29uc3QgS1VSTCYgdXJsID0gaHJlZigpOwog
ICAgIGlmICh1cmwuaG9zdEVuZCgpID09IHVybC5wYXRoU3RhcnQoKSkKICAgICAgICAgcmV0dXJu
IHVybC5ob3N0KCk7Ci0gICAgaWYgKFNlY3VyaXR5T3JpZ2luOjppc0RlZmF1bHRQb3J0Rm9yUHJv
dG9jb2wodXJsLnBvcnQoKSwgdXJsLnByb3RvY29sKCkpKQorICAgIGlmIChpc0RlZmF1bHRQb3J0
Rm9yUHJvdG9jb2wodXJsLnBvcnQoKSwgdXJsLnByb3RvY29sKCkpKQogICAgICAgICByZXR1cm4g
dXJsLmhvc3QoKTsKICAgICByZXR1cm4gdXJsLmhvc3QoKSArICI6IiArIFN0cmluZzo6bnVtYmVy
KHVybC5wb3J0KCkpOwogfQpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1l
bnQ6OnNldEhvc3QoY29uc3QgU3QKICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNldHRpbmcgdGhl
IHBvcnQgdG8gIjAiIGlmIGl0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcuCiAgICAgICAgICAgICB1
cmwuc2V0SG9zdEFuZFBvcnQodmFsdWUuc3Vic3RyaW5nKDAsIHNlcGFyYXRvciArIDEpICsgIjAi
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChTZWN1cml0eU9yaWdpbjo6aXNE
ZWZhdWx0UG9ydEZvclByb3RvY29sKHBvcnQsIHVybC5wcm90b2NvbCgpKSkKKyAgICAgICAgICAg
IGlmIChpc0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wocG9ydCwgdXJsLnByb3RvY29sKCkpKQogICAg
ICAgICAgICAgICAgIHVybC5zZXRIb3N0QW5kUG9ydCh2YWx1ZS5zdWJzdHJpbmcoMCwgc2VwYXJh
dG9yKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdXJsLnNldEhvc3RBbmRQ
b3J0KHZhbHVlLnN1YnN0cmluZygwLCBwb3J0RW5kKSk7CkBAIC00ODIsNyArNDgyLDcgQEAgdm9p
ZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0UG9ydChjb25zdCBTdAogICAgIC8vIHNwZWNpZmljYWxs
eSBnb2VzIGFnYWluc3QgUkZDIDM5ODYgKHAzLjIpIGFuZAogICAgIC8vIHJlcXVpcmVzIHNldHRp
bmcgdGhlIHBvcnQgdG8gIjAiIGlmIGl0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcuCiAgICAgdW5z
aWduZWQgcG9ydCA9IHZhbHVlLnRvVUludCgpOwotICAgIGlmIChTZWN1cml0eU9yaWdpbjo6aXNE
ZWZhdWx0UG9ydEZvclByb3RvY29sKHBvcnQsIHVybC5wcm90b2NvbCgpKSkKKyAgICBpZiAoaXNE
ZWZhdWx0UG9ydEZvclByb3RvY29sKHBvcnQsIHVybC5wcm90b2NvbCgpKSkKICAgICAgICAgdXJs
LnJlbW92ZVBvcnQoKTsKICAgICBlbHNlCiAgICAgICAgIHVybC5zZXRQb3J0KHBvcnQpOwpJbmRl
eDogV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCShyZXZpc2lvbiA1MTY0MikKKysrIFdlYkNvcmUvcGFn
ZS9TZWN1cml0eU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDIyICs3NSw2IEBAIHN0
YXRpYyBVUkxTY2hlbWVzTWFwJiBub0FjY2Vzc1NjaGVtZXMoKQogICAgIHJldHVybiBub0FjY2Vz
c1NjaGVtZXM7CiB9CiAKLWJvb2wgU2VjdXJpdHlPcmlnaW46OmlzRGVmYXVsdFBvcnRGb3JQcm90
b2NvbCh1bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQotewotICAg
IGlmIChwcm90b2NvbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIHVuc2lnbmVkPiBEZWZhdWx0UG9ydHNNYXA7Ci0gICAgREVG
SU5FX1NUQVRJQ19MT0NBTChEZWZhdWx0UG9ydHNNYXAsIGRlZmF1bHRQb3J0cywgKCkpOwotICAg
IGlmIChkZWZhdWx0UG9ydHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGRlZmF1bHRQb3J0cy5zZXQo
Imh0dHAiLCA4MCk7Ci0gICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImh0dHBzIiwgNDQzKTsKLSAg
ICAgICAgZGVmYXVsdFBvcnRzLnNldCgiZnRwIiwgMjEpOwotICAgICAgICBkZWZhdWx0UG9ydHMu
c2V0KCJmdHBzIiwgOTkwKTsKLSAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRQb3J0cy5nZXQocHJv
dG9jb2wpID09IHBvcnQ7Ci19Ci0KIFNlY3VyaXR5T3JpZ2luOjpTZWN1cml0eU9yaWdpbihjb25z
dCBLVVJMJiB1cmwpCiAgICAgOiBtX3Byb3RvY29sKHVybC5wcm90b2NvbCgpLmlzTnVsbCgpID8g
IiIgOiB1cmwucHJvdG9jb2woKS5sb3dlcigpKQogICAgICwgbV9ob3N0KHVybC5ob3N0KCkuaXNO
dWxsKCkgPyAiIiA6IHVybC5ob3N0KCkubG93ZXIoKSkKQEAgLTQxNSw3ICszOTksNyBAQCB2b2lk
IFNlY3VyaXR5T3JpZ2luOjpyZW1vdmVVUkxTY2hlbWVSZWdpCiAgICAgbG9jYWxTY2hlbWVzKCku
cmVtb3ZlKHNjaGVtZSk7CiB9CiAKLWNvbnN0IFVSTFNjaGVtZXNNYXAmICBTZWN1cml0eU9yaWdp
bjo6bG9jYWxVUkxTY2hlbWVzKCkKK2NvbnN0IFVSTFNjaGVtZXNNYXAmIFNlY3VyaXR5T3JpZ2lu
Ojpsb2NhbFVSTFNjaGVtZXMoKQogewogICAgIHJldHVybiBsb2NhbFNjaGVtZXMoKTsKIH0KSW5k
ZXg6IFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiA1MTY0MikKKysrIFdlYkNvcmUvcGFnZS9T
ZWN1cml0eU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksOCArMTc5LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCB3aGl0ZUxpc3RBY2Nlc3NGcm9tT3Jp
Z2luKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBzb3VyY2VPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25Qcm90b2NvbCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkRvbWFpbnMsIGJvb2wg
YWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOwogICAgICAgICBzdGF0aWMgdm9pZCByZXNldE9y
aWdpbkFjY2Vzc1doaXRlTGlzdHMoKTsKIAotICAgICAgICBzdGF0aWMgYm9vbCBpc0RlZmF1bHRQ
b3J0Rm9yUHJvdG9jb2wodW5zaWduZWQgc2hvcnQgcG9ydCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bCk7Ci0KICAgICBwcml2YXRlOgogICAgICAgICBleHBsaWNpdCBTZWN1cml0eU9yaWdpbihjb25z
dCBLVVJMJik7CiAgICAgICAgIGV4cGxpY2l0IFNlY3VyaXR5T3JpZ2luKGNvbnN0IFNlY3VyaXR5
T3JpZ2luKik7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9uIDUxNjQyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9LVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsMTAgQEAKICNpbmNs
dWRlICJLVVJMLmgiCiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdF
eHRyYXMuaD4KIAogI2lmIFVTRShJQ1VfVU5JQ09ERSkKICNpbmNsdWRlIDx1bmljb2RlL3VpZG5h
Lmg+CkBAIC02MzMsNyArNjM0LDcgQEAgYm9vbCBLVVJMOjpwcm90b2NvbElzKGNvbnN0IGNoYXIq
IHByb3RvYwogCiAgICAgLy8gSmF2YVNjcmlwdCBVUkxzIGFyZSAidmFsaWQiIGFuZCBzaG91bGQg
YmUgZXhlY3V0ZWQgZXZlbiBpZiBLVVJMIGRlY2lkZXMgdGhleSBhcmUgaW52YWxpZC4KICAgICAv
LyBUaGUgZnJlZSBmdW5jdGlvbiBwcm90b2NvbElzSmF2YVNjcmlwdCgpIHNob3VsZCBiZSB1c2Vk
IGluc3RlYWQuIAotICAgIEFTU0VSVChzdHJjbXAocHJvdG9jb2wsICJqYXZhc2NyaXB0IikgIT0g
MCk7CisgICAgQVNTRVJUKHN0cmNhc2VjbXAocHJvdG9jb2wsICJqYXZhc2NyaXB0IikgIT0gMCk7
CiAKICAgICBpZiAoIW1faXNWYWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY0MCw2
ICsxNjQxLDEyMCBAQCBib29sIGlzVmFsaWRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3RvCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgaXNEZWZhdWx0UG9ydEZvclByb3RvY29sKHVuc2ln
bmVkIHNob3J0IHBvcnQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKHByb3Rv
Y29sLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgdW5zaWduZWQsIENhc2VGb2xkaW5nSGFzaD4gRGVmYXVsdFBvcnRzTWFwOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGVmYXVsdFBvcnRzTWFwLCBkZWZhdWx0UG9ydHMsICgp
KTsKKyAgICBpZiAoZGVmYXVsdFBvcnRzLmlzRW1wdHkoKSkgeworICAgICAgICBkZWZhdWx0UG9y
dHMuc2V0KCJodHRwIiwgODApOworICAgICAgICBkZWZhdWx0UG9ydHMuc2V0KCJodHRwcyIsIDQ0
Myk7CisgICAgICAgIGRlZmF1bHRQb3J0cy5zZXQoImZ0cCIsIDIxKTsKKyAgICAgICAgZGVmYXVs
dFBvcnRzLnNldCgiZnRwcyIsIDk5MCk7CisgICAgfQorICAgIHJldHVybiBkZWZhdWx0UG9ydHMu
Z2V0KHByb3RvY29sKSA9PSBwb3J0OworfQorCitib29sIHBvcnRBbGxvd2VkKGNvbnN0IEtVUkwm
IHVybCkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBwb3J0ID0gdXJsLnBvcnQoKTsKKworICAgIC8v
IFNpbmNlIG1vc3QgVVJMcyBkb24ndCBoYXZlIGEgcG9ydCwgcmV0dXJuIGVhcmx5IGZvciB0aGUg
Im5vIHBvcnQiIGNhc2UuCisgICAgaWYgKCFwb3J0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIC8vIFRoaXMgYmxvY2tlZCBwb3J0IGxpc3QgbWF0Y2hlcyB0aGUgcG9ydCBibG9ja2luZyB0
aGF0IE1vemlsbGEgaW1wbGVtZW50cy4KKyAgICAvLyBTZWUgaHR0cDovL3d3dy5tb3ppbGxhLm9y
Zy9wcm9qZWN0cy9uZXRsaWIvUG9ydEJhbm5pbmcuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4K
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYmxvY2tlZFBvcnRMaXN0W10gPSB7Cisg
ICAgICAgIDEsICAgIC8vIHRjcG11eAorICAgICAgICA3LCAgICAvLyBlY2hvCisgICAgICAgIDks
ICAgIC8vIGRpc2NhcmQKKyAgICAgICAgMTEsICAgLy8gc3lzdGF0CisgICAgICAgIDEzLCAgIC8v
IGRheXRpbWUKKyAgICAgICAgMTUsICAgLy8gbmV0c3RhdAorICAgICAgICAxNywgICAvLyBxb3Rk
CisgICAgICAgIDE5LCAgIC8vIGNoYXJnZW4KKyAgICAgICAgMjAsICAgLy8gRlRQLWRhdGEKKyAg
ICAgICAgMjEsICAgLy8gRlRQLWNvbnRyb2wKKyAgICAgICAgMjIsICAgLy8gU1NICisgICAgICAg
IDIzLCAgIC8vIHRlbG5ldAorICAgICAgICAyNSwgICAvLyBTTVRQCisgICAgICAgIDM3LCAgIC8v
IHRpbWUKKyAgICAgICAgNDIsICAgLy8gbmFtZQorICAgICAgICA0MywgICAvLyBuaWNuYW1lCisg
ICAgICAgIDUzLCAgIC8vIGRvbWFpbgorICAgICAgICA3NywgICAvLyBwcml2LXJqcworICAgICAg
ICA3OSwgICAvLyBmaW5nZXIKKyAgICAgICAgODcsICAgLy8gdHR5bGluaworICAgICAgICA5NSwg
ICAvLyBzdXBkdXAKKyAgICAgICAgMTAxLCAgLy8gaG9zdHJpYW1lCisgICAgICAgIDEwMiwgIC8v
IGlzby10c2FwCisgICAgICAgIDEwMywgIC8vIGdwcGl0bnAKKyAgICAgICAgMTA0LCAgLy8gYWNy
LW5lbWEKKyAgICAgICAgMTA5LCAgLy8gUE9QMgorICAgICAgICAxMTAsICAvLyBQT1AzCisgICAg
ICAgIDExMSwgIC8vIHN1bnJwYworICAgICAgICAxMTMsICAvLyBhdXRoCisgICAgICAgIDExNSwg
IC8vIFNGVFAKKyAgICAgICAgMTE3LCAgLy8gdXVjcC1wYXRoCisgICAgICAgIDExOSwgIC8vIG5u
dHAKKyAgICAgICAgMTIzLCAgLy8gTlRQCisgICAgICAgIDEzNSwgIC8vIGxvYy1zcnYgLyBlcG1h
cAorICAgICAgICAxMzksICAvLyBuZXRiaW9zCisgICAgICAgIDE0MywgIC8vIElNQVAyCisgICAg
ICAgIDE3OSwgIC8vIEJHUAorICAgICAgICAzODksICAvLyBMREFQCisgICAgICAgIDQ2NSwgIC8v
IFNNVFArU1NMCisgICAgICAgIDUxMiwgIC8vIHByaW50IC8gZXhlYworICAgICAgICA1MTMsICAv
LyBsb2dpbgorICAgICAgICA1MTQsICAvLyBzaGVsbAorICAgICAgICA1MTUsICAvLyBwcmludGVy
CisgICAgICAgIDUyNiwgIC8vIHRlbXBvCisgICAgICAgIDUzMCwgIC8vIGNvdXJpZXIKKyAgICAg
ICAgNTMxLCAgLy8gQ2hhdAorICAgICAgICA1MzIsICAvLyBuZXRuZXdzCisgICAgICAgIDU0MCwg
IC8vIFVVQ1AKKyAgICAgICAgNTU2LCAgLy8gcmVtb3RlZnMKKyAgICAgICAgNTYzLCAgLy8gTk5U
UCtTU0wKKyAgICAgICAgNTg3LCAgLy8gRVNNVFAKKyAgICAgICAgNjAxLCAgLy8gc3lzbG9nLWNv
bm4KKyAgICAgICAgNjM2LCAgLy8gTERBUCtTU0wKKyAgICAgICAgOTkzLCAgLy8gSU1BUCtTU0wK
KyAgICAgICAgOTk1LCAgLy8gUE9QMytTU0wKKyAgICAgICAgMjA0OSwgLy8gTkZTCisgICAgICAg
IDM2NTksIC8vIGFwcGxlLXNhc2wgLyBQYXNzd29yZFNlcnZlciBbQXBwbGUgYWRkaXRpb25dCisg
ICAgICAgIDQwNDUsIC8vIGxvY2tkCisgICAgICAgIDYwMDAsIC8vIFgxMQorICAgIH07CisgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQqIGNvbnN0IGJsb2NrZWRQb3J0TGlzdEVuZCA9IGJsb2NrZWRQ
b3J0TGlzdCArIHNpemVvZihibG9ja2VkUG9ydExpc3QpIC8gc2l6ZW9mKGJsb2NrZWRQb3J0TGlz
dFswXSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gVGhlIHBvcnQgbGlzdCBtdXN0IGJlIHNv
cnRlZCBmb3IgYmluYXJ5X3NlYXJjaCB0byB3b3JrLgorICAgIHN0YXRpYyBib29sIGNoZWNrZWRQ
b3J0TGlzdCA9IGZhbHNlOworICAgIGlmICghY2hlY2tlZFBvcnRMaXN0KSB7CisgICAgICAgIGZv
ciAoY29uc3QgdW5zaWduZWQgc2hvcnQqIHAgPSBibG9ja2VkUG9ydExpc3Q7IHAgIT0gYmxvY2tl
ZFBvcnRMaXN0RW5kIC0gMTsgKytwKQorICAgICAgICAgICAgQVNTRVJUKCpwIDwgKihwICsgMSkp
OworICAgICAgICBjaGVja2VkUG9ydExpc3QgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAg
Ly8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRoZSBibG9ja2VkIHBvcnQgbGlzdCwgYWxsb3cgaXQu
CisgICAgaWYgKCFiaW5hcnlfc2VhcmNoKGJsb2NrZWRQb3J0TGlzdCwgYmxvY2tlZFBvcnRMaXN0
RW5kLCBwb3J0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBBbGxvdyBwb3J0cyAy
MSBhbmQgMjIgZm9yIEZUUCBVUkxzLCBhcyBNb3ppbGxhIGRvZXMuCisgICAgaWYgKChwb3J0ID09
IDIxIHx8IHBvcnQgPT0gMjIpICYmIHVybC5wcm90b2NvbElzKCJmdHAiKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAvLyBBbGxvdyBhbnkgcG9ydCBudW1iZXIgaW4gYSBmaWxlIFVSTCwg
c2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIGlnbm9yZWQuCisgICAgaWYgKHVybC5wcm90b2NvbElz
KCJmaWxlIikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
CiBTdHJpbmcgbWltZVR5cGVGcm9tRGF0YVVSTChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBB
U1NFUlQocHJvdG9jb2xJcyh1cmwsICJkYXRhIikpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9L
VVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHJldmlzaW9uIDUx
NjQyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2
ICsyNjQsOSBAQCBib29sIHByb3RvY29sSXMoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0CiBib29s
IHByb3RvY29sSXNKYXZhU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsKTsKIGJvb2wgaXNWYWxpZFBy
b3RvY29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogCitib29sIGlzRGVmYXVsdFBvcnRGb3JQ
cm90b2NvbCh1bnNpZ25lZCBzaG9ydCBwb3J0LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKK2Jv
b2wgcG9ydEFsbG93ZWQoY29uc3QgS1VSTCYpOyAvLyBCbGFja2xpc3QgcG9ydHMgdGhhdCBzaG91
bGQgbmV2ZXIgYmUgdXNlZCBmb3IgV2ViIHJlc291cmNlcy4KKwogU3RyaW5nIG1pbWVUeXBlRnJv
bURhdGFVUkwoY29uc3QgU3RyaW5nJiB1cmwpOwogCiAvLyBVbmVzY2FwZXMgdGhlIGdpdmVuIHN0
cmluZyB1c2luZyBVUkwgZXNjYXBpbmcgcnVsZXMsIGdpdmVuIGFuIG9wdGlvbmFsCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDUx
NjQyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRp
YyBib29sIHNob3VsZEZvcmNlQ29udGVudFNuaWZmaW5nOwogCi1zdGF0aWMgYm9vbCBwb3J0QWxs
b3dlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKLQogUmVzb3VyY2VIYW5kbGU6OlJlc291cmNl
SGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGll
bnQqIGNsaWVudCwgYm9vbCBkZWZlcnNMb2FkaW5nLAogICAgICAgICAgYm9vbCBzaG91bGRDb250
ZW50U25pZmYsIGJvb2wgbWlnaHREb3dubG9hZEZyb21IYW5kbGUpCiAgICAgOiBkKG5ldyBSZXNv
dXJjZUhhbmRsZUludGVybmFsKHRoaXMsIHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywg
c2hvdWxkQ29udGVudFNuaWZmLCBtaWdodERvd25sb2FkRnJvbUhhbmRsZSkpCkBAIC01Nyw3ICs1
NSw3IEBAIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291cmNlSGFuZGwKICAgICAgICAg
cmV0dXJuIG5ld0hhbmRsZS5yZWxlYXNlKCk7CiAgICAgfQogCi0gICAgaWYgKCFwb3J0QWxsb3dl
ZChyZXF1ZXN0KSkgeworICAgIGlmICghcG9ydEFsbG93ZWQocmVxdWVzdC51cmwoKSkpIHsKICAg
ICAgICAgbmV3SGFuZGxlLT5zY2hlZHVsZUZhaWx1cmUoQmxvY2tlZEZhaWx1cmUpOwogICAgICAg
ICByZXR1cm4gbmV3SGFuZGxlLnJlbGVhc2UoKTsKICAgICB9CkBAIC0xMTMsOTUgKzExMSw2IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNsZWFyQXV0aGVudGljYXRpb24KICNlbmRpZgogICAgIGQt
Pm1fY3VycmVudFdlYkNoYWxsZW5nZS5udWxsaWZ5KCk7CiB9Ci0KLXN0YXRpYyBib29sIHBvcnRB
bGxvd2VkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICB1bnNpZ25lZCBz
aG9ydCBwb3J0ID0gcmVxdWVzdC51cmwoKS5wb3J0KCk7Ci0KLSAgICAvLyBTaW5jZSBtb3N0IFVS
THMgZG9uJ3QgaGF2ZSBhIHBvcnQsIHJldHVybiBlYXJseSBmb3IgdGhlICJubyBwb3J0IiBjYXNl
LgotICAgIGlmICghcG9ydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGJs
b2NrZWQgcG9ydCBsaXN0IG1hdGNoZXMgdGhlIHBvcnQgYmxvY2tpbmcgdGhhdCBNb3ppbGxhIGlt
cGxlbWVudHMuCi0gICAgLy8gU2VlIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvbmV0
bGliL1BvcnRCYW5uaW5nLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGJsb2NrZWRQb3J0TGlzdFtdID0gewotICAgICAgICAxLCAgICAv
LyB0Y3BtdXgKLSAgICAgICAgNywgICAgLy8gZWNobwotICAgICAgICA5LCAgICAvLyBkaXNjYXJk
Ci0gICAgICAgIDExLCAgIC8vIHN5c3RhdAotICAgICAgICAxMywgICAvLyBkYXl0aW1lCi0gICAg
ICAgIDE1LCAgIC8vIG5ldHN0YXQKLSAgICAgICAgMTcsICAgLy8gcW90ZAotICAgICAgICAxOSwg
ICAvLyBjaGFyZ2VuCi0gICAgICAgIDIwLCAgIC8vIEZUUC1kYXRhCi0gICAgICAgIDIxLCAgIC8v
IEZUUC1jb250cm9sCi0gICAgICAgIDIyLCAgIC8vIFNTSAotICAgICAgICAyMywgICAvLyB0ZWxu
ZXQKLSAgICAgICAgMjUsICAgLy8gU01UUAotICAgICAgICAzNywgICAvLyB0aW1lCi0gICAgICAg
IDQyLCAgIC8vIG5hbWUKLSAgICAgICAgNDMsICAgLy8gbmljbmFtZQotICAgICAgICA1MywgICAv
LyBkb21haW4KLSAgICAgICAgNzcsICAgLy8gcHJpdi1yanMKLSAgICAgICAgNzksICAgLy8gZmlu
Z2VyCi0gICAgICAgIDg3LCAgIC8vIHR0eWxpbmsKLSAgICAgICAgOTUsICAgLy8gc3VwZHVwCi0g
ICAgICAgIDEwMSwgIC8vIGhvc3RyaWFtZQotICAgICAgICAxMDIsICAvLyBpc28tdHNhcAotICAg
ICAgICAxMDMsICAvLyBncHBpdG5wCi0gICAgICAgIDEwNCwgIC8vIGFjci1uZW1hCi0gICAgICAg
IDEwOSwgIC8vIFBPUDIKLSAgICAgICAgMTEwLCAgLy8gUE9QMwotICAgICAgICAxMTEsICAvLyBz
dW5ycGMKLSAgICAgICAgMTEzLCAgLy8gYXV0aAotICAgICAgICAxMTUsICAvLyBTRlRQCi0gICAg
ICAgIDExNywgIC8vIHV1Y3AtcGF0aAotICAgICAgICAxMTksICAvLyBubnRwCi0gICAgICAgIDEy
MywgIC8vIE5UUAotICAgICAgICAxMzUsICAvLyBsb2Mtc3J2IC8gZXBtYXAKLSAgICAgICAgMTM5
LCAgLy8gbmV0YmlvcwotICAgICAgICAxNDMsICAvLyBJTUFQMgotICAgICAgICAxNzksICAvLyBC
R1AKLSAgICAgICAgMzg5LCAgLy8gTERBUAotICAgICAgICA0NjUsICAvLyBTTVRQK1NTTAotICAg
ICAgICA1MTIsICAvLyBwcmludCAvIGV4ZWMKLSAgICAgICAgNTEzLCAgLy8gbG9naW4KLSAgICAg
ICAgNTE0LCAgLy8gc2hlbGwKLSAgICAgICAgNTE1LCAgLy8gcHJpbnRlcgotICAgICAgICA1MjYs
ICAvLyB0ZW1wbwotICAgICAgICA1MzAsICAvLyBjb3VyaWVyCi0gICAgICAgIDUzMSwgIC8vIENo
YXQKLSAgICAgICAgNTMyLCAgLy8gbmV0bmV3cwotICAgICAgICA1NDAsICAvLyBVVUNQCi0gICAg
ICAgIDU1NiwgIC8vIHJlbW90ZWZzCi0gICAgICAgIDU2MywgIC8vIE5OVFArU1NMCi0gICAgICAg
IDU4NywgIC8vIEVTTVRQCi0gICAgICAgIDYwMSwgIC8vIHN5c2xvZy1jb25uCi0gICAgICAgIDYz
NiwgIC8vIExEQVArU1NMCi0gICAgICAgIDk5MywgIC8vIElNQVArU1NMCi0gICAgICAgIDk5NSwg
IC8vIFBPUDMrU1NMCi0gICAgICAgIDIwNDksIC8vIE5GUwotICAgICAgICAzNjU5LCAvLyBhcHBs
ZS1zYXNsIC8gUGFzc3dvcmRTZXJ2ZXIgW0FwcGxlIGFkZGl0aW9uXQotICAgICAgICA0MDQ1LCAv
LyBsb2NrZAotICAgICAgICA2MDAwLCAvLyBYMTEKLSAgICB9OwotICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0KiBjb25zdCBibG9ja2VkUG9ydExpc3RFbmQgPSBibG9ja2VkUG9ydExpc3QKLSAgICAg
ICAgKyBzaXplb2YoYmxvY2tlZFBvcnRMaXN0KSAvIHNpemVvZihibG9ja2VkUG9ydExpc3RbMF0p
OwotCi0gICAgLy8gSWYgdGhlIHBvcnQgaXMgbm90IGluIHRoZSBibG9ja2VkIHBvcnQgbGlzdCwg
YWxsb3cgaXQuCi0gICAgaWYgKCFzdGQ6OmJpbmFyeV9zZWFyY2goYmxvY2tlZFBvcnRMaXN0LCBi
bG9ja2VkUG9ydExpc3RFbmQsIHBvcnQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8v
IEFsbG93IHBvcnRzIDIxIGFuZCAyMiBmb3IgRlRQIFVSTHMsIGFzIE1vemlsbGEgZG9lcy4KLSAg
ICBpZiAoKHBvcnQgPT0gMjEgfHwgcG9ydCA9PSAyMikgJiYgcmVxdWVzdC51cmwoKS5wcm90b2Nv
bElzKCJmdHAiKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBBbGxvdyBhbnkgcG9y
dCBudW1iZXIgaW4gYSBmaWxlIFVSTCwgc2luY2UgdGhlIHBvcnQgbnVtYmVyIGlzIGlnbm9yZWQu
Ci0gICAgaWYgKHJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiZmlsZSIpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KICAgCiBib29sIFJlc291cmNlSGFuZGxl
OjpzaG91bGRDb250ZW50U25pZmYoKSBjb25zdAogewpJbmRleDogV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAJKHJldmlzaW9uIDUxNjQyKQorKysgV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0
Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTI2LDE4ICsx
MjUsMjMgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLAogICAgIG1f
cHJvdG9jb2wgPSBwcm90b2NvbDsKIAogICAgIGlmICghbV91cmwucHJvdG9jb2xJcygid3MiKSAm
JiAhbV91cmwucHJvdG9jb2xJcygid3NzIikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJFcnJvcjog
d3JvbmcgdXJsIGZvciBXZWJTb2NrZXQgJXMiLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiV3JvbmcgdXJsIHNjaGVtZSBmb3IgV2ViU29ja2V0ICVz
IiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VE
OwogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKCFpc1ZhbGlkUHJvdG9jb2xTdHJpbmcobV9wcm90b2NvbCkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJFcnJvcjogd3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAlcyIsIG1fcHJvdG9jb2wu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIExPRyhOZXR3b3JrLCAiV3JvbmcgcHJvdG9jb2wgZm9y
IFdlYlNvY2tldCAlcyIsIG1fcHJvdG9jb2wudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIG1fc3Rh
dGUgPSBDTE9TRUQ7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICAvLyBGSVhNRTogaWYgbV91cmwucG9ydCgpIGlzIGJsb2NraW5nIHBvcnQsIHJh
aXNlIFNFQ1VSSVRZX0VSUi4KKyAgICBpZiAoIXBvcnRBbGxvd2VkKHVybCkpIHsKKyAgICAgICAg
TE9HKE5ldHdvcmssICJXZWJTb2NrZXQgcG9ydCAlZCBibG9ja2VkIiwgdXJsLnBvcnQoKSk7Cisg
ICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9jaGFubmVsID0gV2ViU29ja2V0Q2hhbm5lbDo6
Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgbV91cmwsIG1fcHJvdG9jb2wp
OwogICAgIG1fY2hhbm5lbC0+Y29ubmVjdCgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTE2NDIpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAor
MjAwOS0xMi0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIwODUKKyAgICAgICAgV2ViU29ja2V0IHNob3VsZCBi
bG9jayB0aGUgc2FtZSBwb3J0cyB0aGF0IGFyZSBibG9ja2VkIGZvciByZXNvdXJjZSBsb2FkaW5n
CisKKyAgICAgICAgQWRkZWQgc29tZSB0ZXN0cyBmb3IgVVJMIHBhcnNpbmcgKG9uZSBvZiB0aGVt
IGV4cGVjdHMgY3VycmVudCBXZWJLaXQgYmVoYXZpb3IsIG5vdCB3aGF0IHRoZQorICAgICAgICBz
cGVjIHNheXMpLgorCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwt
cGFyc2luZy5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5n
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJz
aW5nLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEyLTAzICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxn
dXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVk
IGJ5IE9saXZlciBIdW50LgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3VybC1w
YXJzaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvdXJsLXBhcnNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvd2Vic29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMSBAQAorVGVzdCBXZWJTb2NrZXQgVVJMIHBhcnNpbmcuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBuZXcgV2ViU29ja2V0KCIvYXBwbGV0IikgdGhyZXcg
ZXhjZXB0aW9uIEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyLgorUEFTUyBuZXcg
V2ViU29ja2V0KCJ3czovLzEyNy4wLjAuMToyNS8iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IFNF
Q1VSSVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOC4KK1BBU1MgKG5ldyBXZWJTb2NrZXQoIndzOi8v
MTI3LjAuMC4xL2EvLi4vIikpLlVSTCBpcyAid3M6Ly8xMjcuMC4wLjEvIgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy91cmwtcGFyc2luZy1leHBlY3RlZC50eHQK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46
ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3VybC1wYXJzaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3VybC1wYXJzaW5nLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvdXJsLXBhcnNpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvdXJsLXBhcnNpbmcuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3VybC1wYXJzaW5nLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3Nj
cmlwdC10ZXN0cy91cmwtcGFyc2luZy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvc2NyaXB0LXRlc3RzL3VybC1wYXJzaW5nLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2luZy5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorZGVzY3JpcHRpb24oIlRlc3QgV2ViU29ja2V0
IFVSTCBwYXJzaW5nLiIpOworCisvLyBDYW4ndCB1c2UgcmVsYXRpdmUgVVJMcyAtIGJlY2F1c2Ug
c3BlYyBzYXlzIHNvLCBhbmQgYmVjYXVzZSB0aGUgc2NoZW1lIGlzIGRpZmZlcmVudCBhbnl3YXku
CitzaG91bGRUaHJvdygnbmV3IFdlYlNvY2tldCgiL2FwcGxldCIpJyk7CisKKy8vIFVBIGlzIGFs
bG93ZWQgdG8gYmxvY2sgYWNjZXNzIHRvIHNvbWUgcG9ydHMsIHdoaWNoIHdlIGRvLgorc2hvdWxk
VGhyb3coJ25ldyBXZWJTb2NrZXQoIndzOi8vMTI3LjAuMC4xOjI1LyIpJyk7CisKKy8vIFRoaXMg
aXMgd2hhdCB3ZSBjdXJyZW50bHkgZG8sIGJ1dCBub3Qgd2hhdCB0aGUgc3BlYyBzYXlzIChhcyBv
ZiBFZGl0b3IncyBEcmFmdCAxIERlY2VtYmVyIDIwMDkpLgorLy8gVGhlIHNwZWMgc2F5cyB0aGF0
IHRoZSBzdHJpbmcgcGFzc2VkIHRvIFdlYlNjb2tldCBjb25zdHJ1Y3RvciBzaG91bGQgYmUgcmV0
dXJuZWQgdW5jaGFuZ2VkLgorc2hvdWxkQmUoJyhuZXcgV2ViU29ja2V0KCJ3czovLzEyNy4wLjAu
MS9hLy4uLyIpKS5VUkwnLCAnIndzOi8vMTI3LjAuMC4xLyInKTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Citpc1N1Y2Nlc3NmdWxseVBhcnNlZCgpOwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NjcmlwdC10ZXN0cy91cmwtcGFyc2lu
Zy5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L3BsYWluCk5hbWU6
IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCg==
</data>
<flag name="review"
          id="26058"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>