Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:39:35 -0800] rev 36832
xdiff: remove unused xpp and xecfg parameters
They are unused. Thus removed.
Differential Revision: https://phab.mercurial-scm.org/D2764
Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:37:55 -0800] rev 36831
xdiff: remove unused flags parameter
After D2683, the flags parameter in some functions is no longer needed.
Thus removed.
Differential Revision: https://phab.mercurial-scm.org/D2763
Jun Wu <quark@fb.com> [Fri, 09 Mar 2018 14:24:27 -0800] rev 36830
xdiff: replace {unsigned ,}long with {u,}int64_t
MSVC treats "long" as 4-byte. That could cause overflows since the xdiff
code uses "long" in places where "size_t" or "ssize_t" should be used.
Let's use explicit 8 byte integers to avoid
FWIW git avoids that overflow by limiting diff size to 1GB [1]. After
examining the code, I think the remaining risk (the use of "int") is low
since "int" is only used for return values and hash table size. Although a
wrong hash table size would not affect the correctness of the code, but that
could make the code extremely slow. The next patch will change hash table
size to 8-byte integer so the 1GB limit is unlikely needed.
This patch was done by using `sed`.
[1]: https://github.com/git/git/commit/dcd1742e56ebb944c4ff62346da4548e1e3be67
Differential Revision: https://phab.mercurial-scm.org/D2762
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 11:30:16 -0800] rev 36829
xdiff: add comments for fields in xdfile_t
This makes the related code easier to understand.
Differential Revision: https://phab.mercurial-scm.org/D2685
Jun Wu <quark@fb.com> [Wed, 07 Mar 2018 14:45:31 -0800] rev 36828
xdiff: add a preprocessing step that trims files
xdiff has a `xdl_trim_ends` step that removes common lines, unmatchable
lines. That is in theory good, but happens too late - after splitting,
hashing, and adjusting the hash values so they are unique. Those splitting,
hashing and adjusting hash values steps could have noticeable overhead.
Diffing two large files with minor (one-line-ish) changes are not uncommon.
In that case, the raw performance of those preparation steps seriously
matter. Even allocating an O(N) array and storing line offsets to it is
expensive. Therefore my previous attempts [1] [2] cannot be good enough
since they do not remove the O(N) array assignment.
This patch adds a preprocessing step - `xdl_trim_files` that runs before
other preprocessing steps. It counts common prefix and suffix and lines in
them (needed for displaying line number), without doing anything else.
Testing with a crafted large (169MB) file, with minor change:
```
open('a','w').write(''.join('%s\n' % (i % 100000) for i in xrange(30000000) if i != 6000000))
open('b','w').write(''.join('%s\n' % (i % 100000) for i in xrange(30000000) if i != 6003000))
```
Running xdiff by a simple binary [3], this patch improves the xdiff perf by
more than 10x for the above case:
```
# xdiff before this patch
2.41s user 1.13s system 98% cpu 3.592 total
# xdiff after this patch
0.14s user 0.16s system 98% cpu 0.309 total
# gnu diffutils
0.12s user 0.15s system 98% cpu 0.272 total
# (best of 20 runs)
```
It's still slightly slower than GNU diffutils. But it's pretty close now.
Testing with real repo data:
For the whole repo, this patch makes xdiff 25% faster:
```
# hg perfbdiff --count 100 --alldata -c d334afc585e2 --blocks [--xdiff]
# xdiff, after
! wall 0.058861 comb 0.050000 user 0.050000 sys 0.000000 (best of 100)
# xdiff, before
! wall 0.077816 comb 0.080000 user 0.080000 sys 0.000000 (best of 91)
# bdiff
! wall 0.117473 comb 0.120000 user 0.120000 sys 0.000000 (best of 67)
```
For files that are long (ex. commands.py), the speedup is more than 3x, very
significant:
```
# hg perfbdiff --count 3000 --blocks commands.py.i 1 [--xdiff]
# xdiff, after
! wall 0.690583 comb 0.690000 user 0.690000 sys 0.000000 (best of 12)
# xdiff, before
! wall 2.240361 comb 2.210000 user 2.210000 sys 0.000000 (best of 4)
# bdiff
! wall 2.469852 comb 2.440000 user 2.440000 sys 0.000000 (best of 4)
```
[1]: https://phab.mercurial-scm.org/D2631
[2]: https://phab.mercurial-scm.org/D2634
[3]:
```
// Code to run xdiff from command line. No proper error handling.
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "mercurial/thirdparty/xdiff/xdiff.h"
#define ensure(x) if (!(x)) exit(255);
mmfile_t readfile(const char *path) {
struct stat st; int fd = open(path, O_RDONLY);
fstat(fd, &st); mmfile_t file = { malloc(st.st_size), st.st_size };
ensure(read(fd, file.ptr, st.st_size) == st.st_size); close(fd);
return file;
}
int main(int argc, char const *argv[]) {
mmfile_t a = readfile(argv[1]), b = readfile(argv[2]);
xpparam_t xpp = {0}; xdemitconf_t xecfg = {0}; xdemitcb_t ecb = {0};
xdl_diff(&a, &b, &xpp, &xecfg, &ecb);
return 0;
}
```
Differential Revision: https://phab.mercurial-scm.org/D2686
Martin von Zweigbergk <martinvonz@google.com> [Fri, 09 Mar 2018 14:30:15 -0800] rev 36827
transaction: add a name and a __repr__ implementation (API)
This has been useful for me for debugging.
Differential Revision: https://phab.mercurial-scm.org/D2758
Joerg Sonnenberger <joerg@bec.de> [Fri, 09 Mar 2018 16:10:55 +0100] rev 36826
phabricator: update doc string for deprecated token argument
Differential Revision: https://phab.mercurial-scm.org/D2755
Joerg Sonnenberger <joerg@bec.de> [Fri, 09 Mar 2018 16:09:27 +0100] rev 36825
phabricator: print deprecation warning only once
Differential Revision: https://phab.mercurial-scm.org/D2754
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Mar 2018 21:17:26 -0800] rev 36824
tests: add a few tests involving --collapse and rebase.singletransaction=1
I'm about to change the rebase code quite a bit and this was poorly
tested.
Differential Revision: https://phab.mercurial-scm.org/D2757
Martin von Zweigbergk <martinvonz@google.com> [Thu, 08 Mar 2018 20:55:51 -0800] rev 36823
tests: simplify test-rebase-transaction.t
The file was extracted from test-rebase-base.t in 8cef8f7d51d0
(test-rebase-base: clarify it is about the "--base" flag,
2017-10-05). This patch follows up that and clarifies the new file's
purpose and simplifies it a bit.
Differential Revision: https://phab.mercurial-scm.org/D2756
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 16:22:25 -0800] rev 36822
hgweb: parse and store HTTP request headers
WSGI transmits HTTP request headers as HTTP_* environment variables.
We teach our parser about these and hook up a dict-like data
structure that supports case insensitive header manipulation.
Differential Revision: https://phab.mercurial-scm.org/D2742
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 16:43:32 -0800] rev 36821
wireprotoserver: remove broken optimization for non-httplib client
There was an experimental non-httplib client in core for several
years. It was removed a week or so ago.
We kept the optimization for this client in the server code. I'm
not sure if that was intended or not. But it doesn't matter: the
code was wrong.
Because the code was accessing a WSGI environment dict, it needed to
access the HTTP_X_HGHTTP2 key to actually read the HTTP header. So
the code deleted by this commit wasn't actually doing anything
meaningful. Doh.
Differential Revision: https://phab.mercurial-scm.org/D2741
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:58:52 -0800] rev 36820
wireprotoserver: move all wire protocol handling logic out of hgweb
Previous patches from several days ago worked to isolate processing
of HTTP wire protocol requests to wireprotoserver. We still had a
little logic in hgweb. If feels like the right time to finish the
job.
This commit moves WSGI request servicing from hgweb to wireprotoserver.
The ugly dict holding the parsed request is no more. I think the new
code is cleaner.
As part of this, we now process wire protocol requests before the
block to obtain the "query" variable. This makes it clear that this
wonky "query" variable is not used by the wire protocol.
The wonkiest part about this code is the HTTP 404. I'm actually not
sure what all is going on here. It looks like the code is trying to
prevent URL with path components that specify a command from not
working. That part I grok. What I don't grok is why we need to send
a 404. I would think it would be OK to no-op and let another handler
try to service the request. But if we do this, we get some subrepo
test failures. So it looks like something is expecting the HTTP 404
and reacting to it in a specific way. It /might/ be possible to
change the behavior here. But it isn't something I'm comfortable
doing because I don't understand the problem space.
Differential Revision: https://phab.mercurial-scm.org/D2740
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:37:05 -0800] rev 36819
hgweb: use parsed request to construct query parameters
The way hgweb routes requests is kind of bonkers. If PATH_INFO is
set, we take the URL path after the repository. Otherwise, we take
the first part of the query string before "&" and the part before
";" in that.
We then kinda/sorta treat this as a path and route based on that.
This commit ports that code to use the parsed request object. This
required a new attribute on the parsed request to indicate whether
there is any PATH_INFO.
The new code still feels a bit convoluted for my liking. But we'll
need to rewrite more of the code before a better solution becomes
apparant. This code feels strictly better since we're no longer
doing low-level WSGI manipulation during routing.
Differential Revision: https://phab.mercurial-scm.org/D2739
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 11:33:33 -0800] rev 36818
hgweb: only recognize wire protocol commands from query string (BC)
Previously, we attempted to parse the wire protocol command from
`req.form`. Data could have come from the query string or POST
form data.
The wire protocol states that the command must be declared in the
query string. And AFAICT all Mercurial releases from at least 1.0
send the command in the query string.
So let's actual require this behavior.
This is technically BC. But I'm not sure how anyone in the wild
would encounter this. POST has historically been used for sending
bundle data. So there's no opportunity to encode arguments there.
And the experimental HTTP POST args also takes over the body. So
the only way someone would be impacted by this is if they wrote
a custom client that both used POST for everything and sent arguments
via the HTTP body. I don't believe such a client exists.
.. bc::
The HTTP wire protocol server no longer accepts the ``cmd``
argument to control which command to run via HTTP POST bodies.
The ``cmd`` argument must be specified on the URL query string.
Differential Revision: https://phab.mercurial-scm.org/D2738
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 11:21:46 -0800] rev 36817
hgweb: teach WSGI parser about query strings
Currently, req.form uses cgi.parse() to populate form data. Depending
on the request, form data can come from POST multipart/form-data,
application/x-www-form-urlencoded, or the URL query string.
Putting all these things into one data structure makes it difficult
to reason about how exactly parameters got to the request. It can
lead to wonkiness such as pulling parameters from both the URL and
POST data.
This commit teaches our WSGI request parser about argument data
in query strings. We populate fields containing the query string
data and only the query string data so it can't be confused with
POST data.
Differential Revision: https://phab.mercurial-scm.org/D2737
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:08:20 -0800] rev 36816
hgweb: use the parsed application path directly
Previously, we assigned a custom system string with a trailing slash
to wsgirequest.url.
The addition of the trailing slash felt arbitrary and seems to go
against how things typically work in WSGI.
We also want our URLs to be bytes, not system strings.
And, assigning a custom attribute to wsgirequest felt wrong.
This commit fixes all those things by removing the trailing
slash from the app path, changing consumers to use that variable
and to use it without a trailing slash, and removing the custom
attribute from wsgirequest.
We preserve the trailing slash on {url}. Also, makebreadcrumb
strips the trailing slash. So no change to it was needed.
Differential Revision: https://phab.mercurial-scm.org/D2736
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 12:59:25 -0800] rev 36815
hgweb: use computed base URL from parsed request
Let's not reinvent URL construction in a function that runs the
templater.
Differential Revision: https://phab.mercurial-scm.org/D2735
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 10 Mar 2018 10:20:51 -0800] rev 36814
hgweb: parse WSGI request into a data structure
Currently, our WSGI applications (hgweb_mod and hgwebdir_mod) process
the raw WSGI request instance themselves. This means they have to
talk in terms of system strings. And they need to know details
about what's in the WSGI request. And in the case of hgweb_mod, it
is doing some very funky things with URL parsing to impact
dispatching. The code is difficult to read and maintain.
This commit introduces parsing of the WSGI request into a higher-level
and easier-to-reason-about data structure.
To prove it works, we hook it up to hgweb_mod and use it for populating
the relative URL on the request instance.
We hold off on using it in more places because the logic in hgweb_mod
is crazy and I don't want to involve those changes with review of
the parsing code.
The URL construction code has variations that use the HTTP: Host header
(the canonical WSGI way of reconstructing the URL) and with the use
of SERVER_NAME. We need to differentiate because hgweb is currently
using SERVER_NAME for URL construction.
Differential Revision: https://phab.mercurial-scm.org/D2734
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:14:32 -0800] rev 36813
hgweb: always use "?" when writing session vars
This code resolves a string to insert in URLs as part of a
query string. Essentially, it resolves the {sessionvars}
template keyword, which is used by hgweb templates to build
a URL as a string.
The whole approach here feels wrong because there's no way of
knowing when this code runs how the final URL will look. There
could be additional URL fragments added before this template
keyword that add a query string component.
Furthermore, I don't think there's *any* for req.url to have
a query string. That's because the code that populates this
variable only takes SCRIPT_NAME and REPO_NAME into account. The
"?" character it is searching for would only be added if some
code attempted to add QUERY_STRING to the URL. Hacking the code
up to raise if "?" is present in the URL yields a clean test
suite run. I'm not sure if we broke this code or if it has
always been broken.
Anyway, this commit removes support for emitting "&" as the
first character in {sessionvars} and makes it always emit "?",
which is what it was always doing before AFAICT.
Differential Revision: https://phab.mercurial-scm.org/D2733
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 15:15:59 -0800] rev 36812
hgweb: rename req to wsgireq
We will soon introduce a parsed WSGI request object so we don't
have to concern ourselves with low-level WSGI matters. Prepare
for multiple request objects by renaming the existing one so it
is clear it deals with WSGI.
We also remove a symbol import to avoid even more naming confusion.
# no-check-commit because of some new foo_bar naming that's required
Differential Revision: https://phab.mercurial-scm.org/D2732
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 09:44:27 -0800] rev 36811
hgweb: validate WSGI environment dict
The wsgiref.validate module contains useful functions for validating
that various WSGI data structures are proper.
This commit adds validation of the environment dict to our built-in
HTTP server, which turns an HTTP request into an environment dict.
The check discovered that we weren't always setting QUERY_STRING,
which would cause the cgi module to fall back to sys.argv. So we
change things to always set QUERY_STRING.
The check passes on Python 2 and 3.
Differential Revision: https://phab.mercurial-scm.org/D2731
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 08 Mar 2018 09:26:51 -0800] rev 36810
hgweb: ensure all wsgi environment values are str
Previously, we had a few entries that were bytes on Python 3.
PEP-0333 states that all entries must be the native str type
(bytes on Python 2, str on Python 3).
This required a number of changes to hgweb_mod to unbreak
things on Python 3. I suspect there still may be some regressions.
I'm going to introduce a data structure that represents a parsed
WSGI request in upcoming commits. This will hold bytes and will
allow us to stop using raw literals throughout the WSGI code.
Differential Revision: https://phab.mercurial-scm.org/D2730
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Mar 2018 16:18:52 -0800] rev 36809
wireproto: formalize permissions checking as part of protocol interface
Per the inline comment desiring to formalize permissions checking
in the protocol interface, we do that.
I'm not convinced this is the best way to go about things. I would love
for there to e.g. be a better exception for denoting permissions
problems. But it does feel strictly better than snipping attributes
on the proto instance.
Differential Revision: https://phab.mercurial-scm.org/D2719
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 07 Mar 2018 16:02:24 -0800] rev 36808
wireproto: declare permissions requirements in @wireprotocommand (API)
With the security patches from 4.5.2 merged into default, we now
have a per-command attribute defining what permissions are needed
to run that command. We now have a richer @wireprotocommand that
can be extended to record additional command metadata. So we
port the permissions mechanism to be based on @wireprotocommand.
.. api::
hgweb_mod.perms and wireproto.permissions have been removed. Wire
protocol commands should declare their required permissions in the
@wireprotocommand decorator.
Differential Revision: https://phab.mercurial-scm.org/D2718
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 15:08:33 -0800] rev 36807
wireprotoserver: check permissions in main dispatch function
The permissions checking code merged from stable is out of place
in the refactored hgweb_mod module.
This commit moves the main call to wireprotoserver. We still have
some lingering code in hgweb_mod. This will get addressed later.
Differential Revision: https://phab.mercurial-scm.org/D2717
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 15:02:53 -0800] rev 36806
wireprotoserver: check if command available before calling it
The previous behavior was just plain wrong. I have no clue how it
landed. My guess is a merge conflict resolution gone wrong on my
end a few weeks ago.
Differential Revision: https://phab.mercurial-scm.org/D2716
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:43:17 -0600] rev 36805
py3: drop encoding.strio()
Its buffered nature makes TextIOWrapper unsuitable for temporarily wrapping
bytes I/O.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:42:37 -0600] rev 36804
ui: adjust Windows workaround to new _readline() code
It's only needed when rawinput() is called. Also made it Py3 compatible.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:38:53 -0600] rev 36803
ui: do not use rawinput() when we have to replace sys.stdin/stdout
See the inline comment for why. The current Python3 hack doesn't work if
more than one user inputs are expected because TextIOWrapper fills its
internal buffer at the first read() request.
Maybe we could write an unbuffered TextIOWrapper, but I don't want to make
things more complicated. Instead, this patch reinvents raw_input(' ') of
no readline support.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:32:26 -0600] rev 36802
ui: do not try readline support if fin/fout aren't standard streams
It's unlikely for a non-stdio stream to be a tty. Minimizing readline support
makes it much simpler to work around the unicode input() function of Python 3.
This also works on chg which duplicates client's tty to stdio fds.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:28:59 -0600] rev 36801
util: add public isstdin/isstdout() functions
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 03:05:49 -0600] rev 36800
ui: add debug commands to test interactive prompt
Interactive operations aren't easily covered by tests. So let's add commands
to test them manually.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:14:11 -0600] rev 36799
ui: inline util.bytesinput() into ui._readline()
Prepares for rework of Python 3 support, which is currently broken due to
read-ahead buffer of TextIOWrapper.
Yuya Nishihara <yuya@tcha.org> [Tue, 06 Mar 2018 02:05:25 -0600] rev 36798
hgk: stop using util.bytesinput() to read a single line from stdin
Appears that the stdio here is an IPC channel between hg and hgk (tk)
processes, which shouldn't need a fancy readline support.
Augie Fackler <augie@google.com> [Mon, 29 Aug 2016 10:42:58 -0400] rev 36797
bookmarks: test for exchanging long bookmark names (issue5165)
As far as I can tell a test for a long bookmark name never actually
got added when this was fixed. Let's document that a 300 byte bookmark
is something we're supporting (this patch started out life over a year
ago as a way for me to validate the problem, and I recently found it.)
I think the nonzero exits from the push operations are only because no
new changesets get exchanged. Please correct me if I'm wrong on that. :)
Differential Revision: https://phab.mercurial-scm.org/D2727
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 11:46:03 -0500] rev 36796
phabricator: follow-up phab auth improvements with backwards compat mode
We'll rip this out before we ship 4.6, but this gives people a window
to migrate.
Differential Revision: https://phab.mercurial-scm.org/D2703
Tom Prince <mozilla@hocat.ca> [Sat, 20 Jan 2018 02:41:10 -0700] rev 36795
phabricator: specify API tokens per host, rather than per repo
Differential Revision: https://phab.mercurial-scm.org/D1919
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:47:07 -0500] rev 36794
py3: drop b'' from generate-working-copy-states.py output
I could make everything bytes, but decoding filename seemed easier and we
don't have to worry about non-ascii filenames here.
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:41:09 -0500] rev 36793
py3: make test-commit-multiple.t byte-safe
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:34:46 -0500] rev 36792
py3: fix type of default username
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 18:21:16 -0500] rev 36791
py3: read/write plain lock file in binary mode
A lock file shouldn't contain '\n', so this isn't a BC.
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 12:31:08 -0500] rev 36790
util: stop calling os.stat_float_times()
It had Python-wide side effects, and it disappears in 3.7.0.
As of this change, we're mostly working on 3.7.0b2. There are a few
worrying failures, mostly around regular expressions, but we'll have
to tackle those separately.
Differential Revision: https://phab.mercurial-scm.org/D2697
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 12:30:20 -0500] rev 36789
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
The latter is floating point by default, and we've been doing
os.stat_float_times(False). Unfortunately, os.stat_float_times was
removed between Python 3.7.0a1 and 3.7.0b2, so we have to stop using
it.
Differential Revision: https://phab.mercurial-scm.org/D2696
Augie Fackler <augie@google.com> [Mon, 05 Mar 2018 15:07:32 -0500] rev 36788
osutil: implement minimal __getitem__ compatibility on our custom listdir type
We previously declined to do this, but the removal of the deprecated
os.stat_float_times() method in Python 3.7 forces our hand.
Differential Revision: https://phab.mercurial-scm.org/D2695
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:14:24 -0500] rev 36787
hgweb: adapt to socket._fileobject changes in Python 3
Differential Revision: https://phab.mercurial-scm.org/D2688
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:20:24 -0500] rev 36786
debugcommands: fix some %r output with bytestr() wrappers
Almost fixes test-merge-tools.t. I think the remaining failure there
is due to some overspecified tempfile names.
Differential Revision: https://phab.mercurial-scm.org/D2675
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 11:00:17 -0800] rev 36785
tests: add test for issue 5494 but with --collapse
This was not fixed, so the test case currently demonstrates the
breakage.
Differential Revision: https://phab.mercurial-scm.org/D2714
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 10:55:57 -0800] rev 36784
tests: .hg/merge is a directory, so use `test -d`
This part of test-rebase-interrupts.t would have passed before the fix
in a580b2d65ded (rebase: make sure merge state is cleaned up for no-op
rebases (issue5494), 2017-05-18).
Differential Revision: https://phab.mercurial-scm.org/D2713
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Mar 2018 14:29:20 -0800] rev 36783
rebase: only store collapse message once
The message is determined by the user passing --message or --log when
the rebase is started. There's no need to write it to a file for each
rebased commit; writing it once at the start of the rebase is enough.
Differential Revision: https://phab.mercurial-scm.org/D2712
Martin von Zweigbergk <martinvonz@google.com> [Tue, 06 Mar 2018 09:39:24 -0800] rev 36782
rebase: collapse two nested if-conditions
Also change the order since it feel to me like it's more about
--collapse than it is about --keep.
Differential Revision: https://phab.mercurial-scm.org/D2711
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Mar 2018 20:12:25 -0800] rev 36781
rebase: reduce scope of "dsguard" variables a bit
Differential Revision: https://phab.mercurial-scm.org/D2710
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 09:46:53 -0800] rev 36780
rebase: remove unused argument "state" from rebasenode()
Differential Revision: https://phab.mercurial-scm.org/D2709
Martin von Zweigbergk <martinvonz@google.com> [Wed, 07 Mar 2018 10:31:01 -0800] rev 36779
rebase: delete obsolete internal "keepopen" option
The option was apparently introduced for use by the "pbranch"
extension, see f2558a8228be (rebase: add option to not commit after a
collapsing, 2010-02-07). However, it doesn't seem like it was ever
used by that extension (according to `hg grep` in a clone of
https://bitbucket.org/parren/hg-pbranch/), so let's delete it.
Differential Revision: https://phab.mercurial-scm.org/D2708
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 04 Mar 2018 00:25:58 +0530] rev 36778
releasenotes: allow notes for multiple directives in a single changeset
This problem was caught in da91e7309daf8ffc51bf3e6f4b2d8a16ef5af95a. This patch just makes sure there is no warning when we
encounter such a case.
Differential Revision: https://phab.mercurial-scm.org/D2254
Rishabh Madan <rishabhmadan96@gmail.com> [Sun, 04 Mar 2018 00:15:35 +0530] rev 36777
releasenotes: mention changeset with warning and abort
Output the changeset hash with the warning/abort message just to know where things messed up.
Differential Revision: https://phab.mercurial-scm.org/D2253
Rishabh Madan <rishabhmadan96@gmail.com> [Sat, 03 Mar 2018 23:47:22 +0530] rev 36776
releasenotes: replace abort with warning while parsing (issue5775)
During the 4.5 development cycle, the extension broke on two different changesets.
This fixes the issue by ensuring that it just throws a warning when it encounters
unexpected behaviour, instead of aborting.
Differential Revision: https://phab.mercurial-scm.org/D2255
Vincent Parrett <vincent@finalbuilder.com> [Wed, 07 Mar 2018 09:07:34 +1100] rev 36775
archival: fileit should not use atomictemp, causes performance regression
Differential Revision: https://phab.mercurial-scm.org/D2704
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 18:55:43 -0500] rev 36774
perf: teach perfbdiff to call blocks() and to use xdiff
Differential Revision: https://phab.mercurial-scm.org/D2624
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 19:31:17 -0800] rev 36773
fuzz: fix xdiff build
Recent xdiff code cleanups removed some files and changed some structures.
Update fuzz code.
Differential Revision: https://phab.mercurial-scm.org/D2707
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 18:51:11 -0800] rev 36772
xdiff: remove xmerge related logic
hg has its own merge algorithm with flexible config options.
Differential Revision: https://phab.mercurial-scm.org/D2706
Jun Wu <quark@fb.com> [Tue, 06 Mar 2018 18:41:08 -0800] rev 36771
xdiff: remove xemit related logic
xemit handles "diff formatting and output" with options like context lines,
whether show function names, etc. That is handled more cleanly at a higher
level in hg.
Removing context line parameters would also make the trimming logic (D2686)
cleaner and more confident. See [1].
[1]: https://github.com/git/git/commit/d2f82950a9226ae1102a7a97f03440a4bf8c6c09
Differential Revision: https://phab.mercurial-scm.org/D2705
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 00:17:49 -0800] rev 36770
xdiff: remove unused structure, functions, and constants
`bdiffparam_t` is unused. `xdl_fall_back_diff` is no longer used after
D2573. `XDL_MMB_READONLY`, `XDL_MMF_ATOMIC` are unused. `XDL_BDOP*` are
unused since there is no xdiff binary diff algorithm. `anchors` feature is
not used. It's also relatively new in git.
Differential Revision: https://phab.mercurial-scm.org/D2684
Jun Wu <quark@fb.com> [Sun, 04 Mar 2018 00:07:04 -0800] rev 36769
xdiff: remove whitespace related feature
In Mercurial, whitespace related handling are done at a higher level than
the low-level diff algorithm so "ignore spaces". So it's not used by mdiff.
Some of the upcoming optimizations would be more difficult with whitespace
related features kept. So let's remove them.
Differential Revision: https://phab.mercurial-scm.org/D2683
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 06 Mar 2018 14:32:14 -0800] rev 36768
merge with stable
There were a handful of merge conflicts in the wire protocol code due
to significant refactoring in default. When resolving the conflicts,
I tried to produce the minimal number of changes to make the incoming
security patches work with the new code.
I will send some follow-up commits to get the security patches better
integrated into default.
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:16:36 -0500] rev 36767
sslutil: some more forcebytes() on some exception messages
At this point, test-https.t no longer dumps tracebacks
everywhere. Instead, we get some results that look like we're not
adequately finding things in hg's configuration, which should be
manageable (if somewhat annoying to find and fix.)
Differential Revision: https://phab.mercurial-scm.org/D2690
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 21:15:37 -0500] rev 36766
sslutil: sslcontext needs the cipher name as a sysstr
Differential Revision: https://phab.mercurial-scm.org/D2689
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 18:03:55 -0500] rev 36765
sslutil: lots of unicode/bytes cleanup
In general, we handle hostnames as bytes, except where Python forces
them to be unicodes.
This fixes all the tracebacks I was seeing in test-https.t, but
there's still some ECONNRESET weirdness that I can't hunt down...
Differential Revision: https://phab.mercurial-scm.org/D2687
Matt Harbison <matt_harbison@yahoo.com> [Mon, 05 Mar 2018 20:22:34 -0500] rev 36764
debugwireproto: handle unimplemented util.poll() for Windows
This is the same logic used in sshpeer.doublepipe. It doesn't completely fix
test-ssh-proto{,-unbundle}.t ("read(-1) -> X" is changed to "read(X) -> X", the
order of some lines are changed, and abort messages seem to be missing), but it
cuts down a ton on the failure spew.
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:55:51 -0500] rev 36763
py3: byte-stringify test-blackbox.t
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:54:14 -0500] rev 36762
py3: byte-stringify blackbox-readonly-dispatch.py
# skip-blame because just adding some b''
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:50:35 -0500] rev 36761
py3: make blackbox-readonly-dispatch.py use ui instead of print()
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:48:17 -0500] rev 36760
py3: fix int formatting of "incoming changes" log
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:48:01 -0500] rev 36759
largefiles: use %d instead of %s to process ints
Differential Revision: https://phab.mercurial-scm.org/D2677
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:11:15 -0500] rev 36758
transaction: fix an error string with bytestr() on a repr()d value
Fixes test-rollback.t on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2674
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:23:10 -0500] rev 36757
py3: work around comparison between int and None in tagmerge
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:13:46 -0500] rev 36756
py3: do not mutate dict while iterating in tagmerge
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 16:01:18 -0500] rev 36755
py3: fix type of ui.configitems(ignoresub=True) result
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:53:10 -0500] rev 36754
py3: don't use str() to stringify pushloc
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:26:26 -0500] rev 36753
py3: byte-stringify test-config.t and test-config-env.py
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 15:24:45 -0500] rev 36752
py3: use startswith() instead of slicing to detect leading whitespace
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:47 -0500] rev 36751
archival: use py3 friendly replacements for chr() and long()
Differential Revision: https://phab.mercurial-scm.org/D2673
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:27 -0500] rev 36750
archival: ensure file mode for gzipfile is sysstr
Differential Revision: https://phab.mercurial-scm.org/D2672
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:06:10 -0500] rev 36749
archival: fix a missing r'' on a kwargs check
# skip-blame just an r prefix
Differential Revision: https://phab.mercurial-scm.org/D2671
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 16:05:44 -0500] rev 36748
py3: more passing tests (ten this time)
Differential Revision: https://phab.mercurial-scm.org/D2670
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 15:55:55 -0500] rev 36747
util: fix unsafe url abort with bytestr() on url
Differential Revision: https://phab.mercurial-scm.org/D2669
Matt Harbison <matt_harbison@yahoo.com> [Sun, 04 Mar 2018 15:16:42 -0500] rev 36746
xdiff: fix builds on Windows
This works on my ancient Fedora system too, without warnings. There are,
however, warnings about various 64 to 32 bit conversions on Windows that need to
be examined.
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:08:40 +0530] rev 36745
py3: use bytes() instead of str()
Differential Revision: https://phab.mercurial-scm.org/D2665
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:05:54 +0530] rev 36744
py3: use b"%d" instead of str() to convert integers to bytes
Differential Revision: https://phab.mercurial-scm.org/D2664
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 05 Mar 2018 01:03:23 +0530] rev 36743
py3: use util.forcebytestr to convert testedwith value to bytes
Bad extensions can put anything in testedwith so we should use util.forcebytestr
here.
Differential Revision: https://phab.mercurial-scm.org/D2663
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:33:59 +0530] rev 36742
py3: use pycompat.bytestr instead of str
Differential Revision: https://phab.mercurial-scm.org/D2648
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:40:21 -0800] rev 36741
setdiscovery: avoid a Yoda condition
Differential Revision: https://phab.mercurial-scm.org/D2646
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:40:11 -0800] rev 36740
setdiscovery: remove unnecessary sample size limiting
Both _takequicksample() and _takefullsample() already limit their
result to the request size, so there's no need to let the caller do
that again.
Differential Revision: https://phab.mercurial-scm.org/D2645
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:39:46 -0800] rev 36739
setdiscovery: remove initialsamplesize from a condition
It seems more direct to compare the actual sample size. That way we
can change the sample taken earlier in the code without breaking the
condition.
Differential Revision: https://phab.mercurial-scm.org/D2644
Martin von Zweigbergk <martinvonz@google.com> [Sun, 04 Mar 2018 07:37:08 -0800] rev 36738
setdiscovery: back out changeset 5cfdf6137af8 (issue5809)
As explained in the bug report, this commit caused a performance
regression. The problem occurs when the local repo has very many
heads. Before 5cfdf6137af8, we used to get the remote's list of heads
and if these heads mostly overlapped with the local repo's heads, we
would mark these common heads as common, which would greatly reduce
the size of the set of undecided nodes.
Note that a similar problem existed before 5cfdf6137af8: If the local
repo had very many heads and the server just had a few (or many heads
from a disjoint set), we would do the same kind of slow discovery as
we would with 5cfdf6137af8 in the case where local and remote repos
share a large set of common nodes.
For now, we just back out 5cfdf6137af8. We should improve the
discovery in the "local has many heads, remote has few heads" case,
but let's do that after backing this out.
Differential Revision: https://phab.mercurial-scm.org/D2643
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 13:04:12 -0500] rev 36737
hgweb: fix up trailing slash detection on Python 3
Fixes a couple of hgweb tests.
Differential Revision: https://phab.mercurial-scm.org/D2661
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 13:03:22 -0500] rev 36736
hgweb: convert req.form to bytes for all keys and values
This is just going to be a lot cleaner for our internals.
Differential Revision: https://phab.mercurial-scm.org/D2660
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:33:15 -0500] rev 36735
templater: show repr of string we're rejecting
I feel like this should make it a little easier to hunt down problems.
Differential Revision: https://phab.mercurial-scm.org/D2659
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:21:01 -0500] rev 36734
webutil: some %d instead of %s love on ints
Differential Revision: https://phab.mercurial-scm.org/D2658
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:17:02 -0500] rev 36733
py3: whitelist three more cases
Differential Revision: https://phab.mercurial-scm.org/D2657
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:53 -0500] rev 36732
archival: our filenames are bytes, not strs
Differential Revision: https://phab.mercurial-scm.org/D2656
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:37 -0500] rev 36731
archival: tar file modes need to be sysstrs
Differential Revision: https://phab.mercurial-scm.org/D2655
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 12:08:19 -0500] rev 36730
archival: fsdecode paths before passing to tar or zip objects
Both of these traffic in unicodes for filenames on Python 3, and
inspection of the tarfile module shows that it uses the filesystem
encoding, so fsdecode is the right choice.
Differential Revision: https://phab.mercurial-scm.org/D2654
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 05:15:24 +0530] rev 36729
py3: add b'' prefixes in tests/test-minirst.py
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2653
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:40:33 +0530] rev 36728
py3: make sure __repr__ returns a str
# skip-blame because just r'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2652
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:40:08 +0530] rev 36727
py3: make sure regular expressions are bytes
# skip-blame because just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2651
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 05:53:59 +0530] rev 36726
py3: use bytes instead of str to make sure we use bytes internally
Differential Revision: https://phab.mercurial-scm.org/D2650
Pulkit Goyal <7895pulkit@gmail.com> [Sun, 04 Mar 2018 22:37:41 +0530] rev 36725
py3: use util.forcebytestr instead of str to convert error messages
Differential Revision: https://phab.mercurial-scm.org/D2649
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 23:49:39 -0500] rev 36724
lock: block signal interrupt while making a lock file
On Windows where symlink isn't supported, util.makelock() could leave an empty
file if interrupted immediately after os.open(). This empty lock never dies
as it has no process id recorded.
ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
# an interrupt may occur here
os.write(ld, info)
os.close(ld)
This was a long-standing bug of TortoiseHg which runs a command-server and
kills it by CTRL_C_EVENT, reported by random Windows users.
https://bitbucket.org/tortoisehg/thg/issues/4873/#comment-43591129
At first, I tried to fix makelock() to clean up a stale lock file, which
turned out to be hard because any instructions may be interrupted by a
signal.
ld = None
try:
# CALL_FUNCTION # os.open(...)
# an interrupt may occur here
# STORE_FAST # ld = ...
ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
os.write(ld, info)
...
return True
except:
if ld:
...
os.unlink(pathname)
return False
So I decided to block signals by temporarily replacing the signal handlers
so makelcok() and held = 1 will never be interrupted.
Many thanks to Fernando Najera for investigating the issue.
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 09:40:12 -0500] rev 36723
fuzz: add some more docs about building/running fuzzers
Differential Revision: https://phab.mercurial-scm.org/D2635
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 11:49:33 -0500] rev 36722
util: also silence py3 warnings from codec module
Fixes warnings like this:
+ mercurial/util.py:2446: DeprecationWarning: invalid escape sequence '\d'
+ return codecs.escape_decode(s)[0]
Differential Revision: https://phab.mercurial-scm.org/D2642
Kyle Lippincott <spectral@google.com> [Thu, 15 Feb 2018 18:05:58 -0800] rev 36721
docs: small fixes for profiling.nested and the overall description
- profiling.nested defaults to 0, not 5
- profiling is not always done with lsprof
Differential Revision: https://phab.mercurial-scm.org/D2641
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:20:41 -0500] rev 36720
scmutil: fix oversight in b76248e51605c6 where I forgot to use msg
Thanks to Yuya for spotting my mistake.
Differential Revision: https://phab.mercurial-scm.org/D2636
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:23:07 -0500] rev 36719
hghave: remove unused "as ex" in exception block
I overlooked this when removing a debug print in another change.
Differential Revision: https://phab.mercurial-scm.org/D2637
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 18:33:10 -0500] rev 36718
tests: port test-log to Python 3
Required some porting to >>> inline Python instead of using heredocs
into $PYTHON.
Differential Revision: https://phab.mercurial-scm.org/D2621
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 19:12:47 -0500] rev 36717
py3: make gettext domain a system string
Yuya Nishihara <yuya@tcha.org> [Sun, 04 Mar 2018 07:03:50 -0500] rev 36716
templater: fix position of terminator character in error message
Since a template expression starts after the '{' character, the expression
should be considered to end immediately before the terminator '{'.
Augie Fackler <augie@google.com> [Sun, 04 Mar 2018 10:42:51 -0500] rev 36715
merge with stable
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 15:31:37 -0800] rev 36714
revsetlang: add a hint for more useful parse errors
This logic is largely based on the similar logic added to template error
messages in D2608 and D2609, but with a few tweaks based on how revsets
actually work.
Differential Revision: https://phab.mercurial-scm.org/D2619
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 11:07:46 -0800] rev 36713
setup: ignore extension load failures when finding working hg
Previously, `make local` would fail if any extension was not properly loading.
Differential Revision: https://phab.mercurial-scm.org/D2589
Matt Harbison <matt_harbison@yahoo.com> [Sat, 03 Mar 2018 00:35:59 -0500] rev 36712
profile: colorize output on Windows
Previously, the ANSI codes were printed to the screen, throwing off the
alignment. We could probably do this unconditionally, but it's kind of a hack,
so I figured I'd limit the scope.
Kevin Bullock <kbullock+mercurial@ringworld.org> [Sat, 03 Mar 2018 19:02:50 -0500] rev 36711
dispatch: don't clamp the range of the exit code twice
We already limit the range to (0, 255) in the call to sys.exit(). The
duplicated operation can't possibly be hurting us, but let's clean it up
to avoid confusion.
Matt Harbison <matt_harbison@yahoo.com> [Sat, 03 Mar 2018 23:29:40 -0500] rev 36710
bdiff: avoid pointer arithmetic on void*
MSVC 2008 complains:
mercurial/cext/bdiff.c(106) : error C2036: 'void *' : unknown size
mercurial/cext/bdiff.c(107) : error C2036: 'void *' : unknown size
Maybe it's a gcc extension?
https://stackoverflow.com/questions/37460579/error-c2036-void-unknown-size
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 19:26:30 -0500] rev 36709
fuzz: add a quick README to try and document how to test new fuzzers
Differential Revision: https://phab.mercurial-scm.org/D2633
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 18:58:13 -0500] rev 36708
fuzz: add a fuzzer for xdiff
Based entirely on the fuzzer for bdiff.
Differential Revision: https://phab.mercurial-scm.org/D2632
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:15 -0800] rev 36707
tests: add tests about diff quality
These show the differences between bdiff and xdiff.
Differential Revision: https://phab.mercurial-scm.org/D2604
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36706
run-tests: allow #require inside #if
Used by the next patch.
Differential Revision: https://phab.mercurial-scm.org/D2605
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36705
mdiff: add a config option to use xdiff algorithm
The `experimental.xdiff` will affect the default diffopts and make mdiff use
the xdiff algorithm for better diff quality.
Differential Revision: https://phab.mercurial-scm.org/D2603
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:14 -0800] rev 36704
bdiff: add a xdiffblocks method
This is similar to `bdiff.blocks`, but uses xdiff as the backend.
The indent heuristic is turned on by default since it has little overhead
and improves diff quality significantly.
Differential Revision: https://phab.mercurial-scm.org/D2602
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:39:11 -0800] rev 36703
xdiff: reduce indent heuristic overhead
Adds some threshold to avoid expensive cases, like:
```
#!python
open('a', 'w').write(" \n" * 1000000)
open('b', 'w').write(" \n" * 1000001)
```
The indent heuristic is O(N * 20) (N = 1000000) for the above case, and
makes diff much slower.
Before this patch (system git 2.14.2):
```
git diff --no-indent-heuristic a b 0.21s user 0.03s system 100% cpu 0.239 total
git diff --indent-heuristic a b 0.77s user 0.02s system 99% cpu 0.785 total
```
After this patch (git 2fc74f41, with xdiffi.c patched):
```
# with the changed xdiffi.c
git diff --indent-heuristic a b 0.16s user 0.01s system 90% cpu 0.188 total
git diff --no-indent-heuristic a b 0.18s user 0.01s system 99% cpu 0.192 total
```
Now turning on indent-heuristic has no visible impact on performance.
Differential Revision: https://phab.mercurial-scm.org/D2601
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 12:38:41 -0800] rev 36702
xdiff: add a bdiff hunk mode
xdiff generated hunks for the differences (ex. questionmarks in the
`@@ -?,? +?,? @@` part from `diff --git` output). However, bdiff generates
matched hunks instead.
This patch adds a `XDL_EMIT_BDIFFHUNK` flag used by the output function
`xdl_call_hunk_func`. Once set, xdiff will generate bdiff-like hunks
instead. That makes it easier to use xdiff as a drop-in replacement of bdiff.
Note that since `bdiff('', '')` returns `[(0, 0, 0, 0)]`, the shortcut path
`if (xscr)` is removed. I have checked functions called with `xscr` argument
(`xdl_mark_ignorable`, `xdl_call_hunk_func`, `xdl_emit_diff`,
`xdl_free_script`) work just fine with `xscr = NULL`.
Test Plan:
Will be tested in a later patch.
Differential Revision: https://phab.mercurial-scm.org/D2575
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 10:39:55 -0800] rev 36701
xdiff: remove patience and histogram diff algorithms
Patience diff is the normal diff algorithm, plus some greediness that
unconditionally matches common common unique lines. That means it is easy to
construct cases to let it generate suboptimal result, like:
```
open('a', 'w').write('\n'.join(list('a' + 'x' * 300 + 'u' + 'x' * 700 + 'a\n')))
open('b', 'w').write('\n'.join(list('b' + 'x' * 700 + 'u' + 'x' * 300 + 'b\n')))
```
Patience diff has been advertised as being able to generate better results for
some C code changes. However, the more scientific way to do that is the
indention heuristic [1].
Since patience diff could generate suboptimal result more easily and its
"better" diff feature could be replaced by the new indention heuristic, let's
just remove it and its variant histogram diff to simplify the code.
[1]: https://github.com/git/git/commit/433860f3d0beb0c6f205290bd16cda413148f098
Test Plan:
`gcc -fPIC *.c --shared -o xdiff.so` still builds.
Differential Revision: https://phab.mercurial-scm.org/D2573
Jun Wu <quark@fb.com> [Sat, 03 Mar 2018 10:39:43 -0800] rev 36700
xdiff: vendor xdiff library from git
Vendor git's xdiff library from git commit
d7c6c2369d7c6c2369ac21141b7c6cceaebc6414ec3da14ad using GPL2+ license.
There is another recent user report that hg diff generates suboptimal
result. It seems the fix to issue4074 isn't good enough. I crafted some
other interesting cases, and hg diff barely has any advantage compared with
gnu diffutils or git diff.
| testcase | gnu diffutils | hg diff | git diff |
| | lines time | lines time | lines time |
| patience | 6 0.00 | 602 0.08 | 6 0.00 |
| random | 91772 0.90 | 109462 0.70 | 91772 0.24 |
| json | 2 0.03 | 1264814 1.81 | 2 0.29 |
"lines" means the size of the output, i.e. the count of "+/-" lines. "time"
means seconds needed to do the calculation. Both are the smaller the better.
"hg diff" counts Python startup overhead.
Git and GNU diffutils generate optimal results. For the "json" case, git can
have an optimization that does a scan for common prefix and suffix first,
and match them if the length is greater than half of the text. See
https://neil.fraser.name/news/2006/03/12/. That would make git the fastest
for all above cases.
About testcases:
patience:
Aiming for the weakness of the greedy "patience diff" algorithm. Using
git's patience diff option would also get suboptimal result. Generated using
the Python script:
```
open('a', 'w').write('\n'.join(list('a' + 'x' * 300 + 'u' + 'x' * 700 + 'a\n')))
open('b', 'w').write('\n'.join(list('b' + 'x' * 700 + 'u' + 'x' * 300 + 'b\n')))
```
random:
Generated using the script in `test-issue4074.t`. It practically makes the
algorithm suffer. Impressively, git wins in both performance and diff
quality.
json:
The recent user reported case. It's a single line movement near the end of a
very large (800K lines) JSON file.
Test Plan:
Code taken as-is.
Differential Revision: https://phab.mercurial-scm.org/D2572
# no-check-commit for vendored code
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 14:30:21 -0800] rev 36699
templater: provide hint for multi-line templates with parse errors
Previously, we punted. Now we "rewrite" the template's newlines to r'\n' and
offset the hint appropriately.
Differential Revision: https://phab.mercurial-scm.org/D2609
Ryan McElroy <rmcelroy@fb.com> [Sat, 03 Mar 2018 14:23:40 -0800] rev 36698
templater: add hint to template parse errors to help locate issues
Previously, we would print the error name and location, but this isn't as
helpful as we can be. Let's add a hint that shows the location where we
encountered the parse error.
Differential Revision: https://phab.mercurial-scm.org/D2608
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:17:06 +0530] rev 36697
py3: use b"%d" to covert integer to bytes instead of str
Differential Revision: https://phab.mercurial-scm.org/D2618
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:16:33 +0530] rev 36696
py3: use bytes() instead of str()
Differential Revision: https://phab.mercurial-scm.org/D2617
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:15:54 +0530] rev 36695
py3: replace __str__ to __bytes__ in hgext/journal.py
Differential Revision: https://phab.mercurial-scm.org/D2616
Martin von Zweigbergk <martinvonz@google.com> [Wed, 31 Jan 2018 22:21:33 -0800] rev 36694
testrunner: add option to sort tests by previous run time
We currently estimate the time a test file will take to run by taking
its length and its extension into account (.py is assumed to be much
faster). On top of that, we have set of multipliers saying e.g. that
tests with "i18n" in the name are estimated to be 10 times slower than
other tests.
Since a1eff44c432b (tests: write recent run times to a file named
tests/.testtimes, 2016-01-04), we have a simpler way of estimating the
run time: simply read the previous time from .testtimes. Although we
haven't needed to adjust the multipliers since b4d7743e174a
(run-tests: add more scheduling weight hints, 2015-12-04), it's just
much simpler not to have to.
Perhaps more importantly than not having to maintain the multipliers
for core is that non-core users of the test runner cannot update the
multipliers.
0
1 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2 c c o i c p p r p p p c r p p p p p l p p p p p p p p p c p p p p p p s p p c p p c c g c c o g h g
3 o o b m o u u u u u u h e u u u u u a u u u u u u u u u o u u u u u u u u u h u u h h e o o b e e l
4 n n s p n s s n s s s e b s s s s s r s s s s s s s s s p s s s s s s b s s e s s e e n n m s n l o
5 t t o o v h h - h h h c a h h h h h g h h h h h h h h h y h h h h h h r h h c h h c c d v m o d p g
6 r r l r e - - t - - - k s - - - - - e - - - - - - - - - t - - - - - - e - - k - - k k o = a = o . .
7 i = e t r r r e c c c - e c c c c c f c c c c c c c c c r c c c c c c p c c - c c - - c p n o c . .
8 b a t s t a a s h h h p - h h h h h i h h h h h h h = h a h h h h h h o h h c h h c m - a d b . . .
9 - b e - - c c t e e e y c e e e e e l e e e e e e e c e c e e e e e e - e e o e e o o j t - s . . .
10 p o - c s e e s c c c 3 h c c c c c e c c c = = c c h = e c c c = c c s c c d c c n d a c t o . . .
11 e r c h v . . . k k k - e k k k k k s k k k o c k = e c - k k k c k k v k k e k k f u . h e l . . .
12 r = h e n . . . h h = c c = h h h = - h h = b h h a c o h = = = o h h n h h . = = i l . b m e . . .
13 f c e = - . . . = e l o k e e e e c u e = c s e = c k n e h d o n e = . = e . c h g e . o p t . . .
14 . h c l s . . . h = o m - x = a a o p = h h m c b l - v u g i b v a c . c = . h g . - . m l e . . .
15 . e k a o . . . g s g p r t r = = n d c g e a k u . h e r w r s e = o . h h . e w . i . b a - . . .
16 . c h r u . . . w u . a = e e s g v a o w c r - n . e r i e s o r h n . e t . c e . m . . t b . . .
17 . k e g r . . . e b . t s n v h e e t n e k k s d . l t s b t l t g v . c t . k b . p . . e u . . .
18 . - a e c . . . b r . . u s s e n r e v b - e h l . p - t - a e - w = . k p . - - . o . . . n . . .
19 . c d f e . . . d e . . b i e l d t . - e r b e . . s i s t t s e b . - - . p c . r . . . d . . .
20 . o s i . . . . i p . . r o t v o - . = f x - a 2 . . v c y e e v b u . p b . y o . t . . . l . . .
21 . m . l . . . . r o . . e n . e c s . r i e t n - . . n s m - . n - n . y a . f m . s . . . e . . .
22 . m . e . . . . . . . . p . . . - v . e l c e g f . . - . r r . - j d . l d . l m . . . . . - = . .
23 . i . s . . . . . . . . o . . . r n . b e u m . o . . s . e a . m s l . i - . a a . . . . . s i . .
24 . t . . . . . . . . . . - . . . o - . a l t p . r . . i . v c . o o e . n s . k n . . = . . t m . .
25 . . . . . . . . . . . . d . . . . e . s o e l . m . . n . . e . v n 2 . t e . e d . . = . . r p . .
26 . . . . . . . . . . . . e . . . . n . e g . a . a . . k . . . . e . - . . r . s s . . s . . i o . .
27 . . . . . . . . . . . . e . . . . c . - . . t . t . . . . . . . . . e . . v . . . . . t . . p r . .
28 . = . . . . . . . . . . p . . . . o . o . . e = . . . . . . . . . . x . . e . . . . . r . . . t . .
29 . m . . . . . . . . . . - . . . . d . b . = . r . . . . . . . . . . c . . r . . . . . i . . . . . .
30 . e . . . . . . . . . . n . . . . i . s . c . e . . . . . . . . . . h . . . . . . . . p . . . . . .
31 . r . . . . . . . . . . e . . . . n . o . o . n . . . . . . . . . . a . . . . . . . . . . . . . . .
32 . g . . . . . . . . . . s . . . . g . l . m . a . . . . . . . . . . n . . . . . . . . . . . . . . .
33 . e . . . . . . . . . . t . . . . . . e . m . m . . . . . . . . . . g . . . . . . = . . . . . . . .
34 . - . . . . . . . . . . e . . . . . . t . i . e . . . . . . . . . . e . . . . . . l . . . . . . . .
35 . c . . . . . . . . . . d . . . . . . e . t . - . . . . . . . . . . . . . . . . . f . . . . . . . .
36 . h . . . . . . . . . . - . . . . . . . . - . m . . . . . . . . . . . . . . . . . s . . . . . . . .
37 . a . . . . . . . . . . c . . . = . . . . i . e . . . . . . . . . . . . . . . . . . . . . . . . . .
38 . n . . . . . . . . . . h . . . h = . . . n . r . . . . . . . . . . . . . . . . . . . . . . . . . .
39 . g . . . . . . . . . . a . . . t c . . . t . g . . . . . . . . . . . . . . . . . . . . . . . . . .
40 = e . . . . . . . . . = n . . . t o . . . e . e . . . . . . . . . . . . . . . . . . . . . . . . . .
41 b d = . . . . . . . . h g . . . p n . . . r . 2 . . . . . . . . . . . . . . . . . . . . . . . . . .
42 o e b . . . . . . . . i e . . . s v . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43 o l o . . . . . . . . g . . . . . e . . = c . . . . = . . . . . . . . . . . . . . . . . . . . . . .
44 k e o . . . . . . . . h . . . . . r . . g t . . . . h . . . . . . . . . . . . . . . . . . . . . . .
45 m t k . . . . . . . . l . . . . . t . . r i . . . . o . . . . . . . . . . . . . . . . . . . . . . .
46 a e m . . . . . . . . i . . . . . - . . a v . . . . o . . . . . . . . . . . . . . . . . . . . . . .
47 r . a . . . . . . . . g . . . . . g . . f e . . = . k . . . . . . . . . . . . . . . . . . . . . . .
48 k . r . . . . . . . . h . . . . . i . . t . . . c . . . . . . . . . . . . . . . . . . . . . . . . .
49 s . k . . . . . . . . t . . . . . t . . . . . . h . . . . . . . . . . . . . . . . . . . . . . . . .
50 - . s . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . .
51 p . - . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . .
52 u . p . . . . . . . . . . . . . . . . . . . . . k . . . . . . . . . . . . . . . . . . . . . . . . .
53 s . u . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . .
54 h . s . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . = . . . . . . . . . . . . . . . .
55 p . h . . . . . . . . . . . . . . . . . . . . . l . . . . . . . . = . . . . . . . . . . . . . . . .
56 u . p . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . r . . . . . . . . . . . . . . . .
57 l . u . . . . . . . . . . . . . . . . . . . . . n . . . . . . . . e . . . . . . . . . . . . . . . .
58 l . l . . . . . . . . . . . . . . . . . . . . . g . . . . . . . . v . . . . . . . . . . . . . . . .
59 . . l . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . s . . . . . . . . . . . . . . . .
60 . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . e . . . . . . . . . . . . . . . .
61 . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . t . . . . . . . . . . . . . . . .
62 . . . . . . . . . . . . . . . . . . . . . . . . n . . . . = . . . 2 . . . . . . . . . . . . . . . .
63 . . . . . . . . . . . . . . . . . . . . . . . . v . . . . h . . . . . . . . . . . . . . . . . . . .
64 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . g . = . . . . . . . . . = . . . . . . .
65 . . . . . . . . . . . . . . . . . . . . . . . . r . . . . w = . b . . . . . . . . . c . . . . . . .
66 . . . . . . . . . . . . . . . . . . . . . . . . t . . . . e l . o . . . . . . . . . l . . . . . . .
67 . . . . . . . . . . . = . . . . . . . . . . . . - . . . . b a . o . . . . . . . . . o . . . . . . .
68 . . . . . . . . . . . k . . . . . . . . . . . . h . . . . - r . k . . . . . . . . . n . . . . . . .
69 . . . . . . . . . . . e . . . . . . . . . . . . g . . . . d g . m . . . . . . . . . e . . . . . . .
70 . . . . . . . . . . . y . . . . . . . . . . . . - . . . . i e . a . . . . . . . = . . . . . . . . .
71 . . . . . . . . . . . w . . . . . . . . . . . . s . . . . f f . r . . . . . . . c . . . . . . . . .
72 . . . . . . . . . . . o . . . . . . . . . . . . v . . . . f i . k . . . . . . . o . . . . . . . . .
73 . . . . . . . . . . . r . . . . . . . . . . . . n . . . . s l . s . . . . . . . m . . . . . . . . .
74 . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . e . . . . . . . . . m . . . . . . . . .
75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . i . . . . . . . . .
76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . t . . . = . . . = .
77 . . . . = . . . . . . . . . . . . . . . . . . . . . . . . . m . . . . . . = . . - . . . c . . . r .
78 . . . . b . . . . . . . . . . . . . . . . . . . . . . . . . i . . . . . . m . . a . . . o . . . e .
79 . . . . r . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . e . . m . . . n . . . v .
80 . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . r . . e . . . v . . . e .
81 . . . . n . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . . g . . n . . . e . . . r .
82 . . . . c . . . . . . . . . . . . . . . . . . . = m . . . . . . . . . . . e . . d . . . r . . . t .
83 . . . . h . . . . . . . . . . . . . . . . . . . p q . . . . . . . . . . . - . = . . . . t . . . . .
84 . . . . e . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . f . u . . . . - . . . . .
85 . . . . s . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . o . p . . . . s . . . . .
86 . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . r . g . . . . v . . . . .
87 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . c . r . . . . n . . . . .
88 . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . e . a . . . . - . . . . .
89 . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . d . . . . b . . . . .
90 . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . e . . . . r . . . . .
91 . . . . . . . . . . . . . . . . . . . . . . . . x . . . . . . . . . . . . . . - . . . . a . . . . .
92 . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . r . . . . n . . . . .
93 . . . . . . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . . . e . . . . c . . . . .
94 . . . . . . . . = . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . p . . . . h . . . . .
95 . . . . . . . . c . . . . . . . . . . . . . . . n . . . . = . . . . . . . . . o . . . . e . . . . .
96 . . . . . . . . o . . . . . . . . . . . . . . . g . . . . g . . . . . . . . . . . . . . s . . . . .
97 . . . . . . . . m . . . . . . . . . . . . . . . e . . . . e . . . . . . . . . . . . . . . . . . . .
98 . . . . . . . . m . . . . . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . .
99 . . . . . . . . a . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . .
100 . . . . . . . . n . . . . . . . . . . . . . . . . . . . . o . . . . . . . . = . . . . . . . . . . .
101 . . . . . . . . d . . . . = . . . . . . . . . . . . . . . c . . . . . . . . m . . . . . . . . . . .
102 . . . . . . . . s . . . . s . . . . . . . . . . . . . . . - . . . . . . . . e . . . . . . . . . . .
103 . . . . . . . . e . . . . u . . . . . . . . . . . . . . . d . . . . . . . . r . . . . . . . . . . .
104 . . . . . . . . r . . . . b . . . . . . . . . . . . . . . e . . . . . . . . g . . . . . . . . . . .
105 . . . . . . . . v . . . . r . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . .
106 . . . . . . . . e . . . . e . . . . . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . .
107 . . . . . . . . r . . . . p . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . .
108 . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . .
109 . . . . . . . . . . . . . - . . = . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . .
110 . . . . . . . . . . . . . g . . t . . . . . . . . . . . . . . . . . . . . . l . . . . . . . . . . .
111 . . . . . . . . . . . . . i . . r . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . .
112 . . . . . . . . . . . . . t . . e . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . .
113 . . . . . . . . . . . . . . . . e . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . .
114 . . . . . . . . . . . . . . . . m . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . .
115 . . . . . . . . . . . . . . . . a . . . . . . . . . . . . g . . . . . . . . . . . . . . . . . . . .
116 . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
117 . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
118 . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
119 . . . . . . . = . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . .
120 . . . . . . . t . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . .
121 . . . . . . . a . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . t . . . . = . . . . .
122 . . . . . . . g . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . . . . c . . . . .
123 . . . . . . . s . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . a . . . . o . . . . .
124 . . . . . . . . . . . . . . . . . . . . . h . . . . . . . . . . . . . . . . . n . . . . n . . . . .
125 . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . s . . . . v . . . . .
126 . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . p . . . . e . . . . .
127 . . . . . . . . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . l . . . . r . . . . .
128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . . . . t . . . . .
129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . . . . . . . . .
130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . .
131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
134 . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135 . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
136 . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
137 . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
138 . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
139 . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140 . . . . . . . . . . . . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
141 . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142 . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
143 . . . . . . . . . . . . f . . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . .
144 . . . . . . . . . . . . i . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . .
145 . . . . . . . . . . . . l . . . . . . . . . . . . . . h . . . . . . . . . . . . . . . . . . . . . .
146 . . . . . . . . . . . . e . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . .
147 . . . . . . . . . . . . m . . . . . . . . . . . . . = s . . . . . . . . . . . . . . . . . . . . . .
148 . . . . . . . . . . . . a . . . . . . . . . . . . . e e . . . . . . . . . . . . . . . . = . . . . .
149 . . . . . . . . . . . . p . . . . . . . . . . . . . n s = . . . . . . . . . . . . . . . b . . . . .
150 . . . . . . . . . . . . . . . . . . . . . . . . . . c . h . . . . . . . . . . . . . . . u . . . . .
151 . . . . . . . . . . . . . . . . . . . . . . . . . . o . g . . . . . . . . . . . . . . . n . . . . .
152 . . . . . . . . . . . . . . . . . . . . . . . . . . d . w . . . . . . . . . . . . . . . d . . . . .
153 . . . . . . . . . . . . . . . . . . = . . . . . . . i . e . . . . . . . . . . . . . . . l . . . . .
154 . . . . . . . . = . . . . . . . . . w . . . . . . . = . b . . . . . . . . . . . . . . . e . . . . .
155 . . . . . . . . = . . . . . . . . . a . . . . . . . m . . . . . . . . . . . . . . . . . . . . . . .
156 . . . . . . . . r . . . . . . . . . l . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . .
157 . . . . . . . . e . . . . . . . . . k . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . .
158 . . . . . . . . b . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . .
159 . . . . . . . . a . . . . . . . . . . . . . . . . . p . . . . . . . . . . . . . . . . . . . . . . .
160 . . . . . = . . s . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . .
161 . . . . . b . . e . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . .
162 . . . . = u . . - . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . .
163 . . . . = n . . s . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . .
164 . . . . c d . . c . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . .
165 . . . . o l . . e . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . .
166 . . . . m e . . n . . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . . . . . . . . . .
167 . . . . m 2 = . a . . . . . . . . . . . . . . . . . f . . . . . . . . . . . . . . = . . . . . . . .
168 . . . . i - i . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g . . . . . . . .
169 . . . . t r m . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . .
170 . . . . . e p . o . . . . . . . . = . . . . . . . . . . . . . . . . . . . . . . . n . . . . . . . .
171 . . . . . m o . - . . . . . . . . c . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . . .
172 . . . . . o r . g . . . . . . . . l . . . . . . . . . . . . . . . . . . . . . . . r . . . . . . . .
173 . . . . . t t . l . . . . . . . . o . . . = . . . . . . . . . . . . . . . . . . . a . . . . . . . .
174 . . . . . e - . o . . . . . . . . n . . . m . . . . . . . . . . . . . . . . . . . l . . . . . . . .
175 . . . . . - g . b . . . . . . . . e . . . q . . . . . . . . . . . . . . . . . . . d . . . . . . . .
176 . = . . . c i . a . . . . . . . . b . . . - . . . . . . . . . . . . . . . . . . . e . . . . . . . .
177 . i . . . h t . l . . . . . . . . u . . . h . . . . . . = . . . . . . . . . . . . l . . . . . . . .
178 . 1 . . . a . . . . . . . . . . . n . . . e . . . . . . b . . . . . . . . . . . . t . . . . . . . .
179 . 8 . . . n . . . . . . . . . . . d . . . a . . . . . . i . . . . . . . . . . . . a . . . . . . . .
180 . n . . . g . . . . . . . . . . . l . . . d . . . . . . s . . . . . . . . . . . . . . . . . . . . .
181 . . . . . e . . . . . . . . . . . e . . . e . . . . . . e . . . . . . . . . . . . . . . . . . . . .
182 . . . . . g . . . . . . . . . . . s . . = r . . . . . . c . . . . . . . . . . . . . . . . . . . . .
183 . . . . . r . . . . . . . . . . . . . . o - . . . . . . t . . . . . . . . . . . . . . . . . . . . .
184 . . . . . o . . . . . . . . . . . . . . b f . . . . . . 2 . . . . . . . . . . . . . . . . . . . . .
185 . . . . . u . . . . . . . . . . . . . . s r . . = . . . . . . . . . . . . . . . . . . . . . . . . .
186 . . . . . p . . . . . . . . . . . . . . o o . . s . . . . . . . . . . . . . . . . . . . . . . . . .
187 . . . . . . . . . . . . . . . . . . . . l m . . s . . . . . . . . . . . . . . . . . . . . . . . . .
188 . . . . . . . . . . . . . . . . . . . . e . . . h . . . . . . . . . . . . . . . . . . . . . . . . .
189 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190 . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
191 . . . . . . . . . . . . . . . . . . . . - . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192 . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193 . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194 . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
195 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . = . . . . . . . . . . . . . .
196 . . . . . . . . . . . . . . . . . . . . r . . . . . . . . . . . . . . t . . . . . . . . . . . . . .
197 . . . . . . . . . . . . . . . . . . . . i . . . . . . . . . . . . . . r . . . . . . . . . . . . . .
198 . . . . . . . . . . . . . . . . . . . . b . . . . . . . . . . . . . . e . . . . . . . . . . . . . .
199 . . . . . . . . . . . . . . . . . . . . u . . . . . . . . . . . . . . e . . . . . . . . . . . . . .
200 . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . . d . . . . . . . . . . . . . .
201 . . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . i . . . . . . . = . . . . . .
202 . . . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . s . . . . . . . a . . . . . .
203 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . = n . . . . . .
204 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . b n . . . . . .
205 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = v . . . . . . i o . . . . . .
206 . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h e . . . . . . s t . . . . . .
207 . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g r . . . . . . e a . . . . . .
208 . u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . w y . . . . . = c t . . . . . .
209 . b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . . . . . n t e . . . . . .
210 . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . . . . o . . . . . . = .
211 . e . . . . . . . . . . . . . . = . . . . . . . . . . . . . . . . . - . . . . . . t . . . . . . m .
212 . p . . . = . . . . . . . . . . p . = . . . . . . . . . . . . . . . a . . . . . . i . . . . . . q .
213 . o . . . r . . . . . . . . . . u p . . . . . . . . . . . . . . . n . . . . . . f . . . . . . - .
214 . - . . . e . . . . . . . . . . s = u . . . . = . . . . . . . . = = n . . . . . . y . . . . . . h .
215 . r . . . m . . . . . . . . . . h c l . . . . d . . . . . . . . s o o . . . . . . . . . . . . . e .
216 . e . . . o . . . . . . . . . . - o l . . . . e . . . . . . . . s b t . . . . . . . . . . . . . a .
217 . c . . . v . . . . . . . . . . w n - . . . = v . . . = . . . . h s a . . . . . . . . . . . . . d .
218 . u . . . e . . . . . . . . . . a v p . . . h e . . . b . . . . - o t . . . . . . . . . . . . . e .
219 . r . . . . . . . . . . . . . . r e u = . . t l . . . a . . . . b l = . . . . . . . . . . . . . r .
220 . s . . . . . . . . . . . . . . n r l r . . t - . . . c . . . . u e h . . . . . . . . . . . . . - .
221 . i . . . . . . . . . . . . . . . t l e . . p w . . . k . . . . n t g . . . . . . . . . . . . . d .
222 . o . . . . . . . . . . . . . . . - - b . . - a . . . o . . . . d e w . . = . . . . . . . . . . a .
223 . n . . . . . . . . . . . . . . . s c a . . b r . . . u . . . . l - e . . s . . . . . . . . . . t .
224 . . . . . . . . . . . . . . . . . v o s . . u n . . . t . . . . e d b . . e . . . . . . . . . . e .
225 . . . . . . . . . . . . . . . . . n r e . . n i . . . . . . . . 1 i = . . t . . . . . . . . . . . .
226 . . . . . . . . . . . . . . . . . - r - . . d n . . . . . . . . . v c . . d . . . . . . . . . . . .
227 . . . . . . . . . . . . . . . . . s u c . . l g . . . . . . . . . e l . . i . . . . . . . . . . . .
228 . . . . . . . . . . . . . . . . . t p o . . e s . . . . . = . . . r o . . s . . . . . . . . . . . .
229 . . . . . . . . . . . . . . . . . a t l . . 1 = . . . . . c . . . g n . . c . . . . . . . . . . . .
230 . . . . . . . . . . . . . . . . . r i l . . . h . . . . . l . . . e e . . o . . . . . . . . . . . .
231 . . . . . . . = . . . = . . . . . t o a . . . i . . . . . o . . . n - . . v . . . . . . . . . . . .
232 . . . . . . . m . . . w . . . . . r n p . . . s . . . . . n . . . t u . . e . . . . . . . . . . . .
233 . . . . . . . q . . . i . . . . . e . s . . . t . . . . . e . . . . n . . r . . . . . . . . . . . .
234 . . . . . . . - . . . r . . . . . v . e . . . e . . . . . - . . . . c . . y . . . . . . = . . . . =
235 . . . . . . = s . . . e . . . . . . = . . . . d . . . . . u . . . . o . . . . . . = . . o . . . . u
236 . . . . . . l u . . . p . . . . . . p . . . . i . . . . . n . . . . m . . . . . . h . . b . . . . p
237 . . . . . . a b . . . r . . . . . . r . . . . t . . . . . c . . . . p . . . . . . i . . s . . = . d
238 . . . . . . r r . . . o . . . . . . o . . . . - . . . . . o . . . . r . . . . . . s . . h . . a . a
239 . . . . . . g e . . . t . . . . . . g . . . . o . . . . . m . . . . e . . . . . . t . . i . . l . t
240 . . . . . . e p . . . o . . . . . = r . . . . b . . . . . p . . . . s . . . . . . e . . s . . i . e
241 . . . . . . f o . . . . . . . . . a e . . . . s . . . . . r . . . . s . . . . . . d . . t . . a . -
242 . . . . . . i . . . . . . . . . . r s . . . . o . . . . . e . . . . e . . . . . . i . . o . . s . b
243 . . . . . . l . . . . . . . . . . c s . = . . l . . . . . s . . . . d . . . . . . t . . r . . . . r
244 . . . . . . e . . . . . . . . . . h . . g . . e . . . . . s . . . . . . . . . . . - . . y . . . . a
245 . . . . . . s . . . . . . . . . . i . . e . . t . . . . . e . . . . . . . . . . . a . . . . . . . n
246 . . . . . . - . . . . . . . . . . v . . t . . e . . . . . d . . . . . . . . . . . r . . . . . . . c
247 . . . . . . w . . . . . . . . . . e . . b . . . . . . . . . . . . . . . . . . . = g . . . . . . . h
248 . . . . . . i . . . . . . . . . . . = . u . . . . . . . . . . . . . . . . . . . g u . . . . . . . e
249 . . . . . . r . . . . . . . . . . . s . n . . . . . . . . . . . . . . . . . . . l m . . . . . . . s
250 . . . . = . e . . . . . . . . . . . t . d . . . . . . . . . . . . . . . . . . . o e . . . . . . . .
251 . . . . m . p . . . . . . . . . . . a . l . . . . . . . . . . . . . . . . . . . b n . . . . . . . .
252 . . . . e . r . . . . . . . . . . . t . e . . . . . . . . . . . . . . . . . . . a t . . . . . . . .
253 . = . . r . o . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . . . . l s . . . . . . . .
254 . r . . g . t . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . .
255 . e . . e . o . . . . = . . . . . . - . . . . . . . . . . . . . . . . . = . . = p . . . . . . . . .
256 . n . . - . . . . . . b . . . . . . c . . . . . . . . . . . . . . . . . l . = c t . . . . . . . . .
257 . a . . c . . . . . . l . . . . . . o . . . . . . . . . . . . . . . . . o . c e s . . . . . . . . .
258 . m . . r . . . . . . a . . . . . . l . . . . . . . . . . . . . . . . . g . o n . . . . . . . . . .
259 . e . . i . . . . . . c . . . . . . o . = . . . . . . . . . . . . . . . - . n s . . . . . . . . . .
260 . . . . s . . . . . . k . . . . . . r . l . . . . . . . . . . . . . . . l . v o . . . . . . . . . .
261 . . . . s . . . . . . b . . . . . . . . f . . . . . . . . . . . . . . . i . e r . . . . . . . . . .
262 . . . . - . . . . . . o . . . . . . . . c . = . . . . . . . . . . . . . n . r . . . . . . . . . . .
263 . . . . c . . . . . . x . . . . . . . . o . m . . . . . . . . . . . . . e . t . . . . . . . . . . .
264 . . . . r . . . . . . . . . . . . . . . n . e . . . . . . . . . . . . . r . - . . . . . . . . . . .
265 . . . . o . . . . . . . . . . . . . . . v . r . . . . . . . . . . . . . a . h . . . . . . . . . . .
266 . . . . s . . . . . . . . . . . . . . . e . g . . . . . = . . . . . . . n . g . . . . . . . . . . .
267 . . . . s . . . . . . . . . . . . . . . r . e . . . . . f . . . . . . . g . - . . . . . . . . . . .
268 . . . . . . . . . . . . = . . . . . . . t . - . . . . e . . . . . . . e . s . . . . . . . . . . .
269 . . . . . . . . . . . . h . . . . . . . . . t . = . . . t . . . . . . . . . i . . . . . . . . . . .
270 . . . . . = . . . . . . i . . . . . . . . . y . i . . . c . . . . . . . . . n . . . . . . . . . . .
271 . . . . . c . . = . . . s . . . . . . . . . p . n . . . h . . . . . . . . . k . . . . . . . . . . .
272 . . . . . l . . f . . . t . . . . . . . . . e . c . . . . . . . . . . . . . . . . . . . . . . . . .
273 . . . . . o . . i . . . e . . . . . . . . . s . o . . . . . . . . . . . . . . . . . . . . . . . . .
274 . . . . . n . . l . . . d . . . . . . . . . . . m . . . . . . . . . . . . . . . . . . . . . . . . .
275 . . . . . e . . e . = . i . . . . . . . . . . . i . . . . . . . . . . . . . . . . . . . . . . . . .
276 . . . . . - . . s . e . t . . . . . . . . . . . n . . . . . . . . . . = . . . . . . . . . . . . . .
277 . . . . . p . . e . o . - . . . . . . . . . . . g . . . . . . . . . . r . . . . = . . . . . . . . .
278 . . . . . u . . t . l . c . . . . . . . . . . . - . . . . . . . . . . o . . . . m . . . . . . . . .
279 . . . . . l . . . . . . o . . . . . . . . . . . o . . . . . . . . . . l . . . . q . . . . . . . . .
280 . . . . . l . . . . . . m . . . . . . . . . . . u . . . . . . . . . . l . . . . - . . . . . . . . .
281 . . . . . = . . . . . . m . . . . . . . . . . . t . . . . . . . . . . b . . . . s . . . . . . . . .
282 . . . . . e . . . . . . u . . . . . . . . . . . g . . . . . . . . . . a . . . . u . . . . . . . . .
283 . . . = . x . . . . . . t . . . . . . . . . . . o . . . . . . . . . = c . . . . b . . . . . . . . .
284 . . . h . t . . . . . . e . . . . . . . . . . . i . . . . . . . . . n k = . . . r . . . . . . . . .
285 . . . i . d . . . . . . . . . . . . . . . . . . n . . . . . . . . . e . f . . . e . . . . . . . . .
286 . . . s . i . . . . . . . . . . . . . . . . . . g . . . . . . . . . w . n . . . p . . . . . . . . .
287 . . . t . f . . . . . = . . . . . . . . . . . . . . . . . . . . . . b . c . . . = . . . . . . . . .
288 . . . e = f . . . . . h . . . . . . . . . . . . . . . . . . . . . . r . a . . . g . . . . . . . . .
289 . . . d h . . . . . . i . . . . . . . . . . . . . . . . . = . . . . a . c . . . i . . . . . . . . .
290 . . . i g . . . . . . s . . . . . . . . . . . . . . = . . l . = . . n . h . . . t . . . . . . . . .
291 . . . t w . . . . . . t . . . . . . . . . . . . . . s . . f . m . . c . e . . . - . . . . . . . . .
292 . . . - e . . . . . . e . . = . . . . . . . . . . . h . . s . e . . h . . . . . e . . . . . . . . .
293 . . . f b . . . . . . d . . b . . . . . . . . . . . a . . - . r . . . . . . . . x . . . . . . . . .
294 . . . o = . . . . . . i . . u . . . . . . . . . . . r . . l . g = . . . . . . . p . . . . . . . . .
295 . . . l r . . . . . . t . . n . . . . . . . . . . . e . . a . e s . . . . . . . o . . . . . . . . .
296 . . . d e . . . . . . - . . d . . . . . . . . . . . . . . r . 1 t . . . . . . . r . . . . . . . . .
297 . . . . b . . . . . . e . . l . . . . . . . . . . . . . . g = . a . . . . . . . t . . . . . . . . .
298 . . . . a . . . . . . d . . e . . . = . . . . . . . . . . e = . t . . . . . . . . . . . . . . . . .
299 . . . . s . . . . . . i . . 2 . . . r . . . . . . . . . . f s . u . . . . . . . . . . . . . . . . .
300 . . . . e . . . . . . t . . - . . . e . . . . . . . . . . i p . s . . . . . . . . . . . . . . . . .
301 . . . . - . . . . . . . . . m . . . b . . . . . . . . . . l l . . . . . . = . . . . . . . . . . . .
302 . . . . c . . . . . . . . . u . . . a . . . = . . . . . . e i . . . . . . s . . . . . . . . . . . .
303 . . . . o . . . . . . . . . l . . . s . . . m . . . . . . s t . . . . . . p . . . . . . . . . . . .
304 . . . . n . . . . . . . . . t . . . e . . . q . . . . . . . . . . . . . . l . . . . . . . . . . . .
305 . . . . f . . . . . . . . . i . . . - . . . - . . . . . . . . . . . . . . i . . . . . . . . . . . .
306 . . . . l . . . . . . . . . p . . . n . . . g . . . . . . . . . . . . . . t . . . . . . . . . . . .
307 . . . . i . . . . = . . . . l . . . e . . . u . = . . . . . . . . . . . . . . . . . . . . . . = . .
308 . . . . c . . . . d . . . . e . . . w . . . a . c . . . . . . . . . . . . . . . . = . . . . . r . .
309 . . . . t . . . . i . . . . - . . . a . = = r . o . . . . . . . . . . . . . . . . u . . . . = e . .
310 = . . . s . . . . f . . . . c . . . n . v i d . n . . . . . . . . . . . = . . . . n . . . . r b . .
311 r . . . . . . . . f . . . . h . . . c . e s s . v . . . . . . . . . . . r . . . . c . . . . e a . .
312 e . . . . . . . . - . . = . a . . = e . r s . . e . . . . . . . . . . . e . . . . o . . = . b s . .
313 b . . . . . = . . c . . h . n . . h s . i u . . r . . . . . . . . . . . s . . . . m . . m . a e . .
314 a . . . . . d . . o . . g . g . . a t . f e . = t . . . . . . . . . . . o . . . . m . . q . s - . .
315 s . . . . . e . . l . . h . = . . r o . y 3 . r - . . . . . . . . . . . l . . . . i . . - . e a . .
316 e . = . . . b . . o . . a . r . . d r . . 0 . e s . . . . . . . . . . . v . . . . t . . q . - b . .
317 - . e . . . u . . r . . v . e . . l . . . 8 . b v . . . . . . . . . . . e . . . . . . . p . p o . .
318 i . x . . . g . . . . . e . b . . i . . . 4 . a n . . . . . . . . . . . . . . . . . . . u . a r . .
319 n . c . . . c . . . . . . . a . . n . . . . . s - . . . . . . . . . . . . . . . . . . . s . r t . .
320 t . h . . . o . . . . . . . s . . k . . . . . e t . . . . . . . . . . . . . = . . . . . h . a . . .
321 e . a . . . m . . . . . . . e . . s . . . . . - a . . . . . . . . . . . . . q . . . . . - . m . . .
322 r . n . . . m . . . . . . . - . . . . . . . . p g . . . . . . . . . . . . . r . . . . . f . e . . .
323 r . g . . . a . . . . . . . d . . . . . . . . u s . . = . . . . . . . . . . e . . . = . a . t . . .
324 u . e . . . n . . . . . . . e . . . . . . . . l . . . s . . . . . . . . . . c . . . b . i . e . . .
325 p . - . . . d . . . . . . . s . . . . . . . . l . . . p . . . . . . . . . . o . . . u = l . r . . .
326 t . o . . . s . . . . . . . t . . . . . . . . . . . . a . . . . . . . . . . r . . . n c . . s . . .
327 i . b . . . . . . = . . . . . . . . . . . . . . . = . r . . . . . . . . . . d . . . d o . . . . . .
328 o . s . . . . . . i . . . . . . . . . . . . . . . p . s . = . . . . . . . . . . . . l m . . . . . .
329 n . m . . . . . . m . . . . . = . . . . . . . . . a . e . l . . . . . . . . . . . . e p . . . . . .
330 s . a . . . . . . p . . . . . l . . . . . . . . . g . . . f . . . . . . . . . . . . - l . . . . . .
331 . . r . . . . . . o . . . . . f . . . . . . . . = e . . . s . . . . . . . . . . . . r e . . . . . .
332 . . k . = . . . . r . . . . . s . . . . . . . . t r . . . - = . . . . . . . . . . . . t . . . . . .
333 . . e . r . . . . t . . . . . - . . . . . . . . r . . . . s p . . . . . . . . . . . . i . . . . . .
334 . . r . e . . . . - . . . . . s . . . . . . . . e . . . . e u . . . . = . . . . . . . o . . . . . .
335 . . s . b . . . . b . = . . . e . . . = = . . . e . . . . r s . . . . a . . = . . . . n . . . . . .
336 . . - . a . . . . y . i . . . r . . . r a . . . d . . . . v h . . . . m . . p . . . . . . . . . . .
337 . . c . s . . . . p . n . . . v . . . e m . . . i . . . . e . . . . . e . . a . . . . . . . . . . .
338 . . a . e . . . . a . s . . . e . . . b e . . . s . . . . . . . . . . n . . r . . . . . . . . . . .
339 . . s . - . . . . s . t . . . . . . . a n . . . c . . . . . . . . . . d . . s . . . . . . . . . . .
340 . . e . n . . . . s . a . . . . . . . s d . . . o . . . . . . . . . . . . . e . . . . . . . . . . .
341 . . - . a . . . . . . l . . . . . . . e . . . . v . . . . . . . . = . . . = - . . . . . . . . . . .
342 . . A . m . . . . . . l . . . . . . . - . . . . e . . . . . . . . m . . . h d . . . . . . . . . . .
343 . . 1 . e . . . . . . . . . . . . . . c . . . . r . = . . . . . . q . . . i a . . . . = . . . . . .
344 . . . . d . . . . . . . . . . . . . . a . . . . y . g . . . . . . - . . . s t . . . . g . . . . . .
345 . = . . - . . . . . . . . . . . . . . c . . . . - . e . = . . . . q . . . t e . . . . e . . . . . .
346 . g . . b . . . . . . . . . . . . . . h . . . . l . n . h = . . . r . . . e . . . . . n . . . . . .
347 . e . . r . . . . . . . . . . . . . . e . . . . e . d . i c . . . e . . . d . . . . . d . . . . . .
348 . n . . a . . . . . . . . . . . = . . . . . . . g . o . s o . . . f . . . i . . . . . o . . . . = .
349 . d . . n . . . . . . . . . . . w . . . . . . . a . c . t m . . . r . . . t . . . . . c . . . . e .
350 . o . . c . . . . . . . . . . . i . . . . . . . c . - . e m . . . e . . . - . . . . . - . . . . x .
351 . c . . h . . . . . . . . . . . n . . . . . . . y . z . d i . . . s . . . f . . . . . p . . . . c .
352 . - . . e . . . . . . . . . . . 3 . . . . . . . . . h . i t . . . h . . . o . . . . . t . . . . h .
353 . z . . s . . . . . . . . . . . 2 . . . . . . . . . _ . t - . . . . . . . l . . . . . _ . . . . a .
354 . h . . . = . . . . . = . . . . t . . . . . . . . . C . - i . . . . . . . d . . = . . B . . . . n .
355 . _ . . . g . . . . = g . . . . e . . . . . . . . . N . n n . . . . . . . - . . g . . R . . . . g .
356 . T . . . e . . . . g e . . . . x . . . . . . . . . . . o t . . . . . . . n . . e . . . . . . . e .
357 . W . . . n . . . . e n . . . . t . . . . . . . . . . . n e . . . . . . = o . . n . . . . . . . - .
358 . . . . . d . . . . n d . . . . . . . . . . . . . . . . - r . = . . . . g n . . d . . . . . . . o .
359 . . . . . o . . . . d o . . . . . . . . . . . . . . . . c a . g . . . . e - . . o . . . . . . . b .
360 . . . . . c . . . . o c . . . . . . . . . . . . . . . . o c . e . . . . n c . = c . . . . . . . s .
361 . . . . . - = . . . c - . . . . . . . . . . . . . . . . m t . n . . . . d o . g - . . . . . . . m .
362 . . . . . r m . . . - d . . . . . = = . . . . . . . . . m i . d . . . . o m . r e . . . . . . . a .
363 . . . . . u q . . . s a . . . . . e = . . . . . . . = . u v . o . . . . c m . e l . . . . . . . r .
364 . . = . . . - . . . v . . . . . . x m . . . . . . = b . t e . c . . . . - u . p . . . . . . . . k .
365 . . d . . . q . . . . . . . . . . c q . . . . . . g h . e - . - . . . . f t . . . . . . . . . . e .
366 = . i . . . r . . . . . . . . . . h - . . . . . . i e . . c . i . . . . r e . . . . . . . . . . r .
367 l . f . . . e . . . . . . . . . . a q . . . . . . t a . . u . t . . . . . . . . . . . . . . . . s .
368 a . f = . . f . . . . . . . . . . n n . . . . . . h d . . r . . . . . . . . . . . . . = . . . . - .
369 r . - r . . r . . . . . . . . . . g e . . . . . . e s . . s . . . . = . . . . . . . . c . . . . c .
370 g = i e . . e . . . . . . . . . . e w . . . . = . l . . . e . . . . e . . . . . . . . l . . . . a .
371 e u g b . . s . . . . . . . . . . - . . . . . s . p . . . s . . . . n . . . . . . . . o . . . . s .
372 f r n a . . h . . . . . . . . . . o . . . . . t . . . . . . . . . . c . . . . . . . . n . . . . e .
373 i l o s . . - . . . . . . . . . . b . . . . . a . . . . . . . . . . o . . . . . . . . e . . . . - .
374 l - r e . . = . . . . . . . . . . s . . . . . t . . . . . . . . . . d . . . . . . . . - . . . . A .
375 e r e - . . m . . . . . . . . . . m . . . . . i . . . . . . . . . . i . . . . . . . . r . . = . 3 .
376 s e - r . . q . . . . . . . . . . a . . . . . c . . . . . . . . . . n . . . . . . . . . . . m . . .
377 - v w e . . - . . . . . . . . = . r . . . . . - . . . . . . . . . . g . . . . . . . . . . . q . . .
378 c . h n . . q . . . . = . . . b . k . . . . . h . . . . . . . . . . . . . . . . = . . . . . - . . .
379 a . i a . = r . . . = r . . . r . e . . . . . t . . . . . . . . = . . . . . . . p = . . . . q . . .
380 c . t m . r e . . = h e . . . a . r . . . . . t . . . . . . . . l . . . . . . . a r . . . . i . . .
381 h . e e . e f . . h i b . . . n . s . . . . . p . . . . . . . = = . . . = . . . g e . . . . m . . .
382 e . s . . b r = . g s a . . . c = - . . = . . . . . . . . . . e h . . . e . . . e v . . . . p . . .
383 . . p . . a e a . w t s . . . h u c . . e . . . . . . . . . . o t . . . x . . . r e . . . . o . . .
384 . . a . . s s u . e e e . . . - n a . . x . . . . . . . . . = l t . . = c . . . - r . . . . r . . .
385 . . c . . e h t = b d - . . = c a s . . c . . . . . . . . . = - p . . h h . . . l t . . . . t . . .
386 . . e . . - - o h - i b . . f h m e . . h . . . . . . . . = s p - . . g a . . . e - = . . . . . . .
387 . . . . . m r m t = t a . . l a e - . . a . . . . . . . . j s a p . = i n . = . g i r . . . . . . .
388 . . . . = q e v t h - s . . a n n C . . n . . . . . . . . o h t r . i g g . h . a n e . . . . . . .
389 . . . . c . p . p i b e . . g g d 3 . . g . . . = . . . . u - c o . n n e = t . c t n . . . . = . .
390 . . . . o . l . - s a - . . p e . . . . e . . . f . . . . r c h t . i o - = t . y e a . . . . h . .
391 . . . . n . a . c t s f . . r . . . . . - . . . i . . . . n l . o . t r o e p . . r m . . . . g . .
392 . . . . v . c . l e e l . . o . . . . . o . . l . . . . a o . c . . e b x - . . a e . . . . r . .
393 . . . . e . e . o d . a . . c . . . . . b = . . e . . . . l n . o . . . s c p . . c - . . . . c . .
394 . . . . r . - . n i . g . . e . . . . . s s . . s . . = = . e . l . . . m h r . . t d . . . . . . .
395 . . . . t . l . e t . . . . s . . . . . m t . . e . . p d . - . . . . . a a o . . i i . . . . . . .
396 . . . . - . o . - - . . . . s . . = . . a a . . t . . y i . r . . . . . r n x . . v r . . . . . . .
397 . . . . s . g . r n . . . . o . . u . . r t . . - . . 3 f . . . . . . . k g y . . e - . . . . . . .
398 . . . . p . - . . o . . . . r . . p . . k u . . g . . - f . . . . . . . e e . . . . m . . . . . . .
399 . . . . l . m . . - . . . . . . . - . . e s . . e . . c - . . . . . . . r - . = . . e . . . . . . .
400 . . . . i . e . . c . . . . . . . l . . r - . . n . . o u . . . . = . . s o = p . . r . = . . . . .
401 . . . . c . s . . h . . . . . . . o . . s r . . e . . m p . . . . b . . - b c u . . g . e . . . . .
402 . . . . e . s . . a . . . . . . . c . . - e . . r . . m g . . . . i . . c s o s . . e . o . . . . .
403 . . . . m . a . . n = . . . . . . a . . c v . . a . . a r . . . = s . . a m p h . . . . l . . . . .
404 . . . . a . g . . g c . . . . . . l . . a . . . t . . = a = . . c e . . s a y - . . . - . . = . .
405 . . . . p . e . . e o . . . . . . - . . s . . = e = . b d d . = o c . . e r . h . . . = h . . p = .
406 . . = . . . . . . . n . . . . . . c . . e . = e d c . u e i . m n t . . - k . t . . . e o . . u d .
407 . . p . . . . . . . f . . . . . . h . . - . e x . h . n . s . e t 3 . . D e . t . . x o . . l i .
408 . . u . . . . . . . l . . . . . . a . . C . x p . u . d . p . r r . . . 1 r . p = . . c k . . l f .
409 = = s . . . . . . . i . . . . . . n . . 2 . c o . r . l = a . g i . . . . s . . p = . h . . . - f .
410 p o h . . . . . . . c . . . . . . g . = . . h r . n . e r t . e b . . . . - . . u s . a . . . u - .
411 a b - . . . . . . . t . . . . . . e . s . . a t = . . - e c . - . . . . . c . . l i . n . . . p u .
412 r s h . . . . . . . . . . . . . . . . p . = n . m . . p b h . c . . . . . a . . l n . g . . . d n =
413 s o t . . . . . . . . . . . . . . . . a . d g . q . . h a . . o . . . . = s . . - g . e . . . a i r
414 e l t . . . . . . . . . . . . . . . . r . e e . - . . a s . . m . . . = n e . . b l . - . . . t f e
415 i e p . . . . . . . . . . . . . . . . s = b - . q . . s e . . m . . . s o - . . r e . o . . . e i b
416 n t - . . . . . = . . . . . . . . . . e = u o . p . . e - . . i . . . t t C . . a - . b . . . . e a
417 d e b . . . = . = . . . . . . . . . . - e g b . u . . s d . . t . . . r i 1 . . n h . s . . . . d s
418 e - u . . . s . c . . . . . . . . . . p n b s . s . . . e . . . . . . i f . . . c e . m . . . . . e
419 x c n = . . h . o . . . . . . . . . . r c u m . h . . . t . . . . . . p y = . . h a . a . . . . . -
420 = h d a . . o . n . . . . . . . . . . o o i a . - . . . a . . . = . . - - d . . . d . r . = . . . b
421 b a l d . . w . v . . . . . . . . . . f d l r . e . . . c . . . b . . c c i . . . . . k . e . . . o
422 o n e d . . - . e . . . . . . . . . . i i d k . x . . . h . = . u . . r h f . . . . . e . x . . . o
423 o g 1 . . . w . r . . . . . . . . . . l n d e . a . . . . . s . n . . o a f . . . . . r . c . . . k
424 k e . . = . o . t . . . . . . . . . . e g a r . c . . . . . y . d . = s n s . . . . . s . h . . . m
425 m s . . e . r . - = = . . . . = . . . s - g s . t . . . . . m . l . p s g t . . . . . - . a . . . a
426 a e . . x . k . h a e . . . . m . . . . a . - . . . . . . . l = e . u . e a . . . . . c . n . . . r
427 r t . . c . . . g u x . . . . q . . . . l . c . . . . . . . i h - . r . t . . . . = a . g . . . k
428 k - . . h . . . - d c . . . . - . . . . i a . . . . . . . n i t . g . = . . . . . e s = e . . = s
429 s e . . a . . . s i h = . . = s . . . . g = s . . . . . . . k s y . e . d . . . . . x e m - . . c .
430 - x . . n . . . t t a p . . = a . . . . n m e = . . . . . . s t p . . . i . . . . . c - q o . . o .
431 c c . . g . . . a - n a . . o f . . . . . q - p . . . . . . . e e = . . f . . . . . h D - b . . n .
432 u h . . e . . . r p g t . . b e . . . . = - B a . . . . . = . d . h . . f . . . . . a = g s . . v .
433 r = . . - = . . t a e c . . s t . = . . j q 5 t . . . . . h . i . i . . - . . . . . n d i m . . e .
434 r p . . o d . . r t - h . . o y . h . . o f . h . . . . . g . t . s . . b . . . . . g i t a . . r .
435 e a . . b r . . e h o b . = l . . g . . u o . s . . . . . w . - . t . . i . . . . . e r . r . . t .
436 n t . . s a . . v . b o . i e . . w = . r l . . . = . . . e . b . e . . n . . = . . - e . k = . - .
437 t c . . m w . . . . s m . m t . = = c . n d = . . e . . . b . o . d . . a . . s . . o c . e r . h .
438 . h . . a d . . . . m b . p e . e o = . a . m . . x = . . - . o . i . . r . . h . . b t . r e . g .
439 . b . . r a . . . . a - . o - . x b p . l . e . . c h . . c . k . t . . y . . o . = s a . s n . - .
440 . o . . k g . . . . r b . r t . c s a . - . r . . h i . . s . m . - . . - . = w . m m c . - a . s .
441 . m . . e . . . . . k = . t a . h m t . s . g . . a s . . p . a . n . . f . l - . q a c . c m . o .
442 . b = . r . . . . . e h . - g . a a h . h . e . . n t . . . . r . o . . i . o s . - r e . a e = u .
443 . - e . s . . . . . r i . m - . n r c = a . 7 . . g e . . . . k . n . . l . c t . e k s . s - b r .
444 . t x . - . . . . . s s . e c . g k o f r . . . . e d . . . . - . - . . e . k a = o e s . e m o c .
445 . l c . c . . . . . - t . r = . e e n i e . . . . - i . . . . m . c . . . . - c m l r . . - e o e .
446 . s h . a . . . . . c e . g c . - r f l . . . . . o t . . . . o . o . . . . b k q . s . . B r k . .
447 . . a . s . . . . . a d . e o . o s l e . . . . . b - . . . . t . m . . . . a . - . - . . 4 g m . .
448 . = n . e . . . = . s i . . p . b - i b . . . . . s d . . = . i . m . . = . d . q . c . . . e a . .
449 . c g . - . . . m . e t . . y . s e c r . . . . . m r . . e . = . u . . = . n . c . a . . . 1 r . .
450 . o e . C . . . e . - - . . - . m f t a . . = . . a o . . x . i . t . = e . e . l . s . = . . k . .
451 . n - . = . . . r . A o . . m . a f s n = . r . . r p . = c . n . = . f x = s . o . e . r . . s . .
452 . f o . p . . . g . 6 u . . o . r e - c p . e . . k . . s h . h . s . l c a s . n . = . e = . - . .
453 . i b . r . . . e . . t . . v . k c m h a . b . . e . = u a . e . h . a h d . . e . r . p h . m . .
454 . g s . o . . . - . = g . . e . e t e . t . a . . r . d b n . r . o g a d . . - . e . a g . e . .
455 . . m . f . . . d . p o . . - . r f r . h . s . . s . e r g . i . w = s n r . . h . b = i w . r . .
456 . . a . i . . . e . u i . . m . s l g . c . e . . - . b e e . . . u . g e . . t . a s r = . g . .
457 . . r . l . . . f . l n . . e . - a e = o . - . . c . u p - . = . . n . e m = . t . s p - c . e . .
458 . . k . e . . . a . l g . . r . c g . m n . m . . a . g o o . d . . i . - o c . p . e a s o . . . .
459 . . e . . = . . u . . . . . g . a . . q f . q . . s = b - b . e . . o . o v o . . . - r t m . . . .
460 . . r . . m . . l . . . . . e . s . . - l . - = . e p u m s = f . . n . b e n . . . e s r m . . . .
461 . . s . . q . . t . . . . . . . = . . q i = s b . = e = i m p a = . r . s - v . . = m e i i . . . =
462 = . - . . - . . . . . . . . . . m . . d c o k a . c n c s a u u e . e . m s e . . m p - p t . . . m
463 m . c . . m . . . . . . . . . . e . . e t r i d . l d o s r l l x . p . a i r . . q t i . - . . . e
464 e = a . e . . . . . . . . . . r . . l s i p - . o i m i k l t c . o . r m t . . - y m . m . . . r
465 r i s = . r . . . = . . . . . . g . . e - g . = . n n m n e - - h . . . k i - . . m c p . u . . = g
466 g d e b . g . . . p . . . . . . e . . t u b . e . e g i g r r p a . . . e l d . . i o o . l . . = e
467 e e = r . e . . . a . = . . . . - . . e p a . m . - . t . s . u n . . . r a a . . s m r . t . . w -
468 - n s a . . . . . r . e . . . . l . . . d c . p . u . - . - . s g . . s r t . . s m t . i . . o s
469 h t u n . . . . . e . x . . . = o . . . a k . t . p . u . c . h e . . = = . e . . i i . = p . . r u
470 a i b c . . . . . n . c . . . b c . . . t u . y . d . n . a . . - = . h d . s . . n t . i l . . k b
471 l f r h . . . = . t . e . . . u a . . . e p . - . a . r . = . . o r . t i . o . = g . . s e . . e r
472 t y e - . . . r . s . s . . g l . = . . - . g . t . e . e . . b e . t f . r . m f . s = . . = e
473 = = = = = = = = = = = = . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
474 i e s m m c o = b p h a . e c a r e e r e a m b a c s p e i i l u m d b r l i p c r m t e c i h p c
475 m o i q q a l i u u y u . x o m e x x e o m e u r a t a x m s a p a e o e o s a o e e o x o s = u o
476 p l m - - t d m n s b d = t n e l c t v l e r n b c a t c p s r d n b o q g s t m n r o c n s i l n
477 o - p q q . c p d h = i u d v n i h e s - n g d i h t h h o u g a i u k u t u c m a g l h v u s l v
478 r a l d q . g e = = h t n a = d n a n e u d e l t e u c a r e e t f g m i o e h i m e s a e e s - e
479 t d e i u . i x d r g - i t r - k n = t = - - e r - s o n = 6 f e e e a r p 1 . t e - . n r 1 u h r
480 - d - f e . . p i e w s f a e s . g r - s s r - a a - n g l 6 i - s = r e r 3 . t - c . g t 1 e t t
481 e . u f u . . - r p e u i . b u . e e o y u e v r b t f e o 0 = n t m k s o 0 . e a l . e - 7 5 t -
482 o = p . e . . b s o b b e . a b . - b u m b m s y u e l - c . u a = e s = c 6 . = f o . - c 5 8 p t
483 l s d . . . . r t - - r d . s r . o a t l r o - f s r i o a . r m m r - v e . = m t s . o l . 6 . a
484 . e a . . . = a a c r e - . = e = b s = i e v = i e s c b t . l e e g r = s = d q e e . b o . . . g
485 . r t . . . b n t o a p t . m p s s e t n p e m l . e t s e . - s r e e c s r o - r d . s n . . . =
486 . v e . . . a c e m w o e . q o p m - e k o . e = . . = m . . d . g 6 = o . e u q - h . m e . . . m
487 = e . = . . s h . p = . s . - . a = i m - . . r p . . n a . . o . e . i = . b b r m e . = b . . . a
488 u . . h . . i . . = h = t . s . r c s p p . . g u . = e = . . w . - . s i . a l e e a . p r . . n
489 p . . g . . c . . m i s . . y . s o s = l . . e s . a w b . . n . r . s s . s e n r d . a a . . = i
490 d . . w . . . = . e s p . . m . e n u c a . = 9 h . d c r . . l . e . u s . e = a g s = = n . . i f
491 a . = e . . . s . r t a . = l . - t e u = . l . v . d g a . . o . v . e u = - d m = . e r = = . s e
492 t . s b . . . t = g e r . m i . v e - s n . o . a . r i n . . a . e = 1 e i p i e g . o e u u = s s
493 e . p d . . . r e e d s = q n . e x n t e . g . r . e . c . = = . r r 8 5 m = f . l . l v n r s = t
494 - . a i = = . i o - i e r - k . = t o o w . - . s . m = h . m e . t e 0 2 p m f . o = f l b = c c .
495 = . r r s p . c l = = - e q s = n = = m e . = . = . o u = . e d = 2 b 2 = o e d . g k i o u c h a .
496 c . s s = e . = - c s = v g . d o r i = r . s = s . v p r . r i c . a . i r r i . - n l g n o e s .
497 h = e y g r . r c o = i = o . e - e s e c . p m u . e d e = g t l . s . s t g r . = o e = d n m e
498 a m - m p m . e = n s s d t . b s b s m = . a e b . . a v m e = o . e = s - e . . h w n e l v e c =
499 n a m = g i . v d f p s o o . i = a u p l . r r r . . t l a 1 c n . - d u u - . . g n = n = e s o b
500 g n e c . s . = i u a u c . . a a s e t o . s g = . . = o c 0 o e = = i e n r . . k . u c w = . l o
501 e i r o . s = e f s r e k . . = n e 1 y = . e e m . = p g t = n - u r f = k e = . . . n o e d = l o
502 l f = n . i m m f e s 1 e . . r c - = - j . = 2 e . m a - e c v c p e f t n v d . . . r d b i h i k
503 o e i v . o q p - d = 8 = . . e e = m f o . l . r . a m = o = = d v - r = e i . . . e e s f g s m
504 g s s = . n - t = - m 7 a . = b = p e = u . i . g . n = m i n p r a s = = p r f = = . l . u f w i a
505 = = s e . = q n = e = r . m a c a r b r = = . e = i f a s v r e t e e i u t f r b . = b - e o r
506 i d u x . a = = e u r d c = i = o t g d n d u . 5 e f i p s = o v e t o s l . - e = = d = . = b = =
507 s i = e . t i e s s g i h h = b = = e = a i i = = x = l i u r = = - - l s l . c v d i e d = i - r a
508 s f w c . = s m t e e f i g e a d x = w = r = l d t m = n = e s r i d - u - = o = e s b e b s b e n
509 u = i u . s s p e = = f v = x d i d f a m s c r o q f d l v e = = = p u s s u b a s = v
510 e m t s u h e e d - g i o c - u e f e v d u h i y u c s e
511 4 - p . x u m e r
512 .
513 .
514 .
515 .
516 .
0
1 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2 c s s o s o r l l m c g l i o r s b r h u c s k r m l m b c m m g m c p m m t c l c r c o a b r s t
3 o u h b u b e a o q h l a m b e u u e g p o t e e e a q o o e e r q l u q v r o f o e o b n i u u a
4 m b e s b s v r g . e o r p s b b n n h d m r y v r r - o p r r a - o s - - a n s n v n s n s n b g
5 m r l o r o s g . . c g g o m a r d a a a m i w s g g s k y g g f h n h h c n v . v e v o o e - r .
6 a e v l e l e e . . k . e r a s e l m v t i p o e e e u m t e e t e e - e p s e . e r e l t c t e .
7 n p e e p e t f . . - . f t r e p e e e e t . r t - f b a r - - . a . w a - p r . r t r e a t e p .
8 d o . t o t . i . . p . i . k - o 2 - . - - . d 2 t i r r a c f . d . a d s l t . t . t t t . s o .
9 - - . e . e . l . . y . l . e o - - m . b a . . . o l e k c h o . e . r e t a - . - . - e e . t - .
10 t g . - . . . e . . l . e . r b s e e . r m . . . o e p s e a r . r . n r - n f . s . g - . . s d .
11 e i . b . . . s . . i . s . - s v x r . a e . . . l s o . - n c . - . . - d t i . v . i d . . . e .
12 m t . u . . . . . . n . - . t o n c g . n n . . . s - . . h g e . d . . f i . l . n . t i . . . e .
13 p . . n . . . . . . t . m . e l . h e . c d . . . . u . . e e . . a . . r f . e . - . . v . . . p .
14 l . . d . . . . . . . . i . m e . a 2 . h . . . . . p . . u d . . t . . o f . m . s . . e . . . - .
15 a . . l . . . . . . . . s . p t . n . . e . . . . . d . . r e . . e . . m . . a . i . . r . . . n .
16 t . . e . . . . . . . . c . l e . g . . s . . . . . a . . i l . . . . . . . . p . n . . g . . . e .
17 e . . - . . . . . . . . . . a . . e . . . . . . . . t . . s e . . . . . . . . . . k . . e . . . s .
18 . . . s . . . . . . . . . . t . . . . . . . . . . . e . . t t . . . . . . . . . . . . . n . . . t .
19 . . . t . . . . . . . . . . e . . . . . . . . . . . . . . i e . . . . . . . . . . . . . t . . . e .
20 . . . r . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . . . . . . d .
21 . . . i . . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . . . . . . - .
22 . . . p . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c .
23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h .
24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a .
25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n .
26 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . g .
27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e .
28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
90 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
93 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
103 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
106 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
108 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
110 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
111 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
112 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
113 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . =
114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r
115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e
116 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b
117 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a
118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . = s
119 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . f e
120 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . i -
121 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . l c
122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . e o
123 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = s . s l
124 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t e . e l
125 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a - . t a
126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . . g s . . p
127 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . . s c . . s
128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . a . . . . . e . . e
129 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . c . . . . . n . . .
130 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . . k . . . = . a . . .
131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . o = . . m . r . . .
132 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = s . = u h . . q . i . . .
133 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . p o . t t o = . - . o . . .
134 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . h r . r . o c . g . - . . .
135 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . a . . e . k h . u . g . . .
136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . c . . s . . e . . e . a . l . . .
137 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . o = . = e . . m . . c . r . o . . .
138 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . m a . e s . . a . . k . d . b . . .
139 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n = m u . x - . . n . . - . s . a . . .
140 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a b i t . t e . . i . . c = . . l . . .
141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m i t o . e x . f . . o m . . . . . .
142 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e s - m . n c . = e . . d q . . . . . .
143 . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . . e i v . s h . c s . . e - . . . . . .
144 . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . . c n . . i a . o t . . . q . . . . . .
145 . . . . . . . . . . . . . . . . . . . . . . . . . . . u . . . t t . . o n . m . . . . p . . . . . .
146 . . . . . . . . . . . . . . . . . . . . . . . . . . . n . . . 2 e . . n g . m . . . . u . . . . . .
147 . . . . . . . . . . . . . . . . . . . . . . . . . . . d . . . . r . = . e . i . . . . s . . . . . .
148 . . . . . . . . . . . . . . . . . . . . . . . . . . . l = . . . a . n . . . t . . . . h . . . . . .
149 . . . . . . . . . . . . . . . . . . . . . . . . . . . e h = . . c . e . . . . . . . . - . . . . . .
150 . . . . . . . . . . . . . . . . . . . . . . . . . . . . i b . . t . w . . . . . . . . f . . . . . .
151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . s r . . i . b . . . . . . . . a . . . . . .
152 . . . . . . . . . . . . . . . . . . . . . . . . . . . . t a . . v . r . . . . . . . . i . . . . . .
153 . . . . . . . . . . . . . . . . . . . . . . . . . . . . e n . . e . a . . . . . . . . l . . . . . .
154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . d c . . . . n . . . . . . . . . . . . . . .
155 . . . . . . . . . . . . . . . . . . . . . . . . . . . . i h . . . . c . . . . . . . . . . . . . . .
156 . . . . . . . . . . . . . . . . . . . . . . . . . . = . t e . . . . h . . . . . . . . . . . . . . .
157 . . . . . . . . . . . . . . . . . . . . . . . . . . h . - s . . . . . . . . . . . . . . . . . . . .
158 . . . . . . . . . . . . . . . . . . . . . . . . . . i . f . . . . . . . . . . . . . . . . . . . . .
159 . . . . . . . . . . . . . . . . . . . . . . . . = . s . o . . . . . . . . . . . . . . . . . . = . .
160 . . . . . . . . . . . . . . . . . . . . . . . . i . t . l . . . . . . . . . . . . . . . . . . s . .
161 . . . . . . . . . . . . . . . . . . . . . . . . s . e . d . . . . . . . . . . . . . . . . . . t . .
162 . . . . . . . . . . . . . . . . . . . . . . . . s . d . . . . . . . . . . . . . . . . . . . . a . .
163 . . . . . . . . . . . . . . . . . . . . . . . . u . i . . . . . . . . . . . . . . . . . . . . t . .
164 . . . . . . . . . . . . . . . . . . . . . . . . e . t . . . . . . . . . . . . . . . . . . . . u . .
165 . . . . . . . . . . . . . . . . . . . . . . . . 3 = - . . . . . . . . . . . . . . . . . . . . s . .
166 . . . . . . . . . . . . . . . . . . . . . . . . 0 s o . . . . . . . . . . . . . . . . . . . . . . .
167 . . . . . . . . . . . . . . . . . . . . = . . . 8 s b . . . . . . . . . . . . . . . . . . . . . . .
168 . . . . . . . . . . . . . . . . . . . . r . . = 4 h s . . . . . . . . . . . . . . . . . . . . . . .
169 . . . . . . . . . . . . . . . . . . . . e . . t . . o . . . . . . . . . . . . . . . . . . . . . . .
170 . . . . . . . . . . . . . . . . . . . . b . . r . . l . . . . . . . . . . . . . . . . . . . . . . .
171 . . . . . . . . . . . . . . . . . . . . a . . e . . e . . . . . . . . . . . . . . . . . . . . . . .
172 . . . . . . . . . . . . . . . . . . . . s . . e . . t . . . . . . . . . . . . . . . . . . . . . . .
173 . . . . . . . . . . . . . . . . . . . . e . . d . . e . . . . . . . . . . . . . . . . . . . . . . .
174 . . . . . . . . . . . . . . . . . . . . - . = i . . . . . . . . . . . . . . . . . . . . . . . . . .
175 . . . . . . . . . . . . . . . . . . . . a . h s . . . . . . . . . . . . . . . . . . . . . . . . . .
176 . . . . . . . . . . . . . . . . . . = . b g c . . . . . . . . . . . . . . . . . . . . . . . . . .
177 . . . . . . . . . . . . . . . . . . s . o = w o . . . . . . . . . . . . . . . . . . . . . . . . . .
178 . . . . . . . . . . . . . . . . . . s . r f e v . . . . . . . . . . . . . . . . . . . . . . . . . .
179 . . . . . . . . . . . . . . . . . . h . t e b e . . . . . . . . . . . . . . . . . . . . . . . . . .
180 . . . . . . . . . . . . . . . . . . - . . t d r . . . . . . . . . . . . . . . . . . . . . . . . . .
181 . . . . . . . . . . . . . . . . . . b . . c i y . . . . . . . . . . . . . . . . . . . . . . . . . .
182 . . . . . . . . . . . . . . . . . . u . . h r . . . . . . . . . . . . . . . . . . . . . . . . . . .
183 . . . . . . . . . . . . . . . . . . n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
184 . . . . . . . . . . . . . . . . . . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185 . . . . . . . . . . . . . . . . = . l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
186 . . . . . . . . . . . . . . . . e . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
187 . . . . . . . . . . . . . . . . o = 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188 . . . . . . . . . . . . . . . . l s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
189 . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190 . . . . . . . . . . . . . . . = . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
191 . . . . . . . . . . . . . . . l . d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192 . . . . . . . . . . . . . . . a . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193 . . . . . . . . . . . . . . . r . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194 . . . . . . . . . . . . . . . g . c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
195 . . . . . . . . . . . . . . . e . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196 . . . . . . . . . . . . . . . f . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
197 . . . . . . . . . . . . . . . i . e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198 . . . . . . . . . . . . . . . l . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
199 . . . . . . . . . . . . . . . e . y . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
200 . . . . . . . . . . . . . . . s . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
201 . . . . . . . . . . . . . . = - . . . b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
202 . . . . . . . . . . . . . . m w . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
203 . . . . . . . . . . . . . . q i . . . h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204 . . . . . . . . . . . . . . - r . . . i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
205 . . . . . . . . . . . . . . q e . . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206 . . . . . . . . . . . . . . p p . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
207 . . . . . . . . . . . . . . u r . . . o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
208 . . . . . . . . . . . . . . s o . . . r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
209 . . . . . . . . . . . . . . h t . . . y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
210 . . . . . . . . . . . . . = - o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
211 . . . . . . . . . . . . . h e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
212 . . . . . . . . . . . . . e x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
213 . . . . . . . . . . . . . l a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
214 . . . . . . . . . . . . . p c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
215 . . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . = . . . . . . . . . . . . . .
216 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . . .
217 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . .
218 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . n . . . . . . . . . . . . . .
219 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r . v . . . . . . . . . . . . . .
220 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e . e . . . . . . . . . . . . . .
221 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . r . . . . . . . . . . . . . .
222 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a . t . . . . . . . . . . . . . .
223 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s . - . . . . . . . = . . . . . .
224 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = . . e . s . . . . . . . b = . . . . .
225 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m . . - . v . . . . . . . h p . . . . .
226 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . q . = c . n . . . . . . . e h . . . = .
227 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - . e a = - . . . . . . . a a . . . h .
228 . . . . . . . . . . . = . . . . . . . . . . . . . . . . . . q = x c a s . . . . . . . d s . . . i .
229 . . . . . . . . . . . h . . . . . . . . . . . . . . . . = . n u t h r o . = . . . . . s e . . . s .
230 . . . . . . . . . . . t . . . . . . . . . . . . . . . = p . e n d e c u . c = . = . . . s . . . t =
231 . . . . . . . . . . . t . . . . . . . . . . . . . . . s a . w c i . h r . h a . s . . . . = . . e r
232 . . . . . . . . . . . p . . . . . . . . . . . . . . . p t . . o f . i c . e l . h = . . . a . . d e
233 . . . . . . . . . . . s . . . . . . . . . . . . . . . a c . . m f . v e . c i = o i . . . c . . i b
234 . . . . . . . . . . . . . . . . . . . . . . . . . . . r h . . m . . e . = k a m w m . . . l . . t a
235 . . . . . . . . . . . . . . . . . . . . . . . . . . . s b = . i . . . . g - s e - p . . . . = . - s
236 . . . . . . . . . . . . = . . . . . . . . . . . . . . e o h . t . . . . i p . r w o . . . . r . a e
237 . . . . . . . . . . . . c . . . . . . . . . . . . . . . m t . . . . . . t y . g o r . . . . e . r -
238 . . . . . . . . . . . . o . . . . . . . . . . . = . . . b t . . . . . . - f . e r t . . . . b . g d
239 . . . . . . . . . . . . n . . . . . . . . . . . c . . . . p . . . . . . e l . 1 k - . . . . a . u e
240 . . . . . . . . . . . . v . . . . . . . . . . . h . = . . - . . . . . . x a . . . g . . . . s . m s
241 . . . . . . . . . . . . e . . . . . . . . . . . e . r . . b . . . . . . p k . . . i . . . . e = e t
242 . . . . . . . . . . . . r . . . . . . . . . . . c . e . . a . . . . . . o e . . . t . . . . - b n .
243 . . . . . . . . . . . . t . . . . . . . . . . . k . b . . d . . . . . . r s . . . . . . . . p u t .
244 . . . . . . . . . . . . - . . . . . . . . . . . - . a . . - . . . . . . t . . . . . . . . . a n s .
245 . . . . . . . . . . . . h . . . . . . . . . . . m . s . . s . . . . . . . . . . . . . . . . r d . .
246 . . . . . . . . . . . . g . . . . . . . . . . . o . e . . e . . . . . . . . . . . . . . . . a l . .
247 . . . . . . . . . = . . - . . . . . . . . . . . d . - . . r . . . . . . . . . . . . = . . . m e . .
248 . . . . . . . . . o . . s . . . . . . . = . . = u = n . . v . . . . . . . . . . . . m . . . e - . .
249 . . . . . . . . . b . . i . . . . . . . w . = m l c e . . e . . . . . . . . . . . . q . . . t r . .
250 . . . . . . . . . s . . n . . . . . . . a . t q e o w . . r . . . . . . . . . . . . - . . . e . . .
251 . . . . . . . . = o . . k . . . . . . . l . r - - m a . . . . . . . . . . . . . . . q . . . r . . .
252 . . . . . . . . h l . . . . . . . . . . k . e q i m n . . . . . . . . . . . . . . . i . . . s . . .
253 . . . . . . . . g e . . . . . . . . = . . . e r m a c . . . . . . . . . . . . . . . m . . . . . . .
254 . . . . . . . . w t . . . . . . . . r . . . d e p n e . . . . . . . . . . . . . . . p . . . . . . .
255 . . . . . . . . e e . . . . . . . . e . . = i f o d s . . . . . . . . . . . . . . . o . . . . . . .
256 . . . . . . . . b - . . . . . . . . m . . r s r r s t . . . . . . . . . . . . . . . r . . . . . . .
257 . . . . . . . . - d . . . . . . . . o . . o c e t e o . . . . . . . . . . . . . . . t . . . . . . .
258 . . . . . . . . c i . . . . . . . . v . . l o s s r r . . . . . . . . . . . . . . . . . . . . . . .
259 . . . . . . . . o s . . . . . . . . e . . l v h . v . . . . . . . . . . . . . . . . . . . . . . . .
260 . . . . . . . . m t . . . . . . . . . . . b e . . e . . . . . . . . . . . . . . . . . . . . . . . .
261 . . . . . . . . m r . . . . . . . . . . . a r . . r . . . . . . . . . . . . . . . . . . . . . . . .
262 . . . . . . . . a i = . . . . . = . . . . c y . . . . . . . . . . . . . . . . . . . . . . . . . . .
263 . . . . . . . . n b e . . . . . r . . . . k - . . . . . . . . . . . . . . . . . . . . . . . . . . .
264 . . . . . . . . d u x . . . . . e . . . . . l . . . . . . . . . . . . . . . . . . . . . . . . . . .
265 . . . . . . . . s t c . . . . . b . . . . . e . . . . . . . . . . . . . . . . . . . . . . . . . . .
266 . . . . . . . = . e h . . . . . a = . . . . g . . . . . . . . . . . . . . . . . . . . . . . . . . .
267 . . . . . . . r . d a . . . = . s u . . . . a . . . . . . . . . . . . . . . . . . . . . . . . . . .
268 . . . . . . . e . . n . . . r = e n . . . . c . . . . . . . . . . . . . . . . . . . . . . . . . . .
269 . . . . . . . b . . g . . . e r - a . . . . y . . . . . . . . . . . . . . . . . . . . . . . . . . .
270 . . . . . . . a . . e . . . b e n m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
271 . . . . . . . s . . - . . . a b a e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
272 . . . . . = . e . . o . . . s a m n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
273 . . . . . c . - . . b . . . e s e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
274 . . . . . o . i . . s . . . - e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
275 . . . . . n . n . . m . . . p - - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
276 . . . . . v . t . . a . . . u m b . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
277 . . . . . e . e . . r . . . l q r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
278 . . . . . r . r . . k . . . l . a . . = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
279 . . . . . t . r . . e . . . . . n . . s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
280 . . . . = - . u . . r . . . . . c . . h . . . . . . . . . . . . . . . = . . . . . . . . . . . . . .
281 . . . . i s . p . . s . . . . . h . . a . . . . . . . . . . . . . . . d . . . . . . . . . . . . . .
282 . . . . m v . t . . - . . . . . e . . r . . . . . . . . . . . . . . . i . . . . . . . . . . . . . .
283 . . . . p n . i . . c . . . . . s . . e . . . . . . . . . . . . . . . r . . . . . . . . . . . . . .
284 . . . . o - . o . . a . . . . . . . . . . . . . . . . . . . . . . . . s . . . . . . . . . . . . . .
285 . . . . r m = n . . s . . . . . . . . . . . . . . . . . . . . . . . . t . . . . . . . . . . . . . .
286 . . . . t o p s . . e . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . .
287 . . . . - v u . . . - . . = . . . . . . . . . . . . . . . . . . . = . t . . . . . . . . . . . . . .
288 . . . . b e s . . . A . . i . . . . . . . . . . . . . . . . . . . b . e . . . . . . . . . . . . . .
289 . . . . y . h . . . 3 . . m . . . . . . . . . . . . . . . . = . . u . - . . . . . . . . . . . . . .
290 . . . . p . . . . . . . . p . . . . . . . . . . . . . . . = r . . n . r . . . . = . . . . . . . . .
291 . . . . a . . . . . . . . o . . . . . . . . . . . . . . . r e . . d . a . . . . p . . . . . . . . .
292 . . . . s . . . . . . . . r . . . . . . . . . . . . . . . e n . . l . c . . . . a . . . . . . . . .
293 . . . . s . . . . . . . . t . . . . . . . . . . . . . . . b a . . e . e . . . . r . . = . . . . . .
294 . . . . . . . . . . . . . - . . . . . . . . . . . . . . . a m . = 2 . . . . . . s . . s . . . . . .
295 . . . = . . . . . . . . . m . . . . . . . . . . . . . = . s e . r - . . . . . . e . . h = . . . . .
296 . . . l . . . . . . . . . e . . . . . . . . . . . . . h . e - = e r . . . . . . - . . o h . . . . .
297 . . . f . . . . . . . . . r . . . . . . . . . . . . . t . - m o b e . . . . . . d . . w g . . . = =
298 . . . c . . . . . . . . . g . . . . . . . . . . . . . t . r e b a m . . . . . . a = . - w . . . r s
299 . . . o . . . . . . . . = e . . . . . . . . . . . . . p . e r s s o . . . . = . t b . s e . . . e t
300 . . . n . . . . . . . . h . . . . . . . . . . . = . . . . n g m e t . . . . h . e u . t b . = . b a
301 . . . v . . . . . . . = i . . . . . . . . . = = h . . . . a e a - e . . = . a = . n . a - . h = a t
302 . . . e . . . . . . . e s . . . . . . . . . b s i . = . . m 1 r b - = . r . r b . d . c s . i d s u
303 . . . r . . . . . . . x t . . . . . . . . . o u s . a . . e . k a c h . e . d r . l = k y = s e e s
304 . . . t . . . . . . . c e . . . . . . . . . o b t . d . = . . e s h t . s . l a . e c . m f t b - -
305 . . . . . . . . . . . h d . . . . . . . = . k r e . d . m . . r e a t . o . i n . - o . r l e u b c
306 . . . . . . . . . . . a i . . . . . . . h . m e d . . . q . . s - n p . l = n c . p n . e a d g o o
307 . . . . . . . . . = . n t . . . . . . . i . a p i = . . - . . - f g - . v c k h . h v . v g i c o l
308 . . . . . . . . . l . g - . . . . . . . s . r o t m . . s . . e l e b . e l s - . a e . . p t o k o
309 . . . . . . . . . a . e n . . . . . = . t . k - - q . . a . . f a g u . . o . c . s r . . r - m m r
310 . . . . . . . . = r . - o . . . . . r . e . s r f - . . f . . f g r n . . n . h . e t . . o e m a .
311 . . = . . . . . d g . o n . . . . . e . d . - e o q . . e . . e . o d . . e . a . s - . . c d a r .
312 . . b . . . . . i e . b - . . . . . b . i = m c l r . . t . . c . u l . . b . n . . s . . e i n k .
313 . . u . . . . . f f = s c . . . = . a . t b e u d e . . y . . t . p e . . u . g . . v . . s t d s .
314 . . n . . . . . f i g m o . . . r . s . - o r r - f . . . . . f . . 1 . . n . e . . n . . s . s . .
315 . . d . . . . . - l i a m . . . e . e . c o g s n r . . . . . l . . . . . d . . . . - . . o . . . .
316 . . l . . . . . i e t r m . . . n = - . o k e i o e . . . . . a . . . . . l . . . . b . . r . . . .
317 . . e . . . . . g s h k u . . . a c d . m m . o n s . . . . . g . . . . . e . . . . r . . . . . . .
318 . . - . . . . = n - e e t . . . m o e . m a . n - h . . . . . . . . . . . s . . . . a . . . . . . .
319 . . t . . . . a o c l r e . . = e p t . u r . . c - . . . . . . . . . . . . . . . . n . . . . . . .
320 . . y . . . . u r a p s . . . g - y a . t k . . o r . . . . . . . . . . . . . . . . c . . . . . . .
321 . . p . . = . d e c . - . . = e d . c . e s . . m e . . . . . . . . . . . . . . . . h . . . . . . .
322 . . e . . m . i - h . c . . c n i . h . . - . . m p . . . . . . . . . . . . . . . . e . . . . . . .
323 . . . . . e . t w e . a . = o e r . . . . c . . u l . . . . . . . . . . . . . . . . s . . . . . . .
324 . . . . . r . - h . . s . o m r - . . . . u . . t a . . . . . . . . . . . . . . . . . . . . . . . .
325 . . . . . g . p i . . e . b m a m . . . . r . . e c . . . . . . . . . . . . . . . . . . . . . . . .
326 . . . . . e . a t . . - . s i l e . . . . r . . . e . . . . . . . . . . . . . . . . . . . . . . . .
327 . . . . = - . t e . . A . o t d r . . . . e . . . - . . . . . . . . . . . . . . . . . . . . . . . .
328 . = . . c t . h s . . 1 . l - e g . . . . n . . . l . . . . . . . . . = . . . . . . . . . . . . . .
329 . c . . o y . . p . . . . e i l e . . . . t . . . o . . . . = . . . . g . . . . . . . . . . . . . .
330 . h . . n p . . a . . . . t n t . . . = . . . . . g . . . . u . . . . r . . . . . . . . . . . . . .
331 . e . . t e . . c . . . . e t a . . . m . . = . . - . . . . r . . . . e . . . . . . . = . . . . . .
332 . c . . r s = . e . . . . - e . . . . e . . h . . m . . . . l . . . . p . . . . . . . l . . . . . .
333 . k . . i . i . . . . . . c r . . . . r . . g . . e . . . . - . . . . . . . . . . . . f . . . . . .
334 . - . . b . n . . . . . . h a . . . . g . . w . . s . . . . r = . . . . . . . . . . . s . . . . . .
335 . p . . - . c . . . . . . e c . . . . e . . e . . s . . . . e m . . . . . . . . . . . - . . . . . .
336 . y . . p . o . . . . . . c t . . . . - . . b . . a . . . . v e . . . . . . . . = . . l . . . . . .
337 . 3 . . e . m . . . . . . k i . . . . d . . - . . g . . . . . r . . . . . . . . r . . a . . . . . .
338 . - . . r . i . . . . . . h v . . . . e . . j . . e . . . = . g . . . . . . . . e . . r . . . . . .
339 . c . . f . n . . . . . . e e . . . . f . . s . . . . . . h . e . . . . . . . . b . . g . . . . . .
340 . o . . . . g . . . . . . a - . . . . a . . o . . . = . . i . - . . . . . . . . a . . e . . . . . .
341 . m . . . . - . . . . . . d c . . . . u . . n . . . p . . s . c . = . . . . = . s . . f . . . . . .
342 . p . . . . o . . . . . . s u . . . . l . . . . . . u . . t . r . p . . . . r . e . . i . . . . . .
343 . a . . . . u . . . . . . . r . . . . t . . . . . . l . = e . i = a . . . . e . - . = l . . . = . .
344 . t . . . . t . . . . . = . s . . . . . . . . . . . l . s d . s u g . . . . b = c . p e . = . s . .
345 . . . . . . g . . . . . p . e . . . . . . . . . . . - . y i . s p e . . . . a p o = u s . c . s = .
346 . . . = . . o . = . . = u . s . . . . . . . . . = . u = m t . - - r = . = . s a n s s . . l . h p =
347 . . . p . . i . i . . u s . . . . . = . . . . . c = p a l - . c l . c . s . e t f u h . . o . - u r
348 . . . r . . n . n = . p h . . . . . s . . . . . o e d d i n . r o . o . t . - h l b - . . n . c l e
349 . . = o . . g . i c = g - . . . . . t . = . . . n x a d n o . o c . n . r . m c i r h . = e . l l b
350 . . p f . . . . t h p r h . . . = . a . w . = v c t r k - . s a . v . i = q o c e t . b - = o - a
351 . . u i . . . . . e a a t . . . s . t . i = . u e h e e s c . s l . e . p h - n t p t . u r e n b s
352 . . l l . . . . . c t d t . . . p . i = n m . n r a . m . h . . - . r . - g s f s o p . n . x e r e
353 . . l e . . . . . k h e p . . . a . c c 3 q . i t n . o . a . . c . t . c w k l . - . . d . c - a -
354 . . . . . . . = . - c - - . . . r = - h 2 - . o - g . v . n . . h . - . r e i i . m . . l . h r n e
355 . . . . . . . c . h o r b . . . s e h e t q . n s e . e . g . . a . h . o b p c . i . . e . a . c m
356 . . . . . . . a . e n e u . . . e x t c e f . r p - . - . e . . n . g . s - . t . s . . 2 . n . h p
357 . . . . . . . c . l f p n . = . - c t k x o . e l o . s . . . . g . - . s d . s . s . . - . g . . t
358 . . . . . . . h . p l o d . e = p h p - t l . p i b . i . . . . e . s . . i . - . i . . f . e . . y
359 . . . . . . . e . . i . l . x d r a . c . d . o c s . m . . . . . . o . . f . u . n . . o . - . . c
360 . . . . . . . - . . c . e . c i o n . o . . . . e m . i . . . . . . u . . f . p . g . . r . o . . o
361 . = . . . = . a . . t . 1 . h f f g . n . . . . m a . l . . . . . . r . . s . d . . . . m . b . . m
362 . b . . . t . b . . s . . . a f i e . f . . . . a r . a . . . . . . c . . . . a . . . . a . s . . m
363 . l . . . o . u . . - . . . n s l - . i . . . . p k . r . . . . . . e . . . . t . . . . t . m . . i
364 . a . . . o . s . . m . . . g t e o . g . . = . . e . . . . . . . . . . . . . e . . . . . . a . . t
365 . c . . . l . e . . e . . . e a s b . . . . h . . r . . . . . . . . . = . . . . . . . . . . r . . .
366 . k . . . s . . . . r . . . - t . s . . . . t . . s . . . . . . . . . d . . . . . . . . . . k . . .
367 . b . . . . . . . . g . . . o . . m . . . . t . . - . . . . . . . . . e . . . . . . . . . . e . . .
368 = o = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
369 c x h c b p e h m m g g i c e r e f e c e p c m m o l d e m h p c s m c d e c e h p c n p g v h e m
370 o . g o i u x g e q l e 1 l x e o n x o x a o e e r o i x q g u o i q o r x o x i e h o a e e i x q
371 n . i n s r c w r - o n 8 o p v l c c n c t n r r i g s c - w l p n - m a c n c g n u t g n r s c -
372 v . g v e g h e g q b d n n o e - a h v h h v g g g - p h m e l y g q m w h v h h d r i e d i t h m
373 e . n e c e a b e d a o . e r r h c a e a s e e e b l a a e b - - l c i d a e a l i n f r o f e a i
374 r . o r t . n - - e l c . - t t o h n r n . r - - a i t n r . r m e l t a n r n i n . y - c y d n s
375 t . r t 3 . g f h l o - . u . - o e g t g . t s l c n c g g . . o - o - g g t g g g . . l - . i g s
376 - e - . . e i a e p r . p . i k . e - e . - u o k e h e e . . v h n u . e . e h . . . e z . t e i
377 s = . h . . - l l t t u . d . n . . - d - . s b c u r . - . . . e e e n . - . - t . . . g h . - - n
378 v e . g . . o e t e s . . a . t . . o a o . v r a p a . o . . . - a - r . o . o . . . . a _ . o o g
379 n x . - . . b l . . . . . t . e . . b t b . n e l - n . b . . . m d h e . b . b . . . . c T . u b f
380 - c . s . . s o . . . . . e . r . . s e s . - p . c g . s . . . e . t s . s . s . = . . y W . t s i
381 s h . t . . m g . . . . . - . a . . m s m . e o . o e . m . . . r . t o . m . m . g . . . . . g m l
382 t a . a . . a . . . . . . o . c . . a o a . n s . n . . a . . . g . p l . a . a . e . . . . . o a e
383 a n . r . . r . . . . . . = . t . . r r r . c . . f . . r . . . e . . v . r . r . n . . . . . i r s
384 r g . t . . k . . . . . . e . i . . k = k . o . . l . . k . . . . . . e . k . k . d . . . . . n k .
385 t e . r . . e . . . . . . x . v . . e o e . d . . i . . e . . . . . . d . e . e . o . . . . . g e .
386 r - . e . . r . . . . . . c . e . . r b r . i . . c . . r . . . . . . . . r . r . c . . . . . . r .
387 e o . v . . s . . . . . . h . . . . s s s . n . = t . . s . . = . . . . . s . s . - = . . . . . s .
388 v b . . . . - . . . . . . a . . . . - o - . g . h . . . - . . g . . . . . - . - . p g . . . . . = .
389 . s . . . . c . . . . . . n . . . . c l c . . . i . . . c . . e . . . . . . = . t e . . . . . g .
390 . m . = . . a . = . . . . g . = = . a e a . . . s . = . a . . n . = . . . = . w . _ n . . . . . e .
391 . a . g = . s = d . . . . e . i e . s t = . . . t = c . = = . d . p . . . e . i . B d . . . . . n .
392 . r . e b = = h i . . . . - . d x . e e h = . = e c o . d g . o . u . . . o . r . R o . = . . . d =
393 . k . n u e c i f . . = . o = e c . - - t b = f d o n . i e . c = l . . . l . e . . c . g . . . o e
394 . e . d n x o s f . . r . b p n h . A c t r g i i n v . r n . - u l . = = - . p . . - = e = . . c m
395 . r . o d c n t - . . e . s a t a . 5 h p a e l t v e . e d . d p - . m m p . r . . e g n m = = - p
396 . s . c l h f e u . . v . m r i n . = a - n n e - e r . c o = a d p . q q a . o . . l e d e m e s t
397 . = . - e a l d n . . l . a e f g = m n p c d s b r t . t c m . a u = - - t . t . . . n o r q x v y
398 . m . j 2 n i i i . . o . r n y e c q g r h o e a t - . a - q . t l h g q c = o . . . d c g - c . -
399 . e = a - g c t f = . g . k t . - a - e o - c t s - h = c f - . e l i i r h e . = . . o - e e h . g
400 = r h . m e t - i d = - . e s . o t q s t o - - e s g s c r s . - - s t e . x . s = . c i - o a . r
401 g g i . u - . b e i i m . r . . b . q e o p r g . v - u e . y . n c t . n . c . t d . . t c l n . o
402 e e s . l o . o d f s m . s . . s . u t c t o e . n s b s . m . a o e . a . e . a i . . . o . g . u
403 n - t . t b . o . f s a = - . . m . e - o i . n . - v r s . l . m r d . m . s . t f . . . m . e . p
404 d c e . i s . k . - u p r c . . a . u = l o . e . t n e . . i . e r i . e . s . u f . . . m . - . .
405 o l d . p m . m . b e i e = . . r . e i . n . r . a . p . . n . s u t . . . i . s - . . . i . o . =
406 c o i . l a . a . i 6 n p h . . k . . n . . . a . g . o . . k = . p - . . . v . - c . . . t . b . j
407 - s t . e r . r . n 6 d a t . . e . . s . . . t . s . - . . s e . t d . . . e . r o . . . . . s = o
408 z e - . - k . k . a 0 e i t . . r . . t . . . e = . . r . . . n . i r . . . - . e l = . . . . m s u
409 h d n . c e . - . r . x r p . . s . . a . . . d j . . e . . . c . o o . . . m . v o b . . . . a h r
410 _ h o . h r . m . y . . - - = . = . . l . . . . o . . l . . . o . n p . . = e . . r u . . . . r o n
411 C e n = a s . o = - . . s b f . l . . l . . . . u . . a . . . d . . . . . i r . . . g . . . . k w a
412 N a - d n - . = c f . . t r l . o . . . . . . = r = . t = . . i . = . . . s = = . . z . . . . e . l
413 . d c i = = . l o i . . r a a . c . . . = . . c n s . i m = . n . i . = . s r r . . i . . . . r . -
414 . s o f b i = o m l . . i n g . a . . . e . . o a i = v e s . g . s . c . u e e . . l . . . . s . s
415 . . m f a s u g p e . . p c s . t . . . x . = n l m m = r p . . = s = h . e b n . . = = . . = = . h
416 . . m - s s n t l . . . . = . . e . . . t . e v . p e e g a . . d u l e . 6 a a = . c r = = g c . a
417 . . = c i u i o e = = . . h . . . . . . d = x e . l r n e r . . e e o c . 7 s m l . o e c i e h . r
418 . . c h c e f p t m c . = g . . . = . . a m c r . e g c - s . . b 1 c k . 2 e e o . n b h m n e . e
419 . = o a . 5 i r i e o . r w . . . g . . t q h t . - e o r e . . u 1 k - . . - - g = t u e p d c . .
420 . r n n . 8 e o o r m . e e . = . e . . a - a - . u - d e - . . g 7 - s . = i a e a r i c e o k . .
421 . = f g . 6 d c n g m . b b . p . t . = . p n c . p r i v i . . b 5 b h = r n f x u i l k x c - . =
422 = q i e . . - = . e i . a - . u . b . m . u g l . d e n e m = . u . a b o e m t c d b d - p - e = h
423 d r g . . . t m . - t . s c . l . u = q . l e o . a m g r p c = i . d a b b e e h i . s c - d x n g
424 e e . . . . e e . i - . e s . l . n d - . l - n = = o - t o h s l . n n s a m r a t . t o b e e o r
425 v c . . . . = r = n m . - p = - . d i q . - o e p p v a 2 r i t d . e g o s o - n - . a m r . c t c
426 e o . . . . e g e t u . i . p h . l f g . f b b a u e l . t l a d . s . l e r m g s . t m a . u i .
427 l r . . = . x e x e l . s . u t . e f o . r s r t s . i . . d t a . s . e - y e e u . e i n . t f .
428 - d . . s = c - c r t . s . s t . . - t . o m = c h . g . . r u g = . . t c . r . b . . t c . e y .
429 w . . . e m h r h n i . u . h p = . u o . m a p h - . n . = e s . g . . e h . = . r = . . h . . - .
430 a . . = r q a e a a p . e . - . a . p . = - r u b c . = . p n - . p . = - e . f . e i . . = . . c .
431 r . . p v - n v n l l . - . c . d . g . e b k s o h = p . u . t . g = h t c . i = p m . . m . = h .
432 n . = a e q g e g = = . n = h = d . r . x u e h m e d r = s . e = . h g a k . l p o p = . q . p a .
433 i . c t . d e r e m p . o b e a r . a . c n r - b c i o m h . r p . t w g - . e u . o i . - . u n .
434 n . a h . i - t - e u . = o c r e . d . h d = c - k r g a - . s u . t e - r = b s = r m = q . s g =
435 g = s c . f o . o r s . p o k b m = e . a l p h t h s r n c . e s . p b = e u r h p t p p r . h e p
436 s c e o . f b . b g h . u k h i o i = . n e a e l e t e i h . . h . - - p s r a - u - o u e . - = u
437 = h c n . . s . s e - . s m e t v m m . g . t c s a a s f e . . - = p a u t l n c s e r s f . c k s
438 p e o f . . m . m 7 c . h a a r e p e . e = c k = = t s e c = . c m r n s o - c h h o t h r = h n h
439 u c l l = . a . a . h . - r d a . o r . - i h h p h e . s k p = h e o n h r d h e - l s - e p e o -
440 s k l i p . = . r . e . c k s r . r g = o s b e u g . . t h e c e r x o - = o . c c . - c s u c w c
441 h - i c u . m . k . c . h s - = . t e p b s o a s w . . . e r o c g y t c p w = k h . c h s k n h
442 - c s t s . e . e . k . e - p p . - 6 u s u m d h e . . . a m n k e . a h u n s h e . h e = h h . e
443 c l i s h . r . r = h . c r r a . u . s m e b s - b = = . d i v h 2 . t e s l y e c . e c p - = . c
444 h a o - - . g = = d e . k e u r = n . h a 1 - - c d c p . s s e e . = = c h o m a k . = k u c o . k
445 e n n b c . e r i i a . h b n s b k . - r 8 = u h i l u . = s r a . r p k - a l d h . s h s h l . h
446 c g . a h = 9 e s f d . e a = e u n . c k 0 s = e r o s . p = t d . e u h c d i s e . p e h e d . e
447 k = . s e m . l s f s . a s h i n o . h e 2 p c c s n h . y p = s . v s e h = n - a = a = - c c . =
448 h i = = c q . i u d - . d = g n d w . e r . a o k = e - . 3 a u - . s h a e p k s d p r r c k = = c
449 e s e c = - . n e i u . s p w d l n = c = = r n h p - c = - t p u . e - d c u - u = u s e h h e r h
450 a s o o m s . k 1 r n . = u e e e . r k m r s f e u p h s c c d n . t c s k s p = u s e p e e o e a
451 d u l m a u . . 3 . p . e s b x - = e h a e e u a s u e c o h a = . - h - h h = a p h - o c a l b n
452 s e - m n b = = 0 . u . n h = = v p v e n q - s = h l = h m . t u = o e s e - m r d - m - = d f a g
453 - 1 a i i r e r = . = . c - b d s u s a i u v e b - l c e = . e n d u c u a c e c a c e c i s i s e
454 u 8 d t f e m e r . c . o c r i - s e d f i = d o c - o m p . - b e t k = d h r h t h r = s - l e l
455 n 7 d t e p p b e . l . d h a f o h t = e r e - o h = n e u = i u b g = h = e g i e e g l s = e - o
456 = 7 . e s = t a b = o . e e n f u v - s s e n r k e h t s s s s n u = w i n c e v - c = a u i n p g
457 n = . r t c y s a m n . . c c - = a d p t s c e m c g e . h p = d g h e s e k 1 = r k i r e s a a =
458 e m . . . o - e s e = . . k h c i r i a = = o = a k w x . - a j = b g b t w h 0 e e h n g 1 s = = d
459 w e = . = n f - e r d . = h = o s = r r p u d e r = e t = c r o c u w s e = e . x = e h = 5 u h d o
460 e r i = r t = = - g e . u = h p s r s s u p = o = e b = i h s u u = e = = e = = e s = e d = e g i u
461 = s b e r i w = e = . n t g y u e = = l d b l i o = d s e = r s r b m m x e g c p s r i i = k f =
462 e = s a b = s o s = m = r e w = e v o n l a u - m l c i s c h n = e = a a t d l u a t i f s l = f m
463 m x u d = a s r u m e i e m e b 4 = b e - = n = = - o f = g = d v p n c e i o = r t f s o r = e
464 p d e - i n u k b q r s = p b a = d s s = r d r e u n = = d w r e e u i n t = = d = = u g e a r
465 = g 1 p s c = e - g s e = - d i e = t e e l e o = v h r i e e b r s = = s = f h i r = i = - b b g
466 p . = = s e s r = = e u m p d - s b d e x v e v l u = g e f b v u t h u d = m i g r e b s h = a o e
467 a . p l = = y . l p = = p a = = s u i = t e 2 l - r r w v f - l = = - s o d q l w s v a s y a = = =
468 t = r i b d m = o a t f t t b c = f w r r = = = l e e = e = a m c e c e - = = t l c u = n u u h
469 = m = = = = = s = = = i = = = = = d = = = = d l h = = = w = = s t = g = = = = e h = = = = l = i = =
470 c = c c m c c = c a = c l c r = = c c l = = = = = d = = = s = = c = c a c c = = = c c = = f l
471 h p o a o o a a m n f o e s a l o f c s p c r o c c r r b a b l m o o c c d c u f
472 u m e s p m o s p u o o o e
473 s e n - l e n - l s o o n n
474 h n d s i n e s i h k k e d
475 - . e t d - e t - m m - .
476 r . r . u r . r a a u .
477 a . . n v . a r r n .
478 c . . c e . c k k c .
479 e . . o . . e s s o .
480 . m . . . - - m .
481 . p . . p p p
482 . r . . u u r
483 . e . . s s e
484 . s . . h h s
485 . s . p p s
486 . e . u u e
487 . d . l l d
488 . . . l l
489 . . . . .
490 . . . .
491 . . . .
492 . . . .
493 . . . .
494 . . . .
495 . . . .
496 . . . .
497 . . . .
498 . . . .
499 . .
500 . .
501 . .
502 . .
503 . .
504 . .
505 . .
506 . .
507 . .
508 . .
509 . .
510 . .
511 . .
512 . .
513 . .
514 . .
515 .
Differential Revision: https://phab.mercurial-scm.org/D2615
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:53:32 -0500] rev 36693
py3: whitelist another 15 passing tests
Differential Revision: https://phab.mercurial-scm.org/D2614
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:09:26 -0500] rev 36692
cmdutil: ensure PatchError messages are coerded to bytes, not str
Differential Revision: https://phab.mercurial-scm.org/D2613
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:08:41 -0500] rev 36691
tests: fix bytes literals in test-fncache.t
# skip-blame just b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2612
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:08:05 -0500] rev 36690
scmutil: avoid using basestring and add explicit handling of unicodes
This resolves some Python 3 defects, and I don't think it is a
meaningful behavior change in Python 2.
Differential Revision: https://phab.mercurial-scm.org/D2611
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 17:07:18 -0500] rev 36689
tests: fix inline extension bytes in test-ssh-proto-unbundle.t
# skip-blame just b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2610
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 16:38:17 -0500] rev 36688
hghave: fix up clang-libfuzzer regex to be bytes
Fixes this check on Python 3.
# skip-blame just a b prefix
Differential Revision: https://phab.mercurial-scm.org/D2607
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 15:41:12 -0500] rev 36687
py3: accept both unicode and byte strings as filename carried by IOError
Follows up 77f98867538f. We could assume there's no bytes filename in our
codebase, but it's probably better to not raise UnicodeError because of
a unicode filename.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 15:33:52 -0500] rev 36686
py3: back out c77c925987d7 to store bytes filename in IOError
Appears that this is how Python 3 works.
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:57:23 -0500] rev 36685
largefiles: headers and values need to be sysstrs, add r prefixes
# skip-blame just some r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2606
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 11:26:30 -0500] rev 36684
cext: accept arguments as Py_buffer
The s*/y* value formatters receive a Py_buffer instead of a char *.
This value format is more flexible in the types that it allows.
We change bdiff() to accept any object that conforms to the buffer
protocol. We validate the buffers are contiguous and have a single
dimension.
This allows memoryview instances to be handled by the function, so
we revert a recent change to cast arguments to bytes before calling
this function.
Differential Revision: https://phab.mercurial-scm.org/D2587
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 11:19:43 -0500] rev 36683
cext: refactor cleanup code in bdiff()
A future commit will need to introduce additional cleanup code.
We refactor the cleanup code to check NULL before calling free().
We also initialize these variables as NULL.
We set the out of memory exception explicitly, so we can just return
result.
Differential Revision: https://phab.mercurial-scm.org/D2586
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:13:33 +0530] rev 36682
py3: use pycompat.bytestr() to convert error messages to bytes
Differential Revision: https://phab.mercurial-scm.org/D2535
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:28:51 -0500] rev 36681
url: more bytes/unicodes fussing in url.py around auth handling
Once again, these methods are a little annoying to handle because they
can get unicodes or bytes depending on who's calling. I think we can
probably clean this up a TON once we can run something like pytype and
do typechecking of our Python, but until then this is going to be the
easy way out. This fixes test-http-bundle1.t.
Differential Revision: https://phab.mercurial-scm.org/D2599
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:24:21 -0500] rev 36680
httpconnection: convert url to bytes in readauthforuri
This method is sometimes called by the stdlib, so we just need to
accept both bytes and unicodes here. Awesome.
Differential Revision: https://phab.mercurial-scm.org/D2598
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 14:44:41 -0500] rev 36679
tests: prevent enormous output spew in test-lfs-largefiles.t
This test currently fails on Python 3, but in a super-slow way. Adding
this `head` invocation costs us nothing, but will prevent failures in
this area from being super expensive.
Differential Revision: https://phab.mercurial-scm.org/D2600
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:23:03 -0500] rev 36678
py3: fix formatting of path-auditing errors
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:36:05 -0500] rev 36677
py3: make os.curdir a bytes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 12:34:35 -0500] rev 36676
py3: make os.pardir a bytes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 14:21:47 -0500] rev 36675
py3: fix slicing of bytes in patch.iterhunks()
Augie Fackler <augie@google.com> [Sat, 03 Mar 2018 09:35:59 -0500] rev 36674
tests: fix various test-check-module-imports.t violations
Somehow these are only caught when running the test under Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2580
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 00:33:46 +0530] rev 36673
pycompat: prevent encoding or decoding values if not required
pycompat.py has functions strurl and bytesurl which decodes and encodes the url
passed on Python 3 respectively. In some cases, strurl gets a url which is
already str and bytesurl gets a url which is already bytes. Let's prevent
encoding or decoding the values again if not required.
Differential Revision: https://phab.mercurial-scm.org/D2472
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:39:48 -0500] rev 36672
py3: add some b'' to make test-lock-badness.t happy
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:32:06 -0500] rev 36671
py3: fix formatting of lock error message
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:02:36 -0500] rev 36670
py3: fix some unicode madness in global exception catcher
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 10:08:13 -0500] rev 36669
py3: pass a system-string filename to sub-classes of IOError
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 09:19:34 -0500] rev 36668
py3: fix some membership tests on linkrev adjustment
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:38:09 -0500] rev 36667
py3: make test-basic.t pass on Python 3
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:35:20 -0500] rev 36666
py3: silence the final IOError by closing stdout/err slightly early
Fixes the following test failure:
$ hg status >/dev/full
abort: No space left on device
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' ...
OSError: [Errno 28] No space left on device
[120]
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 22:10:36 -0500] rev 36665
py3: conditionalize initialization of stdio flags
Since Python 3 doesn't depend on the stdio of libc, there should be no need
to set O_BINARY flag on Windows.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:25:19 -0500] rev 36664
test-command-template: glob out detailed "invalid escape" message
Python 3 also reports the position where an invalid escape found.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:14:54 -0500] rev 36663
templater: byte-stringify dict/list values before passing to default format
bytestr() is applied only when no custom format string like '%d' is specified.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:07:22 -0500] rev 36662
templater: allow dynamically switching the default dict/list formatting
'%s' doesn't work nicely on Python 3 because many Python types don't implement
__bytes__().
Pulkit Goyal <7895pulkit@gmail.com> [Sat, 03 Mar 2018 21:01:07 +0530] rev 36661
py3: use util.forcevytestr to convert error to bytes
Differential Revision: https://phab.mercurial-scm.org/D2585
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:50:07 -0500] rev 36660
util: report integer result from write()
Python 2 sometimes returns None from write() calls. Python 3 doesn't.
This will make test output inconsistent between Python 2 and 3. So
let's paper over the differences by converting None to the length of
the result string.
Differential Revision: https://phab.mercurial-scm.org/D2584
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 03 Mar 2018 09:34:06 -0500] rev 36659
util: log readinto() I/O
Differential Revision: https://phab.mercurial-scm.org/D2583
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:47:18 -0500] rev 36658
util: teach escapedata() about bytearray
re.map doesn't seem to know about bytearray (at least in Python 2).
Cast bytearray to a bytes to work around this inconvenience.
Differential Revision: https://phab.mercurial-scm.org/D2582
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 22:59:12 -0500] rev 36657
sshpeer: don't read(0)
read(0) is essentially a no-op. Let's avoid the function call, overhead,
and extra test output by not performing it.
Differential Revision: https://phab.mercurial-scm.org/D2581
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:51:34 -0500] rev 36656
py3: unblock C extensions on Python 3
Please make sure to build C extensions before running tests with -l:
$ make local PYTHON=python3
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:59:20 -0500] rev 36655
py3: make test-ancestors.py pass on Python 3 with C extensions
# skip-blame just some b prefixes
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:24:25 -0500] rev 36654
py3: do not pass a memoryview to bdiff.bdiff()
This doesn't look nice, but I don't know how to make a zero-copy slice of
bytes which is compatible with the buffer protocol.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 07:00:37 -0500] rev 36653
py3: do not pass a list of iterators to computephasesmapsets()
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:57:02 -0500] rev 36652
cext: fix computephasesmapsets() not to return without setting an exception
Spotted by map() of Python 3.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:44:47 -0500] rev 36651
py3: do not pass a float to dict_new_presized()
I really don't like the division operator of Python 3 since I'm not doing
a math.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:41:52 -0500] rev 36650
cext: mark tuple_format as a constant
Just for clarity.
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:18:47 -0500] rev 36649
py3: bulk-replace 'const char*' format specifier passed to PyArg_ParseTuple*()
Perhaps we need this because 's' accepts a unicode string.
https://docs.python.org/3/c-api/arg.html#strings-and-buffers
Substituted using the following pattern with some manual fixes:
'\b(PyArg_ParseTuple)\((\s*\w+,\s*)"([^"]+)"'
'\b(PyArg_ParseTupleAndKeywords)\((\s*\w+,\s*\w+,\s*)"([^"]+)"'
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 06:08:22 -0500] rev 36648
py3: bulk-replace bytes format specifier passed to Py_BuildValue()
On Python 3, "s" means a utf-8 string. We have to use "y" for bytes, sigh.
https://docs.python.org/3/c-api/arg.html#c.Py_BuildValue
Substituted using the following pattern with some manual fixes:
'\b(Py_BuildValue)\((\s*)"([^"]+)"'
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:58:41 -0500] rev 36647
py3: add PY23() macro to switch string literal depending on python version
I have no better idea to work around the bytes-unicode divergence of
Py_BuildValue(). Maybe we can write a code transformer for C extensions? :)
Yuya Nishihara <yuya@tcha.org> [Sat, 03 Mar 2018 05:50:45 -0500] rev 36646
py3: don't try to mangle C extension blob by code transformer
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 18:47:27 -0500] rev 36645
tests: add missing b prefixes in test-atomictempfile.py
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2570
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:31:44 -0800] rev 36644
wireproto: only expose "between" to version 1 of wire protocols
We recently marked other legacy commands as only available to version 1
of the wire protocols. We held off marking "between" because it is
used as part of the SSH handshake.
Since SSH servers assume they are version 1 by default and the
"between" request that is issued as part of the version 2 handshake
is swallowed and not operated on, everything should "just work" if
"between" is not available to version 2.
Differential Revision: https://phab.mercurial-scm.org/D2513
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 18:55:18 -0500] rev 36643
tests: add more tests around hook output and getbundle
The previous tests around hook output only tested Python hooks. Let's
add some shell hooks in for additional test coverage.
Differential Revision: https://phab.mercurial-scm.org/D2550
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 16:24:02 -0800] rev 36642
wireproto: add transport specific capabilities in the transport
We add a method to the protocol handler interface that allows
specific implementations to add their own capabilities.
The SSH implementation is a no-op.
The HTTP implementation adds the HTTP-specific capabilities.
The end result is transport specific capabilities now live in the
transport code instead of in some generic function in the wireproto
module.
Differential Revision: https://phab.mercurial-scm.org/D2512
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:23:04 -0800] rev 36641
wireproto: don't expose changegroupsubset capability if not available
We just marked the changegroupsubset command as only available to
version 1 of the wire transports. There is a capability of the same
name of the command that indicates if the command is supported.
This commit teaches the capabilities code to conditionally emit that
capability depending on whether the command is available for the
current transport.
Most test output is reordering of capabilities. But the limited tests
for version 2 of the SSH protocol do show the capability disappearing.
Differential Revision: https://phab.mercurial-scm.org/D2486
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:06:10 -0800] rev 36640
wireproto: don't expose legacy commands to version 2 of wire protocol
Now that we have the ability to control which transports a wire
protocol command is exposed on, let's put it to use.
We flag the "branches," "changegroup," and "changegroupsubset"
commands as only available on version 1. "branches" was used by the
legacy discovery mechanism and was replaced by the "known" and
"heads" commands. "changegroup" and "changegroupsubset" were
replaced by "getbundle."
"between" is also legacy. However, since it is used by the SSH
handshake protocol, marking it as legacy is a bit more complicated
and will be done in a later commit.
Another nuanced issue with this change is that the server-advertised
capabilities still list "changegroupsubset" despite the command not
being available. This will be addressed in a subsequent commit.
Differential Revision: https://phab.mercurial-scm.org/D2485
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:56:03 -0800] rev 36639
wireprotoserver: identify requests via version 2 of SSH protocol as such
The protocol handler needs to advertise itself as version 2 in order
for a future feature to work.
Differential Revision: https://phab.mercurial-scm.org/D2484
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 09:47:37 -0500] rev 36638
wireproto: allow wire protocol commands to declare transport support
Currently, wire protocol commands are exposed on all transports.
Some wire protocol commands are only supported or sensical on some
transports. In the future, new wire protocol commands may only be
available on new transports and legacy wire protocol commands may
not be available to newer transports.
This commit introduces a mechanism to allow @wireprotocommand to
declare transports for which they should not be available. The
mechanism for determining if a wire protocol command is available
for a given transport instance has been taught to take this knowledge
into account.
To help implement this feature, we add a dict to wireprototypes
declaring all wire transports and their metadata. There's probably
room to refactor the constants used to identify the wire protocols.
But that can be in another commit.
Differential Revision: https://phab.mercurial-scm.org/D2483
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 02 Mar 2018 18:50:49 -0500] rev 36637
sshpeer: don't read from stderr when that behavior is disabled
We previously prevented the creation of doublepipe instances when
we're not supposed to automatically read from stderr. However,
there were other automatic calls to read from stderr that were
undermining this effort.
This commit prevents all automatic reads from stderr from occurring
when they are supposed to be disabled.
Because stderr is no longer being read, we need to call "readavailable"
from tests so stderr is read from.
Test output changes because stderr is now always (manually) read after
stdout. And, since sshpeer no longer automatically tends to stderr,
no "remote: " messages are printed. This should fix non-deterministic
test output.
FWIW, doublepipe automatically reads from stderr when reading from
stdout, so I'm not sure some of these calls to self._readerr() are
even needed.
Differential Revision: https://phab.mercurial-scm.org/D2571
Boris Feld <boris.feld@octobus.net> [Thu, 15 Feb 2018 17:18:26 +0100] rev 36636
util: extract all date-related utils in utils/dateutil module
With this commit, util.py lose 262 lines
Note for extensions author, if this commit breaks your extension, you can pull
the step-by-step split here to help you more easily pinpoint the renaming that
broke your extension:
hg pull https://bitbucket.org/octobus/mercurial-devel/ -r ac1f6453010d
Differential Revision: https://phab.mercurial-scm.org/D2282
Sangeet Kumar Mishra <mail2sangeetmishra@gmail.com> [Thu, 08 Feb 2018 23:27:24 +0530] rev 36635
clone: updates the help text for hg clone -{r,b} (issue5654)
Differential Revision: https://phab.mercurial-scm.org/D2095
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 15:48:31 -0500] rev 36634
py3: whitelist more passing tests
Differential Revision: https://phab.mercurial-scm.org/D2569
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:42 -0500] rev 36633
lfs: convert hexdigest to bytes using sysbytes
Differential Revision: https://phab.mercurial-scm.org/D2568
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:25 -0500] rev 36632
lfs: use %d to encode int, not str()
Differential Revision: https://phab.mercurial-scm.org/D2567
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:07:07 -0500] rev 36631
lfs: use byteskwargs() on some **kwargs for python 3 compat
Differential Revision: https://phab.mercurial-scm.org/D2566
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:06:37 -0500] rev 36630
lfs: add some bytestring wrappers in blobstore.py
Differential Revision: https://phab.mercurial-scm.org/D2565
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:05:53 -0500] rev 36629
lfs: add missing b prefixes on some regular expressions
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2564
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:34:35 +0900] rev 36628
templatekw: deprecate showdict() and showlist() (API)
.. api::
templatekw.showdict() and showlist() are deprecated in favor of new
(context, mapping) API. Switch the keyword function to new API and use
templatekw.compatdict() and compatlist() instead.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:25:14 +0900] rev 36627
templatekw: switch remainder of _showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 20:55:53 +0900] rev 36626
templatekw: switch manifest template keyword to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:23:06 +0900] rev 36625
templatekw: switch latesttags template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:08:02 +0900] rev 36624
templatekw: switch revset() to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 19:05:57 +0900] rev 36623
templatekw: switch obsfate-related template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 18:52:51 +0900] rev 36622
templatekw: switch namespace template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 18:56:06 +0900] rev 36621
namespace: use registrar to add template keyword
Prepares for switching to the new API.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:45:44 +0900] rev 36620
templatekw: switch most of showlist template keywords to new API (issue5779)
Non-trivial changes will follow.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:22:55 +0900] rev 36619
templatekw: switch showdict template keywords to new API
Kevin Bullock <kbullock+mercurial@ringworld.org> [Fri, 02 Mar 2018 15:37:57 -0500] rev 36618
py3: bail on ratcheting tests forward on 3.6.0 and 3.6.1
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:22:36 -0500] rev 36617
py3: silence "bad escape" warning emitted by re.sub()
Since we pass user strings directly to re.sub(), we can't avoid this warning
without a BC.
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:12:17 -0500] rev 36616
debugcommands: add some strkwargs love to some **args calls
Differential Revision: https://phab.mercurial-scm.org/D2563
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:10:34 -0500] rev 36615
debugcommands: add an r prefix to make file mode for fdopen a sysstr
# skip-blame just an r prefix
Differential Revision: https://phab.mercurial-scm.org/D2562
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:09:50 -0500] rev 36614
util: work around Python 3 returning None at EOF instead of ''
Differential Revision: https://phab.mercurial-scm.org/D2561
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 14:09:20 -0500] rev 36613
util: add missing r prefix on some __setattr__ calls
# skip-blame just a pair of r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2560
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 13:47:49 -0500] rev 36612
tests: add some re and globs for test-revset on python3
At this point we're down to two deprecation warnings (which I suspect
are showing a bug in the test?) and one weird-looking failure. Progress!
Differential Revision: https://phab.mercurial-scm.org/D2559
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:38:16 -0500] rev 36611
tests: add missing b prefixes and fix a %s to %d in test-revset.t
# skip-blame just b prefixes and a %d instead of %s
Differential Revision: https://phab.mercurial-scm.org/D2558
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:37:41 -0500] rev 36610
revset: use %d to turn an int into a bytestr
Differential Revision: https://phab.mercurial-scm.org/D2557
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 11:37:21 -0500] rev 36609
revset: use {force,}bytestr to fix some %r formatting issues
Differential Revision: https://phab.mercurial-scm.org/D2556
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 01:17:42 -0500] rev 36608
py3: sixteen more passing tests
Differential Revision: https://phab.mercurial-scm.org/D2552
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:33 -0500] rev 36607
debugcommands: fix repr in debugignore print with pycompat.bytestr
Differential Revision: https://phab.mercurial-scm.org/D2549
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:58:28 -0500] rev 36606
verify: fix exception formatting bug in Python 3
Differential Revision: https://phab.mercurial-scm.org/D2541
Yuya Nishihara <yuya@tcha.org> [Fri, 02 Mar 2018 13:50:31 -0500] rev 36605
get-with-headers: use bytes stdout thoroughly
On Python 3, sys.stdout.buffer is backed by a separate buffer from sys.stdout.
We should choose one.
Martin von Zweigbergk <martinvonz@google.com> [Thu, 01 Mar 2018 17:16:36 -0800] rev 36604
exchange: remove dead assignment or forcebundle1
Differential Revision: https://phab.mercurial-scm.org/D2548
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 09:09:38 -0500] rev 36603
templatekw: fix dict construction in _showlist to not mix bytes and strs
What we had was fine on Python 2, but was slightly wrong on Python
3. This works on both.
Differential Revision: https://phab.mercurial-scm.org/D2554
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 09:08:11 -0500] rev 36602
templatefilters: avoid infinite recursion bug in stringify
This doesn't ever happen on Python 2, but it's been a persistent pain
on Python 3. Adding this helped produce some of my upcoming Python 3
fixes.
Differential Revision: https://phab.mercurial-scm.org/D2553
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:55 -0500] rev 36601
match: some minimal pycompat fixes guided by test-hgignore.t
Differential Revision: https://phab.mercurial-scm.org/D2551
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:37:07 -0500] rev 36600
purge: apply byteskwargs to opts, fixing all python3 issues here
Differential Revision: https://phab.mercurial-scm.org/D2547
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:51 -0500] rev 36599
tests: port test-bookmarks.t extension to Python 3
# skip-blame it's just b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2546
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:30 -0500] rev 36598
scmutil: fix a repr in an error message on Python 3
Differential Revision: https://phab.mercurial-scm.org/D2545
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:19:16 -0500] rev 36597
bookmarks: fix a repr in a message on Python 3
Differential Revision: https://phab.mercurial-scm.org/D2544
Augie Fackler <augie@google.com> [Fri, 02 Mar 2018 00:11:19 -0500] rev 36596
py3: add missing b prefixes in test-debugextensions.t
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2543
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:59:44 -0500] rev 36595
tests: help dummysmtpd work on python 3
Differential Revision: https://phab.mercurial-scm.org/D2542
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 23:58:04 -0500] rev 36594
tests: port helper script revlog-formatv0.py to python 3
Differential Revision: https://phab.mercurial-scm.org/D2540
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 21:17:58 -0500] rev 36593
tests: add missing b prefix in test python in test-issue2137.t
# skip-blame just a b prefix
Differential Revision: https://phab.mercurial-scm.org/D2539
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 20:44:38 -0500] rev 36592
templatefilters: convert arguments to sysstrs for unicode() ctor
Differential Revision: https://phab.mercurial-scm.org/D2538
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 07:14:59 +0530] rev 36591
py3: use util.forcebytestr() to convert IOErrors to bytes
Differential Revision: https://phab.mercurial-scm.org/D2536
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:20:49 -0500] rev 36590
py3: whitelist three more passing tests
Differential Revision: https://phab.mercurial-scm.org/D2530
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:13:50 -0500] rev 36589
convert: fix two %r output formats with pycompat.bytestr() wrapping
Differential Revision: https://phab.mercurial-scm.org/D2529
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:48:06 -0500] rev 36588
convert: use our shlex wrapper in filemap to avoid Python 3 tracebacks
Differential Revision: https://phab.mercurial-scm.org/D2527
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:47:49 -0500] rev 36587
convcmd: use our shlex wrapper to avoid Python 3 tracebacks
Differential Revision: https://phab.mercurial-scm.org/D2526
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:47:35 -0500] rev 36586
convert: add some utility code for working with shlex on Python 3
This could have gone in pycompat, but it's only needed in convert, so
I figured it made more sense here. It's got py3 in the name and checks
pycompat.ispy3, so we'll find it whenever we decide to drop Python 2
support in 20x6.
# no-check-commit because of required foo_bar naming on the proxy class
Differential Revision: https://phab.mercurial-scm.org/D2525
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 17:46:34 -0500] rev 36585
pycompat: add support for encoding argument to our wrapper
This only works on Python 3, but I'm about to need it for a
regrettable hack in the convert code.
Differential Revision: https://phab.mercurial-scm.org/D2524
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:49:08 +0530] rev 36584
py3: port tests/test-wireproto.py to Python 3
Differential Revision: https://phab.mercurial-scm.org/D2534
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:47:56 +0530] rev 36583
py3: use pycompat.bytestr() to convert None to bytes
Differential Revision: https://phab.mercurial-scm.org/D2533
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:39:21 -0500] rev 36582
webcommands: use explicit integer division for Python 3 compat
Differential Revision: https://phab.mercurial-scm.org/D2532
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 04:59:27 +0530] rev 36581
templatefilters: stop using str as a variable name
str() is an inbuilt function.
Differential Revision: https://phab.mercurial-scm.org/D2531
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:15:58 -0500] rev 36580
py3: fix string slicing in util.parsetimezone()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 18:06:25 -0500] rev 36579
py3: replace type 'str' by 'bytes' in templater.py
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:56:32 -0500] rev 36578
py3: don't crash when re-raising encoding error
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:43:25 -0500] rev 36577
py3: mark all string literals in test-command-template.t as bytes
# skip-blame because just b'' prefixes
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 17:03:40 -0500] rev 36576
py3: byte-stringify ValueError of unescapestr() to reraise as ParseError
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:56:38 -0500] rev 36575
py3: fix type of string literals in templater.tokenize()
# skip-blame because just b'' prefixes
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:52:17 -0500] rev 36574
py3: drop b'' from error message generated by templater.runmember()
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:42:24 -0500] rev 36573
py3: fix join(), min(), and max() template functions over string
It's silly to split a string into characters and concatenate them, but that
should work and test-command-template.t has one. min() and max() had the
same issue on Python 3, so fixed too.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 16:32:45 -0500] rev 36572
py3: use startswith() to check existence of trailing '\n' in .hgtags file
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 15:57:27 -0500] rev 36571
py3: silence return value of file.write() in test-command-template.t
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 18:05:47 -0500] rev 36570
error: fix isinstnace check to use bytes instead of str
Differential Revision: https://phab.mercurial-scm.org/D2528
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:43:50 -0500] rev 36569
py3: whitelist another nine passing tests
I now see 347 tests passing[0] and 336 failing, so we're past halfway
there. Hooray!
0: A few tests appear to regress in small ways (doctest output
changes, for example) on Python 3.7.0a1, which is what I'm now
using to test. That said, I'm pleased to report no major regressions.
Differential Revision: https://phab.mercurial-scm.org/D2439
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:31:13 -0500] rev 36568
util: use pycompat.bytestr() on repr() in date parse abort
Avoids the b'' prefix.
Differential Revision: https://phab.mercurial-scm.org/D2438
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 03:06:43 +0530] rev 36567
py3: whitelist 14 new tests passing
12 new tests passed because of parent changeset and 2 were passing before that
too.
Differential Revision: https://phab.mercurial-scm.org/D2523
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 02:44:49 +0530] rev 36566
py3: slice over bytes to prevent getting ascii values
This fixed reading of mergestate files and fixes 14 tests on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2522
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:26:00 -0800] rev 36565
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
To avoid a cycle between modules in an upcoming commit.
Differential Revision: https://phab.mercurial-scm.org/D2482
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 14:21:29 -0800] rev 36564
wireproto: use named arguments for commandentry
We'll be adding more arguments in upcoming commits. Using named
arguments will make the code easier to read.
Differential Revision: https://phab.mercurial-scm.org/D2481
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 18:01:13 -0800] rev 36563
debugcommands: support for triggering push protocol
The mechanism for pushing to a remote is a bit more complicated
than other commands. On SSH, we wait for a positive reply from
the server before we start sending the bundle payload.
This commit adds a mechanism to the "command" action in
`hg debugwireproto` to trigger the "push protocol" and to
specify a file whose contents should be submitted as the command
payload.
With this new feature, we implement a handful of tests for the
"unbundle" command. We try to cover various server failures and
hook/output scenarios so protocol behavior is as comprehensively
tested as possible. Even with so much test output, we only cover
bundle1 with Python hooks. There's still a lot of test coverage
that needs to be implemented. But this is certainly a good start.
Because there are so many new tests, we split these tests into their
own test file.
In order to make output deterministic, we need to disable the
doublepipe primitive. We add an option to `hg debugwireproto`
to do that. Because something in the bowels of the peer does a
read of stderr, we still capture read I/O from stderr. So there
is test coverage of what the server emits.
The tests around I/O capture some wonkiness. For example,
interleaved ui.write() and ui.write_err() calls are emitted in
order. However, (presumably due to buffering), print() to
sys.stdout and sys.stderr aren't in order.
We currently only test bundle1 because bundle2 is substantially
harder to test because it is more complicated (the server responds
with a stream containing a bundle2 instead of a frame).
Differential Revision: https://phab.mercurial-scm.org/D2471
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:12:03 -0800] rev 36562
sshpeer: support not reading and forwarding stderr
The "doublepipe" primitive as used by sshpeer will automatically read
from stderr and forward output to the local ui.
This poses problems for deterministic testing because reads may not
be consistent. For example, the server may not be done sending all
output to stderr and the client will perform different numbers of
read operations or will read from stderr and stdout at different times.
To make tests deterministic, we'll need to disable the "doublepipe"
primitive and perform stderr I/O explicitly. We add an argument to the
sshpeer constructor to disable the use of the doublepipe.
Differential Revision: https://phab.mercurial-scm.org/D2467
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 16:03:27 -0800] rev 36561
tests: add wire protocol tests for pushkey
Let's get the wire format of some pushkey requests in test-ssh-proto.t.
Differential Revision: https://phab.mercurial-scm.org/D2466
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 12:50:59 -0800] rev 36560
debugcommands: support for sending "batch" requests
Let's teach `hg debugwireproto` to send "batch" requests.
The easiest way to implement this was as a pair of instructions to
begin and end a batched operation. Otherwise, we would have to reinvent
the parsing wheel or factor out the parsing code.
To prove it works, we add a batched request to test-ssh-proto.t.
Differential Revision: https://phab.mercurial-scm.org/D2408
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Mar 2018 08:27:30 -0800] rev 36559
debugcommands: allow sending of simple commands with debugwireproto
Previously, we only had support for low-level "raw" operations.
A goal of `hg debugwireproto` is to allow easily performing
higher-level primitives, such as sending a wire protocol command
and reading its response.
We implement a "command" action that does just this.
Currently, we only support simple commands (those without payloads).
We have basic support for sending command arguments. We don't yet
support sending dictionary arguments. This will be implemented later.
To prove it works, we add tests to test-ssh-proto.t that send some
"listkeys" commands.
Note: we don't observe/report os.read() events because these may not be
deterministic. We instead observe/report the read() and readline()
operations on the bufferedinputpipe. These *should* be deterministic.
Differential Revision: https://phab.mercurial-scm.org/D2406
Gregory Szorc <gregory.szorc@gmail.com> [Fri, 23 Feb 2018 09:40:12 -0800] rev 36558
wireproto: sort response to listkeys
The listkeys protocol is defined to produce a dictionary.
pushkey.decodekeys() uses a plain dict to hold the decoded results
of the wire protocol response. So order should not matter.
Upcoming tests will verify low-level output of wire protocol
commands and the non-deterministic emitting of listkeys was causing
intermittent failures.
So we make the output of listkeys deterministic.
Differential Revision: https://phab.mercurial-scm.org/D2405
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 01 Mar 2018 08:24:54 -0800] rev 36557
debugcommands: add debugwireproto command
We currently don't have a low-level mechanism for sending
arbitrary wire protocol commands. Having a generic and robust
mechanism for sending wire protocol commands, examining wire
data, etc would make it vastly easier to test the wire protocol
and debug server operation. This is a problem I've wanted a
solution for numerous times, especially recently as I've been
hacking on a new version of the wire protocol.
This commit establishes a `hg debugwireproto` command for sending
data to a peer.
The command invents a mini language for specifying actions to take.
This will enable a lot of flexibility for issuing commands and testing
variations for how commands are sent.
Right now, we only support low-level raw sends and receives. These
are probably the least valuable commands to intended users of this
command. But they are the most useful commands to implement to
bootstrap the feature (I've chosen to reimplement test-ssh-proto.t
using this command to prove its usefulness).
My eventual goal of `hg debugwireproto` is to allow calling wire
protocol commands with a human-friendly interface. Essentially,
people can type in a command name and arguments and
`hg debugwireproto` will figure out how to send that on the wire.
I'd love to eventually be able to save the server's raw response
to a file. This would allow us to e.g. call "getbundle" wire
protocol commands easily.
test-ssh-proto.t has been updated to use the new command in lieu
of piping directly to a server process. As part of the transition,
test behavior improved. Before, we piped all request data to the
server at once. Now, we have explicit control over the ordering of
operations. e.g. we can send one command, receive its response,
then send another command. This will allow us to more robustly
test race conditions, buffering behavior, etc.
There were some subtle changes in test behavior. For example,
previous behavior would often send trailing newlines to the server.
The new mechanism doesn't treat literal newlines specially and
requires newlines be escaped in the payload.
Because the new logging code is very low level, it is easy to
introduce race conditions in tests. For example, the number of bytes
returned by a read() may vary depending on load. This is why tests
make heavy use of "readline" for consuming data: the result of
that operation should be deterministic and not subject to race
conditions. There are still some uses of "readavailable." However,
those are only for reading from stderr. I was able to reproduce
timing issues with my system under load when using "readavailable"
globally. But if I "readline" to grab stdout, "readavailable"
appears to work deterministically for stderr. I think this is
because the server writes to stderr first. As long as the OS
delivers writes to pipes in the same order they were made, this
should work. If there are timing issues, we can introduce a
mechanism to readline from stderr.
Differential Revision: https://phab.mercurial-scm.org/D2392
Gregory Szorc <gregory.szorc@gmail.com> [Tue, 27 Feb 2018 15:47:44 -0800] rev 36556
debugcommands: add debugserve command
`hg serve --stdio` requires the exact command argument form
`hg -R <path> serve --stdio` for security reasons. An upcoming
commit will need to start an SSH protocol server process with
custom settings.
This commit creates a `hg debugserve` command for starting servers
with custom options. There are no security restrictions and we can
add options here that aren't appropriate for built-in commands.
We currently only support starting an SSH protocol server using
the process's stdio file descriptors. The server supports logging
its I/O activity to a file descriptor number passed as a command
argument.
Differential Revision: https://phab.mercurial-scm.org/D2464
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Feb 2018 11:16:09 -0800] rev 36555
wireprotoserver: support logging SSH server I/O to a file descriptor
We will soon introduce a debug command and tests for low-level I/O
behavior of the SSH wire protocol.
To facilitate this, we need to instrument the SSH server so it
can log its I/O as events occur.
We teach the SSH server to convert its stdout and stderr file objects
into file object proxies. We configure these proxies to log to a
file descriptor whose file number is specified via a config option.
The idea is to have a future debug command start the SSH server
process with access to an extra file descriptor that can be used
by the server process to log I/O. Monitoring only the write I/O
will be more robust than monitoring both writes and reads from the
client process because read operations are not deterministic. This
will matter for tests that capture raw I/O activity.
Differential Revision: https://phab.mercurial-scm.org/D2463
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:24:03 -0800] rev 36554
util: enable observing of util.bufferedinputpipe
Our file object proxy is useful. But it doesn't capture all I/O.
The "os" module offers low-level interfaces to various system calls.
For example, os.read() exposes read(2) to read from a file
descriptor.
bufferedinputpipe is special in a few ways. First, it acts as a
proxy of sorts around our [potentially proxied] file object. In
addition, it uses os.read() to satisfy all I/O. This means that
our observer doesn't see notifications for reads on this type.
This is preventing us from properly instrumenting reads on ssh
peers.
This commit teaches bufferedinputpipe to be aware of our
observed file objects. We do this by introducing a class variation
that notifies our observer of os.read() events. Since read()
and readline() bypass os.read(), we also teach this instance
to notify the observer for buffered variations of these reads as
well. We don't report them as actual read() and readline() calls
because these methods are never called on the actual file object
but rather a buffered version of it.
We introduce bufferedinputpipe.__new__ to swap in the new class
if the passed file object is a fileobjectproxy. This makes hooking
up the observer automatic. And it is a zero cost abstraction for
I/O operations on non-proxied file objects.
Differential Revision: https://phab.mercurial-scm.org/D2404
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:22:20 -0800] rev 36553
util: add a file object proxy that can notify observers
There are various places in Mercurial where we may want to
instrument low-level I/O. The use cases I can think of all
involve development-type activities like monitoring the raw
bytes passing through a file (for testing and debugging),
counting the number of I/O function calls (for performance
monitoring), and changing the behavior of I/O function calls
(e.g. simulating a failure) (to facilitate testing).
This commit invents a mechanism to wrap a file object so we
can observe activity on it. We have similar functionality in
badserverext.py. But that's a test-only extension and is pretty
specific to the HTTP server. I would like a mechanism in core
that is sufficiently generic so it can be used by multiple
consumers, including `hg debug*` commands.
The added code consists of a proxy type for file objects.
It is bound to an "observer," which receives callbacks whenever
I/O methods are called.
We also add an implementation of an observer that logs specific
I/O events. This observer will be used in an upcoming commit
to record low-level wire protocol activity.
A helper function to convert a file object into an observed
file object has also been implemented.
I don't anticipate any critical functionality in core using
these types. So I don't think explicit test coverage is
worth implementing.
Differential Revision: https://phab.mercurial-scm.org/D2462
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 24 Feb 2018 12:07:21 -0800] rev 36552
wireprotoserver: ability to run an SSH server until an event is set
It seems useful to be able to start an SSH protocol server that
won't run forever and won't call sys.exit() when it stops. This
could be used to facilitate intra-process testing of the SSH
protocol, for example.
We teach the server function to loop until a threading.Event is set
and invent a new API to run the server until an event is set. It also
won't sys.exit() afterwards.
There aren't many callers of serve_forever(). So we could refactor
them relatively easily. But I was lazy.
threading.Event might be a bit heavyweight. An alternative would be
a list whose only elements is changed. We can't use a simple scalar
value like a bool or int because those types are immutable. Events
are what you use in systems programming for this use case, so the
use of threading.Event seems justified.
Differential Revision: https://phab.mercurial-scm.org/D2461
Augie Fackler <augie@google.com> [Thu, 01 Mar 2018 15:46:21 -0500] rev 36551
tests: fix run-tests environment cleanup on Python 3
Differential Revision: https://phab.mercurial-scm.org/D2521
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:14:37 +0900] rev 36550
templatekw: add compatlist() as a replacement for showlist()
Just like compatdict(), this is mostly a copy of showlist(). showchildren()
is ported to the new API as an example.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:03:19 +0900] rev 36549
templatekw: add compatdict() as a replacement for showdict()
This is mostly a copy of showdict(), which will be deprecated later. See
the docstring for why it's called a "compat" dict.
showenvvars() is ported to the new API as an example.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 15:43:35 +0900] rev 36548
templatekw: pass templater to _showlist() by an explicit argument
Prepares for switching to the (context, mapping) API.
Yuya Nishihara <yuya@tcha.org> [Fri, 22 Dec 2017 21:59:38 +0900] rev 36547
hgweb: make templater mostly compatible with log templates
Prepares for gradually switching templatekw.showsuccsandmarkers() to new API.
This was a PoC showing how to reuse templatekw functions in hgweb. We could
remove rev, node, author, etc. from the commonentry() table, but we'll have
to carefully remove all corresponding symbols from webcommands.*(). Otherwise,
we would face the issue5612.
Still templatekw.keywords aren't exported. Otherwise some tests would fail
because the atom template expects {files} to be empty in filelog, but
templatekw.showfiles() provides the {files} implementation.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:42:18 +0900] rev 36546
log: do not invoke templatekw.showobsfate() as a function
Prepares for switching to the (context, mapping) API. I tried, but it appeared
not an one-off change to extract a non-template function from showobsfate(),
which deeply depends on the templater internals.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:36:38 +0900] rev 36545
templatekw: inline getfiles()
It's just three lines. We don't need a separate function for that.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:35:34 +0900] rev 36544
templatekw: factor out function to build a list of files per status
Removes copy-paste code before switching to the (context, mapping) API.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:40:46 +0900] rev 36543
templatekw: switch non-showlist template keywords to new API
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:28:32 +0900] rev 36542
templatekw: extract non-templatekw function as getgraphnode()
Prepares for switching to the (context, mapping) API. We still need (repo, ctx)
function for the fast path.
Sascha Nemecek <nemecek@wienfluss.net> [Wed, 28 Feb 2018 16:24:39 +0100] rev 36541
convert: avoid closing ui.fout in subversion code (issue5807)
Don't close 'fp' (= 'ui.fout') stream to prevent 'ValueError: I/O
operation on closed file' (Bug #5807).
Regression of changeset 30261:6bed17ba00a1
(https://www.mercurial-scm.org/repo/hg/rev/6bed17ba00a1)
Yuya Nishihara <yuya@tcha.org> [Sun, 07 Jan 2018 11:53:07 +0900] rev 36540
cmdutil: expand filename format string by templater (BC)
This is BC because '{}' could be a valid filename before, but I believe good
programmers wouldn't use such catastrophic output filenames. On the other
hand, '\' has to be escaped since it is a directory separator on Windows.
Thanks to Matt Harbison for spotting this weird issue.
This patch also adds cmdutil.rendertemplate(ctx, tmpl, props) as a simpler
way of expanding template against single changeset.
.. bc::
'{' in output filename passed to archive/cat/export is taken as a start
of a template expression.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 11:53:26 +0900] rev 36539
templater: add option to parse template string just like raw string literal
This seems a bit odd because the template syntax has no raw string literal
containing template fragments, but is necessary to port filename format string
to templater. See the next patch.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 10:58:15 +0900] rev 36538
cmdutil: reorder optional arguments passed to makefileobj()
**props will be passed directly to templater.
Yuya Nishihara <yuya@tcha.org> [Sun, 18 Feb 2018 10:54:24 +0900] rev 36537
cmdutil: strip "%m" pattern (first line of commit message) from both ends
This matches the behavior of the template keyword {desc}.
Yuya Nishihara <yuya@tcha.org> [Tue, 27 Feb 2018 22:37:57 +0900] rev 36536
test-acl: mock up util.getuser() to trust $LOGNAME on Windows
The test relies on POSIX-like getuser() behavior, so we can't use
windows.getuser().
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 04:50:22 -0500] rev 36535
fileset: drop bad "elif:" trying to check invalid size expression
Since str.isdigit is a function, the last "elif" was always true. An invalid
expression is rejected by util.sizetoint(), so we don't need "elif".
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:55:39 -0500] rev 36534
py3: fix test-command-template.t to write files in binary mode
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:45:34 -0500] rev 36533
py3: use bytestr() to coerce position carried by ParseError to string
The position value is either int or byte string.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:38:39 -0500] rev 36532
py3: use bytes.endswith('\n') to strip off '\n' from debug color output
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 08:19:47 -0500] rev 36531
py3: fix type of attribute names forwarded by templatekw._hybrid
# skip-blame because just r'' prefixes
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:47:06 -0500] rev 36530
py3: move between bytes and unicode when re-raising IOError
IOError is a Python exception, which argument must be a system string.
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:43:13 -0500] rev 36529
py3: use '%d' to format diffstat sum
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:40:09 -0500] rev 36528
py3: make regexp literal bytes in templatefilters.py
# skip-blame because just b'' prefixes
Yuya Nishihara <yuya@tcha.org> [Thu, 01 Mar 2018 06:38:37 -0500] rev 36527
templatefilters: use encoding.unifromlocal/unitolocal() for py3 compatibility
Pulkit Goyal <7895pulkit@gmail.com> [Fri, 02 Mar 2018 00:00:41 +0530] rev 36526
py3: replace str() with it's bytes equivalent in hgext/shelve.py
Internally we are dealing with bytes everywhere, so anything returning a unicode
results in an error or some change in behaviour.
Differential Revision: https://phab.mercurial-scm.org/D2520
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:59:20 +0530] rev 36525
py3: make sure we write bytes in a file open in bytes mode
# skip-blame just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2519
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:58:21 +0530] rev 36524
py3: add b'' prefixes in tests/test-obsolete.t
# skip-blame because it's just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2518
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:57:16 +0530] rev 36523
py3: add a b'' prefix in tests/test-fncache.t
# skip-blame because it's just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2517
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:54:52 +0530] rev 36522
py3: use pycompat.bytestr() to convert error instances to bytes
Differential Revision: https://phab.mercurial-scm.org/D2516
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:52:30 +0530] rev 36521
py3: listify the return value of filter()
filter() on Python 3 returns a filter object.
Differential Revision: https://phab.mercurial-scm.org/D2515
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 23:51:32 +0530] rev 36520
py3: use '%d' instead of '%s' for ints
Differential Revision: https://phab.mercurial-scm.org/D2514
Pulkit Goyal <7895pulkit@gmail.com> [Thu, 01 Mar 2018 03:56:41 +0530] rev 36519
py3: add 14 new passing tests to whitelist
Differential Revision: https://phab.mercurial-scm.org/D2511
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:55:25 +0530] rev 36518
py3: use util.forcebytestr to convert str to bytes
Differential Revision: https://phab.mercurial-scm.org/D2498
Gregory Szorc <gregory.szorc@gmail.com> [Sun, 25 Feb 2018 11:00:53 -0800] rev 36517
sshpeer: factor out code for creating peers from pipes
An upcoming commit will want to instantiate an SSH peer via
an alternate mechanism that doesn't require running a new
`ssh` command. To facilitate that, we extract the code for
creating a peer from pipes to its own function.
Differential Revision: https://phab.mercurial-scm.org/D2391
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:25:41 +0530] rev 36516
py3: add b'' prefixes in tests/test-rollback.t
This makes the test run succesfully on Python 3. There is just a b'' prefix
extra in the output.
# skip-blame because we added just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2510
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:14:36 +0530] rev 36515
py3: add b'' prefix in tests/test-revlog-v2.t
After this, the test works on Python 3. There is some extra return value by
open().write() I think which needs to be handled.
# skip-blame because just b'' prefix
Differential Revision: https://phab.mercurial-scm.org/D2509
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:10:59 +0530] rev 36514
py3: add b'' prefixes in tests/test-revlog.t
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2508
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:03:47 +0530] rev 36513
py3: make sure we open the file in bytes mode
This makes the test pass on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2507
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 22:03:29 +0530] rev 36512
py3: add b'' prefixes in tests/test-revlog-ancestry.py
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2506
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:57:22 +0530] rev 36511
py3: port the markdirver extension in tests/test-resolve.t
Differential Revision: https://phab.mercurial-scm.org/D2505
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:48:30 +0530] rev 36510
py3: backout changeset 56635c506608 which wrongly added couple of b''
I am not sure what I was thinking when I added that but while fixing rebase
tests, I revisited the file and found that I did wrong. I am sorry for this.
Differential Revision: https://phab.mercurial-scm.org/D2504
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:45:42 +0530] rev 36509
py3: add a missing b'' in tests/bruterebase.py
Differential Revision: https://phab.mercurial-scm.org/D2503
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:45:15 +0530] rev 36508
py3: use '%d' for integers instead of b'%s'
Differential Revision: https://phab.mercurial-scm.org/D2502
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:44:28 +0530] rev 36507
py3: make sure we write in mergestate in bytes mode
Differential Revision: https://phab.mercurial-scm.org/D2501
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:43:35 +0530] rev 36506
py3: add b'' prefixes in tests/test-rebase-scenario-global.t
# skip-blame because just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2500
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 21:42:37 +0530] rev 36505
py3: replace str() calls with their preferred bytes equivalent
Differential Revision: https://phab.mercurial-scm.org/D2499
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:54:49 +0530] rev 36504
py3: convert error messages to bytes using util.forcebytestr()
Differential Revision: https://phab.mercurial-scm.org/D2497
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 28 Feb 2018 19:54:10 +0530] rev 36503
py3: slice over bytes or use startswith() to prevent getting ascii values
Differential Revision: https://phab.mercurial-scm.org/D2496
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:38:09 -0800] rev 36502
narrow: drop safehasattr() checks for always-present repo.narrowmatch
I've added checks for repo.narrowmatch().always() in order to restore
some of the fast paths for non-narrow repos.
Differential Revision: https://phab.mercurial-scm.org/D2495
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 12:56:01 -0800] rev 36501
narrow: move narrowmatch-related methods to localrepo
This patch makes it so localrepo.narrowmatch() and a few more are
always available, which will let us simplify the use sites a
bit. narrowmatch() will return an always-matcher in non-narrow repos
(just like it did when it lived in the narrow extension).
Differential Revision: https://phab.mercurial-scm.org/D2494
Martin von Zweigbergk <martinvonz@google.com> [Tue, 27 Feb 2018 23:05:39 -0800] rev 36500
narrow: remove dependency from narrowspec module to hg module
Differential Revision: https://phab.mercurial-scm.org/D2493
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:32:00 -0800] rev 36499
narrow: reduce depedence on narrowspec.save()
I think narrowspec should be a simple, low-level module and not depend
on the hg module. This prepares for moving that dependency out of
narrowspec.
Differential Revision: https://phab.mercurial-scm.org/D2492
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 12:55:05 -0800] rev 36498
narrow: always wrap repo
It's simpler to always wrap the repo. This prepares for moving
narrowrepo.narrowmatch() onto localrepo by showing that it's now safe
to always wrap the repo (and thus always define narrowmatch() etc.).
Note that since narrowmatch() returns an always-matcher (rather than
None) in non-narrow repos, this may mean a performance hit when the
narrow extension is enabled because it adds a no-op filtering step in
various places against the always-matcher. I'll restore some of that
soon.
Differential Revision: https://phab.mercurial-scm.org/D2491
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:29:04 -0800] rev 36497
narrow: consider both local and remote matchers in narrowchangegroup
The existing code that picked one or the other seemed very
suspicious. This patch makes us intersect the local matcher with the
matcher from the remote, which seems better. It fixes one test case
and makes another one that used to crash no longer crash, but instead
silently succeed with a push that's lossy, so that remains to be
fixed.
The real reason for doing this now is that I'm going to move
narrowrepo.narrowmatch() onto localrepo and then it will always be
defined, which would otherwise break this code.
Differential Revision: https://phab.mercurial-scm.org/D2490
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:22:54 -0800] rev 36496
narrow: move checking for narrow requirement into _narrowmatch()
We want to move narrowmatch() and others into core, so we need to get
rid of the dependence on the "narrow_opts" from the closure in
narrowrepo.wraprepo(). We can simply check if the narrow requirement
is set. I think that seems like an improvement regardless of moving
narrowmatch().
Differential Revision: https://phab.mercurial-scm.org/D2489
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:55:21 -0800] rev 36495
narrow: move changegroup.supportedoutgoingversions() override to core
Also document why we need cg3 or higher.
Differential Revision: https://phab.mercurial-scm.org/D2488
Martin von Zweigbergk <martinvonz@google.com> [Wed, 28 Feb 2018 10:21:43 -0800] rev 36494
narrow: move requirement constant to core
My short-term goal is to move narrowrepo.narrowmatch() onto localrepo
and this is a necessary step for that.
I put the constant in changegroup.py, unlike REVLOGV2_REQUIREMENT,
which is in localrepo.py, since we'll need to access it from the
changegroup module eventually.
Differential Revision: https://phab.mercurial-scm.org/D2487
Pulkit Goyal <7895pulkit@gmail.com> [Wed, 21 Feb 2018 14:36:42 +0530] rev 36493
remotenames: don't inherit the remotenames class from dict class
The remotenames class was moved from hgremotenames extension. The class in
hgremotenames extension used to extend dict because updating bookmark was done
through a dict-like interface or Sean (smf) wanted it to be that way.
But now, we can remove the inheritance from the dict class as updating bookmark
is not done using a dict-like interface.
Thanks to Martin von Zweigbergk for spotting this.
Differential Revision: https://phab.mercurial-scm.org/D2361
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Feb 2018 17:22:25 -0500] rev 36492
run-tests: cache hghave results
Spawning a process on Windows is expensive. I've got a version of
test-lfs-test-server.t locally which prints the http request/responses that
totals 819 lines, with 149 conditional lines, 11 #if tests, and 2 test cases.
It takes just under 1 minute with this change to run both cases, vs just over
2 minutes without this change. Worse, when I explored adding ui.debug to the
test, it takes 13 minutes due to all of the mismatches and retests, vs less than
1 minute with this change. Overall, the difference when running all tests is
negligible- 103 minutes with this change, vs 105 without when using -j9.
It also looks like an exit value of 2 from `hghave` is treated specially, but
there's nothing preventing 2 missing features from also using this value.
Matt Harbison <matt_harbison@yahoo.com> [Mon, 26 Feb 2018 23:34:29 -0500] rev 36491
run-tests: resume raising an exception when a server fails to start
Prior to 93228b2a1fc0, this exception was raised before the diff could be
printed. By raising the exception after printing the diff, the location of the
failure can be identified, but it is also easier to locate test runs where this
occurs. The test bot maintains a list of failed tests, separate from the wall
of diff output.
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:49:05 +0530] rev 36490
py3: use print as a function in tests/test-hgrc.t
print was made a function in Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2480
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:46:35 +0530] rev 36489
py3: use '%d' to convert integers to bytes
Differential Revision: https://phab.mercurial-scm.org/D2479
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:44:37 +0530] rev 36488
py3: add b'' prefixes in tests/test-extension.t
We are now close to getting this test pass on Python 3.
# skip-blame because just b'' prefixes.
Differential Revision: https://phab.mercurial-scm.org/D2478
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:42:30 +0530] rev 36487
py3: convert os.devnull to bytes using pycompat.bytestr
os.devnull returns str on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2477
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:41:24 +0530] rev 36486
py3: fix more keyword arguments handling
Differential Revision: https://phab.mercurial-scm.org/D2476
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 14:28:17 +0530] rev 36485
py3: make sure regexes are bytes
# skip-blame because we are adding just b'' prefixes
Differential Revision: https://phab.mercurial-scm.org/D2475
Pulkit Goyal <7895pulkit@gmail.com> [Tue, 27 Feb 2018 00:43:37 +0530] rev 36484
py3: use pycompat.strurl to convert url to str
Differential Revision: https://phab.mercurial-scm.org/D2474
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:34:35 -0800] rev 36483
bookmarks: write bookmarks file deterministically
Bookmarks are internally stored as an unsorted dictionary. Let's at
least write out the bookmarks file in a deterministic order so it is
easier to test, diff, etc.
Differential Revision: https://phab.mercurial-scm.org/D2469
Gregory Szorc <gregory.szorc@gmail.com> [Mon, 26 Feb 2018 13:32:03 -0800] rev 36482
phases: write phaseroots deterministically
self.phaseroots is a list of sets of binary nodes.
Let's sort the nodes before writing so the phaseroots file is
written out deterministically.
Differential Revision: https://phab.mercurial-scm.org/D2468
Gregory Szorc <gregory.szorc@gmail.com> [Sat, 17 Feb 2018 11:19:52 -0700] rev 36481
internals: document bundle2 format
It seems like a good idea to have thorough documentation of the bundle2
data format, including the format of each part and the capabilities.
The added documentation is far from complete. For example, we don't
fully capture the semantics of each capability and part. But a start
is better than nothing, which was pretty much where we were before.
Differential Revision: https://phab.mercurial-scm.org/D2298
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 23:54:40 +0530] rev 36480
py3: convert bytes to str using encoding.strfromlocal
using encoding.strfromlocal because sender is provided from user config or
argument.
Differential Revision: https://phab.mercurial-scm.org/D2460
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 23:50:30 +0530] rev 36479
py3: use encoding.strtolocal() to convert str to bytes
Differential Revision: https://phab.mercurial-scm.org/D2459
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:19:53 +0530] rev 36478
py3: use email.utils module instead of email.Utils
On py2:
>>> import email
>>> import email.utils as eutil
>>> email.Utils.parseaddr is eutil.parseaddr
True
>>> email.Utils.formatdate is eutil.formatdate
True
email.Utils is not present on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2453
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 17:25:46 +0530] rev 36477
py3: slice over bytes or use .startswith() to prevent getting ascii values
Differential Revision: https://phab.mercurial-scm.org/D2457
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:23:12 +0530] rev 36476
py3: use '%d' for integers instead of '%s'
Differential Revision: https://phab.mercurial-scm.org/D2455
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:24:35 +0900] rev 36475
templatekw: add 'requires' flag to switch to exception-safe interface
The current templatekw interface, f(repo, ctx, templ, **args), is horrible
because it's quite easy to encounter TypeError, ValueError, etc. It's also
bad for Python 3 porting due to the **kwargs issue.
This patch introduces a flag to switch to new f(context, mapping) API seen
in templater functions. The requirement spec isn't verified (yet) because
context.resource() can gracefully raise a ResourceUnavailable exception,
but it's planned to be used as a filter in the help, such as "Revision
Keywords" (if 'ctx' in requires), "File Keywords" (if 'fctx' in requires),
etc.
showauthor() is ported to the new API as an example. 20 more follows.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 12:50:30 +0900] rev 36474
templater: specialize ResourceUnavailable error so that it can be caught
See the next patch how it will be used.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 12:47:53 +0900] rev 36473
templater: move specialized exception types to top
I'm going to add one more exception type.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:14:33 +0900] rev 36472
templatekw: minimize resource dependency of {envvars} and {termwidth}
These keywords can be evaluated without a repo.
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 14:12:34 +0900] rev 36471
templatekw: simply override {graphwidth} function by mapping variable
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 16:40:41 +0900] rev 36470
remotenames: drop redundant templatekw names from help text
Also removed the second "List of" phrase, which is obvious from the type
"List of strings."
Yuya Nishihara <yuya@tcha.org> [Sun, 25 Feb 2018 13:42:51 +0900] rev 36469
narrow: drop redundant templatekw/revset names from help text
":<name>:" is automatically added by the registrar.
Matt Harbison <matt_harbison@yahoo.com> [Sun, 25 Feb 2018 21:04:12 -0500] rev 36468
run-tests: don't mask errors when a server fails to start
There are sporadic instances of this on Windows. They seem to happen more
frequently after the test machine is rebooted, although the only way to hit it
on my laptop is to loop certain tests with -j9 for hours. The problem with
masking out the specific failure is that there's no way to know if it's the same
line in the test that's failing, or if it is random.
The justification for adding this masking in 52e9e63f1495 was that the failures
occur regularly, but that's not the case anymore. The port number is still
printed, in case that turns out to be useful.
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 17:27:08 +0530] rev 36467
py3: use bytes instead of str in isinstance
Internally we use bytes everywhere, and str on Python 3 is unicodes, so we need
to make sure we are doing the right check.
Differential Revision: https://phab.mercurial-scm.org/D2458
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 18:00:29 +0530] rev 36466
py3: convert a map expression into list comprehension
map returns a map object on Python 3 and here we wanted a list instead.
Differential Revision: https://phab.mercurial-scm.org/D2456
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:22:15 +0530] rev 36465
py3: use email.generator module instead of email.Generator
On py2:
>>> import email
>>> import email.generator as emailgen
>>> email.Generator.Generator is emailgen.Generator
True
email.Generator is not present on Python 3.
Differential Revision: https://phab.mercurial-scm.org/D2454
Pulkit Goyal <7895pulkit@gmail.com> [Mon, 26 Feb 2018 16:16:37 +0530] rev 36464
py3: use pycompat.strkwargs to convert kwargs keys to str
Differential Revision: https://phab.mercurial-scm.org/D2452
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 01:01:35 -0500] rev 36463
py3: whitelist test-push-http.t as passing
Differential Revision: https://phab.mercurial-scm.org/D2451
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:51:41 -0500] rev 36462
util: handle fileno() on Python 3 throwing io.UnsupportedOperation
Fortunately, the exception exists on Python 2 so we don't have to do
something weirder than this.
Differential Revision: https://phab.mercurial-scm.org/D2450
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:50:57 -0500] rev 36461
wireproto: use %d to encode an int, not a %s
Differential Revision: https://phab.mercurial-scm.org/D2449
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:50:35 -0500] rev 36460
httppeer: explicitly catch urlerr.httperror and re-raise
On Python 3 it seems urllib.error.HTTPError doesn't set the .args
field of the exception to have any contents, which then breaks our
socket.error catch. This works around that issue.
Differential Revision: https://phab.mercurial-scm.org/D2448
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:49:33 -0500] rev 36459
hgweb: pass exception message to builtin Exception ctor as sysstr
If we don't do this, the bytes gets repr()ed on Python 3 and we get
bogus error strings sent to clients. Ick.
Differential Revision: https://phab.mercurial-scm.org/D2447
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:28:10 -0500] rev 36458
bundle2: part id is an int, use %d to make it bytes
Differential Revision: https://phab.mercurial-scm.org/D2446
Augie Fackler <augie@google.com> [Mon, 26 Feb 2018 00:27:47 -0500] rev 36457
bundle2: **strkwargs love on various kwargs constructions
Differential Revision: https://phab.mercurial-scm.org/D2445
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:51:32 -0500] rev 36456
http: drop custom http client logic
Eight and a half years ago, as my starter bug on code.google.com, I
investigated a mysterious "broken pipe" error from seemingly random
clients[0]. That investigation revealed a tragic story: the Python
standard library's httplib was (and remains) barely functional. During
large POSTs, if a server responds early with an error (even a
permission denied error!) the client only notices that the server
closed the connection and everything breaks. Such server behavior is
implicitly legal under RFC 2616 (the latest HTTP RFC as of when I was
last working on this), and my understanding is that later RFCs have
made it explicitly legal to respond early with any status code outside
the 2xx range.
I embarked, probably foolishly, on a journey to write a new http
library with better overall behavior. The http library appears to work
well in most cases, but it can get confused in the presence of
proxies, and it depends on select(2) which limits its utility if a lot
of file descriptors are open. I haven't touched the http library in
almost two years, and in the interim the Python community has
discovered a better way[1] of writing network code. In theory some day
urllib3 will have its own home-grown http library built on h11[2], or
we could do that. Either way, it's time to declare our current
confusingly-named "http2" client logic and move on. I do hope to
revisit this some day: it's still garbage that we can't even respond
with a 401 or 403 without reading the entire POST body from the
client, but the goalposts on writing a new http client library have
moved substantially. We're almost certainly better off just switching
to requests and eventually picking up their http fixes than trying to
live with something that realistically only we'll ever use. Another
approach would be to write an adapter so that Mercurial can use pycurl
if it's installed. Neither of those approaches seem like they should
be investigated prior to a release of Mercurial that works on Python
3: that's where the mindshare is going to be for any improvements to
the state of the http client art.
0: http://web.archive.org/web/20130501031801/http://code.google.com/p/support/issues/detail?id=2716
1: http://sans-io.readthedocs.io/
2: https://github.com/njsmith/h11
Differential Revision: https://phab.mercurial-scm.org/D2444
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:34:58 -0500] rev 36455
statichttprepo: move HTTPRangeHandler from byterange and delete the latter
It turns out we've been toting around 472 lines of Python just for
this 20-ish line class that teaches urllib how to handle '206 Partial
Content'. byterange.py showed up in my \sstr\( Python 3 dragnet, and
found itself having overstayed its welcome in our codebase.
# no-check-commit because we're moving code that has to have foo_bar naming.
Differential Revision: https://phab.mercurial-scm.org/D2443
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:09:58 -0500] rev 36454
filemerge: do what the context __bytes__ does, but locally
str() here is clearly the wrong thing, and I think the code is clearer
when it doesn't just depend on the magic __{str,bytes}__ behavior.
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2442
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:09:07 -0500] rev 36453
py3: convert known-int values to bytes using %d
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2441
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 23:08:41 -0500] rev 36452
py3: hunt down str(exception) instances and use util.forcebytestr
I decided to grep around for \sstr\( and see what low-hanging fruit
that showed me. This was part of that hunt. That grep pattern still
has some things worth exploring.
Differential Revision: https://phab.mercurial-scm.org/D2440
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:30:14 -0500] rev 36451
subrepo: use util.forcebytestr() instead of str() on exception
Differential Revision: https://phab.mercurial-scm.org/D2437
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:29:28 -0500] rev 36450
tests: add missing b prefixes in test-commit.t
# skip-blame just some b prefixes
Differential Revision: https://phab.mercurial-scm.org/D2436
Augie Fackler <augie@google.com> [Sun, 25 Feb 2018 22:28:52 -0500] rev 36449
commitextras: fix on Python 3 by using sysstrs for __dict__ ops
I'm dubious of the __dict__ shenanigans in use here, but lack the
enthusiasm for figuring out why that was done right now.
# skip-blame just some r prefixes
Differential Revision: https://phab.mercurial-scm.org/D2435