<?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>19180</bug_id>
          
          <creation_ts>2008-05-21 22:14:07 -0700</creation_ts>
          <short_desc>speed up SunSpider by optimizing immediate number cases</short_desc>
          <delta_ts>2012-03-07 17:47:57 -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>JavaScriptCore</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>emacemac7</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>81159</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-21 22:14:07 -0700</bug_when>
    <thetext>I want to add immediate number special cases to hot opcodes. It seems to be working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81160</commentid>
    <comment_count>1</comment_count>
      <attachid>21285</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-21 22:16:20 -0700</bug_when>
    <thetext>Created attachment 21285
patch for &lt; operator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81161</commentid>
    <comment_count>2</comment_count>
      <attachid>21285</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-21 22:17:22 -0700</bug_when>
    <thetext>Comment on attachment 21285
patch for &lt; operator

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81171</commentid>
    <comment_count>3</comment_count>
      <attachid>21285</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-21 23:22:08 -0700</bug_when>
    <thetext>Comment on attachment 21285
patch for &lt; operator

Clearing since I landed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81541</commentid>
    <comment_count>4</comment_count>
      <attachid>21348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-26 13:49:35 -0700</bug_when>
    <thetext>Created attachment 21348
patch for &amp;, |, and ^ operators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81605</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-27 08:14:21 -0700</bug_when>
    <thetext>I&apos;m going to see if jsAdd can be similarly optimized - about 60% of number additions in SunSpider are for immediates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81609</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 09:09:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I&apos;m going to see if jsAdd can be similarly optimized - about 60% of number
&gt; additions in SunSpider are for immediates.

For what it&apos;s worth, I tried that and failed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81610</commentid>
    <comment_count>7</comment_count>
      <attachid>21348</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 09:10:02 -0700</bug_when>
    <thetext>Comment on attachment 21348
patch for &amp;, |, and ^ operators

Clear flag since I landed this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81616</commentid>
    <comment_count>8</comment_count>
      <attachid>21363</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-27 10:11:24 -0700</bug_when>
    <thetext>Created attachment 21363
Patch for + and -

Hmm, makes me wonder if I got my bit operations wrong. This passes JSC tests, still rebuilding to run layout tests.

Oliver has a similar patch for ++, which we discussed a little yesterday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81621</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 11:12:44 -0700</bug_when>
    <thetext>OK. My original patch did ++, --, + and -, but there was a net slowdown for all of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81622</commentid>
    <comment_count>10</comment_count>
      <attachid>21363</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 11:13:36 -0700</bug_when>
    <thetext>Comment on attachment 21363
Patch for + and -

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81642</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-27 12:55:59 -0700</bug_when>
    <thetext>So, I tried to land my patch, and re-measured performance with ToT, just in case. And it has turned into a 6% regression!

I&apos;ve triple-checked the numbers, and it is just that: your patch is a 1% win, mine is 1.8% win, but together, they become a 6% regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81646</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-27 13:42:33 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I&apos;ve triple-checked the numbers, and it is just that: your patch is a 1% win,
&gt; mine is 1.8% win, but together, they become a 6% regression.

Which specific patch do you mean when you say &quot;your patch&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81649</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-27 13:53:20 -0700</bug_when>
    <thetext>I was talking about the latest one, which I didn&apos;t have in my tree when measuring originally, &quot;patch for &amp;, |, and ^ operators&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81704</commentid>
    <comment_count>14</comment_count>
      <attachid>21363</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 02:55:27 -0700</bug_when>
    <thetext>Comment on attachment 21363
Patch for + and -

Landed this patch, it was a 2% improvement after a slight random change that should have been a slowdown - I&apos;ve moved VM_CHECK_EXCEPTION() out of else block. Applying the same change to bitops regresses performance, though.

On disassembly, I saw a lot of changes everywhere in Machine::executePrivate, but I can&apos;t tell what gcc was thinking. There are also changes in completely unrelated places, such as base64 encoding and registerThread().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81705</commentid>
    <comment_count>15</comment_count>
      <attachid>21384</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 03:27:22 -0700</bug_when>
    <thetext>Created attachment 21384
Patch for ++ and --</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81706</commentid>
    <comment_count>16</comment_count>
      <attachid>21384</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-28 03:29:34 -0700</bug_when>
    <thetext>Comment on attachment 21384
Patch for ++ and --

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81707</commentid>
    <comment_count>17</comment_count>
      <attachid>21384</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 03:49:47 -0700</bug_when>
    <thetext>Comment on attachment 21384
Patch for ++ and --

Clearing since I landed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81710</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 05:19:01 -0700</bug_when>
    <thetext>From the looks of it, right shift should also benefit from such optimization, but I cannot get it to work yet. I do not see any other cases to optimize in this manner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81757</commentid>
    <comment_count>19</comment_count>
      <attachid>21395</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 10:29:28 -0700</bug_when>
    <thetext>Created attachment 21395
Patch for &gt;&gt;, &gt;&gt;&gt;, ==, ===, !=, !==</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81763</commentid>
    <comment_count>20</comment_count>
      <attachid>21395</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 10:44:11 -0700</bug_when>
    <thetext>Comment on attachment 21395
Patch for &gt;&gt;, &gt;&gt;&gt;, ==, ===, !=, !==

Oops, this is buggy...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81764</commentid>
    <comment_count>21</comment_count>
      <attachid>21395</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-28 10:47:37 -0700</bug_when>
    <thetext>Comment on attachment 21395
Patch for &gt;&gt;, &gt;&gt;&gt;, ==, ===, !=, !==

 124         return reinterpret_cast&lt;JSValue*&gt;((reinterpret_cast&lt;intptr_t&gt;(val) &gt;&gt; ((reinterpret_cast&lt;uintptr_t&gt;(shift) &gt;&gt; 2) &amp; 0x1f)) | NumberType);

Does this do the correct thing on numbers that have low bits set? What about a 1 shifted right by 1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81771</commentid>
    <comment_count>22</comment_count>
      <attachid>21398</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-28 11:47:50 -0700</bug_when>
    <thetext>Created attachment 21398
Patch for &gt;&gt;, ==, ===, !=, !==

Removed the fast path for &gt;&gt;&gt; for now, as it was quite incorrect for negative numbers, and fixing this results in rather mixed performance changes.

(In reply to comment #21)
&gt; Does this do the correct thing on numbers that have low bits set? 

As far as I can tell, it does.

&gt; What about a 1 shifted right by 1?

That&apos;s (7 &gt;&gt; (7 &gt;&gt; 2)) | 3 == (7 &gt;&gt; 1) | 3 == 3, which is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81907</commentid>
    <comment_count>23</comment_count>
      <attachid>21425</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-29 23:06:28 -0700</bug_when>
    <thetext>Created attachment 21425
Patch for &gt;&gt;, ==, ===, !=, !==

Renamed v1/v2 to src1/src2, to make code match documentation.

I just realized that there is the same issue on PPC with &lt;&lt; - I&apos;ll see if a fix for it can be combined with an optimization again, or will file a separate bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81909</commentid>
    <comment_count>24</comment_count>
      <attachid>21425</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-05-30 00:29:33 -0700</bug_when>
    <thetext>Comment on attachment 21425
Patch for &gt;&gt;, ==, ===, !=, !==

r=me, assuming layout and jsc tests pass.  And assuming you tested perf on current ToT :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81912</commentid>
    <comment_count>25</comment_count>
      <attachid>21425</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-30 02:16:36 -0700</bug_when>
    <thetext>Comment on attachment 21425
Patch for &gt;&gt;, ==, ===, !=, !==

Clearing, because I landed this.

(In reply to comment #24)
&gt; And assuming you tested perf on current ToT :D

It was a larger speedup today - because r34204 was a random regression, and this patch brings absolute numbers back to what I saw before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81927</commentid>
    <comment_count>26</comment_count>
      <attachid>21430</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-30 06:51:03 -0700</bug_when>
    <thetext>Created attachment 21430
Patch for &lt;&lt; and &gt;&gt;&gt;

Randomness strikes again, but a win overall.

Many of these above cases can be further improved by using inline assembly - it is faster to try an arithmetic operation and check carry and overflow flags than to check if it can be run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81932</commentid>
    <comment_count>27</comment_count>
      <attachid>21430</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-30 07:25:57 -0700</bug_when>
    <thetext>Comment on attachment 21430
Patch for &lt;&lt; and &gt;&gt;&gt;

If you fixed a regression on PowerPC, was there a regression test indicating it?

+        (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result
+        to unsigned.

I&apos;m concerned about the &quot;to&quot; vs. &quot;get&quot; in the name here. This class seems we use &quot;get&quot; to mean &quot;convert with no possibility of error&quot; and &quot;to&quot; to mean &quot;convert with a possible exception or error&quot;.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81972</commentid>
    <comment_count>28</comment_count>
      <attachid>21430</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-05-30 13:12:46 -0700</bug_when>
    <thetext>Comment on attachment 21430
Patch for &lt;&lt; and &gt;&gt;&gt;

Clearing review flag, since I landed this.

(In reply to comment #27)
&gt; If you fixed a regression on PowerPC, was there a regression test indicating
&gt; it?

Yes, it&apos;s one of the three Mozilla tests that I claimed to have fixed in the previous patch. Only two were fixed, in fact.

&gt; I&apos;m concerned about the &quot;to&quot; vs. &quot;get&quot; in the name here. This class seems we
&gt; use &quot;get&quot; to mean &quot;convert with no possibility of error&quot; and &quot;to&quot; to mean
&gt; &quot;convert with a possible exception or error&quot;.

I&apos;m rather confused about the naming in JSImmediate.h - some &quot;get&quot; functions also return a bool to indicate success. That said, this new function just implements &quot;ToUInt32&quot; algorithm from ECMA-232 for immediates as far as I can tell, and is not really a &quot;get&quot; in the sense that -1 turns into 4294967296. The &quot;get&quot; functions that we have do not cast the result like that. I wasn&apos;t sure what the word &quot;truncated&quot; meant here, but since this function does almost the same work as getTruncatedInt32, I kept it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81974</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-30 13:34:43 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; I&apos;m rather confused about the naming in JSImmediate.h - some &quot;get&quot; functions
&gt; also return a bool to indicate success. That said, this new function just
&gt; implements &quot;ToUInt32&quot; algorithm from ECMA-232 for immediates as far as I can
&gt; tell, and is not really a &quot;get&quot; in the sense that -1 turns into 4294967296. The
&gt; &quot;get&quot; functions that we have do not cast the result like that. I wasn&apos;t sure
&gt; what the word &quot;truncated&quot; meant here, but since this function does almost the
&gt; same work as getTruncatedInt32, I kept it.

I can live with this. It&apos;s worth redoing the names at some point.

The &quot;truncated&quot; is left over from when immediate numbers could be non-integers. &quot;Truncated&quot; meant that the function was free to discard the fractional portion or values that didn&apos;t fit in a 32-bit integer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82190</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-06-03 05:27:56 -0700</bug_when>
    <thetext>I think I&apos;m done with this for now - do we need to keep the bug open?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82207</commentid>
    <comment_count>31</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-03 09:26:01 -0700</bug_when>
    <thetext>Fine to close this if there are no more obvious cases to optimize.

But &lt;= and &gt;= haven&apos;t been done yet. Maybe there are others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573419</commentid>
    <comment_count>32</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-07 17:47:57 -0800</bug_when>
    <thetext>The JITs generate immediate arithmetic ops &amp; compares.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21285</attachid>
            <date>2008-05-21 22:16:20 -0700</date>
            <delta_ts>2010-06-10 16:49:02 -0700</delta_ts>
            <desc>patch for &lt; operator</desc>
            <filename>LessPatch.txt</filename>
            <type>text/plain</type>
            <size>1225</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MDA3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDUtMjEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5MTgwCisgICAgICAgICAgc3BlZWQgdXAgdGhlIDwgb3BlcmF0b3IgZm9yIHRoZSBjYXNlIHdo
ZW4gYm90aCB2YWx1ZXMgYXJlIGludGVnZXJzCisKKyAgICAgICAgTWFrZXMgc3RhbmRhbG9uZSBT
dW5TcGlkZXIgMS4wMjJ4IGZhc3Rlci4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAg
ICAgICAoS0pTOjpqc0xlc3MpOiBBZGQgYSBzcGVjaWFsIGNhc2UgZm9yIHdoZW4gYm90aCBhcmUg
bnVtYmVycyB0aGF0IGZpdCBpbiBhIEpTSW1tZWRpYXRlLgorCiAyMDA4LTA1LTIxICBNYWNpZWog
U3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVy
IGFuZCBTYW0uCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzM5ODgpCisrKyBK
YXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcs
OSBAQCBzdGF0aWMgaW50IGRlcHRoKFNjb3BlQ2hhaW4mIHNjKQogICAgIAogc3RhdGljIGlubGlu
ZSBib29sIGpzTGVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUqIHYxLCBKU1ZhbHVlKiB2MikK
IHsKKyAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mikp
CisgICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6Z2V0VHJ1bmNhdGVkSW50MzIodjEpIDwgSlNJ
bW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHYyKTsKKwogICAgIGRvdWJsZSBuMTsKICAgICBk
b3VibGUgbjI7CiAgICAgSlNWYWx1ZSogcDE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21348</attachid>
            <date>2008-05-26 13:49:35 -0700</date>
            <delta_ts>2008-05-27 09:10:02 -0700</delta_ts>
            <desc>patch for &amp;, |, and ^ operators</desc>
            <filename>ImmediateNumberPatch.txt</filename>
            <type>text/plain</type>
            <size>4667</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTM5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDgtMDUtMjYgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5MTgwCisgICAgICAgICAgc3BlZWQgdXAgU3VuU3BpZGVyIGJ5IG9wdGltaXppbmcgaW1tZWRp
YXRlIG51bWJlciBjYXNlcworCisgICAgICAgIEFkZCBpbW1lZGlhdGUgbnVtYmVyIGNhc2VzIGZv
ciB0aGUgJiwgfCwgYW5kIF4gb3BlcmF0b3JzLgorICAgICAgICBNYWtlcyBzdGFuZGFsb25lIFN1
blNwaWRlciAxLjAxMHggZmFzdGVyLgorCisgICAgICAgICogVk0vTWFjaGluZS5jcHA6CisgICAg
ICAgIChLSlM6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKTogQWRkIGFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzIHNwZWNpYWwgY2FzZXMKKyAgICAgICAgZm9yIHRoZSAmLCB8LCBhbmQgXiBvcGVyYXRv
cnMuCisKKyAgICAgICAgKiBranMvSlNJbW1lZGlhdGUuaDoKKyAgICAgICAgKEtKUzo6SlNJbW1l
ZGlhdGU6OnhvckltbWVkaWF0ZU51bWJlcnMpOiBBZGRlZC4KKyAgICAgICAgKEtKUzo6SlNJbW1l
ZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyk6IEFkZGVkLgorCiAyMDA4LTA1LTI2ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzQxMzcpCisrKyBKYXZh
U2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDkg
QEAKICNpbmNsdWRlICJyZWdleHBfb2JqZWN0LmgiCiAKICNpZiBDT01QSUxFUihHQ0MpCi0jZGVm
aW5lIFVOTElLRUxZKHgpIFwKLSAgX19idWlsdGluX2V4cGVjdCAoKHgpLCAwKQorI2RlZmluZSBV
TkxJS0VMWSh4KSBfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMCkKICNlbHNlCi0jZGVmaW5lIFVOTElL
RUxZKHgpIHgKKyNkZWZpbmUgVU5MSUtFTFkoeCkgKHgpCiAjZW5kaWYKIAogbmFtZXNwYWNlIEtK
UyB7CkBAIC0xMzA4LDggKzEzMDcsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAg
ICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYzIgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKChyW3Ny
YzFdLnUuanNWYWx1ZS0+dG9JbnQzMihleGVjKSkgJiAocltzcmMyXS51LmpzVmFsdWUtPnRvSW50
MzIoZXhlYykpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIEpTVmFs
dWUqIHYxID0gcltzcmMxXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gcltzcmMy
XS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICAgICAgaWYgKEpTSW1t
ZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQorICAgICAgICAgICAgcmVz
dWx0ID0gSlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnModjEsIHYyKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBqc051bWJlcih2MS0+dG9JbnQzMihleGVjKSAm
IHYyLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwor
ICAgICAgICB9CiAgICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CiAgICAgICAgIAog
ICAgICAgICArK3ZQQzsKQEAgLTEzMjUsOCArMTMzMSwxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpw
cml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7CiAgICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQg
c3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoKHJbc3JjMV0udS5qc1ZhbHVlLT50b0ludDMyKGV4ZWMpKSBeIChyW3NyYzJdLnUuanNW
YWx1ZS0+dG9JbnQzMihleGVjKSkpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKyAg
ICAgICAgSlNWYWx1ZSogdjEgPSByW3NyYzFdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSog
djIgPSByW3NyYzJdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAg
ICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCisgICAg
ICAgICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6eG9ySW1tZWRpYXRlTnVtYmVycyh2MSwgdjIp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHYxLT50b0lu
dDMyKGV4ZWMpIF4gdjItPnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OKCk7CisgICAgICAgIH0KICAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsK
ICAgICAgICAgCiAgICAgICAgICsrdlBDOwpAQCAtMTM0Miw4ICsxMzU1LDE1IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQgPSBqc051bWJlcigocltzcmMxXS51LmpzVmFsdWUtPnRvSW50MzIoZXhlYykpIHwgKHJb
c3JjMl0udS5qc1ZhbHVlLT50b0ludDMyKGV4ZWMpKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbc3JjMV0udS5qc1ZhbHVlOworICAgICAg
ICBKU1ZhbHVlKiB2MiA9IHJbc3JjMl0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1
bHQ7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEs
IHYyKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRlOjpvckltbWVkaWF0ZU51bWJl
cnModjEsIHYyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBqc051bWJl
cih2MS0+dG9JbnQzMihleGVjKSB8IHYyLT50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIFZN
X0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CiAgICAgICAgIHJbZHN0XS51LmpzVmFsdWUg
PSByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICArK3ZQQzsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2tqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9KU0lt
bWVkaWF0ZS5oCShyZXZpc2lvbiAzNDEzNykKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVk
aWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDE4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pih2MSkgJiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odjIpKTsKICAgICB9CiAK
KyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiB4b3JJbW1lZGlhdGVOdW1iZXJzKGNv
bnN0IEpTVmFsdWUqIHYxLCBjb25zdCBKU1ZhbHVlKiB2MikKKyAgICB7CisgICAgICAgIEFTU0VS
VChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKTsKKyAgICAgICAgcmV0dXJuIHRhZyhy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odjEpIF4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHYyKSwgTnVtYmVyVHlwZSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSogb3JJbW1lZGlhdGVOdW1iZXJzKGNvbnN0IEpTVmFsdWUqIHYxLCBjb25zdCBKU1Zh
bHVlKiB2MikKKyAgICB7CisgICAgICAgIEFTU0VSVChhcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2
MSwgdjIpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2MSkgfCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
djIpKTsKKyAgICB9CisKICAgICBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGNvbnN0IEpTVmFsdWUq
KTsKICAgICBzdGF0aWMgYm9vbCB0b0Jvb2xlYW4oY29uc3QgSlNWYWx1ZSopOwogICAgIHN0YXRp
YyBKU09iamVjdCogdG9PYmplY3QoY29uc3QgSlNWYWx1ZSosIEV4ZWNTdGF0ZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21363</attachid>
            <date>2008-05-27 10:11:24 -0700</date>
            <delta_ts>2008-05-28 02:55:27 -0700</delta_ts>
            <desc>Patch for + and -</desc>
            <filename>Additives.txt</filename>
            <type>text/plain</type>
            <size>5156</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTQ1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDgtMDUtMjcgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTE4MAorICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgb3B0aW1pemluZyBpbW1l
ZGlhdGUgbnVtYmVyIGNhc2VzCisKKyAgICAgICAgMS44JSBzcGVlZHVwIG92ZXJhbGwsIDklIG9u
IGFjY2Vzcy1uc2lldmUgYW5kIGJpdG9wcy0zYml0LWJpdHMtaW4tYnl0ZSwKKyAgICAgICAgYnV0
IDMuOCUgcmVncmVzc2lvbiBvbiBiaXRvcHMtYml0cy1pbi1ieXRlLgorCisgICAgICAgICoga2pz
L0pTSW1tZWRpYXRlLmg6CisgICAgICAgIChLSlM6OkpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRp
dGl2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoS0pTOjpKU0ltbWVkaWF0ZTo6YWRkSW1tZWRpYXRl
TnVtYmVycyk6CisgICAgICAgIChLSlM6OkpTSW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJz
KToKKyAgICAgICAgQWRkZWQgZmFzdCBjYXNlcyB0aGF0IHdvcmsgd2l0aCBwb3NpdGl2ZSB2YWx1
ZXMgbGVzcyB0aGFuIDJeMzAuCisKKyAgICAgICAgKiBWTS9NYWNoaW5lLmNwcDoKKyAgICAgICAg
KEtKUzo6TWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUpOiBVc2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMu
IEFsc28gdXBkYXRlZCBTdW5TcGlkZXIgZnJlcXVlbmNpZXMKKyAgICAgICAgd2l0aCBteSByZXN1
bHRzIChsb29rcyBsaWtlIHRhZyB2YWx1ZXMgaGF2ZSBjaGFuZ2VkLCBub3Qgc3VyZSB3aGF0IGNh
dXNlZCBtaW5vciB2YXJpYXRpb24gaW4KKyAgICAgICAgYWN0dWFsIGZyZXF1ZW5jaWVzKS4KKwog
MjAwOC0wNS0yNiAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXaW5kb3dzIGJ1aWxkIGZpeC4gCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24g
MzQxNDUpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ4LDEyICsxNDgsMTEgQEAgc3RhdGljIEpTVmFsdWUqIGpzQWRkU2xvd0Nhc2UoRXhlY1N0
YXRlKgogLy8gRmFzdC1wYXRoIGNob2ljZXMgaGVyZSBhcmUgYmFzZWQgb24gZnJlcXVlbmN5IGRh
dGEgZnJvbSBTdW5TcGlkZXI6CiAvLyAgICA8dGltZXM+IEFkZCBjYXNlOiA8dDE+IDx0Mj4KIC8v
ICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gICAgNTYyNzE2MCBBZGQgY2FzZTog
MSAxCi0vLyAgICAyNDc0MjcgIEFkZCBjYXNlOiA1IDUKLS8vICAgIDIwOTAxICAgQWRkIGNhc2U6
IDUgNgotLy8gICAgMTM5NzggICBBZGQgY2FzZTogNSAxCi0vLyAgICA0MDAwICAgIEFkZCBjYXNl
OiAxIDUKLS8vICAgIDEgICAgICAgQWRkIGNhc2U6IDMgNQorLy8gICAgNTYyNjE2MCBBZGQgY2Fz
ZTogMyAzIChvZiB0aGVzZSwgMzYzNzY5MCBhcmUgZm9yIGltbWVkaWF0ZSB2YWx1ZXMsIDM0Mzcz
IG9mIHRoZW0gZm9yIG5lZ2F0aXZlKQorLy8gICAgMjQ3NDEyICBBZGQgY2FzZTogNSA1CisvLyAg
ICAyMDkwMCAgIEFkZCBjYXNlOiA1IDYKKy8vICAgIDEzOTYyICAgQWRkIGNhc2U6IDUgMworLy8g
ICAgNDAwMCAgICBBZGQgY2FzZTogMyA1CiAKIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZSoganNBZGQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlKiB2MSwgSlNWYWx1ZSogdjIpCiB7CkBAIC0xMTc2LDgg
KzExNzUsMTUgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjMSA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzQWRkKGV4ZWMsIHJbc3JjMV0udS5qc1ZhbHVl
LCByW3NyYzJdLnUuanNWYWx1ZSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAg
ICAgICBKU1ZhbHVlKiB2MSA9IHJbc3JjMV0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2
MiA9IHJbc3JjMl0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAg
IGlmIChKU0ltbWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYxKSAmJiBKU0lt
bWVkaWF0ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYyKSkKKyAgICAgICAgICAgIHJl
c3VsdCA9IEpTSW1tZWRpYXRlOjphZGRJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mik7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0ganNBZGQoZXhlYywgdjEsIHYyKTsKKyAgICAg
ICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CiAgICAgICAgIHJbZHN0XS51
LmpzVmFsdWUgPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsK
QEAgLTEyNDEsOCArMTI0NywxNSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShF
eGVjdXRpCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGlu
dCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIocltzcmMxXS51
LmpzVmFsdWUtPnRvTnVtYmVyKGV4ZWMpIC0gcltzcmMyXS51LmpzVmFsdWUtPnRvTnVtYmVyKGV4
ZWMpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIEpTVmFsdWUqIHYx
ID0gcltzcmMxXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gcltzcmMyXS51Lmpz
VmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKKyAgICAgICAgaWYgKEpTSW1tZWRpYXRl
OjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zh
c3RBZGRpdGl2ZU9wZXJhdGlvbnModjIpKQorICAgICAgICAgICAgcmVzdWx0ID0gSlNJbW1lZGlh
dGU6OnN1YkltbWVkaWF0ZU51bWJlcnModjEsIHYyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBqc051bWJlcih2MS0+dG9OdW1iZXIoZXhlYykgLSB2Mi0+dG9OdW1iZXIo
ZXhlYykpOworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIH0KICAg
ICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKICAgICAgICAgKyt2UEM7CiAgICAgICAg
IE5FWFRfT1BDT0RFOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHJldmlzaW9uIDM0
MTQ1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw2ICsxMDYsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYxKSAmIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pih2MikpOwogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKGNvbnN0IEpTVmFsdWUqIHYpCisg
ICAgeworICAgICAgICAvLyBOdW1iZXIgaXMgcG9zaXRpdmUgYW5kIGFuIG9wZXJhdGlvbiBpbnZv
bHZpbmcgdHdvIG9mIHRoZXNlIGNhbid0IG92ZXJmbG93LgorICAgICAgICAvLyBDaGVja2luZyBm
b3IgYWxsb3dlZCBuZWdhdGl2ZSBudW1iZXJzIHRha2VzIG1vcmUgdGltZSB0aGFuIGl0J3Mgd29y
dGggb24gU3VuU3BpZGVyLgorICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih2KSAmIChOdW1iZXJUeXBlICsgKDMgPDwgMzApKSkgPT0gTnVtYmVyVHlwZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBhZGRJbW1lZGlhdGVOdW1iZXJz
KGNvbnN0IEpTVmFsdWUqIHYxLCBjb25zdCBKU1ZhbHVlKiB2MikKKyAgICB7CisgICAgICAgIEFT
U0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpKTsKKyAgICAgICAgQVNTRVJUKGNh
bkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpOworICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYxKSArIChyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4odjIpICYgfk51bWJlclR5cGUpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBzdWJJbW1lZGlhdGVOdW1iZXJzKGNvbnN0
IEpTVmFsdWUqIHYxLCBjb25zdCBKU1ZhbHVlKiB2MikKKyAgICB7CisgICAgICAgIEFTU0VSVChj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjEpKTsKKyAgICAgICAgQVNTRVJUKGNhbkRvRmFz
dEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYxKSAtIChyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4odjIpICYgfk51bWJlclR5cGUpKTsKKyAgICB9CisKICAgICBzdGF0
aWMgZG91YmxlIHRvRG91YmxlKGNvbnN0IEpTVmFsdWUqKTsKICAgICBzdGF0aWMgYm9vbCB0b0Jv
b2xlYW4oY29uc3QgSlNWYWx1ZSopOwogICAgIHN0YXRpYyBKU09iamVjdCogdG9PYmplY3QoY29u
c3QgSlNWYWx1ZSosIEV4ZWNTdGF0ZSopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21384</attachid>
            <date>2008-05-28 03:27:22 -0700</date>
            <delta_ts>2008-05-28 03:49:47 -0700</delta_ts>
            <desc>Patch for ++ and --</desc>
            <filename>IncDec.txt</filename>
            <type>text/plain</type>
            <size>5385</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTcwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMDgtMDUtMjggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJhc2VkIG9uIGEgcGF0Y2ggYnkgT2xpdmVyIEh1bnQuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTgwCisg
ICAgICAgIHNwZWVkIHVwIFN1blNwaWRlciBieSBvcHRpbWl6aW5nIGltbWVkaWF0ZSBudW1iZXIg
Y2FzZXMKKworICAgICAgICAxLjQlIHNwZWVkdXAgb24gU3VuU3BpZGVyLgorCisgICAgICAgICog
Vk0vTWFjaGluZS5jcHA6CisgICAgICAgIChLSlM6Ok1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKToK
KyAgICAgICAgKiBranMvSlNJbW1lZGlhdGUuaDoKKyAgICAgICAgKEtKUzo6SlNJbW1lZGlhdGU6
OmluY0ltbWVkaWF0ZU51bWJlcik6CisgICAgICAgIChLSlM6OkpTSW1tZWRpYXRlOjpkZWNJbW1l
ZGlhdGVOdW1iZXIpOgorICAgICAgICBBZGRlZCBmYXN0IHBhdGhzIGZvciArKyBhbmQgLS0uCisK
KyAgICAgICAgKEtKUzo6SlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyk6
IENvcnJlY3RlZCBhIGNvbW1lbnQuCisKIDIwMDgtMDUtMjggIEFsZXhleSBQcm9za3VyeWFrb3Yg
IDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogSmF2
YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
Vk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM0MTcwKQorKysgSmF2YVNjcmlwdENvcmUvVk0vTWFj
aGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzcsNyArMTA3NywxMiBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGJhY2sgaW4gcmVnaXN0
ZXIgc3JjRHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihyW3NyY0RzdF0udS5q
c1ZhbHVlLT50b051bWJlcihleGVjKSArIDEpOworICAgICAgICBKU1ZhbHVlKiB2ID0gcltzcmNE
c3RdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoSlNJ
bW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkKKyAgICAgICAgICAgIHJl
c3VsdCA9IEpTSW1tZWRpYXRlOjppbmNJbW1lZGlhdGVOdW1iZXIodik7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpICsgMSk7CiAg
ICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICByW3NyY0RzdF0udS5qc1ZhbHVl
ID0gcmVzdWx0OwogICAgICAgICAKQEAgLTEwOTEsNyArMTA5NiwxMiBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGJhY2sgaW4gcmVnaXN0ZXIg
c3JjRHN0LgogICAgICAgICAqLwogICAgICAgICBpbnQgc3JjRHN0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihyW3NyY0RzdF0udS5qc1Zh
bHVlLT50b051bWJlcihleGVjKSAtIDEpOworICAgICAgICBKU1ZhbHVlKiB2ID0gcltzcmNEc3Rd
LnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoSlNJbW1l
ZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTSW1tZWRpYXRlOjpkZWNJbW1lZGlhdGVOdW1iZXIodik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHYtPnRvTnVtYmVyKGV4ZWMpIC0gMSk7CiAgICAg
ICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICByW3NyY0RzdF0udS5qc1ZhbHVlID0g
cmVzdWx0OwogCkBAIC0xMTA3LDExICsxMTE3LDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgKi8KICAgICAgICAgaW50IGRzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKICAgICAgICAgaW50IHNyY0RzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgSlNWYWx1ZSogbnVtYmVyID0gcltzcmNEc3RdLnUuanNWYWx1ZS0+dG9KU051bWJlcihl
eGVjKTsKKyAgICAgICAgSlNWYWx1ZSogdiA9IHJbc3JjRHN0XS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqIHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZSogbnVtYmVyOworICAgICAgICBpZiAo
SlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2KSkgeworICAgICAgICAg
ICAgbnVtYmVyID0gdjsKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRlOjppbmNJbW1l
ZGlhdGVOdW1iZXIodik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBudW1iZXIgPSBy
W3NyY0RzdF0udS5qc1ZhbHVlLT50b0pTTnVtYmVyKGV4ZWMpOworICAgICAgICAgICAgcmVzdWx0
ID0ganNOdW1iZXIobnVtYmVyLT51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpOworICAgICAgICB9
CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwogCiAgICAgICAgIHJbZHN0XS51LmpzVmFs
dWUgPSBudW1iZXI7Ci0gICAgICAgIHJbc3JjRHN0XS51LmpzVmFsdWUgPSBqc051bWJlcihudW1i
ZXItPnVuY2hlY2tlZEdldE51bWJlcigpICsgMSk7CisgICAgICAgIHJbc3JjRHN0XS51LmpzVmFs
dWUgPSByZXN1bHQ7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAt
MTEyNSwxMSArMTE0NCwyMCBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgIGludCBzcmNEc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IG51bWJlciA9IHJbc3JjRHN0XS51LmpzVmFsdWUtPnRvSlNOdW1iZXIoZXhlYyk7CisgICAgICAg
IEpTVmFsdWUqIHYgPSByW3NyY0RzdF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1
bHQ7CisgICAgICAgIEpTVmFsdWUqIG51bWJlcjsKKyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpj
YW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModikpIHsKKyAgICAgICAgICAgIG51bWJlciA9IHY7
CisgICAgICAgICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6ZGVjSW1tZWRpYXRlTnVtYmVyKHYp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbnVtYmVyID0gcltzcmNEc3RdLnUuanNW
YWx1ZS0+dG9KU051bWJlcihleGVjKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKG51
bWJlci0+dW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKTsKKyAgICAgICAgfQogICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKIAogICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gbnVtYmVyOwot
ICAgICAgICByW3NyY0RzdF0udS5qc1ZhbHVlID0ganNOdW1iZXIobnVtYmVyLT51bmNoZWNrZWRH
ZXROdW1iZXIoKSAtIDEpOworICAgICAgICByW3NyY0RzdF0udS5qc1ZhbHVlID0gcmVzdWx0Owog
CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL2tqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9K
U0ltbWVkaWF0ZS5oCShyZXZpc2lvbiAzNDE3MCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9KU0lt
bWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMo
Y29uc3QgSlNWYWx1ZSogdikKICAgICB7Ci0gICAgICAgIC8vIE51bWJlciBpcyBwb3NpdGl2ZSBh
bmQgYW4gb3BlcmF0aW9uIGludm9sdmluZyB0d28gb2YgdGhlc2UgY2FuJ3Qgb3ZlcmZsb3cuCisg
ICAgICAgIC8vIE51bWJlciBpcyBub24tbmVnYXRpdmUgYW5kIGFuIG9wZXJhdGlvbiBpbnZvbHZp
bmcgdHdvIG9mIHRoZXNlIGNhbid0IG92ZXJmbG93LgogICAgICAgICAvLyBDaGVja2luZyBmb3Ig
YWxsb3dlZCBuZWdhdGl2ZSBudW1iZXJzIHRha2VzIG1vcmUgdGltZSB0aGFuIGl0J3Mgd29ydGgg
b24gU3VuU3BpZGVyLgogICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pih2KSAmIChOdW1iZXJUeXBlICsgKDMgPDwgMzApKSkgPT0gTnVtYmVyVHlwZTsKICAgICB9CkBA
IC0xMzksNiArMTM5LDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2MSkgLSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHYyKSAmIH5OdW1iZXJUeXBlKSk7CiAgICAgfQogCisgICAgc3Rh
dGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSogaW5jSW1tZWRpYXRlTnVtYmVyKGNvbnN0IEpTVmFs
dWUqIHYpCisgICAgeworICAgICAgICBBU1NFUlQoY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25z
KHYpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pih2KSArIFRhZ01hc2sgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiBkZWNJbW1lZGlhdGVOdW1iZXIoY29uc3QgSlNWYWx1
ZSogdikKKyAgICB7CisgICAgICAgIEFTU0VSVChjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMo
dikpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHYpIC0gKFRhZ01hc2sgKyAxKSk7CisgICAgfQorCiAgICAgc3Rh
dGljIGRvdWJsZSB0b0RvdWJsZShjb25zdCBKU1ZhbHVlKik7CiAgICAgc3RhdGljIGJvb2wgdG9C
b29sZWFuKGNvbnN0IEpTVmFsdWUqKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIHRvT2JqZWN0KGNv
bnN0IEpTVmFsdWUqLCBFeGVjU3RhdGUqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21395</attachid>
            <date>2008-05-28 10:29:28 -0700</date>
            <delta_ts>2008-05-28 11:47:50 -0700</delta_ts>
            <desc>Patch for &gt;&gt;, &gt;&gt;&gt;, ==, ===, !=, !==</desc>
            <filename>RightShift.txt</filename>
            <type>text/plain</type>
            <size>16660</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMDgtMDUtMjggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTE4MAorICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgb3B0aW1pemluZyBpbW1l
ZGlhdGUgbnVtYmVyIGNhc2VzCisKKyAgICAgICAgQWxzbyBmaXhlZCB0aHJlZSBKYXZhU2NyaXB0
Q29yZSByZWdyZXNzaW9ucyBzZWVuIG9uIFBvd2VyUEMgLSB3ZSBkaWRuJ3QgY2xpcCByaWdodCBz
aGlmdAorICAgICAgICBwYXJhbWV0ZXIgdG8gMC4uLjMxLgorCisgICAgICAgIDEuMiUgaW1wcm92
ZW1lbnQgb24gU3VuU3BpZGVyLCB3aXRob3V0IHNpZ25pZmljYW50IHJlZ3Jlc3Npb25zIG9uIGFu
eSB0ZXN0cy4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoS0pTOjpNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIEFkZGVkIGZhc3QgcGF0aHMgZm9yID4+LCA+
Pj4sID09LCA9PT0sICE9LCAhPT0uIENoYW5nZWQgb3JkZXIgb2YgbWVtb3J5IGFjY2Vzc2VzIGlu
IG1hbnkKKyAgICAgICAgY2FzZXMsIG1ha2luZyB0aGVtIGxlc3MgZGVwZW5kZW50IG9uIGdjYydz
IGFiaWxpdHkgdG8gcHJvcGVybHkgYXNzaWduIHJlZ2lzdGVycy4gV2l0aCB0aGlzLAorICAgICAg
ICBJIGNvdWxkIG1vdmUgZXhjZXB0aW9uIGNoZWNrcyBiYWNrIGludG8gc2xvdyBjb2RlIHBhdGhz
LCBhbmQgc2F3IGxlc3MgcmFuZG9tbmVzcyBpbiBnZW5lcmFsLgorCisgICAgICAgICoga2pzL0pT
SW1tZWRpYXRlLmg6CisgICAgICAgIChLSlM6OkpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRp
YXRlTnVtYmVycyk6CisgICAgICAgIChLSlM6OkpTSW1tZWRpYXRlOjp1bnNpZ25lZFJpZ2h0U2hp
ZnRJbW1lZGlhdGVOdW1iZXJzKToKKyAgICAgICAgQWRkZWQuCisKIDIwMDgtMDUtMjggIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeGVkIGEgbWlzZ3Vp
ZGluZyBjb21tZW50IC0gbXkgbWVhc3VyZW1lbnQgZm9yIG5lZ2F0aXZlIG51bWJlcnMgb25seSBp
bmNsdWRlZCBjYXNlcwpJbmRleDogSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDM0MTcyKQor
KysgSmF2YVNjcmlwdENvcmUvVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3OSwx
MiArOTc5LDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPT0nIG9wZXJhdG9yLCBhbmQgcHV0cyB0
aGUgcmVzdWx0CiAgICAgICAgICAgIGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAg
ICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGlu
dCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGVxdWFsKGV4
ZWMsIHJbc3JjMV0udS5qc1ZhbHVlLCByW3NyYzJdLnUuanNWYWx1ZSkpOwotICAgICAgICBWTV9D
SEVDS19FWENFUFRJT04oKTsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAg
ICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7Cisg
ICAgICAgIEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAg
ICAgICAgSlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aElt
bWVkaWF0ZU51bWJlcnModjEsIHYyKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih2MSkgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odjIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4o
ZXF1YWwoZXhlYywgdjEsIHYyKSk7CisgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
KyAgICAgICAgfQorICAgICAgICBkc3QgPSByZXN1bHQ7CiAKICAgICAgICAgKyt2UEM7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtOTk2LDEyICsxMDAxLDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgZXF1YWwsIGFzIHdpdGggdGhlIEVD
TUFTY3JpcHQgJyE9JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlCiAgICAgICAgICAgIHJlc3VsdCBh
cyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWwoZXhlYywgcltzcmMxXS51LmpzVmFsdWUs
IHJbc3JjMl0udS5qc1ZhbHVlKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAg
ICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0g
clsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjEgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MiA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsK
KyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIp
KQorICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHYxKSAhPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih2MikpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWwoZXhlYywgdjEsIHYyKSk7
CisgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKyAgICAgICAgfQorICAgICAgICBk
c3QgPSByZXN1bHQ7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAt
MTAxMywxMCArMTAyMywxMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICAgIGVxdWFsLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICc9PT0nIG9wZXJh
dG9yLCBhbmQgcHV0cyB0aGUKICAgICAgICAgICAgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdp
c3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQg
c3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IGpz
Qm9vbGVhbihzdHJpY3RFcXVhbChyW3NyYzFdLnUuanNWYWx1ZSwgcltzcmMyXS51LmpzVmFsdWUp
KTsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFs
dWU7CisgICAgICAgIEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1
ZTsKKyAgICAgICAgSlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVl
OworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2
MikpCisgICAgICAgICAgICBkc3QgPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4odjEpID09IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHYyKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGRzdCA9IGpzQm9vbGVhbihzdHJpY3RFcXVhbCh2MSwgdjIpKTsKICAgICAg
ICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEwMjgsMTAgKzEw
NDEsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAg
ICAgICBzdHJpY3RseSBlcXVhbCwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnIT09JyBvcGVyYXRv
ciwgYW5kCiAgICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0
ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNy
YzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSBqc0Jv
b2xlYW4oIXN0cmljdEVxdWFsKHJbc3JjMV0udS5qc1ZhbHVlLCByW3NyYzJdLnUuanNWYWx1ZSkp
OworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1
ZTsKKyAgICAgICAgSlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVl
OworICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7
CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYy
KSkKKyAgICAgICAgICAgIGRzdCA9IGpzQm9vbGVhbihyZWludGVycHJldF9jYXN0PGludHB0cl90
Pih2MSkgIT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odjIpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZHN0ID0ganNCb29sZWFuKCFzdHJpY3RFcXVhbCh2MSwgdjIpKTsKIAogICAg
ICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMDQzLDEyICsxMDU5LDEyIEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgd2l0
aCB0aGUgRUNNQVNjcmlwdCAnPCcgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKICAg
ICAgICAgICAgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAg
aW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzKGV4ZWMsIHJbc3JjMV0udS5q
c1ZhbHVlLCByW3NyYzJdLnUuanNWYWx1ZSkpOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclso
Kyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjEgPSByWygr
K3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbKCsr
dlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
Qm9vbGVhbihqc0xlc3MoZXhlYywgdjEsIHYyKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
TigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSBy
ZXN1bHQ7CiAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTA2MCwx
MiArMTA3NiwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAg
ICAgICAgICAgIHJlZ2lzdGVyIHNyYzIsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJzw9JyBvcGVy
YXRvciwgYW5kCiAgICAgICAgICAgIHB1dHMgdGhlIHJlc3VsdCBhcyBhIGJvb2xlYW4gaW4gcmVn
aXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50
IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpz
Qm9vbGVhbihqc0xlc3NFcShleGVjLCByW3NyYzFdLnUuanNWYWx1ZSwgcltzcmMyXS51LmpzVmFs
dWUpKTsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51Lmpz
VmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNW
YWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1Zh
bHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEoZXhlYywg
djEsIHYyKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0u
dS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSByZXN1bHQ7CiAKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTIwMCwxOCArMTIxNiwxNyBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGluIHJlZ2lzdGVy
IGRzdC4gKEpTIGFkZCBtYXkgYmUgc3RyaW5nIGNvbmNhdGVuYXRpb24gb3IKICAgICAgICAgICAg
bnVtZXJpYyBhZGQsIGRlcGVuZGluZyBvbiB0aGUgdHlwZXMgb2YgdGhlIG9wZXJhbmRzLikKICAg
ICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbc3JjMV0udS5qc1ZhbHVlOwot
ICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbc3JjMl0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVl
KiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1
ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVl
KiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUq
IHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJh
dGlvbnModjEpICYmIEpTSW1tZWRpYXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnModjIp
KQogICAgICAgICAgICAgcmVzdWx0ID0gSlNJbW1lZGlhdGU6OmFkZEltbWVkaWF0ZU51bWJlcnMo
djEsIHYyKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3Vs
dCA9IGpzQWRkKGV4ZWMsIHYxLCB2Mik7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwot
ICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICAgICAgVk1fQ0hFQ0tf
RVhDRVBUSU9OKCk7CisgICAgICAgIH0KKyAgICAgICAgZHN0ID0gcmVzdWx0OwogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMTIyMSwxMiArMTIzNiwxMiBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIE11
bHRpcGxpZXMgcmVnaXN0ZXIgc3JjMSBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRvCiAg
ICAgICAgICAgIG51bWJlcnMpLCBhbmQgcHV0cyB0aGUgcHJvZHVjdCBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIocltz
cmMxXS51LmpzVmFsdWUtPnRvTnVtYmVyKGV4ZWMpICogcltzcmMyXS51LmpzVmFsdWUtPnRvTnVt
YmVyKGV4ZWMpKTsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5k
XS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRd
LnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
dS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcih2MS0+dG9OdW1i
ZXIoZXhlYykgKiB2Mi0+dG9OdW1iZXIoZXhlYykpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0g
cmVzdWx0OwogCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEyNzEs
MTggKzEyODYsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQog
ICAgICAgICAgICBzcmMxIChjb252ZXJ0ZWQgdG8gbnVtYmVyKSwgYW5kIHB1dHMgdGhlIGRpZmZl
cmVuY2UgaW4KICAgICAgICAgICAgcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBp
bnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIEpTVmFsdWUqIHYxID0gcltzcmMxXS51LmpzVmFsdWU7Ci0gICAgICAgIEpTVmFsdWUqIHYy
ID0gcltzcmMyXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQykt
PnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbKCsrdlBDKS0+
dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclsoKyt2UEMpLT51
Lm9wZXJhbmRdLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0OwogICAgICAgICBp
ZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MSkgJiYgSlNJbW1l
ZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpCiAgICAgICAgICAgICByZXN1
bHQgPSBKU0ltbWVkaWF0ZTo6c3ViSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpOwotICAgICAgICBl
bHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIodjEtPnRv
TnVtYmVyKGV4ZWMpIC0gdjItPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgICAg
ICBWTV9DSEVDS19FWENFUFRJT04oKTsKKyAgICAgICAgfQorICAgICAgICBkc3QgPSByZXN1bHQ7
CiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CkBAIC0xMjkzLDEy
ICsxMzA3LDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgcmVnaXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0byB1aW50MzIpLCBhbmQgcHV0cyB0
aGUgcmVzdWx0CiAgICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNoaWZ0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcigoclt2YWxdLnUuanNWYWx1ZS0+dG9J
bnQzMihleGVjKSkgPDwgKHJbc2hpZnRdLnUuanNWYWx1ZS0+dG9VSW50MzIoZXhlYykpKTsKKyAg
ICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7Cisg
ICAgICAgIEpTVmFsdWUqIHZhbCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7Cisg
ICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsK
KyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoKHZhbC0+dG9JbnQzMihleGVjKSkg
PDwgKHNoaWZ0LT50b1VJbnQzMihleGVjKSkpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVz
dWx0OwogICAgICAgICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAt
MTMxMCwxMiArMTMyNCwxNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICAgIHRvIGludDMyKSBieSByZWdpc3RlciBzaGlmdCAoY29udmVydGVkIHRv
CiAgICAgICAgICAgIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQgaW4gcmVnaXN0ZXIgZHN0
LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAg
ICAgICBpbnQgdmFsID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc2hpZnQgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKChy
W3ZhbF0udS5qc1ZhbHVlLT50b0ludDMyKGV4ZWMpKSA+PiAocltzaGlmdF0udS5qc1ZhbHVlLT50
b1VJbnQzMihleGVjKSkpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAgICAg
cltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsr
dlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHZhbCA9IHJbKCsr
dlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gclso
Kyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0Owor
ICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hp
ZnQpKQorICAgICAgICAgICAgcmVzdWx0ID0gSlNJbW1lZGlhdGU6OnJpZ2h0U2hpZnRJbW1lZGlh
dGVOdW1iZXJzKHZhbCwgc2hpZnQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGpzTnVtYmVyKCh2YWwtPnRvSW50MzIoZXhlYykpID4+IChzaGlmdC0+dG9VSW50MzIoZXhl
YykpKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CisgICAg
ICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhU
X09QQ09ERTsKQEAgLTEzMjcsMTIgKzEzNDYsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICB0byB1aW50MzIpIGJ5IHJlZ2lzdGVyIHNoaWZ0
IChjb252ZXJ0ZWQgdG8KICAgICAgICAgICAgdWludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBp
biByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWwgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCBzaGlmdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNOdW1iZXIoKHJbdmFsXS51LmpzVmFsdWUtPnRvVUludDMyKGV4ZWMpKSA+PiAocltzaGlm
dF0udS5qc1ZhbHVlLT50b1VJbnQzMihleGVjKSkpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1
ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIHZhbCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIHNoaWZ0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNW
YWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVO
dW1iZXJzKHZhbCwgc2hpZnQpKQorICAgICAgICAgICAgcmVzdWx0ID0gSlNJbW1lZGlhdGU6OnVu
c2lnbmVkUmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoKHZhbC0+dG9VSW50MzIoZXhlYykp
ID4+IChzaGlmdC0+dG9VSW50MzIoZXhlYykpKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQ
VElPTigpOworICAgICAgICB9CisgICAgICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAg
ICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEzNDQsMTEgKzEzNjgsOSBAQCBK
U1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGFuZCBy
ZWdpc3RlciBzcmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0CiAg
ICAgICAgICAgIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1Zh
bHVlKiB2MSA9IHJbc3JjMV0udS5qc1ZhbHVlOwotICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbc3Jj
Ml0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJh
bmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFu
ZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5k
XS51LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1t
ZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQogICAgICAgICAgICAgcmVz
dWx0ID0gSlNJbW1lZGlhdGU6OmFuZEltbWVkaWF0ZU51bWJlcnModjEsIHYyKTsKQEAgLTEzNTYs
NyArMTM3OCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHYxLT50b0ludDMyKGV4ZWMpICYgdjItPnRvSW50
MzIoZXhlYykpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIH0K
LSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVzdWx0
OwogICAgICAgICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTM2
OCwxMSArMTM5MCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgICAgYW5kIHJlZ2lzdGVyIHNyYzIgKGNvbnZlcnRlZCB0byBpbnQzMiksIGFuZCBw
dXRzIHRoZSByZXN1bHQKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwot
ICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYxID0gcltzcmMxXS51LmpzVmFsdWU7Ci0gICAgICAgIEpT
VmFsdWUqIHYyID0gcltzcmMyXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclso
Kyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0Owog
ICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mikp
CiAgICAgICAgICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6eG9ySW1tZWRpYXRlTnVtYmVycyh2
MSwgdjIpOwpAQCAtMTM4MCw3ICsxNDAwLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgXiB2Mi0+dG9JbnQzMihleGVjKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKICAgICAgICAgfQotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAg
ICAgICBkc3QgPSByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVY
VF9PUENPREU7CkBAIC0xMzkyLDExICsxNDEyLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVk
IHRvIGludDMyKSwgYW5kIHB1dHMgdGhlCiAgICAgICAgICAgIHJlc3VsdCBpbiByZWdpc3RlciBk
c3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdjEgPSByW3NyYzFdLnUuanNW
YWx1ZTsKLSAgICAgICAgSlNWYWx1ZSogdjIgPSByW3NyYzJdLnUuanNWYWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwogICAgICAgICBK
U1ZhbHVlKiByZXN1bHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0
ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRlOjpvcklt
bWVkaWF0ZU51bWJlcnModjEsIHYyKTsKQEAgLTE0MDQsNyArMTQyMiw3IEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVt
YmVyKHYxLT50b0ludDMyKGV4ZWMpIHwgdjItPnRvSW50MzIoZXhlYykpOwogICAgICAgICAgICAg
Vk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIH0KLSAgICAgICAgcltkc3RdLnUuanNWYWx1
ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTSW1t
ZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJ
KHJldmlzaW9uIDM0MTcxKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYx
KSB8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2MikpOwogICAgIH0KIAorICAgIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIHJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKGNvbnN0
IEpTVmFsdWUqIHZhbCwgY29uc3QgSlNWYWx1ZSogc2hpZnQpCisgICAgeworICAgICAgICBBU1NF
UlQoYXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpOworICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU1ZhbHVlKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHZh
bCkgPj4gKChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc2hpZnQpID4+IDIpICYgMHgxZikp
IHwgTnVtYmVyVHlwZSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSogdW5zaWduZWRSaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyhjb25zdCBKU1ZhbHVlKiB2YWws
IGNvbnN0IEpTVmFsdWUqIHNoaWZ0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1l
ZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNWYWx1ZSo+KChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odmFsKSA+PiAoKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzaGlmdCkgPj4gMikgJiAweDFmKSkgfCBOdW1iZXJUeXBl
KTsKKyAgICB9CisKICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGNhbkRvRmFzdEFkZGl0
aXZlT3BlcmF0aW9ucyhjb25zdCBKU1ZhbHVlKiB2KQogICAgIHsKICAgICAgICAgLy8gTnVtYmVy
IGlzIG5vbi1uZWdhdGl2ZSBhbmQgYW4gb3BlcmF0aW9uIGludm9sdmluZyB0d28gb2YgdGhlc2Ug
Y2FuJ3Qgb3ZlcmZsb3cuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21398</attachid>
            <date>2008-05-28 11:47:50 -0700</date>
            <delta_ts>2008-05-29 23:06:28 -0700</delta_ts>
            <desc>Patch for &gt;&gt;, ==, ===, !=, !==</desc>
            <filename>RightShift.txt</filename>
            <type>text/plain</type>
            <size>16413</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDgtMDUtMjggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTE4MAorICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgb3B0aW1pemluZyBpbW1l
ZGlhdGUgbnVtYmVyIGNhc2VzCisKKyAgICAgICAgQWxzbyBmaXhlZCB0aHJlZSBKYXZhU2NyaXB0
Q29yZSByZWdyZXNzaW9ucyBzZWVuIG9uIFBvd2VyUEMgLSB3ZSBkaWRuJ3QgY2xpcCByaWdodCBz
aGlmdAorICAgICAgICBwYXJhbWV0ZXIgdG8gMC4uLjMxLgorCisgICAgICAgIDEuMiUgaW1wcm92
ZW1lbnQgb24gU3VuU3BpZGVyLCB3aXRob3V0IHNpZ25pZmljYW50IHJlZ3Jlc3Npb25zIG9uIGFu
eSB0ZXN0cy4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoS0pTOjpNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIEFkZGVkIGZhc3QgcGF0aHMgZm9yID4+LCA9
PSwgPT09LCAhPSwgIT09LiBDaGFuZ2VkIG9yZGVyIG9mIG1lbW9yeSBhY2Nlc3NlcyBpbiBtYW55
CisgICAgICAgIGNhc2VzLCBtYWtpbmcgdGhlbSBsZXNzIGRlcGVuZGVudCBvbiBnY2MncyBhYmls
aXR5IHRvIHByb3Blcmx5IGFzc2lnbiByZWdpc3RlcnMuIFdpdGggdGhpcywKKyAgICAgICAgSSBj
b3VsZCBtb3ZlIGV4Y2VwdGlvbiBjaGVja3MgYmFjayBpbnRvIHNsb3cgY29kZSBwYXRocywgYW5k
IHNhdyBsZXNzIHJhbmRvbW5lc3MgaW4gZ2VuZXJhbC4KKworICAgICAgICAqIGtqcy9KU0ltbWVk
aWF0ZS5oOgorICAgICAgICAoS0pTOjpKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51
bWJlcnMpOgorICAgICAgICBBZGRlZC4KKwogMjAwOC0wNS0yOCAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4ZWQgYSBtaXNndWlkaW5nIGNvbW1lbnQg
LSBteSBtZWFzdXJlbWVudCBmb3IgbmVnYXRpdmUgbnVtYmVycyBvbmx5IGluY2x1ZGVkIGNhc2Vz
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzQxNzIpCisrKyBKYXZhU2NyaXB0
Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc5LDEyICs5NzksMTcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhcyB3
aXRoIHRoZSBFQ01BU2NyaXB0ICc9PScgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQKICAg
ICAgICAgICAgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWwoZXhlYywgcltzcmMxXS51
LmpzVmFsdWUsIHJbc3JjMl0udS5qc1ZhbHVlKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
TigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBKU1ZhbHVl
KiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1
ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVl
KiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUq
IHJlc3VsdDsKKyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVy
cyh2MSwgdjIpKQorICAgICAgICAgICAgcmVzdWx0ID0ganNCb29sZWFuKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHYxKSA9PSByZWludGVycHJldF9jYXN0PGludHB0cl90Pih2MikpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihlcXVhbChleGVjLCB2
MSwgdjIpKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9Cisg
ICAgICAgIGRzdCA9IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENP
REU7CkBAIC05OTYsMTIgKzEwMDEsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAgICBlcXVhbCwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnIT0n
IG9wZXJhdG9yLCBhbmQgcHV0cyB0aGUKICAgICAgICAgICAgcmVzdWx0IGFzIGEgYm9vbGVhbiBp
biByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0
ID0ganNCb29sZWFuKCFlcXVhbChleGVjLCByW3NyYzFdLnUuanNWYWx1ZSwgcltzcmMyXS51Lmpz
VmFsdWUpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XS51
LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUu
b3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbKCsrdlBDKS0+dS5v
cGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclsoKyt2UEMpLT51Lm9w
ZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAgICBpZiAo
SlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2MikpCisgICAgICAgICAg
ICByZXN1bHQgPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odjEpICE9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHYyKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcmVzdWx0ID0ganNCb29sZWFuKCFlcXVhbChleGVjLCB2MSwgdjIpKTsKKyAgICAgICAgICAg
IFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CisgICAgICAgIGRzdCA9IHJlc3VsdDsK
IAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMDEzLDEwICsxMDIz
LDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgZXF1YWwsIGFzIHdpdGggdGhlIEVDTUFTY3JpcHQgJz09PScgb3BlcmF0b3IsIGFuZCBwdXRz
IHRoZQogICAgICAgICAgICByZXN1bHQgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAg
ICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0ganNCb29sZWFuKHN0cmlj
dEVxdWFsKHJbc3JjMV0udS5qc1ZhbHVlLCByW3NyYzJdLnUuanNWYWx1ZSkpOworICAgICAgICBK
U1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBK
U1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIGlm
IChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModjEsIHYyKSkKKyAgICAgICAg
ICAgIGRzdCA9IGpzQm9vbGVhbihyZWludGVycHJldF9jYXN0PGludHB0cl90Pih2MSkgPT0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odjIpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZHN0ID0ganNCb29sZWFuKHN0cmljdEVxdWFsKHYxLCB2MikpOwogICAgICAgICAKICAgICAgICAg
Kyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTAyOCwxMCArMTA0MSwxMyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHN0cmljdGx5
IGVxdWFsLCBhcyB3aXRoIHRoZSBFQ01BU2NyaXB0ICchPT0nIG9wZXJhdG9yLCBhbmQKICAgICAg
ICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAg
ICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGlu
dCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IGpzQm9vbGVhbighc3RyaWN0
RXF1YWwocltzcmMxXS51LmpzVmFsdWUsIHJbc3JjMl0udS5qc1ZhbHVlKSk7CisgICAgICAgIEpT
VmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBK
U1ZhbHVlKiB2MSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpT
VmFsdWUqIHYyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgaWYg
KEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQorICAgICAgICAg
ICAgZHN0ID0ganNCb29sZWFuKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHYxKSAhPSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih2MikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBk
c3QgPSBqc0Jvb2xlYW4oIXN0cmljdEVxdWFsKHYxLCB2MikpOwogCiAgICAgICAgICsrdlBDOwog
ICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEwNDMsMTIgKzEwNTksMTIgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICB3aXRoIHRoZSBFQ01BU2Ny
aXB0ICc8JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlIHJlc3VsdCBhcwogICAgICAgICAgICBhIGJv
b2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFsdWUq
IHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3MoZXhlYywgcltzcmMxXS51LmpzVmFsdWUsIHJbc3Jj
Ml0udS5qc1ZhbHVlKSk7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3Bl
cmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbKCsrdlBDKS0+dS5vcGVy
YW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclsoKyt2UEMpLT51Lm9wZXJh
bmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGpzTGVz
cyhleGVjLCB2MSwgdjIpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIGRzdCA9IHJlc3VsdDsKIAogICAg
ICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMDYwLDEyICsxMDc2LDEyIEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgcmVn
aXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0nIG9wZXJhdG9yLCBhbmQKICAg
ICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAg
ICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKGpzTGVz
c0VxKGV4ZWMsIHJbc3JjMV0udS5qc1ZhbHVlLCByW3NyYzJdLnUuanNWYWx1ZSkpOworICAgICAg
ICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAg
ICAgSlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAg
ICBKU1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbihqc0xlc3NFcShleGVjLCB2MSwgdjIpKTsKICAg
ICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSBy
ZXN1bHQ7CisgICAgICAgIGRzdCA9IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAg
TkVYVF9PUENPREU7CkBAIC0xMjAwLDE4ICsxMjE2LDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LiAoSlMgYWRk
IG1heSBiZSBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvcgogICAgICAgICAgICBudW1lcmljIGFkZCwg
ZGVwZW5kaW5nIG9uIHRoZSB0eXBlcyBvZiB0aGUgb3BlcmFuZHMuKQogICAgICAgICAqLwotICAg
ICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIEpTVmFsdWUqIHYxID0gcltzcmMxXS51LmpzVmFsdWU7Ci0gICAgICAgIEpTVmFs
dWUqIHYyID0gcltzcmMyXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygr
K3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJbKCsr
dlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclsoKyt2
UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0OwogICAg
ICAgICBpZiAoSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MSkgJiYg
SlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyh2MikpCiAgICAgICAgICAg
ICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6YWRkSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpOwotICAg
ICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0ganNBZGQoZXhl
YywgdjEsIHYyKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAgIHJbZHN0
XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
KyAgICAgICAgfQorICAgICAgICBkc3QgPSByZXN1bHQ7CiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX09QQ09ERTsKICAgICB9CkBAIC0xMjIxLDEyICsxMjM2LDEyIEBAIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgTXVsdGlwbGllcyByZWdp
c3RlciBzcmMxIGFuZCByZWdpc3RlciBzcmMyIChjb252ZXJ0ZWQgdG8KICAgICAgICAgICAgbnVt
YmVycyksIGFuZCBwdXRzIHRoZSBwcm9kdWN0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8K
LSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVy
YW5kOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcihyW3NyYzFdLnUuanNWYWx1
ZS0+dG9OdW1iZXIoZXhlYykgKiByW3NyYzJdLnUuanNWYWx1ZS0+dG9OdW1iZXIoZXhlYykpOwor
ICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsK
KyAgICAgICAgSlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwor
ICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7Cisg
ICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKHYxLT50b051bWJlcihleGVjKSAqIHYy
LT50b051bWJlcihleGVjKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAg
ICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSByZXN1bHQ7CiAKICAg
ICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTI3MSwxOCArMTI4NiwxNyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHNy
YzEgKGNvbnZlcnRlZCB0byBudW1iZXIpLCBhbmQgcHV0cyB0aGUgZGlmZmVyZW5jZSBpbgogICAg
ICAgICAgICByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSog
djEgPSByW3NyYzFdLnUuanNWYWx1ZTsKLSAgICAgICAgSlNWYWx1ZSogdjIgPSByW3NyYzJdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51
LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5q
c1ZhbHVlOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0
ZTo6Y2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKHYxKSAmJiBKU0ltbWVkaWF0ZTo6Y2FuRG9G
YXN0QWRkaXRpdmVPcGVyYXRpb25zKHYyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRp
YXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mik7Ci0gICAgICAgIGVsc2UKKyAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc051bWJlcih2MS0+dG9OdW1iZXIoZXhlYykg
LSB2Mi0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAg
ICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOworICAgICAgICB9CisgICAgICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgKyt2
UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwogICAgIH0KQEAgLTEyOTMsMTIgKzEzMDcsMTIgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICByZWdp
c3RlciBzaGlmdCAoY29udmVydGVkIHRvIHVpbnQzMiksIGFuZCBwdXRzIHRoZSByZXN1bHQKICAg
ICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgdmFsID0gKCsrdlBDKS0+dS5vcGVyYW5k
OwotICAgICAgICBpbnQgc2hpZnQgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpTVmFs
dWUqIHJlc3VsdCA9IGpzTnVtYmVyKChyW3ZhbF0udS5qc1ZhbHVlLT50b0ludDMyKGV4ZWMpKSA8
PCAocltzaGlmdF0udS5qc1ZhbHVlLT50b1VJbnQzMihleGVjKSkpOworICAgICAgICBKU1ZhbHVl
KiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1
ZSogdmFsID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1
ZSogc2hpZnQgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1Zh
bHVlKiByZXN1bHQgPSBqc051bWJlcigodmFsLT50b0ludDMyKGV4ZWMpKSA8PCAoc2hpZnQtPnRv
VUludDMyKGV4ZWMpKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICBy
W2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSByZXN1bHQ7CiAgICAgICAg
IAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMzEwLDEyICsxMzI0
LDE3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAg
ICAgdG8gaW50MzIpIGJ5IHJlZ2lzdGVyIHNoaWZ0IChjb252ZXJ0ZWQgdG8KICAgICAgICAgICAg
dWludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICov
Ci0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWwg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaGlmdCA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoKHJbdmFsXS51LmpzVmFs
dWUtPnRvSW50MzIoZXhlYykpID4+IChyW3NoaWZ0XS51LmpzVmFsdWUtPnRvVUludDMyKGV4ZWMp
KSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0udS5qc1Zh
bHVlID0gcmVzdWx0OworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJh
bmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdmFsID0gclsoKyt2UEMpLT51Lm9wZXJh
bmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygrK3ZQQyktPnUub3Bl
cmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7CisgICAgICAgIGlmIChK
U0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnModmFsLCBzaGlmdCkpCisgICAgICAg
ICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51bWJlcnModmFs
LCBzaGlmdCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIo
KHZhbC0+dG9JbnQzMihleGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsK
KyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CisgICAgICAgIGRz
dCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09E
RTsKQEAgLTEzMjcsMTIgKzEzNDYsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1
dGUoRXhlY3V0aQogICAgICAgICAgICB0byB1aW50MzIpIGJ5IHJlZ2lzdGVyIHNoaWZ0IChjb252
ZXJ0ZWQgdG8KICAgICAgICAgICAgdWludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiByZWdp
c3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIGludCB2YWwgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBz
aGlmdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNO
dW1iZXIoKHJbdmFsXS51LmpzVmFsdWUtPnRvVUludDMyKGV4ZWMpKSA+PiAocltzaGlmdF0udS5q
c1ZhbHVlLT50b1VJbnQzMihleGVjKSkpOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2
UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdmFsID0gclsoKyt2
UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygr
K3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwtPnRvVUludDMyKGV4ZWMpKSA+PiAoc2hpZnQt
PnRvVUludDMyKGV4ZWMpICYgMHgxZikpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
LSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVzdWx0
OwogICAgICAgICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTM0
NCwxMSArMTM2NCw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgICAgYW5kIHJlZ2lzdGVyIHNyYzIgKGNvbnZlcnRlZCB0byBpbnQzMiksIGFuZCBw
dXRzIHRoZSByZXN1bHQKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwot
ICAgICAgICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJh
bmQ7Ci0gICAgICAgIEpTVmFsdWUqIHYxID0gcltzcmMxXS51LmpzVmFsdWU7Ci0gICAgICAgIEpT
VmFsdWUqIHYyID0gcltzcmMyXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MSA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHYyID0gclso
Kyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0Owog
ICAgICAgICBpZiAoSlNJbW1lZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHYxLCB2Mikp
CiAgICAgICAgICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6YW5kSW1tZWRpYXRlTnVtYmVycyh2
MSwgdjIpOwpAQCAtMTM1Niw3ICsxMzc0LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIodjEtPnRvSW50MzIo
ZXhlYykgJiB2Mi0+dG9JbnQzMihleGVjKSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKICAgICAgICAgfQotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAg
ICAgICBkc3QgPSByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVY
VF9PUENPREU7CkBAIC0xMzY4LDExICsxMzg2LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVk
IHRvIGludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdAogICAgICAgICAgICBpbiByZWdpc3RlciBk
c3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9
ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogdjEgPSByW3NyYzFdLnUuanNW
YWx1ZTsKLSAgICAgICAgSlNWYWx1ZSogdjIgPSByW3NyYzJdLnUuanNWYWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqIHYxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAg
SlNWYWx1ZSogdjIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwogICAgICAgICBK
U1ZhbHVlKiByZXN1bHQ7CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0
ZU51bWJlcnModjEsIHYyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRlOjp4b3JJ
bW1lZGlhdGVOdW1iZXJzKHYxLCB2Mik7CkBAIC0xMzgwLDcgKzEzOTYsNyBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgICByZXN1bHQgPSBqc051
bWJlcih2MS0+dG9JbnQzMihleGVjKSBeIHYyLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAg
IFZNX0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICB9Ci0gICAgICAgIHJbZHN0XS51LmpzVmFs
dWUgPSByZXN1bHQ7CisgICAgICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgICsr
dlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEzOTIsMTEgKzE0MDgsOSBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGFuZCByZWdpc3Rl
ciBzcmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUKICAgICAgICAgICAgcmVz
dWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiB2
MSA9IHJbc3JjMV0udS5qc1ZhbHVlOwotICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbc3JjMl0udS5q
c1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogdjEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5q
c1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2MiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51Lmpz
VmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRl
OjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpKQogICAgICAgICAgICAgcmVzdWx0ID0g
SlNJbW1lZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyh2MSwgdjIpOwpAQCAtMTQwNCw3ICsxNDE4
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAg
ICAgcmVzdWx0ID0ganNOdW1iZXIodjEtPnRvSW50MzIoZXhlYykgfCB2Mi0+dG9JbnQzMihleGVj
KSk7CiAgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKICAgICAgICAgfQotICAgICAg
ICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSByZXN1bHQ7CiAgICAg
ICAgIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNJbW1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9r
anMvSlNJbW1lZGlhdGUuaAkocmV2aXNpb24gMzQxNzEpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMv
SlNJbW1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gKGdldFRhZyh2KSA9PSBVbmRlZmluZWRUeXBlKTsKICAgICB9CiAKKyAg
ICBzdGF0aWMgYm9vbCBpc05lZ2F0aXZlKGNvbnN0IEpTVmFsdWUqIHYpCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNOdW1iZXIodikpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHYpICYgMHg4MDAwMDAwMDsKKyAgICB9CisKICAgICBzdGF0aWMgSlNWYWx1ZSog
ZnJvbShjaGFyKTsKICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbShzaWduZWQgY2hhcik7CiAgICAg
c3RhdGljIEpTVmFsdWUqIGZyb20odW5zaWduZWQgY2hhcik7CkBAIC0xMTgsNiArMTI0LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2MSkgfCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
djIpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlKiByaWdodFNo
aWZ0SW1tZWRpYXRlTnVtYmVycyhjb25zdCBKU1ZhbHVlKiB2YWwsIGNvbnN0IEpTVmFsdWUqIHNo
aWZ0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwg
c2hpZnQpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNWYWx1ZSo+KChyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih2YWwpID4+ICgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHNoaWZ0KSA+PiAyKSAmIDB4MWYpKSB8IE51bWJlclR5cGUpOworICAgIH0KKwogICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRG9GYXN0QWRkaXRpdmVPcGVyYXRpb25zKGNvbnN0
IEpTVmFsdWUqIHYpCiAgICAgewogICAgICAgICAvLyBOdW1iZXIgaXMgbm9uLW5lZ2F0aXZlIGFu
ZCBhbiBvcGVyYXRpb24gaW52b2x2aW5nIHR3byBvZiB0aGVzZSBjYW4ndCBvdmVyZmxvdy4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21425</attachid>
            <date>2008-05-29 23:06:28 -0700</date>
            <delta_ts>2008-05-30 02:16:36 -0700</delta_ts>
            <desc>Patch for &gt;&gt;, ==, ===, !=, !==</desc>
            <filename>RightShift.txt</filename>
            <type>text/plain</type>
            <size>16601</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MTczKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDgtMDUtMjggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTE4MAorICAgICAgICBzcGVlZCB1cCBTdW5TcGlkZXIgYnkgb3B0aW1pemluZyBpbW1l
ZGlhdGUgbnVtYmVyIGNhc2VzCisKKyAgICAgICAgQWxzbyBmaXhlZCB0aHJlZSBKYXZhU2NyaXB0
Q29yZSByZWdyZXNzaW9ucyBzZWVuIG9uIFBvd2VyUEMgLSB3ZSBkaWRuJ3QgY2xpcCByaWdodCBz
aGlmdAorICAgICAgICBwYXJhbWV0ZXIgdG8gMC4uLjMxLgorCisgICAgICAgIDEuMiUgaW1wcm92
ZW1lbnQgb24gU3VuU3BpZGVyLCB3aXRob3V0IHNpZ25pZmljYW50IHJlZ3Jlc3Npb25zIG9uIGFu
eSB0ZXN0cy4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAgICAoS0pTOjpNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIEFkZGVkIGZhc3QgcGF0aHMgZm9yID4+LCA9
PSwgPT09LCAhPSwgIT09LiBDaGFuZ2VkIG9yZGVyIG9mIG1lbW9yeSBhY2Nlc3NlcyBpbiBtYW55
CisgICAgICAgIGNhc2VzLCBtYWtpbmcgdGhlbSBsZXNzIGRlcGVuZGVudCBvbiBnY2MncyBhYmls
aXR5IHRvIHByb3Blcmx5IGFzc2lnbiByZWdpc3RlcnMuIFdpdGggdGhpcywKKyAgICAgICAgSSBj
b3VsZCBtb3ZlIGV4Y2VwdGlvbiBjaGVja3MgYmFjayBpbnRvIHNsb3cgY29kZSBwYXRocywgYW5k
IHNhdyBsZXNzIHJhbmRvbW5lc3MgaW4gZ2VuZXJhbC4KKworICAgICAgICAqIGtqcy9KU0ltbWVk
aWF0ZS5oOgorICAgICAgICAoS0pTOjpKU0ltbWVkaWF0ZTo6cmlnaHRTaGlmdEltbWVkaWF0ZU51
bWJlcnMpOgorICAgICAgICBBZGRlZC4KKwogMjAwOC0wNS0yOCAgQWxleGV5IFByb3NrdXJ5YWtv
diAgPGFwQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4ZWQgYSBtaXNndWlkaW5nIGNvbW1lbnQg
LSBteSBtZWFzdXJlbWVudCBmb3IgbmVnYXRpdmUgbnVtYmVycyBvbmx5IGluY2x1ZGVkIGNhc2Vz
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZh
U2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzQxNzIpCisrKyBKYXZhU2NyaXB0
Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTc5LDEyICs5NzksMTcgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhcyB3
aXRoIHRoZSBFQ01BU2NyaXB0ICc9PScgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQKICAg
ICAgICAgICAgYXMgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAg
ICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwot
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oZXF1YWwoZXhlYywgcltzcmMxXS51
LmpzVmFsdWUsIHJbc3JjMl0udS5qc1ZhbHVlKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElP
TigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBKU1ZhbHVl
KiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1
ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1Zh
bHVlKiByZXN1bHQ7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51
bWJlcnMoc3JjMSwgc3JjMikpCisgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
c3JjMikpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihl
cXVhbChleGVjLCBzcmMxLCBzcmMyKSk7CisgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04o
KTsKKyAgICAgICAgfQorICAgICAgICBkc3QgPSByZXN1bHQ7CiAKICAgICAgICAgKyt2UEM7CiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtOTk2LDEyICsxMDAxLDE3IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgZXF1YWwsIGFzIHdpdGggdGhl
IEVDTUFTY3JpcHQgJyE9JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlCiAgICAgICAgICAgIHJlc3Vs
dCBhcyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQg
ZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
IEpTVmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWwoZXhlYywgcltzcmMxXS51LmpzVmFs
dWUsIHJbc3JjMl0udS5qc1ZhbHVlKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwot
ICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBKU1ZhbHVlKiYgZHN0
ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3Jj
MSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNy
YzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBy
ZXN1bHQ7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMo
c3JjMSwgc3JjMikpCisgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oc3JjMSkgIT0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbighZXF1YWwo
ZXhlYywgc3JjMSwgc3JjMikpOworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZHN0ID0gcmVzdWx0OwogCiAgICAgICAgICsrdlBDOwogICAgICAg
ICBORVhUX09QQ09ERTsKQEAgLTEwMTMsMTAgKzEwMjMsMTMgQEAgSlNWYWx1ZSogTWFjaGluZTo6
cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBlcXVhbCwgYXMgd2l0aCB0aGUgRUNN
QVNjcmlwdCAnPT09JyBvcGVyYXRvciwgYW5kIHB1dHMgdGhlCiAgICAgICAgICAgIHJlc3VsdCBh
cyBhIGJvb2xlYW4gaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAgICBpbnQgZHN0
ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIHJb
ZHN0XS51LmpzVmFsdWUgPSBqc0Jvb2xlYW4oc3RyaWN0RXF1YWwocltzcmMxXS51LmpzVmFsdWUs
IHJbc3JjMl0udS5qc1ZhbHVlKSk7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQykt
PnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMp
LT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBD
KS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90
aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCisgICAgICAgICAgICBkc3QgPSBqc0Jvb2xl
YW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgPT0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oc3JjMikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkc3QgPSBqc0Jvb2xl
YW4oc3RyaWN0RXF1YWwoc3JjMSwgc3JjMikpOwogICAgICAgICAKICAgICAgICAgKyt2UEM7CiAg
ICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTAyOCwxMCArMTA0MSwxMyBAQCBKU1ZhbHVlKiBNYWNo
aW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHN0cmljdGx5IGVxdWFsLCBh
cyB3aXRoIHRoZSBFQ01BU2NyaXB0ICchPT0nIG9wZXJhdG9yLCBhbmQKICAgICAgICAgICAgcHV0
cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0g
ICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKLSAgICAgICAgcltkc3RdLnUuanNWYWx1ZSA9IGpzQm9vbGVhbighc3RyaWN0RXF1YWwocltz
cmMxXS51LmpzVmFsdWUsIHJbc3JjMl0udS5qc1ZhbHVlKSk7CisgICAgICAgIEpTVmFsdWUqJiBk
c3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBz
cmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSog
c3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIGlmIChKU0lt
bWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwgc3JjMikpCisgICAgICAgICAg
ICBkc3QgPSBqc0Jvb2xlYW4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMSkgIT0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oc3JjMikpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBkc3QgPSBqc0Jvb2xlYW4oIXN0cmljdEVxdWFsKHNyYzEsIHNyYzIpKTsKIAogICAgICAgICAr
K3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMDQzLDEyICsxMDU5LDEyIEBAIEpTVmFs
dWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgd2l0aCB0aGUg
RUNNQVNjcmlwdCAnPCcgb3BlcmF0b3IsIGFuZCBwdXRzIHRoZSByZXN1bHQgYXMKICAgICAgICAg
ICAgYSBib29sZWFuIGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRz
dCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBK
U1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzKGV4ZWMsIHJbc3JjMV0udS5qc1ZhbHVl
LCByW3NyYzJdLnUuanNWYWx1ZSkpOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMp
LT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBD
KS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQ
QyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jv
b2xlYW4oanNMZXNzKGV4ZWMsIHNyYzEsIHNyYzIpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBU
SU9OKCk7Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIGRzdCA9
IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CkBAIC0xMDYw
LDEyICsxMDc2LDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgICAgcmVnaXN0ZXIgc3JjMiwgYXMgd2l0aCB0aGUgRUNNQVNjcmlwdCAnPD0nIG9w
ZXJhdG9yLCBhbmQKICAgICAgICAgICAgcHV0cyB0aGUgcmVzdWx0IGFzIGEgYm9vbGVhbiBpbiBy
ZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBp
bnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0g
anNCb29sZWFuKGpzTGVzc0VxKGV4ZWMsIHJbc3JjMV0udS5qc1ZhbHVlLCByW3NyYzJdLnUuanNW
YWx1ZSkpOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51
LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
dS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc0Jvb2xlYW4oanNMZXNzRXEo
ZXhlYywgc3JjMSwgc3JjMikpOwogICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKLSAgICAg
ICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVzdWx0OwogCiAg
ICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEyMDAsMTggKzEyMTYsMTcg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBp
biByZWdpc3RlciBkc3QuIChKUyBhZGQgbWF5IGJlIHN0cmluZyBjb25jYXRlbmF0aW9uIG9yCiAg
ICAgICAgICAgIG51bWVyaWMgYWRkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGVzIG9mIHRoZSBvcGVy
YW5kcy4pCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3Jj
MiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbc3JjMV0u
dS5qc1ZhbHVlOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gcltzcmMyXS51LmpzVmFsdWU7Cisg
ICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwor
ICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsK
KyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7
CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjpjYW5E
b0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoc3JjMSkgJiYgSlNJbW1lZGlhdGU6OmNhbkRvRmFzdEFk
ZGl0aXZlT3BlcmF0aW9ucyhzcmMyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRl
OjphZGRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwotICAgICAgICBlbHNlCisgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0ganNBZGQoZXhlYywgc3JjMSwgc3JjMik7Ci0g
ICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0g
cmVzdWx0OworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZHN0ID0gcmVzdWx0OwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7
CiAgICAgfQpAQCAtMTIyMSwxMiArMTIzNiwxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRl
RXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIE11bHRpcGxpZXMgcmVnaXN0ZXIgc3JjMSBhbmQg
cmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRvCiAgICAgICAgICAgIG51bWJlcnMpLCBhbmQgcHV0
cyB0aGUgcHJvZHVjdCBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBk
c3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5v
cGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAg
SlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIocltzcmMxXS51LmpzVmFsdWUtPnRvTnVtYmVyKGV4
ZWMpICogcltzcmMyXS51LmpzVmFsdWUtPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgSlNWYWx1
ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1Zh
bHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoc3JjMS0+dG9OdW1iZXIoZXhlYykgKiBzcmMyLT50b051
bWJlcihleGVjKSk7CiAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwotICAgICAgICByW2Rz
dF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICBkc3QgPSByZXN1bHQ7CiAKICAgICAgICAg
Kyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTI3MSwxOCArMTI4NiwxNyBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHNyYzEgKGNv
bnZlcnRlZCB0byBudW1iZXIpLCBhbmQgcHV0cyB0aGUgZGlmZmVyZW5jZSBpbgogICAgICAgICAg
ICByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAg
ICBpbnQgc3JjMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9
IHJbc3JjMV0udS5qc1ZhbHVlOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gcltzcmMyXS51Lmpz
VmFsdWU7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5q
c1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51
LmpzVmFsdWU7CiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1tZWRp
YXRlOjpjYW5Eb0Zhc3RBZGRpdGl2ZU9wZXJhdGlvbnMoc3JjMSkgJiYgSlNJbW1lZGlhdGU6OmNh
bkRvRmFzdEFkZGl0aXZlT3BlcmF0aW9ucyhzcmMyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpT
SW1tZWRpYXRlOjpzdWJJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwotICAgICAgICBlbHNl
CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoc3JjMS0+dG9O
dW1iZXIoZXhlYykgLSBzcmMyLT50b051bWJlcihleGVjKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICAg
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgIH0KKyAgICAgICAgZHN0ID0gcmVzdWx0
OwogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQpAQCAtMTI5Mywx
MiArMTMwNywxMiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAg
ICAgICAgICAgIHJlZ2lzdGVyIHNoaWZ0IChjb252ZXJ0ZWQgdG8gdWludDMyKSwgYW5kIHB1dHMg
dGhlIHJlc3VsdAogICAgICAgICAgICBpbiByZWdpc3RlciBkc3QuCiAgICAgICAgICovCi0gICAg
ICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCB2YWwgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCBzaGlmdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoKHJbdmFsXS51LmpzVmFsdWUtPnRv
SW50MzIoZXhlYykpIDw8IChyW3NoaWZ0XS51LmpzVmFsdWUtPnRvVUludDMyKGV4ZWMpKSk7Cisg
ICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwor
ICAgICAgICBKU1ZhbHVlKiB2YWwgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwor
ICAgICAgICBKU1ZhbHVlKiBzaGlmdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7
CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwtPnRvSW50MzIoZXhlYykp
IDw8IChzaGlmdC0+dG9VSW50MzIoZXhlYykpKTsKICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIGRzdCA9IHJl
c3VsdDsKICAgICAgICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKQEAg
LTEzMTAsMTIgKzEzMjQsMTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICAgICB0byBpbnQzMikgYnkgcmVnaXN0ZXIgc2hpZnQgKGNvbnZlcnRlZCB0
bwogICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHJlZ2lzdGVyIGRz
dC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAg
ICAgICAgaW50IHZhbCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNoaWZ0ID0g
KCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBqc051bWJlcigo
clt2YWxdLnUuanNWYWx1ZS0+dG9JbnQzMihleGVjKSkgPj4gKHJbc2hpZnRdLnUuanNWYWx1ZS0+
dG9VSW50MzIoZXhlYykpKTsKLSAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgICAg
IHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIEpTVmFsdWUqJiBkc3QgPSByWygr
K3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiB2YWwgPSByWygr
K3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBzaGlmdCA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHJlc3VsdDsK
KyAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNo
aWZ0KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRp
YXRlTnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1
bHQgPSBqc051bWJlcigodmFsLT50b0ludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUludDMyKGV4
ZWMpICYgMHgxZikpOworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAg
IH0KKyAgICAgICAgZHN0ID0gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgKyt2UEM7CiAgICAg
ICAgIE5FWFRfT1BDT0RFOwpAQCAtMTMyNywxMiArMTM0NiwxMyBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIHRvIHVpbnQzMikgYnkgcmVnaXN0
ZXIgc2hpZnQgKGNvbnZlcnRlZCB0bwogICAgICAgICAgICB1aW50MzIpLCBhbmQgcHV0cyB0aGUg
cmVzdWx0IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHZhbCA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHNoaWZ0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc051bWJlcigoclt2YWxdLnUuanNWYWx1ZS0+dG9VSW50MzIoZXhlYykpID4+
IChyW3NoaWZ0XS51LmpzVmFsdWUtPnRvVUludDMyKGV4ZWMpKSk7CisgICAgICAgIEpTVmFsdWUq
JiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVl
KiB2YWwgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVl
KiBzaGlmdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoKHZhbC0+dG9VSW50MzIoZXhl
YykpID4+IChzaGlmdC0+dG9VSW50MzIoZXhlYykgJiAweDFmKSk7CiAgICAgICAgIFZNX0NIRUNL
X0VYQ0VQVElPTigpOwotICAgICAgICByW2RzdF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAg
ICBkc3QgPSByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9P
UENPREU7CkBAIC0xMzQ0LDExICsxMzY0LDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICBhbmQgcmVnaXN0ZXIgc3JjMiAoY29udmVydGVkIHRv
IGludDMyKSwgYW5kIHB1dHMgdGhlIHJlc3VsdAogICAgICAgICAgICBpbiByZWdpc3RlciBkc3Qu
CiAgICAgICAgICovCi0gICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBzcmMxID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMiA9ICgr
K3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJbc3JjMV0udS5qc1Zh
bHVlOwotICAgICAgICBKU1ZhbHVlKiBzcmMyID0gcltzcmMyXS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqJiBkc3QgPSByWygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOworICAgICAg
ICBKU1ZhbHVlKiBzcmMxID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAg
ICAgSlNWYWx1ZSogc3JjMiA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CiAgICAg
ICAgIEpTVmFsdWUqIHJlc3VsdDsKICAgICAgICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1t
ZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKSkKICAgICAgICAgICAgIHJlc3VsdCA9IEpTSW1tZWRp
YXRlOjphbmRJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpOwpAQCAtMTM1Niw3ICsxMzc0LDcg
QEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAg
cmVzdWx0ID0ganNOdW1iZXIoc3JjMS0+dG9JbnQzMihleGVjKSAmIHNyYzItPnRvSW50MzIoZXhl
YykpOwogICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgcltkc3RdLnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgZHN0ID0gcmVzdWx0OwogICAg
ICAgICAKICAgICAgICAgKyt2UEM7CiAgICAgICAgIE5FWFRfT1BDT0RFOwpAQCAtMTM2OCwxMSAr
MTM4Niw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgICAgYW5kIHJlZ2lzdGVyIHNyYzIgKGNvbnZlcnRlZCB0byBpbnQzMiksIGFuZCBwdXRzIHRo
ZSByZXN1bHQKICAgICAgICAgICAgaW4gcmVnaXN0ZXIgZHN0LgogICAgICAgICAqLwotICAgICAg
ICBpbnQgZHN0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpbnQgc3JjMSA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0g
ICAgICAgIEpTVmFsdWUqIHNyYzEgPSByW3NyYzFdLnUuanNWYWx1ZTsKLSAgICAgICAgSlNWYWx1
ZSogc3JjMiA9IHJbc3JjMl0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiYgZHN0ID0gclso
Kyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogc3JjMSA9IHJb
KCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNyYzIgPSBy
WygrK3ZQQyktPnUub3BlcmFuZF0udS5qc1ZhbHVlOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7
CiAgICAgICAgIGlmIChKU0ltbWVkaWF0ZTo6YXJlQm90aEltbWVkaWF0ZU51bWJlcnMoc3JjMSwg
c3JjMikpCiAgICAgICAgICAgICByZXN1bHQgPSBKU0ltbWVkaWF0ZTo6eG9ySW1tZWRpYXRlTnVt
YmVycyhzcmMxLCBzcmMyKTsKQEAgLTEzODAsNyArMTM5Niw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6
OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHNy
YzEtPnRvSW50MzIoZXhlYykgXiBzcmMyLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIFZN
X0NIRUNLX0VYQ0VQVElPTigpOwogICAgICAgICB9Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUg
PSByZXN1bHQ7CisgICAgICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgICsrdlBD
OwogICAgICAgICBORVhUX09QQ09ERTsKQEAgLTEzOTIsMTEgKzE0MDgsOSBAQCBKU1ZhbHVlKiBN
YWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICAgIGFuZCByZWdpc3RlciBz
cmMyIChjb252ZXJ0ZWQgdG8gaW50MzIpLCBhbmQgcHV0cyB0aGUKICAgICAgICAgICAgcmVzdWx0
IGluIHJlZ2lzdGVyIGRzdC4KICAgICAgICAgKi8KLSAgICAgICAgaW50IGRzdCA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKLSAgICAgICAgaW50IHNyYzEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCBzcmMyID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBKU1ZhbHVlKiBzcmMx
ID0gcltzcmMxXS51LmpzVmFsdWU7Ci0gICAgICAgIEpTVmFsdWUqIHNyYzIgPSByW3NyYzJdLnUu
anNWYWx1ZTsKKyAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51
LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIHNyYzEgPSByWygrK3ZQQyktPnUub3BlcmFuZF0u
dS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBzcmMyID0gclsoKyt2UEMpLT51Lm9wZXJhbmRd
LnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogcmVzdWx0OwogICAgICAgICBpZiAoSlNJbW1l
ZGlhdGU6OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHNyYzEsIHNyYzIpKQogICAgICAgICAgICAg
cmVzdWx0ID0gSlNJbW1lZGlhdGU6Om9ySW1tZWRpYXRlTnVtYmVycyhzcmMxLCBzcmMyKTsKQEAg
LTE0MDQsNyArMTQxOCw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKHNyYzEtPnRvSW50MzIoZXhlYykgfCBz
cmMyLT50b0ludDMyKGV4ZWMpKTsKICAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOwog
ICAgICAgICB9Ci0gICAgICAgIHJbZHN0XS51LmpzVmFsdWUgPSByZXN1bHQ7CisgICAgICAgIGRz
dCA9IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09E
RTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5oCShyZXZpc2lvbiAzNDE3MSkKKysrIEph
dmFTY3JpcHRDb3JlL2tqcy9KU0ltbWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4
MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAoZ2V0VGFnKHYpID09IFVuZGVmaW5lZFR5
cGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGlzTmVnYXRpdmUoY29uc3QgSlNWYWx1ZSog
dikKKyAgICB7CisgICAgICAgIEFTU0VSVChpc051bWJlcih2KSk7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odikgJiAweDgwMDAwMDAwOworICAgIH0KKwogICAg
IHN0YXRpYyBKU1ZhbHVlKiBmcm9tKGNoYXIpOwogICAgIHN0YXRpYyBKU1ZhbHVlKiBmcm9tKHNp
Z25lZCBjaGFyKTsKICAgICBzdGF0aWMgSlNWYWx1ZSogZnJvbSh1bnNpZ25lZCBjaGFyKTsKQEAg
LTExOCw2ICsxMjQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHYxKSB8IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pih2MikpOwogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUqIHJpZ2h0U2hpZnRJbW1lZGlhdGVOdW1iZXJzKGNvbnN0IEpTVmFsdWUqIHZhbCwg
Y29uc3QgSlNWYWx1ZSogc2hpZnQpCisgICAgeworICAgICAgICBBU1NFUlQoYXJlQm90aEltbWVk
aWF0ZU51bWJlcnModmFsLCBzaGlmdCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxKU1ZhbHVlKj4oKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHZhbCkgPj4gKChyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oc2hpZnQpID4+IDIpICYgMHgxZikpIHwgTnVtYmVyVHlwZSk7
CisgICAgfQorCiAgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5Eb0Zhc3RBZGRpdGl2
ZU9wZXJhdGlvbnMoY29uc3QgSlNWYWx1ZSogdikKICAgICB7CiAgICAgICAgIC8vIE51bWJlciBp
cyBub24tbmVnYXRpdmUgYW5kIGFuIG9wZXJhdGlvbiBpbnZvbHZpbmcgdHdvIG9mIHRoZXNlIGNh
bid0IG92ZXJmbG93Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21430</attachid>
            <date>2008-05-30 06:51:03 -0700</date>
            <delta_ts>2008-05-30 13:12:46 -0700</delta_ts>
            <desc>Patch for &lt;&lt; and &gt;&gt;&gt;</desc>
            <filename>LeftShift.txt</filename>
            <type>text/plain</type>
            <size>4054</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM0MjYyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDMxIEBACiAyMDA4LTA1LTMwICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkxODAKKyAgICAgICAgc3BlZWQgdXAgU3VuU3BpZGVyIGJ5IG9wdGltaXppbmcgaW1t
ZWRpYXRlIG51bWJlciBjYXNlcworCisgICAgICAgIEFsc28gZml4ZWQgYSBKYXZhU2NyaXB0Q29y
ZSByZWdyZXNzaW9uIHNlZW4gb24gUG93ZXJQQyAtIHdlIGRpZG4ndCBjbGlwIGxlZnQgc2hpZnQK
KyAgICAgICAgcGFyYW1ldGVyIHRvIDAuLi4zMS4KKworICAgICAgICAwLjUlIGltcHJvdmVtZW50
IG9uIFN1blNwaWRlciBvdmVyYWxsLCBhbHRob3VnaCBhIDguNSByZWdyZXNzaW9uIG9uIGJpdG9w
cy0zYml0LWJpdHMtaW4tYnl0ZS4KKworICAgICAgICAqIFZNL01hY2hpbmUuY3BwOgorICAgICAg
ICAoS0pTOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgIEFkZGVkIGZhc3QgcGF0
aHMgZm9yID4+PiBhbmQgPDwuCisKKyAgICAgICAgKiBranMvSlNJbW1lZGlhdGUuaDoKKyAgICAg
ICAgKEtKUzo6SlNJbW1lZGlhdGU6OnRvVHJ1bmNhdGVkVUludDMyKTogQWRkZWQuIFNhbWUgYXMg
Z2V0VHJ1bmNhdGVkSW50MzIsIGJ1dCBjYXN0cyB0aGUgcmVzdWx0CisgICAgICAgIHRvIHVuc2ln
bmVkLgorCisyMDA4LTA1LTMwICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4K
KwogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KIAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxODAKICAgICAgICAgc3BlZWQgdXAgU3Vu
U3BpZGVyIGJ5IG9wdGltaXppbmcgaW1tZWRpYXRlIG51bWJlciBjYXNlcwogCi0gICAgICAgIEFs
c28gZml4ZWQgdGhyZWUgSmF2YVNjcmlwdENvcmUgcmVncmVzc2lvbnMgc2VlbiBvbiBQb3dlclBD
IC0gd2UgZGlkbid0IGNsaXAgcmlnaHQgc2hpZnQKKyAgICAgICAgQWxzbyBmaXhlZCB0d28gSmF2
YVNjcmlwdENvcmUgcmVncmVzc2lvbnMgc2VlbiBvbiBQb3dlclBDIC0gd2UgZGlkbid0IGNsaXAg
cmlnaHQgc2hpZnQKICAgICAgICAgcGFyYW1ldGVyIHRvIDAuLi4zMS4KIAogICAgICAgICAxLjYl
IGltcHJvdmVtZW50IG9uIFN1blNwaWRlciwgd2l0aG91dCBzaWduaWZpY2FudCByZWdyZXNzaW9u
cyBvbiBhbnkgdGVzdHMuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzQyNjIp
CisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMx
OCw4ICsxMzE4LDEzIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkK
ICAgICAgICAgSlNWYWx1ZSomIGRzdCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7
CiAgICAgICAgIEpTVmFsdWUqIHZhbCA9IHJbKCsrdlBDKS0+dS5vcGVyYW5kXS51LmpzVmFsdWU7
CiAgICAgICAgIEpTVmFsdWUqIHNoaWZ0ID0gclsoKyt2UEMpLT51Lm9wZXJhbmRdLnUuanNWYWx1
ZTsKLSAgICAgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIoKHZhbC0+dG9JbnQzMihleGVj
KSkgPDwgKHNoaWZ0LT50b1VJbnQzMihleGVjKSkpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJ
T04oKTsKKyAgICAgICAgSlNWYWx1ZSogcmVzdWx0OworICAgICAgICBpZiAoSlNJbW1lZGlhdGU6
OmFyZUJvdGhJbW1lZGlhdGVOdW1iZXJzKHZhbCwgc2hpZnQpKQorICAgICAgICAgICAgcmVzdWx0
ID0ganNOdW1iZXIoSlNJbW1lZGlhdGU6OmdldFRydW5jYXRlZEludDMyKHZhbCkgPDwgKEpTSW1t
ZWRpYXRlOjp0b1RydW5jYXRlZFVJbnQzMihzaGlmdCkgJiAweDFmKSk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgcmVzdWx0ID0ganNOdW1iZXIoKHZhbC0+dG9JbnQzMihleGVjKSkgPDwg
KHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VY
Q0VQVElPTigpOworICAgICAgICB9CiAgICAgICAgIGRzdCA9IHJlc3VsdDsKICAgICAgICAgCiAg
ICAgICAgICsrdlBDOwpAQCAtMTM1OCw4ICsxMzYzLDEyIEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgSlNWYWx1ZSogdmFsID0gclsoKyt2UEMpLT51
Lm9wZXJhbmRdLnUuanNWYWx1ZTsKICAgICAgICAgSlNWYWx1ZSogc2hpZnQgPSByWygrK3ZQQykt
PnUub3BlcmFuZF0udS5qc1ZhbHVlOwogICAgICAgICBKU1ZhbHVlKiByZXN1bHQ7Ci0gICAgICAg
IHJlc3VsdCA9IGpzTnVtYmVyKCh2YWwtPnRvVUludDMyKGV4ZWMpKSA+PiAoc2hpZnQtPnRvVUlu
dDMyKGV4ZWMpICYgMHgxZikpOwotICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKyAgICAg
ICAgaWYgKEpTSW1tZWRpYXRlOjphcmVCb3RoSW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KSAm
JiAhSlNJbW1lZGlhdGU6OmlzTmVnYXRpdmUodmFsKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IEpT
SW1tZWRpYXRlOjpyaWdodFNoaWZ0SW1tZWRpYXRlTnVtYmVycyh2YWwsIHNoaWZ0KTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBqc051bWJlcigodmFsLT50b1VJbnQzMihl
eGVjKSkgPj4gKHNoaWZ0LT50b1VJbnQzMihleGVjKSAmIDB4MWYpKTsKKyAgICAgICAgICAgIFZN
X0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICB9CiAgICAgICAgIGRzdCA9IHJlc3VsdDsKICAg
ICAgICAgCiAgICAgICAgICsrdlBDOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRp
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHJl
dmlzaW9uIDM0MjYyKQorKysgSmF2YVNjcmlwdENvcmUva2pzL0pTSW1tZWRpYXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdG9C
b29sZWFuKGNvbnN0IEpTVmFsdWUqKTsKICAgICBzdGF0aWMgSlNPYmplY3QqIHRvT2JqZWN0KGNv
bnN0IEpTVmFsdWUqLCBFeGVjU3RhdGUqKTsKICAgICBzdGF0aWMgVVN0cmluZyB0b1N0cmluZyhj
b25zdCBKU1ZhbHVlKik7CisgICAgc3RhdGljIHVpbnQzMl90IHRvVHJ1bmNhdGVkVUludDMyKGNv
bnN0IEpTVmFsdWUqKTsKICAgICBzdGF0aWMgSlNUeXBlIHR5cGUoY29uc3QgSlNWYWx1ZSopOwog
CiAgICAgc3RhdGljIGJvb2wgZ2V0VUludDMyKGNvbnN0IEpTVmFsdWUqLCB1aW50MzJfdCYpOwpA
QCAtMjIxLDYgKzIyMiwxMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNJbW1lZGlhdGU6OnRvQm9v
bGVhCiAgICAgcmV0dXJuIChiaXRzICE9IDApICYgKEpTSW1tZWRpYXRlOjpnZXRUYWcodikgIT0g
VW5kZWZpbmVkVHlwZSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdWludDMyX3QgSlNJbW1lZGlhdGU6
OnRvVHJ1bmNhdGVkVUludDMyKGNvbnN0IEpTVmFsdWUqIHYpCit7CisgICAgQVNTRVJUKGlzSW1t
ZWRpYXRlKHYpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHYpID4+IDIpOworfQorCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpT
SW1tZWRpYXRlOjpmcm9tKGNoYXIgaSkKIHsKICAgICByZXR1cm4gdGFnKGkgPDwgMiwgTnVtYmVy
VHlwZSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>