summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vrhel <michael.vrhel@artifex.com>2013-05-30 15:48:33 -0700
committerMichael Vrhel <michael.vrhel@artifex.com>2013-05-30 15:48:33 -0700
commit483e100c06e647d8ba2d68beef09c1c241fd328d (patch)
treed54b32de79ac892571cfda81704d51f8ded1676e
parent69cce78d20f9ee34954812e72ad6f3e4bf085374 (diff)
downloadghostpdl-483e100c06e647d8ba2d68beef09c1c241fd328d.tar.gz
Addition of ETS code and project into gs/toolbin/halftone
-rw-r--r--gs/toolbin/halftone/ETS/COPYING.txt340
-rw-r--r--gs/toolbin/halftone/ETS/Makefile_avec6
-rw-r--r--gs/toolbin/halftone/ETS/Makefile_sse29
-rw-r--r--gs/toolbin/halftone/ETS/README.txt247
-rw-r--r--gs/toolbin/halftone/ETS/_eb_sse2.s344
-rw-r--r--gs/toolbin/halftone/ETS/build.bat3
-rw-r--r--gs/toolbin/halftone/ETS/eb_avec.c691
-rw-r--r--gs/toolbin/halftone/ETS/eb_avec.h44
-rw-r--r--gs/toolbin/halftone/ETS/eb_sse2.s344
-rw-r--r--gs/toolbin/halftone/ETS/ei03.pdfbin0 -> 108353 bytes
-rw-r--r--gs/toolbin/halftone/ETS/ets.c900
-rw-r--r--gs/toolbin/halftone/ETS/ets.h93
-rw-r--r--gs/toolbin/halftone/ETS/ipview.html386
-rw-r--r--gs/toolbin/halftone/ETS/test_ets.c855
-rw-r--r--gs/toolbin/halftone/ETS/tm.h4099
-rw-r--r--gs/toolbin/halftone/ETS/win32/ETS.sln20
-rw-r--r--gs/toolbin/halftone/ETS/win32/ETS.vcproj196
17 files changed, 8577 insertions, 0 deletions
diff --git a/gs/toolbin/halftone/ETS/COPYING.txt b/gs/toolbin/halftone/ETS/COPYING.txt
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/COPYING.txt
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/gs/toolbin/halftone/ETS/Makefile_avec b/gs/toolbin/halftone/ETS/Makefile_avec
new file mode 100644
index 000000000..61ffa5eb3
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/Makefile_avec
@@ -0,0 +1,6 @@
+LDLIBS = -lm
+CFLAGS = -faltivec -g -Wall -Wmissing-prototypes
+LDFLAGS = -g
+
+
+test_evenbetter: test_evenbetter.o evenbetter-rll.o eb_avec.o
diff --git a/gs/toolbin/halftone/ETS/Makefile_sse2 b/gs/toolbin/halftone/ETS/Makefile_sse2
new file mode 100644
index 000000000..882f32d94
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/Makefile_sse2
@@ -0,0 +1,9 @@
+LDLIBS = -lm
+CFLAGS = -g -O2 -Wall -Wmissing-prototypes
+LDFLAGS = -g
+
+test_evenbetter: test_evenbetter.o evenbetter-rll.o eb_sse2.o
+
+eb_sse2.o: eb_sse2.s
+ nasm $^ -f elf
+
diff --git a/gs/toolbin/halftone/ETS/README.txt b/gs/toolbin/halftone/ETS/README.txt
new file mode 100644
index 000000000..a24ceefae
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/README.txt
@@ -0,0 +1,247 @@
+Release notes ETS version 138
+26 Apr 2006
+Copyright 2000-2010 Artifex Sotware Inc.
+
+This version of ETS is for commercial licensees and is governed by the
+licensing agreement between Artifex Software and the licensee. Please
+contact mailto://sales@artifex.com for information on licensing.
+
+This is the latest unified release of Even Tone Screening. The core
+ETS algorithm has been highly tuned for modern inkjet printers such as
+the latest EPSON seven color devices. In addition, there are alternate
+versions of the core screening algorithm written for both Altivec
+(G4/PPC 970) and SSE2 (Pentium 4) instruction sets. The quality of the
+results with assembly speedup is comparable, but will not be
+bit-identical to the C code.
+
+
+README for Even Better Screening
+
+EBS is the newest refinement of Even Toned Screening. It is based on
+the same fundamental algorithms as ETS, and adds several interesting
+features.
+
+1. It's possible to screen all planes in tandem, rather than screening
+each plane independent. The result is a more even distribution of
+inks, and an avoidance of "interference patterns" between similar fine
+structure in the planes.
+
+2. The number of levels of output is adjustable at runtime. Most
+modern inkjets support multiple drop sizes, and the number of discrete
+drop sizes seems to be increasing.
+
+3. Dot aspect ratios of 1:1, 2:1, and 4:1 are directly supported.
+
+4. An option exists to apply Even Toned smoothing to shadow dots as
+well as highlight dots. In print modes where individual white dots
+in the shadow areas are visible, this avoids wormy patterns. It is
+a runtime option because there is a speed penalty. [ Note: this
+option not fully supported in the current release ]
+
+5. More parameters are tunable at runtime, including the amplitude of
+added random noise, and the scale for the Even Toned output dependent
+feedback signal.
+
+Some usage tips:
+
+The default parameters for even_c1_scale, rand_scale, and do_shadows
+are all 0, and should give good results. The reasonable range for
+rand_scale is about -4 .. 3. Higher values result in more randomness.
+The effects should be quite easy to see. even_c1_scale produces a more
+subtle effect. Values of -1 or -2 should produce slightly less regular
+patterns in highlights. This might be a good idea on printers with
+poor accuracy between passes, for example in bidirectional modes.
+As mentioned above, set do_shadows to 1 if wormy patterns are visible
+in shadows. At high resolutions on most inkjet printers, the dots are
+so close together that individual white pixels cannot be seen.
+
+The planes in the call to even_better_line() should be sorted in
+darkest-to-lightest order, for example K, C, M, c, m, Y. The
+strengths[] parameter should be an array of approximate darkness
+values for the inks, for example { 128, 50, 50, 25, 25, 10 }. It
+might be worth fiddling with the strength parameters.
+
+
+Compiling SSE2
+
+To enable SSE2 in evenbetter-rll.c, enable the #define USE_AVEC
+conditional compile.
+
+The SSE2 optimized code is in the assembly language file eb_sse2.s.
+In addition, I've included two win32-format object files, with and
+without the leading underscore. I believe the former is the one to use
+for both MS and Watcom compilers.
+
+You can use the NASM tool to reassemble the eb_sse2.s file. Use the
+following command line:
+
+nasm eb_sse2.s -f win32
+
+Most compilers will need an additional underscore prefix in front of
+the global symbols. There's an _eb_sse2.s file that's the same as
+eb_sse2.s except for this change, and it can be assembled using the
+same command line as above, just with _eb_sse2.s as the filename.
+
+The included Makefile_sse2 will compile the test_evenbetter executable
+on Linux platforms. This utility acts as a pipe and converts pgm to
+pgm.
+
+
+Release notes for 2003-10-21 Altivec-optimized EvenBetter code drop
+
+1. Compiling
+
+To enable Altivec in evenbetter-rll.c, enable the #define USE_AVEC
+conditional compile.
+
+The Altivec optimized code is in the C-language file eb_avec.c, using
+the Altivec intrinsics. Most up-to-date compilers should have support
+for this. With GCC, use the following command line:
+
+gcc -faltivec -O2 -Wall -Wmissing-prototypes -c -o eb_avec.o eb_avec.c
+
+Note that the -O3 option was tested and did not succeed, at least on
+GCC 3.3, build 1435.
+
+On other compilers, it may be necessary to define the HAVE_ALTIVEC_H
+preprocessor macro.
+
+The included Makefile_avec will compile the test_evenbetter executable
+on OS X platforms. This utility acts as a pipe and converts pgm to
+pgm.
+
+2. Code changes
+
+For the most part, this code uses the same API as before. However,
+there is one important change: destination buffers _must_ be aligned
+to 16-byte boundaries, and should also have an additional 16 bytes of
+padding at the end.
+
+I've provided eb_malloc_aligned() and eb_free_aligned() as handy
+utility functions for allocating aligned memory blocks. See the
+allocation of "obuf" in the sample code (test_evenbetter.c) for an
+example.
+
+3. Performance and quality
+
+Barring bugs, quality should be almost identical to the scalar
+version.
+
+I did not implement the test for G4 capability, as it's fairly
+dependent on platform specifics. Currently, G4 is always assumed,
+so the code is likely to crash when run on G3's. To fix this,
+edit the line "using_vectors = 1;" so that vectors are only enabled
+when the G4/G5 is detected. See:
+
+http://developer.apple.com/hardware/ve/g3_compatibility.html
+
+Performance is most optimal when the number of planes is a multiple of
+4. Screening 5 planes will take about the same time as screening 8.
+
+
+Tone-dependent randomness scaling
+
+As of version 134, ETS can accept lookup tables to control the tone-
+dependent randomness scaling. If you do not wish to use this feature,
+you must set the new rand_scale_luts field of EvenBetterParams to
+NULL.
+
+Otherwise, rand_scale_luts has the same layout as luts - an array of
+pointers, one for each plane, to int arrays of size ET_SRC_MAX + 1.
+Each value of the array corresponds to one input tone level; in general,
+if you change the luts, you'll want to change the rand_scale_luts
+accordingly.
+
+The nominal value is 65536, which is a fairly small level of
+randomness. In general, gray values near round rational numbers (1/2,
+1/3, etc.) will need higher levels of randomness in order to avoid
+repeating patterns. The current default, as computed in
+eb_compute_randshift, peaks at 2 << 19 for 1/4 and 1/2, 2 << 18 for
+1/3, and 2 << 17 for 1/6 and 1/9.
+
+Note also that even when using the rand_scale_luts, the rand_scale
+parameter still has the effect of globally scaling the randomness
+value. Each increment by one of rand_scale is equivalent to doubling
+the values in the rand_scale luts. simultaneously doubling the
+rand_scale_lut values and decreasing rand_scale by 1 has no effect.
+
+To really fine-tune the tone-dependent randomness for a device, we
+recommend running grayscale test files with several different
+constant values for the luts, then visually choosing the best value
+for each grayscale value in the test file. Different devices will be
+sensitive to different patterns, depending on the details of the
+weaving.
+
+Lastly, keep in mind that the randomness scaling is quantized to
+powers of two in the scalar code, but is smoothly variable in the
+vector versions.
+
+
+Notes on per-channel even_c1_scale settings
+
+As of version 135, this code supports per-channel setting of
+even_c1_scale, as a way to control artifacts in "dirty highlights".
+Recommended values are -2 for full-strength inks for which light
+variants exist (magenta, cyan, and black on EPSON 7-color printer),
+and 0 for all other inks.
+
+
+Notes on mseveneighths
+
+The eb_avec vector version contains an experimental workaround for
+problems in "dirty highlights". It is disabled by default, but can
+easily be enabled by uncommenting these two lines in eb_avec.c:
+
+ // f_4 = vec_abs(f_3);
+ // f_3 = vec_madd(f_4, mseveneighths, f_3);
+
+The values in mseveneighths in eb_avec.c can also be adjusted -
+while the current value is -.875, values of -.90 or -.95 may be
+more effective in controlling the dirty highlights problem. However,
+values too near -1 seem to create other artifacts.
+
+Pending feedback from users, this experimental feature will either
+be removed from all versions, or added to all versions.
+
+
+Partial version history
+
+Version 138 contains a fix to eb_malloc_aligned for crashes when the
+base allocator is aligned to 4-byte but not 8-byte boundaries. Also,
+the .obj files for eb_sse2.s are updated, while in some 137 tarballs
+they were stale.
+
+Version 137 mostly contains small changes to the vector code to make
+it more like the scalar version.
+
+[There was never a consistent 136 release, although some code did go
+out with that version number]
+
+Version 135 adds per-channel control of even_c1_scale.
+
+Version 134 has tone-dependent randomness scaling.
+
+Version 133 has some fixes to make the code compile in C++.
+
+Version 132 fixes some improperly merged files in the 131 release.
+
+Version 131 contains a fix for a subtle problem in the noisy highlight
+change in 130, as well as more robust support for > 8bpp deep images
+on vector platforms.
+
+Version 130 contains a quality improvement in noisy highlight regions.
+
+Version 129 contains performance tuning for the SSE2 implementation.
+
+Version 128 contains a significant speedup in the prep (Altivec only),
+specialized to 8-but LUT's with gamma 1.0, 1.8, or 2.0. There is a new
+"gamma" parameter to enable it - a value of 0.0 uses the old LUT-based
+code.
+
+In addition, make sure the input buffer is allocated with 16-byte
+alignment, and is also padded up to a size which is a multiple of 16
+bytes.
+
+This version also unifies the SSE2 release. To enable, undefine
+USE_AVEC and define USE_SSE2 at the top of evenbetter-rll.c.
+
diff --git a/gs/toolbin/halftone/ETS/_eb_sse2.s b/gs/toolbin/halftone/ETS/_eb_sse2.s
new file mode 100644
index 000000000..b75f6eeed
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/_eb_sse2.s
@@ -0,0 +1,344 @@
+;;; Implementation of Even Better core in SSE2 instruction set
+
+ struc ebctx
+.xs resd 1
+.iir_line resd 1
+.r_line resd 1
+.a_line resd 1
+.b_line resd 1
+.dummy resd 3
+.luts resd 4
+.e resb 16
+.e_i_1 resb 16
+.r resb 16
+.a resb 16
+.b resb 16
+.ones resb 16
+.twos resb 16
+.aspect2 resb 16
+.ehi resd 4
+.elo resd 4
+.ohi resd 4
+.r_mul resd 4
+.kernel resd 4
+.seed1 resd 4
+.seed2 resd 4
+.tmmat resd 4
+.y resd 4
+ endstruc
+
+ struc srcbuf
+.im resd 64 ; image in floating pt
+.rb resd 64 ; 0.5 - rb_lut, in floating pt
+.rs resd 64 ; scale for randomness
+ endstruc
+
+;;; some of the optimization is tricky. For a = c ? a : b, we write:
+;;; pandn a, c ; a = (~a & c)
+;;; por b, c ; b = (b | c)
+;;; pandn a, b ; a = (~(~a & c)) & (b | c)
+;;; For the converse, a = c ? b : a, we write:
+;;; pxor b, a ; b = (a ^ b)
+;;; pand b, c ; b = (a ^ b) & c
+;;; pxor a, b ; a = a ^ ((a ^ b) & c)
+
+ global _eb_test_sse2
+_eb_test_sse2:
+ push ebx
+ mov eax, 1
+ cpuid
+ mov eax, edx
+ shr eax, 26
+ and eax, byte 1
+ jz eb_test_sse2_1
+
+eb_test_sse2_1:
+ pop ebx
+ ret
+
+ global _eb_sse2_set_daz
+_eb_sse2_set_daz:
+ sub esp, 4
+ stmxcsr [esp]
+ mov eax, [esp]
+ or word [esp], 0x8040
+ ldmxcsr [esp]
+ add esp, 4
+ ret
+
+ global _eb_sse2_restore_daz
+_eb_sse2_restore_daz:
+ ldmxcsr [esp + 4]
+ ret
+
+ global _eb_sse2_core
+_eb_sse2_core:
+;;; screen one block of 16 pixels, 4 planes
+ struc args
+.header resb 8
+.ctx resd 1 ; context
+.destbuf resd 1 ; dest buffers
+.srcbuf resd 1 ; source buffer struct
+.offset resd 1 ; offset (in pixels)
+.tmbase resd 1 ; base addr of threshold mod matrix
+ endstruc
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edi
+ push esi
+
+ struc frame
+.obuf resb 64
+ endstruc
+ sub esp, frame_size
+;;; align esp to 128-bit boundary
+ and esp, byte -0x10
+
+ mov eax, [ebp + args.ctx]
+ mov ebx, [ebp + args.srcbuf]
+ mov ecx, 0
+ mov edx, [ebp + args.offset]
+ shl edx, 4
+ mov edi, [eax + ebctx.iir_line]
+
+ movaps xmm6, [eax + ebctx.e]
+ movdqa xmm4, [eax + ebctx.r]
+ movdqa xmm0, [eax + ebctx.a]
+ movdqa xmm1, [eax + ebctx.b]
+
+eb_sse2_core1:
+;;; pixel loop
+ ;; invariant: xmm4 = r, xmm0 = a, xmm1 = b
+ mov esi, [eax + ebctx.r_line]
+ paddd xmm4, xmm0
+ movdqa xmm3, [esi + edx] ; r[i]
+ movdqa xmm2, xmm3
+ movaps xmm7, [eax + ebctx.e_i_1]
+ pcmpgtd xmm3, xmm4 ; xmm3 is ones if r + a < rline[x]
+ mov esi, [eax + ebctx.a_line]
+ pxor xmm4, xmm2
+ movdqa xmm5, [esi + edx] ; a[i]
+ pand xmm4, xmm3
+ paddd xmm0, [eax + ebctx.twos]
+ pxor xmm2, xmm4 ; r = ... ? r + a : r[i]
+ movdqa [eax + ebctx.r], xmm2
+ pandn xmm0, xmm3
+ mov esi, [eax + ebctx.b_line]
+ por xmm5, xmm3
+
+ pandn xmm0, xmm5 ; a = ... ? a + 2 : a[i]
+ movdqa xmm5, [esi + edx] ; b[i]
+ pandn xmm1, xmm3
+ movdqa [eax + ebctx.a], xmm0
+ por xmm5, xmm3
+ movaps xmm3, [eax + ebctx.kernel]
+ pandn xmm1, xmm5 ; b = ... ? b : b[i]
+ movdqa [eax + ebctx.b], xmm1
+
+ ;; xmm2 = r (updated)
+
+
+ mov esi, [ebp + args.tmbase]
+ xor eax, eax
+ mov al, [esi + ecx]
+ shl eax, 24 ; could avoid this by changing the rand lut
+ cvtsi2ss xmm4, eax
+ pshufd xmm4, xmm4, 0
+ ;; note: if we swapped eax and esi, we could probably avoid this
+ mov eax, [ebp + args.ctx]
+
+ ;; compute FS kernel
+ pshufd xmm1, xmm3, 0x00 ; 1/16
+ mulps xmm1, xmm7
+ movaps xmm7, [edi + edx] ; e_i
+ pshufd xmm5, xmm3, 0xff ; 7/16
+ mulps xmm6, xmm5
+ cvtdq2ps xmm2, xmm2
+ mulps xmm2, [eax + ebctx.r_mul]
+ addps xmm6, xmm1
+ mulps xmm4, [ebx + srcbuf.rs]
+ pshufd xmm0, xmm3, 0xaa ; 5/16
+ mulps xmm0, xmm7
+ addps xmm2, [ebx + srcbuf.rb]
+ pshufd xmm3, xmm3, 0x55 ; 3/16
+ movaps [eax + ebctx.e_i_1], xmm7
+ addps xmm0, xmm6
+ movdqa xmm5, [ebx + srcbuf.im]
+ mulps xmm3, [edi + edx + 0x10] ; e[i+1]
+ addps xmm2, xmm4
+
+ addps xmm0, xmm3
+
+ movaps xmm6, xmm0
+ addps xmm0, xmm2
+ minps xmm0, [eax + ebctx.ehi]
+ pxor xmm4, xmm4
+ maxps xmm0, [eax + ebctx.elo]
+ addps xmm0, xmm5
+ subps xmm2, xmm2
+ minps xmm0, [eax + ebctx.ohi]
+ addps xmm6, xmm5
+ maxps xmm0, xmm2
+ cvttps2dq xmm1, xmm0 ; this is where the actual quantization is
+ cmpneqps xmm2, xmm5
+ pand xmm1, xmm2 ; force 0 if im == 0.0
+ cvtdq2ps xmm3, xmm1
+ subps xmm6, xmm3
+ movdqa xmm0, [eax + ebctx.a]
+ pcmpeqd xmm4, xmm1 ; 1's when pixel is 0
+ ;movdqa xmm1, [eax + ebctx.r] ; for visualizing r buf when testing
+ movaps xmm7, [edi + edx]
+ packssdw xmm1, xmm1
+ movaps [edi + edx], xmm6
+ packuswb xmm1, xmm1
+ movd [esp + ecx * 4], xmm1
+
+ ;; update r
+ mov esi, [eax + ebctx.a_line]
+ movdqa xmm2, [eax + ebctx.ones]
+ pandn xmm0, xmm4
+ por xmm2, xmm4
+ movdqa xmm1, [eax + ebctx.b]
+ pandn xmm0, xmm2
+ movdqa [esi + edx], xmm0
+ mov esi, [eax + ebctx.b_line]
+ pandn xmm1, xmm4
+ movdqa xmm2, [eax + ebctx.aspect2]
+ por xmm2, xmm4
+ pand xmm4, [eax + ebctx.r]
+ pandn xmm1, xmm2
+ movdqa [esi + edx], xmm1
+ add ebx, byte 0x10
+ mov esi, [eax + ebctx.r_line]
+ movdqa [esi + edx], xmm4
+ add edx, byte 0x10
+ add ecx, byte 1
+
+ cmp ecx, byte 0x10
+ jne eb_sse2_core1
+
+ movdqa [eax + ebctx.r], xmm4
+ movdqa [eax + ebctx.a], xmm0
+ movdqa [eax + ebctx.b], xmm1
+ movaps [eax + ebctx.e], xmm6
+
+;;; repack output
+ mov eax, [ebp + args.destbuf]
+ mov ecx, [ebp + args.offset]
+ mov ebx, [eax]
+ mov edx, [eax + 4]
+ mov esi, [eax + 8]
+ mov edi, [eax + 12]
+ movdqa xmm0, [esp] ; 3d3c3b3a2d2c2b2a1d1c1b1a0d0c0b0a
+ ;; 0 1 2 3
+ movdqa xmm4, xmm0
+ movdqa xmm2, [esp + 0x20]
+ punpckhbw xmm4, xmm2 ; Bd3dBc3cBb3cBa3aAd2dAc2cAb2bAa2a
+ punpcklbw xmm0, xmm2 ; 9d1d9c1c9b1b9a1a8d0d8c0c8b0b8a0a
+ movdqa xmm1, [esp + 0x10] ; 7d7c7b7a6d6c6b6a5d5c5b5a4d4c4b4a
+ movdqa xmm2, xmm1
+ movdqa xmm3, [esp + 0x30]
+ punpcklbw xmm2, xmm3 ; Dd5dDc5cDb5cDa5aCd4dCc4cCb4bCa4a
+ punpckhbw xmm1, xmm3 ; Fd7dFc7cFb7bFa7aEd6dEc6cEb6bEa6a
+ ;; 0 4 2 1
+ movdqa xmm3, xmm0
+ punpckhbw xmm3, xmm2
+ punpcklbw xmm0, xmm2
+ movdqa xmm2, xmm4
+ punpcklbw xmm4, xmm1
+ punpckhbw xmm2, xmm1
+ ;; 0 3 4 2
+ movdqa xmm1, xmm0
+ punpckhbw xmm1, xmm4
+ punpcklbw xmm0, xmm4
+ movdqa xmm4, xmm3
+ punpcklbw xmm4, xmm2
+ punpckhbw xmm3, xmm2
+ ;; 0 1 4 3
+ movdqa xmm2, xmm0
+ punpckhbw xmm2, xmm4
+ movdqa [edx + ecx], xmm2
+ punpcklbw xmm0, xmm4
+ movdqa [ebx + ecx], xmm0 ; FaEaDaCaBaAa9a8a7a6a5a4a3a2a1a0a
+ movdqa xmm4, xmm1
+ punpcklbw xmm4, xmm3
+ movdqa [esi + ecx], xmm4
+ punpckhbw xmm1, xmm3
+ movdqa [edi + ecx], xmm1
+ ;; 0 2 4 1
+
+ mov esi, [ebp - 12]
+ mov edi, [ebp - 8]
+ mov ebx, [ebp - 4]
+ leave
+ ret
+
+ global _eb_sse2_rev_rs
+_eb_sse2_rev_rs:
+ struc rargs
+.header resb 8
+.ctx resd 1 ; context
+.offset resd 1 ; offset (in pixels)
+ endstruc
+ push ebp
+ mov ebp, esp
+ push edi
+ push esi
+
+ mov eax, [ebp + rargs.ctx]
+ mov ecx, [ebp + rargs.offset]
+ shl ecx, 4
+ mov esi, [eax + ebctx.r_line]
+ add esi, ecx
+ mov edi, [eax + ebctx.a_line]
+ add edi, ecx
+ mov edx, [eax + ebctx.b_line]
+ add edx, ecx
+ movdqa xmm0, [eax + ebctx.r]
+ movdqa xmm1, [eax + ebctx.a]
+ movdqa xmm7, [eax + ebctx.aspect2]
+ paddd xmm7, xmm7
+ movdqa xmm2, [eax + ebctx.b]
+ mov ecx, 0x10
+eb_rev_rs1:
+ movdqa xmm3, [esi] ; pr[i]
+ paddd xmm0, xmm1
+ movdqa xmm4, [edx] ; pb[i]
+ movdqa xmm6, xmm4
+ movdqa xmm5, xmm0
+ paddd xmm6, xmm3
+ paddd xmm5, xmm2
+ pcmpgtd xmm5, xmm6 ; 1's if rv + bv + av > pr[i] + pb[i]
+ paddd xmm1, [eax + ebctx.twos]
+ pxor xmm3, xmm0
+ pxor xmm4, xmm2
+ pand xmm3, xmm5
+ pand xmm4, xmm5
+ pxor xmm0, xmm3
+ pxor xmm2, xmm4
+ movdqa xmm4, [edi] ; pa[i]
+ movdqa xmm3, xmm0
+ pxor xmm4, xmm1
+ movdqa xmm6, xmm2
+ paddd xmm3, xmm2
+ paddd xmm6, xmm7
+ movdqa [esi], xmm3 ; pr[i] = rv + bv
+ pand xmm4, xmm5
+ movdqa [edx], xmm6 ; pb[i] = bv + 2 * aspect_2
+ pxor xmm1, xmm4
+ movdqa [edi], xmm1 ; pa[i] = av
+ sub edi, byte 0x10
+ sub edx, byte 0x10
+ sub esi, byte 0x10
+ sub ecx, byte 1
+ jne eb_rev_rs1
+ movdqa [eax + ebctx.r], xmm0
+ movdqa [eax + ebctx.a], xmm1
+ movdqa [eax + ebctx.b], xmm2
+
+ pop esi
+ pop edi
+ leave
+ ret
+
diff --git a/gs/toolbin/halftone/ETS/build.bat b/gs/toolbin/halftone/ETS/build.bat
new file mode 100644
index 000000000..2542a9b45
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/build.bat
@@ -0,0 +1,3 @@
+cl -c test_evenbetter.c
+cl /O2 /DUSE_SSE2 -c evenbetter-rll.c
+link /SUBSYSTEM:CONSOLE /OUT:test_evenbetter.exe test_evenbetter.obj evenbetter-rll.obj _eb_sse2.obj /NODEFAULTLIB:LIBC.lib /NODEFAULTLIB:LIBCMTD.lib LIBCMT.lib shell32.lib comdlg32.lib gdi32.lib user32.lib winspool.lib advapi32.lib
diff --git a/gs/toolbin/halftone/ETS/eb_avec.c b/gs/toolbin/halftone/ETS/eb_avec.c
new file mode 100644
index 000000000..92ac87b41
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/eb_avec.c
@@ -0,0 +1,691 @@
+#ifdef HAVE_ALTIVEC_H
+#include <altivec.h>
+#endif
+
+#include <stdio.h> /* for FILE, just so we can include evenbetter-rll.h" */
+#include "evenbetter-rll.h" /* for ET_SrcPixel */
+#include "eb_avec.h"
+
+void
+eb_avec_core(eb_ctx_avec *ctx, vector unsigned char *destbuf[4],
+ eb_srcbuf *srcbuf, int offset, const signed char *tmbase)
+{
+ vector float e;
+ vector float e_i_1;
+ vector unsigned int r;
+ vector unsigned int a;
+ vector unsigned int b;
+ vector unsigned int *r_line = ctx->r_line;
+ vector unsigned int *a_line = ctx->a_line;
+ vector unsigned int *b_line = ctx->b_line;
+ vector unsigned int r_i;
+ vector unsigned int a_i;
+ vector unsigned int b_i;
+ vector unsigned int u_0, u_1;
+ vector unsigned short u16_0;
+ vector unsigned char u8_0, u8_1, u8_2, u8_3, u8_4, u8_5, u8_6, u8_7;
+ vector bool int b_0, b_1;
+ vector float f_0, f_1, f_2, f_3, f_4;
+ vector float *iir_line;
+ vector float zero = (vector float) vec_splat_u32(0);
+ vector float kernel = ctx->kernel;
+ vector float r_mul = ctx->r_mul;
+ vector float elo = ctx->elo;
+ vector float ehi = ctx->ehi;
+ vector float ohi = ctx->ohi;
+ vector unsigned int aspect2 = ctx->aspect2;
+ vector unsigned int ones = vec_splat_u32(1);
+ vector unsigned int twos = vec_splat_u32(2);
+ vector float mseveneighths = { -0.875, -0.875, -0.875, -0.875 };
+ vector float im;
+ vector float rb;
+ vector float rs;
+ vector float e_q;
+ vector unsigned char tmpbuf[4];
+ int i, off;
+ int ctrl_w = 0x10100010;
+ vector signed char tmvec;
+ vector unsigned char tmperm;
+
+ e = ctx->e;
+ e_i_1 = ctx->e_i_1;
+ r = ctx->r;
+ a = ctx->a;
+ b = ctx->b;
+ off = offset;
+ iir_line = ctx->iir_line + off;
+
+ vec_dst(&a_line[off], ctrl_w, 0);
+ vec_dst(&b_line[off], ctrl_w, 1);
+ vec_dst(&r_line[off], ctrl_w, 2);
+ vec_dst(iir_line, ctrl_w + 0x10000, 3);
+
+ for (i = 0; i < 16; i++) {
+ r_i = r_line[off];
+ u_0 = vec_adds(r, a);
+ b_0 = vec_cmpgt(r_i, u_0);
+ r = vec_sel(r_i, u_0, b_0);
+ a_i = a_line[off];
+ u_1 = vec_adds(a, twos);
+ a = vec_sel(a_i, u_1, b_0);
+ b_i = b_line[off];
+ b = vec_sel(b_i, b, b_0);
+
+ /* compute FS kernel */
+ im = srcbuf->im[i];
+ rb = srcbuf->rb[i];
+ rs = srcbuf->rs[i];
+ f_3 = vec_ctf(r, 0);
+ f_3 = vec_madd(f_3, r_mul, rb);
+ // f_4 = vec_abs(f_3);
+ // f_3 = vec_madd(f_4, mseveneighths, f_3);
+ f_1 = vec_splat(kernel, 3);
+ e = vec_madd(f_1, e, zero);
+ f_1 = vec_splat(kernel, 0);
+ e = vec_madd(f_1, e_i_1, e);
+ e_i_1 = iir_line[0];
+ f_1 = vec_splat(kernel, 1);
+ f_2 = iir_line[1];
+ e = vec_madd(f_1, f_2, e);
+ f_1 = vec_splat(kernel, 2);
+ e = vec_madd(f_1, e_i_1, e);
+
+ /* add threshold modulation */
+ tmvec = vec_lde(i, tmbase);
+ tmperm = vec_lvsl(i, tmbase);
+ tmvec = vec_perm(tmvec, tmvec, tmperm);
+ tmvec = vec_splat(tmvec, 0);
+ f_0 = vec_ctf((vector signed int)tmvec, 0);
+ e_q = vec_madd(f_0, rs, e);
+ e_q = vec_add(e_q, f_3);
+
+ e_q = vec_min(e_q, ehi);
+ e_q = vec_max(e_q, elo);
+ e_q = vec_add(e_q, im);
+ e_q = vec_min(e_q, ohi);
+
+ u_0 = vec_ctu(e_q, 0); /* quantization step */
+ b_0 = vec_cmpeq(im, zero);
+ u_0 = vec_andc(u_0, b_0); /* force 0 if im == 0.0 */
+ u16_0 = vec_packs(u_0, u_0);
+ u8_0 = vec_packs(u16_0, u16_0);
+ vec_ste((vector unsigned int)u8_0, 0, &((unsigned int *)tmpbuf)[i]);
+ f_0 = vec_ctf(u_0, 0);
+ e = vec_add(e, im);
+ e = vec_sub(e, f_0);
+ iir_line[0] = e;
+
+ /* update r */
+ b_1 = vec_cmpeq(u_0, (vector unsigned int)zero);
+ a = vec_sel(ones, a, b_1);
+ b = vec_sel(aspect2, b, b_1);
+ r = vec_and(r, b_1);
+ a_line[off] = a;
+ b_line[off] = b;
+ r_line[off] = r;
+
+ iir_line++;
+ off++;
+ }
+ ctx->e = e;
+ ctx->e_i_1 = e_i_1;
+ ctx->r = r;
+ ctx->a = a;
+ ctx->b = b;
+
+ /* repack output */
+ u8_0 = tmpbuf[0]; /* 0a0b0c0d1a1b1c1d2a2b2c2d3a3b3c3d */
+ u8_1 = tmpbuf[1];
+ u8_2 = tmpbuf[2];
+ u8_3 = tmpbuf[3];
+ u8_4 = vec_mergeh(u8_0, u8_2); /* 0a8a0b8b0c8c0d8d1a9a1b8b1c8c1d8d */
+ u8_5 = vec_mergel(u8_0, u8_2); /* 2aAa... 3dBd */
+ u8_6 = vec_mergeh(u8_1, u8_3); /* 4aCa... 5dDd */
+ u8_7 = vec_mergel(u8_1, u8_3); /* 6aEa... 7dFd */
+ u8_0 = vec_mergeh(u8_4, u8_6); /* 0a4a8aCa0b4b8bCb... 8dCd */
+ u8_1 = vec_mergel(u8_4, u8_6); /* 1a5a9aDa0b5b9bDb... 9dDd */
+ u8_2 = vec_mergeh(u8_5, u8_7); /* 2a6aAaEa... AdEd */
+ u8_3 = vec_mergel(u8_5, u8_7); /* 3a7aBaFa.. . BdFd */
+ u8_4 = vec_mergeh(u8_0, u8_2); /* 0a2a4a6a8aAaCaEa... CbEb */
+ u8_5 = vec_mergel(u8_0, u8_2); /* 0c2c... CdEd */
+ u8_6 = vec_mergeh(u8_1, u8_3); /* 1a3a... DbFb */
+ u8_7 = vec_mergel(u8_1, u8_3); /* 1c3c... DdFd */
+ u8_0 = vec_mergeh(u8_4, u8_6); /* 0a1a2a3a... EaFa */
+ u8_1 = vec_mergel(u8_4, u8_6); /* 0b1b2b3b... EbFb */
+ u8_2 = vec_mergeh(u8_5, u8_7); /* 0c1c2c3c... EcFc */
+ u8_3 = vec_mergel(u8_5, u8_7); /* 0d1d2d3d... . EcFd */
+ destbuf[0][offset >> 4] = u8_0;
+ destbuf[1][offset >> 4] = u8_1;
+ destbuf[2][offset >> 4] = u8_2;
+ destbuf[3][offset >> 4] = u8_3;
+
+}
+
+void
+eb_avec_rev_rs(eb_ctx_avec *ctx, int offset)
+{
+ int i;
+ vector unsigned int *r_line = ctx->r_line;
+ vector unsigned int *a_line = ctx->a_line;
+ vector unsigned int *b_line = ctx->b_line;
+ vector unsigned int r;
+ vector unsigned int a;
+ vector unsigned int b;
+ vector unsigned int r_i;
+ vector unsigned int a_i;
+ vector unsigned int b_i;
+ vector unsigned int u_0, u_1, u_2, u_3, u_4, u_5;
+ vector unsigned int aspect2 = ctx->aspect2;
+ vector unsigned int twice_aspect2 = vec_add(aspect2, aspect2);
+ vector unsigned int twos = vec_splat_u32(2);
+ vector bool int b_0;
+ unsigned int ctrl_w = 0x1010fff0;
+
+ r = ctx->r;
+ a = ctx->a;
+ b = ctx->b;
+
+ vec_dst(&a_line[offset], ctrl_w, 0);
+ vec_dst(&b_line[offset], ctrl_w, 1);
+ vec_dst(&r_line[offset], ctrl_w, 2);
+
+ for (i = 0; i < 16; i++) {
+ r_i = r_line[offset];
+ a_i = a_line[offset];
+ b_i = b_line[offset];
+ u_0 = vec_adds(r, a);
+ u_1 = vec_adds(u_0, b);
+ u_2 = vec_adds(r_i, b_i);
+ b_0 = vec_cmpgt(u_2, u_1);
+ u_3 = vec_adds(a, twos);
+ r = vec_sel(r_i, u_0, b_0);
+ a = vec_sel(a_i, u_3, b_0);
+ b = vec_sel(b_i, b, b_0);
+ a_line[offset] = a;
+ u_4 = vec_adds(b, twice_aspect2);
+ b_line[offset] = u_4;
+ u_5 = vec_adds(r, b);
+ r_line[offset] = u_5;
+ offset--;
+ }
+ ctx->r = r;
+ ctx->a = a;
+ ctx->b = b;
+}
+
+/* Prepare a source buffer from 8-bit input. Return 0 if source is
+ all-zero. */
+int
+eb_avec_prep_srcbuf(eb_ctx_avec *ctx, int n_planes,
+ eb_srcbuf *srcbuf, const ET_SrcPixel *const *src,
+ int off)
+{
+ vector unsigned char c0, c1, c2, c3, c4, c5, c6, c7;
+ vector unsigned char zero = vec_splat_u8(0);
+ vector unsigned short s0, s1;
+ vector unsigned int u0;
+ vector float f0, f1;
+ vector bool int b0;
+ vector float imscale1 = ctx->imscale1;
+ vector float imscale2 = ctx->imscale2;
+ vector float rbmul = ctx->rbmul;
+ vector float rsbase = ctx->rsbase;
+ vector float onehalf = { 0.5, 0.5, 0.5, 0.5 };
+
+ c0 = ((vector unsigned char *)src[0])[off >> 4];
+ c1 = n_planes > 1 ? ((vector unsigned char *)src[1])[off >> 4] : zero;
+ c2 = n_planes > 2 ? ((vector unsigned char *)src[2])[off >> 4] : zero;
+ c3 = n_planes > 3 ? ((vector unsigned char *)src[3])[off >> 4] : zero;
+
+ /* check for zeros */
+ c4 = vec_or(c0, c1);
+ c5 = vec_or(c2, c3);
+ c4 = vec_or(c4, c5);
+ if (vec_all_eq(c4, zero))
+ return 0;
+
+ c4 = vec_mergeh(c0, c2); /* C0 Y0 .. C7 Y7 */
+ c5 = vec_mergeh(c1, c3); /* M0 K0 .. M7 K7 */
+ c6 = vec_mergel(c0, c2); /* C8 Y8 ... */
+ c7 = vec_mergel(c1, c3);
+
+ c0 = vec_mergeh(c4, c5); /* C0 M0 Y0 K0 ... C3 M3 Y3 K3 */
+
+ if (*((float *)&ctx->imscale2) == 0.0) {
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[0] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[0] = (vector float)f0;
+ srcbuf->rs[0] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[1] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[1] = (vector float)f0;
+ srcbuf->rs[1] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[2] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[2] = (vector float)f0;
+ srcbuf->rs[2] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[3] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[3] = (vector float)f0;
+ srcbuf->rs[3] = (vector float)rsbase;
+
+ c0 = vec_mergel(c4, c5); /* C4 M4 Y4 K4 ... C7 M7 Y7 K7 */
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[4] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[4] = (vector float)f0;
+ srcbuf->rs[4] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[5] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[5] = (vector float)f0;
+ srcbuf->rs[5] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[6] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[6] = (vector float)f0;
+ srcbuf->rs[6] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[7] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[7] = (vector float)f0;
+ srcbuf->rs[7] = (vector float)rsbase;
+
+ c0 = vec_mergeh(c6, c7); /* C8 M8 Y8 K8 ... Cb Mb Yb Kb */
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[8] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[8] = (vector float)f0;
+ srcbuf->rs[8] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[9] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[9] = (vector float)f0;
+ srcbuf->rs[9] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[10] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[10] = (vector float)f0;
+ srcbuf->rs[10] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[11] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[11] = (vector float)f0;
+ srcbuf->rs[11] = (vector float)rsbase;
+
+ c0 = vec_mergel(c6, c7); /* Cc Mc Yc Kc ... Cf Mf Yf Kf */
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[12] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[12] = (vector float)f0;
+ srcbuf->rs[12] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[13] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[13] = (vector float)f0;
+ srcbuf->rs[13] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[14] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[14] = (vector float)f0;
+ srcbuf->rs[14] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f0 = vec_madd(f0, imscale1, (vector float)zero);
+ srcbuf->im[15] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[15] = (vector float)f0;
+ srcbuf->rs[15] = (vector float)rsbase;
+ } else {
+ vector float foff = ctx->foff;
+ c0 = vec_nor(c0, c0);
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[0] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[0] = (vector float)f0;
+ srcbuf->rs[0] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[1] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[1] = (vector float)f0;
+ srcbuf->rs[1] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[2] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[2] = (vector float)f0;
+ srcbuf->rs[2] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[3] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[3] = (vector float)f0;
+ srcbuf->rs[3] = (vector float)rsbase;
+
+ c0 = vec_mergel(c4, c5); /* C4 M4 Y4 K4 ... C7 M7 Y7 K7 */
+ c0 = vec_nor(c0, c0);
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[4] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[4] = (vector float)f0;
+ srcbuf->rs[4] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[5] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[5] = (vector float)f0;
+ srcbuf->rs[5] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[6] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[6] = (vector float)f0;
+ srcbuf->rs[6] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[7] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[7] = (vector float)f0;
+ srcbuf->rs[7] = (vector float)rsbase;
+
+ c0 = vec_mergeh(c6, c7); /* C8 M8 Y8 K8 ... Cb Mb Yb Kb */
+ c0 = vec_nor(c0, c0);
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[8] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[8] = (vector float)f0;
+ srcbuf->rs[8] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[9] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[9] = (vector float)f0;
+ srcbuf->rs[9] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[10] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[10] = (vector float)f0;
+ srcbuf->rs[10] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[11] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[11] = (vector float)f0;
+ srcbuf->rs[11] = (vector float)rsbase;
+
+ c0 = vec_mergel(c6, c7); /* Cc Mc Yc Kc ... Cf Mf Yf Kf */
+ c0 = vec_nor(c0, c0);
+ s0 = (vector unsigned short)vec_mergeh(zero, c0);
+ s1 = (vector unsigned short)vec_mergel(zero, c0);
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[12] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[12] = (vector float)f0;
+ srcbuf->rs[12] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s0);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[13] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[13] = (vector float)f0;
+ srcbuf->rs[13] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergeh((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[14] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[14] = (vector float)f0;
+ srcbuf->rs[14] = (vector float)rsbase;
+
+ u0 = (vector unsigned int)vec_mergel((vector unsigned short)zero, s1);
+ f0 = vec_ctf(u0, 8);
+ /* scale, do gamma here */
+ f1 = vec_rsqrte(f0);
+ f1 = vec_madd(f1, f0, (vector float)zero);
+ f1 = vec_nmsub(f1, imscale2, foff);
+ f0 = vec_nmsub(f0, imscale1, f1);
+ b0 = vec_cmpge(f0, (vector float)zero);
+ f0 = vec_sel(foff, f0, b0);
+ srcbuf->im[15] = f0;
+ f0 = vec_re(f0);
+ f0 = vec_madd(f0, rbmul, onehalf);
+ srcbuf->rb[15] = (vector float)f0;
+ srcbuf->rs[15] = (vector float)rsbase;
+ }
+
+ return 1;
+}
diff --git a/gs/toolbin/halftone/ETS/eb_avec.h b/gs/toolbin/halftone/ETS/eb_avec.h
new file mode 100644
index 000000000..fcdb56821
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/eb_avec.h
@@ -0,0 +1,44 @@
+typedef struct _eb_ctx_avec eb_ctx_avec;
+typedef struct _eb_srcbuf eb_srcbuf;
+
+struct _eb_ctx_avec {
+ int xs;
+ float *luts[4];
+ vector float *iir_line;
+ vector unsigned int *r_line;
+ vector unsigned int *a_line;
+ vector unsigned int *b_line;
+ char *skip_line;
+ vector float e;
+ vector float e_i_1;
+ vector unsigned int r;
+ vector unsigned int a;
+ vector unsigned int b;
+ vector unsigned int aspect2;
+ vector float ehi;
+ vector float elo;
+ vector float ohi;
+ vector float r_mul;
+ vector float kernel;
+ vector float imscale1;
+ vector float imscale2;
+ vector float foff;
+ vector float rbmul;
+ vector float rsbase;
+};
+
+struct _eb_srcbuf {
+ vector float im[16];
+ vector float rb[16];
+ vector float rs[16];
+};
+
+void eb_avec_core(eb_ctx_avec *ctx, vector unsigned char *destbuf[4],
+ eb_srcbuf *srcbuf, int offset, const signed char *tmbase);
+
+void eb_avec_rev_rs(eb_ctx_avec *ctx, int offset);
+
+int
+eb_avec_prep_srcbuf(eb_ctx_avec *ctx, int n_planes,
+ eb_srcbuf *srcbuf, const ET_SrcPixel *const *src,
+ int off);
diff --git a/gs/toolbin/halftone/ETS/eb_sse2.s b/gs/toolbin/halftone/ETS/eb_sse2.s
new file mode 100644
index 000000000..835e767ff
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/eb_sse2.s
@@ -0,0 +1,344 @@
+;;; Implementation of Even Better core in SSE2 instruction set
+
+ struc ebctx
+.xs resd 1
+.iir_line resd 1
+.r_line resd 1
+.a_line resd 1
+.b_line resd 1
+.dummy resd 3
+.luts resd 4
+.e resb 16
+.e_i_1 resb 16
+.r resb 16
+.a resb 16
+.b resb 16
+.ones resb 16
+.twos resb 16
+.aspect2 resb 16
+.ehi resd 4
+.elo resd 4
+.ohi resd 4
+.r_mul resd 4
+.kernel resd 4
+.seed1 resd 4
+.seed2 resd 4
+.tmmat resd 4
+.y resd 4
+ endstruc
+
+ struc srcbuf
+.im resd 64 ; image in floating pt
+.rb resd 64 ; 0.5 - rb_lut, in floating pt
+.rs resd 64 ; scale for randomness
+ endstruc
+
+;;; some of the optimization is tricky. For a = c ? a : b, we write:
+;;; pandn a, c ; a = (~a & c)
+;;; por b, c ; b = (b | c)
+;;; pandn a, b ; a = (~(~a & c)) & (b | c)
+;;; For the converse, a = c ? b : a, we write:
+;;; pxor b, a ; b = (a ^ b)
+;;; pand b, c ; b = (a ^ b) & c
+;;; pxor a, b ; a = a ^ ((a ^ b) & c)
+
+ global eb_test_sse2
+eb_test_sse2:
+ push ebx
+ mov eax, 1
+ cpuid
+ mov eax, edx
+ shr eax, 26
+ and eax, byte 1
+ jz eb_test_sse2_1
+
+eb_test_sse2_1:
+ pop ebx
+ ret
+
+ global eb_sse2_set_daz
+eb_sse2_set_daz:
+ sub esp, 4
+ stmxcsr [esp]
+ mov eax, [esp]
+ or word [esp], 0x8040
+ ldmxcsr [esp]
+ add esp, 4
+ ret
+
+ global eb_sse2_restore_daz
+eb_sse2_restore_daz:
+ ldmxcsr [esp + 4]
+ ret
+
+ global eb_sse2_core
+eb_sse2_core:
+;;; screen one block of 16 pixels, 4 planes
+ struc args
+.header resb 8
+.ctx resd 1 ; context
+.destbuf resd 1 ; dest buffers
+.srcbuf resd 1 ; source buffer struct
+.offset resd 1 ; offset (in pixels)
+.tmbase resd 1 ; base addr of threshold mod matrix
+ endstruc
+ push ebp
+ mov ebp, esp
+ push ebx
+ push edi
+ push esi
+
+ struc frame
+.obuf resb 64
+ endstruc
+ sub esp, frame_size
+;;; align esp to 128-bit boundary
+ and esp, byte -0x10
+
+ mov eax, [ebp + args.ctx]
+ mov ebx, [ebp + args.srcbuf]
+ mov ecx, 0
+ mov edx, [ebp + args.offset]
+ shl edx, 4
+ mov edi, [eax + ebctx.iir_line]
+
+ movaps xmm6, [eax + ebctx.e]
+ movdqa xmm4, [eax + ebctx.r]
+ movdqa xmm0, [eax + ebctx.a]
+ movdqa xmm1, [eax + ebctx.b]
+
+eb_sse2_core1:
+;;; pixel loop
+ ;; invariant: xmm4 = r, xmm0 = a, xmm1 = b
+ mov esi, [eax + ebctx.r_line]
+ paddd xmm4, xmm0
+ movdqa xmm3, [esi + edx] ; r[i]
+ movdqa xmm2, xmm3
+ movaps xmm7, [eax + ebctx.e_i_1]
+ pcmpgtd xmm3, xmm4 ; xmm3 is ones if r + a < rline[x]
+ mov esi, [eax + ebctx.a_line]
+ pxor xmm4, xmm2
+ movdqa xmm5, [esi + edx] ; a[i]
+ pand xmm4, xmm3
+ paddd xmm0, [eax + ebctx.twos]
+ pxor xmm2, xmm4 ; r = ... ? r + a : r[i]
+ movdqa [eax + ebctx.r], xmm2
+ pandn xmm0, xmm3
+ mov esi, [eax + ebctx.b_line]
+ por xmm5, xmm3
+
+ pandn xmm0, xmm5 ; a = ... ? a + 2 : a[i]
+ movdqa xmm5, [esi + edx] ; b[i]
+ pandn xmm1, xmm3
+ movdqa [eax + ebctx.a], xmm0
+ por xmm5, xmm3
+ movaps xmm3, [eax + ebctx.kernel]
+ pandn xmm1, xmm5 ; b = ... ? b : b[i]
+ movdqa [eax + ebctx.b], xmm1
+
+ ;; xmm2 = r (updated)
+
+
+ mov esi, [ebp + args.tmbase]
+ xor eax, eax
+ mov al, [esi + ecx]
+ shl eax, 24 ; could avoid this by changing the rand lut
+ cvtsi2ss xmm4, eax
+ pshufd xmm4, xmm4, 0
+ ;; note: if we swapped eax and esi, we could probably avoid this
+ mov eax, [ebp + args.ctx]
+
+ ;; compute FS kernel
+ pshufd xmm1, xmm3, 0x00 ; 1/16
+ mulps xmm1, xmm7
+ movaps xmm7, [edi + edx] ; e_i
+ pshufd xmm5, xmm3, 0xff ; 7/16
+ mulps xmm6, xmm5
+ cvtdq2ps xmm2, xmm2
+ mulps xmm2, [eax + ebctx.r_mul]
+ addps xmm6, xmm1
+ mulps xmm4, [ebx + srcbuf.rs]
+ pshufd xmm0, xmm3, 0xaa ; 5/16
+ mulps xmm0, xmm7
+ addps xmm2, [ebx + srcbuf.rb]
+ pshufd xmm3, xmm3, 0x55 ; 3/16
+ movaps [eax + ebctx.e_i_1], xmm7
+ addps xmm0, xmm6
+ movdqa xmm5, [ebx + srcbuf.im]
+ mulps xmm3, [edi + edx + 0x10] ; e[i+1]
+ addps xmm2, xmm4
+
+ addps xmm0, xmm3
+
+ movaps xmm6, xmm0
+ addps xmm0, xmm2
+ minps xmm0, [eax + ebctx.ehi]
+ pxor xmm4, xmm4
+ maxps xmm0, [eax + ebctx.elo]
+ addps xmm0, xmm5
+ subps xmm2, xmm2
+ minps xmm0, [eax + ebctx.ohi]
+ addps xmm6, xmm5
+ maxps xmm0, xmm2
+ cvttps2dq xmm1, xmm0 ; this is where the actual quantization is
+ cmpneqps xmm2, xmm5
+ pand xmm1, xmm2 ; force 0 if im == 0.0
+ cvtdq2ps xmm3, xmm1
+ subps xmm6, xmm3
+ movdqa xmm0, [eax + ebctx.a]
+ pcmpeqd xmm4, xmm1 ; 1's when pixel is 0
+ ;movdqa xmm1, [eax + ebctx.r] ; for visualizing r buf when testing
+ movaps xmm7, [edi + edx]
+ packssdw xmm1, xmm1
+ movaps [edi + edx], xmm6
+ packuswb xmm1, xmm1
+ movd [esp + ecx * 4], xmm1
+
+ ;; update r
+ mov esi, [eax + ebctx.a_line]
+ movdqa xmm2, [eax + ebctx.ones]
+ pandn xmm0, xmm4
+ por xmm2, xmm4
+ movdqa xmm1, [eax + ebctx.b]
+ pandn xmm0, xmm2
+ movdqa [esi + edx], xmm0
+ mov esi, [eax + ebctx.b_line]
+ pandn xmm1, xmm4
+ movdqa xmm2, [eax + ebctx.aspect2]
+ por xmm2, xmm4
+ pand xmm4, [eax + ebctx.r]
+ pandn xmm1, xmm2
+ movdqa [esi + edx], xmm1
+ add ebx, byte 0x10
+ mov esi, [eax + ebctx.r_line]
+ movdqa [esi + edx], xmm4
+ add edx, byte 0x10
+ add ecx, byte 1
+
+ cmp ecx, byte 0x10
+ jne eb_sse2_core1
+
+ movdqa [eax + ebctx.r], xmm4
+ movdqa [eax + ebctx.a], xmm0
+ movdqa [eax + ebctx.b], xmm1
+ movaps [eax + ebctx.e], xmm6
+
+;;; repack output
+ mov eax, [ebp + args.destbuf]
+ mov ecx, [ebp + args.offset]
+ mov ebx, [eax]
+ mov edx, [eax + 4]
+ mov esi, [eax + 8]
+ mov edi, [eax + 12]
+ movdqa xmm0, [esp] ; 3d3c3b3a2d2c2b2a1d1c1b1a0d0c0b0a
+ ;; 0 1 2 3
+ movdqa xmm4, xmm0
+ movdqa xmm2, [esp + 0x20]
+ punpckhbw xmm4, xmm2 ; Bd3dBc3cBb3cBa3aAd2dAc2cAb2bAa2a
+ punpcklbw xmm0, xmm2 ; 9d1d9c1c9b1b9a1a8d0d8c0c8b0b8a0a
+ movdqa xmm1, [esp + 0x10] ; 7d7c7b7a6d6c6b6a5d5c5b5a4d4c4b4a
+ movdqa xmm2, xmm1
+ movdqa xmm3, [esp + 0x30]
+ punpcklbw xmm2, xmm3 ; Dd5dDc5cDb5cDa5aCd4dCc4cCb4bCa4a
+ punpckhbw xmm1, xmm3 ; Fd7dFc7cFb7bFa7aEd6dEc6cEb6bEa6a
+ ;; 0 4 2 1
+ movdqa xmm3, xmm0
+ punpckhbw xmm3, xmm2
+ punpcklbw xmm0, xmm2
+ movdqa xmm2, xmm4
+ punpcklbw xmm4, xmm1
+ punpckhbw xmm2, xmm1
+ ;; 0 3 4 2
+ movdqa xmm1, xmm0
+ punpckhbw xmm1, xmm4
+ punpcklbw xmm0, xmm4
+ movdqa xmm4, xmm3
+ punpcklbw xmm4, xmm2
+ punpckhbw xmm3, xmm2
+ ;; 0 1 4 3
+ movdqa xmm2, xmm0
+ punpckhbw xmm2, xmm4
+ movdqa [edx + ecx], xmm2
+ punpcklbw xmm0, xmm4
+ movdqa [ebx + ecx], xmm0 ; FaEaDaCaBaAa9a8a7a6a5a4a3a2a1a0a
+ movdqa xmm4, xmm1
+ punpcklbw xmm4, xmm3
+ movdqa [esi + ecx], xmm4
+ punpckhbw xmm1, xmm3
+ movdqa [edi + ecx], xmm1
+ ;; 0 2 4 1
+
+ mov esi, [ebp - 12]
+ mov edi, [ebp - 8]
+ mov ebx, [ebp - 4]
+ leave
+ ret
+
+ global eb_sse2_rev_rs
+eb_sse2_rev_rs:
+ struc rargs
+.header resb 8
+.ctx resd 1 ; context
+.offset resd 1 ; offset (in pixels)
+ endstruc
+ push ebp
+ mov ebp, esp
+ push edi
+ push esi
+
+ mov eax, [ebp + rargs.ctx]
+ mov ecx, [ebp + rargs.offset]
+ shl ecx, 4
+ mov esi, [eax + ebctx.r_line]
+ add esi, ecx
+ mov edi, [eax + ebctx.a_line]
+ add edi, ecx
+ mov edx, [eax + ebctx.b_line]
+ add edx, ecx
+ movdqa xmm0, [eax + ebctx.r]
+ movdqa xmm1, [eax + ebctx.a]
+ movdqa xmm7, [eax + ebctx.aspect2]
+ paddd xmm7, xmm7
+ movdqa xmm2, [eax + ebctx.b]
+ mov ecx, 0x10
+eb_rev_rs1:
+ movdqa xmm3, [esi] ; pr[i]
+ paddd xmm0, xmm1
+ movdqa xmm4, [edx] ; pb[i]
+ movdqa xmm6, xmm4
+ movdqa xmm5, xmm0
+ paddd xmm6, xmm3
+ paddd xmm5, xmm2
+ pcmpgtd xmm5, xmm6 ; 1's if rv + bv + av > pr[i] + pb[i]
+ paddd xmm1, [eax + ebctx.twos]
+ pxor xmm3, xmm0
+ pxor xmm4, xmm2
+ pand xmm3, xmm5
+ pand xmm4, xmm5
+ pxor xmm0, xmm3
+ pxor xmm2, xmm4
+ movdqa xmm4, [edi] ; pa[i]
+ movdqa xmm3, xmm0
+ pxor xmm4, xmm1
+ movdqa xmm6, xmm2
+ paddd xmm3, xmm2
+ paddd xmm6, xmm7
+ movdqa [esi], xmm3 ; pr[i] = rv + bv
+ pand xmm4, xmm5
+ movdqa [edx], xmm6 ; pb[i] = bv + 2 * aspect_2
+ pxor xmm1, xmm4
+ movdqa [edi], xmm1 ; pa[i] = av
+ sub edi, byte 0x10
+ sub edx, byte 0x10
+ sub esi, byte 0x10
+ sub ecx, byte 1
+ jne eb_rev_rs1
+ movdqa [eax + ebctx.r], xmm0
+ movdqa [eax + ebctx.a], xmm1
+ movdqa [eax + ebctx.b], xmm2
+
+ pop esi
+ pop edi
+ leave
+ ret
+
diff --git a/gs/toolbin/halftone/ETS/ei03.pdf b/gs/toolbin/halftone/ETS/ei03.pdf
new file mode 100644
index 000000000..0a6a54b2b
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/ei03.pdf
Binary files differ
diff --git a/gs/toolbin/halftone/ETS/ets.c b/gs/toolbin/halftone/ETS/ets.c
new file mode 100644
index 000000000..3e8ecbd98
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/ets.c
@@ -0,0 +1,900 @@
+ /*
+ * Testbed implementation of Even Better Screening. Please see
+ * http://www.artofcode.com/eventone/ for more details.
+ *
+ * Copyright 2001-2004 Raph Levien <raph@acm.org>
+ *
+ * Code in this module is covered by US Patents 5,055,942 and
+ * 5,917,614, and corresponding international patents. This version
+ * of ETS is for commercial licensees and is governed by the licensing
+ * agreement between artofcode LLC and the licensee. Please see
+ * http://www.artofcode.com/eventone/ for information on licensing.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ets.h"
+
+/* source for threshold matrix - need to improve build process */
+#include "tm.h"
+
+#define ETS_VERSION 150
+
+#define ETS_SHIFT 16
+#define IMO_SHIFT 14
+
+#define FANCY_COUPLING
+
+typedef struct _ETS_PlaneCtx ETS_PlaneCtx;
+typedef unsigned int uint32;
+
+struct _ETS_Ctx {
+ int width;
+ int n_planes;
+ int levels; /* Number of levels on output, <= 256 */
+ ETS_PlaneCtx **plane_ctx;
+ int aspect_x;
+ int aspect_y;
+ int *strengths;
+ int elo;
+ int ehi;
+ int *c_line;
+
+ int ets_style;
+ int r_style;
+
+ uint32 seed1;
+ uint32 seed2;
+
+ FILE *dump_file;
+ ETS_DumpLevel dump_level;
+
+ /* Threshold modulation array */
+ int y;
+ int tmwid;
+ int tmheight;
+ const signed char *tmmat;
+};
+
+struct _ETS_PlaneCtx {
+ int width; /* Width of plane in pixels */
+ int *dst_line; /* Output pointer */
+ int *err_line; /* Total error carried out of pixel in the line above */
+ int *r_line; /* expected distance table (see paper for details) */
+ int *a_line; /* expected distance intermediate table (see paper) */
+ int *b_line; /* expected distance intermediate table (see paper) */
+ int *lut; /* Table to map from input source value to internal
+ * intensity level. Internal intensity level is 0 to
+ * 1<<ETS_SHIFT. */
+ int *dist_lut; /* A table of "expected distance between set pixels"
+ * values, stored in fixed point format with (ETS_SHIFT-c1)
+ * fractional bits. Values outside of the 'level 0-1' band
+ * will be set to 0 to avoid ETS weighting being used. */
+ char *rs_lut; /* Random noise table; values between 0 and 24. x meaning
+ * use 32-x bits of random noise, */
+ int c1; /* Shift adjustment for the dist_lut. */
+ int tm_offset;/* Plane offset within tm data */
+};
+
+void *
+ets_malloc_aligned(int size, int align)
+{
+ void *result;
+ void *alloced = malloc(size + align);
+ int pad;
+
+ if (alloced == 0)
+ return 0;
+ pad = ((12 - (int)alloced) & 15) + 4;
+ result = (void *)(pad + (char *)alloced);
+ ((int *)result)[-1] = pad;
+ return result;
+}
+
+void
+ets_free_aligned(void *p)
+{
+ int pad = ((int *)p)[-1];
+ free((char*)p - pad);
+}
+
+static double
+compute_distscale(const ETS_Params *params)
+{
+ double distscale = params->distscale;
+
+ if (distscale == 0.0)
+ {
+ distscale = -1;
+ switch(params->aspect_x)
+ {
+ case 1:
+ switch(params->aspect_y)
+ {
+ case 1:
+ distscale = 0.95;
+ break;
+ case 2:
+ distscale = 1.8;
+ break;
+ case 3:
+ distscale = 2.4; /* FIXME */
+ break;
+ case 4:
+ distscale = 3.6;
+ break;
+ }
+ break;
+ case 2:
+ switch(params->aspect_y)
+ {
+ case 1:
+ distscale = 1.8;
+ break;
+ case 2:
+ break;
+ case 3:
+ distscale = 1.35; /* FIXME */
+ break;
+ case 4:
+ break;
+ }
+ break;
+ case 3:
+ switch(params->aspect_y)
+ {
+ case 1:
+ distscale = 2.4; /* FIXME */
+ break;
+ case 2:
+ distscale = 1.35; /* FIXME */
+ break;
+ case 3:
+ break;
+ case 4:
+ distscale = 0.675; /* FIXME */
+ break;
+ }
+ break;
+ case 4:
+ switch(params->aspect_y)
+ {
+ case 1:
+ distscale = 3.6;
+ break;
+ case 2:
+ break;
+ case 3:
+ distscale = 0.675; /* FIXME */
+ break;
+ case 4:
+ break;
+ }
+ break;
+ }
+ if (distscale == -1)
+ {
+ fprintf(stderr, "aspect ratio of %d:%d not supported\n",
+ params->aspect_x, params->aspect_y);
+ exit(1);
+ }
+ }
+ return distscale;
+}
+
+static int
+ets_log2(int x)
+{
+ int y = 0;
+ int z;
+
+ for (z = x; z > 1; z = z >> 1)
+ y++;
+ return y;
+}
+
+static int
+ets_log2up(int x)
+{
+ return ets_log2(x-1)+1;
+}
+
+static int
+compute_randshift(int nl, int rs_base, int levels)
+{
+ int rs = rs_base;
+
+ if ((nl > (90 << (ETS_SHIFT - 10)) &&
+ nl < (129 << (ETS_SHIFT - 10))) ||
+ (nl > (162 << (ETS_SHIFT - 10)) &&
+ nl < (180 << (ETS_SHIFT - 10))))
+ rs--;
+ else if (nl > (321 << (ETS_SHIFT - 10)) &&
+ nl < (361 << (ETS_SHIFT - 10)))
+ {
+ rs--;
+ if (nl > (331 << (ETS_SHIFT - 10)) &&
+ nl < (351 << (ETS_SHIFT - 10)))
+ rs--;
+ }
+ else if ((nl == (levels - 1) << ETS_SHIFT) &&
+ nl > (((levels - 1) << ETS_SHIFT) -
+ (1 << (ETS_SHIFT - 2))))
+ {
+ /* don't add randomness in extreme shadows */
+ }
+ else if ((nl > (3 << (ETS_SHIFT - 2))))
+ {
+ nl -= (nl + (1 << (ETS_SHIFT - 2))) & -(1 << (ETS_SHIFT - 1));
+ if (nl < 0) nl = -nl;
+ if (nl < (1 << (ETS_SHIFT - 4))) rs--;
+ if (nl < (1 << (ETS_SHIFT - 5))) rs--;
+ if (nl < (1 << (ETS_SHIFT - 6))) rs--;
+ }
+ else
+ {
+ if (nl < (3 << (ETS_SHIFT - 3))) nl += 1 << (ETS_SHIFT - 2);
+ nl = nl - (1 << (ETS_SHIFT - 1));
+ if (nl < 0) nl = -nl;
+ if (nl < (1 << (ETS_SHIFT - 4))) rs--;
+ if (nl < (1 << (ETS_SHIFT - 5))) rs--;
+ if (nl < (1 << (ETS_SHIFT - 6))) rs--;
+ }
+ return rs;
+}
+
+/* Maximum number of planes, but actually we want to dynamically
+ allocate all scratch buffers that depend on this. */
+#define M 16
+
+/**
+ * ets_line: Screen a line using Even TonenFS screeing.
+ * @ctx: An #EBPlaneCtx context.
+ * @dest: Array of destination buffers, 8 bpp pixels each.
+ * @src: Array of source buffer, ET_SrcPixel pixels each.
+ *
+ * Screens a single line using Even ToneFS screening.
+ **/
+void
+ets_line(ETS_Ctx *etc, uchar **dest, const ETS_SrcPixel *const *src)
+{
+ int a[M], b[M];
+ int e_1_0[M], e_m1_1[M], e_0_1[M], e_1_1[M];
+ int i;
+ int im;
+ int *pa, *pb, *piir, *pr;
+ int r[M], rg;
+ int xd;
+ uint32 seed1 = etc->seed1;
+ uint32 seed2 = etc->seed2;
+ uint32 sum;
+ int plane_idx;
+ int n_planes = etc->n_planes;
+ int levels = etc->levels;
+#ifdef OLD_QUANT
+ int dith_mul = levels << 8;
+#else
+ int dith_mul = (levels - 1) << 8;
+#endif
+ int imo_mul = (1 << (ETS_SHIFT + IMO_SHIFT)) / (levels - 1);
+ int aspect_x2 = etc->aspect_x * etc->aspect_x;
+ int aspect_y2 = etc->aspect_y * etc->aspect_y;
+ int *strengths = etc->strengths;
+ int elo = etc->elo;
+ int ehi = etc->ehi;
+ int coupling;
+ int *c_line = etc->c_line;
+ int rand_shift;
+ const signed char *tmline = etc->tmmat + (etc->y % etc->tmheight) * etc->tmwid;
+ int tmmask = etc->tmwid - 1;
+
+ xd = etc->width;
+
+ /* Setup initial conditions for walking across the scanline. Because we
+ * are dealing with multiple planes, we have arrays of each variable,
+ * indexed by p = plane number.
+ * a[p] = 2x+1 (where x is the horizontal distance to the nearest set pixel)
+ * b[p] = 2y+1 (where y is the vertical distance to the nearest set pixel)
+ * r[p] = distance^2 to the nearest set pixel in this plane.
+ * e_0_1[p] = error from pixel above
+ * e_1_0[p] = error from pixel to the left
+ * e_m1_1[p]= error from pixel above right
+ * e_1_1[p] = error from pixel above left
+ * Because the source line is run length compressed, we need to run
+ * length decode it. We do this using the following:
+ * count[p] = number of pixels left in this run
+ * src_idx[p] = which run length entry we are currently on.
+ */
+
+ /* A potted recap of the distance calculations in the paper for easy
+ * reference.
+ * distance to last dot = SQR( (aspect_y * x)^2 + (aspect_x * y)^2 )
+ * r = distance^2 = (aspect_y * x)^2 + (aspect_x * y)^2
+ * = aspect_y^2 * x^2 + aspect_x^2 * y^2
+ * r_below - r = (aspect_x^2 * (y+1)^2) - (aspect_x^2 * y^2)
+ * = aspect_x^2 * ( (y+1)^2 - y^2 )
+ * = aspect_x^2 * ( 2y + 1 )
+ * r_under - r = (aspect_y^2 * (x+1)^2) - (aspect_y^2 * x^2)
+ * = aspect_y^2 * ( (x+1)^2 - x^2 )
+ * = aspect_y^2 * ( 2x + 1 )
+ * So, we keep:
+ * a = aspect_y^2 * (2x+1)
+ * b = aspect_x^2 * (2y+1)
+ * And we can then update r by adding either a or b at each stage.
+ */
+ for (plane_idx = 0; plane_idx < n_planes; plane_idx++)
+ {
+ ETS_PlaneCtx *ctx = etc->plane_ctx[plane_idx];
+
+ a[plane_idx] = aspect_y2; /* aspect_y^2 * (2x + 1) where x = 0 */
+ b[plane_idx] = aspect_x2; /* aspect_x^2 * (2y + 1) where y = 0 */
+ r[plane_idx] = 0;
+ e_0_1[plane_idx] = 0;
+ e_1_0[plane_idx] = 0;
+ e_m1_1[plane_idx] = ctx->err_line[0];
+ }
+
+ coupling = 0;
+
+ for (i = 0; i < xd; i++)
+ {
+#ifdef FANCY_COUPLING
+ coupling += c_line[i];
+#else
+ coupling = 0;
+#endif
+ /* Lookup image data and compute R for all planes. */
+ for (plane_idx = 0; plane_idx < n_planes; plane_idx++)
+ {
+ ETS_PlaneCtx *ctx = etc->plane_ctx[plane_idx];
+ ETS_SrcPixel src_pixel = src[plane_idx][i];
+ int new_r;
+ int c1 = ctx->c1;
+ int rlimit = 1 << (30 - ETS_SHIFT + c1);
+ uchar *dst_ptr = dest[plane_idx];
+ int new_e_1_0;
+ int achieved_error;
+ int err;
+ int imo;
+ int expected_r;
+
+ pr = ctx->r_line;
+ pa = ctx->a_line;
+ pb = ctx->b_line;
+ piir = ctx->err_line;
+
+ im = ctx->lut[src_pixel]; /* image pixel (ink level) */
+ expected_r = ctx->dist_lut[src_pixel]; /* expected distance */
+ rand_shift = ctx->rs_lut[src_pixel]; /* random noise shift */
+
+ /* Forward pass distance computation; equation 2 from paper */
+ if (r[plane_idx] + a[plane_idx] < pr[i])
+ {
+ r[plane_idx] += a[plane_idx];
+ a[plane_idx] += 2*aspect_y2;
+ }
+ else
+ {
+ a[plane_idx] = pa[i];
+ b[plane_idx] = pb[i];
+ r[plane_idx] = pr[i];
+ }
+
+ /* Shuffle all the errors and read the next one. */
+ e_1_1[plane_idx] = e_0_1[plane_idx];
+ e_0_1[plane_idx] = e_m1_1[plane_idx];
+ e_m1_1[plane_idx] = i == xd - 1 ? 0 : piir[i + 1];
+ /* Reuse of variables here; new_e_1_0 is the total error passed
+ * into this pixel, with the traditional fs weights. */
+ new_e_1_0 = ((e_1_0[plane_idx] * 7 + e_m1_1[plane_idx] * 3 +
+ e_0_1[plane_idx] * 5 + e_1_1[plane_idx] * 1) >> 4);
+
+ /* White pixels stay white */
+ if (im == 0)
+ {
+ dst_ptr[i] = 0;
+ /* If we are forcing white pixels to stay white, we should
+ * not propagate errors through them. Or at the very least
+ * we should attenuate such errors. */
+ new_e_1_0 = 0;
+ }
+ else
+ {
+ /* The guts of ets (Equation 5) */
+ int ets_bias;
+
+ if (expected_r == 0)
+ {
+ ets_bias = 0;
+ }
+ else
+ {
+ /* Read the current distance, and clamp to avoid overflow
+ * in subsequent calculations. */
+ new_r = r[plane_idx];
+ if (new_r > rlimit)
+ new_r = rlimit;
+ /* Should we store back with the limit? */
+
+ /* Change the units on the distance to match our lut
+ * and subtract our actual distance (rg) from the expected
+ * distance (expected_r). */
+ rg = new_r << (ETS_SHIFT - c1);
+ ets_bias = rg - expected_r;
+
+ /* So ets_bias is the difference that we want to base our
+ * threshold modulation on (section 2.1 of the paper).
+ * Exactly how do we do that? We present various options
+ * here.
+ * 0 no modulation
+ * 1 what the code did when it came to me. No reference
+ * to this in the paper.
+ * 2 use it unchanged.
+ * 3 like 1, but same shift either side of 0.
+ * 4+ scale the modulation down.
+ */
+ switch (etc->ets_style)
+ {
+ case 0:
+ ets_bias = 0;
+ break;
+ case 1:
+ if (ets_bias > 0) ets_bias >>= 3;
+ break;
+ case 2:
+ break;
+ case 3:
+ ets_bias >>= 3;
+ break;
+ default:
+ ets_bias /= etc->ets_style-3;
+ }
+ }
+
+ /* Non white pixels get biased, and have the error
+ * applied. The error starts from the total error passed
+ * in. */
+ err = new_e_1_0;
+
+ /* Plus any ETS bias (calculated above) */
+ err += ets_bias;
+
+ /* Plus any random noise. Again various options here:
+ * 0 No random noise
+ * 1 The code as it came to me, using lookup table
+ * 2 commented out when it came to me; using pseudo
+ * random numbers generated from seed.
+ */
+ switch(etc->r_style)
+ {
+ case 0:
+ break;
+ case 2:
+ /* Add the two seeds together */
+ sum = seed1 + seed2;
+
+ /* If the add generated a carry, increment
+ * the result of the addition.
+ */
+ if (sum < seed1 || sum < seed2) sum++;
+
+ /* Seed2 becomes old seed1, seed1 becomes result */
+ seed2 = seed1;
+ seed1 = sum;
+
+ err -= (sum >> rand_shift) - (0x80000000 >> rand_shift);
+ break;
+ case 1:
+ err += tmline[(i+ctx->tm_offset) & tmmask] << (24 - rand_shift);
+ break;
+ }
+
+ /* Clamp the error; this is explained in the paper in
+ * section 6 just after equation 7. */
+ /* FIXME: Understand this better */
+ if (err < elo)
+ err = elo;
+ else if (err > ehi)
+ err = ehi;
+
+ /* Add the coupling to our combined 'error + bias' value */
+ /* FIXME: Are we sure this shouldn't be clamped? */
+ err += coupling;
+
+ /* Calculate imo = the quantised image value (Equation 7) */
+#ifdef OLD_QUANT
+ imo = ((err + im) * dith_mul) >> (ETS_SHIFT + 8);
+#else
+ imo = ((err + im) * dith_mul + (1 << (ETS_SHIFT + 7))) >> (ETS_SHIFT + 8);
+#endif
+ /* Clamp to allow for over/underflow due to large errors */
+ if (imo < 0) imo = 0;
+ else if (imo > levels - 1) imo = levels - 1;
+
+ /* Store final output pixel */
+ dst_ptr[i] = imo;
+
+ /* Calculate the error between the desired and the obtained
+ * pixel values. */
+ achieved_error = im - ((imo * imo_mul) >> IMO_SHIFT);
+
+ /* And the error passed in is updated with the error for
+ * this pixel. */
+ new_e_1_0 += achieved_error;
+
+ /* Do the magic coupling here; strengths is 0 when
+ * multiplane optimisation is turned off, hence coupling
+ * remains 0 always. Equation 6. */
+ coupling += (achieved_error * strengths[plane_idx]) >> 8;
+
+ /* If we output a set pixel, then reset our distances. */
+ if (imo != 0)
+ {
+ a[plane_idx] = aspect_y2;
+ b[plane_idx] = aspect_x2;
+ r[plane_idx] = 0;
+ }
+ }
+
+ /* Store the values back for the next pass (Equation 3) */
+ pa[i] = a[plane_idx];
+ pb[i] = b[plane_idx];
+ pr[i] = r[plane_idx];
+ piir[i] = new_e_1_0;
+ e_1_0[plane_idx] = new_e_1_0;
+ }
+#ifdef FANCY_COUPLING
+ coupling = coupling >> 1;
+ c_line[i] = coupling;
+#endif
+ }
+
+ /* Note: this isn't white optimized, but the payoff is probably not
+ that important. */
+#ifdef FANCY_COUPLING
+ coupling = 0;
+ for (i = xd - 1; i >= 0; i--)
+ {
+ coupling = (coupling + c_line[i]) >> 1;
+ c_line[i] = (coupling - (coupling >> 4));
+ }
+#endif
+
+ /* Update distances. Reverse scanline pass. */
+ for (plane_idx = 0; plane_idx < n_planes; plane_idx++)
+ {
+ ETS_PlaneCtx *ctx = etc->plane_ctx[plane_idx];
+ int av, bv, rv;
+ int c1 = ctx->c1;
+ int rlimit = 1 << (30 - ETS_SHIFT + c1);
+
+ pr = ctx->r_line;
+ pa = ctx->a_line;
+ pb = ctx->b_line;
+
+ av = aspect_y2;
+ bv = aspect_x2;
+ rv = 0;
+ for (i = xd - 1; i >= 0; i--)
+ {
+ /* Equation 4 from the paper */
+ if (rv + bv + av < pr[i] + pb[i])
+ {
+ rv += av;
+ av += (aspect_y2<<1);
+ }
+ else
+ {
+ rv = pr[i];
+ av = pa[i];
+ bv = pb[i];
+ }
+ if (rv > rlimit) rv = rlimit;
+ pa[i] = av;
+ pb[i] = bv + (aspect_x2 << 1);
+ pr[i] = rv + bv;
+ }
+ }
+
+ etc->seed1 = seed1;
+ etc->seed2 = seed2;
+ etc->y++;
+}
+
+/**
+ * ets_plane_free: Free an #EBPlaneCtx context.
+ * @ctx: The #EBPlaneCtx context to free.
+ *
+ * Frees @ctx.
+ **/
+static void
+ets_plane_free(ETS_PlaneCtx *ctx)
+{
+ free(ctx->err_line);
+ free(ctx->r_line);
+ free(ctx->a_line);
+ free(ctx->b_line);
+ free(ctx->lut);
+ free(ctx->dist_lut);
+ free(ctx->rs_lut);
+ free(ctx);
+}
+
+/**
+ * ets_new: Create new Even ToneFS screening context.
+ * @source_width: Width of source buffer.
+ * @dest_width: Width of destination buffer, in pixels.
+ * @lut: Lookup table for gray values.
+ *
+ * Creates a new context for Even ToneFS screening.
+ *
+ * If @dest_width is larger than @source_width, then input lines will
+ * be expanded using nearest-neighbor sampling.
+ *
+ * @lut should be an array of 256 values, one for each possible input
+ * gray value. @lut is a lookup table for gray values. Output is from
+ * 0 for white (no ink) to ....
+ *
+ *
+ * Return value: The new #EBPlaneCtx context.
+ **/
+static ETS_PlaneCtx *
+ets_plane_new(const ETS_Params *params, ETS_Ctx *etc, int plane_idx)
+{
+ int width = params->width;
+ int *lut = params->luts[plane_idx];
+ ETS_PlaneCtx *result;
+ int i;
+ int *new_lut;
+ int *dist_lut;
+ char *rs_lut;
+ double distscale = compute_distscale(params);
+ int c1;
+ int rlimit;
+ int log2_levels, log2_aspect;
+ int rs_base;
+
+ result = (ETS_PlaneCtx *)malloc(sizeof(ETS_PlaneCtx));
+
+ result->width = width;
+
+ log2_levels = ets_log2(params->levels);
+ log2_aspect = ets_log2(params->aspect_x) + ets_log2(params->aspect_y); /* FIXME */
+ c1 = 6 + log2_aspect + log2_levels;
+ if (params->c1_scale)
+ c1 -= params->c1_scale[plane_idx];
+ result->c1 = c1;
+ rlimit = 1 << (30 - ETS_SHIFT + c1);
+ result->tm_offset = TM_WIDTH/ets_log2up(params->n_planes);
+
+ /* Set up a lut to map input values from the source domain to the
+ * amount of ink. Callers can provide a lut of their own, which can be
+ * used for gamma correction etc. In the absence of this, a linear
+ * distribution is assumed. The user supplied lut should map from
+ * 'amount of light' to 'gamma adjusted amount of light', as the code
+ * subtracts the final value from (1<<ETS_SHIFT) (typically 65536) to
+ * get 'amount of ink'. */
+ new_lut = (int *)malloc((ETS_SRC_MAX + 1) * sizeof(int));
+ for (i = 0; i < ETS_SRC_MAX + 1; i++)
+ {
+ int nli;
+
+ if (lut == NULL)
+ {
+#if ETS_SRC_MAX == 255
+ nli = (i * 65793 + (i >> 7)) >> (24 - ETS_SHIFT);
+#else
+ nli = (i * ((double) (1 << ETS_SHIFT)) / ETS_SRC_MAX) + 0.5;
+#endif
+ }
+ else
+ nli = lut[i] >> (24 - ETS_SHIFT);
+ if (params->polarity == ETS_BLACK_IS_ZERO)
+ new_lut[i] = (1 << ETS_SHIFT) - nli;
+ else
+ new_lut[i] = nli;
+ }
+
+ /* Here we calculate 2 more lookup tables. These could be separated out
+ * into 2 different loops, but are done in 1 to avoid a small amount of
+ * recalculation.
+ * dist_lut[i] = expected distance between dots for a greyscale of level i
+ * rs_lut[i] = whacky random noise scale factor.
+ */
+ dist_lut = (int *)malloc((ETS_SRC_MAX + 1) * sizeof(int));
+ rs_lut = (char *)malloc((ETS_SRC_MAX + 1) * sizeof(int));
+
+ rs_base = 35 - ETS_SHIFT + log2_levels - params->rand_scale;
+
+ /* The paper says that the expected 'value' for a grayshade g is:
+ * d_avg = 0.95 / 0.95/(g^2)
+ * This seems wrong to me. Let's consider some common cases; for a given
+ * greyscale, lay out the 'ideal' dithering, then consider removing each
+ * set pixel in turn and measuring the distance between that pixel and
+ * the closest set pixel.
+ *
+ * g = 1/2 #.#.#.#. visibly, expected distance = SQR(2)
+ * .#.#.#.#
+ * #.#.#.#.
+ * .#.#.#.#
+ *
+ * g = 1/4 #.#.#.#. expected distance = 2
+ * ........
+ * #.#.#.#.
+ * ........
+ *
+ * g = 1/16 #...#... expected distance = 4
+ * ........
+ * ........
+ * ........
+ * #...#...
+ * ........
+ * ........
+ * ........
+ *
+ * This rough approach leads us to suspect that we should be finding
+ * values roughly proportional to 1/SQR(g). Given the algorithm works in
+ * terms of square distance, this means 1/g. This is at odds with the
+ * value given in the paper. Being charitable and assuming that the paper
+ * means 'squared distance' when it says 'value', we are still a square
+ * off.
+ *
+ * Nonetheless, the code as supplied uses 0.95/g for the squared distance
+ * (i.e. it appears to agree with our logic here).
+ */
+ for (i = 0; i <= ETS_SRC_MAX; i++)
+ {
+ double dist;
+ int nl = new_lut[i] * (params->levels - 1);
+ int rs;
+
+ /* This is (or is supposed to be) equation 5 from the paper. If nl
+ * is g, why aren't we dividing by nl*nl ? */
+ if (nl == 0)
+ {
+ /* The expected distance for an ink level of 0 is infinite. Just
+ * put 0! */
+ dist = 0;
+ }
+ else if (nl >= ((1<<ETS_SHIFT)/(params->levels-1)))
+ {
+ /* New from RJW: Our distance measurements are only meaningful
+ * within the bottom 'level band' of the output. Do not apply
+ * ETS to higher ink levels. */
+ dist = 0;
+ }
+ else
+ {
+ dist = (distscale * (1 << (2 * ETS_SHIFT - c1))) / nl;
+ if (dist > rlimit << (ETS_SHIFT - c1))
+ dist = rlimit << (ETS_SHIFT - c1);
+ }
+
+ if (params->rand_scale_luts == NULL)
+ {
+ rs = compute_randshift(nl, rs_base, params->levels);
+ rs_lut[i] = rs;
+ }
+ else
+ {
+ int val = params->rand_scale_luts[plane_idx][i];
+
+ rs_lut[i] = rs_base + 16 - ets_log2(val + (val >> 1));
+ }
+ dist_lut[i] = (int)dist;
+ }
+
+ result->lut = new_lut;
+ result->dist_lut = dist_lut;
+ result->rs_lut = rs_lut;
+
+ result->err_line = (int *)calloc(width, sizeof(int));
+ result->r_line = (int *)calloc(width, sizeof(int));
+ result->a_line = (int *)calloc(width, sizeof(int));
+ result->b_line = (int *)calloc(width, sizeof(int));
+ for (i = 0; i < width; i++)
+ {
+ result->a_line[i] = 1;
+ result->b_line[i] = 1;
+ /* Initialize error with a non zero random value to ensure dots don't
+ land on dots when we have same planes with same gray level and
+ the plane interaction option is turned off. Ideally the level
+ of this error should be based upon the values of the first line
+ to ensure that things get primed properly */
+ result->err_line[i] = -((rand () & 0x7fff) << 6) >> (24 - ETS_SHIFT);
+ }
+
+ return result;
+}
+
+ETS_Ctx *
+ets_new(const ETS_Params *params)
+{
+ ETS_Ctx *result = (ETS_Ctx *)malloc(sizeof(ETS_Ctx));
+ int n_planes = params->n_planes;
+ int i;
+ int using_vectors = 0;
+
+ if (params->dump_file)
+ {
+ int header[5];
+
+ header[0] = 0x70644245;
+ header[1] = 'M' * 0x1010000 + 'I' * 0x101;
+ header[2] = ETS_VERSION;
+ header[3] = ETS_SRC_MAX;
+ header[4] = sizeof(ETS_SrcPixel);
+ fwrite(header, sizeof(int), sizeof(header) / sizeof(header[0]),
+ params->dump_file);
+ if (params->dump_level >= ETS_DUMP_PARAMS)
+ {
+ fwrite(params, 1, sizeof(ETS_Params), params->dump_file);
+ }
+ if (params->dump_level >= ETS_DUMP_LUTS)
+ {
+ for (i = 0; i < params->n_planes; i++)
+ fwrite(params->luts[i], sizeof(int), ETS_SRC_MAX + 1,
+ params->dump_file);
+ }
+ }
+
+ result->width = params->width;
+ result->n_planes = n_planes;
+ result->levels = params->levels;
+
+ result->aspect_x = params->aspect_x;
+ result->aspect_y = params->aspect_y;
+
+ result->ehi = (int)(0.6 * (1 << ETS_SHIFT) / (params->levels - 1));
+ result->elo = -result->ehi;
+
+ result->strengths = (int *)malloc(sizeof(int) * n_planes);
+ memcpy(result->strengths, params->strengths,
+ sizeof(int) * n_planes);
+
+ result->ets_style = params->ets_style;
+ result->r_style = params->r_style;
+
+ result->c_line = (int *)calloc(params->width, sizeof(int));
+
+ result->seed1 = 0x5324879f;
+ result->seed2 = 0xb78d0945;
+
+ result->dump_file = params->dump_file;
+ result->dump_level = params->dump_level;
+
+ result->plane_ctx = (ETS_PlaneCtx **)malloc(sizeof(ETS_PlaneCtx *) * n_planes);
+ for (i = 0; i < n_planes; i++)
+ result->plane_ctx[i] = ets_plane_new(params, result, i);
+ result->y = 0;
+ result->tmmat = tmmat;
+ result->tmwid = TM_WIDTH;
+ result->tmheight = TM_HEIGHT;
+ return result;
+}
+
+/**
+ * even_better_free: Free an #EvenBetterCtx context.
+ * @ctx: The #EvenBetterCtx context to free.
+ *
+ * Frees @ctx.
+ **/
+void
+ets_free(ETS_Ctx *ctx)
+{
+ int i;
+ int n_planes = ctx->n_planes;
+
+ if (ctx->dump_file)
+ fclose(ctx->dump_file);
+
+ for (i = 0; i < n_planes; i++)
+ ets_plane_free(ctx->plane_ctx[i]);
+ free(ctx->plane_ctx);
+ free(ctx->strengths);
+ free(ctx->c_line);
+
+ free(ctx);
+}
diff --git a/gs/toolbin/halftone/ETS/ets.h b/gs/toolbin/halftone/ETS/ets.h
new file mode 100644
index 000000000..9c11d8bf8
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/ets.h
@@ -0,0 +1,93 @@
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Definitions for source pixel format.
+ * Reasonable settings are as follows:
+ * 8-bit: unsigned char ETS_SrcPixel; ETS_SRC_MAX = 255
+ * 12-bit 0..4095: unsigned short (or int) ETS_SrcPixel; ETS_SRC_MAX = 4095
+ * 12-bit 0..4096: unsigned short (or int) ETS_SrcPixel; ETS_SRC_MAX = 4096
+ * 16-bit 0..65535: unsigned short (or int) ETS_SrcPixel; ETS_SRC_MAX = 65535
+ * 16-bit 0..65536: unsigned int ETS_SrcPixel; ETS_SRC_MAX = 65536
+ */
+
+/* A quick and dirty switch for 8 or 16 bit data */
+#define CHAR_SOURCE
+
+#ifdef CHAR_SOURCE
+ typedef unsigned char ETS_SrcPixel;
+ #define ETS_SRC_MAX 255
+#else
+ typedef unsigned short ETS_SrcPixel;
+ #define ETS_SRC_MAX 65535
+#endif
+
+/* Photoshop (and possibly other image formats define white in a CMYK image with a
+ value of 255 (65535). This is opposite of the PAM files that Robin has created.
+ The ETS code expects white to be at 0. Adjustments to the values in gray level
+ will be baked into the LUT if needed */
+typedef enum {
+ ETS_BLACK_IS_ZERO = 0,
+ ETS_BLACK_IS_ONE
+} ETS_POLARITY;
+
+typedef unsigned char uchar;
+
+/* To use the file dump capability:
+
+ Open a file as with: fopen ("dumpfile", "wb");
+ Put the resulting FILE * pointer in params->dump_file.
+ Set params->dump_level to the desired level. ET_DUMP_ALL dumps all
+ inputs and outputs. Other values will lead to much smaller files,
+ but may not be as insightful.
+
+ If no dump file is desired, set params->dump_file to NULL.
+*/
+
+typedef enum {
+ ETS_DUMP_MINIMAL,
+ ETS_DUMP_PARAMS,
+ ETS_DUMP_LUTS,
+ ETS_DUMP_INPUT,
+ ETS_DUMP_ALL
+} ETS_DumpLevel;
+
+typedef struct {
+ int width;
+ int n_planes;
+ int levels; /* Number of levels on output, <= 256 */
+ int **luts;
+ double distscale; /* 0 to autoselect based on aspect */
+ int aspect_x;
+ int aspect_y;
+ int *strengths;
+ int rand_scale; /* 0 is default. Larger means more random. */
+ int *c1_scale; /* now an array, one per channel; 0 is default */
+ int ets_style;
+ int r_style;
+ FILE *dump_file;
+ ETS_DumpLevel dump_level;
+ int **rand_scale_luts;
+ ETS_POLARITY polarity;
+} ETS_Params;
+
+typedef struct _ETS_Ctx ETS_Ctx;
+
+ETS_Ctx *
+ets_new(const ETS_Params *params);
+
+void
+ets_line(ETS_Ctx *ctx, uchar **dest, const ETS_SrcPixel *const *src);
+
+void
+ets_free(ETS_Ctx *ctx);
+
+void *
+ets_malloc_aligned(int size, int align);
+
+void
+ets_free_aligned(void *p);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/gs/toolbin/halftone/ETS/ipview.html b/gs/toolbin/halftone/ETS/ipview.html
new file mode 100644
index 000000000..97be637bb
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/ipview.html
@@ -0,0 +1,386 @@
+<html>
+<head>
+<title>Image Plane viewer</title>
+<script>
+
+// Check that we have a modern browser
+if (window.File && window.FileReader && window.FileList && window.Blob) {
+} else {
+ alert("Get a better browser!");
+}
+
+var imageDataBlock = function(block)
+{
+ this.block = block;
+ this.pos = 0;
+ this.width = 100;
+ this.height = 100;
+ this.depth = 1;
+ this.maxval = 255;
+ this.planar = false;
+}
+
+function error(message)
+{
+ alert(message);
+}
+
+imageDataBlock.prototype.getLine = function ()
+{
+ var line="";
+ var c;
+
+ while ((c = this.block[this.pos++]).charCodeAt(0) >= 32)
+ line += c;
+ return line;
+}
+
+imageDataBlock.prototype.updateImage = function()
+{
+ var w = this.width;
+ var h = this.height;
+ var d = this.depth;
+ var x, y, z;
+ var R, G, B;
+ var p = this.pos;
+ var canvas = this.canvas.getContext("2d")
+ var id = canvas.getImageData(0, 0, w, h);
+ var q = 0;
+
+ if (!this.planar)
+ {
+ for (y = h; y > 0; y--)
+ {
+ for (x = w; x > 0; x--)
+ {
+ var C = 0;
+ var M = 0;
+ var Y = 0;
+ var K = 0;
+ for (z = 0; z < d; z++)
+ {
+ var a = this.block.charCodeAt(p++);
+ var pl = this.planes[z];
+ if (pl.enabled)
+ {
+ C += a * pl.c;
+ M += a * pl.m;
+ Y += a * pl.y;
+ K += a * pl.k;
+ }
+ }
+ R = 255 - C - K;
+ if (R < 0) R = 0;
+ G = 255 - M - K;
+ if (G < 0) G = 0;
+ B = 255 - Y - K;
+ if (B < 0) B = 0;
+ id.data[q++] = R;
+ id.data[q++] = G;
+ id.data[q++] = B;
+ id.data[q++] = 255;
+ }
+ }
+ }
+ else
+ {
+ var fwd = w*h;
+ var back = w*h*d-1
+ for (y = h; y > 0; y--)
+ {
+ for (x = w; x > 0; x--)
+ {
+ R = 0;
+ G = 0;
+ B = 0;
+ for (z = 0; z < d; z++)
+ {
+ var a = this.block.charCodeAt(p);
+ p += fwd;
+ var pl = this.planes[z];
+ if (pl.enabled)
+ {
+ R += a * pl.c;
+ G += a * pl.m;
+ B += a * pl.y;
+ }
+ }
+ p -= back;
+ if (R > 255) R = 255;
+ if (G > 255) G = 255;
+ if (B > 255) B = 255;
+ id.data[q++] = R;
+ id.data[q++] = G;
+ id.data[q++] = B;
+ id.data[q++] = 255;
+ }
+ }
+ }
+ canvas.putImageData(id, 0, 0);
+}
+
+imageDataBlock.prototype.setDepth = function(depth_)
+{
+ var i;
+ this.depth = depth_;
+ this.planes = new Array(this.depth);
+ for (i=0; i < this.depth; i++)
+ {
+ this.planes[i] = new Object();
+ this.planes[i].c = 0;
+ this.planes[i].m = 0;
+ this.planes[i].y = 0;
+ this.planes[i].k = 1;
+ this.planes[i].name = "Spot";
+ this.planes[i].enabled = true;
+ }
+ if (this.depth == 1)
+ {
+ this.planes[0].name = "K";
+ }
+ else if (this.planar)
+ {
+ if (this.depth >= 3)
+ {
+ this.planes[0].c = 1;
+ this.planes[0].k = 0;
+ this.planes[0].name = "R";
+ this.planes[1].m = 1;
+ this.planes[1].k = 0;
+ this.planes[1].name = "G";
+ this.planes[2].y = 1;
+ this.planes[2].k = 0;
+ this.planes[2].name = "B";
+ i = 3;
+ }
+ else
+ {
+ this.planes[0].c = 1;
+ this.planes[0].m = 1;
+ this.planes[0].y = 1;
+ this.planes[0].k = 0;
+ this.planes[0].name = "Gray";
+ i = 1;
+ }
+ for (; i < this.depth; i++)
+ {
+ this.planes[i].c = 1;
+ this.planes[i].m = 1;
+ this.planes[i].y = 1;
+ this.planes[i].k = 0;
+ this.planes[i].name = "Plane";
+ this.planes[i].enabled = false;
+ }
+ }
+ else if (this.depth >= 4)
+ {
+ this.planes[0].c = 1;
+ this.planes[0].k = 0;
+ this.planes[0].name = "C";
+ this.planes[1].m = 1;
+ this.planes[1].k = 0;
+ this.planes[1].name = "M";
+ this.planes[2].y = 1;
+ this.planes[2].k = 0;
+ this.planes[2].name = "Y";
+ this.planes[3].name = "K";
+ }
+}
+
+imageDataBlock.prototype.planeChange = function(plane,checked)
+{
+ this.planes[plane].enabled = checked;
+ this.updateImage();
+}
+
+function strip(line)
+{
+ while (line.substring(0,1) == " ")
+ line = line.substring(1);
+ return line;
+}
+
+imageDataBlock.prototype.readPAM = function ()
+{
+ while (1)
+ {
+ var line = this.getLine();
+ if (line.substring(0, 5) == "WIDTH")
+ this.width = parseInt(line.substring(6), 10);
+ else if (line.substring(0, 6) == "HEIGHT")
+ this.height = parseInt(line.substring(7), 10);
+ else if (line.substring(0, 5) == "DEPTH")
+ this.setDepth(parseInt(line.substring(6), 10));
+ else if (line.substring(0, 6) == "MAXVAL")
+ this.maxval = parseInt(line.substring(7), 10);
+ else if (line.substring(0, 8) == "TUPLTYPE")
+ {
+ if (line.substring(9,13) == "CMYK")
+ {}
+ else if (line.substring(9,13) == "DEVN")
+ {}
+ else
+ return error("Not a CMYK or DEVN file!");
+ }
+ else if (line.substring(0, 1) == "#")
+ {
+ line = strip(line.substring(1));
+ if (line.split(" ")[0] == "PLANE")
+ {
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ var p = parseInt(line, 10);
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ this.planes[p].name = line.split(" ")[0];
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ this.planes[p].c = parseFloat(line);
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ this.planes[p].m = parseFloat(line);
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ this.planes[p].y = parseFloat(line);
+ line = strip(line.substring((line+" ").indexOf(" ")));
+ this.planes[p].k = parseFloat(line);
+ }
+ }
+ else if (line.substring(0, 1) == "#")
+ {
+ }
+ else if (line.substring(0, 6) == "ENDHDR")
+ break;
+ else
+ return error("Unknown header field: "+line);
+ }
+}
+
+imageDataBlock.prototype.readPGM = function ()
+{
+ var i = 0;
+ var line = "";
+ while (i < 3)
+ {
+ if (line == "")
+ line = this.getLine();
+ else if (line.substring(0, 1) == "#")
+ line = "";
+ else if (line.substring(0, 1) == " ")
+ line = line.substring(1);
+ else if (line.substring(0, 1) == "\t")
+ line = line.substring(1);
+ else
+ {
+ if (i == 0)
+ this.width = parseInt(line, 10);
+ else if (i == 1)
+ this.height = parseInt(line, 10);
+ else if (i == 2)
+ this.maxval = parseInt(line, 10);
+ i++;
+ var idx = line.indexOf(" ");
+ if (idx >= 0)
+ line = line.substring(idx+1);
+ else
+ line = "";
+ }
+ }
+ this.setDepth(1);
+
+ var m = this.pos;
+ var n = "";
+ for (i = this.width * this.height; i > 0; i--)
+ {
+ n += String.fromCharCode(this.block.charCodeAt(m++)^255);
+ }
+ this.block = n;
+ this.pos = 0;
+}
+
+imageDataBlock.prototype.readRAW = function (name)
+{
+ this.planar = true;
+ name = name.substring(name.indexOf(name, "_")+1);
+ this.width = parseInt(name,10);
+ name = name.substring(name.indexOf(name, "x")+1);
+ this.height = parseInt(name,10);
+ name = name.substring(name.indexOf(name, "x")+1);
+ this.maxval = 255;
+ this.setDepth = this.setDepth(parseInt(name, 10));
+}
+
+function imageView(file, event)
+{
+ var viewsdiv = document.getElementById('views');
+ var viewdiv = document.createElement('div');
+ viewsdiv.appendChild(viewdiv);
+
+ var data = new imageDataBlock(event.target.result);
+ var line = "";
+ if (file.name.indexOf("raw") >= 0)
+ {
+ data.readRAW(file.name);
+ }
+ else
+ {
+ line = data.getLine();
+ if (line == "P7")
+ data.readPAM();
+ else if (line == "P5")
+ data.readPGM();
+ else
+ return error("Not a PAM/PGM file!");
+ }
+
+ var fixdiv = document.createElement('div');
+ fixdiv.setAttribute("style", "display:block; position:fixed; top:0px;right:0px;width:auto;height:auto;");
+ var text = file.name + " W="+data.width+" H="+data.height+" D="+data.depth;
+ fixdiv.appendChild(document.createTextNode(text));
+ fixdiv.appendChild(document.createElement('br'));
+ var form = document.createElement('form');
+ fixdiv.appendChild(form);
+ for (i=0; i < data.depth; i++)
+ {
+ var span = document.createElement('span');
+ var button = document.createElement('input');
+ var label = document.createElement('label');
+ button.setAttribute("type", "checkbox");
+ button.setAttribute("name", "plane"+i);
+ button.setAttribute("value", "yes");
+ button.setAttribute("onchange", "this.data.planeChange("+i+", this.checked)");
+ button.checked = 1;
+ button.data = data;
+ label.innerHTML=data.planes[i].name;
+ span.appendChild(button);
+ span.appendChild(label);
+ form.appendChild(span);
+ }
+ viewdiv.appendChild(fixdiv);
+
+ data.canvas = document.createElement('canvas');
+ data.canvas.setAttribute("width", data.width);
+ data.canvas.setAttribute("height", data.height);
+ viewdiv.appendChild(data.canvas);
+
+ data.updateImage();
+}
+
+function handleFileSelect(event)
+{
+ var files = event.target.files;
+ var f, i;
+
+ for (i=0; f=files[i]; i++)
+ {
+ var reader = new FileReader();
+ reader.onload = (function (theFile) { return function (e) { imageView(theFile, e); } })(f);
+ reader.readAsBinaryString(f);
+ }
+}
+
+</script>
+</head>
+<body>
+<input type="file" id="files" name="files[]">Select a .pam or .pgm</input>
+<div id=views>
+<script>
+ document.getElementById('files').addEventListener('change', handleFileSelect, false);
+</script>
+</body>
+</html>
diff --git a/gs/toolbin/halftone/ETS/test_ets.c b/gs/toolbin/halftone/ETS/test_ets.c
new file mode 100644
index 000000000..617f17948
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/test_ets.c
@@ -0,0 +1,855 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include "ets.h"
+
+#define noDUMP_FILE_NAME "dump.ebdp"
+
+#define LITTLE_ENDIAN /* Needed for PSD support */
+//#define TEST_PSD_DUMP
+
+/* PSD structure. Since this data can be compressed planar data we need an object
+ to maintain our context state. */
+struct psd_ctx_s {
+ int width;
+ int height;
+ int num_channels;
+ int depth;
+ int curr_row;
+ void *rle_row;
+ int *row_lengths;
+ int *band_row_length_index;
+ long *band_file_offset;
+ void *output_buffer;
+ void (*read_line)(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes, void *image_ctx);
+ void (*write_line)(uchar **obufs, int xs, FILE *fo, int planes, void *image_ctx);
+ void (*finalize)(void *image_ctx);
+ uchar *permute;
+};
+
+typedef struct psd_ctx_s psd_ctx_t;
+
+static void
+die(char *why)
+{
+ fprintf(stderr, "%s\n", why);
+ exit(1);
+}
+
+#define MAX_SIZE 65536
+
+#define M 16
+
+static const char * get_arg (int argc, char **argv, int *pi, const char *arg)
+{
+ if (arg[0] != 0) {
+ return arg;
+ } else {
+ (*pi)++;
+ if (*pi == argc) {
+ return NULL;
+ } else {
+ return argv[*pi];
+ }
+ }
+}
+
+static int usage (void)
+{
+ printf("Usage: ETS\n");
+ printf("ETS <options>\n");
+ printf(" -i <inputfile .pam or .pgm - omit for stdin\n");
+ printf(" -o <outputfile> same format as input - omit for stdout\n");
+ printf(" -g <gammafile> optional textual table of gamma values\n");
+ printf(" -e <style> ets style (0 off, 1 = normal, etc)\n");
+ printf(" -r <style> random noise style (0 off, 1 = rnd, 2 = tm\n");
+ printf(" -m <0 or 1> enable/disable multiplane optimisations\n");
+ printf(" -l <levels> number of levels in the output\n");
+ printf(" -a X:Y aspect ratio of input\n");
+ printf(" -n <noise level> noise level (0 to 8)\n");
+ printf("\n\nDefaults: -e1 -r1 -m1 -l2 -a1:1 -n0\n");
+ return 1;
+}
+
+static void get4(int *value, uchar *buf)
+{
+#ifdef LITTLE_ENDIAN
+ *value = buf[3] + (buf[2] << 8) + (buf[1] << 16) + (buf[0] << 24);
+#else
+ *value = buf[0] + (buf[1] << 8) + (buf[2] << 16) + (buf[3] << 24);
+#endif
+}
+
+static void get2(int *value, uchar *buf)
+{
+#ifdef LITTLE_ENDIAN
+ *value = buf[1] + (buf[0] << 8);
+#else
+ *value = buf[0] + (buf[1] << 8);
+#endif
+}
+
+/* PSD uses PackBits RLE */
+static void rle_decode(uchar *in_buff, int in_length,
+ uchar *out_buff, int out_length)
+{
+ signed char hvalue, *input_buf;
+ char value;
+ int in_pos = 0, out_pos = 0;
+
+ input_buf = (signed char*) in_buff;
+ while (out_pos < out_length)
+ {
+ hvalue = input_buf[in_pos];
+ if (hvalue >= 0)
+ {
+ /* 1+hvalue literal bytes follow */
+ memcpy(&(out_buff[out_pos]), &(in_buff[in_pos + 1]), (1 + hvalue));
+ in_pos += (1 + (1 + hvalue));
+ out_pos += (1 + hvalue);
+ }
+ else if (hvalue > -128)
+ {
+ /* Repeat next byte 1-n times */
+ value = in_buff[in_pos+1];
+ memset(&(out_buff[out_pos]), value, (1 - hvalue));
+ in_pos += 2;
+ out_pos += (1 - hvalue);
+ }
+ else
+ in_pos += 1;
+ }
+}
+
+/* Photoshop RLE 8 bit case */
+static void read_psd_line_rle8(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes,
+ void *image_ctx)
+{
+ int kk;
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+ long curr_file_offset;
+ int curr_row_length_index;
+ int curr_length;
+
+ /* Loop across each band */
+ for (kk = 0; kk < planes; kk++)
+ {
+ /* Get a pointer and a length for the current one */
+ curr_file_offset = psd_ctx->band_file_offset[kk];
+ curr_row_length_index = psd_ctx->band_row_length_index[kk];
+ curr_length = psd_ctx->row_lengths[curr_row_length_index];
+ /* Get to where we are located in the file, read and decode */
+ fseek(fi, curr_file_offset, SEEK_SET);
+ fread(psd_ctx->rle_row, 1, curr_length, fi);
+ rle_decode((uchar*) psd_ctx->rle_row, curr_length, ibufs[psd_ctx->permute[kk]],
+ psd_ctx->width);
+ /* Update where we are in each band */
+ psd_ctx->band_file_offset[kk] += curr_length;
+ psd_ctx->band_row_length_index[kk] += 1;
+ }
+}
+
+/* Photoshop unencoded 8 bit case */
+static void read_psd_line8(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes,
+ void *image_ctx)
+{
+ int kk;
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+ long curr_file_offset;
+ int curr_length = psd_ctx->width;
+
+ /* Loop across each band */
+ for (kk = 0; kk < planes; kk++)
+ {
+ /* Get a pointer and a length for the current one */
+ curr_file_offset = psd_ctx->band_file_offset[kk];
+ /* Get to where we are located in the file, read and decode */
+ fseek(fi, curr_file_offset, SEEK_SET);
+ fread(ibufs[psd_ctx->permute[kk]], 1, curr_length, fi);
+ /* Update where we are in each band */
+ psd_ctx->band_file_offset[kk] += curr_length;
+ }
+}
+
+/* Photoshop 8 bit unencoded output. Due to its planar form, this is stored in a
+ temp buffer until we reach the final line, at which point we write out the
+ entire thing. */
+static void write_psd_line8(uchar **obufs, int xs, FILE *fo, int planes,
+ void *image_ctx)
+{
+ int kk;
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+ const void *input_buf;
+ uchar *output_buff = (uchar*) psd_ctx->output_buffer;
+ long plane_size = (psd_ctx->width) * (psd_ctx->height);
+ long buffer_size = plane_size * planes;
+
+ output_buff += ((psd_ctx->curr_row) * (psd_ctx->width));
+ for (kk = 0; kk < planes; kk++)
+ {
+ input_buf = (const void*) obufs[psd_ctx->permute[kk]];
+ memcpy(output_buff, input_buf, psd_ctx->width);
+ output_buff += plane_size;
+ }
+ psd_ctx->curr_row += 1;
+ /* If at end, then dump the buffer */
+ if (psd_ctx->curr_row == psd_ctx->height)
+ fwrite(psd_ctx->output_buffer, 1, buffer_size, fo);
+}
+
+/* Photoshop unencoded 16 bit case */
+static void read_psd_line16(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes,
+ void *image_ctx)
+{
+ int kk;
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+ long curr_file_offset;
+ int curr_length = psd_ctx->width * 2;
+ int i;
+ unsigned short temp_value1, temp_value2;
+
+ /* Loop across each band */
+ for (kk = 0; kk < planes; kk++)
+ {
+ /* Get a pointer and a length for the current one */
+ curr_file_offset = psd_ctx->band_file_offset[kk];
+ /* Get to where we are located in the file, read and decode */
+ fseek(fi, curr_file_offset, SEEK_SET);
+ fread(ibufs[psd_ctx->permute[kk]], 1, curr_length, fi);
+#ifdef LITTLE_ENDIAN
+ for (i = 0; i < psd_ctx->width; i++)
+ {
+ temp_value1 = ibufs[psd_ctx->permute[kk]][i];
+ temp_value2 = ((temp_value1 & 0xff) << 8) + ((temp_value1 & 0xff00) >> 8);
+ ibufs[psd_ctx->permute[kk]][i] = temp_value2;
+ }
+#endif
+ /* Update where we are in each band */
+ psd_ctx->band_file_offset[kk] += curr_length;
+ }
+}
+
+/* Photoshop 16 bit unencoded output. Due to its planar form, this is stored in a
+ temp buffer until we reach the final line, at which point we write out the entire
+ thing. This is not used really, but here for completeness and some testing.
+ Needs fix for little endian */
+static void write_psd_line16(uchar **obufs, int xs, FILE *fo, int planes,
+ void *image_ctx)
+{
+ int kk;
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+ const void *input_buf;
+ uchar *output_buff = (uchar*) psd_ctx->output_buffer;
+ long plane_size = (psd_ctx->width) * (psd_ctx->height) * 2;
+ long buffer_size = plane_size * planes;
+
+ output_buff += ((psd_ctx->curr_row) * (psd_ctx->width)) * 2;
+ for (kk = 0; kk < planes; kk++)
+ {
+ input_buf = (const void*) obufs[psd_ctx->permute[kk]];
+ memcpy(output_buff, input_buf, psd_ctx->width * 2);
+ output_buff += plane_size;
+ }
+ psd_ctx->curr_row += 1;
+ /* If at end, then dump the buffer */
+ if (psd_ctx->curr_row == psd_ctx->height)
+ fwrite(psd_ctx->output_buffer, 1, buffer_size, fo);
+}
+
+static void finalize_psd(void *image_ctx)
+{
+ psd_ctx_t *psd_ctx = (psd_ctx_t*) image_ctx;
+
+ if (psd_ctx->output_buffer != NULL)
+ free(psd_ctx->output_buffer);
+ if (psd_ctx->band_row_length_index != NULL)
+ free(psd_ctx->band_row_length_index);
+ if (psd_ctx->band_file_offset != NULL)
+ free(psd_ctx->band_file_offset);
+ if (psd_ctx->rle_row != NULL)
+ free(psd_ctx->rle_row);
+ if (psd_ctx->permute != NULL)
+ free(psd_ctx->permute);
+}
+
+static void read_psd(FILE *fi, psd_ctx_t *psd_ctx, FILE *fo)
+{
+ uchar buf[256];
+ int depth;
+ uchar num_channel;
+ int height, width, color_mode;
+ int size;
+ int bytes;
+ uchar *temp_buff;
+ int kk, jj;
+ long data_size;
+ int codec, maxlength = 0;
+ long count = 0;
+ long curr_count = 0;
+ int index = 0;
+#ifdef TEST_PSD_DUMP
+ uchar *in_buff, *out_buff;
+#endif
+
+ psd_ctx->curr_row = 0;
+
+ /* rewind and get the header information */
+ rewind(fi);
+
+ fread(buf, 1, 26, fi);
+ count += 26;
+
+ num_channel = buf[13];
+ get4(&height, &(buf[14]));
+ get4(&width, &(buf[18]));
+
+ depth = buf[23];
+ color_mode = buf[25];
+
+ if (!(depth == 8 || depth == 16))
+ die("Only 8 or 16 bit PSD files supported");
+
+ if (depth == 16 && (sizeof(ETS_SrcPixel) != 2 || ETS_SRC_MAX != 65535))
+ die("ETS_SrcPixel type and ETS_SRC_MAX in ets.h not set for 16 bit support!");
+
+ if (depth == 8 && (sizeof(ETS_SrcPixel) != 1 || ETS_SRC_MAX != 255))
+ die("ETS_SrcPixel type and ETS_SRC_MAX in ets.h not set for 8 bit support!");
+
+ /* Dont handle duotone or indexed data at this time */
+ if (color_mode == 2 || color_mode == 8)
+ die("Indexed and Duotone PSD files not supported");
+
+ psd_ctx->depth = depth;
+ psd_ctx->height = height;
+ psd_ctx->width = width;
+ psd_ctx->num_channels = num_channel;
+
+ if (depth == 8)
+ bytes = 1;
+ else
+ bytes = 2;
+
+ /* Change the output to 8 bit */
+ buf[23] = 8;
+
+ /* Write out the header information */
+ fwrite(buf, 1, 26, fo);
+
+ /* Index or duotone information */
+ fread(buf, 1, 4, fi);
+ fwrite(buf, 1, 4, fo);
+ count += 4;
+
+ /* Record information. Pass along... */
+ fread(buf, 1, 4, fi);
+ get4(&size, buf);
+ fwrite(buf, 1, 4, fo);
+ temp_buff = (uchar*) malloc(size);
+ fread(temp_buff, 1, size, fi);
+ fwrite(temp_buff, 1, size, fo);
+ free(temp_buff);
+ count += (size + 4);
+
+ /* Layer information. Pass along... */
+ fread(buf, 1, 4, fi);
+ get4(&size, buf);
+ fwrite(buf, 1, 4, fo);
+ temp_buff = (uchar*) malloc(size);
+ fread(temp_buff, 1, size, fi);
+ fwrite(temp_buff, 1, size, fo);
+ free(temp_buff);
+ count += (size + 4);
+
+ /* Image information. The stuff we want. Only support raw or RLE types for
+ input. Output is uncompressed */
+ fread(buf, 1, 2, fi);
+ codec = buf[1];
+ if (!(codec == 0 || codec == 1))
+ die("ZIP data in PSD files not supported");
+
+ buf[1] = 0;
+ fwrite(buf, 1, 2, fo);
+ count += 2;
+
+ if (codec == 1 && depth == 16)
+ die("PSD RLE 16 bit files not supported");
+
+ /* Allocate the output buffer */
+ psd_ctx->output_buffer = malloc(num_channel * height * width * bytes);
+
+ if (codec == 1)
+ {
+ /* RLE. Need to decompress the data. Each scan line is individually
+ compressed. First read in the size for each compressed line */
+ data_size = num_channel * height;
+ psd_ctx->row_lengths = (int*) malloc(data_size * sizeof(int));
+ psd_ctx->band_file_offset = (long*) malloc(num_channel * sizeof(long));
+ psd_ctx->band_row_length_index = (int*) malloc(num_channel * sizeof(int));
+ count += (2 * data_size); /* This gets us to the start of the image data */
+ /* Here we compute where in the file we need to go, to get the start of
+ the scan line in each band, we compute the max length of all the
+ encoded bands and get the length of each encoded band */
+ for (jj = 0; jj < num_channel; jj++)
+ {
+ (psd_ctx->band_file_offset)[jj] = count + curr_count;
+ for (kk = 0; kk < height; kk++)
+ {
+ fread(buf, 1, 2, fi);
+ get2(&((psd_ctx->row_lengths)[index]), buf);
+ if (maxlength < (psd_ctx->row_lengths)[index])
+ maxlength = (psd_ctx->row_lengths)[index];
+ curr_count = curr_count + (psd_ctx->row_lengths)[index];
+ index++;
+ }
+ }
+ psd_ctx->rle_row = (void*) malloc(maxlength);
+ psd_ctx->read_line = read_psd_line_rle8;
+ psd_ctx->write_line = write_psd_line8;
+ for (kk = 0; kk < num_channel; kk++)
+ {
+ (psd_ctx->band_row_length_index)[kk] = kk * height;
+ }
+#ifdef TEST_PSD_DUMP
+ /* Now do the decode for testing */
+ in_buff = (uchar*) malloc(maxlength);
+ out_buff = (uchar*) malloc(width);
+ for (kk = 0; kk < data_size; kk++)
+ {
+ fread(in_buff, 1, (psd_ctx->row_lengths)[kk], fi);
+ rle_decode(in_buff, (psd_ctx->row_lengths)[kk], out_buff, width);
+ fwrite(out_buff, 1, width, fo);
+ }
+ fclose(fo);
+ free(in_buff);
+ free(out_buff);
+ die("Testing case");
+#endif
+ }
+ else
+ {
+ /* Uncompressed data. Read directly */
+ psd_ctx->row_lengths = NULL;
+ psd_ctx->rle_row = NULL;
+ psd_ctx->band_row_length_index = NULL;
+ psd_ctx->band_file_offset = (long*) malloc(num_channel * sizeof(long));
+ for (kk = 0; kk < num_channel; kk++)
+ {
+ (psd_ctx->band_file_offset)[kk] = count + height * width * kk * bytes;
+ }
+ if (depth == 8)
+ {
+ psd_ctx->read_line = read_psd_line8;
+ psd_ctx->write_line = write_psd_line8;
+ }
+ else
+ {
+ psd_ctx->read_line = read_psd_line16;
+ psd_ctx->write_line = write_psd_line8;
+ }
+ }
+ psd_ctx->finalize = finalize_psd;
+ psd_ctx->permute = (uchar*) malloc(num_channel);
+ /* A default initialization */
+ for (kk = 0; kk < num_channel; kk++)
+ {
+ psd_ctx->permute[kk] = kk;
+ }
+}
+
+static void read_pgm(FILE *fi, int *xs, int *ys, FILE *fo)
+{
+ char buf[256];
+ int depth;
+
+ do
+ fgets(buf, sizeof(buf), fi);
+ while (buf[0] == '#');
+ sscanf (buf, "%d", xs);
+ do
+ fgets (buf, sizeof(buf), fi);
+ while (buf[0] == '#');
+ sscanf (buf, "%d", ys);
+ if (*xs <= 0 || *ys <= 0 || *xs > MAX_SIZE || *ys > MAX_SIZE)
+ die("Input image size out of range");
+
+ do
+ fgets(buf, sizeof(buf), fi);
+ while (buf[0] == '#');
+ sscanf(buf, "%d", &depth);
+ if (depth != 255)
+ die("Only works with depth=255 images");
+
+ fprintf(fo, "P5\n%d %d\n255\n", *xs, *ys);
+}
+
+static int read_pam(FILE *fi, int *xs, int *ys, FILE *fo)
+{
+ char buf[256];
+ int i, depth;
+ char c;
+
+ fprintf(fo, "P7\n");
+
+ do
+ {
+ fgets(buf, sizeof(buf), fi);
+ if (buf[0] == '#')
+ {
+ fprintf(fo, "%s", buf);
+ continue;
+ }
+ if (buf[0] == '\n' || buf[0] == '\r')
+ continue;
+ if (sscanf(buf, "WIDTH %d", xs))
+ {
+ fprintf(fo, "WIDTH %d\n", *xs);
+ }
+ else if (sscanf(buf, "HEIGHT %d", ys))
+ {
+ fprintf(fo, "HEIGHT %d\n", *ys);
+ }
+ else if (sscanf(buf, "DEPTH %d", &depth))
+ {
+ if (depth < 4)
+ die("Only CMYK/DEVN pams supported");
+ fprintf(fo, "DEPTH %d\n", depth);
+ }
+ else if (sscanf(buf, "MAXVAL %d", &i))
+ {
+ if (i != 255)
+ die("Only pams with MAXVAL=255 supported");
+ fprintf(fo, "MAXVAL 255\n");
+ }
+ else if (sscanf(buf, "TUPLTYPE DEV%c", &c) && c == 'N')
+ {
+ fprintf(fo, "TUPLTYPE DEVN\n");
+ }
+ else if (sscanf(buf, "TUPLTYPE CMY%c", &c) && c == 'K')
+ {
+ fprintf(fo, "TUPLTYPE CMYK\n");
+ }
+ else if (sscanf(buf, "TUPLTYP%c") && c == 'E')
+ {
+ die("Only CMYK/DEVN pams supported");
+ }
+ else if (sscanf(buf, "ENDHD%c", &c) && c == 'R')
+ {
+ fprintf(fo, "ENDHDR\n");
+ break;
+ }
+ else
+ {
+ printf(stderr, "Unknown header field: %s\n", buf);
+ die("Unknown header field\n");
+ }
+ }
+ while (1);
+
+ return depth;
+}
+
+static void read_pgm_line(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes,
+ void *image_ctx)
+{
+ int nbytes;
+ nbytes = fread(ibufs[0], 1, xs, fi);
+ if (nbytes != xs)
+ die("Error reading image (file truncated?)");
+}
+
+static void read_pam_line(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes,
+ void *image_ctx)
+{
+ int i, j, c = 0;
+
+ for (i = 0; i < xs && c != EOF; i++)
+ {
+ ibufs[1][i] = 255-fgetc(fi);
+ ibufs[2][i] = 255-fgetc(fi);
+ ibufs[3][i] = 255-fgetc(fi);
+ ibufs[0][i] = 255-(c = fgetc(fi));
+ for (j=4; j < planes; j++)
+ ibufs[j][i] = 255-(c = fgetc(fi));
+ }
+ if (c == EOF)
+ die("Error reading image (file truncated?)");
+}
+
+static void write_pgm_line(uchar **obufs, int xs, FILE *fo, int planes,
+ void *image_ctx)
+{
+ fwrite(obufs[0], 1, xs, fo);
+}
+
+static void write_pam_line(uchar **obufs, int xs, FILE *fo, int planes,
+ void *image_ctx)
+{
+ int i, j;
+
+ for (i = 0; i < xs; i++)
+ {
+ fputc(255-obufs[1][i], fo);
+ fputc(255-obufs[2][i], fo);
+ fputc(255-obufs[3][i], fo);
+ fputc(255-obufs[0][i], fo);
+ for (j = 4; j < planes; j++)
+ {
+ fputc(255-obufs[j][i], fo);
+ }
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ FILE *fi = stdin;
+ FILE *fo = stdout;
+ char buf[256];
+ int xs, ys;
+ int xsb;
+ ETS_POLARITY polarity;
+ ETS_Params params;
+ ETS_Ctx *ctx;
+ int lut[ETS_SRC_MAX+1], i;
+ int *luts[M];
+ int rs_lut[ETS_SRC_MAX+1];
+ int *rs_luts[M];
+ int strengths[M][M] = { { 0 },
+ { 0 },
+ { 0 },
+ { 128, 51, 51, 13 }, // KCMY
+ { 0 },
+ { 128, 51, 51, 13, 13, 13 }, // KCMYcm
+ { 128, 51, 51, 13, 13, 13, 13 }, // KCMYcmk
+ { 128, 51, 51, 13, 13, 13, 13, 13}, // KCMYcmkk
+ };
+ /* Used now in PSD case so that we can reorder the planes according to the above weights */
+ uchar permutes[M][M] = { { 0 },
+ { 0 },
+ { 0 },
+ { 3, 0, 1, 2 }, // KCMY
+ { 0 },
+ { 3, 0, 1, 2, 4, 5 }, // KCMYcm
+ { 3, 0, 1, 2, 4, 5, 6 }, // KCMYcmk
+ {3, 0, 1, 2, 4, 5, 6, 7}, // KCMYcmkk
+ };
+ int c1_scale[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+ ETS_SrcPixel *ibufs[M] = { 0 };
+ uchar *obufs[M] = { 0 };
+ int planes;
+ void (*read_line)(ETS_SrcPixel **ibufs, int xs, FILE *fi, int planes, void *image_ctx);
+ void (*write_line)(uchar **obufs, int xs, FILE *fo, int planes, void *image_ctx);
+ void (*finalize)(void *image_ctx);
+ char *gamma_tab = NULL;
+ int multiplane = 1;
+ int ets_style = 1;
+ int r_style = 1;
+ int levels = 2;
+ int aspect_x = 1;
+ int aspect_y = 1;
+ int noise = 0;
+ psd_ctx_t psd_ctx;
+ void *image_ctx = NULL;
+ uchar byte_count = 1;
+
+ int y;
+
+ for (i = 1; i < argc; i++)
+ {
+ const char *arg = argv[i];
+ const char *arg_value;
+
+ if (arg[0] == '-')
+ {
+ if ((arg_value = get_arg(argc, argv, &i, arg + 2)) == NULL)
+ goto usage_exit;
+
+ switch (arg[1])
+ {
+ case 'i':
+ fi = fopen(arg_value,"rb");
+ if (fi == NULL)
+ die ("Input not found");
+ break;
+ case 'o':
+ fo = fopen(arg_value,"wb");
+ if (fo == NULL)
+ die ("Output failed to open");
+ break;
+ case 'g':
+ gamma_tab = arg_value;
+ break;
+ case 'm':
+ multiplane = atoi(arg_value);
+ break;
+ case 'l':
+ levels = atoi(arg_value);
+ break;
+ case 'e':
+ ets_style = atoi(arg_value);
+ break;
+ case 'r':
+ r_style = atoi(arg_value);
+ break;
+ case 'n':
+ noise = atoi(arg_value);
+ break;
+ case 'a':
+ sscanf(arg_value, "%d:%d", &aspect_x, &aspect_y);
+ break;
+ default:
+ goto usage_exit;
+ }
+ }
+ }
+
+ fgets(buf, sizeof(buf), fi);
+ xs = ys = 0;
+ if (buf[0] == 'P' && buf[1] == '5')
+ {
+ read_pgm(fi, &xs, &ys, fo);
+ read_line = read_pgm_line;
+ write_line = write_pgm_line;
+ planes = 1;
+ finalize = NULL;
+ polarity = ETS_BLACK_IS_ZERO;
+ }
+ else if (buf[0] == 'P' && buf[1] == '7')
+ {
+ planes = read_pam(fi, &xs, &ys, fo);
+ read_line = read_pam_line;
+ write_line = write_pam_line;
+ finalize = NULL;
+ polarity = ETS_BLACK_IS_ZERO;
+ }
+ else if (buf[0] == '8' && buf[1] == 'B' && buf[2] == 'P' && buf[3] == 'S')
+ {
+ read_psd(fi, &psd_ctx, fo);
+ read_line = psd_ctx.read_line;
+ write_line = psd_ctx.write_line;
+ finalize = psd_ctx.finalize;
+ planes = psd_ctx.num_channels;
+ xs = psd_ctx.width;
+ ys = psd_ctx.height;
+ image_ctx = (void*) &psd_ctx;
+ if (psd_ctx.depth == 16)
+ byte_count = 2;
+ polarity = ETS_BLACK_IS_ONE;
+ /* Set the read and write permutation order according to permutes array */
+ if (permutes[planes-1] != 0)
+ {
+ int sum = 0; /* an error check */
+ for (i = 0; i < planes; i++)
+ {
+ psd_ctx.permute[i] = permutes[planes-1][i];
+ sum += psd_ctx.permute[i];
+ }
+ if (sum != ((float) planes/2.0) * (float) (planes - 1.0))
+ die ("Permutation vector values are not valid");
+ }
+ }
+ else
+ die("Need pgmraw, pamraw or psd image on input");
+
+ xsb = xs;
+ for (i = 0; i < planes; i++)
+ {
+ ibufs[i] = (ETS_SrcPixel*) malloc(xs * byte_count);
+ obufs[i] = (uchar*) ets_malloc_aligned(xsb + 16, 16);
+ }
+
+ /* This sets up a simple gamma lookup table. */
+ if (gamma_tab)
+ {
+ FILE *lutf = fopen(gamma_tab, "r");
+ for (i = 0; i < (ETS_SRC_MAX+1); i++)
+ fscanf(lutf, "%d", &lut[i]);
+ fclose(lutf);
+ }
+ else
+ {
+ double scale = ETS_SRC_MAX;
+ for (i = 0; i < (ETS_SRC_MAX+1); i++)
+#if 1
+ lut[i] = (int)((1 << 24) * (pow (i / scale, 1.0)));
+#else
+ lut[i] = (1 << 24) * (0.88 + 0.02 * i / 255.0);
+#endif
+ }
+
+ for (i = 0; i < (ETS_SRC_MAX+1); i++)
+ rs_lut[i] = 2 << 16;
+
+#ifdef DUMP_FILE_NAME
+ params.dump_file = fopen(DUMP_FILE_NAME, "wb");
+#else
+ params.dump_file = NULL;
+#endif
+ params.dump_level = ETS_DUMP_ALL;
+
+ params.width = xs;
+ params.n_planes = planes;
+ params.levels = levels;
+ for (i = 0; i < planes; i++)
+ luts[i] = lut;
+ params.luts = luts;
+ params.strengths = (multiplane ? strengths[planes-1] : strengths[0]);
+ params.aspect_x = aspect_x;
+ params.aspect_y = aspect_y;
+ params.distscale = 0;
+ params.rand_scale = noise;
+ params.c1_scale = c1_scale;
+ params.ets_style = ets_style;
+ params.r_style = r_style;
+ params.polarity = polarity;
+ for (i = 0; i < planes; i++)
+ rs_luts[i] = rs_lut;
+ params.rand_scale_luts = rs_luts;
+ params.rand_scale_luts = NULL;
+ ctx = ets_new(&params);
+ for (y = 0; y < ys; y++)
+ {
+ int x;
+
+ read_line(ibufs, xs, fi, planes, image_ctx);
+ ets_line(ctx, obufs, (const ETS_SrcPixel *const *)&ibufs);
+
+ for (i = 0; i < planes; i++)
+ {
+ uchar *obuf = obufs[i];
+ if (polarity == ETS_BLACK_IS_ONE)
+ {
+ for (x = 0; x < xs; x++)
+ {
+ obuf[x] = obuf[x] * 255 / (params.levels - 1);
+ }
+ }
+ else
+ {
+ for (x = 0; x < xs; x++)
+ {
+ obuf[x] = 255 - obuf[x] * 255 / (params.levels - 1);
+ }
+ }
+ }
+ write_line(obufs, xs, fo, planes, image_ctx);
+ }
+ if (finalize != NULL)
+ finalize(image_ctx);
+
+ ets_free(ctx);
+ for (i=0; i < planes; i++)
+ {
+ ets_free_aligned(obufs[i]);
+ free(ibufs[i]);
+ }
+ if (fi != stdin)
+ fclose(fi);
+ if (fo != stdout)
+ fclose(fo);
+
+ return 0;
+ usage_exit:
+ return usage();
+}
diff --git a/gs/toolbin/halftone/ETS/tm.h b/gs/toolbin/halftone/ETS/tm.h
new file mode 100644
index 000000000..e96074f1d
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/tm.h
@@ -0,0 +1,4099 @@
+#define TM_WIDTH 256
+#define TM_HEIGHT 256
+const signed char tmmat[] = {
+ 51, -28, 14, 31, 43, -58, -27, 45, -45, 38, 1, 2, -30, -1, 62, 42,
+ 10, 35, -60, 36, -80, -8, -55, 84, -59, 15, -43, -42, 84, -47, 0, 3,
+ 9, -50, 44, -2, -22, 48, -68, 42, -20, 37, -33, 55, -41, -24, 10, 30,
+ -100, 70, 0, -35, -35, 21, 36, -33, -22, -33, 46, -43, -55, 75, 33, 54,
+ -40, 26, -15, 36, -31, 20, 43, -22, -3, 41, 14, 13, -53, 14, 16, -16,
+ 56, -34, 6, 41, 44, -7, -16, 46, -27, 39, 68, 21, 12, 43, -29, 71,
+ -44, 17, 10, 63, -31, -47, 49, 49, -68, 68, -4, -28, 22, -50, 45, -24,
+ 12, -20, -46, -18, 21, 8, -59, 62, -33, -17, -23, 7, 50, 54, -11, -23,
+ 60, -8, -23, -35, 35, 1, -45, 66, -61, 95, -31, 74, -68, 84, -104, 38,
+ -36, -36, 21, -6, -10, 61, -1, 18, -61, -13, 33, -44, -28, -13, -8, 33,
+ 10, 56, -60, -51, 87, -43, 88, -75, 110, -84, 88, -58, -59, 88, 15, -33,
+ -47, -21, 63, 47, -13, 3, 9, -21, 45, -46, 3, 50, -31, 63, -17, 48,
+ 27, 51, -67, 48, 26, 37, 38, 8, 49, -3, 16, 14, -18, 0, -41, 30,
+ 41, -47, 65, -44, 50, -33, 43, -7, 10, -24, -62, 43, -22, 55, -11, 66,
+ -34, 19, 44, -66, 24, 28, 71, 4, -41, 41, 20, -51, -20, 0, 47, -42,
+ 24, -2, 17, -38, 37, -54, 24, -56, -4, 18, -12, -8, -24, -56, 36, -26,
+ 3, -51, 38, -83, 28, -3, 20, -49, 31, -64, -44, 40, 14, -48, -50, -39,
+ -12, -17, 47, -43, 68, -9, 9, -82, 88, -89, 85, -24, -41, -11, 45, 34,
+ 5, 55, -68, 36, -43, 13, 53, 12, 41, -49, 32, -3, -30, 50, 27, 34,
+ 7, 11, -23, -16, 55, -29, -28, 48, 2, -11, -25, 52, 41, -72, 19, -21,
+ 36, 6, -44, -27, 22, -55, -54, -7, -45, 15, 19, -14, 43, 19, -26, -14,
+ -36, 8, 21, -31, -45, -33, -45, 31, -25, -44, -18, -47, -17, 30, -1, -39,
+ 25, 20, -13, -84, 69, 3, -10, -44, 42, -29, 39, -22, -23, -18, 40, -7,
+ 67, -33, 106, -41, 36, -78, 47, 4, -20, -54, 62, 20, -78, -41, 40, 5,
+ -32, 1, 52, -35, -45, -3, -8, 8, 36, -44, -36, -52, 1, 5, 41, 13,
+ -18, 43, -7, 5, 22, -17, -48, 63, 26, -16, 26, 6, 14, 36, -47, 61,
+ -48, -55, 92, -40, 19, -61, 37, -14, -22, 66, -61, 43, 39, -79, -14, 50,
+ 19, 46, -55, -24, -48, 27, -56, 43, 1, 30, -46, -12, -32, -4, -41, -19,
+ -6, -46, 46, -53, 6, -7, -36, 41, -61, 31, -44, 16, 6, 17, 28, -35,
+ 30, -47, 0, 37, -15, 3, -9, -5, -23, 46, 46, 17, -32, -17, -62, 35,
+ -35, 14, 8, 37, -51, -55, -19, -20, 14, 41, -34, 0, 27, 20, 18, -46,
+ 47, -49, -22, -1, 27, -7, 65, -23, 16, 4, 20, -13, 21, 58, -79, 39,
+ -14, 63, -2, 29, 52, 7, 28, -3, -9, 50, 62, -40, 56, 9, 13, 45,
+ 34, 43, -55, 21, 6, -58, 32, 42, 13, 11, -35, 35, 14, 2, -12, -80,
+ 43, -88, 39, -13, 54, 0, -70, 7, 0, -54, 63, -45, 17, -2, -71, -15,
+ -31, 13, -50, 47, -26, 45, -2, 0, -4, 85, -32, -48, 22, 14, -32, -18,
+ -7, 33, 35, -13, -25, 60, 65, 40, 37, 30, -36, 28, -41, -13, 72, -21,
+ 52, 55, -41, -2, 35, 16, 47, -61, 45, 76, -15, 20, 0, 1, 26, -34,
+ 0, -35, 15, 71, -73, -3, 39, -38, -3, -37, 21, 17, 18, 26, -70, 0,
+ -18, -25, -76, 13, -68, 79, -21, 14, 23, 80, -74, 0, 20, 60, -19, 48,
+ -51, -32, 54, -33, 70, 30, -2, -36, 72, -54, 87, 19, 6, 28, -50, -7,
+ -30, -51, 41, -33, -24, -44, 72, -78, -16, -37, -8, -18, 46, -59, 54, -66,
+ 8, 4, -8, 7, -46, 74, 9, -10, -33, -10, 27, 29, -48, 92, -74, 33,
+ -64, 2, 41, -18, 67, 17, 9, -53, 20, 9, 12, 2, 65, -41, 70, -33,
+ 78, -45, 45, -23, -19, -21, 6, -40, 40, -63, 57, 55, -73, 42, -11, -35,
+ 21, -37, 36, -15, 11, 29, 1, -5, 43, -60, -42, 6, 32, -68, 74, -32,
+ -14, 22, -17, -20, 36, 40, 14, -28, 29, -28, -37, 53, -55, 56, -72, 64,
+ 7, 29, -9, 26, -17, 46, -54, 1, -40, 10, 39, -14, -32, -8, 45, 12,
+ -4, -10, -42, -47, -73, 0, -38, 31, 31, -13, -15, -54, -23, -30, 66, -82,
+ -37, -35, 39, 18, -72, 52, 13, -54, 13, 25, 36, -88, 29, 16, 19, 79,
+ -76, 46, 64, -52, -8, -39, 77, -85, 53, -5, -60, 45, 38, -77, 77, 40,
+ -21, 18, -12, -7, 10, -56, 33, -42, -53, 6, -50, 48, -67, 69, 28, -22,
+ 23, -5, -55, 65, 26, -52, -77, 0, -27, -50, 2, -41, -4, 17, -71, 30,
+ -73, -4, -39, 52, -4, -1, 27, 43, -53, -49, 25, -72, 86, -75, 3, 9,
+ 25, 9, -12, -51, 63, -20, 66, -58, 72, -4, 9, -78, 42, -35, 26, 20,
+ 20, 21, 44, 33, 14, 0, -21, -12, 19, -92, 54, 19, -46, -42, -23, 18,
+ 29, 31, -60, 22, -23, -71, 70, -61, 0, -5, -29, -26, -2, 58, -24, 31,
+ 44, 70, -40, 4, 18, 21, 57, -20, 40, 8, 38, 15, 43, -61, 6, 0,
+ 33, 30, -17, -53, 93, -60, -38, -11, 10, -13, 34, -46, -7, 24, 36, -57,
+ 46, 15, -38, -20, -22, -61, 28, -57, 62, -44, 36, -12, -33, 3, -27, -7,
+ -51, 25, -12, -26, 53, -7, 8, -40, 56, -29, -25, -22, -50, 78, -62, 54,
+ -4, 28, -22, -44, 35, 4, -73, 75, -68, 96, 6, 33, -30, 40, 22, 9,
+ -8, -62, 57, -61, 37, -42, 0, 30, -20, 4, 37, -17, 20, -53, 6, -49,
+ 11, -30, -39, 23, -48, -4, 35, 16, 21, -17, -44, 52, 15, 42, -31, -30,
+ -23, 11, 9, 66, 32, 40, -8, -57, 2, -60, 23, 96, -50, 92, -81, 91,
+ 5, 21, -22, -17, 35, 7, 51, -36, -36, -60, 31, 63, -77, 14, -24, -34,
+ 41, 8, -75, 8, -8, 4, -16, 61, 3, -50, 55, 17, -65, 72, -42, -4,
+ -10, 41, 63, -62, 58, 55, -70, 39, 64, -60, 54, 31, 6, -63, -26, -23,
+ 20, -40, 72, -98, 33, -15, 82, -27, 41, 28, 48, 21, 2, 20, -44, 98,
+ -36, 90, -44, -41, 36, -22, -56, 33, 5, -23, 17, 71, -95, 98, -47, 58,
+ -86, 58, -12, 49, -62, 28, -90, 63, -49, -35, -7, 63, 6, -14, 19, 28,
+ -41, 53, -59, -29, -3, -4, 40, 0, -6, 39, -4, -11, 27, 66, -67, 12,
+ -31, 18, -18, 59, -42, 28, -1, 1, 54, -41, 14, -9, 32, -64, 9, -35,
+ -50, -6, -26, -24, 41, -55, -43, -38, 37, -31, -17, -24, -29, 16, 49, 41,
+ -54, -28, 31, 18, -62, 6, 52, 14, 29, -1, -20, -2, -10, -9, -33, 3,
+ 15, -36, 62, 7, 24, 68, 43, -5, 19, -14, 8, 7, 45, -20, 39, -55,
+ 98, -38, 42, -50, 39, -27, 75, -39, 50, -59, 77, -32, 39, -95, 78, -41,
+ -3, 35, -28, -14, 14, 32, 5, -33, -5, -21, -30, -30, 31, -6, -49, 22,
+ 28, 35, 11, 31, -40, 51, -28, -61, 26, 27, -27, -31, 65, -46, 60, -36,
+ 26, 53, 16, 2, 52, -44, -35, -22, -3, -37, 14, -67, 28, -46, 18, 31,
+ -3, -2, -47, 0, -60, -2, -5, 76, -31, 100, -60, -36, -16, -56, 51, -53,
+ -39, -33, 17, 49, -81, 49, -54, 13, 48, -7, 22, -24, 68, -28, -15, -37,
+ 26, -26, 40, 37, 30, -24, 49, -70, -17, 58, -55, 9, -65, 43, 14, -21,
+ -22, 8, -46, 26, -39, -34, 42, 31, -19, -4, -15, -13, 32, -4, 56, -3,
+ 32, -27, -19, 23, 59, -79, 22, -42, -36, -61, 39, -86, 89, -48, -6, -61,
+ 22, -59, 7, 51, 9, -17, 65, -50, 50, -61, 38, -26, 1, -18, -17, -61,
+ 63, -47, -8, 15, 14, -35, 86, -2, 9, 31, 9, -7, -80, 40, -46, 28,
+ -85, 33, -21, 61, -49, -50, 24, 24, -82, 9, -25, 24, -74, -12, 20, 27,
+ 45, -35, 52, -49, 9, 0, 47, -58, 9, 22, -1, -4, -34, 91, -40, -9,
+ 59, -31, 30, 40, -17, 36, 8, 31, -38, 49, 47, -46, 14, 1, -59, -44,
+ 23, 24, -1, -25, 40, 11, -24, 66, -58, -48, 38, -26, 74, -13, 24, 4,
+ 53, -15, -16, -9, -48, -44, -47, 0, -16, -24, 20, -16, -15, 13, 5, -29,
+ -16, -65, 46, -74, 56, -6, -55, 50, -23, 39, -38, -10, 52, 41, -98, 82,
+ -45, 17, 6, -25, 2, -30, 9, 14, 1, -33, 15, -41, 8, 10, 4, -67,
+ 48, -56, -38, 6, 3, -40, 0, 48, -8, 0, -27, 52, -25, -31, 41, -5,
+ 47, -46, -55, 21, 20, 17, 16, 1, 43, 21, 24, 26, -58, 50, 15, -34,
+ -49, 46, 29, 49, -21, 10, 54, -60, 2, -65, 63, 14, 5, 38, -20, -12,
+ 96, -45, 41, -19, 64, -39, -39, 33, -2, -3, -32, -47, -10, 45, -29, 53,
+ 32, -60, 33, -94, 37, -6, -55, 82, -46, 42, -11, 68, 1, 38, -55, 41,
+ -20, -30, 25, -20, 17, -29, 46, -102, 42, 40, -53, 6, 24, -36, -36, -3,
+ -31, 65, 5, -50, -4, 8, 23, 19, 20, -23, 47, -1, -48, 54, 30, -41,
+ 50, 52, -35, -41, 1, -26, -7, -30, 63, -49, 19, 27, -13, 82, -67, 56,
+ 7, 0, 64, -45, -25, 41, -68, -29, -46, 42, -43, 14, 37, 21, 15, -3,
+ 40, 39, 15, -91, 78, 35, -42, 49, 49, 28, 7, -18, 67, 40, -64, 44,
+ -38, -37, -61, 33, 47, -67, 38, -21, -11, -38, 11, 50, -44, 5, -32, 59,
+ -61, 58, 32, -75, 33, -56, 66, -16, -57, -15, -11, 69, -80, 62, 29, -3,
+ 45, 23, -37, 73, -80, 7, -13, -18, -3, 101, -76, 17, -35, 6, -21, 0,
+ -33, -13, -1, 31, -3, 46, -9, 32, -35, -21, 7, -60, 73, -62, 32, 25,
+ 32, 52, 7, 40, -45, -3, -48, 52, -39, -16, 6, -4, -20, 18, 25, 14,
+ -28, 7, 6, 31, 34, 28, -63, 58, 31, 43, -65, 49, 34, -5, 7, 33,
+ 11, 20, 10, 31, 2, 35, 12, 4, 1, 54, -33, 0, 2, 65, -96, 41,
+ -72, 44, 10, -27, -33, 34, -39, 5, 5, -42, -46, -10, 41, 27, -77, 44,
+ 2, 28, -11, -49, 23, -20, -47, 4, 1, -11, -23, 32, -57, 23, 7, 9,
+ -73, 46, -26, -3, -6, -4, 61, -49, 31, 46, 3, 11, 6, 20, -22, -11,
+ -17, 35, -38, 85, -79, 53, -18, -43, 47, 6, -50, -51, -14, 1, -24, -4,
+ -22, 45, -49, -4, -22, 85, -65, 72, -7, 1, -22, 15, -10, 28, 25, 36,
+ -2, -43, 34, 20, -52, 65, -8, 30, 0, 83, -52, -26, 15, -46, -6, 68,
+ -89, -19, 54, -14, 9, -11, 0, -32, 22, -10, 17, -32, -33, -32, 64, -43,
+ 23, 23, -92, 58, -4, 38, 32, -18, 55, 4, 2, -12, -81, 71, -45, -31,
+ 18, -43, -20, 97, -59, 27, -33, -26, -68, 46, -33, -4, -13, -60, 52, -76,
+ 74, 20, 55, -6, 3, 3, 40, -20, 20, 11, 29, -31, 19, -66, 27, 37,
+ -14, -91, 43, -14, 44, -50, -8, 0, 63, -15, 37, -73, 64, -21, -62, 23,
+ -30, -29, -30, 19, 33, -28, 16, -46, 37, -82, 19, 83, -50, -50, 66, -14,
+ -38, 44, -2, -13, 58, -48, -8, 18, 33, -38, 91, -8, 36, -32, -62, 60,
+ -76, -31, -6, 18, 40, -43, 97, -52, -2, 19, -25, -5, 30, -50, 2, 15,
+ -38, -25, 5, -40, -34, 19, 48, -56, -76, 38, -7, 23, -89, 40, 15, -32,
+ -26, 29, -46, 38, 6, -31, -46, 33, -22, -11, -31, -50, -4, -30, 30, -8,
+ 56, -68, 48, -56, 66, -6, -12, -41, 17, 42, 41, -13, -14, -25, 39, 11,
+ -33, -47, 21, 49, -68, 49, 14, 49, -60, 50, 27, 10, -7, -1, -8, -43,
+ 21, 45, -68, 22, 12, -24, 33, -39, -46, -21, 2, -5, 52, -47, -6, -30,
+ -10, 42, 38, -46, 23, -1, -37, 72, -55, 66, -2, 52, -15, 39, 15, 48,
+ 6, 49, 1, -10, -12, -58, 5, -22, -8, 6, 36, -17, -40, -30, 0, 8,
+ -47, 67, -61, 76, -50, -31, 5, 2, -36, -50, -20, 16, 36, 62, -38, -19,
+ 45, 15, 34, -64, 93, -67, 24, -23, 53, -45, 71, -62, 40, 10, -19, 46,
+ -55, 11, 36, -38, 35, -86, 12, 24, -81, 68, -54, 60, 21, -26, 4, 9,
+ -9, -20, 43, -62, 19, -32, 61, -37, 22, -1, -6, -4, -13, 34, 29, -18,
+ -18, -44, 0, -74, 15, -45, 16, 20, -33, -59, 15, 20, -39, 93, -72, 47,
+ -64, 83, 15, -23, -52, 44, 0, 33, -49, 26, 16, -6, -37, 29, 34, 47,
+ -28, -26, 24, 12, -11, 19, -25, 17, -14, 54, -27, -76, 55, 0, 34, -72,
+ 50, 15, -26, 28, -28, -47, 39, 13, 35, -12, -56, 5, -34, 32, 77, -69,
+ 71, -15, 59, -31, -29, -1, -75, 84, -35, -1, 63, -38, -17, 70, -76, 60,
+ -2, 19, 36, -65, 39, -32, 15, -34, 33, 19, -35, 54, -7, -11, -24, 39,
+ -37, 4, -28, -1, -2, -34, -6, 29, 25, -29, 54, 32, 38, 33, 3, -6,
+ -10, 0, 36, -48, 43, -19, 14, 31, -28, -46, 17, 26, -34, 67, -39, 30,
+ -40, 39, -38, 32, 23, -9, -5, -49, 42, -12, -83, 50, -51, 55, -50, 78,
+ -45, 11, 45, -22, -7, 10, -51, 34, 25, 36, 3, -34, -1, 29, 15, 23,
+ 4, -39, -37, 60, -34, 67, -54, -5, -19, -27, -35, 34, -50, -7, -26, -25,
+ -33, -31, 5, 0, 40, 56, -25, 5, -12, 44, -41, 53, 42, -17, 54, -44,
+ 34, -61, -20, -62, 103, -38, 36, -39, -9, 33, 29, -36, -32, -54, 41, 3,
+ 13, -6, -24, 21, -46, 36, 23, -3, -7, -19, 27, -12, 26, -30, 21, -36,
+ -5, 16, -37, -29, 7, 59, -32, 61, 0, -32, -38, 33, -39, 85, -71, 83,
+ -32, 5, -23, 59, -52, 10, -46, 35, 13, 53, -68, 25, -42, 14, 10, 21,
+ -49, 85, 17, 12, 43, -21, 49, -17, -6, 70, -78, 63, 47, -88, 86, -36,
+ 49, -73, 47, 25, 40, -22, 3, -7, -37, -35, 44, -49, 81, -11, -58, -40,
+ 6, 48, 34, -39, 0, 16, 0, 51, -2, 8, 60, -19, 18, 0, 3, 36,
+ -53, 54, -35, 17, 49, 24, -61, -11, -71, 72, 1, -52, 0, 7, -73, 55,
+ -47, 63, -91, 57, -19, 39, 41, -57, 20, -1, 15, -2, -21, -50, 65, -60,
+ 67, -106, 62, 35, 29, -74, 80, 5, 40, -29, 62, -81, 39, 45, -61, -29,
+ 76, -20, 0, 1, 48, 28, 5, -33, 1, -41, 24, -33, -25, -36, 15, -24,
+ 2, 29, -28, -21, 28, -24, -21, 30, 47, -27, -39, 24, 70, -71, -32, 73,
+ 9, 0, 3, -17, -72, 34, 8, -2, 61, -57, 102, -56, 38, 8, 14, -35,
+ -8, 50, 11, -7, -42, 88, -82, 96, -80, -27, 53, -56, -4, 23, 33, 16,
+ -35, -22, 60, -82, 80, -71, 9, 40, -7, 18, -10, 10, -34, 63, 4, 18,
+ 54, -3, 38, 24, -16, -77, 65, 1, -34, -4, -2, -18, -13, 11, -61, 9,
+ -18, 61, 35, 36, -43, -27, -23, 17, 24, -8, 15, 49, -1, 21, 0, -22,
+ -52, 4, -18, 23, 30, -51, 57, -17, 16, -6, -14, -31, 78, -63, 23, -49,
+ 58, -49, 59, 35, 1, -35, 25, -83, 54, -22, 67, -45, -25, -30, 30, -56,
+ 43, 2, 29, -62, 51, -17, 54, -3, -82, 54, -3, 15, 49, -43, -51, 38,
+ -14, -95, 20, 42, -33, 19, -62, -34, 60, 31, -19, -57, -24, 68, -57, -37,
+ -18, 63, -35, -58, 15, -54, -2, -26, 62, 63, -75, 88, -88, 2, 40, 2,
+ -6, 0, -56, 52, -63, -23, 43, -66, -12, -38, -59, 22, 40, -53, 52, -49,
+ -16, -48, -13, -1, -68, 17, 64, -64, 92, -75, 56, 59, -4, 37, -38, 45,
+ -58, 7, 9, -61, 74, -44, 4, 6, -14, 4, -52, -1, 53, 17, 27, -57,
+ 44, 37, -18, -62, 48, 3, -60, -10, 1, -38, -37, 47, -8, -8, 34, 65,
+ -44, -20, 0, -21, -34, 2, -25, 62, -53, 26, -43, 73, -50, 43, 41, -47,
+ 53, -18, -5, 39, 23, -15, -27, -12, -32, 24, 7, -22, -81, 109, -38, -21,
+ -55, -6, -18, -8, 60, 29, -14, -47, -17, 31, -81, 22, 17, -65, 43, 10,
+ 14, -71, -6, 0, 11, -41, 90, -105, 90, -25, -38, 94, -48, -9, -47, -57,
+ 41, -4, -8, 14, -61, 74, -6, 21, 16, 8, -22, -28, 39, -79, 50, -53,
+ -17, -63, -14, 17, 2, -11, 10, -44, -12, 70, -32, 42, -36, -20, 10, 32,
+ 44, -67, -25, -24, -38, 73, 31, -5, -10, -55, 69, -68, -4, 53, -48, 14,
+ 29, 34, -26, -32, -17, -36, -8, -33, 19, 11, -55, -14, -70, 11, 21, 36,
+ 18, -19, -48, 59, -50, -37, 38, 38, -27, 14, -5, 30, -20, 73, -59, -11,
+ 10, -25, -14, 33, -39, 68, -63, 0, 55, -46, -16, 13, 27, -27, 31, 20,
+ 19, 47, 21, -63, -22, 1, 63, 0, -44, -36, 50, 25, 16, -63, 44, 44,
+ -19, -35, 14, 34, -56, 59, 58, 18, -87, -18, 37, -91, 88, -66, 24, 26,
+ -41, 22, 75, -50, 85, -2, 31, -39, 77, 2, 64, -57, 6, 25, -59, 75,
+ 18, 51, 15, 52, 10, 13, 3, 41, -36, -24, 17, -89, -27, -25, 51, -41,
+ 58, -5, -2, 70, -57, 23, -18, -28, 58, 25, 6, 0, -46, 30, -22, -27,
+ -13, 4, 49, -68, -5, -19, 41, 19, 0, -11, 36, -2, -2, -2, -85, 21,
+ -39, 54, 0, -37, 69, 9, -10, 33, -37, 64, -42, 16, -3, -2, 15, -44,
+ 24, 27, -20, -91, 48, 6, 35, -8, 101, -27, -35, 28, 24, -52, -11, 37,
+ 28, 32, 33, 37, -28, -35, 1, 40, -42, 73, -15, 25, 4, -63, 71, -79,
+ 0, 82, -64, 23, 20, 24, -83, 55, 15, -32, 30, -13, -19, 20, 25, 68,
+ -41, 32, 18, -14, 55, -45, -9, -51, -37, 6, 38, -1, 3, 9, 17, -26,
+ 43, 12, 60, -23, -22, 24, 32, 27, 32, -46, -16, -60, 42, 32, 46, -72,
+ 12, 2, 64, -1, 52, -93, -16, 38, 19, -11, 8, -9, -23, -36, 25, 0,
+ 30, -47, 31, 72, -39, 30, 3, 49, 23, 15, 58, 34, 61, 12, 22, -33,
+ -24, 43, -26, -22, 50, 43, -58, 5, -67, 12, 24, -94, 66, -50, 42, 0,
+ 4, 10, -16, 45, -16, -47, 69, -34, -34, 21, 59, -75, 13, 41, 15, -75,
+ -2, 8, -14, 30, -9, 23, -72, 29, -23, 52, -4, -22, -22, -26, 15, 0,
+ 10, -28, -3, 52, 7, -33, -77, 42, 17, 50, -64, 39, 29, 11, -9, -1,
+ 31, -71, -35, -40, 26, -86, 32, -74, 38, -50, -50, 69, -25, -61, 54, -88,
+ 3, -23, -53, -46, 9, -35, -59, 0, -7, -31, 47, 49, 56, -3, -6, -18,
+ -3, 7, 22, -46, 31, -55, -14, 5, -66, -2, -6, 2, 35, -76, 49, -25,
+ 9, 24, -35, 51, 52, 0, 4, -63, 34, 11, -38, -12, 44, -22, 75, 21,
+ -36, -12, 35, 15, -2, -32, -29, 32, -12, -2, 11, -27, 45, -69, 46, -14,
+ -49, -16, -13, 102, -19, 17, -64, -22, -66, -45, -3, 42, -10, 10, 3, 9,
+ 26, -64, 4, -37, -29, 9, 26, 20, -33, -14, -48, 50, -38, 69, -49, 18,
+ 47, -43, 16, 31, -47, 16, 48, -47, 40, -25, -24, -39, 15, -3, 45, -56,
+ 35, -53, -24, 24, 12, -43, 20, 57, -13, 12, -37, 16, -15, 50, -30, 40,
+ -69, 43, -70, -10, -39, 46, -64, -12, 19, -27, 61, -21, 38, -40, -7, 8,
+ 11, 8, -65, -40, 35, 19, 53, -46, -4, 23, -54, 76, -32, 11, -22, 9,
+ -38, 23, 14, -41, -33, 49, 38, -69, -34, 24, -37, -32, -68, 11, -32, 45,
+ -26, 37, -57, 6, -11, -64, 59, 26, 18, 39, 4, 56, -17, -1, -2, 0,
+ 52, -76, 83, -71, -51, 96, -85, 12, 43, -16, -23, 69, -32, -44, 23, 4,
+ 18, 2, -52, -19, 22, 40, -18, -12, 68, -49, 14, -4, 14, 32, 35, -63,
+ 61, 45, -13, -85, 62, -1, 25, -17, 31, 51, -4, -26, -52, 39, 36, -57,
+ 18, 75, 18, -17, 24, 12, 37, -7, 76, -54, 100, -63, 45, 15, 8, 36,
+ 24, -49, 82, -20, 45, -32, 88, 14, -8, -19, 13, -16, -65, 16, -7, 42,
+ 8, -29, -30, -9, 46, 28, 54, 17, 65, 54, -71, 45, 1, 58, 13, 25,
+ -58, 71, -65, 48, -41, -34, -2, 44, -27, -21, -15, 2, -8, 25, -52, -75,
+ 59, -19, -48, 43, -21, -26, 35, -50, 76, -5, -77, 51, -46, 68, -56, 26,
+ 70, -23, 7, -68, -34, 32, 23, 6, 56, 33, 42, -32, 44, -44, 2, -9,
+ -21, 45, -34, 11, 39, -6, -24, 36, -47, 37, -15, 14, -3, 21, -28, -33,
+ 24, 5, -21, -40, 15, -68, 21, -40, -56, 33, 3, 37, 34, -68, -13, -63,
+ 46, 11, 9, 5, -55, 74, -41, -39, 7, 22, 28, 44, -27, -64, -15, -23,
+ 37, 1, 7, 51, 29, -88, 74, 2, 16, 3, -23, -33, -20, 25, -26, -9,
+ -22, 51, 64, -20, 36, -80, 32, 17, -47, 34, -9, -9, 32, 9, 61, -17,
+ 8, -1, -32, 66, 2, -50, 42, -54, 63, -45, 26, -30, 49, 18, 31, -42,
+ 34, -14, 32, 8, 38, 9, -78, 77, -68, 17, -39, 35, -43, 4, -15, -6,
+ -10, 13, -31, 49, 56, -83, 96, -22, -40, -25, 41, -58, 2, 8, -42, 35,
+ 10, 26, 11, 61, -45, -1, 24, -3, -22, -20, -2, -5, -2, -20, -16, 53,
+ -68, -66, 44, 53, -99, 43, -41, -15, -33, -47, -24, 4, 9, -25, -29, -6,
+ -10, -42, -12, 17, 9, 62, -91, 90, -97, 4, -47, 12, 18, 44, -56, 8,
+ 30, -30, -1, 60, -79, 69, -57, -50, 80, -44, 24, -31, 67, -78, 66, -81,
+ -15, -43, 66, -33, -40, 33, -76, -3, -54, -43, 24, 37, -57, -60, 55, -59,
+ 0, -2, -32, -13, 8, -18, 32, -12, 49, -17, 55, -23, 9, 25, 8, 54,
+ 51, -63, 85, -49, -44, 72, -33, -31, -66, 29, 70, -61, 35, -6, 8, -21,
+ -38, 5, 0, 35, 63, -72, 83, -39, -23, -7, 7, -44, 37, -62, 69, -13,
+ -36, 26, 23, -11, 4, 34, -15, 3, 29, -39, 57, -26, -32, -17, 49, -7,
+ 63, -58, 89, 9, -20, 75, 18, 40, 53, -41, 51, -46, -9, 34, 49, 57,
+ -38, 8, -57, 63, -65, 42, -2, 79, -67, 9, -23, -36, 46, 70, 11, 41,
+ -54, 64, -53, -11, -3, 61, -34, -5, -20, -35, 55, 37, 29, -3, 63, -6,
+ -21, -56, -23, -24, 14, 47, -35, -50, 19, 0, 0, -18, 0, -21, -85, 50,
+ -56, 12, -30, 51, -73, 34, -44, 0, 20, -61, 14, 11, 31, -19, -23, -49,
+ 29, -9, -15, -22, -20, 1, 23, -54, 18, -30, 10, 25, -31, -2, 4, -9,
+ 26, 44, -56, 59, -57, -1, -66, 70, -33, 59, 21, -22, -31, 72, -59, 44,
+ -38, 0, -25, -42, -24, 79, -53, 35, -61, 64, -21, 17, -32, 66, -9, 36,
+ 3, 32, -14, -12, 47, 29, 33, -10, 50, 0, 20, 56, -31, 39, 27, 69,
+ -3, -3, -53, 39, -47, -24, 1, -65, 89, -10, 44, -39, -16, -72, 54, -14,
+ 17, -20, -33, 12, -68, 64, -74, 96, -52, 17, 14, 17, -20, 48, -10, 38,
+ 60, 28, 14, -4, -34, 53, 13, -26, 4, 80, -45, -17, 64, -43, -32, 53,
+ -7, 29, 0, 33, 11, -7, 23, -61, -54, 1, 11, -17, -34, 4, -21, -46,
+ -35, 62, -56, -1, 12, -5, -16, 92, 12, 7, -31, 15, 17, 29, -26, -14,
+ 22, -2, 37, -66, -35, 27, -50, -31, 43, 25, 18, -57, -1, 64, -75, 44,
+ 27, -21, -46, 32, -72, 9, -20, 45, -59, 91, -77, 70, 5, -9, -25, -31,
+ -41, -14, -22, -14, 12, -54, -21, -1, -58, 57, -30, 12, 33, -17, -65, -33,
+ 53, -36, 38, 12, 61, -79, 22, -91, 64, 6, -50, 57, -69, -57, 48, -50,
+ 2, -23, 0, 22, -12, 49, -83, 34, 48, 7, -59, -21, 20, -20, -73, 18,
+ -7, 59, 22, -3, 3, 27, -35, 45, 3, 11, 0, -1, 21, -1, 48, 12,
+ 27, -50, 35, -76, 98, -19, 22, 24, 23, 54, -20, 49, -72, 12, 6, 54,
+ -82, 91, -56, 64, 16, 11, 29, 33, -24, 9, -36, 32, -3, 45, 15, -5,
+ -34, -13, 10, -61, 30, 49, 27, -17, 33, -63, -28, 63, -7, 11, 7, -10,
+ -2, 28, 8, 26, -12, -14, -17, 7, 12, -14, 1, -18, -9, -78, 2, -44,
+ -32, 56, -44, 32, 11, -56, -22, -2, -36, 43, -77, 30, -55, 5, -32, -74,
+ -13, 51, -1, 34, -31, 60, -46, 94, -67, 32, -66, 4, 18, 23, -24, 23,
+ -48, 66, -11, 39, 26, 42, -8, -54, 46, -44, -7, 30, -67, -54, 44, -13,
+ -61, 22, -55, 9, 8, 8, -40, 55, -31, 15, -47, 35, 17, -6, 30, -29,
+ -5, -16, -25, -4, -4, 1, -28, 67, 51, -53, 46, 40, -56, 41, -25, 28,
+ 7, -16, 23, 18, 17, 24, 6, -66, -35, -8, 58, -38, -65, 19, -6, 24,
+ -53, 44, 15, 10, 18, -7, 17, 3, 18, -31, -50, 101, -65, 19, -14, -5,
+ -77, 77, -6, -66, 58, 41, -47, -31, 32, -49, -11, -38, 30, 62, -70, 77,
+ 43, -52, 23, -39, 1, 64, 27, -32, -30, 74, -68, -1, -8, -10, 80, 0,
+ -2, -24, 6, -33, -45, 61, -28, 28, 7, 20, -42, 13, 18, -11, 37, -5,
+ 18, -36, 15, 36, -69, -39, 94, -45, -30, -28, 30, 29, -14, 6, -6, 41,
+ 43, -71, -22, -35, 31, -28, 56, 6, -9, -43, -3, 40, -13, -21, -27, 46,
+ -39, 66, -7, 19, -46, -6, -6, -57, -1, -47, -25, -39, 56, -8, -67, 45,
+ 21, -22, -15, -39, 65, -51, -20, -3, -1, 37, -49, 22, 0, -49, 1, -29,
+ 26, -40, 20, 5, 28, -78, 46, -35, -16, 55, -19, -48, -15, 24, -63, 45,
+ 10, -44, -24, 31, -5, 27, -33, 26, 46, -52, 16, 34, 0, 82, 2, 89,
+ -53, -36, -11, 27, -50, -15, 58, -13, -18, -13, 35, -24, 61, 39, -14, 99,
+ -41, 31, -21, 20, -59, 57, 6, -23, -59, 63, 36, -5, 38, -23, 18, 46,
+ -5, -55, 14, -1, -49, 17, -50, 41, -68, 61, 25, 30, 59, -12, 58, -50,
+ -17, 14, 62, -18, 9, -12, 13, 0, -22, -9, -37, 47, -11, 11, 36, -48,
+ 64, -16, 48, -12, -57, 57, 20, -61, 51, 10, -61, 24, 60, 14, 24, -67,
+ -4, 1, -22, 31, -25, 21, -53, 52, 43, -55, 43, -35, 53, 12, 10, 40,
+ -26, -44, 57, -35, -10, 12, 0, -20, -24, 0, 60, -65, 19, 41, -43, 88,
+ -34, 9, 10, 51, -37, 23, 31, 21, -32, 24, 34, 84, -67, -21, 56, -36,
+ -4, 23, -3, 76, -23, -29, -27, 35, 30, -97, 101, -43, 70, -30, -74, 63,
+ -85, 52, 22, -17, 41, -41, 15, -7, 13, -11, 18, 38, 26, -21, -30, 31,
+ -53, 62, -20, -4, 62, 8, -64, 26, 44, -65, 40, -28, -24, 70, -18, -51,
+ 32, -25, 63, -2, 4, 10, -59, 17, -61, 91, -60, 37, -30, 14, -42, -16,
+ -31, -29, 22, -25, -37, 62, 41, 34, 27, 58, 9, -27, 26, 23, 11, 31,
+ -74, 45, -34, 58, -80, 39, -29, -8, -8, -25, 43, -29, 24, 40, 45, -66,
+ 16, 43, -29, -6, 4, -16, -3, 36, -32, 33, 23, 67, -16, -26, 19, -16,
+ 40, 62, -65, 55, -48, 6, -26, 23, -28, 86, -38, -39, 58, -65, -7, -55,
+ 46, -12, 53, -45, 68, -25, 23, 58, -47, 22, 10, -2, -72, 14, -29, -64,
+ 1, -57, 59, -6, 41, -63, -8, -48, 85, -56, -55, 58, -50, -3, -16, -67,
+ 79, -24, -9, 15, 19, -14, 39, 24, -33, 6, -42, -5, -47, -8, -40, 22,
+ 38, -16, -40, -13, -14, -29, -1, -7, 9, 47, -46, 62, -53, -30, 55, -74,
+ 9, -32, 47, -81, 91, -46, 10, -43, -61, 60, -19, -45, -72, 8, 10, 47,
+ 26, 25, -27, -39, 66, -30, 10, -24, 32, -14, -52, 37, 12, -30, -52, -4,
+ 4, 54, -52, 34, -45, 51, -18, -8, 20, 21, -35, 55, -39, -58, 59, -52,
+ 14, 28, -55, 33, -42, 50, -53, -34, -5, -13, -53, -77, 54, -37, -9, -71,
+ 53, -15, 23, -63, 49, -59, 19, -58, 19, 80, -65, -8, -77, 67, -16, 37,
+ 14, -5, -44, 46, -25, 10, 48, -26, 36, -64, 30, -47, -70, 78, -21, -53,
+ 2, 23, -19, -67, 19, 24, -23, 18, 15, 0, 22, 39, -28, -33, 5, 14,
+ 27, -73, 42, -37, 7, -17, 41, -35, 15, -28, 20, 13, -46, 65, 16, 39,
+ 34, 31, 23, 27, 20, -74, -20, -61, 18, -34, -46, 50, -32, -16, 2, -36,
+ 49, -49, 25, -47, 77, -42, 26, -41, 70, -47, 36, 45, -81, -7, 9, 45,
+ -41, 7, -24, 55, -3, 30, -41, -1, -40, -13, -49, -34, 33, 35, 24, -12,
+ -76, -43, 34, 32, 20, -21, -9, -7, 11, -61, 6, -2, 25, -35, -43, 80,
+ -3, -15, 33, -5, -6, -41, 22, -49, -27, 37, -13, 40, 6, -11, -5, 31,
+ 5, 66, -43, -5, -24, 47, 13, 18, -16, 13, 50, -84, 30, 57, -34, 3,
+ 17, -72, 55, 38, -78, 49, -42, 2, -12, 42, -33, -22, 0, 26, 65, -68,
+ 30, -17, -5, 28, 23, 68, -10, -28, 41, -60, 1, -17, -27, 0, 7, 19,
+ -3, 5, -5, 40, -72, 21, 33, 17, 39, -58, 16, 58, 64, -17, -69, -14,
+ -17, -14, -5, -23, -46, 0, 12, -56, 21, 49, -7, 49, -8, -32, 77, -86,
+ 69, -73, 64, -73, 55, -43, 46, -44, 24, -1, -4, -13, 78, 19, -42, 40,
+ 56, -27, 43, -35, -10, 0, -38, 108, -16, 22, 49, 74, -82, 24, 12, 46,
+ -8, 9, -47, 54, -69, 66, 33, 26, 5, -36, 12, 22, 43, 0, -56, 24,
+ -60, 63, 39, -33, 0, -28, -22, -1, 18, -37, -13, 26, 56, -72, 50, 26,
+ 28, 40, -53, 58, 45, -77, 50, -24, 16, -79, 58, -86, 66, -54, 45, -3,
+ 38, 11, -48, -37, 58, -24, 41, 7, 46, -13, -23, -3, 42, -41, -47, 0,
+ -73, -9, 4, -51, 4, 94, -13, 90, -71, 56, -53, 52, -19, 57, 24, -2,
+ 0, 28, 20, -3, -29, 32, 22, 71, -75, 3, -23, 28, -5, 36, -29, -15,
+ 44, 13, -8, -38, -9, 36, -51, 57, 7, 1, 3, 61, -63, -41, -44, 37,
+ 43, 51, -70, -37, -38, 51, -38, 30, -44, 51, -20, 15, -21, 17, 57, -69,
+ 2, -13, 24, -69, 34, -58, 56, 38, 0, 0, 1, -2, 11, 54, -24, 26,
+ -1, -67, 59, -56, -4, -72, 31, -55, 5, 17, -17, 54, -23, 25, -60, 78,
+ -84, 104, -84, -22, 66, -58, 15, -32, -3, 38, 64, -45, 64, -31, -72, 35,
+ 39, -74, 43, 61, -87, -12, -33, 58, -57, 69, 0, 61, -16, 21, 32, 0,
+ -15, 74, -51, -6, 78, -47, 23, -25, -35, 23, 27, -28, -69, 55, 42, 13,
+ 40, -3, 5, 54, 46, 45, 20, -43, 37, -43, -62, 3, -58, 100, -96, 57,
+ 49, -18, -40, 66, -47, 50, -48, 50, 5, -12, -40, 38, -65, -38, 49, -69,
+ 26, -56, 67, 0, -33, 16, 43, -61, -57, 48, -2, -54, 70, 2, 42, -19,
+ 43, -35, 25, 4, -19, 39, -85, 55, -82, 19, 22, -40, -38, 74, -66, 66,
+ -43, -28, -2, -19, 43, -42, -8, 20, 16, 15, 31, 12, -41, 78, -35, -31,
+ -60, 22, 19, -41, -18, 43, -81, 43, -33, 49, 34, 4, 23, -34, -3, 7,
+ -61, 60, 13, 78, -73, -35, 33, -72, -73, 29, 19, -25, 17, -40, 48, 24,
+ 74, -17, -46, 32, -41, -41, -24, -55, 63, -91, 41, -11, -21, -21, -69, 15,
+ -56, 40, -40, -1, -9, -35, 1, -68, 71, -54, 19, -12, -35, -12, 23, -16,
+ 34, -38, 14, 31, 1, 24, 31, 0, -52, 18, 48, -70, 78, 56, 10, -37,
+ 30, -6, -13, 67, 28, 58, -67, 79, -71, 48, -13, 11, -58, 44, -30, 45,
+ -21, 3, -4, 71, -15, 11, -31, -8, -31, -36, 23, -19, -3, -45, 31, -58,
+ 59, 15, 21, 25, 30, 56, -32, 68, -3, 34, -30, -2, 5, -41, 11, 19,
+ 4, -82, 54, 24, -12, 2, 0, 53, 22, -35, -61, 69, -48, 10, 78, -55,
+ -9, 64, -64, -39, 53, 41, -5, -2, -4, 17, -32, -50, 30, 5, -59, -19,
+ 53, -66, -16, 14, -41, 42, -51, 54, 34, -25, 28, -38, -7, 8, -51, 0,
+ -17, -39, 52, -62, -35, -52, -1, -13, 43, 0, 42, 12, 12, -90, 93, -40,
+ -50, -27, 47, -42, 23, 42, -46, 16, 0, -47, 39, -28, 69, -29, -6, -24,
+ 21, -15, -42, 16, -7, 46, -49, 18, 49, -41, -1, -2, -39, -50, -6, -37,
+ 1, -25, 18, -47, -37, 35, 6, -34, 81, -22, -54, 49, 20, -33, 23, 28,
+ 6, -42, 59, -89, 70, 28, -12, -16, 21, -33, 47, -78, 52, -54, -21, 89,
+ -42, 68, -55, 27, 45, 12, 38, 23, -42, -51, -20, -11, -18, -21, 8, 42,
+ -29, -65, 55, -103, 103, -26, 34, 53, 60, -28, 34, -27, 57, -55, 26, -29,
+ -49, 31, 20, 52, -19, 39, 22, 9, 23, 59, 69, -31, -12, 15, 77, -57,
+ 41, 40, -27, 41, -20, -6, 39, -31, 67, 1, 12, 14, 57, 5, -39, -31,
+ -53, 41, 19, -55, -17, -27, 52, -29, 3, 57, -35, 6, -31, -68, 31, -43,
+ -52, 69, 17, -48, -37, -38, 10, -65, 88, -35, -41, 46, 20, -44, 50, 28,
+ -72, 49, -55, 12, -47, 64, 4, 2, 34, 28, 20, -28, -30, 37, -9, -27,
+ -31, 43, -47, 12, -52, 26, 30, -37, -52, 60, -55, 48, 68, -60, 6, 26,
+ 7, 60, -23, 28, 25, -45, -13, 15, -45, -20, 62, -48, 12, 40, -95, 54,
+ -4, -10, -3, 85, -49, -34, -29, -26, 50, -15, -44, 65, -54, 23, 66, -49,
+ 22, -30, 76, -57, 27, -37, 32, -39, -28, 5, 4, 49, -58, 55, 2, 55,
+ -59, 57, -5, 34, -59, 75, -5, 58, -81, 45, -14, -16, 41, 18, 4, -38,
+ 64, -21, 8, -17, 20, -59, 81, -73, 43, -18, 38, 49, -61, 0, 33, -30,
+ -21, -25, 57, 1, -18, 29, -8, -17, 5, -17, -18, -13, 36, 18, 20, 26,
+ -23, -41, 70, 51, -30, 28, -2, 59, -82, 49, 44, -20, -47, -12, 15, -5,
+ 20, 22, -49, 97, -86, 11, -10, 34, 11, 13, -43, 52, -39, 72, -19, -42,
+ 43, -38, -20, -29, -46, -84, 71, -62, 66, 29, -8, 46, 47, -32, 10, 0,
+ 19, 21, -20, 61, -31, -35, 28, -89, -3, 12, 3, 25, -51, 78, -41, 16,
+ -15, -6, -12, -36, 11, -5, -8, -30, -33, -62, -38, -22, -22, -9, -24, 54,
+ -42, -42, 25, -11, 28, -11, 33, -42, -44, -38, 48, -16, -41, -56, 96, -1,
+ 41, -14, 1, 48, 61, -36, -35, -10, 5, -47, -26, 16, 16, 57, -46, 71,
+ -21, -40, -9, 41, -16, 66, 22, 27, -38, 49, -50, 19, 52, -46, -42, 5,
+ 0, 45, -18, 33, -52, 11, 12, -52, -17, -18, 37, -23, 44, -48, -53, 84,
+ -27, 8, -16, 10, -8, -4, -69, 58, -26, -18, 9, -64, -46, 25, 1, 22,
+ -18, -44, -16, -36, -7, 24, 12, -40, 23, 4, -7, -39, 2, -27, 89, -40,
+ 35, 13, -20, -72, 64, -23, 58, 25, -7, -31, 63, -35, 34, -32, -8, -15,
+ 3, 30, -23, 51, 6, -40, 42, 50, 4, -22, -48, 31, 38, -58, -1, -23,
+ 17, 14, 9, -56, 80, -75, 44, -66, 33, -23, 33, 0, -37, -10, 21, -22,
+ 21, 44, -19, -40, 69, -52, -11, 5, -7, 0, -13, -67, 13, 57, -34, 59,
+ -23, 73, -58, 22, -30, -42, 22, 35, 26, 32, -29, 47, 10, 7, -69, 47,
+ -2, 30, -45, -27, 6, -36, 59, -94, 75, -62, -33, -12, 93, -1, -20, 0,
+ -37, 16, -38, 11, 0, 27, -32, -30, -10, 2, -25, 15, -54, -2, -26, 18,
+ 33, -46, 90, -12, 62, 49, -46, 20, -67, -8, 68, -110, 71, -55, 36, -33,
+ 7, -14, 46, -68, 24, -17, 1, 45, 21, 8, -67, 26, 42, -40, -15, 0,
+ 9, -31, 55, -9, -26, -30, 82, -42, 47, 56, -38, 40, 42, 10, 48, -16,
+ -21, 59, -19, 16, -60, -10, -3, 23, 23, 27, -4, 4, 43, 33, -56, 17,
+ -23, -28, 43, -71, -34, 24, 24, -24, -10, 28, 46, -32, -24, 19, 1, -25,
+ 8, -5, -33, 17, -38, -8, -22, -35, -11, 32, 25, -60, 1, 28, -8, 0,
+ 34, -65, 74, -64, 58, -39, -47, 79, 24, 54, -55, -35, 9, 44, 41, -37,
+ -20, -51, 86, -21, 42, -28, 7, 52, -27, -26, 50, 6, 70, -21, -16, 1,
+ 4, -36, 34, 59, -45, 39, 43, -64, 97, -49, 16, 43, 58, -52, -80, 99,
+ -48, -54, 14, 57, -20, -46, 17, -20, -48, 49, -78, 48, 13, -26, 29, -40,
+ -18, -4, -34, 18, -18, -29, 24, -14, -53, 96, -63, 79, -69, -4, 78, -43,
+ -39, -4, -50, 37, -17, 5, 11, 36, -46, 66, 12, -54, 1, -18, -37, 20,
+ 5, -6, -47, 89, -46, 78, -18, 4, 27, -21, -17, 68, -18, -30, -44, 32,
+ 19, -66, -1, -25, 74, -59, 72, -81, -15, 20, -37, -18, 38, -45, 73, -56,
+ 37, -41, -26, 54, 33, 6, -35, 1, 2, 35, 10, 4, -71, 29, -42, 61,
+ 29, 22, -34, 9, -27, 36, -11, 37, -40, 47, -9, -35, 99, -32, 2, 0,
+ -44, 30, -9, -46, -69, 16, -13, 45, 24, -19, -5, 22, -2, 5, -10, -12,
+ 57, -61, 28, 9, -16, 23, -22, 24, -60, -4, 63, -59, 23, -31, 23, 21,
+ 46, -55, 92, -91, 68, 0, -55, 14, 9, -56, 76, -67, 32, -51, 1, -21,
+ -1, -47, 32, 4, 80, -56, -16, 42, -4, -55, -36, -9, -25, 40, -37, -3,
+ -37, -12, -32, 61, 31, -33, -9, 1, 52, -35, 16, -24, 32, -46, 32, 53,
+ 14, 29, 33, 1, 32, 44, -16, 13, -44, 7, -16, 2, -2, 9, 22, -17,
+ 58, -73, -14, 14, -38, 31, 53, -93, -57, 9, -6, 34, 64, -81, 26, 2,
+ 42, -10, -61, 6, -35, 17, 36, -44, 2, 1, 13, 15, -54, 10, -59, 79,
+ -37, 28, -6, 15, -35, -5, -13, 3, -21, -24, -29, -31, -34, 59, 40, -85,
+ -2, 76, -16, -15, 2, -3, 6, -5, 61, -42, -12, 45, -5, -43, 27, 13,
+ 54, -5, 12, -49, 93, -77, 25, -30, -26, 20, -34, -30, 63, -49, -26, 48,
+ 24, 60, -18, -1, -36, 37, 49, -65, 0, -22, -49, 63, -9, 45, 16, -20,
+ 6, -40, 20, -40, -14, -59, -5, -50, 40, 3, 15, -28, 19, 55, -37, -14,
+ 38, 7, 73, -61, -14, 57, -64, 86, -58, -13, 11, 0, -35, -32, 33, -3,
+ -7, -29, 57, -36, -23, -37, 20, 41, 36, -28, -11, 22, -32, 48, -28, -51,
+ -23, -45, -19, 37, 54, -17, -4, 16, 58, -53, 21, -16, -20, -41, 50, 28,
+ -8, 17, -30, 43, 45, 20, 9, 13, -19, -30, -28, -27, 52, -58, 22, -26,
+ -26, 29, 46, -49, -14, 0, -25, -7, 48, -12, 7, -44, 65, -56, 57, -58,
+ 62, -54, -38, 36, 26, 26, -4, -46, 71, -41, 0, 16, 4, -42, 38, 12,
+ 31, 8, 30, -55, -52, 99, -46, 30, -29, 53, 45, -3, -51, 33, -8, 36,
+ 8, 19, 10, 8, -49, 28, 26, -14, -41, -13, 36, 4, -21, 28, -36, -35,
+ -30, -42, -30, -16, -36, -10, 33, -10, -15, 28, 50, -16, -9, 15, -16, -21,
+ -22, 59, 19, 19, 28, -26, 41, 45, 32, 11, -18, -32, -55, 40, -25, -15,
+ 34, 7, 1, 74, -28, -15, -3, 47, -64, 54, -67, 33, -19, 22, 26, -21,
+ -18, -17, 5, -50, 84, -47, 56, 11, -31, 8, 86, 4, -31, -12, 8, 93,
+ -66, -51, 64, -37, 29, 1, 38, 29, -74, 105, -45, -22, -11, 57, 7, 30,
+ -48, -54, 80, -64, -34, 61, 20, 14, -10, 43, 42, 10, -41, 29, 11, -43,
+ 39, -64, 8, -30, 38, -9, -89, 65, -15, 7, -39, 50, -81, 39, -20, 6,
+ -36, 42, -1, 18, 25, -1, 59, 68, -70, 37, -22, 27, -34, 19, 6, 55,
+ -42, -15, -39, 67, 9, -42, 71, -67, 51, 31, 11, 4, 35, 9, -55, 63,
+ -52, 41, -58, 70, -29, 19, 35, -44, -37, -37, 42, -43, 43, -16, -23, 43,
+ 36, 30, 41, -26, -85, 23, -30, 24, -42, -12, 36, -60, 52, 36, -58, -26,
+ 12, 26, -63, 46, -110, 82, -62, 1, -49, 91, -22, 65, -63, 45, 37, -53,
+ 8, -22, -18, -9, 37, 50, -14, -29, -38, 47, -25, -18, -1, 3, -10, -11,
+ -27, 58, -23, -28, 10, -51, 18, 30, -102, 61, -8, -34, 50, -42, 8, -44,
+ 19, -90, 58, 20, -21, -61, 59, -70, 63, -70, 14, -16, 43, -56, 50, 9,
+ -2, 41, -44, -44, 56, -36, 45, -80, 52, -5, 0, -6, 39, -72, 71, -13,
+ -7, 58, 43, -14, -21, 43, -24, 65, 36, -75, -8, 16, 0, 11, 40, -33,
+ -10, 11, -29, -17, 0, -12, -23, -63, 23, 17, 23, -3, 64, -21, 45, -62,
+ -17, 21, -23, -16, -39, 44, -9, -58, 107, -91, 69, -35, 15, -29, -5, 41,
+ 24, 35, -38, 28, -39, -7, -37, 47, -15, -19, -21, -61, 59, -39, -12, -65,
+ 84, -12, 0, -18, 14, -60, -6, -12, -10, -66, 46, -2, 6, -50, 16, -37,
+ 56, -4, -5, 29, 60, -78, 61, -61, 5, -32, -15, -31, 40, -9, -29, 25,
+ -73, 67, 45, -2, 44, -55, 48, 18, -25, 36, -8, 11, 17, 7, 35, 2,
+ -29, 18, 16, -43, 37, -36, -26, -51, 51, 17, -17, -4, -13, -7, 5, -65,
+ -17, -5, 22, -97, 29, 9, -62, 11, -44, -10, 10, 38, -34, 57, -26, 34,
+ -16, 27, 51, -29, 0, -42, -19, 47, 7, -13, 44, -18, 8, -5, 7, 62,
+ -79, 9, -58, 52, 91, -93, 93, -48, 26, 45, -81, 78, 3, -10, 51, -7,
+ -14, -1, 24, 17, 66, -61, 39, -10, 16, -65, 39, -72, 71, -7, -61, 46,
+ 63, -16, 18, 54, -64, 15, -62, 91, 5, -44, 78, -22, 44, -7, 38, -7,
+ -29, 27, -66, 60, -16, 48, -78, 43, 37, 37, -61, 59, -10, 3, 47, -7,
+ 42, 30, -12, -24, 9, 55, -61, 44, 26, -42, 7, 35, 37, -28, -67, 30,
+ -6, -55, 25, 45, 4, 11, 29, 17, 40, -42, 16, -42, 33, -13, 15, 24,
+ -39, -41, 30, -1, -17, -28, 19, -84, -10, 47, 57, -37, -42, -18, -68, 44,
+ -10, 27, 34, -37, 3, -21, 55, -27, 24, -47, 0, -35, 9, -58, 41, 27,
+ 8, 18, -55, 25, 57, -10, 31, -22, -23, 51, -28, -3, 42, -1, -12, -67,
+ 38, 0, -39, 19, -68, 71, -7, 13, -5, -31, 55, 35, -27, 31, 34, -14,
+ -13, 24, 24, -24, -1, 30, 12, 38, -58, 90, -66, 87, -53, 13, -42, -30,
+ 42, -54, -3, 37, -46, -12, -3, 9, 8, 19, 20, -23, -54, 84, -44, 33,
+ 54, -62, -24, -50, 0, 15, 21, 3, 10, -41, 29, 15, -27, 4, 20, -48,
+ 89, -25, -22, -21, 33, 22, 23, -31, -25, -25, 1, -8, -37, -13, 51, 57,
+ -33, 58, 32, 52, -13, 15, 24, -50, 79, -53, 41, -24, -63, -9, 28, -72,
+ 28, -12, -68, -4, -40, 49, -4, -34, 53, -1, -40, 12, 52, -25, 33, -51,
+ 6, 33, -9, -39, -45, 67, -54, 5, -52, 46, 43, -46, 10, -19, -22, -25,
+ 73, -30, 10, -47, -38, -33, 29, -44, 43, 48, 10, 20, -42, -28, 55, 24,
+ -52, -57, 40, -68, 48, 18, 34, -96, 60, -21, -38, -29, 24, -40, -12, -10,
+ 30, -67, 56, 21, -37, -37, 35, 27, -65, 18, -21, -5, -43, 8, -11, -33,
+ 20, -67, 32, 9, -39, 0, 10, 22, 8, 34, -70, 10, -63, 18, 72, 4,
+ -27, 36, -14, 0, -64, 3, -12, -38, 0, -51, 64, -22, 0, -52, 57, -77,
+ 26, 24, 0, 13, -6, 17, -28, 105, -72, -3, -18, -52, 84, -7, 80, -16,
+ -37, 2, -45, -11, 83, 1, -4, -28, 24, -17, 69, -47, 52, 46, -28, -25,
+ -19, 21, 10, -1, -61, -41, 49, -46, 60, -70, 7, 0, -14, -14, -37, 43,
+ 38, -51, 68, 10, 53, -41, 43, -19, -45, 51, -55, 29, -24, 7, -25, -41,
+ 41, -68, 35, 40, -50, 18, -67, 66, 15, -32, 5, -59, 29, -7, 87, -42,
+ 14, 14, 24, -40, -8, 43, -3, -31, 43, -61, 5, -3, 57, -35, -13, -37,
+ -13, 2, -12, 34, 23, -59, 12, -35, 17, -55, 18, -66, 18, 1, -1, -19,
+ -31, -14, 5, 34, -53, -65, 73, 46, -17, 25, -43, 57, 17, 9, -39, -34,
+ 18, -29, -75, -11, 8, -6, 67, -38, 44, 12, -27, -13, 88, -17, 5, -12,
+ 40, 37, 40, 44, 30, 8, 33, -22, -56, 12, 28, 17, -69, 0, -59, 58,
+ -6, -38, 29, -57, 50, -35, -31, 64, -36, 27, -57, -8, -21, 11, 5, -48,
+ 24, -71, 64, -12, 84, -9, 30, -52, -21, -52, 25, -25, 25, 69, -30, -39,
+ -34, 106, -71, 85, -27, -6, 6, 41, -43, 29, 15, 6, -50, 48, -15, 38,
+ 38, 15, -45, 58, -58, 54, 24, -6, -11, 38, 19, 39, 34, 9, -45, 64,
+ -22, 18, 6, 43, -59, 34, -21, -5, -41, 31, 41, -19, 39, -35, -61, -10,
+ 33, 2, -18, 46, -19, 25, 0, 67, -15, -3, -6, 46, -3, 43, -20, 61,
+ -43, -7, 10, -14, -5, -34, 42, -66, 58, -41, 52, 0, 18, -55, -28, 23,
+ 21, 14, 42, -34, -32, -59, 67, -26, 8, 24, -8, -38, 3, -27, -31, 23,
+ -3, 13, 38, 20, 46, 22, -78, 69, -93, 102, -51, 26, 43, -10, 19, 27,
+ -68, -43, 33, -48, -60, 40, -1, 7, -31, 50, 1, -21, 47, 34, -32, 50,
+ 8, -25, -1, -49, 50, 17, 2, -61, 11, -19, 62, -4, 19, -21, -63, 43,
+ -54, 34, 41, -15, 16, -26, 39, 10, -34, 48, -10, -24, -23, 24, 63, 19,
+ 61, -10, -22, 4, 34, -33, 55, -18, 46, 1, 55, -9, 62, -89, 21, -38,
+ 58, -46, 47, -29, 61, 23, -71, -18, -22, -3, -5, -17, 43, -12, -14, 41,
+ 16, 16, 26, 53, -47, 11, -29, -45, -7, -49, 48, -12, -67, 55, 20, -43,
+ -9, -40, -9, -86, 59, -30, -26, -28, 42, -11, 0, -10, 79, -59, 43, 17,
+ 22, -33, 16, 60, 12, 41, 50, -63, -39, 38, 18, -3, 2, 68, -52, 61,
+ -53, 37, 33, -27, -60, 70, -59, 57, 0, 86, -18, 18, -54, -46, -21, 69,
+ 9, -76, 61, -40, -62, 58, -16, -35, -3, 32, -54, 33, 24, -3, 21, -84,
+ -1, 2, -22, 17, 7, -16, 1, -52, 28, -80, 19, -27, -33, -31, 15, 11,
+ -40, -48, 75, -81, 77, -42, -20, 16, -36, 30, -53, 64, -40, 54, 35, 33,
+ -13, -44, -15, 29, 28, -45, -22, -32, -34, 28, 17, -66, 35, -65, 53, 11,
+ -35, 28, 32, -20, -2, -52, 22, -6, 13, 35, -10, -60, 62, 25, -43, -14,
+ -3, -13, -13, 4, 45, -2, -29, 37, -64, -9, -52, 59, -6, -53, 21, 12,
+ 26, -36, -32, -38, -33, 12, 57, -41, 70, -60, -1, 25, 2, -3, -39, -25,
+ 96, 5, 18, 0, 70, -54, -53, 60, -4, -36, -2, 49, -41, -67, 65, -72,
+ -10, 61, -35, 60, 18, -49, -24, 29, -8, -2, -33, -45, 75, -18, 6, 28,
+ 45, -58, -33, 9, -52, 12, -8, 7, 30, -67, -1, 87, -38, -26, -87, 38,
+ -90, 11, 0, 34, -10, 43, -33, -22, -5, 16, -27, -27, 27, 60, -15, 42,
+ 27, 8, 0, -22, -38, 38, 58, -71, 87, -50, 93, -61, 42, -60, 49, -10,
+ 33, -12, 1, -24, -24, 33, -22, 48, -18, 52, -53, -13, 38, -1, -43, 40,
+ -22, 29, 19, 3, -17, 3, 28, -5, 56, -21, 10, -12, 18, 18, -27, -35,
+ 40, 0, 5, -81, 8, -84, 30, 15, 68, -48, -22, 5, 10, -64, 41, -24,
+ 18, -4, -49, 11, -26, 9, -9, 56, -59, -61, -18, 29, -5, 26, 52, -65,
+ -4, 37, -42, 29, 18, -40, 20, -4, -26, 30, 23, 54, -64, 55, -13, 61,
+ -26, 51, -45, 20, -30, 30, 6, 0, -9, 66, -68, 82, 13, 2, -23, 35,
+ 19, 29, -25, -22, 21, 46, 31, -32, 43, 2, -53, 45, -61, 5, -8, -11,
+ -17, 27, 16, -15, -44, 40, -52, 79, -2, -24, 22, 36, 1, -27, 16, -43,
+ 34, 35, -32, -2, 51, 52, 21, 7, -51, 24, -10, 24, -1, -77, 62, 1,
+ 22, 29, -5, -22, -24, -3, 57, -35, 31, 52, 11, -29, 45, 43, -21, -4,
+ 14, 38, -44, 52, 28, 36, -47, -52, -3, 29, 8, -70, 31, -32, 33, 5,
+ -58, -56, 30, -34, -10, 17, 75, -46, 14, -17, 17, -2, -34, 95, -106, 82,
+ 21, -50, 18, -8, -80, 79, 3, 11, -23, 67, 5, -20, -24, -36, 20, -20,
+ -8, -6, 60, 36, 44, 24, -32, -14, 42, 1, 49, -91, 30, 37, 92, -66,
+ 84, -24, 57, -73, 30, -45, 41, -27, 1, -26, -13, -1, 12, -60, -15, -32,
+ -34, 57, -51, 16, 33, -62, 38, -1, 36, -18, -24, -6, -31, -10, 29, -42,
+ -54, 20, -32, 9, 1, 46, -4, 40, -55, 60, -38, 100, -74, 29, -32, 35,
+ -14, -57, 34, 12, -30, 23, -16, -20, -57, 28, -28, 2, -32, -65, 36, -20,
+ -8, 3, 2, 61, 22, -13, 33, 22, -32, -27, 60, -35, -10, 23, 34, 8,
+ 23, 16, 22, -33, 0, 47, -60, 15, 19, 18, 39, -20, 5, -50, 11, 61,
+ -67, -12, 50, 4, -2, 24, -27, 25, 15, -25, -32, -29, -49, -17, -61, 83,
+ -79, 35, -53, 36, 8, -7, -55, 56, -20, 14, -1, -32, -30, -14, 2, -29,
+ 45, -76, 77, -55, 16, -24, -42, -7, 11, -45, 24, 10, -4, 6, -7, -9,
+ -27, 3, 55, 14, 60, -65, 68, 8, -38, -18, 51, -50, 38, -54, 27, -23,
+ -57, 5, -45, 46, -78, 14, -86, 12, 27, 17, -20, -34, -15, 67, -12, 21,
+ -24, 5, 5, -31, 38, -57, 13, 24, -5, -5, -50, -32, 12, 10, -25, 32,
+ -46, 37, 5, -18, -50, -41, 52, 7, 76, -77, 56, -52, 75, -40, 76, -59,
+ 90, 6, -11, 10, 28, -48, -19, -22, 22, -16, -17, 15, -29, -13, 61, -41,
+ 2, -19, 36, -15, 30, -12, -65, 29, 53, -106, 75, 15, 2, 53, 31, -29,
+ 6, 0, -51, -39, -6, -16, 18, -39, 6, 14, -34, 48, -17, -32, -63, 44,
+ -31, 34, -66, 6, 7, -43, 66, -40, -18, 54, 14, -1, 12, 42, -25, -13,
+ 83, -48, 12, -20, -6, 14, -31, -28, -13, -2, 54, 1, 24, 52, -49, 26,
+ 39, -28, 7, 58, -43, -14, -49, 38, -66, 39, -8, -69, 39, -2, -37, -4,
+ 3, 17, 2, 74, -70, 75, -56, 18, 4, 26, 35, -54, 21, 80, 1, -9,
+ -51, 83, -47, 10, -47, 11, -60, 2, -18, 12, -23, 24, 32, 12, -76, 15,
+ -41, 52, -9, -2, 29, -35, 31, -24, -38, 3, -27, 48, -37, 87, -63, 11,
+ 55, -8, -4, -37, 30, -34, 23, 5, 39, -63, 3, 51, 51, 12, 1, -48,
+ 0, 54, 0, -30, -7, -26, 5, -5, 17, 44, 9, -9, 53, 42, -73, 50,
+ -69, -18, 36, -13, 8, 0, -4, 22, -2, 55, 2, -13, -35, 69, -12, 28,
+ 58, -39, -66, -12, -37, 31, -45, -39, 8, 15, -34, 8, 7, -15, 89, -9,
+ 36, 27, 76, -22, 24, -23, 50, 37, -71, 0, -15, 28, 36, -55, -13, -4,
+ -23, -15, 24, -29, 44, 39, -10, -43, -40, 47, 20, 66, -71, 53, -51, 21,
+ 0, -21, -71, 56, -23, 53, -4, -3, -11, -37, 52, 37, -58, 9, -9, -35,
+ 20, -66, 44, -37, 53, -71, 76, -55, 80, -43, 74, -66, -19, 61, -25, 16,
+ -69, 44, -34, 2, -3, 30, 62, -40, -73, 81, -60, -3, -41, -12, -41, 50,
+ -1, -24, 40, -12, 0, -2, -3, -39, 59, -16, -35, 60, -67, 51, -17, -31,
+ -1, 11, 38, -32, 10, 30, -40, 23, 19, -49, 10, -18, 43, -56, 46, -30,
+ -18, -50, 21, 11, -13, 53, 40, -5, -35, 60, -86, -2, 12, -39, 28, -71,
+ 36, -27, -15, -15, 31, 31, -8, -1, 39, 32, -83, 67, -55, 26, 69, -3,
+ 35, -4, -28, -33, -12, 42, -25, 22, 9, -37, 15, 49, -24, -18, -52, 27,
+ 40, -43, -59, -7, 78, -70, 72, 39, -76, 53, 0, -34, 12, -24, 51, -6,
+ -15, -39, 12, -43, 34, 13, 51, -51, 73, 3, -23, -13, 38, -59, -16, 6,
+ -12, -20, -39, 10, -66, 63, -53, -42, 21, 43, 17, -30, -48, 4, 59, -8,
+ 41, -57, 50, -30, 64, -1, 11, 26, -61, -47, 20, -46, -7, -1, 16, 29,
+ 14, 49, -58, 50, 11, 20, -22, 10, -7, -58, -43, 41, 13, -72, 9, -14,
+ -2, -34, 100, -33, 25, 9, -36, 24, 0, 14, 44, -71, -13, -2, -76, -25,
+ -18, -11, -71, -23, -13, 11, 17, 22, -17, 40, 34, -39, -36, -11, 54, 25,
+ -20, 19, 9, 25, -27, -54, -3, 69, 62, -22, -28, -51, 73, -62, -9, 68,
+ -14, -43, 76, 1, -11, -1, -4, -64, 45, -36, -31, 36, 12, -40, 6, 17,
+ 45, -6, -12, 72, -66, 38, 32, -39, -76, 67, -68, 110, -66, -6, 44, -7,
+ 37, 29, -32, 0, 2, 14, -33, -15, 48, 22, -29, -32, 75, -32, 53, -20,
+ 14, -26, -15, 57, -34, 2, 86, -15, -14, -12, -6, -14, 49, 27, 31, -9,
+ 69, -102, 48, -38, 52, -54, 17, 37, -50, 57, 34, 57, -87, 56, -30, 17,
+ 32, 60, -47, 49, -41, -18, -72, 0, 29, -39, 84, -9, -34, 18, 36, 39,
+ -11, 18, -3, -34, 63, -55, -20, -47, 21, 8, 32, -3, 27, -20, -52, 17,
+ -53, 29, -17, -27, 33, -62, 32, -63, -6, -15, -4, -18, 72, -25, 6, 14,
+ -73, 80, 38, 61, -116, 121, -98, 17, 16, 13, -29, 33, -39, 18, 44, -41,
+ -8, 0, 0, 59, -28, -29, -62, 48, -50, -5, 7, 0, 20, 89, -78, 35,
+ 58, -50, 72, 35, 55, 11, 23, 54, 19, -62, -13, 38, 57, -25, -27, -20,
+ -8, 30, -51, 59, -10, -46, 21, 41, 39, -22, 11, 28, -42, 34, -31, 33,
+ -15, -50, 68, -9, -46, 37, -32, 36, 27, 20, 13, 19, 10, 41, -55, 18,
+ 3, -18, -62, 55, -39, 41, 32, 31, 24, -41, -3, 79, 11, 31, 78, -22,
+ -19, 58, 50, -5, 21, -49, -38, -40, 22, 31, -86, 57, 43, -24, -30, -53,
+ 23, -25, 34, 21, -46, 49, 14, -65, -71, 17, -52, 79, -91, 91, -62, -41,
+ 47, 22, 0, -45, 43, -5, 3, 55, -2, 38, 4, -16, -49, 71, -51, 10,
+ -52, -17, -25, -41, 30, 23, -30, 31, 72, -17, 44, -81, 39, 18, -34, -4,
+ -54, 27, 5, -35, 32, -63, 86, -70, 72, -38, -32, 94, -61, 12, -17, -14,
+ 5, -14, 43, -21, -24, -28, -27, -59, 14, 48, -34, -9, -35, -7, -17, 12,
+ -69, 82, -13, 52, -61, 36, 42, -57, -7, -56, -60, -41, 32, -16, 47, -60,
+ 30, -46, -17, 41, -37, -1, 54, 45, -25, -8, -66, 6, 6, 19, -66, 31,
+ -4, 40, -4, 31, -14, -16, 38, 0, -31, 9, -14, 30, -26, -30, 72, -55,
+ 30, -51, 49, 11, 11, 47, 6, 49, 34, 35, -7, -19, -46, -17, 40, 32,
+ -33, -23, -43, 10, 48, -55, -14, 53, 5, 6, 44, -44, -22, 50, -69, 31,
+ 65, -56, -14, -38, 49, -45, 30, 24, 18, 41, -29, -21, -4, -84, 64, -6,
+ -8, -45, -30, -20, -39, -12, -34, -49, -45, 78, -64, -7, -9, -13, -38, 36,
+ -6, 10, -26, -41, -10, 28, -54, -19, 0, -19, -20, 34, -9, -39, -36, 61,
+ -47, 45, -59, 15, -43, -14, 22, -15, -28, 15, 35, -89, 48, 20, 0, -16,
+ -27, 44, 0, 36, -67, 12, -64, -16, 15, -7, -13, -76, -2, 22, -82, 81,
+ -37, -25, -3, -35, 16, 68, 7, 50, -4, -43, 76, -31, -48, 17, 51, 24,
+ -29, 22, -7, -69, 57, -51, 18, 23, 92, -65, 79, -43, 17, 43, -24, 89,
+ -93, 46, -52, 31, -24, 20, 4, -64, -55, 24, 7, -8, -6, -6, 71, -48,
+ 95, 0, -13, 50, 17, -75, 16, 25, -85, 0, -72, 70, -61, -2, 30, -49,
+ 79, -30, 37, -11, -6, 22, -11, -8, -71, 64, 4, -58, 0, 12, -7, -5,
+ 37, 21, -50, 1, 39, 38, -17, 67, 59, -72, 39, -28, 71, -39, -1, 8,
+ 63, -76, 61, -87, 46, -53, -28, 69, -37, 82, 43, 25, -8, -2, -39, -32,
+ 92, -58, 36, 4, 30, 32, -37, 23, -28, -23, 70, 30, -32, -5, 10, -66,
+ -5, -22, -29, -27, 24, -30, 34, 43, -46, 54, -25, 8, -49, 23, 34, -63,
+ 60, -21, 39, -3, -19, -24, -37, -27, -21, -29, -19, 47, 32, -6, 33, -82,
+ 57, 38, -10, -1, -27, 34, -26, -4, -53, 52, -67, 25, 15, -85, 62, -56,
+ -11, 0, 56, 33, 54, -18, -16, -35, -17, 27, -14, -12, -9, 86, -37, -45,
+ 62, 48, 49, -19, -14, 47, -2, 0, 44, -10, 46, -29, 44, 6, 49, -3,
+ -50, 40, -36, 66, 8, 14, 1, 5, -19, 17, 12, 5, -2, 45, 44, -41,
+ 18, -8, -4, 73, -18, 81, -39, -34, 41, -58, 35, -20, 12, -49, 45, -12,
+ 78, -82, 12, 2, 20, 64, -59, 78, -38, 22, 0, 70, -8, -11, -7, -40,
+ 29, 12, -76, 83, -51, -21, -56, 63, -58, 47, -51, 56, 56, -59, 7, 31,
+ -49, -36, 11, 35, 48, 16, 14, -30, -38, 13, -55, 52, -7, -38, -29, -28,
+ 59, -31, -33, 48, -33, -51, 54, 11, 54, -57, 2, 30, -27, -21, 18, -30,
+ -25, -80, 83, -85, 47, 24, 4, -55, 89, -2, 63, -60, 97, -61, 18, 21,
+ -70, 45, -19, 26, -37, 4, -60, 81, -24, -2, -7, 16, 73, -51, 52, -54,
+ -18, 47, -41, 90, -65, 18, -50, -42, -50, 79, -1, -18, -43, -9, 34, -58,
+ -15, -12, 42, -16, 26, 75, 3, -65, 64, -106, 32, 12, -19, 0, 19, 21,
+ -87, 38, -25, -16, -35, 0, 11, 17, 21, -22, 22, -36, 9, -3, 13, 54,
+ 32, -7, -2, 14, 2, 18, 16, -53, 44, -45, 20, 23, 50, -17, -13, 93,
+ -77, 56, -58, -5, -6, 24, 31, 21, 27, 29, -19, 4, -82, 60, -78, 87,
+ -51, 14, -14, 48, -26, -52, 46, 18, -6, 9, 44, -42, 45, 86, -81, 76,
+ 44, -9, -40, -32, -53, -46, 54, 32, 12, -53, -34, 68, -65, -18, 16, 22,
+ -66, -57, -33, -1, -46, 57, 10, -23, 6, -37, 25, -15, 16, -57, -3, -9,
+ -1, 14, 0, -32, 38, -11, -27, 23, 16, 9, -44, 29, -72, 65, -77, -24,
+ 84, -41, -5, -60, -19, -52, 18, 19, 4, 19, -83, 78, -13, 16, -59, 56,
+ -76, 82, -46, 76, -82, 2, -24, 23, -58, 49, -24, -55, 53, 1, -25, 45,
+ -12, 9, 56, -24, 25, 19, -2, -63, 59, -33, -11, -51, 2, -14, -49, 1,
+ 54, 0, 41, -52, -27, -77, 64, -52, 85, -54, 27, 4, -23, 64, 34, -30,
+ 7, -9, -6, 26, 28, 57, -69, -14, 55, -59, 50, 0, 26, -40, 13, 14,
+ 1, 80, -36, 27, -45, -39, 64, -71, 7, -42, 5, 70, -66, -30, 71, -31,
+ 26, 4, -3, -8, 0, 19, 75, -73, 19, 32, 55, -58, -61, 2, 20, 17,
+ -13, -39, -23, -28, -19, 60, -36, 99, -10, -59, 67, -18, -18, 43, 8, 58,
+ -11, 15, -58, 42, -76, -30, -72, 88, -66, 101, -67, -22, -8, 19, 14, -17,
+ 41, 0, 49, -37, 60, -22, -11, -56, 17, -38, 1, 13, 42, -29, 20, -43,
+ 4, 21, -54, 67, -74, -15, 18, -38, -20, 51, -38, 3, -35, -13, -46, -19,
+ -49, 70, -37, 50, -51, -10, 9, -38, 9, -17, -12, 29, 20, 4, 45, -75,
+ 27, -22, -26, 15, -17, 28, 0, -2, 13, -22, -63, 36, -47, -71, 79, -72,
+ -29, -47, 79, -46, 53, 29, 10, -77, 55, 24, 44, -29, 32, 35, 32, -76,
+ 72, 37, 15, -9, 35, -84, 13, 40, -83, 48, -11, -8, -44, 10, 25, -22,
+ 34, 2, -3, 10, -18, -29, 58, -35, -26, 13, 31, 29, -16, 11, 47, -61,
+ -17, -14, 6, 77, 4, -4, 48, -2, -45, 7, 53, -33, -42, 22, -2, 24,
+ -41, -23, -7, -22, 3, 69, 0, 8, 1, 11, -32, 51, -46, -49, 55, -7,
+ 0, -39, -34, 18, -28, -13, 0, 14, 24, 1, -47, 86, 14, 20, 43, 6,
+ 45, -52, -16, 31, -44, 121, -63, 23, -15, 30, -32, 14, 39, -72, -32, -20,
+ -15, 1, 30, 28, -67, -20, 11, 64, -30, -13, 47, -46, -25, 65, -34, -30,
+ 33, -59, 25, 27, -36, 63, -50, 84, -31, 18, -3, -51, 41, 29, -77, 53,
+ -30, -58, 47, -30, 1, -32, -29, 38, 16, -39, -66, 60, 46, -41, -29, 33,
+ -7, 61, -37, 59, 7, -22, 34, -62, -9, 12, -42, 24, 29, -29, 24, -54,
+ 30, -21, 17, 44, 6, 58, 40, -1, -61, 41, -51, 92, -70, 22, -11, 29,
+ -30, 46, -19, -38, 25, -34, 3, 48, -30, 11, 15, -61, 75, -63, -12, 14,
+ 0, 53, -1, -38, 80, -46, 20, 75, -33, -57, 70, -49, 67, -37, 71, -21,
+ 19, -6, -9, 41, -23, 29, -1, 48, -23, -13, -19, -6, -23, -35, 36, 69,
+ -39, 6, -12, -17, 8, 63, -65, 40, -57, -52, 76, 42, -28, 64, -82, 98,
+ -43, 45, 0, 18, -32, -30, 8, 43, -60, 19, -62, 60, -48, -48, 22, 10,
+ -14, -4, 11, -60, 13, 39, 13, -7, 49, 26, 11, -3, 51, 47, -5, -26,
+ 38, -77, 66, -60, 29, 40, -73, 95, -38, -39, 20, -26, 4, -54, 22, 55,
+ 27, 6, -65, -6, -18, -61, 9, -29, 67, -57, 29, 20, 2, -35, 49, 41,
+ -28, 64, -59, 72, -11, -65, 28, 22, -6, -31, 57, -8, -18, 56, -14, -33,
+ 3, 28, 39, 24, 37, 13, -33, 32, 45, -68, 58, -53, -15, 23, -54, 27,
+ -17, -1, -5, 38, -27, -65, -5, 6, -8, 10, -27, 30, -68, 67, 55, 0,
+ 26, 62, -46, -1, -2, 19, -34, -47, 11, 60, -72, 63, -9, -29, -19, 36,
+ -13, 52, -52, 3, 1, 6, -18, -68, 69, -53, 60, -46, -22, 27, 5, 42,
+ -17, 56, -64, 85, -34, 45, -68, 43, -33, -6, 3, 19, -17, 54, -6, -51,
+ 0, 0, 36, -47, -10, 50, -50, 43, 9, -55, 16, -15, 35, -45, 26, -3,
+ -57, 92, -61, -22, 22, -30, -9, -21, 25, -8, 61, -51, 45, -1, -8, -44,
+ 11, -26, -5, 58, -75, 42, -38, 0, 8, 48, -47, 29, -54, 73, 42, -43,
+ 71, -77, 18, 3, -41, 22, 13, -81, 21, 15, -1, 13, -52, 78, -10, 15,
+ -17, -31, 17, -19, 31, 52, -91, -7, 25, -4, -49, 74, -63, 96, -50, -84,
+ 72, -3, 23, 3, 4, -22, -19, 25, 48, 72, -23, -67, 58, 19, 17, -95,
+ 88, -75, -2, 27, 49, -5, -29, 15, 53, -19, 30, -78, 6, 46, -62, 16,
+ -15, 25, 27, 13, 58, -56, 9, 33, -39, -76, 53, -50, -40, 0, -37, -50,
+ 6, 4, 18, 11, -30, -18, 5, -71, 57, 59, -48, 8, 54, -25, 61, -113,
+ 57, -20, 47, 23, 61, 13, 30, -53, 35, 21, -62, 58, -46, 31, -96, 30,
+ -72, 69, -29, -18, -14, 23, -5, -47, -19, 1, -14, 29, 2, -53, 54, 39,
+ -66, 20, -18, -76, 3, -23, -2, -9, -57, 61, -24, 9, -50, -6, -32, -13,
+ -13, -25, 17, -21, 25, 57, -13, 39, -18, -51, -8, 49, -12, -17, -9, 6,
+ -52, -52, -1, 25, -3, -3, 37, 4, -36, -47, 67, -58, -29, 70, -4, 27,
+ -13, -77, 68, 1, 34, -8, 20, -2, 0, 74, -88, 82, -36, 2, -41, -20,
+ 12, -5, 60, -77, -2, 33, 18, -13, 60, -15, 63, -27, 2, -44, 62, 11,
+ -15, 66, -44, 14, -10, 26, 30, -73, 38, 3, 32, 32, -62, 16, -22, 47,
+ -27, -46, 54, 7, -37, 14, -37, -44, 29, 38, -43, 0, 10, -46, 32, 45,
+ -43, -1, 0, 14, 53, 27, 30, 6, -2, 13, -1, 27, -40, -50, 15, -62,
+ -20, -16, 19, -12, 32, 12, -19, 37, -3, 47, -68, -22, 7, -56, -35, 29,
+ -8, 24, -24, -19, -10, -84, 77, 18, 18, 16, 12, 33, 23, -56, -32, 100,
+ -57, 14, -13, -28, -1, -66, 64, 52, -81, -30, -24, 25, -52, -36, 63, 0,
+ 33, -31, 53, -59, -14, -10, 57, -67, -46, 5, 31, 49, 11, 16, 44, -38,
+ 38, -38, -38, 28, -46, -28, 58, -55, -22, 59, 1, 16, -30, 5, 46, 44,
+ 9, -8, 61, -40, 7, 82, -45, 17, -4, -45, 26, -22, -53, -30, 2, 62,
+ -31, 26, -44, 9, -64, -5, 48, 0, -29, -12, 32, -6, -39, 63, -1, 77,
+ -16, 2, -51, 60, -27, -20, -36, 83, -37, 34, -38, -22, 23, 34, -67, -34,
+ 22, 4, 39, 40, -32, 102, -70, 26, 14, -50, -20, 15, 66, 13, 12, 39,
+ -21, 74, -39, 55, -87, 18, -3, -20, -7, 60, 55, -44, 36, -44, 25, -69,
+ 88, -2, 59, -54, -2, 21, 0, 8, 73, -51, 3, 39, 56, -56, 7, -38,
+ -39, 58, 8, -63, 32, -22, 4, -54, -16, -3, -25, 18, -23, 30, 44, 0,
+ -39, 4, -23, 16, 0, -22, -1, 3, -11, -35, -15, -32, -14, 53, -69, -6,
+ 26, -91, 35, -8, 30, -50, -18, 39, -23, 20, -37, 56, 8, -16, -21, 43,
+ -83, 98, -51, 16, -31, 52, 45, -17, 57, -60, 52, 4, -59, 71, 9, -4,
+ 47, -17, -41, -22, -54, 9, -79, 55, -72, -14, 13, -22, 51, -23, -11, 59,
+ -57, 65, -7, -5, 17, -65, 40, -26, -25, 2, 83, 6, 6, 61, -33, 29,
+ -17, -8, 64, 1, 27, 58, -70, 45, -27, -42, 30, -33, -46, 81, -70, -24,
+ 49, -42, 41, -19, 25, 51, -65, -38, 60, -47, 67, -74, 118, -78, 28, -57,
+ -5, -17, 25, -15, -6, 14, 34, -7, 77, -33, 21, -74, -8, 16, 4, -18,
+ -20, 27, -5, 35, -18, 61, -76, 67, -7, 54, -69, 17, 35, -23, 9, -74,
+ 72, -37, -19, -15, -43, -21, 10, 22, 16, 5, -72, 68, 44, 32, -43, -45,
+ -14, 13, 44, 4, 8, -59, 31, -62, 62, -10, 28, 43, -58, 33, -30, -82,
+ 55, 23, -25, 51, 24, 19, 52, -51, 28, 7, -15, 62, -25, -29, 71, 38,
+ -53, 58, -47, 7, -38, -65, 43, 25, 13, 19, 26, 18, -85, 36, 26, -84,
+ 26, -107, 64, -74, 51, 21, 4, 15, 33, -82, 8, -57, 19, -17, 36, 21,
+ -18, -40, -26, 26, -43, 54, -55, 35, -33, -15, 26, 1, -70, 34, 25, 24,
+ 25, -6, 47, -28, -5, -16, 55, 56, 6, -28, 24, 8, 19, -39, 8, -28,
+ 28, 15, -8, 10, 38, -59, 55, -63, -2, -19, 60, -18, 48, -56, 110, -56,
+ 49, 42, 10, -38, -30, -8, 54, -13, -8, 12, -31, -20, -53, 79, -22, 5,
+ 25, -63, 22, 5, 10, -49, 12, 18, -30, -1, -20, -26, 46, -50, -20, -43,
+ 21, 11, -6, 57, 72, -51, 20, 1, 55, 20, 4, 25, 6, -12, 33, -9,
+ 40, -33, -50, -3, 23, 27, 27, 6, 59, -62, -52, 8, -15, -12, 59, -50,
+ -27, -11, -21, -21, 0, -17, 39, -32, 11, 7, -38, -11, 55, -5, 52, 62,
+ -64, 32, 36, 9, -40, 27, 12, 31, -59, 24, 26, -11, -68, 64, 10, -27,
+ 57, 5, -26, -1, -35, 42, -50, 4, -50, 11, -17, 72, -56, -19, 25, -31,
+ -24, -2, -5, -3, -4, -40, -4, 10, 43, -62, -23, 45, 27, -22, 42, 23,
+ -63, -27, 93, -50, 92, -55, -3, 23, -18, -47, 74, -24, -10, -1, 7, 62,
+ -23, -12, -10, 7, -1, 48, 0, -5, 5, -11, -55, -34, 55, -38, -32, 86,
+ -36, -45, -32, -11, -48, 23, -88, 36, 10, 58, -56, -22, -19, 63, -78, 27,
+ -63, 35, -31, 60, -27, 78, -98, 78, -75, -9, -21, 64, 0, -16, 10, 28,
+ 0, 60, 36, 10, -11, -45, 14, 3, -53, 30, 38, 5, -12, 71, -69, 30,
+ 0, 43, -24, 32, -32, -8, 53, -39, 42, -32, -1, -18, 78, -62, -34, 4,
+ -36, -19, -48, 52, -40, 37, -75, -35, -43, 38, -3, 21, -19, 58, -17, -10,
+ -3, -10, 45, 3, -55, 78, -69, 80, 40, -14, -48, 19, -17, -11, -69, 6,
+ -41, -16, -21, 14, 89, -65, 20, -78, 79, -51, 74, 26, -13, -48, 43, 5,
+ 37, 38, 11, -44, 10, 26, -55, -4, 44, -18, 6, -4, 0, -35, 48, 26,
+ -15, 55, -60, 10, -75, 53, 21, -54, -56, 0, 32, -39, 18, 4, -59, 54,
+ 0, 1, 81, -39, -31, -57, -10, 40, -75, 94, -22, 31, -20, -28, -11, 29,
+ 74, -4, -24, -17, -49, 68, -54, -31, -26, 47, 12, -30, -7, 9, -77, -51,
+ -53, 66, -58, -42, 47, 36, -32, -22, 56, -30, 38, 30, 3, -46, 1, -26,
+ 11, 13, -12, 31, -20, -25, 19, 28, -5, -54, 57, 13, -16, 19, -8, -3,
+ 30, 39, 12, 27, 8, 72, -71, 6, -62, 98, -70, 7, -73, 0, 10, -40,
+ 75, -32, -26, -12, -32, 16, 18, -6, 26, 6, -18, -19, 12, -50, 65, -27,
+ -43, 52, -67, 59, -8, -38, -36, -11, 58, -68, 72, 46, -10, 12, 12, -35,
+ 9, 19, 58, -47, 16, 15, 79, -27, -37, -37, 14, 37, 7, -8, -17, 31,
+ 66, -61, 19, -35, -18, -28, 61, -39, 27, 28, -32, -39, -31, 51, -14, 43,
+ -37, -20, -61, 40, 54, -43, -11, -7, 3, 63, -83, 73, -45, -38, 42, -35,
+ 16, -62, 31, 40, 12, -6, -37, -24, 50, -16, -3, -36, -62, 114, -46, 47,
+ -8, -6, 53, -14, -35, 41, 6, 50, 45, -20, 24, -91, 64, -35, 5, -7,
+ -33, 68, -103, 78, -41, -12, -7, -46, 0, 15, -7, 52, 0, 12, 35, 62,
+ 25, -6, 16, -38, -35, 44, -2, 65, -39, 19, -56, -35, 49, -20, 16, -38,
+ -23, 1, -58, 3, 60, -40, 32, -34, 44, -50, -9, 7, -4, 72, -29, -13,
+ -30, 18, -28, 6, 35, -52, 1, 60, -7, 13, -36, -51, 50, 41, -25, -39,
+ 35, -34, 4, -15, 77, -22, 27, -17, 18, -48, -47, 78, -70, 37, -40, 0,
+ -45, 3, 56, 23, 38, -23, 17, 57, 4, 12, -61, 64, -9, -21, 69, 47,
+ 13, 12, 5, -18, 34, -76, -32, 25, -26, -10, -20, -37, 20, 11, -6, 49,
+ -58, -8, -3, 12, 15, 55, 0, -29, 22, 37, -57, -48, 46, 24, 58, -4,
+ 2, -12, -53, 3, -22, -60, 73, 11, 6, -41, 43, 17, 26, -23, 9, 28,
+ 31, -57, 23, -13, 63, 7, 20, -9, -6, 48, 3, -25, 42, 15, -51, -15,
+ 66, -83, 90, -52, -41, 33, 31, -20, 29, 5, -68, 19, -76, 75, -47, 28,
+ 37, -1, -57, 73, 10, -72, -6, -57, 73, 26, -26, 16, -57, 46, -28, -44,
+ -16, 70, -63, 52, 12, 70, -80, 11, 11, -38, 62, 2, 5, -15, -9, -39,
+ 75, 0, -28, -5, -16, -6, 29, -6, -11, -20, -8, 2, 49, -30, 12, 12,
+ -22, 43, -46, -77, 41, -27, 43, -35, 34, 0, 34, 61, 51, -73, -13, 32,
+ 13, -19, 0, -22, 42, 22, -6, -66, -59, 55, -34, 58, -38, -8, -28, -7,
+ 56, -46, 24, -21, 55, -43, 45, -13, 25, 9, -20, -30, -5, -7, -35, -84,
+ 36, -4, -50, 26, -33, 14, -12, -21, 42, -32, 4, 61, -59, 29, -4, -13,
+ -42, 85, 14, 43, -58, 0, 53, -18, 50, -60, 91, -33, 33, -71, 25, -15,
+ -4, 0, 33, 19, -51, 8, -34, 24, -17, 7, 21, 57, -27, -78, 91, -20,
+ -58, 18, 58, -28, -82, 37, -22, 62, -77, 86, -33, -5, 26, -12, 66, -27,
+ -42, 48, -83, 3, -55, -8, -38, 4, 12, 21, 8, -73, 68, -26, -57, 25,
+ 11, -55, -46, 33, 19, 36, 73, -58, 52, -63, 64, -11, 19, -4, 8, 5,
+ -12, 76, -58, 43, -50, -18, -53, 77, -68, -16, 70, -57, 25, -53, -74, 9,
+ -13, -29, 36, -26, 76, -32, -20, 11, -24, -56, 36, 13, 12, 15, 25, -68,
+ -8, 28, -7, 13, -90, 44, -37, -24, -34, -30, -55, 56, -17, -27, -17, 63,
+ -34, 46, -53, 10, 76, -24, 59, -52, -6, 20, 71, -30, 17, -7, -44, 67,
+ -78, 60, -14, -61, -1, 58, -27, 71, -72, 9, 7, 11, 74, -74, 50, -20,
+ 31, -18, 9, 3, -70, -25, 46, 21, -58, 14, -1, 14, -21, -20, 22, -2,
+ -69, 72, -16, 37, 3, 22, -25, 58, -25, -13, 32, -42, -38, 73, -6, -61,
+ 27, 32, 7, 69, -18, -6, -29, 9, -54, -8, -43, -50, -15, 21, -25, -16,
+ -40, 60, -42, -34, -7, -13, 28, 28, 34, -65, 34, 18, -21, -31, 51, 42,
+ -54, 36, 2, 10, -32, -42, 79, -64, 15, -53, -3, 44, -13, 44, -27, 88,
+ -23, -15, 79, 0, 27, 15, -11, -3, -63, 2, -13, -17, 33, -5, -42, 61,
+ -42, -55, 2, -44, -4, 3, -37, 8, -25, 11, -17, -24, -3, 44, -70, 25,
+ 77, -47, 2, 23, 16, 56, -56, 61, -45, 11, -4, -28, -33, 95, -63, -18,
+ 40, -17, -21, -37, 90, 7, 34, -31, 21, -51, 3, 15, 27, -5, -49, 50,
+ -3, 19, 39, 1, 41, 51, 13, -21, -4, 43, -35, 27, 11, -33, 52, -11,
+ 22, 56, 0, 7, 23, -37, -55, -9, 12, 46, -59, 15, -24, 32, -33, 50,
+ -34, -57, 31, -12, -32, 87, -26, -6, 66, -24, 45, -25, 43, -6, 63, -11,
+ 26, 21, -32, -27, 20, -38, 45, -56, 53, -1, 25, -65, -32, -8, -46, 41,
+ 3, -7, 47, -5, 57, -70, 85, -15, 39, 62, 34, -30, 2, 14, 49, -44,
+ -42, 35, 0, -57, -9, -34, -8, -57, 75, -60, -19, -31, 8, -8, 43, -50,
+ 0, -4, -4, 44, 16, -16, -9, -14, 23, -41, 44, -49, -48, 66, -34, -6,
+ 23, 34, -57, 56, 29, 30, -63, 6, 33, -13, 55, -18, -52, 23, -19, 4,
+ -1, -41, 19, -52, 5, 1, 0, -76, 55, -17, -59, 77, -38, 12, -61, 89,
+ -56, -15, 29, -56, -57, 70, 20, 42, -14, 49, -10, 41, -16, 28, 40, 8,
+ 86, -72, 52, 14, 35, -49, 14, -10, -3, 56, -27, 38, -1, 54, -20, 1,
+ -36, -9, 37, -25, 2, 31, -52, 58, -21, 72, -50, 16, 31, -61, -22, 17,
+ -17, -16, -56, 47, -83, 40, -25, 62, 28, 48, 20, -37, 30, -60, 61, 30,
+ -7, 46, -30, 98, -32, 15, 6, 25, -19, 68, 4, -7, -68, 53, 40, -13,
+ -28, -28, -37, -47, 23, 3, -17, 36, -18, 64, -66, 26, -9, -38, -12, 52,
+ 51, -19, 56, -23, -44, -5, -69, 41, 3, 37, 21, -7, -5, 2, 38, -2,
+ -6, 37, -84, 7, -36, -36, 7, -36, -9, 6, -16, -11, 0, 31, -55, 0,
+ -87, 27, 3, -18, -27, 11, 37, 33, -58, 29, -34, 66, -36, -51, 22, -7,
+ 39, 52, -25, 17, -62, 16, 1, 5, -72, 17, -12, 23, -40, 26, 19, -36,
+ 1, -33, 11, 36, 46, -11, -19, 43, 9, 6, 16, 39, 48, -12, 30, 20,
+ -77, 68, -61, -27, -14, 8, -32, 6, -32, -84, 64, -50, 26, 21, -6, -36,
+ 61, 19, 26, 42, -21, 8, 22, 71, -47, 8, 90, -69, 85, -22, 51, -50,
+ -11, 56, -55, 44, -36, 42, -31, -2, 24, -27, 50, -12, -18, -2, 43, -24,
+ -7, -30, 40, -49, 34, -6, -21, 49, 24, -46, -84, 49, 38, 31, 66, -62,
+ 82, -30, -36, -12, 49, -54, 61, 13, 21, 8, 56, 17, -56, 8, 55, -78,
+ 43, -7, 17, -12, 94, -81, -30, 52, -28, -20, 42, -55, -16, 43, -58, -32,
+ -38, -6, 29, -55, 47, -16, 21, 0, -39, 15, -16, -37, -50, -56, -15, 33,
+ 40, -23, -12, 37, -59, 57, -5, -19, -30, -20, 16, 29, -68, 32, 58, -3,
+ -35, 26, -4, 12, 34, 42, -31, -62, -13, -9, -38, 20, 0, 36, -46, -57,
+ 28, 35, -49, -51, 29, 15, -10, 38, -70, -50, 27, -45, 79, -40, -2, -50,
+ -41, 50, 20, 57, 40, -35, -36, -6, 15, -53, 75, -22, 6, 2, 55, -61,
+ -56, 36, -61, 40, -42, 73, 9, -23, -48, -32, 26, -59, 69, -35, -53, 59,
+ -82, 33, 9, 20, 17, 42, -50, 34, -1, -36, 43, -15, -5, -26, 21, 1,
+ 75, 22, -60, -7, 23, 4, 0, 5, 53, -35, 38, -11, -11, 57, -17, 11,
+ 12, -73, -6, 0, 64, -1, -52, -5, 21, 14, 12, -51, 4, -40, 14, -28,
+ 58, 3, -2, -29, -46, -67, 44, -3, -69, 33, -45, 13, -48, 37, -78, 75,
+ 25, -15, 16, -5, 41, -19, 29, -3, 16, 13, 12, 4, 5, -82, 45, -49,
+ 25, -55, -1, -1, -23, 23, -35, 4, -39, 26, -83, 44, -36, -19, -13, 52,
+ -17, 36, -21, -2, 26, -49, 49, 31, -14, -1, -54, 37, 1, -39, -30, -34,
+ 2, 3, 1, 18, -25, -53, 77, -81, 5, 72, 35, 28, -59, -46, -21, 20,
+ -67, 64, 45, -21, 40, 34, -53, -10, -34, 15, -60, 17, 36, -50, 5, 41,
+ 13, -12, -3, 29, -42, -22, 96, -74, -9, 23, 20, -40, 49, -64, 49, 70,
+ -57, 29, -15, -53, -31, 19, -31, 35, -21, 17, -51, 91, 25, 61, 29, -31,
+ -34, -11, -48, 17, 34, -74, 36, 23, 38, 37, -51, -3, 29, 23, -35, -59,
+ 21, 50, -92, 63, -31, -10, 4, 29, 20, -18, 15, -27, 5, -17, 48, 37,
+ 40, -100, 31, 46, -58, -21, -34, 12, 34, 19, -16, 36, -59, 46, 4, 42,
+ 26, 13, 1, -62, -31, -61, 98, -77, 27, 9, 1, -9, -38, 6, -37, -5,
+ -16, -4, 21, -25, 58, -82, -2, 38, 68, -45, 50, -29, -68, 57, -53, 22,
+ -20, 24, 22, -16, 19, -5, 31, 6, -23, -30, 38, -29, 13, 25, 6, -51,
+ -2, -36, 67, 4, 17, -31, -7, -25, -15, -28, 17, -26, 25, -14, -37, -48,
+ -12, 52, 27, -27, 18, -15, 91, -70, 63, 17, 2, 3, 30, -58, 63, -45,
+ -27, -13, 4, 45, 7, 49, 23, 7, 51, -22, -14, -12, 34, -60, 34, -51,
+ -38, -10, -9, 36, 19, -21, 28, 13, -37, -2, -43, 22, -34, 55, 13, 27,
+ -45, 21, -20, 49, -31, -25, 54, -38, 4, 30, 9, -19, -22, -25, 22, -30,
+ -41, 42, -22, -14, -12, -58, 27, -53, -22, 17, 34, 9, 12, 59, -25, 97,
+ -59, 46, 3, -31, -19, 29, -42, 56, 0, -69, -72, 36, -21, 32, 37, -6,
+ 9, -81, 7, 20, -66, -47, 65, 4, -55, 85, -66, 16, -5, 6, 15, 7,
+ -26, -3, -51, -1, 58, 0, -46, 25, 34, -56, 66, -4, 5, 68, -55, -54,
+ 77, -18, 2, 69, 37, 7, 8, -55, 24, -6, 48, -45, -63, -38, 35, -21,
+ 43, 47, 26, 32, -54, 79, -75, 47, -48, -36, 15, 20, 16, -45, 31, 72,
+ -56, -9, 82, -54, 6, -4, -61, 15, 18, 27, 11, 56, -62, 47, -36, -63,
+ 29, 57, 27, -81, 75, 13, 31, 24, 37, -51, 13, 0, 28, -21, 9, 22,
+ -64, 2, 31, -25, 63, 61, -74, 43, 31, -72, 44, -61, 80, 33, -30, 51,
+ 28, 27, 16, 9, 16, 55, 0, 12, -66, 4, -10, 51, 52, -55, 53, 46,
+ -5, -10, -48, -6, -8, 0, -19, 3, 29, 44, -39, 13, 17, 24, 0, 21,
+ 18, -14, -45, -11, -55, 8, 40, -59, 55, -34, -29, 39, -37, 65, -13, 68,
+ -52, 27, -6, -56, 46, -60, 0, -1, -66, -32, -37, 36, 15, 10, -24, -4,
+ 74, -18, 32, -93, 58, -40, -50, 24, -4, -19, 3, 22, 27, 24, 22, -18,
+ 66, -12, -4, -34, -3, -70, 42, -14, -41, 75, -68, 81, -8, -7, -19, -2,
+ 79, -57, 8, 8, -24, 10, 8, -55, 60, 6, -3, 21, 34, 28, -25, 6,
+ 42, 29, -49, 7, 29, 54, -5, 51, 0, 14, 27, -42, -20, -58, 48, -75,
+ 18, -32, 36, 60, -32, 14, 61, -87, 9, 29, 74, -25, -5, -64, 72, -61,
+ 41, 49, -20, 1, 9, 55, -42, -20, 37, -74, 32, 59, -32, 33, -89, 61,
+ -63, 85, 9, -40, -2, -26, 7, -27, -24, 11, -19, -37, -8, -50, -3, -1,
+ -52, 25, 62, -113, 26, -53, 7, 0, 11, -27, 42, -53, 84, -25, 34, -63,
+ -3, -40, 5, -55, 44, 7, -60, 58, -79, 59, -49, -17, 46, -18, 37, -44,
+ -15, 73, -59, -15, -35, 42, 18, 42, -67, -44, 43, -97, 59, 10, -47, 39,
+ -46, -22, -33, 65, -82, 13, 9, -54, -63, 39, -24, 44, -52, 34, -67, 39,
+ 7, -16, 12, 32, -74, 2, 50, -51, 27, 37, -19, 23, -59, 26, -35, 18,
+ -54, -1, 3, -43, -51, -43, 0, -51, 98, -45, -2, -20, 5, -14, -40, -41,
+ 34, 34, 28, 56, -19, 49, -28, -27, -20, 13, 33, 27, -26, -64, -3, -26,
+ -3, 38, 3, 17, 34, 27, -4, 30, 8, 48, -45, 27, -25, -56, 12, -3,
+ 42, -18, 32, 9, -1, -31, 56, 4, 48, 13, 9, -41, 18, 28, 4, -21,
+ 18, -74, 65, -23, 34, 28, -10, 5, -24, 5, -31, 19, -27, 12, -5, 14,
+ -4, -46, 55, 26, -4, 48, -2, 10, -1, 30, 18, -81, 33, -41, 34, -21,
+ -49, -3, -1, 36, 16, 39, 18, -4, -51, 14, 11, 17, -3, -27, -24, 55,
+ -16, -63, 64, -63, 46, -86, 46, -89, 85, -67, -27, 59, -6, 26, 40, 6,
+ -37, 38, 3, -96, 38, -45, -23, 53, 34, -59, 16, -27, 13, 52, -21, -31,
+ 14, 22, -25, 11, 42, 7, -11, 33, 9, 45, 1, -74, 5, 10, 27, -8,
+ -15, -33, -10, 66, -35, 62, 20, -7, 12, -23, 27, 13, 31, 34, 51, 14,
+ 63, -41, -30, 45, 35, 41, -7, 33, 24, -14, -55, -13, 29, -19, 55, -42,
+ 94, 16, -37, 8, -28, 15, 27, -14, 82, -39, -1, 46, -77, -17, 42, -78,
+ 74, -101, 67, 1, 73, -21, -15, -7, 31, -16, 53, 35, -50, 31, 45, -35,
+ -10, 76, -24, 22, 54, -52, 9, 54, -5, 43, 5, 16, -1, -14, 57, -58,
+ 16, -24, 18, -45, 63, -34, -42, 20, 9, -60, -2, 44, 74, -45, -26, 2,
+ -25, 56, -76, 78, 46, -1, 30, -20, 2, -4, 1, -50, 50, 44, -18, 1,
+ -29, -77, 51, -77, -7, -87, 44, 56, -35, -52, 32, -69, 0, 81, -7, 15,
+ 0, -28, 21, -53, 59, -78, 30, -4, -8, 15, 31, -16, 7, 42, -19, 6,
+ -1, -39, 63, -71, 12, 44, -75, -6, 21, 20, 23, -48, 49, -92, 62, -58,
+ 18, -13, 4, 3, -25, -37, -56, 64, 10, 14, -27, -3, -16, 54, -72, -3,
+ -44, 96, -54, -5, 1, -32, -42, 13, -74, 12, -6, 42, 20, 0, -38, 6,
+ 59, -23, 46, -68, 49, -72, -30, 22, 42, -57, 48, -64, -36, 78, -45, -51,
+ 80, -32, -2, -4, 0, 60, -76, 53, -64, 43, -2, -42, -27, 20, -48, 59,
+ -60, 7, -32, 100, 1, 2, 26, -66, 36, 17, -67, 53, -8, -23, -27, 21,
+ 2, 8, -43, -32, -5, -60, 57, -8, 17, -77, 21, 52, 21, -58, 22, 16,
+ 18, -34, 88, -94, 20, -22, -26, 30, -34, 32, -32, 29, 5, -40, -50, 8,
+ -63, 0, 13, -44, -24, -63, 53, -84, 4, -4, 80, -50, 16, 30, -51, 14,
+ -66, -35, 26, 28, 14, 37, -74, 75, -69, 28, 10, 49, 42, 38, -46, 78,
+ -100, 108, -65, 0, -23, -29, -18, 17, 26, -2, -59, 8, -30, -24, 36, -32,
+ 11, -70, 48, -36, -66, 107, -61, -26, -7, 14, -58, -7, 7, 4, -34, 40,
+ -13, 9, 39, -5, 7, -9, 20, -19, 14, 46, -34, -39, -84, 100, -20, 38,
+ 7, -49, 44, -28, -37, 51, -31, 28, -31, 53, -86, 71, -78, -9, 18, 0,
+ 61, 0, -29, 40, 19, 73, -40, 2, 7, -6, 31, 33, -14, -50, -36, 55,
+ -47, 83, -65, 26, 0, 8, -13, -15, -9, 4, -38, -24, 18, -24, 39, -49,
+ 79, -25, -34, 59, -61, 23, 0, 53, -57, 0, -8, 29, -16, 55, -34, 63,
+ 39, -7, -10, -24, 63, 4, 60, -81, 36, 8, -3, 27, 2, -66, 108, -20,
+ 0, -31, -22, 9, 52, 20, -41, 56, 37, 17, -6, -12, -35, 42, -11, -24,
+ -32, 40, 15, -28, -15, 4, 20, -4, -47, 39, 11, 20, -53, 30, 11, 12,
+ -59, 25, 37, 52, -23, -71, 78, -48, 80, -32, 39, 9, 31, -37, 46, -3,
+ 59, 33, -36, -24, -73, 12, 31, -13, -9, -12, 60, 5, -10, 57, -55, 25,
+ -53, 48, -24, 63, -46, 32, -53, -75, 37, 36, 0, -73, 67, -60, 64, -8,
+ 28, -43, -46, 60, 1, 54, -20, -35, 41, -64, 57, -102, 25, 26, 35, -53,
+ 88, -54, 64, 25, -18, 32, 17, -16, 56, -27, -19, 37, -12, 2, 18, -12,
+ 30, 59, -54, -36, 4, -45, 22, -39, 26, -20, -53, -47, -56, 36, -43, 36,
+ 46, -79, 69, -2, -32, 51, 30, 36, -64, -10, 13, -19, 86, -68, 33, -26,
+ 25, 30, 15, 4, 0, -29, 20, 14, -12, 12, 27, 9, -52, 39, 13, -66,
+ 55, -56, -6, 2, 29, -39, 13, 14, 14, -32, -1, 42, 31, -39, -13, 13,
+ -63, 59, 13, -14, -22, -51, 27, -10, 54, -74, 90, 29, 32, 0, -62, 23,
+ -29, 9, 16, -34, 38, -42, -10, 28, 30, 10, -33, -36, 75, -12, 49, -54,
+ 25, 5, -13, -4, 8, 43, -54, 36, -35, -16, -2, 63, -28, 5, -34, 71,
+ -86, -15, -23, 54, -23, -1, 13, -24, 23, -41, 36, -49, 2, -19, -8, -34,
+ -72, 7, 20, 45, -46, 31, -57, 28, 10, 6, -12, -12, -60, 87, -69, -49,
+ 60, 13, -22, 14, -96, 18, 49, -41, 10, -42, 7, -44, 45, 32, -49, 72,
+ 14, -86, 12, 32, 7, 56, -43, -8, 5, 18, 0, 11, 4, 0, 16, 20,
+ -54, 67, -70, -44, 23, 58, -6, -26, -14, -31, 24, -36, -27, -16, -19, 11,
+ -50, -56, 12, 34, 64, 13, -53, 39, 2, 38, -53, -53, 36, -63, 30, 3,
+ 40, -7, 44, -35, 15, -22, 45, 67, -16, 9, -19, 27, -15, 28, -65, 8,
+ -3, 22, -4, 0, -40, 5, -56, 64, -21, 0, 40, 56, 4, 3, -13, 4,
+ -36, 9, -84, 49, 17, 20, 31, -35, 3, -63, 95, -82, 48, -77, 59, -68,
+ 42, -75, 43, 38, 3, 14, 35, -49, -21, 19, 66, 47, -29, 36, -18, -38,
+ 28, 0, -56, 22, -23, -17, -68, 52, -56, 62, 29, 47, -77, 36, 20, 0,
+ 27, -6, -20, -15, -21, -13, 3, -14, 30, -28, -66, 25, 56, -9, -46, 37,
+ 10, 2, -27, 63, -25, 5, 25, 18, -38, 32, 0, -21, -9, 35, -24, -3,
+ 80, -20, 24, -20, 30, 45, -6, -34, -49, 54, -64, -83, 76, -48, 57, -10,
+ 52, -41, 29, -46, 24, 18, -13, -13, -55, 21, 26, 15, -80, 31, 33, -50,
+ -18, -6, -46, 78, -60, 54, -19, 29, 15, -15, 36, -36, 31, -42, 53, -55,
+ 61, 10, 32, -56, 54, 5, 4, -30, 1, -49, 57, -16, 68, -8, 34, -44,
+ 81, 42, -63, -47, 40, -52, 85, -82, 27, -12, 24, -40, 80, -65, 37, 8,
+ 47, -36, -44, 48, 68, 22, -44, -23, 6, 37, 28, 34, 0, -43, 44, -19,
+ -59, 84, -1, 10, -41, -9, 27, 16, 30, -45, -56, 28, -19, 33, -26, -28,
+ 43, -37, -18, 70, -68, 5, -55, 75, 11, -17, 9, 66, -7, -1, -19, 35,
+ -27, 85, -32, 4, -80, 61, -12, -20, -59, -4, 72, 20, -20, 6, 59, -70,
+ 62, -25, -55, 68, 38, -21, 44, -53, 9, -6, -46, 28, 9, -23, -2, 58,
+ -57, 37, -13, 16, -2, 50, 2, 8, -22, 42, -74, 2, -48, -32, 35, 55,
+ -32, 37, 54, -54, -51, 9, -52, -3, 67, -5, -30, 13, -12, 27, -26, 69,
+ -67, 68, -66, 30, -33, 49, -59, 81, -2, -4, -45, -17, 6, -61, 12, 35,
+ 42, -56, 79, 16, 52, -34, 13, 27, 13, 6, -57, -14, 8, -28, 37, -44,
+ -17, -77, 57, 4, 69, -40, 33, -31, -8, 54, 14, 40, -73, -25, 44, 21,
+ -51, 18, 41, -104, 75, -78, 13, -42, 35, 17, -35, 66, -32, -20, 0, -20,
+ -64, -6, -22, -36, -19, 41, -32, 77, 73, -74, 48, 57, -80, -5, 10, -10,
+ -40, 2, -22, 62, -4, -42, -12, -31, 69, -6, -75, 66, 29, -35, -30, 55,
+ 18, 13, 51, -65, 33, -17, -31, 9, -47, 50, -37, 13, -44, 51, 20, -19,
+ -43, 1, -21, 51, -2, -34, 40, -24, 56, 61, -55, 13, -82, 39, -51, 55,
+ -41, -55, 55, 61, -56, 65, -73, 43, 13, 3, -88, 74, -59, 82, -52, 8,
+ -58, 43, -19, 41, -78, -24, -19, 55, 27, -46, -26, -45, -31, 22, 11, -34,
+ 21, -23, -80, 65, -22, -11, -32, 27, 9, -9, 37, 47, -40, -25, 28, 5,
+ 33, 60, -31, 69, -41, 23, 46, -69, -34, -29, -14, -35, -5, 53, -8, -35,
+ 5, 8, -71, 24, 55, -34, -8, -6, 84, -39, -15, -34, 32, -61, 39, -13,
+ -49, 9, -2, -44, -33, -12, -17, -25, -1, 35, -36, 63, -45, 56, -89, 42,
+ -4, -54, 24, -44, 36, -82, 55, -15, -17, -17, 31, 43, -2, 33, -64, -40,
+ 39, -36, -18, 47, -9, 3, 44, 8, -66, -19, 13, -11, 64, -13, 0, -29,
+ 18, 16, 32, -67, 72, -49, 15, -55, 32, -53, 62, 22, -17, 87, -51, 2,
+ -55, 34, -93, 29, -108, 84, -30, -37, -65, 44, 4, -52, -33, 75, -51, 66,
+ 1, 34, 20, 10, -38, 2, 26, 19, -20, 23, -28, 24, 4, 29, -74, 17,
+ 46, -55, -17, 86, -63, 24, 70, -25, -27, -10, -24, 16, -44, 23, -29, 60,
+ 4, 8, 42, 14, 34, -24, -32, -51, -77, 9, 33, -36, 69, 66, -48, 67,
+ -67, 36, 42, -66, -41, 68, -2, 33, -57, 44, -16, 14, -75, 62, 6, -17,
+ -33, -51, 64, -69, 21, -28, -8, 12, 9, 60, -55, 22, 46, -42, -9, 41,
+ 48, -18, -22, -26, -24, 8, 37, -20, -39, -74, 92, -45, 96, -32, 36, -48,
+ 23, 23, -43, -59, 67, -61, 51, -16, -37, 21, 28, 49, -53, -33, 15, 36,
+ -7, 39, -66, 50, -25, 90, -47, -34, 0, 48, -16, 65, 18, -52, 48, 30,
+ -25, 39, 40, -15, -23, 24, 33, -27, -46, 35, -16, -37, 92, -51, -41, 29,
+ -91, -39, 1, -39, -28, 32, -26, 58, 13, 45, 17, -62, 61, -39, 33, -6,
+ -28, 6, 41, 5, -32, 9, 36, 8, -40, -13, 83, -45, 38, -34, 67, -1,
+ 0, 1, 21, 34, -20, 3, 19, 40, -45, -62, 68, -82, 35, 15, 7, 35,
+ -19, 28, 7, 49, -63, 44, -32, -23, 69, -60, -2, -34, -30, -8, 47, -2,
+ 25, 7, -59, 27, -6, -10, -25, 16, 23, -39, 48, -37, -58, 33, -39, 33,
+ -42, 67, -55, 22, -10, 4, 37, -8, 20, -38, -7, 7, -14, -28, 10, -47,
+ 80, -63, 86, -15, 64, -3, 7, 19, 91, -32, 47, 54, 66, -98, 26, -81,
+ 61, -9, -23, -18, -19, -24, 4, 13, -28, -26, -30, 21, 7, -24, 40, -6,
+ 12, 50, -52, 5, -23, 41, -43, -24, 68, 59, -65, 39, 53, -9, 56, 18,
+ -41, 1, -29, -38, 4, 16, 10, 19, 54, 35, -60, 30, -54, -56, -42, 30,
+ 44, -54, -29, 66, 8, -15, -65, 51, 20, -27, 19, -14, 48, -11, -56, 34,
+ 58, -56, 37, -4, 65, 2, -54, 76, -54, -20, 8, 0, -23, 13, 2, -53,
+ 5, 30, -25, 37, -13, -17, -46, 45, -26, 48, -45, -39, -36, -39, 62, -36,
+ 11, 29, 24, 10, -64, 67, -49, 25, -17, 43, 5, -1, -50, 88, -10, 0,
+ 5, 43, -75, 75, -63, -51, 44, -7, 25, 1, -19, -45, -26, 20, -46, -23,
+ 47, -37, 38, -74, 41, -34, -26, 8, 68, -75, 9, -9, -57, 61, 14, 26,
+ 42, 50, -5, 56, -44, 25, -59, 39, -42, -6, 64, -41, 52, -83, 43, 24,
+ 30, 13, 17, -34, 0, -42, 77, -73, 20, -17, -54, 8, -3, -41, -17, -70,
+ 109, -97, 84, -69, 54, -7, -47, 48, 15, 85, -52, 68, -63, -36, -6, 57,
+ -51, 21, -39, -35, 79, -22, 34, -1, 3, 3, 26, 20, 45, -66, 41, 9,
+ -55, 33, 10, -7, 29, 0, 12, 21, 7, 58, -6, 49, -14, 0, 38, -20,
+ -32, -57, 51, -64, 24, -60, 15, -59, 53, -39, 75, -39, -3, 62, -52, 57,
+ -32, 51, -48, -6, -15, -68, 18, -37, -55, -22, -46, -46, -24, 64, -20, 43,
+ -50, -29, 46, 26, 9, -36, 72, -68, 32, 43, 22, -42, 20, -13, 41, -51,
+ -9, -38, 9, 38, -9, -27, -15, 6, -53, -28, 28, 28, -36, -45, -36, -18,
+ -44, 91, -64, 58, -55, 42, -26, 27, -8, -66, 94, -54, 25, 74, -43, 69,
+ -93, 67, 33, -62, 32, 50, 45, -47, -14, -28, 46, -21, -43, 44, 21, -40,
+ 30, 10, 48, -92, 2, -16, 83, -68, 19, 74, -23, -22, 50, -6, -65, 60,
+ -72, 72, -41, -32, 42, 35, -55, 38, 20, 31, -46, 93, 5, 35, -46, 3,
+ -13, -66, -17, 41, 23, -63, 72, -60, -16, -53, -54, 64, -4, -53, -9, 30,
+ -74, 20, 12, 17, -16, 67, 14, -45, -1, -10, 72, -27, 34, -42, 8, 49,
+ -76, 61, 2, 39, -39, 17, 44, -19, -6, 76, -14, 5, -29, 32, 20, -46,
+ -11, -27, 20, 2, -18, 9, 15, 43, -61, 60, -85, 30, 18, 12, 21, -64,
+ 3, -41, 31, 34, -59, 53, -88, 65, 29, -6, 69, 32, -32, 28, 40, 22,
+ -88, 67, -35, -7, -19, -11, -3, -21, 35, -60, -16, 30, 17, 27, 31, -39,
+ -37, 32, 52, -36, 19, -44, -35, -11, -18, 17, 10, 3, -45, 62, -25, 3,
+ 0, 0, 12, 20, -26, 41, -74, 34, -55, -23, -43, 52, -27, -32, 75, -32,
+ 63, 22, -3, 21, 52, -15, 46, 3, -12, 57, -88, 67, -11, -26, 4, -70,
+ 70, -86, 54, -16, 26, 73, -81, 105, -3, 17, 63, 7, 6, 3, 18, -34,
+ 34, 16, -49, 32, -69, 97, -68, 17, 20, -63, -7, -10, -21, 17, -6, -22,
+ 47, -32, 61, -9, -13, -15, 29, -4, 19, 5, -46, -34, -20, 46, -12, 65,
+ -35, 13, 10, -30, 44, -19, 21, -30, 35, -63, 27, -73, 63, -57, 11, 6,
+ 16, -16, -24, 23, -8, -90, -10, -22, 21, 14, -64, 63, -61, 19, -12, -2,
+ 10, -52, -2, 74, 6, -27, -9, -11, 18, -52, -17, -16, -38, -3, 58, -19,
+ 67, -59, 6, 36, -46, 30, 4, 43, -83, 13, -8, -46, -43, 58, -25, 4,
+ 36, 65, -16, 12, -56, 69, -7, -7, 51, 41, 42, -47, 15, 4, 58, -53,
+ 41, -32, 9, 19, -33, -14, -4, -54, 35, 22, -33, -40, 27, 22, -4, 0,
+ 24, -47, -58, 62, -46, 59, -39, -35, 47, -66, 14, -51, 37, -30, 4, -55,
+ 51, -47, 38, -4, 15, -36, 52, -62, 93, -56, 14, -15, 32, -68, -1, 32,
+ -16, 10, 2, -5, -26, 26, 53, -42, -26, 4, -70, 4, 5, 1, -16, 43,
+ 18, -35, -14, 47, -12, 4, 0, 24, -23, 41, -21, -51, 30, -33, 50, -83,
+ 84, -57, 10, -16, -3, 35, 19, -11, 46, -24, 69, -72, 74, -23, -58, -12,
+ 38, -19, -16, -65, 51, -16, 52, -36, -7, 66, 7, -32, 12, -19, -26, -40,
+ 0, 39, 14, -73, -8, 50, -26, -35, 1, -24, 23, -51, 58, -42, 41, -6,
+ 47, -48, 36, -15, 31, -49, 80, -78, -20, -18, -28, -13, 0, -8, -14, 73,
+ -32, 16, -37, 59, -41, 9, -43, 29, 39, -21, 47, -4, 26, 16, -25, 24,
+ 28, -30, -29, 26, 20, -52, 46, 40, -36, 91, -29, 76, -26, 60, -2, 6,
+ -36, 41, -8, -6, -24, -23, 55, -57, 17, 24, 56, 7, 21, -10, -15, 19,
+ -21, 9, -46, 68, -17, 68, 60, -83, 96, -84, 89, -66, 78, -43, 75, -62,
+ 0, 2, -4, -41, 9, -14, 19, -14, -40, 1, 60, 10, 13, 77, -109, 55,
+ -16, -20, 65, -66, -21, 50, -57, -51, 37, 27, -22, 56, -3, -40, 51, -15,
+ 22, -83, 81, -66, 11, -40, -3, -10, 25, -42, -30, 5, -26, -19, -23, 54,
+ -3, -19, 51, 1, -20, -24, 47, 32, 34, -78, 45, -14, 15, -12, 53, -63,
+ 49, 30, 5, -9, 9, -74, 88, -32, -4, -47, 46, 19, 4, -35, 21, 50,
+ -37, 0, -1, 0, 5, -28, -18, -1, -5, -46, 21, 26, 9, 53, -33, 27,
+ 2, 29, -81, 91, -25, 67, -42, -23, 14, -49, 63, 20, -31, -16, -16, -8,
+ -22, 10, 19, 15, 43, -27, -12, -24, -25, 50, -64, 93, -3, -28, -12, 65,
+ -13, -1, 72, -35, 28, -39, -36, 36, -29, -39, -34, 0, -31, 17, 56, 54,
+ -75, 59, 0, 98, -110, 60, -66, 9, 34, -68, -11, -18, -47, 76, -42, 76,
+ -32, -28, -27, 73, -47, -21, 14, 35, -11, 52, -76, 67, -75, 52, -20, -18,
+ 9, -14, -16, 32, -52, 52, -99, 62, 38, 12, -51, 102, -53, -35, 35, -60,
+ -18, -46, -20, 6, -20, 38, -1, -43, 23, -41, 13, 38, -42, -4, 29, -64,
+ 89, -92, 67, -62, 24, 60, -67, 5, -34, -33, 3, -35, -10, -73, 5, 17,
+ -70, 29, -53, 32, 0, -14, 21, -40, 55, -5, -67, -22, -32, 20, -28, -38,
+ 1, 68, -13, -58, 63, -55, -38, 57, -56, 74, -67, 36, -8, 13, -50, 70,
+ -26, 3, 8, 9, 55, -74, 21, 42, 18, 48, -81, 47, -58, -60, 61, 18,
+ -24, -41, 6, 65, 3, -44, 72, 13, 11, 38, -22, 19, -25, 32, -17, 22,
+ -70, 96, -78, 79, 8, 43, 25, -25, -10, 45, -39, 34, 73, -32, 25, -61,
+ -11, -2, -44, 10, 9, -39, -2, -46, 35, 0, 38, -30, 8, -39, 14, -14,
+ -64, 57, -25, -52, 72, -38, 13, -37, 40, 62, -62, 81, -68, 53, -69, -14,
+ 84, -9, -25, 1, -18, 0, 58, -20, -20, 37, -16, 37, -59, -30, -42, 5,
+ -22, 2, 38, -80, 29, -75, 17, 39, -35, 45, -15, -42, 6, 19, 7, -26,
+ 48, -27, 36, -36, -52, 31, 2, 21, -24, 55, -53, -15, -39, -18, 45, -66,
+ 46, -45, -43, 5, -8, 30, 52, -21, 21, 24, 2, 50, -16, -23, -15, -74,
+ 80, -76, 16, -66, 64, 11, 17, -55, 41, 35, 3, 31, 68, -43, -37, 24,
+ 5, 20, -63, 18, 30, 57, -66, -5, -3, 36, -15, 19, 42, -22, 38, -8,
+ 36, -38, 24, -1, -15, -18, 39, 47, -60, -32, 39, -82, 14, 41, 9, 58,
+ 61, 43, 13, 36, 18, 15, -8, -4, -14, 0, 39, -34, -19, 79, -41, -15,
+ -54, 48, 5, -6, -41, -16, 13, -35, 52, -32, 11, -16, 37, 80, -62, 54,
+ 19, 44, 36, -26, -4, 47, -2, -60, -12, 4, 7, 38, -9, 1, 44, 32,
+ -24, -4, -49, 39, -84, 14, 29, 6, 30, -51, -9, -22, 44, -45, -22, 35,
+ -76, 81, -98, 16, -4, 0, 27, -37, -31, 9, -24, 32, 25, 49, -8, -44,
+ 9, 21, 22, -10, -41, 21, -77, 23, -8, -43, -31, -12, -9, -11, -46, 28,
+ -5, -42, 23, -63, 48, -52, -33, 50, -6, 0, 51, -44, -16, -23, 7, 54,
+ 34, -8, -12, 57, 8, -26, 57, -23, -8, 16, 28, -39, -17, 42, 25, 6,
+ 66, -87, 42, 10, -4, -19, 17, 37, 9, -33, 7, -32, 10, 33, 78, -18,
+ -44, -5, -23, 63, -33, 53, -57, -31, 40, 22, -49, -29, 8, 62, 31, 9,
+ -61, 43, -40, 30, 15, 41, -29, 29, -64, 37, 27, 18, 16, 12, 23, -3,
+ -3, 24, -30, -25, 54, -1, -36, 35, -39, -17, 28, 41, -27, 40, -25, 10,
+ -11, 1, 65, -26, -20, -32, 30, -25, -46, -10, 4, 29, -33, 21, -5, 79,
+ -61, 94, -14, -23, -17, 14, 3, 44, -72, 3, -33, -5, -58, 54, -66, 36,
+ -47, -57, 101, -26, -25, 12, 4, 24, -17, -35, -21, -13, -39, 10, -33, 42,
+ -32, 11, 1, 46, -42, 13, -18, -14, -36, 73, 37, -17, 62, -57, -13, -54,
+ -57, -45, -22, 21, -88, 52, -53, -3, 74, -40, 17, 7, -29, -15, -17, 37,
+ 21, 19, -51, 84, -29, 78, -34, 24, 47, 4, -25, 41, -21, -51, 22, -2,
+ 9, -48, -46, 11, 35, -67, 51, 50, 32, 34, -43, 22, 32, -21, -44, 34,
+ -29, 49, 16, 40, 15, 47, -45, 8, -23, 34, -23, 35, 0, 76, -3, -43,
+ 85, -53, 66, 37, 11, 10, 18, 2, 46, -50, -13, -6, -17, 19, -69, 57,
+ -45, 5, -18, -48, 21, 44, 13, 47, -58, 61, 0, 54, -3, 64, -41, 35,
+ 2, -28, 24, -17, -38, 22, 41, -8, -6, -29, -72, 42, 24, -46, 40, -96,
+ 55, -39, -8, -49, 34, 26, -31, -17, 18, 31, -69, -6, 57, -48, -46, -25,
+ -17, 46, -11, 29, -26, -6, -38, 24, -34, -19, 14, -53, 33, -48, -40, -1,
+ 26, -19, 19, -71, 40, 8, -19, -4, 21, -33, 59, -20, 55, -96, 62, -34,
+ 60, 6, -12, -44, 75, -72, 58, -31, 55, -29, -16, -53, -15, -37, -43, 39,
+ -9, 1, 36, -11, 18, -54, 86, -59, 47, 7, 12, -33, 42, 16, -55, 70,
+ -1, -53, 64, -29, 18, 24, 15, -59, 61, 54, -36, -1, -13, 12, -69, 33,
+ -24, -58, -37, 48, -8, -80, 60, -73, 68, 19, 38, 52, 2, 45, 25, 30,
+ 53, 35, -66, -2, -1, 34, -30, 0, 19, -9, 28, 14, 30, 19, -13, -95,
+ 57, -29, 32, -46, 30, 25, -6, 28, 9, -49, -23, 55, -65, -20, 66, -42,
+ 87, 56, -10, -11, 28, 11, 48, -48, -25, 0, 28, -34, 37, -19, 7, -34,
+ -17, 34, 11, -78, 27, -79, 51, -64, -18, -9, -47, 7, -22, 47, 20, -32,
+ 26, -60, 82, -38, 53, -12, -18, -57, -65, -30, 18, 5, -13, 19, 69, -86,
+ 16, -26, -43, -40, -37, 38, -73, 57, -30, -13, -13, 17, -41, -37, -64, 97,
+ -85, 80, -41, -56, -31, 44, -52, 10, -45, 39, 42, 2, -41, 17, 3, 7,
+ 59, -2, 74, 6, 34, -35, -44, 37, -31, 23, -14, -38, -1, 3, -8, 25,
+ -23, 27, 23, 18, 2, -54, -28, 14, 50, -46, 85, -4, -4, -13, 15, 63,
+ -43, 49, -33, 58, 8, -38, 24, -11, -47, 55, 4, 31, -52, 77, -4, 31,
+ 1, -21, 17, -57, 0, 48, 26, -77, 70, 3, 46, 29, -57, 59, -4, -22,
+ -23, -14, 30, 12, 18, -38, 59, 30, -50, 8, -4, 15, -9, -12, 24, -55,
+ 38, -30, -14, 6, -67, 64, -14, -34, 8, -36, 36, 12, 69, 55, 25, -60,
+ -19, -17, 42, -29, -47, 78, -60, 21, -41, 70, -54, 84, -77, 61, -40, -16,
+ -8, 10, -20, 16, -48, 24, -24, -7, 47, -60, -62, 81, -72, 24, 43, -15,
+ -23, 74, 13, -15, 27, 40, 42, -44, 51, -63, -35, -17, -30, -44, -14, -37,
+ -40, -5, 19, 16, 0, -68, 67, -48, -20, 35, 24, -72, 3, 18, 6, 84,
+ 28, -11, 2, 11, -29, -33, 25, -46, -16, 59, -18, -6, 52, -11, 22, -22,
+ -38, -36, 26, -16, -3, 6, -35, 25, 26, -35, 52, -38, -18, 26, -56, 65,
+ 10, -23, -9, 41, 50, -40, 75, -42, 96, -28, 51, -1, 29, -1, -75, 50,
+ 15, 38, -53, 5, -40, 2, 41, 44, 39, 64, -60, -16, -7, -19, -79, 68,
+ 21, 9, 53, 3, 30, 24, 50, 19, -43, 46, -25, 56, -55, 3, 74, -77,
+ 20, -36, -1, 2, 33, -30, 11, 35, -36, -26, 3, -9, 25, 27, -35, 12,
+ -31, -17, -61, -44, -14, -32, 79, -59, 69, -35, -32, 82, 20, -41, -61, 71,
+ -29, 1, -35, 35, 21, 43, 12, -37, -8, -13, -22, 13, 12, 44, -39, -19,
+ -29, 1, 3, -50, -36, 79, -19, 8, -21, 11, -47, 32, 18, -70, -6, 13,
+ 22, -56, 69, -25, 45, -62, 0, 52, -8, -81, 50, -66, 65, -59, 24, 69,
+ -19, 31, 16, 0, 20, 6, -78, 23, 68, -56, 29, -2, -2, -9, 38, -24,
+ 7, -7, 56, -55, 72, -42, -16, 2, -15, 53, -5, -53, -65, -86, 47, -22,
+ 56, 38, -48, 39, -21, -14, 6, -12, 19, -34, -38, -51, 24, 18, -14, -42,
+ 27, -21, 4, 1, 5, -22, 33, 14, -23, 11, 65, -32, 28, 16, 40, -24,
+ 66, -91, 80, -65, 14, -25, -1, -44, 22, 19, 14, -15, -18, 62, -28, 40,
+ 49, -37, 60, -55, -54, 32, 30, 8, -54, 0, 33, 39, -43, 39, -58, -56,
+ -41, -31, -16, 35, -5, 7, 76, -59, 97, -65, 17, -65, 32, -26, 4, 10,
+ -44, 40, 24, -48, 15, -3, 14, 24, -40, 25, -37, 47, 5, -19, 57, 4,
+ -56, 82, -60, 21, -12, -64, 27, -26, -46, -24, -13, 43, -8, -30, 44, -5,
+ 53, -69, 55, -57, 75, -77, 45, -85, 53, -108, 82, -12, 9, 6, 55, -26,
+ -11, -34, -28, 60, -62, -25, -40, -12, -17, 44, -55, 42, 37, 43, -32, 74,
+ -49, -41, 46, 36, -58, 62, -56, -32, 56, 51, 27, -31, -4, -31, 76, -81,
+ 49, -49, 99, 39, -14, 19, -71, 54, -60, 3, 28, -78, -54, 65, 13, -39,
+ -49, 51, -26, 0, -16, -28, 15, -23, 2, -25, 10, -6, 13, -52, 47, -4,
+ -4, 42, -58, 46, 66, -70, 13, -20, -10, 70, -67, 2, 5, 20, 26, 29,
+ -3, -28, -44, 72, -56, 85, -42, 52, -41, 62, -54, 29, 37, -36, -35, -71,
+ 59, -77, 40, -2, -44, -42, 34, 11, -72, 61, -59, 34, 10, -59, 22, -21,
+ -29, 78, -70, 39, 15, -8, -16, 72, -90, 31, 9, 22, 57, 48, 18, 12,
+ -96, 28, -9, -52, 82, -68, 89, -96, 101, -68, 75, 9, -27, 2, 59, 29,
+ 20, -48, 12, -19, -2, 63, -45, -24, 57, -63, -43, 51, -54, -22, -23, -21,
+ -52, 59, -3, -35, 55, -15, -22, 56, 4, -52, -1, 33, 10, -38, 33, -60,
+ -57, 74, -47, 51, 48, 31, -75, 11, 62, -18, 8, -83, 46, 50, -39, 106,
+ 10, 48, -29, -29, 41, -35, -66, 13, -56, 35, -33, 61, -1, 1, 28, 37,
+ 13, -22, 19, 32, -51, 69, -19, -42, 11, 50, -42, -25, 25, -28, -22, -56,
+ 43, -65, 16, 3, 8, 14, 59, -21, 81, -45, 18, -30, 22, -34, -17, -48,
+ -22, 28, -1, 16, -27, 41, 5, -35, 17, 46, -34, 11, -32, 36, -13, 5,
+ 45, -58, 17, -18, 25, -33, 65, -10, -7, -32, 64, -97, 8, -59, 16, -73,
+ 73, 27, -10, -14, 61, -52, 44, 31, -60, -29, -47, -33, 48, 36, -80, 54,
+ 0, 14, -57, -46, 86, -59, 61, -20, 20, 16, -50, 59, 32, -43, 48, 51,
+ -1, -3, -4, -47, 47, -51, 57, 46, -47, 105, -84, 61, 8, -33, 29, -24,
+ 11, -2, 7, -43, 4, -45, 47, -88, 82, -107, 73, 8, -15, 21, -12, -56,
+ 2, 46, -2, -51, 55, -59, -33, -57, -13, -51, 72, 24, -53, 0, 68, 53,
+ -52, 59, -46, 43, 6, 28, 18, 29, -77, 77, -28, 1, 4, 26, 40, -24,
+ 48, -72, 20, 14, -19, 13, 20, 0, 24, 10, -44, 59, -64, -35, 11, -15,
+ 49, 24, -38, 31, 11, -38, -12, 66, -97, 59, -39, 32, 17, -22, -57, -26,
+ -5, 29, 16, 36, -53, -8, -6, 75, -78, 62, 33, -36, -4, 19, 35, -24,
+ 43, -37, -22, -1, -16, 27, -37, -17, -13, 41, -44, 40, -1, 2, -39, 55,
+ 60, -87, 68, -102, 17, -61, 76, 41, -72, 50, -62, 54, 0, -56, -6, -51,
+ -9, -33, -19, 15, 35, -52, 100, -42, 84, -49, 3, -25, -22, 15, -21, -62,
+ 31, -25, -20, -11, 10, -37, -34, 74, -53, 8, 24, 22, 7, 30, 7, 42,
+ 28, 54, -45, 38, -46, -6, -76, 62, -36, 0, -22, 12, 12, -9, 58, -6,
+ 35, 15, 16, -51, 85, -35, 65, -81, 76, -49, 14, 9, -41, -23, -31, 44,
+ 18, 6, 58, -87, 64, -3, 51, -67, 111, -72, 55, 24, 22, 38, -49, 11,
+ -2, 13, -14, 7, -35, 9, 5, -38, 71, -51, 55, 34, -46, -56, 68, -66,
+ 60, -7, -8, 53, -54, -46, 51, -56, -51, 45, 31, 15, -46, 70, -71, -79,
+ 21, 14, 7, 53, 51, -30, -38, 15, -26, -49, 31, -9, -4, -33, 21, -42,
+ 30, -6, 16, 33, 30, 15, 39, 58, -28, 36, 20, -67, 43, 10, -40, 52,
+ -41, 13, 6, -13, 22, 34, 40, 59, 49, -26, -18, -54, 13, 64, -39, -57,
+ 30, -61, -22, -4, 17, 38, -38, -9, 84, -88, 13, 5, 13, -6, -39, -21,
+ -13, 65, -7, -61, 28, 0, -31, -13, 26, -23, 21, -42, -9, 47, -1, -77,
+ 51, 2, -21, 13, -14, 31, -26, -16, 28, 20, -41, 22, -16, -15, 28, 37,
+ -17, -40, 29, 12, -15, 63, -40, -1, 4, 12, -3, 32, 32, -56, 39, 59,
+ -55, 4, 6, 26, -78, 85, -60, 66, -3, -35, -25, 50, 0, -52, 27, 39,
+ -69, 37, -9, 55, 6, 57, -60, -46, 42, 10, 62, -16, -44, 90, -22, 2,
+ -6, 58, 40, -53, 7, 44, -64, 15, -63, 16, -23, 46, 20, -48, 33, 9,
+ 9, -7, 36, -59, 72, 0, -12, 18, -27, -3, -37, 18, -48, -19, 0, -32,
+ -35, -38, 1, 42, -59, 53, -12, 0, -42, 39, -29, 46, 4, 25, -52, -32,
+ -84, 48, -20, -23, -47, -1, -8, -9, -4, -13, 13, -1, 66, -41, 65, -95,
+ 18, 7, -81, 90, -35, 9, -49, 45, -89, 21, -43, 9, -54, -21, 56, -21,
+ -29, -19, 25, -19, 54, -89, 46, -31, 11, -21, 43, -24, 48, 17, 4, -2,
+ -65, 15, -45, -12, 59, -29, 49, 23, 63, -67, 18, -48, 46, -16, 34, 73,
+ 32, -51, -14, -25, -32, -29, 52, 3, 12, 38, -22, -1, -41, 52, 23, -16,
+ -23, 38, -3, -37, -55, 0, -34, -53, 34, 12, -44, 17, -30, 70, -15, -63,
+ 85, -30, 15, -51, 37, -75, 49, -87, -1, 58, -11, 50, 12, -56, -28, 62,
+ 3, 71, 1, -36, -23, -5, 0, -15, -51, 51, 1, 10, -4, 21, 10, 22,
+ -10, -75, 6, 86, -46, 5, -61, 51, -32, 25, -3, 54, -16, -3, 45, 0,
+ 5, -51, 15, 43, -37, 56, -73, 52, -33, 26, -7, -21, -24, 61, -16, 26,
+ -41, 10, 18, -50, 25, 29, -38, -17, -21, 68, -73, 37, -51, 65, -35, -36,
+ -23, 41, 25, 9, 76, -65, 25, -49, 20, 46, 28, -65, 90, -52, 54, -80,
+ 56, -23, -5, -15, -59, -23, -2, 3, -60, 17, -67, 29, -23, -36, 11, 18,
+ -56, 15, -66, 88, -27, 26, -18, 1, 47, 35, -20, 38, -41, -21, 12, 7,
+ 23, -52, -28, 66, -42, 36, -59, -2, 75, -28, 0, 6, -6, 9, 17, 16,
+ -33, 64, -42, 47, 7, 38, -32, 3, 27, 22, -31, -27, -62, 61, 45, 27,
+ 55, -70, 44, -9, 34, -28, 57, -23, 9, 41, 47, -63, 31, -4, 11, 51,
+ -3, -29, 66, -62, -19, -62, 73, -74, 56, 38, -70, 66, 33, 37, -17, 3,
+ 81, -32, -36, 7, -6, 42, 52, -61, 35, 26, -60, -1, -37, 33, -40, 30,
+ 39, 15, 73, -78, 50, 7, -90, 34, -14, -44, 37, -15, -45, -7, -43, -63,
+ 10, -5, 16, 77, -64, 41, -88, 64, -25, -19, -32, 16, 34, -48, -51, 49,
+ -20, -38, 71, -26, 72, 71, -51, 38, -75, 13, 47, -23, -24, -44, 15, 25,
+ -67, 67, -4, 8, 9, 20, -54, 58, -10, -36, -28, -30, 6, 30, -41, 9,
+ 41, -71, -50, 49, 66, -46, 28, -43, 95, -66, -1, -27, -6, 5, -16, -7,
+ 12, 53, 19, -68, 0, 53, 12, 47, -46, -30, -16, -7, -13, -17, -20, -30,
+ 1, 27, -25, 1, 39, -11, 24, -1, 64, -82, 75, -45, 63, -37, 45, -16,
+ 15, 0, -25, 41, -6, -67, 55, 5, -43, -43, -32, 14, -2, 23, -43, 11,
+ 18, -10, 37, -38, -55, -5, 27, 38, -55, 40, -44, -14, -54, 60, -11, 31,
+ -34, 55, -57, 33, 48, 44, 25, -13, 64, -59, 15, -6, 61, -10, 36, -51,
+ 82, -26, 23, -83, 73, -51, 55, -14, -73, 42, -3, -48, 12, 48, -2, 15,
+ -32, 70, 6, -46, 44, -69, 71, 7, -28, 13, -21, -34, 39, 43, -24, 53,
+ -52, 18, 35, -65, -29, 32, -21, 5, 18, 4, 8, 2, 22, -60, -89, 38,
+ 55, 3, -60, 17, -39, 75, -100, 69, -36, -22, -36, 15, -53, 42, -60, -5,
+ 40, -42, -12, 44, 21, 61, -53, 11, -1, 17, 24, -35, -85, 49, -53, 66,
+ -80, -8, 19, 35, -32, -3, -3, -2, -1, 0, 8, 51, -50, 57, -59, 18,
+ -8, 1, -11, 23, -26, -3, 65, -53, 30, 37, -4, 48, -2, 39, 14, 52,
+ -31, -19, 2, -37, 36, 37, 20, -28, 7, -32, 76, -55, 50, 26, 59, -22,
+ -10, 9, -59, -43, -23, -57, -9, 31, 12, 23, -13, -22, 54, 6, -78, 46,
+ 7, -30, -23, -7, -36, 20, -9, -34, 52, -14, 41, 43, -28, 38, -19, 64,
+ -71, 30, 80, -65, -5, -15, -22, 9, -54, 60, 46, -52, -24, 35, 18, 20,
+ -62, 24, 30, -28, 35, -38, 0, -6, 38, -13, 4, 45, 9, 22, 10, 68,
+ -20, 29, -38, -10, -44, 8, -9, -7, -21, 16, -7, 6, -44, -8, -42, -9,
+ -48, 65, -56, 59, -75, 80, -47, 29, 48, 28, 41, 28, -25, -18, 63, -48,
+ 13, -41, -26, 25, 14, 26, 17, -24, 71, -46, -38, 86, -38, -16, -48, 9,
+ -49, -31, 92, -71, -45, -53, 29, 34, 6, 4, 39, -21, -45, 36, 3, -4,
+ -1, -10, 51, -21, -25, -1, 14, -52, 47, 34, -90, 34, 35, -71, -47, 53,
+ -10, -37, -47, 15, -27, 86, -17, -47, 28, -37, 24, 3, 25, -75, -18, 7,
+ 16, 36, -29, 52, 9, -38, 81, -51, -62, 20, 46, -86, 49, 31, 80, -42,
+ -18, -33, 95, -30, 89, -53, 55, -23, 4, 13, 0, 3, 39, -34, 74, -42,
+ -33, -27, 46, -14, -33, 3, 38, -5, 3, -3, 7, 31, 30, 19, -65, 28,
+ 0, 66, -81, 28, -69, 40, -56, 6, 42, -65, 40, -56, -6, -15, 2, -6,
+ 26, -49, -3, -65, 45, 21, -11, 10, -15, -42, 10, -83, 34, -29, 34, -20,
+ -36, 54, -51, 2, -11, -82, 71, -19, -11, 24, -13, 48, -90, 48, -88, 42,
+ 68, -27, 68, 52, -28, 38, 3, 17, -11, 5, -3, -1, -11, 3, 70, 26,
+ -46, 89, -80, 58, -60, 73, 19, -29, 24, -13, -60, 39, -32, -39, 38, -45,
+ 11, 13, -56, 38, 48, 6, -14, 41, 15, -50, -22, 64, 2, -33, 13, 31,
+ -50, 46, -9, -20, 42, -51, 12, -27, -10, 7, -50, -2, -11, -8, 7, -63,
+ -42, 17, 66, -59, 28, -51, 73, -57, 0, -18, -46, 63, -29, 36, 0, 24,
+ -14, 11, 35, -92, 95, -59, 8, -12, 16, -24, -63, -17, 50, 3, -12, -31,
+ 35, 23, 11, -45, 30, -54, -56, 57, -63, -13, 35, -34, 84, -56, 90, -58,
+ 83, -11, -56, 85, 3, 41, -16, -79, 50, -58, -33, 67, -37, -38, -60, 16,
+ 13, -19, 45, -48, -7, 9, 46, 14, -67, 25, 49, 18, -4, 77, -40, 56,
+ -45, 7, 34, 55, -37, -33, -54, 84, -37, 9, 53, -10, 1, 100, -54, -21,
+ -31, 19, -44, -2, -8, -19, -44, 36, 28, 30, -37, 27, 33, -23, -29, -35,
+ -47, -15, -56, -28, -31, -33, -42, 30, 30, -43, -11, -3, -46, -1, -27, -10,
+ 96, -18, 20, -4, -1, 28, -66, -2, 21, -7, -82, 24, -68, -3, 51, -44,
+ 5, 4, -15, 53, 33, 14, 20, -22, 25, 12, 5, 48, 8, 74, -62, 44,
+ -44, 92, -70, 55, 18, -34, -6, 21, 47, 11, -34, 47, 30, -43, -31, -16,
+ 57, 15, -32, 72, -4, 84, -55, -12, -14, 40, -63, -29, 89, -58, 70, -58,
+ -37, -32, -62, 75, -48, -14, 36, -91, 25, 30, 14, 22, -42, -17, -31, -14,
+ -30, 5, 72, -7, 20, -68, 0, 41, -90, 74, -87, 69, -69, 86, -57, -32,
+ 68, -50, -13, -33, -34, 50, -29, -34, 52, -1, -69, 40, 1, -24, -30, 1,
+ 32, -47, -30, -2, -13, 29, 41, -10, 8, 64, -20, 16, 51, -39, 33, 69,
+ -40, 47, -92, 60, 33, 17, -28, 31, 39, -13, 47, -18, 22, 9, 46, -73,
+ 20, 43, -79, 58, -26, -29, 22, -8, -26, 24, 64, -83, 40, -44, 87, -36,
+ 14, -52, 3, -15, 46, -5, 54, -28, 52, -38, 47, -29, -46, 30, -46, 33,
+ -16, 0, 41, -99, 58, -70, -4, 65, -10, 50, 42, -29, -23, 66, 29, 55,
+ -47, -20, -60, 57, -8, 55, -59, 16, 33, -44, 7, -33, 24, -67, 12, -45,
+ 34, 44, -62, 19, -51, 39, -25, 5, 14, -1, -27, -33, -6, -97, 78, 22,
+ -49, 93, -56, 14, 47, 9, -37, -20, -10, 5, 7, -3, -86, 61, 1, 49,
+ 43, 86, -19, 70, -14, 20, 37, -20, -49, 71, -28, -19, 84, -80, 95, -49,
+ -41, -34, 76, -64, 19, 55, -14, -14, 3, 26, 44, 21, 58, -11, 4, 37,
+ -30, 48, 39, -79, 23, -17, -48, 47, -36, -11, -30, -23, 2, -64, 7, 15,
+ -28, -18, 22, 40, -22, -20, -2, -25, -30, -58, 50, 16, -13, 6, 36, 42,
+ -51, -20, 52, -85, -30, -52, 68, -1, 14, 28, 46, -14, -64, -21, 40, -29,
+ 41, 28, -10, -78, 68, 15, -34, 73, 22, -83, 72, -58, 50, 40, -31, 0,
+ 19, -37, -23, -4, -55, 82, -9, 16, 45, -21, 49, 52, -77, 76, -50, 60,
+ 12, -2, 69, -10, 78, -72, 39, 26, -56, 12, 27, 51, -76, 81, -47, 15,
+ 34, -39, 72, -57, -18, -13, 20, -35, -37, 11, -29, -40, -13, -11, -39, -25,
+ 45, 25, 21, 30, -80, -6, -7, -56, 36, -41, 3, -30, -51, -18, -20, 48,
+ 13, -39, 64, 18, 54, 16, -45, -18, 5, -8, -25, 60, 21, 2, -62, 43,
+ -39, 94, -23, 4, -46, 22, 15, -55, 21, 53, -62, 72, -61, 45, -8, 48,
+ -62, 33, -3, 85, -78, 91, -72, 20, -48, 3, -47, 36, 30, -17, -19, -34,
+ 14, 25, 24, 30, -6, -47, 59, -52, -24, -35, 96, -55, 39, 53, -72, 71,
+ -52, 34, 47, -27, 14, 39, 37, 6, -15, -35, 43, -42, 50, 55, -22, -43,
+ 41, -91, 57, 28, -77, 27, 77, -39, 30, 36, -7, 7, 27, 18, -30, 19,
+ -21, -39, -43, 21, 24, 40, -18, -2, -26, 60, -31, 49, -25, 77, -41, -3,
+ 85, -56, -28, -36, 43, -84, 22, 1, 17, 35, -90, 10, -23, -16, -43, 27,
+ -2, -52, -20, 14, -32, 68, 23, -30, 27, 58, -51, 17, 49, -41, 38, 30,
+ 9, -57, 59, -52, -2, -15, 51, -19, 7, 57, -16, 27, -54, 35, -56, -20,
+ 52, -3, 14, 73, 5, 10, -33, -12, -27, -29, 36, -51, 76, 8, 49, -72,
+ 17, 44, -24, 72, -34, 0, -51, 30, -74, 66, -41, -3, -28, -9, 31, -9,
+ -4, 22, -33, 18, 24, -77, 74, -98, 27, 17, -51, -3, 35, -62, 44, -41,
+ -20, -31, -29, 5, -32, 17, -44, -18, 80, -63, 18, -42, 73, -41, 52, -68,
+ 54, 2, 17, 9, 71, -1, -17, 35, -10, 69, -31, 64, 18, 52, -39, -22,
+ -45, -6, 7, -44, 41, 0, 41, 27, 32, -8, -41, 32, 47, 9, 29, -3,
+ -49, 15, -58, -16, -88, 18, 50, 0, 20, -13, -5, -1, -62, 5, 40, -82,
+ 59, -85, 0, 2, 57, -23, -18, 6, -8, -47, -7, -29, 92, -82, 73, -67,
+ 36, -50, -10, -35, 42, -72, 73, -40, 16, -32, 37, -30, 10, -25, -3, 7,
+ -42, 49, -47, -11, -37, -7, 29, 17, 45, -44, -71, 33, -26, -54, 62, -1,
+ -43, -38, -61, 55, -20, -29, -46, 35, -48, 95, -94, 96, -76, 0, 6, 34,
+ -8, 28, 1, -45, 79, -29, -61, 27, -17, -28, -27, 19, -37, -47, -13, -11,
+ -35, 14, -11, -1, -45, -14, -33, 39, -31, -27, 8, -28, 70, -81, -29, -11,
+ 6, 26, 55, -8, 32, 45, -54, -18, 49, -62, 74, -36, -6, 57, -26, -8,
+ -33, 41, 40, -20, -52, -26, -38, -10, -20, 0, 58, -47, -10, 44, 17, -70,
+ 21, -7, 29, 16, -46, 21, 22, -30, -39, 31, -45, -18, -5, 0, 29, 27,
+ -70, 40, -47, -58, 41, -56, 45, -34, 58, -35, 22, 1, -45, -35, 11, 41,
+ 0, -26, -34, 37, -25, -31, 73, -69, 73, -71, 44, -34, 68, -28, 62, -35,
+ -45, 70, -27, 39, 14, 50, -61, 82, -59, 55, -46, 38, -84, 70, -30, 60,
+ -30, 38, -2, -27, 34, -32, 27, 10, -30, 56, 9, -33, -37, -1, -42, 14,
+ -52, -7, -10, -30, -28, -18, 41, 2, -28, -65, -25, -48, 21, -51, 29, 56,
+ -39, 6, -39, 59, -6, 13, -37, -53, 5, 65, -32, 77, -65, -9, -35, -13,
+ 45, -23, 58, -40, 105, -42, 29, -71, 32, -64, 31, -9, 27, 3, -9, 41,
+ 37, 20, 38, 2, -35, -62, 16, 39, 43, 18, 58, -48, -21, -43, 39, -44,
+ 42, -14, 23, 2, 50, -21, 45, 0, 32, -35, 66, -86, 76, -53, 60, 5,
+ 36, -4, -13, -27, 29, 58, -83, 11, 0, 40, 21, 50, -73, 29, -58, 38,
+ 33, 63, -17, 61, -27, -8, -3, 25, 12, -61, 65, -37, 17, 40, -65, -15,
+ -8, -9, -15, 64, -83, 34, 5, 26, -1, -29, 39, -32, 16, 84, -32, 48,
+ 38, 2, -20, 39, 15, 15, 2, -30, 83, -25, 29, -3, -85, 58, 49, 4,
+ -32, -2, -33, -34, 35, -41, 56, -62, 31, -8, -2, -21, -23, 0, 27, 53,
+ -28, -49, 21, 50, 68, 7, 0, 43, 30, -35, -41, 23, 52, -54, -61, 104,
+ -18, -7, -23, -10, 46, 22, -4, 17, 27, -60, 59, 5, 29, -4, 25, -68,
+ 87, -11, -41, 57, 45, -25, 6, 8, -42, 50, -18, -18, 94, -23, -11, -35,
+ 1, -9, 24, -44, 15, -21, 33, 31, -54, 31, 9, -35, 0, -34, -33, -16,
+ 49, -19, -48, 1, -27, 13, -17, -55, 37, -5, -16, 8, 25, 3, -56, -1,
+ -45, 33, 8, -25, 47, 21, -20, -8, -36, 19, -38, 25, 64, -8, 49, -14,
+ 29, 59, -68, 6, 27, -24, 18, -27, 33, 35, 37, 4, -11, 45, 23, 1,
+ 9, 48, -22, 4, -27, 0, 53, -1, -8, -8, -12, -45, 37, 36, 3, 3,
+ 33, 31, -55, 57, -97, 31, 28, 36, 1, 60, -28, -22, 39, -11, -48, 27,
+ -63, -10, -35, -21, 51, 50, 26, -57, -61, 44, -86, 48, 21, 14, -22, 30,
+ -29, 17, -43, 7, -15, -14, -19, -12, -49, 38, -41, 90, -62, 43, -2, -66,
+ 27, -5, 9, 44, -15, -50, 45, 0, -64, 60, -66, 57, 11, 48, 17, -70,
+ 39, -94, 22, -72, -40, 71, -19, -10, 9, 43, -57, 52, -51, 5, 4, 85,
+ -34, -35, 21, -19, -7, 20, -56, 24, -13, 22, -26, 64, -5, -36, -38, -25,
+ -42, 33, -20, 2, 9, -15, 50, -41, -26, -50, 44, -18, 68, -19, 3, -76,
+ 39, -37, 52, -65, 21, 19, -12, 62, -15, -26, 39, 43, -6, 46, -72, 28,
+ -2, 46, 3, -49, -44, -23, -21, -15, 12, -79, 72, -30, -17, 0, 38, -89,
+ 28, -15, -13, -10, -56, 72, -80, 26, -66, 59, -38, 0, -9, -4, -1, 9,
+ -70, 59, -18, -11, -48, 28, 4, -3, 17, 16, -31, 3, -54, 40, -14, 54,
+ 23, -37, 29, 36, 6, -31, -1, -21, 46, 22, -51, 54, -9, 13, 57, 13,
+ 12, -46, 61, -7, 51, 12, -12, 37, -10, -12, 34, -24, 18, 47, -33, 61,
+ 11, -30, 30, 43, -37, -45, 33, -24, 47, -30, 57, -35, -51, 8, 10, -18,
+ 34, -56, 79, 7, 45, -43, -3, -26, 7, 10, 13, -36, 29, -60, 0, -17,
+ 35, -38, -39, 61, -61, 31, -72, 87, -72, -32, -5, -19, 8, 3, -13, 13,
+ -80, -8, -5, -57, 50, -25, -28, -41, 6, -52, 61, -38, 8, -7, 47, -52,
+ 17, 50, -62, 59, -32, -34, 25, 12, -6, 59, -23, 43, -49, 70, -13, 13,
+ 0, 50, 39, -41, 34, -49, 45, -61, 43, 4, 3, -24, -22, -52, -17, 20,
+ 28, -27, -14, -30, 3, 36, -32, 21, 27, -75, 65, -44, -42, -16, 54, 14,
+ -19, 43, 42, 69, 55, -12, -67, 35, -33, -6, 39, -60, -22, 55, 13, -56,
+ -6, 73, -26, 63, 49, -80, 52, 9, -70, 12, 34, -50, -19, 40, 21, 19,
+ -1, -3, -2, 6, -46, 0, 34, -61, 69, 13, -18, -37, 33, -68, 14, 54,
+ 75, -82, 59, 53, -74, 54, 3, -53, 9, -18, -54, 54, -90, 39, -40, 32,
+ -2, -63, -36, 19, 7, 66, -12, 4, -11, 49, 34, -73, 55, 1, -36, 95,
+ 16, -34, 44, 29, -45, -34, 31, -4, 0, 47, -42, 19, 22, 10, -19, -37,
+ 51, -30, 34, -6, 9, -35, 47, 48, -84, 64, -28, -20, 32, -5, -40, -45,
+ 18, 44, 7, 1, -38, 16, -44, 37, -37, 14, 8, -35, -17, 16, -26, -49,
+ -71, 78, -35, -4, -59, -6, -21, -7, -7, 15, -38, 18, 16, -50, 30, -38,
+ -37, 46, -65, -40, 63, -9, -28, -7, 32, -20, 25, -28, -18, 73, -54, -34,
+ 30, -35, -7, -87, 35, 33, -64, 84, -72, 0, -23, 33, 38, -7, 0, -24,
+ -57, 31, -4, 35, 14, 6, 6, -40, 70, 61, 14, -45, 40, -20, -14, 10,
+ 49, 47, 16, 20, 7, 55, 14, 35, -16, -6, 44, -16, 43, -67, 0, 34,
+ -36, 19, 34, -49, 35, -49, -6, -7, -19, -51, 8, 12, 22, -89, 14, 11,
+ -59, -15, -44, 56, -63, 70, -9, 43, -43, 31, -25, -33, 34, 32, 65, -71,
+ 31, 9, 16, -32, 26, 32, 4, 2, 46, -46, 23, 2, -11, 21, -43, -10,
+ 30, -32, -54, -69, -51, 7, 43, 2, -21, -36, 0, 37, 45, -28, -59, 65,
+ -55, 12, -42, -49, -18, 10, 51, -30, 74, 11, 28, -35, -32, 41, -60, 53,
+ -10, -5, 63, -20, -27, 14, 44, -27, 30, -26, -17, 97, -72, 49, 23, -32,
+ -74, 46, -53, 4, 2, -25, -26, -14, 40, 32, 8, -72, 56, 9, 78, -79,
+ -20, 88, -6, 1, 35, -68, 44, -22, 43, -70, -4, 43, 9, -16, -6, -70,
+ -27, -4, 4, -24, 35, 8, 20, 14, 19, -39, 27, 2, -52, 47, -12, 10,
+ 35, -50, -5, 12, 0, -23, -27, -12, -2, 20, -31, 16, -29, 34, 12, 18,
+ -65, -9, -75, 78, -65, 95, -13, 29, -25, 2, -10, 61, -50, 88, -30, 56,
+ 49, -5, -20, 0, 66, -26, 41, -36, -3, -44, 48, -36, 20, -35, 51, 16,
+ 28, -58, 69, -10, 52, -47, 21, 3, -17, 34, -72, 19, 7, -41, 13, 12,
+ 47, 11, 46, 42, -74, 16, 71, -52, 37, -5, 38, -4, -73, 56, -21, 14,
+ 61, -47, -30, 58, -76, 17, -43, 51, -52, -41, -29, 42, -26, 52, -12, -2,
+ -11, -30, -36, 48, -47, -15, -73, 43, 67, -94, 17, -71, 34, 51, -17, 0,
+ 34, 9, 30, -22, -36, 54, 53, 24, -19, 7, -6, 62, -85, 93, -19, 19,
+ -11, 52, -6, -22, 49, -44, -32, 56, 5, -81, 95, -34, 38, -3, -57, 83,
+ -51, 61, -78, 37, 18, -53, -40, 63, -63, 21, 28, -20, 47, -26, 0, -57,
+ 52, -9, 30, 55, 9, 12, 15, -53, 57, 12, -26, 31, -39, 44, 13, 0,
+ 2, 39, -20, -21, 74, 6, -27, -24, -32, -66, 28, 47, -23, 23, 58, -31,
+ -26, 20, -86, 75, -38, 66, -51, 2, 19, 54, -23, -61, 57, -82, 40, -62,
+ 63, 43, -34, 50, -21, 39, -41, 53, -13, 14, -25, 58, -36, 10, -68, 39,
+ 56, -96, 40, 2, -53, 65, -9, 18, -13, 25, 20, -48, 51, -11, -13, 87,
+ -21, 48, -7, 60, -53, 40, 25, -92, 35, -39, 74, -69, 77, -101, 64, 26,
+ -58, 50, -37, -17, 16, 51, -62, 11, 13, 20, 23, 31, -19, -25, 15, 3,
+ 83, -11, 38, -10, -11, -43, -45, 18, 15, 0, -42, -5, -18, -68, 0, -12,
+ 5, -40, 28, -30, -50, 28, 6, 64, 13, 1, 0, 14, 40, -37, -9, 9,
+ 1, 0, -53, 24, -7, 3, 18, -56, 36, 9, 11, 65, 3, 47, -11, -17,
+ -26, -40, 11, -52, 91, -40, -42, 7, 14, 20, -50, 36, -53, 48, -22, -11,
+ 26, -6, -14, -30, 61, 38, -3, 6, -21, 76, -33, 40, 11, -58, -14, 50,
+ -73, 75, -31, -37, -5, -3, 52, -33, -48, 68, 52, -34, 54, -72, 45, -12,
+ 22, -35, -42, 12, 55, -19, -75, -26, 18, 17, -23, -52, 37, 0, -76, 65,
+ -31, 2, -36, 38, 17, 12, 58, -92, 15, 32, -33, -35, 35, -22, -34, -16,
+ 3, -51, 106, -68, 62, -29, 44, -47, 54, 9, -13, 6, -46, 41, -16, 21,
+ 37, -32, -44, -11, 36, 15, -8, 0, -11, 15, 30, -5, -34, -69, 71, 0,
+ -58, 59, -12, 51, -76, -26, -21, 52, 8, 37, -81, 53, -61, -1, -25, -27,
+ 58, -31, 13, 11, -13, -32, 19, -27, -45, -58, 23, -15, -17, 44, 13, 8,
+ 2, -27, 0, 0, 0, 8, 10, -17, -14, 2, 63, -50, 69, -48, 7, -7,
+ -27, 76, -14, -34, -24, 24, -28, -32, 45, 18, 11, -42, 15, -24, 41, -93,
+ 50, -96, 48, -84, 55, -65, -37, 52, 8, -11, -48, 31, 0, 41, -21, -14,
+ 18, 24, 7, 28, -40, 0, 48, -30, 5, -47, -3, -54, 43, -33, 3, -6,
+ -25, -62, 47, -27, -13, 80, 30, 46, -27, -12, 16, 40, 22, 66, -43, -14,
+ 26, 34, 27, 45, -26, 24, -27, -49, -50, 74, -74, 64, -97, 19, 0, -9,
+ 21, -44, 12, 29, -67, 7, 19, -3, 18, -32, -33, -30, -68, -14, 3, 22,
+ -40, 19, 3, 25, -91, 71, 0, -34, 16, 24, -38, 63, -40, 34, -55, 24,
+ 3, 26, -15, 36, -73, -21, -30, 52, -24, -28, 55, -57, 20, 9, -62, 44,
+ 11, -1, -37, 62, -31, 56, -51, -27, 35, -18, -77, 66, -61, 14, -8, 40,
+ -61, -34, 49, -25, -34, 24, 45, 19, -77, 83, -75, 88, -12, -39, 93, -53,
+ 43, -43, -32, -17, -42, -18, -18, 26, 31, -20, 9, 30, 18, -54, 49, 52,
+ -34, 9, -54, 26, -35, -30, -34, 19, -49, -5, 5, 0, 9, -31, 34, -49,
+ -9, 41, 4, 23, -102, 59, -57, 62, -32, 9, -1, -43, 83, -10, -20, -52,
+ 54, -49, -26, 55, -13, 48, -24, -39, 30, -24, 71, -51, 55, 0, 12, -1,
+ -32, 57, 23, -57, 63, -33, -17, -1, 51, 46, 24, 24, 3, -77, 71, -72,
+ 11, 26, -46, 59, -63, 33, -11, -25, -15, -45, 17, -59, -9, 44, -53, 46,
+ 58, -63, -39, 92, -31, 3, -2, -19, -26, -8, -48, 59, -9, -43, 24, 26,
+ -18, 74, -15, 48, -28, 36, 58, -17, 19, -22, 57, -18, 3, -32, 0, -6,
+ -31, 11, -41, 1, 42, -11, 50, -50, 55, 25, 55, -61, 44, 30, -64, 21,
+ 22, 36, -19, -44, 6, -82, 1, -71, 33, -41, 1, 27, -75, -9, 51, -6,
+ -55, -44, -63, 54, -33, 53, -18, 26, 42, -73, 18, -6, 63, 19, -49, 15,
+ -11, 21, 6, 23, 53, -54, 49, -55, 17, -10, 57, 4, 54, 52, -58, 56,
+ 28, -71, 53, -68, 89, -72, 31, 21, -40, -11, -12, -11, -23, 4, 21, 34,
+ -35, 11, -6, 43, 51, 20, -30, -44, 71, -81, 25, 22, 7, 15, 25, -37,
+ 16, -13, 33, -2, 9, 10, -31, 96, -70, 62, -20, 19, 24, -16, -14, 25,
+ 13, 37, -9, -3, -35, 28, -19, 29, 38, -44, 17, -29, -31, 19, -56, -45,
+ 41, 41, 58, 25, 21, -5, 20, 46, -89, 61, -40, -1, 29, 6, -50, 14,
+ -53, 83, -46, 15, 4, 43, 13, 23, -9, 9, -35, 23, 26, -52, 45, 45,
+ -43, 41, -41, 4, 47, 11, -16, -59, 41, 14, -2, 44, -82, 41, -31, 6,
+ 33, -12, 72, -54, -6, -16, 64, 17, 0, 54, -53, -16, 65, -82, 91, -78,
+ 39, -69, 22, 10, 74, -70, 55, 6, 0, -57, -41, 55, -72, 71, -42, 60,
+ -54, 8, -33, -28, 77, -64, -34, 44, 50, 2, -52, 85, -44, 33, 63, -59,
+ -63, 46, 53, -99, 48, -28, 49, -14, 58, -55, 54, -91, 78, -56, 40, 8,
+ 13, -59, 0, 1, -25, 13, -50, -63, 79, -41, -42, -3, -7, -40, 10, -21,
+ 70, -27, 18, -11, 37, -36, -45, 56, -63, -13, -25, 40, 6, -15, 68, -44,
+ 21, -41, 26, 17, 24, 49, 20, 45, -60, 105, -47, -30, 89, -1, -22, 33,
+ 26, 56, -38, -27, 42, -38, -22, -46, 54, 11, 64, 0, -68, 28, 13, 51,
+ -28, 5, 10, -44, -10, -6, 69, -12, 12, -52, 42, -45, 34, -49, -24, -33,
+ 73, -42, 52, 39, -3, -56, 74, -56, 31, 27, 46, -76, 71, -9, 72, -61,
+ -19, 14, -43, -2, -52, -37, 79, -10, -13, 27, 57, -82, 17, 7, -5, 28,
+ 42, -40, 23, -5, -22, -10, 31, -69, -1, 11, -23, -35, -17, -15, -33, -42,
+ 30, -41, 30, 53, -19, 16, -57, 59, -85, 60, 7, 43, 43, -32, 38, 39,
+ -3, -57, -22, -72, 67, -54, -6, -60, 41, -3, 7, -61, 57, -5, 5, 29,
+ 49, -76, 46, -30, 29, 9, -36, -51, 71, -23, -15, 19, -32, 35, -37, -37,
+ -45, 14, -45, 36, -4, -16, 68, -21, -47, -27, 6, -53, 72, -1, 26, 25,
+ -82, 18, -65, 75, -54, 27, -71, -48, 32, -96, 82, -68, 52, -56, -19, 57,
+ 7, -19, 9, -46, -62, 43, -4, -55, 59, 67, -39, 36, 51, -77, 30, 9,
+ -4, 38, 18, 48, -29, 46, 58, -93, 47, 3, -27, 3, 10, -35, -15, -20,
+ 84, -74, -2, 48, -31, 51, -76, 2, 41, -30, 9, 45, -16, -18, -7, 46,
+ -44, 1, 13, 15, -55, 30, 16, 61, -104, 52, -7, 49, -42, 71, 40, -19,
+ -26, 11, -49, 40, -37, -19, 16, -44, 14, 64, -7, 16, -55, -38, 30, -49,
+ 24, -1, 34, -14, 44, -52, -19, 61, -29, -78, 35, 15, -66, -12, 28, -63,
+ 27, -26, 45, 25, 22, -29, 72, -40, -32, 27, -79, -37, 37, 20, -23, -16,
+ -7, -53, 68, -30, 30, -13, -62, 21, -32, 49, -48, 45, -53, 46, -3, 36,
+ -46, -21, -1, -63, 22, 6, -25, 3, 45, -78, 34, 48, -56, -15, -63, 27,
+ -42, 73, -18, 22, -9, 28, -68, 29, -33, -23, -59, 8, 53, 6, -46, -61,
+ 17, 2, -45, -33, 56, -54, 48, 37, -8, 21, 28, 28, 36, 26, 50, 47,
+ 14, -33, -1, -105, 55, -12, 37, -69, 43, -7, -39, -14, -60, 3, 32, -100,
+ 47, 45, -26, 69, -36, -11, 50, 9, 23, -14, 1, 17, -47, -15, 5, -77,
+ 21, 66, -74, 49, -30, 16, 45, -15, -14, 3, -47, 26, 7, 22, 21, 42,
+ -2, 57, -2, 22, -68, -3, -45, 23, 33, 34, -14, -10, -49, 64, -70, 49,
+ 64, -41, 34, -29, 61, -30, 63, -16, 17, 64, -60, 29, -13, 48, -35, -41,
+ 47, 30, 4, 41, 1, -37, 35, 1, -33, -44, 1, -11, -43, 83, -75, 92,
+ -75, 61, -10, -67, 0, -13, -31, 83, -73, 17, 1, 16, -29, 40, 26, -59,
+ 3, 30, -81, 35, 12, 31, -34, 89, -87, 84, -37, -30, 28, -1, -45, 28,
+ -49, 8, 19, -10, 57, -72, -34, 42, 2, 47, 24, -62, 48, -14, -24, 2,
+ -52, 23, -29, 67, -23, 11, 40, -17, -9, -79, 9, 63, -24, 32, -6, 29,
+ -28, -28, -42, -30, -34, 26, -12, -51, 5, 80, -24, 11, 1, 16, 0, 17,
+ -57, 74, -60, -22, 23, -68, 22, 77, -47, -20, 85, -13, 22, -26, -7, -27,
+ 40, -27, 4, -16, -68, 59, -13, 18, 1, 25, -52, -49, -1, 11, -14, 12,
+ 33, -3, 60, -40, 17, 9, -54, 29, -16, 55, -81, 12, 0, -29, 87, -53,
+ 34, -32, -6, 40, -43, 56, -19, 37, 14, 3, 78, -50, -46, -39, 31, 12,
+ 32, -17, 66, -15, 25, 27, -78, 15, 24, -69, 8, -46, -5, -39, 5, -65,
+ -5, 27, 22, 48, 29, -36, 22, -1, 26, 5, 31, 46, 67, -43, -6, 20,
+ 32, -16, -29, 64, -46, -16, -19, 42, -57, 61, -55, 38, 51, -19, 41, 16,
+ -46, 13, 7, -66, 84, -76, 3, -3, 29, -8, 16, -17, 37, -63, -27, 0,
+ -22, -19, -20, 12, 24, 45, -9, 40, -10, -3, 6, 56, -56, -8, 2, -11,
+ -66, 36, 13, -71, 64, -51, 26, 9, 6, -21, 17, -15, 11, -15, 89, -75,
+ -65, -19, -3, 21, -17, -3, 55, -50, -31, 9, 71, -35, -33, -21, 34, -28,
+ -9, -34, -46, 88, -27, -33, 7, 8, -43, 61, -74, 40, 3, -73, 34, 43,
+ -27, 12, 29, 50, -98, 39, -41, -31, 8, -54, 15, 8, -48, 44, 4, -42,
+ 71, 28, -27, -49, 44, 40, 70, -55, 67, -78, -40, 50, -20, -35, 1, 2,
+ 67, -24, 47, -52, -25, 46, -28, 23, 50, 52, -63, -50, 30, 3, -17, 13,
+ 7, 55, 29, 24, 38, 50, -60, 49, 32, -58, 2, -50, 0, 23, 14, -21,
+ 0, 7, 17, 20, -45, 78, -57, -52, 58, -33, -18, -31, 38, 39, -47, 49,
+ 24, 46, -27, 39, 63, -28, 14, 11, -26, 23, 16, 47, 17, 16, -15, -34,
+ -53, 25, -35, 0, 20, 9, 41, -38, 3, 24, 24, 17, 25, 39, -43, 35,
+ 14, 23, -30, 29, -82, 57, -36, -5, 33, -74, 1, 30, 40, 52, -8, 3,
+ -11, -32, -15, -52, 36, 24, -1, -20, -20, 80, -73, 23, 25, -24, -30, -15,
+ 64, -47, 34, -95, 22, -62, 42, -8, -25, -30, -39, -65, -71, 51, 9, 16,
+ -38, 3, -28, -69, 87, 0, 7, 15, -15, 18, -22, -58, 58, -39, -4, 15,
+ 51, -65, 40, 0, -25, -17, 43, -7, 24, -61, 34, 50, -63, 58, 46, -3,
+ 51, 18, -28, 51, -98, 38, -46, -8, -5, 2, -8, -40, 20, 79, -80, 58,
+ -26, 67, -76, 45, -18, -35, 21, -21, 0, -6, -49, 36, -62, 76, -124, 109,
+ 44, -8, 15, 17, -6, -14, -20, 54, 4, 57, -85, 5, 76, -27, -8, -2,
+ 1, -12, 67, -27, 8, -11, 18, 13, 5, 42, -29, 19, 51, -17, 23, -42,
+ 29, -2, -9, -34, 74, 32, -48, 29, 25, -3, -26, 46, 28, 4, 37, 49,
+ -118, 46, -2, 24, -19, -21, -41, -13, -25, 22, 66, -50, -52, 55, 11, 29,
+ -41, -23, -34, 44, -22, 5, -27, -20, -65, 10, 50, 27, -54, 40, 14, -37,
+ 52, -93, 71, -69, -4, -31, -12, -14, 29, -28, 40, 67, -64, 29, 5, 17,
+ -24, -16, -38, -19, 40, -23, -10, 48, -45, 21, 4, 40, -81, 76, -44, -7,
+ -86, 61, -58, 20, -71, 38, -90, 37, -13, 21, -1, 17, -27, -16, 4, 18,
+ 24, 4, 64, -24, -25, -11, -47, 0, 27, -10, -36, -35, 31, -43, -15, 15,
+ -41, -3, 63, -71, 55, 40, -73, 30, 21, 30, 15, -29, -19, -47, 23, 31,
+ 17, 23, -56, 87, -90, -4, -11, 47, 46, -40, 75, -17, 7, 50, 28, 19,
+ -45, 32, 49, -5, 41, 63, -80, 28, -3, 27, 43, 43, 46, -6, 8, -5,
+ 17, -50, 57, 15, -23, -56, 3, -45, 32, -52, 33, 11, -57, 33, -55, 23,
+ -28, 49, 32, -46, 61, 3, 6, -9, 6, 47, -37, -17, 36, -60, -28, -44,
+ -46, 24, 6, -28, 45, 14, 19, 23, -34, -12, 66, -42, 63, -93, 76, -5,
+ -40, 14, 2, 41, -9, 18, -5, -34, -32, 60, 8, 45, -62, 21, 59, -74,
+ 4, -30, 15, 4, -11, 6, -40, -22, 54, -64, 72, 48, -72, 46, -13, 17,
+ -43, 55, -73, 57, -21, 30, 2, -20, -5, -4, -6, 26, -54, -13, 22, 27,
+ 2, 5, 1, -8, -52, 15, 27, 32, 9, -3, 59, -69, -15, -60, -17, -19,
+ 67, 11, -32, -22, 12, -56, 106, -66, 38, -14, 3, 37, 49, -17, 3, -11,
+ 58, 23, 40, -60, 19, 3, 69, -8, -14, 34, -47, 2, 37, -1, -89, 42,
+ -27, 20, -63, 44, -4, -26, 45, 18, -8, -24, 22, -67, 61, -74, 18, 43,
+ -72, 21, 48, 8, -37, 29, 17, -2, 32, -25, -26, -29, 69, -46, -12, -16,
+ 68, -44, 88, -74, 25, 10, 33, 1, 47, -29, -57, 26, -18, 63, -26, 4,
+ 7, 5, -97, 77, -63, 69, -26, 66, -60, 53, 3, -12, -60, 60, -50, 64,
+ -46, -46, 14, -3, 19, -10, 0, 53, -82, 6, 4, -7, 8, -74, 62, -79,
+ -6, 29, 28, -11, 68, -16, 20, -62, -67, 53, -90, -26, 26, -69, 33, 6,
+ -11, 15, -61, -25, -24, -35, 67, -45, 79, -61, 7, -23, -36, 10, -30, 19,
+ 12, 2, -16, 5, 15, 64, -13, 12, 33, -9, 46, -46, 56, -18, 51, -51,
+ -33, 25, -54, 11, -76, 49, 17, -43, -10, -29, 19, 30, -86, 97, -25, 69,
+ -40, 65, -63, 42, -21, 16, -23, -11, 9, -38, 40, -72, 39, -4, -27, -21,
+ 4, -10, 12, 1, 4, -23, 48, 27, 42, -26, -51, 50, -31, 29, -24, 22,
+ 0, 49, -1, -49, -3, 43, -8, 44, -62, 4, -61, -51, 73, -55, -5, -16,
+ 28, 5, 44, -60, -15, -13, 33, 17, 26, -88, 43, -79, 84, -49, 25, -84,
+ 69, -85, 7, 30, -28, -24, 13, -38, -15, 10, -17, -5, 65, 36, 13, -15,
+ 5, -49, 25, 19, 37, -18, -17, 15, 0, -47, 18, -68, 8, -31, -1, -24,
+ -49, -6, 44, -63, 39, -45, 4, -49, 40, 9, -26, 3, -52, 43, 51, 62,
+ -45, 12, 15, 16, 16, -30, -52, 51, -50, 67, -62, 31, 32, -36, 80, -82,
+ 88, 29, -51, 33, -33, 11, 43, -50, 26, -14, 14, 71, -67, 33, 68, -18,
+ -57, 28, -61, 65, -12, -44, 18, 45, -84, 58, -26, 73, -48, -42, 76, -48,
+ -3, -34, 83, -53, 31, -6, 14, 2, -41, -3, 12, -27, 93, -47, 65, -55,
+ 50, 19, 44, -25, -45, 66, -47, -40, 26, 31, -61, 50, 43, 34, 30, -22,
+ -16, 8, 8, -50, 8, -39, 19, 36, 1, 31, 72, -4, -42, 33, 0, -62,
+ -6, 14, 7, 7, -6, 20, -11, -49, -38, -13, 65, -55, 2, 30, -21, 5,
+ 15, -81, 53, -34, -8, -30, 19, 12, -67, 36, -59, 28, -32, 43, -22, 46,
+ -15, 69, -56, 87, 11, 13, -73, 78, -79, 108, -90, 24, 29, -15, -6, -13,
+ 27, -72, 15, 17, -4, -8, 4, 35, -50, 76, -47, 35, 22, 33, 7, -10,
+ 20, 4, -27, -21, -23, 1, -56, -12, -20, -43, 90, -80, 34, -46, 42, -33,
+ 0, -39, -40, 67, 2, 4, -12, 29, 12, 49, 25, 12, -21, 49, 19, -49,
+ -12, 26, -52, 44, -35, 37, -93, 8, 16, 62, 26, 19, -45, -4, 26, 26,
+ -3, 48, -7, -32, 48, -53, 5, -34, 64, -79, 47, -26, -60, -32, -20, 36,
+ -59, 66, -58, -2, 0, -56, 73, -40, -17, 60, 12, 30, -28, 38, -48, 97,
+ -40, 41, -36, 79, -16, 58, -41, 13, 3, -5, 30, 15, 62, -51, -16, -38,
+ -7, 27, -9, -5, 41, 3, 14, 48, -31, -5, 1, -33, 22, -25, -36, -5,
+ -50, 16, -63, 41, -29, -10, -5, -21, -5, -17, 60, -86, 38, -12, -61, 21,
+ 44, -3, -44, -8, 21, 25, -22, -32, -10, 41, -13, -38, -6, 48, -57, 13,
+ -6, 15, -51, 38, 33, 14, -36, -43, 89, -69, 3, 29, -21, -3, -40, -40,
+ 53, -64, 20, 41, -55, -39, 77, -43, 65, -31, 8, -35, -46, 19, 2, 17,
+ -64, 57, -4, -15, 41, 17, -38, 0, -8, -5, -66, 40, 52, -66, 72, 16,
+ 1, 22, 1, -2, 49, -22, 28, 54, 9, 61, -80, 98, -19, 26, -22, 17,
+ -10, 64, 26, -45, 22, -43, 26, 24, 8, 33, 25, 0, -38, 51, -55, 28,
+ -41, 17, -51, -4, -89, 83, -52, 31, 36, -71, 67, -35, 44, -15, -45, 36,
+ -42, 70, -15, 44, -74, 17, -13, -6, 9, 8, -43, 34, -60, -27, -11, -20,
+ 41, -11, -1, 63, -27, 37, 76, -38, 65, -3, -22, 8, 48, -7, -15, 10,
+ -3, 104, -47, -8, -29, 50, -88, 90, -63, -56, 47, -36, -30, 62, -42, 81,
+ -20, 35, 7, 13, 1, -19, 60, 3, -43, -32, -17, -29, 62, -11, 15, -44,
+ -3, -6, 3, 67, -46, 49, 64, -46, 19, 30, -58, 45, 31, 5, 59, -57,
+ 32, -4, 57, -29, -1, 50, -1, -1, 0, -56, 42, -79, 43, -16, 18, -103,
+ 82, -41, -13, -74, 69, -85, 22, 24, 15, 13, -25, -33, -14, 1, 19, -9,
+ -27, 1, -15, -10, -36, -53, 48, -38, -33, 37, -15, 11, 27, 38, 4, 46,
+ -61, 57, 37, 4, 27, -4, 2, 37, -15, -56, 39, -3, 5, -39, 54, -19,
+ -11, 31, 29, -14, 46, -41, 69, -42, 4, -42, 53, -36, 0, -4, 65, -30,
+ 20, 46, -25, 21, -67, 34, -36, 26, -4, 62, -46, -10, -38, 38, 31, 20,
+ 9, 4, -23, -7, 89, -54, 42, -46, 7, 2, -45, 71, -27, -36, -34, 25,
+ 57, -26, -23, -25, -34, -24, 18, 50, -55, 57, -32, 11, -48, 61, -110, 65,
+ -43, -2, 0, -45, 7, -25, -12, -60, 44, -2, -12, -77, 18, -55, 54, -15,
+ 17, -69, 5, 41, 10, 0, -9, 12, -85, 59, -48, 18, 9, -57, -20, 14,
+ -4, 10, 68, -59, 125, -74, -20, 33, -3, -15, 33, -60, 4, 5, 40, -57,
+ 50, -67, 58, -80, 44, -12, 36, 22, -18, -42, -34, 68, -39, 23, 15, 17,
+ -36, -11, 47, -48, 38, -37, -46, -37, -22, 58, -51, 80, -66, 46, -43, -12,
+ -9, -47, -32, 23, 38, -51, 42, -29, -7, 54, -63, 14, -45, 20, -71, 25,
+ -66, 18, 1, -16, 12, 30, 2, -33, 23, 50, -13, -31, 27, 2, -46, 49,
+ -12, -12, 14, -35, 20, -72, -3, 9, 12, -39, 51, 42, -92, 50, -29, -19,
+ 41, -52, 17, 17, -52, -39, 16, 30, -7, -28, 30, 38, 1, -51, 37, 83,
+ -42, -10, -15, 79, -50, 39, -10, -69, -26, -13, 76, -20, 25, -20, 18, -45,
+ 64, -52, 41, 4, 12, 32, -16, 19, 23, -23, -5, 46, -55, -59, 65, -1,
+ 18, -44, -16, -6, 61, -83, 62, -66, 34, 40, -23, 85, -73, 102, -100, 61,
+ -61, 55, -40, 50, -49, 48, -43, 72, -86, 65, 16, 0, -39, 71, -76, 45,
+ -79, 39, -31, -31, 51, 41, -45, -5, 13, 34, -19, 42, 24, -8, -51, 33,
+ -64, 21, 4, -8, -46, 69, -31, 12, 0, 52, -13, -8, 17, 58, -29, 49,
+ -43, -10, 30, 85, -47, 95, -58, 28, 10, -13, -8, -39, 33, -19, 49, -2,
+ -23, -33, 75, -47, 76, -62, 31, 34, -63, -9, -2, 49, 42, -6, 6, -67,
+ 76, -67, 82, -80, -1, -43, 47, 15, 37, -44, -29, -30, 28, 58, 26, 34,
+ -44, 75, -72, 28, -84, 12, 64, -94, 41, -46, 32, -1, 67, -45, 9, 29,
+ -6, -8, 26, 17, 5, 0, -2, -52, 51, 34, 19, -16, 15, 13, -55, 45,
+ -5, 4, -55, 41, -47, -14, 50, 53, -25, -29, -11, -57, 24, -1, 62, -36,
+ -29, 37, 29, 58, -36, 10, 4, -8, -59, 51, -11, 43, 8, 45, 13, -15,
+ 9, 21, 16, -40, 31, -41, -5, -27, 29, -31, -1, -5, -23, -29, 18, -13,
+ 63, -46, 25, -36, 27, 64, -49, 1, 18, 38, -32, -24, 40, 12, 11, -44,
+ 42, -14, 21, -23, 53, 33, 11, -19, -26, -50, 47, -28, -4, 28, -63, -47,
+ 52, -4, 11, -16, -7, 27, 42, 73, 5, -14, -27, 8, -68, 46, -34, 75,
+ -100, 85, -48, 49, 5, -56, -27, 50, -49, 2, -3, -11, 52, 9, -92, 45,
+ -69, 26, 53, -42, -44, 69, -79, 85, -77, 31, -45, -39, -26, -41, 56, -51,
+ 11, -16, -38, -32, -23, 2, -44, 9, 45, -8, -47, 47, -37, -9, 0, -36,
+ 79, -37, 46, -4, -60, -10, 68, -35, -31, -62, -23, -32, -7, -54, 16, 44,
+ -46, 49, -61, 43, -19, -33, -26, -62, 48, -69, 25, 49, -18, -48, -18, -5,
+ -19, 23, -22, -47, -11, -8, -26, -2, 2, -5, 26, 23, -7, -11, 2, 50,
+ -64, 50, -7, -22, 41, -1, -14, -1, 55, -55, 53, -34, -70, 36, -5, -19,
+ -26, 78, -47, 40, -19, 64, -79, 51, -61, 59, 8, 75, -58, -48, 21, -30,
+ -23, -46, 37, -75, 61, 15, -6, 7, 66, -52, 51, -45, -36, 10, -31, 23,
+ -33, 45, -68, 9, 11, -2, 2, 62, -25, -56, 29, -14, 5, 2, 47, -32,
+ 18, -7, 22, 7, 18, 12, -49, -15, 18, 72, -24, 58, -57, 43, -56, 21,
+ 18, 8, -49, -15, -35, 50, -56, 10, 26, 10, 48, -71, -22, -7, 23, -32,
+ 0, -13, 10, 12, -3, 58, -62, 23, 19, 21, -18, 73, -12, 60, 8, -42,
+ -30, 31, -41, 35, -41, -44, 29, 55, -97, 36, -48, 21, -31, 50, -28, 36,
+ -31, -5, -50, 86, -90, -16, -11, 43, 54, 27, 14, -20, 21, -2, 23, 97,
+ -105, 35, -8, -4, -38, -25, -20, -73, 38, -40, 28, -49, 76, 8, 15, -55,
+ 71, -14, -24, -74, 69, -14, 18, 25, -17, 33, -40, 71, -104, 53, 89, -63,
+ 64, -10, -22, 26, 1, -11, 62, -60, 52, -53, 31, 30, 28, 39, 4, 26,
+ 32, -54, 89, 6, 27, 14, 32, -52, -21, 64, -49, 6, 52, -50, 60, -20,
+ 0, -31, -12, -30, 28, 46, -15, -55, 58, 33, 43, 19, 42, 43, 19, -23,
+ 45, 15, -21, 12, -12, 45, 19, 71, -19, 27, -25, -69, 67, -22, 48, 7,
+ -21, 33, 7, 28, 17, -40, 67, 0, -83, 48, -46, 54, 27, -47, -2, -15,
+ 14, 2, -38, -7, -21, 46, -74, 59, -32, 34, -42, 21, 34, 2, 8, 36,
+ -29, -43, 0, 41, -43, 13, 11, -11, -1, 33, -34, -65, 48, 28, -16, 10,
+ 0, 45, 29, 50, -49, 13, 37, -62, -12, 45, -17, -44, 68, -73, 87, -63,
+ 14, -8, 39, 37, -60, -5, -61, -1, -30, 26, -7, 40, -57, -26, -5, 7,
+ 47, -41, 22, 2, -26, 1, 7, 25, -7, -79, 27, 45, -51, 4, 45, 7,
+ -29, 57, -7, 3, -13, -23, 51, -48, 45, -42, -59, 94, -32, 34, 6, 6,
+ -38, -34, 38, -45, 42, -58, 84, -60, -1, 15, -83, 1, -20, -56, -6, 7,
+ 61, -25, 71, -83, 84, 34, -21, 1, 48, -29, 31, -26, -32, -56, 44, -52,
+ 14, -16, 11, -47, 71, -6, -17, -39, -45, -35, 29, -24, 3, -38, -44, -32,
+ 39, 67, -44, 26, 31, 50, -25, 14, 51, -14, 17, -57, 41, -35, 8, -12,
+ -11, 37, 9, 27, -55, 52, 20, 4, -37, 67, -51, 10, 42, -56, -58, 25,
+ -70, 30, -40, 25, 65, -41, -56, 89, -23, 55, -57, -16, 47, -66, 10, 12,
+ -17, 22, -66, 19, -61, 62, -85, 48, 22, -64, 12, 16, -42, 21, -50, -5,
+ 52, -29, -35, 59, -25, -64, 19, 52, -15, 23, -54, 41, -33, -40, -7, 12,
+ -32, 2, -38, 55, -5, -20, -3, -42, -26, 19, 43, 32, -14, -41, -6, -26,
+ -18, -13, -56, 30, 15, -65, 26, -17, 65, 38, -44, -24, -36, 15, 39, -20,
+ 35, 45, -6, 14, -44, 31, -2, -7, 16, -21, 20, -56, -2, 18, -43, 19,
+ 30, -4, -2, -7, 28, 1, -32, 25, -30, -39, 58, -32, 31, -31, 34, 10,
+ 12, -35, -78, -6, 51, -2, -43, 46, -60, 18, 10, 35, -68, 57, -4, -33,
+ 26, -41, 52, -75, 26, 59, 17, 64, -53, 8, -44, 49, 80, -33, 31, -6,
+ -44, 46, -31, 11, 8, -12, 37, -22, -29, 71, -42, 6, -1, 7, -4, -35,
+ -23, 26, -56, 32, -22, 27, -11, 36, -58, 43, 21, -84, 64, -87, 49, -43,
+ 66, 38, 38, -17, -26, 16, -20, -3, -42, 45, 58, 29, 13, 37, -58, 63,
+ -43, -1, -9, 42, -49, -51, -25, -41, 24, 24, -28, 41, 37, 83, -62, 51,
+ 26, 25, 61, -35, 9, 15, 27, 68, -5, 28, 12, 66, -41, 60, 34, 13,
+ -48, -78, 71, -67, -20, -47, 23, -55, 23, -13, 62, -4, 12, -51, -9, -11,
+ 55, -62, 25, -12, 56, -56, -1, -62, 60, -60, -54, 43, 24, 48, -39, 49,
+ 62, -27, -9, -16, -37, 3, 11, -90, 61, -77, 46, 5, -73, 56, 28, -67,
+ -32, -6, 17, 26, 3, 11, 56, -60, 40, 38, -47, 52, 15, 6, 66, -15,
+ -4, 52, -3, 51, -52, 67, 66, -95, 57, -26, 13, -65, 3, 9, -37, 2,
+ 35, 9, -5, -26, 15, -44, 41, -26, 45, 13, -82, 34, -47, 91, -80, 84,
+ 47, 18, 67, -72, 16, 67, -41, 3, -68, 27, -5, 54, -64, 36, -57, 40,
+ -64, 11, -62, 25, 15, -16, 12, 15, -35, 73, -48, 18, 53, -69, 2, 8,
+ 41, -32, 58, -10, -29, -15, -30, 15, 31, 9, -37, 69, -57, 16, 0, -19,
+ -49, 25, 58, 48, -66, 22, -16, 8, 15, 1, -43, 23, 22, 21, -27, 69,
+ -33, 29, -26, 28, 3, -35, -52, -23, 59, 11, 27, -63, -43, -34, 17, -29,
+ 53, -25, -15, -2, -30, 28, 26, 25, -1, -44, 7, -77, 42, 6, 24, -17,
+ -1, -39, 33, 45, -18, 56, -39, -13, 1, 49, -45, 31, 17, 65, -92, 76,
+ -63, -22, -57, -30, 30, 3, 27, 35, 50, -55, -87, 73, -92, 80, -20, -4,
+ -42, -27, -3, 8, -41, 75, 57, -9, 20, -16, -18, 36, -56, -24, 20, -51,
+ -20, -15, -50, -16, 7, -60, -48, -38, -27, -24, -24, -5, -44, -7, 2, -54,
+ 33, 82, -5, 14, 52, 18, -26, 2, 26, -22, -86, 28, 21, -1, 86, -94,
+ 59, -34, 1, -33, -20, 12, 6, 17, -7, 47, 41, 11, -53, -39, 43, 1,
+ -29, 10, 16, -43, 63, -23, -7, 23, 27, 1, -1, -23, 56, -50, -9, 63,
+ 14, 53, -78, 63, -74, 34, -57, 60, -64, 57, -42, -15, -26, -44, -49, 23,
+ 0, -32, 10, -40, 38, -69, -73, 29, 4, -20, 51, 0, 69, 0, 3, 19,
+ -52, 18, -19, 17, -43, 65, -35, -6, 30, -7, 73, -73, 9, 9, 36, -57,
+ -50, -17, -37, 60, -49, -17, -34, 55, 69, -33, -14, 33, 7, 19, -43, 67,
+ -61, 53, 5, -3, 12, 12, 43, -11, -26, 20, -42, 46, -21, 73, 11, -3,
+ -40, -11, -8, 8, 30, 27, -8, 2, 32, 10, -28, 0, -42, 30, -2, 11,
+ 4, 74, -81, -33, 18, 39, -26, 25, -8, 38, 12, -60, 43, -49, 37, -100,
+ 39, -49, 15, -35, 25, -2, 37, 29, -15, -28, -36, 38, 35, 20, -52, 8,
+ 37, -36, 33, -5, -29, -12, -44, 30, -77, 33, 37, 36, 42, -60, 38, 20,
+ 46, -15, 47, -16, -38, -21, 77, -28, 24, -88, 76, -61, 41, -88, 57, -29,
+ -10, 1, 66, -5, 12, 56, -86, 2, -28, 60, 7, 5, -9, -11, -66, 65,
+ 20, 58, -54, 62, -5, -39, -79, 78, -32, -25, 9, -30, -2, -22, 11, 0,
+ 49, -11, 92, -9, -24, 74, 54, 19, 30, -4, 17, -72, 71, -49, 55, 34,
+ -28, -73, -12, 6, -54, 13, 3, 16, -16, 49, 21, 44, -47, -1, -26, 52,
+ 14, 2, -46, 73, -20, -28, 57, -62, 61, -64, -39, 8, -18, 80, -92, 34,
+ -54, 35, -26, -5, 42, -27, 43, -6, -13, -2, 4, 11, 28, 45, -35, 5,
+ -56, 11, 20, -13, 42, -42, 24, -21, -6, -8, 37, 15, 4, 83, -60, 5,
+ -12, -62, 63, -33, 16, 9, 99, -37, -3, -9, 37, -61, -17, -37, 18, -22,
+ 87, -50, 67, -6, -7, -1, -50, 45, -53, -38, -6, 10, 39, -1, -34, -1,
+ 72, -64, 62, -61, 44, 29, 33, -74, -49, 0, -30, 2, 7, 21, 42, -30,
+ 53, 15, -35, 30, -24, -22, -21, -7, -33, 12, 69, -54, -25, -64, -2, 39,
+ -32, 3, -18, -19, -41, 47, -41, 24, -36, -29, 45, 0, 41, 5, -71, 44,
+ -29, -33, 15, 32, -9, -9, 12, 26, -55, -12, 26, -30, 36, -33, 46, 16,
+ 47, -40, 99, -94, 41, 44, -7, -37, -3, -26, 69, -63, 40, 12, 83, -43,
+ -38, 0, 45, -20, 52, 0, -58, 28, 40, 33, -104, 15, -59, 71, -27, -63,
+ -58, 2, -48, -17, -3, 44, -56, -19, 13, 33, -13, 28, 0, 9, 46, 9,
+ 31, 30, -46, 21, -70, -4, -12, 91, -39, -16, -5, 1, -49, 77, 13, -7,
+ -51, 32, -13, -24, -23, 34, 62, -65, 42, -27, 56, -36, 46, -12, 40, 8,
+ -36, -44, -56, -8, 13, -37, -26, 11, -1, 50, -82, 92, -4, 20, -19, -48,
+ -3, 75, -6, 8, 43, -41, 26, -56, 31, -24, -32, 6, -18, 23, -29, 2,
+ -19, -28, 25, -6, 27, -46, 8, 11, -60, 57, -27, 65, -54, 18, 41, -28,
+ 13, -21, -24, -33, -4, 27, -32, 3, -21, 52, -64, 23, -66, -35, 63, -13,
+ 3, 33, -19, -23, 42, 16, -27, 47, -63, 42, 7, -20, -10, -3, 39, 49,
+ 6, 83, -45, 9, 13, 12, -58, -29, 0, -29, 5, -4, 18, -2, 78, -50,
+ -24, -17, -51, 46, 27, -8, -9, 65, 2, 21, -15, 15, 39, -68, 37, 43,
+ -90, 80, -43, 69, -42, 0, -66, 74, 37, 42, -3, -11, -32, -24, -10, -24,
+ -10, 5, -44, 0, -42, 53, -30, -6, 56, -25, -90, 75, 0, 50, -4, -17,
+ -11, 51, 5, -26, 13, 13, -35, -5, -19, -8, 1, -12, -2, 27, -11, 62,
+ -32, 49, -51, -14, 2, -12, 35, -66, 25, -20, 77, -42, -1, 5, -1, 14,
+ -11, -21, -74, 68, 22, -81, 4, -22, 10, 27, -14, -52, 30, -47, -57, 57,
+ 15, -37, -49, 49, -60, 28, 45, 32, -58, 37, 48, 9, 0, -6, -15, 82,
+ 42, -21, 70, -15, 13, -63, 0, 51, -3, 47, -57, -35, 55, -64, -31, 14,
+ -37, -18, -18, 0, 73, -28, -10, -55, 0, -12, 19, -2, 72, -65, -4, -3,
+ 8, -56, 50, 56, -16, -25, 33, -55, -27, 34, -18, -37, 54, 1, 23, -79,
+ 61, 56, -12, 65, -80, 81, -56, -3, -39, 14, 49, -105, 51, -47, 37, -4,
+ 18, 11, -54, 60, -102, 53, 34, -32, 39, -14, 5, 59, -36, -56, 66, -83,
+ 75, -40, 44, 27, -66, 83, -50, -16, 42, -62, 12, -5, -2, -51, 17, 48,
+ 22, 38, 12, 22, 22, 27, -38, 70, -62, 16, 29, -28, 65, 9, -54, -8,
+ 55, -71, 23, -42, -47, 32, -17, 21, 45, -63, 3, -22, 9, -41, -3, -72,
+ 77, -86, -44, 38, 27, -56, 22, 20, 59, -49, 56, -25, 20, -37, -50, 7,
+ -40, 39, 7, -26, -41, 45, 59, -59, -50, -8, 4, -13, -40, 33, -19, -21,
+ 44, -4, -40, -22, 26, 47, -29, 26, -59, -28, -28, 38, -10, 39, -46, 49,
+ -56, 21, 42, -5, 3, 16, -13, -18, 14, 22, 73, -61, -2, -17, -25, 40,
+ 8, -4, -16, 21, -3, 26, -20, 20, 44, 30, -9, -18, -31, 5, 14, -31,
+ -39, 8, 21, 36, -34, -14, -43, 82, -2, 49, -82, 7, -27, 23, -64, 61,
+ -55, 39, 0, 12, -83, 89, -4, -23, 7, 20, -13, 72, -10, -13, -21, -9,
+ 9, 72, -42, 23, 40, -61, -7, 12, -68, 8, 4, -29, -32, 62, -52, -29,
+ -30, 25, -71, 38, 20, 32, 35, -26, 21, -37, -13, 80, -35, 29, 34, -42,
+ 3, 15, 66, -61, 19, -37, 58, 46, -40, 0, 35, -56, 0, -64, 34, 42,
+ -9, 20, -13, -64, -18, 2, 23, 61, -8, 24, 47, -46, -5, -23, -54, 36,
+ 29, -96, 51, -10, 9, 14, 0, 29, -4, -13, 32, 58, -18, -3, 36, -67,
+ -4, 4, -28, 7, 33, 16, -22, -15, 46, -43, 0, -61, 38, 4, 61, 7,
+ -24, 41, -101, 52, -3, 2, 14, 58, 36, -10, 57, -51, 53, 27, -18, -22,
+ -32, -19, 7, 30, -31, -41, -17, -44, 7, 23, -16, -47, -40, -19, 22, 44,
+ -68, 18, 24, 64, -10, -15, 51, -70, 23, 5, -35, 44, -34, 46, -42, 51,
+ -74, 76, 6, 32, -65, 68, 33, 2, -7, -35, 26, 18, 13, -15, 45, 37,
+ 62, -41, 38, -54, 36, -40, -65, -5, 73, -10, -5, -26, 67, -73, 61, -45,
+ -19, 0, 46, 7, -28, 29, -65, 72, -65, 70, -15, 40, -20, -40, 46, -55,
+ 54, -7, -11, -11, 54, -57, 57, 22, 6, -26, -53, 24, 9, -57, 49, 6,
+ -28, 43, -49, 35, -27, -9, 33, 0, -14, -37, 5, 28, 18, -71, 77, -30,
+ 59, -38, 26, -32, 2, 18, -22, -73, 26, -49, 62, -27, -17, 52, -41, 54,
+ -11, -26, 21, 35, 55, -32, 28, -16, 28, 68, -86, 24, -37, 61, 5, 54,
+ -52, -14, -14, -20, 29, 2, 20, 0, 51, -23, 40, -26, -47, 55, -43, 61,
+ -27, 48, 10, -45, -16, -64, 29, -48, -51, 40, -7, -59, 38, -17, -35, 48,
+ -3, -12, -29, 12, 19, 72, -90, 34, -24, 47, 8, 8, 41, 50, -46, -23,
+ 10, 22, -3, 71, 65, -44, -44, -56, 35, -22, -9, -24, 38, -20, 95, -60,
+ 74, -32, 14, 14, -62, 53, -47, -16, 23, -37, -38, 3, -43, 12, 40, 28,
+ -24, 0, 62, -19, -17, 14, -12, -1, -32, 36, -1, 73, -50, 25, -61, -49,
+ 31, 21, 32, 0, -1, -36, -15, -62, -11, -30, 12, -31, 18, -17, -26, 9,
+ -45, 73, -31, -18, -8, 56, 30, 30, 22, -24, 32, 42, 33, 44, -78, 4,
+ 18, 53, -37, -30, -58, 16, -30, -32, 29, 41, 1, 33, -5, 43, -47, 18,
+ 10, 18, -47, -24, 39, -75, -27, 7, -4, 60, -49, -29, 34, 0, -71, -6,
+ -41, 0, 33, -27, 53, 27, 17, 43, 8, -58, 50, -31, 28, 26, 21, -4,
+ 34, -58, 41, -30, -58, 40, 3, -7, 3, 9, 13, -16, -38, 46, 4, 15,
+ -52, 9, -41, 6, -29, 57, -30, -58, 66, -82, 28, 18, 43, 5, 5, 5,
+ 16, -57, 43, -20, 48, -10, -56, 28, -61, 97, -55, 0, 33, 54, -55, -3,
+ -5, -38, 10, 30, 26, -7, 42, 38, 13, -8, 28, -15, 64, -35, -43, 17,
+ -32, 67, -68, -11, -50, 8, -43, 18, -38, -67, 73, -49, -53, 47, -39, 20,
+ -50, 82, -54, 83, 5, -74, 46, -58, -12, -19, 24, -8, 49, 53, -64, -24,
+ 30, -59, 13, 70, -22, 70, -29, 28, 93, -48, 38, 73, -61, -20, 23, -49,
+ 44, -6, -20, -26, 19, -77, 66, -54, 47, -45, -7, -6, -23, -2, 61, -63,
+ 28, 6, -26, -71, -21, 3, 65, -22, 10, 3, -12, 41, -31, 37, -68, -13,
+ -31, -32, 0, 54, -1, -56, 60, 39, -8, 36, -30, 61, -38, 3, -73, 57,
+ 32, -28, -39, -42, 31, 22, -11, 16, -40, 77, -44, -3, 20, -31, 56, 52,
+ -44, -47, 10, 15, -11, 23, -17, 73, -80, 54, 27, -50, 45, 52, -60, 49,
+ -14, -57, 30, 14, 15, -30, -40, 42, -56, 27, -56, 27, -38, 31, -12, 65,
+ -52, -16, 11, 7, 51, 62, -27, 67, 13, -26, -57, 26, -47, -14, 18, 9,
+ -22, 0, 37, -24, 25, 55, -37, -23, -16, -34, 32, 15, -38, -4, 53, -13,
+ 62, -35, -51, 48, -68, 5, 18, -87, 48, -8, 45, -74, 48, -78, 53, -48,
+ 62, -30, 5, -16, 67, -27, 36, -49, 53, -38, 77, -58, 63, -13, 21, -5,
+ 52, 22, 19, -17, 40, -55, -9, 16, 17, 50, -24, 22, -42, -9, -43, -46,
+ 29, 7, 7, -38, 53, -66, 20, 31, -5, -7, -61, 37, -52, 18, -5, -24,
+ 17, 40, -14, -48, 25, -3, 4, -33, 18, -8, -25, 30, -18, -19, 99, -57,
+ 59, -39, 14, 43, 9, -45, 46, -58, 56, 15, -33, 67, -26, 69, -24, -34,
+ 32, -16, -32, -28, -52, 45, 8, 6, 27, 33, -13, 2, -57, -17, 14, 60,
+ 43, -48, 45, -54, -17, -17, 19, -36, -29, -9, -56, -30, 84, -55, 32, 0,
+ -1, 27, 6, 42, -10, 12, -22, 6, -56, 27, 37, -8, -20, -10, -53, 50,
+ 6, -25, -26, 90, -15, 21, -77, 54, 42, -55, -4, 43, -63, 65, -56, 74,
+ -1, 43, 8, -46, -47, 48, -53, -43, 11, -79, 42, 17, 10, -33, 72, -76,
+ -45, 73, -52, 71, -4, -58, 59, -14, -5, -36, -32, -29, 44, -43, -61, -19,
+ 74, 12, 2, -38, -32, 33, -19, 16, 56, -63, 40, -23, -4, -6, -5, 49,
+ -28, 6, 20, 39, -5, 25, -32, 23, 18, -49, 52, -22, -10, 18, 13, -41,
+ 6, -15, -21, 29, -37, -65, 55, -76, -25, 1, 10, 23, 67, -67, 43, -36,
+ 33, -9, -24, -47, 52, -46, 46, -4, 15, 3, 4, 60, -2, 34, -60, 56,
+ -84, 66, 27, -50, 66, -41, 15, -25, 21, 38, -64, 58, 36, 36, -76, 37,
+ -61, -5, 2, 37, -11, -18, -9, -41, 45, -50, -25, -29, 10, -19, -63, 34,
+ -64, 66, -55, 10, -37, 20, 45, -44, -30, -2, 47, -17, -18, 34, 39, 11,
+ -32, 16, -13, 20, 1, 26, 21, -22, 12, 20, 42, -25, -38, 83, -65, 33,
+ 46, -93, 81, -49, 0, -9, -62, 56, -29, -49, -27, 3, 53, -54, -46, -23,
+ 6, -13, 37, -77, 81, -10, 40, 23, -54, 15, 59, -44, 33, -72, -34, 60,
+ -63, 80, 2, 37, 7, 8, -48, 6, -12, -10, -49, 14, 45, -41, 28, -67,
+ 8, -8, 10, -5, 49, -15, -2, 0, 15, -6, 19, 48, -55, 45, -16, -28,
+ 38, -77, 70, -102, 36, -49, 49, -37, 47, 51, -84, 54, -52, 48, 28, 16,
+ -56, 7, 15, -68, 43, 40, -8, -30, -72, 66, -61, -16, 18, -10, 45, -75,
+ 2, 15, -34, -17, 44, 32, 10, 35, 35, 51, -10, -51, 27, 20, -58, 72,
+ 27, 23, -67, 53, -8, -2, -51, 25, -29, -2, 61, -17, 49, 25, 53, -13,
+ -14, -70, 64, -33, 73, 9, -32, 42, -54, 60, -84, 74, -47, -52, 41, -85,
+ 25, 42, -62, -39, -16, -22, 41, -51, 3, 13, 30, -21, -19, 7, 33, -5,
+ 12, 26, 58, -16, 7, 0, -9, 18, 49, -8, 32, -75, 3, 12, -17, -4,
+ -17, 2, 32, -5, 24, -31, 46, -48, 59, -29, 1, -69, -50, -5, 25, 35,
+ -36, 19, -20, 2, 3, 65, -82, 59, -37, 45, -41, -24, -33, -5, 46, -20,
+ 67, -68, 39, -21, -17, -19, 42, -39, 66, -25, -33, 67, -28, 46, 7, -2,
+ 32, -67, -4, 10, 55, -42, -15, -18, 78, -38, -5, -52, 18, 25, -11, 20,
+ -40, 6, -24, -42, 48, -86, -12, 41, -46, 9, -14, 16, 24, -32, 18, -34,
+ -1, 34, 11, -51, 32, 49, 5, 44, -47, 84, 59, -94, 54, -23, 71, -86,
+ 89, -69, -9, 65, -37, -70, 26, -34, 49, -19, -31, 13, 21, 41, 42, -54,
+ 15, -19, -9, -18, -33, 21, 56, -16, 11, 20, 16, 22, -30, 7, 46, -32,
+ 27, 0, -33, 70, -47, 53, -27, -28, -33, 3, -24, 45, -9, -41, 53, -7,
+ 6, -53, 20, 31, 31, 11, -15, 32, -5, -35, 45, -63, 74, -57, -9, 31,
+ 38, 12, 34, -37, 46, -50, -8, 49, 15, 46, 29, 68, -65, 31, -32, 33,
+ 45, -45, 35, 2, 54, -76, 14, -18, -21, -87, 60, -8, -2, -23, -3, -74,
+ 57, -74, 23, 11, -65, 53, -8, 14, 21, -35, 12, 58, -73, -52, -19, 28,
+ 2, 2, 12, -14, -27, -37, -54, 58, -57, 41, -16, 9, 43, 14, 40, 49,
+ -1, -28, 25, 59, -41, -8, 11, 13, 14, -38, 10, 3, 9, -25, -27, 31,
+ 1, -47, -67, 74, -27, -53, 71, -57, 46, -35, -28, 59, 74, -70, 50, 26,
+ -3, 8, -9, -38, 32, -27, -36, -23, -32, -8, 17, 44, 74, -37, 10, -32,
+ -29, 40, -46, -31, 52, -101, 54, -4, -6, -45, 33, -2, -16, 22, -74, -3,
+ 36, -16, 41, 0, -5, 14, 41, -75, -12, -13, 66, -42, 49, -14, -11, 52,
+ -64, 67, -4, -76, 63, -43, 62, -19, -18, -6, 25, -13, 45, 12, -81, 97,
+ -39, 60, -6, 58, 16, 12, 78, -28, -19, 55, -19, 57, -24, -20, 38, 0,
+ -48, -20, -9, 38, 1, -26, -31, -80, 102, -114, -2, 58, 1, -21, 22, 46,
+ -24, 24, 38, -49, -24, 86, -15, -24, 43, -38, 9, -55, 2, -59, 16, -25,
+ 26, -26, -6, -29, 48, -7, -52, 32, -20, 8, -4, -11, 0, 24, -63, 39,
+ -47, -15, -23, -13, -53, 24, 15, 60, 20, 18, 36, -37, -31, 27, -2, -3,
+ 37, 46, -1, -8, -18, 34, -6, -58, 60, -45, 16, -49, 12, 46, -39, -39,
+ -35, -2, 9, 9, -45, 4, -28, 61, -54, -18, -46, -44, 33, -17, 10, 0,
+ -32, 14, -33, 49, -80, 61, -78, 47, 37, 50, -74, 19, 25, -21, 48, 23,
+ 8, 32, -54, 52, 23, -49, 18, 41, -13, 75, -72, -33, 26, 51, 35, 26,
+ -42, -31, 43, -57, 59, 67, -44, 40, 0, -25, 27, -61, 38, -25, -69, -23,
+ 41, -65, 8, 4, 0, 3, -21, 48, -54, 50, -48, 33, -9, -11, 35, -23,
+ -14, 15, 41, -48, -16, 89, -87, 90, -69, 38, -43, -24, -37, -23, 58, -61,
+ 11, -27, 51, 39, 10, -33, 30, 20, 46, 40, -3, -35, -44, -40, 50, 7,
+ 15, -7, 48, 66, -42, 58, 16, 14, 38, -53, 52, 17, -41, 22, 67, -39,
+ 19, 2, -56, 1, 38, 30, -35, 64, 39, 51, -37, -28, -11, -46, 3, -4,
+ 0, -7, 26, 48, -41, 7, 31, -47, 30, -11, -2, 32, -49, 38, 0, -52,
+ -23, -32, 28, -72, -2, -36, -41, 5, -48, -13, 6, -61, 31, -50, 37, 26,
+ 7, 7, 10, 46, -42, 28, 63, 37, -77, 75, 14, -36, -22, 44, -34, 24,
+ -11, -59, 50, 10, 4, -83, 78, -47, 5, -8, -7, 65, -16, 3, 30, 77,
+ -63, 53, 65, -15, -24, 73, -47, -6, 11, -5, 43, -77, 8, -19, 47, 33,
+ 40, 39, -26, 53, 15, -6, -15, -76, 13, -33, 48, -33, -23, 50, -48, -31,
+ 5, -45, -26, 47, -71, 31, -29, 32, -48, -9, 28, 21, 8, -28, 13, 32,
+ 21, -44, 14, -58, 42, 28, -41, -3, 10, -15, 30, -27, 34, 0, 12, -14,
+ 59, -51, -30, 42, 0, 12, 6, 54, -74, -25, 45, 65, -83, 36, -6, -10,
+ 52, -86, 34, -34, 11, 14, 24, -41, -57, -8, 24, 74, -72, -31, -56, 51,
+ -55, 24, -1, 43, -43, -47, 27, -47, 22, 24, -47, 66, -71, 88, -31, 54,
+ -13, 58, -45, 0, 45, -47, 56, 17, 4, -19, 24, -4, 15, -52, -14, 18,
+ 33, -42, 8, 51, -28, -21, 17, -68, 71, -12, 65, -60, 44, -4, -46, 31,
+ -33, 22, -36, -50, 2, 51, -1, 32, -67, 1, -37, 49, 17, 47, -25, -57,
+ 61, -51, -31, -63, -6, 5, -28, -33, -25, 6, -31, 39, 0, -21, -61, 29,
+ 40, -20, 49, -27, -39, 17, -64, -2, -63, 8, -24, 64, -49, 16, 27, 19,
+ 23, -22, -68, 46, 9, -2, -3, -43, 29, -15, 66, -18, -29, 10, -63, 69,
+ 6, 64, -63, 85, 2, -19, 9, 25, 32, 22, -49, 85, -27, -9, -2, 23,
+ -45, 21, 45, -56, -5, -24, -74, 45, 24, -43, -38, 55, -8, -25, 48, -46,
+ -41, 88, -78, 69, -42, 39, -41, 67, -47, 45, 14, -57, 50, -11, -25, -45,
+ 12, -41, -56, 7, -38, -24, -10, 57, -41, 0, 17, 52, 36, 7, -33, -39,
+ -11, -48, 64, -41, 43, -30, -36, 54, 6, 40, -56, 68, -36, -23, 48, -19,
+ 37, -61, 55, 20, 7, -37, 16, 23, 61, -28, 10, -12, 6, 11, 51, -58,
+ -37, 64, -5, 76, -70, 15, 64, -52, 56, -58, 44, 45, -14, 21, -19, -62,
+ 30, -34, 100, -57, 20, 18, -64, 25, -39, 84, -56, -62, 91, -61, 4, -31,
+ -48, 50, 36, -57, 13, 36, -16, -31, 80, -47, -38, -14, 41, 0, 48, -23,
+ 63, 1, 7, -10, 7, 8, 45, 14, 3, -50, 53, -10, 30, -83, 20, -37,
+ 45, -38, 35, 23, -13, -28, -65, -4, -13, -43, 91, -101, 51, 29, 4, 15,
+ 3, -20, -49, 30, 44, -42, 21, 2, -21, -23, 30, 23, -2, -2, 4, -28,
+ 56, -33, 17, 15, 1, -64, 3, -14, -3, 3, 19, -24, 0, -84, 59, 36,
+ -32, -20, 49, 72, -35, 13, -11, 27, 48, -52, 4, -15, 13, 27, 59, 3,
+ -67, -39, 44, -8, 9, -2, 41, 29, -29, 39, -65, 1, 4, 70, -56, 34,
+ -52, 0, 40, -31, 37, -35, -27, 49, -20, 25, -63, -44, 25, -30, 64, -10,
+ -42, 25, -59, 29, -57, 93, -15, -22, 0, -12, 71, -86, 25, -49, 53, 0,
+ -12, 25, -50, -16, 52, -63, 82, -72, 67, -45, 30, -5, 16, -4, -42, 40,
+ 68, -62, 41, -37, -34, 58, -41, -3, -15, -60, 7, 53, -39, 0, -19, 38,
+ -42, 31, 55, 14, 23, 70, -50, 4, 40, -4, -56, -44, 6, -42, -18, 12,
+ -54, 17, -3, -40, -24, 25, 18, -1, 31, -39, 22, -77, 51, 33, -14, 37,
+ -29, 40, 22, -60, 14, 30, 28, -3, -75, 34, 25, 8, 17, 33, -82, 90,
+ -29, 24, -73, 26, -22, 52, -49, -12, -24, 36, -37, -65, 49, -76, 41, 45,
+ -2, -8, -52, -15, -34, 43, 0, -43, 42, -72, 75, 13, -74, 95, -9, 3,
+ 15, -9, 20, 28, 3, -41, -45, 44, 24, -21, 56, 13, 1, 18, -15, -32,
+ -69, 36, -22, -9, -15, 25, -28, -68, 67, -24, 14, -46, -19, 101, -43, 28,
+ -4, -23, 30, -71, -7, 38, 48, -11, -3, 63, -104, 93, -40, 20, -46, 26,
+ -9, 1, 35, 7, -30, -19, 79, -30, 27, -5, -41, 35, -39, 5, -5, 47,
+ 9, 2, -52, -3, -14, 63, 14, 17, -3, 29, 0, -56, 25, 60, -15, 38,
+ -36, -1, 13, -47, 9, -7, 27, -65, 57, 33, 38, -51, -10, -1, -31, -31,
+ 109, -21, 35, -13, -18, -22, 25, 28, -46, 5, 30, 39, -29, -44, 14, -9,
+ 56, -69, 81, -39, 2, 1, -2, 19, -9, -27, 78, 35, 35, -26, -66, 41,
+ -29, 37, -34, 63, -27, -55, 19, -6, 6, -5, -64, 69, 15, 14, -32, -28,
+ 38, -51, 37, -22, 28, 42, 31, -17, -35, 60, -57, 0, -61, 11, -27, 19,
+ -56, 9, -29, 19, -22, 1, 9, 19, 25, 39, -12, -27, -50, 56, 3, 63,
+ -33, 13, -68, 53, -39, -20, -32, -14, 40, -45, 12, 59, -7, 19, -21, 54,
+ 20, 26, -41, 98, -36, 33, 1, -78, 6, -29, -10, 55, -41, -33, 51, -40,
+ 31, -67, -47, 53, -63, -17, -25, -35, 26, 18, -91, -4, -39, 4, -45, 48,
+ -55, -2, 73, -19, -20, 32, -20, 89, -66, 68, 46, 0, -33, 41, 3, -2,
+ -6, 65, -12, 37, -56, 5, 10, 41, -49, 72, -70, 22, -7, -42, 5, -24,
+ 39, -38, -26, 53, -72, 53, 44, -83, 26, -9, -2, -48, -15, -53, 61, -5,
+ 73, -61, 17, -54, 84, -73, 103, -71, 73, -85, 60, -10, 23, -80, 0, 43,
+ -11, -60, 51, 2, 63, -8, -14, 45, -31, -41, 75, -32, -38, 36, -30, 10,
+ -55, 47, -57, 91, -50, 9, -53, -46, -8, 36, -57, 10, 20, 4, 31, -56,
+ 10, -23, 43, 39, -54, -4, -11, -35, 15, -21, 33, 32, -25, -26, -21, -37,
+ 46, -11, -42, 38, 26, -36, 52, -42, -19, -74, 35, 50, -4, 1, -21, -3,
+ -62, -14, -23, -22, 20, -6, 20, -59, 75, -57, 69, -80, -8, 75, -20, -17,
+ -23, 49, -64, -31, 55, 30, -1, -69, 57, -40, -74, -25, 27, -37, 57, 39,
+ -13, 62, -52, -50, 18, 28, -16, -30, 70, -42, 27, -3, -64, 22, 7, 7,
+ -7, 24, 6, -32, 1, -60, 2, -11, -19, -18, 86, -56, 79, 67, -52, -2,
+ 68, -45, 51, -7, 16, 9, 0, -22, 33, -78, 57, 34, 54, -39, -23, -27,
+ -9, -35, 44, -10, -26, -47, 80, -27, -2, 29, 0, -30, 43, -22, 28, -16,
+ -18, -13, -26, -15, -81, 14, 33, 31, 32, 21, -1, 12, -12, -8, -41, 11,
+ -18, 35, 58, -14, 40, 55, -36, 7, 15, -4, 73, 11, -28, 54, -51, 80,
+ -43, 3, -24, -8, -18, -2, -18, -11, 6, -34, -73, 24, 2, -8, -58, 62,
+ -47, -46, 0, 34, 46, 3, -28, 45, -13, -10, -17, 27, -36, 49, -4, 22,
+ -87, 80, 8, -32, -23, 56, -28, 30, 50, -1, 3, 1, 46, -2, -70, 69,
+ -28, 33, 40, -7, -35, 14, -53, 3, 0, 21, -21, -37, -31, 74, -8, -55,
+ 62, -29, 32, -69, 2, -62, 35, -52, 69, -77, 11, 21, -6, 32, 32, -64,
+ 38, 5, 19, -59, -35, 61, 14, 62, -39, 17, 21, 0, 21, -13, -58, 28,
+ 20, -4, 30, -79, 64, -32, 13, 40, -9, -34, -35, 72, -32, 16, -27, 34,
+ 7, -1, 21, 1, -8, 11, -25, 65, -27, -3, 11, -70, 51, 2, 19, 42,
+ 17, 25, -28, 20, 44, 1, -30, -24, 16, 25, -34, 49, 30, -40, 19, -30,
+ 54, -96, 80, -27, -15, -16, -36, 42, 10, 26, 44, 39, -20, 22, 2, -48,
+ -57, 9, -8, 73, -58, 62, -64, 64, -47, -5, 12, -70, 55, 68, -39, 47,
+ -44, -24, 56, 0, 62, -48, 23, 2, 41, -17, -24, 1, -45, -47, 61, -41,
+ 60, -43, -32, -63, 88, -70, 84, -21, 37, -8, -30, -21, -36, 23, 59, 22,
+ -63, 88, -56, 26, 26, 29, -45, 46, -49, 74, -43, 47, -72, 50, -7, 36,
+ 37, 31, -63, 76, 50, 44, -56, 17, -35, 14, 24, 36, -35, 62, -15, 0,
+ 12, 24, -47, 22, -22, 14, -43, 42, -15, 23, -62, 47, -35, 39, -3, -50,
+ 24, 37, -10, 23, -2, 20, -22, -52, 34, -47, 71, 67, -55, 35, -8, 24,
+ -49, 56, -60, 9, -34, 4, 13, -35, -40, 25, 32, -6, 35, -68, 43, -35,
+ 113, -115, 56, -24, 46, -69, 29, -61, -24, 25, -42, -27, 60, -24, 71, -89,
+ 10, -60, 19, -1, 49, -59, 40, 27, 37, -3, 4, 36, 74, -97, 62, 47,
+ -83, 53, -41, 95, -68, 49, 26, -26, -12, 77, 11, -18, -1, 4, -37, 31,
+ 14, -48, 18, 25, -12, -22, -5, -48, 46, 24, 12, 21, -67, 60, 32, -52,
+ 12, 62, -92, 76, 11, 57, -56, -30, 34, 5, 17, -27, -20, -19, -26, 62,
+ -77, 29, -6, 14, -19, -67, 61, -73, 63, 0, 51, -79, 11, 11, -40, -16,
+ 6, -21, -3, -2, -52, 2, 0, 74, -45, -8, -12, -9, -39, 3, 3, -15,
+ 61, 29, 59, -60, 65, 16, -33, 46, 8, -54, 62, -98, 60, -75, 38, 19,
+ 17, 34, 6, -18, -4, -10, 30, -14, 40, 18, 8, 86, -73, -57, 16, -86,
+ 62, -25, -51, 21, -72, 39, -12, -13, 21, -5, 41, 14, 20, 2, -32, -5,
+ -33, 42, 37, 27, -32, 5, -59, -29, -67, 36, 63, -76, 88, -22, -69, 18,
+ 11, -53, -7, 10, -23, 38, -22, 11, -6, -59, -9, -52, 31, -5, -58, 0,
+ -66, 46, -24, 3, -88, -5, 34, -43, 7, 2, -33, -36, 80, -81, 50, -2,
+ 0, -24, -13, -12, -7, -6, 50, -22, 20, -79, 63, -70, 5, 0, 15, 17,
+ 8, -30, -51, 26, 26, 24, 2, 99, -74, 63, -43, -23, -17, -44, 37, 20,
+ -9, 53, 26, 16, -22, 20, -9, -26, 31, 44, -46, -48, 15, 60, -12, -34,
+ -65, 33, -2, 22, -40, 5, 27, 11, 12, -38, 46, -15, -44, -17, 27, 40,
+ -13, 63, -46, 48, -12, 3, 39, -51, -4, -33, -1, -55, -73, 82, -55, -27,
+ 21, 71, -35, -46, 2, 54, -48, 41, -45, -29, -35, -6, 29, -60, 63, -8,
+ 34, -55, 30, -26, 48, 3, 42, -32, 35, -64, -13, 66, -77, 25, -65, 41,
+ -3, -67, 54, -62, -30, -57, 52, -13, -4, 41, 10, -38, 78, 10, -42, 47,
+ 7, 18, -45, -3, -13, 50, 28, -77, 57, -91, 61, 27, 37, -68, 58, 2,
+ 6, 16, 11, 14, 33, -36, 62, -47, -15, 9, 5, -27, 84, -9, -55, 35,
+ -68, -36, -65, 24, -80, 56, 4, -39, -63, 37, -70, 78, -3, 48, -26, -38,
+ -48, 11, -27, 64, -51, 52, -63, 0, -73, 10, 22, -77, 68, 2, -5, 69,
+ -2, 28, 1, 54, 31, -84, 64, -9, 16, -78, 4, -53, 33, 6, 4, -27,
+ -4, 47, -76, 18, 27, -55, 77, -7, 48, -28, 5, 43, -60, 5, 27, 3,
+ 22, 49, -7, -14, 57, -4, -50, 4, 16, 26, 48, 22, 1, -39, 21, 66,
+ -33, 21, 12, 9, 51, 0, -41, 39, -69, 72, -48, -20, -50, 33, 34, -56,
+ 25, -3, 20, 18, -81, 68, -79, 52, -15, 80, -74, 99, -67, 25, 25, -68,
+ 17, -5, 64, -31, -43, -68, 60, -110, 62, 8, -36, -8, 20, 50, -48, -48,
+ 20, -85, 28, -57, 41, 23, -41, 10, 25, -41, 13, 61, -49, -20, 64, -11,
+ 76, -2, -15, 17, 31, -46, 41, -11, -18, -36, 47, -13, 61, -63, 53, -68,
+ -45, 6, 13, -61, -16, -11, 21, -50, 85, -77, 41, 52, 15, 35, -16, 11,
+ 4, -72, 7, 7, 15, -52, 70, 15, -21, 60, 19, -34, 56, -35, -25, 37,
+ -14, 9, 40, -69, -8, -16, -25, 0, 20, -20, 3, -82, 80, 1, 3, -4,
+ 32, 24, 37, -53, 73, 7, 51, -61, 2, -33, 6, -39, -6, 30, -24, -6,
+ -17, 49, -23, 84, -37, 22, -41, 76, -5, 49, -92, 49, -16, 28, -17, -26,
+ -15, -48, 20, -41, 63, -34, 3, -29, 37, 25, -3, -25, -31, 6, 17, 35,
+ -9, 77, 7, 16, 55, -59, 34, -14, 50, 36, 3, -30, -37, 14, -16, 25,
+ 47, 34, 6, 5, -30, -50, 75, 4, 69, -24, -39, -21, 41, -35, 67, -72,
+ 5, 8, -48, -41, 0, 17, 5, -7, -5, 78, -4, 22, -33, 67, -26, 23,
+ 12, 50, -77, 65, -80, 70, -48, 62, -61, 51, -28, -32, 19, -18, -18, 14,
+ 19, -61, 43, -1, -67, -9, 55, 14, -1, -22, -1, -31, 23, 35, 3, -30,
+ 3, 7, -54, 41, -38, 44, 1, 17, -12, 7, 33, -1, 45, -39, 0, 0,
+ 29, -57, 30, 13, 32, 32, -6, -32, -24, 25, -13, 35, -41, 38, 6, 60,
+ -67, 46, -52, 14, 18, 65, -76, 83, -41, 66, 6, 20, -46, 45, 43, 53,
+ -77, 83, -32, 50, -27, 36, -67, 58, -18, 1, -24, 12, -36, 3, -39, -4,
+ -58, -5, 29, 10, -48, 52, -44, 42, 43, -25, -25, 26, 38, -52, 18, 57,
+ 63, -73, 75, -27, 40, 41, -38, -3, -20, 40, 46, -3, -57, -44, 56, -79,
+ 45, -1, 31, -52, 24, -13, -58, 3, -14, -35, 0, -24, -27, 80, -29, -55,
+ 35, 35, -24, 44, 13, 29, -13, -11, 13, -41, 56, 22, -19, 16, 7, -42,
+ -11, -24, -27, 42, -13, -23, -35, 55, 1, 46, -76, 78, -2, -2, -53, 37,
+ -40, 19, -19, -50, 12, -6, -3, -69, 56, -47, 47, -26, -46, -8, 21, 15,
+ 39, 56, -36, -1, -62, 54, -45, 67, -38, -17, 13, 26, -7, 32, -43, 22,
+ -62, -21, 17, 28, -56, -32, 16, 28, -61, -26, -30, 0, 27, -4, 25, -43,
+ -20, -77, 25, -7, 12, 44, -83, 73, -83, 78, -4, 15, -31, 35, -70, 63,
+ -55, 63, -18, 3, 49, 30, -39, 7, -28, -45, -11, 26, 15, -37, -36, -33,
+ -11, 31, -19, 68, -32, 10, 40, -37, 9, -7, -65, 81, -56, -20, 35, 4,
+ -60, 45, 10, -73, 52, 28, -51, -28, -37, 75, -63, -16, -34, -35, -20, 3,
+ -6, -4, -8, -39, 3, -53, 4, 10, -9, 13, -1, 10, 44, -20, -56, 73,
+ -71, 24, 61, -78, 14, -45, -21, 87, -68, 24, -36, -22, 36, -49, 20, -77,
+ 37, 60, -51, 75, -76, 51, -15, 16, 0, -71, -4, -13, -11, -29, -62, -25,
+ 84, -58, -4, 13, -42, 10, 30, -3, -35, 41, 29, 1, 53, -39, 55, 7,
+ -15, 59, -55, -25, 18, -11, 60, -72, 51, -41, -26, 32, -37, 14, -10, -45,
+ -30, 44, -95, 69, -46, 15, -2, 18, -9, -43, -50, -11, 16, 30, 18, 23,
+ -1, 14, 25, -4, 20, 10, 13, -19, 26, 49, -53, 92, -43, 4, -20, 2,
+ 34, -78, 14, -28, 27, 35, -40, -5, 61, -36, 37, -32, -25, -5, 22, 28,
+ -15, 61, -55, 71, -36, 62, -65, 58, -38, -50, 88, -51, 6, -59, 85, -20,
+ 0, -33, 48, -33, -21, 64, 23, -21, -23, -6, 14, -31, 52, 5, -30, -37,
+ -33, -58, 70, -7, 68, -64, 36, -37, -11, -6, -15, 13, -1, 19, -58, 36,
+ 36, 58, -68, -38, 52, 13, -35, 28, 36, 48, -34, 32, -16, -36, 36, 20,
+ 11, 78, -41, -30, 32, 12, 39, -30, 13, -70, 40, 12, 0, 15, 11, -23,
+ 23, -28, 23, -7, -88, 54, -9, -70, 70, 15, 31, -70, 44, -40, 78, 13,
+ -24, -78, 51, -87, 71, -34, -61, 84, -55, 50, -6, 48, -10, 70, -49, -34,
+ 3, 53, -6, 22, 17, 40, 9, 27, 25, -64, 79, 11, 21, 65, -68, 60,
+ 33, 17, 26, 38, -54, 67, -10, -10, 43, -41, 2, -29, -69, 51, -5, 10,
+ 3, 44, -73, 4, 57, 35, -36, -14, 76, -49, -5, 46, -57, 0, 2, 105,
+ -86, -34, 28, -45, 9, -30, 36, -42, -15, 72, -40, 12, 32, 14, 84, -52,
+ 35, -62, 42, -3, 25, 63, -56, 54, -60, 6, -36, -43, -7, 28, -79, 37,
+ -70, 30, 21, -31, 63, -32, -18, -18, -55, 29, 22, 46, -51, 42, -86, 61,
+ 4, 31, 17, -20, 12, 31, -72, 22, 58, -32, 52, 27, -79, 72, -67, -38,
+ 4, 21, -52, 1, -73, 32, 10, -34, 0, 21, -62, 22, -38, -35, 3, 36,
+ 8, 55, -49, 0, -22, -23, -5, -19, 21, -15, -46, 83, -39, -19, 31, 29,
+ -64, -4, 4, -38, -5, -30, 16, 9, 22, 22, -71, 54, 7, 35, -4, -14,
+ -11, 39, 4, 62, -17, -25, -52, 64, -12, -6, 24, 0, 1, 29, -21, 33,
+ 60, -26, 23, -83, 46, -30, 26, -35, 28, 5, 50, -30, -14, -23, 4, 28,
+ -48, -10, 33, 8, -13, 49, -62, 78, -94, 65, -36, 18, -8, 46, -58, 17,
+ -17, -68, 4, 67, -24, -23, -41, -22, -54, 82, -73, 0, -42, 43, -77, 66,
+ -33, 68, -79, 63, 46, -31, 23, 53, -37, -26, -1, 15, 18, 37, -20, -55,
+ 78, 47, 47, -12, -76, 67, -16, -65, 59, -26, -10, -29, -15, -18, 55, 25,
+ 14, -87, 13, -45, -31, -16, -43, 20, -13, 26, -26, -26, -5, 18, 12, -30,
+ -12, -37, 14, 17, -26, 25, 11, -27, 13, -27, 4, 34, 51, -10, -8, -28,
+ -7, 48, -40, 59, -81, -19, -20, 54, -94, 101, -51, 13, 10, 26, -45, -85,
+ 56, 37, 41, -36, 38, -25, 0, -14, 23, -11, 44, -21, -12, -20, -29, 43,
+ -66, 60, 4, -17, -20, -29, 3, -42, 95, -50, 65, -22, 15, 39, 4, 8,
+ 55, -64, 62, -10, -13, -43, 28, 54, 57, 5, -21, -55, 46, 16, 52, 0,
+ -21, -5, -83, 32, 30, -79, 81, -1, -28, 0, 34, -54, 65, -65, 80, -14,
+ 0, 13, 52, 43, 37, -30, 41, 51, -48, -47, 50, -13, 24, 40, -5, -17,
+ -20, -24, 37, 40, -9, 35, -29, 50, -21, 6, -28, -67, 73, -49, 25, -58,
+ 60, 0, -47, 66, -26, -8, 22, -62, -26, -16, 58, -68, 4, -52, -21, 6,
+ 26, -46, 26, -48, -8, -29, 77, -44, 16, -57, 34, -12, -28, -52, 62, -76,
+ 19, 40, 1, 53, -45, -14, 64, -27, 45, -13, 9, -49, 45, 40, 31, 8,
+ -17, -6, 19, -47, -3, -7, 52, -94, 43, -41, 0, 29, 5, -64, 90, -32,
+ -30, 56, 46, -69, -56, 50, -4, 56, -26, 33, 70, -35, 53, 4, 59, -78,
+ -39, 16, -20, 15, -47, -24, 22, 15, -12, -34, 30, 52, -74, 24, -42, 7,
+ -23, -67, -28, -14, 57, 24, -12, 7, 32, -39, 24, 17, -29, 22, -11, -43,
+ -48, 70, 46, -30, 76, 4, -36, 0, -11, 22, -44, 57, -22, -16, -69, 55,
+ -3, 0, -5, -16, -37, 34, 12, -38, -23, 6, 34, -42, -32, 6, 15, 5,
+ -9, -42, 34, -34, 71, 29, 24, -15, 20, -81, 5, 58, -43, 11, 38, 36,
+ 32, -51, -38, -37, 59, 33, -7, 0, -53, 58, -19, -20, 33, -57, 18, 17,
+ -7, -5, -8, 26, -7, -9, -52, 38, -76, 24, 7, -19, 62, -23, -51, 29,
+ -10, 0, -51, -11, 67, -15, 21, -56, -15, -60, -4, 51, -54, -48, 0, 2,
+ -22, 65, 55, -5, -87, 101, -66, -28, -2, 17, 10, 9, -76, 95, -62, 49,
+ -31, 9, -55, -64, 26, 25, -43, -50, 39, 8, 45, 16, 23, 16, -13, -32,
+ 54, -44, 15, 27, -44, 19, 24, -13, 7, 14, 53, 25, 12, -10, -13, 40,
+ 3, -9, 76, -29, -2, 0, 0, 58, 42, -25, 11, 39, -63, 73, 25, 52,
+ -46, 22, 10, 0, 11, -22, 5, 3, 23, 22, -27, -28, 49, 41, -43, 56,
+ -27, -65, 52, -50, 1, 18, -47, 16, -76, 64, -47, -13, 63, -62, -24, -44,
+ 17, 13, -10, 29, 59, -34, -19, 54, 19, 35, -73, 44, -19, 8, -28, 2,
+ -4, -41, -6, 33, 50, 52, -55, 44, 43, -34, -72, 47, -36, -69, 12, 51,
+ 54, -31, 15, 5, 26, -45, 0, -15, 58, 12, -31, -59, 54, -5, 51, -47,
+ 106, -22, 57, 44, -32, -38, 60, -57, -8, 20, 0, 43, -73, 23, 39, 10,
+ 42, -15, -19, -3, -20, 2, 53, -50, 50, 11, -21, 11, -25, 56, 24, -23,
+ -35, 42, -35, -13, 70, -67, 38, -11, 48, -30, -21, 71, -36, -15, 47, -58,
+ 42, 55, -21, -11, -3, -77, 33, -2, 30, 70, -15, -20, 69, -103, 53, -82,
+ 61, -44, 23, 45, -47, -52, 17, -29, 13, 31, -51, 75, -49, 65, 4, 21,
+ 21, -41, -23, -2, -56, 38, 18, 36, 54, -57, -8, 12, -59, -15, 47, 49,
+ -24, 0, 44, -24, 19, -38, 54, -63, 72, 24, 5, 33, -3, -17, 73, -51,
+ 32, -60, -22, 3, 87, -60, 14, 51, -31, 23, -32, -31, 69, -83, 27, -33,
+ 16, -32, 22, 61, -28, -41, 97, -34, 47, -7, -62, -30, -45, -25, 18, 18,
+ -54, 55, -47, -13, -31, 0, 16, -30, 0, -85, 30, -42, -20, -5, 1, -20,
+ -9, -48, -20, 12, -26, -23, 36, -78, 45, 33, -67, 26, 26, -30, -24, -72,
+ 0, 0, -36, 41, -68, 43, 48, -39, 33, 11, 0, 25, 37, -71, 15, -32,
+ -17, 28, 18, -15, 41, -13, 4, 24, -5, 22, 24, -31, 3, -12, -8, 34,
+ 8, -14, -24, 0, -36, -47, 66, -118, 44, -45, 57, -19, -8, -58, 53, -8,
+ 48, 6, 44, 12, -79, -17, -23, -14, -95, 66, 19, -27, 57, 24, 35, -49,
+ -54, -29, 69, -31, 0, 65, -3, -31, -35, -51, 48, 13, -37, 30, -49, -6,
+ -26, -50, 49, -81, 12, -35, 13, -25, 36, 11, -28, 24, 12, 1, -78, 7,
+ 34, -34, 0, -22, 58, -21, -60, 46, -43, 59, -64, 51, -1, -45, 41, 8,
+ -23, 10, 26, 10, 32, -29, -42, 10, 43, 16, -22, 27, -15, 20, -12, -36,
+ 5, -33, 5, -28, 50, 12, -39, -28, 6, -16, -35, -58, 3, 68, 20, -46,
+ 24, -42, 53, -4, -24, 99, -50, 20, 13, 12, -22, -23, -33, -6, -61, 5,
+ 26, -31, 75, -21, 39, 23, 12, -10, -51, 42, -45, 53, 28, -36, -29, -22,
+ -8, -64, 38, 13, -50, -13, -55, 45, -8, -78, 27, 1, -20, 55, -59, 6,
+ 2, -11, 85, -59, -53, 38, 13, -40, -22, 83, -45, 46, 25, -4, -3, -6,
+ 25, -32, 39, -51, 24, -35, -16, -45, -48, 45, 23, 27, 42, -27, -66, 72,
+ -60, 94, -46, -8, 20, 8, -28, 42, -11, 58, 27, 26, -16, -44, 45, 6,
+ -7, 71, -60, 43, 60, -51, 69, -47, -60, -7, 29, 10, -10, 48, 20, 34,
+ 25, 38, -55, 2, 9, 13, -54, -31, 8, -60, 17, 17, -40, 50, -10, 41,
+ -19, -11, 20, -47, 25, 0, -37, 60, -40, -17, -10, 40, -52, -15, -1, 45,
+ -82, 53, -23, 35, 2, 23, -5, 75, -5, -17, -4, 9, 24, 45, -10, -26,
+ 0, -65, 21, -58, 46, 15, 28, -2, 87, -40, 9, -70, 15, -85, 55, -6,
+ 79, -3, -41, 5, -38, -49, -16, 49, -2, 75, -4, -19, 69, -85, 63, 4,
+ 1, -13, -10, 23, 61, -26, -35, 39, -24, -1, 53, -78, 18, 31, 19, 32,
+ -21, -26, -29, -2, -46, -3, 82, 9, -10, -26, 84, -49, -10, 17, -13, 16,
+ 40, 27, -78, 35, -57, 23, 16, 6, -68, 1, 21, -74, 15, -21, 9, 25,
+ -17, 58, -75, 64, -93, 70, -27, 34, -19, -24, 39, 29, 56, -76, -24, 7,
+ 57, -6, 5, -80, 83, -91, 68, -62, 30, -6, 5, -19, 40, 2, 36, -33,
+ -1, 56, -99, 41, 33, -33, -22, -36, 34, 5, 54, -49, 28, -4, -10, 49,
+ 28, -2, 12, 12, 16, 8, 67, -56, 48, 53, -45, -13, 31, -77, 82, -4,
+ -10, -26, -56, 89, -27, -6, -50, 111, -39, -50, -18, 22, -30, -1, 39, -6,
+ -26, 24, 42, 56, -61, 74, -75, 80, 24, -31, -5, -1, 10, -15, 64, -3,
+ 20, -84, 12, 56, -37, 38, 40, -44, 69, -70, -17, -25, 29, 57, -35, 29,
+ -23, -18, 5, 16, -48, 30, -37, 44, 19, 33, -19, 7, -24, -19, -66, 63,
+ -52, 22, 30, 11, -11, -25, 67, -37, 45, -49, 41, -24, -24, -25, -32, 26,
+ 7, 22, -56, 64, -46, 0, 36, -89, 26, -38, 14, 44, 6, 51, 8, 19,
+ 8, 17, -3, -28, -4, -8, 35, -101, 43, 7, -19, 14, -18, 7, -21, 1,
+ 6, 56, -31, 51, -79, 67, -19, 20, -35, -22, 35, 29, 52, -20, -7, 14,
+ -38, -46, 92, -14, 19, 30, 16, -38, 9, -41, -12, -39, 34, 11, -6, -34,
+ -28, 12, 12, -49, 34, -33, 72, 29, -25, 1, 11, -19, 86, -77, 67, -66,
+ -14, 60, 20, 25, 32, -32, -50, -52, -9, -2, -16, -39, 45, -3, 1, -50,
+ -56, 74, -16, 66, -32, -10, 29, 1, 60, -24, 50, 30, -2, 18, 30, -1,
+ 13, -13, 30, -9, 57, -15, 24, -82, 74, 34, -59, 22, -57, 6, 51, 3,
+ -22, -38, 5, 37, -4, -1, -12, 12, 34, -44, -9, -14, 39, 36, 25, -11,
+ 3, -42, 69, -43, -54, 40, -30, 77, -54, -17, 5, -10, 41, -9, -37, -15,
+ 23, -15, 64, -88, 86, -64, -11, 15, -68, 3, 11, 32, -13, 39, -15, -16,
+ -2, 32, 11, -61, 54, 5, -20, -53, -54, 95, -34, 62, -46, 26, -17, -11,
+ -10, -28, -41, -58, -20, 16, 23, -24, -9, 16, 10, -47, -9, 56, -77, 23,
+ -32, 36, 58, -36, 10, -57, -31, 18, -89, 70, -19, 1, -39, -7, 8, -11,
+ 34, 1, 20, -42, 23, -39, -4, 15, -3, 31, -69, -23, 64, -43, 60, -30,
+ -36, 54, -13, -34, 64, 26, -26, 64, -38, 54, -72, 62, -24, 47, 6, -38,
+ -29, 69, -65, 69, -73, 41, 8, 74, 1, 73, -62, -2, -44, -68, 64, -55,
+ 48, -46, 2, 41, -42, -18, 17, 49, -24, -46, 40, -20, 54, -75, 71, -5,
+ -43, -35, 3, -56, 65, -43, -17, 8, -42, 16, -58, -14, -21, 36, -5, -20,
+ 5, 3, -46, 15, -27, 65, -38, 49, -46, -17, 34, -23, 5, 2, 12, 23,
+ 18, 38, 29, 25, -31, -15, -30, -53, 33, -53, 0, -49, -35, -42, -1, 31,
+ -42, 44, -87, 33, 7, 19, 28, 36, 53, -40, -41, 29, 25, 19, -49, 27,
+ 20, -40, -66, 13, 9, -22, 31, -89, 21, -41, -65, 44, -54, 32, -51, 12,
+ 8, 1, -33, 1, -91, 62, -62, 112, -86, -9, 7, 19, 36, 17, -34, -37,
+ 48, -30, 81, -86, 12, 35, -34, -74, 48, -46, 53, -39, -30, -61, 3, 1,
+ -21, 10, 28, -13, 42, -53, -5, 19, -42, 33, 4, -35, -7, 34, 19, -21,
+ -24, 12, -50, 78, -59, 11, 46, 40, 7, -26, 30, -13, 4, 1, 8, -13,
+ 23, -33, -12, 60, -57, 58, 14, 38, 67, -81, 56, -78, 87, -54, 1, -49,
+ 25, 6, 53, 22, 47, -5, -3, 19, -38, 34, -57, 94, -49, 9, 73, -31,
+ 36, -38, -37, -17, -29, 66, 54, -59, 88, -1, -37, 45, 11, 23, -59, 17,
+ -75, 78, -30, -14, 31, 31, -13, 32, -60, 40, 53, -19, -19, 28, 6, -14,
+ -18, -60, 4, 6, -84, -18, 46, -87, 56, -1, 48, 11, -15, 50, -74, 49,
+ 39, -78, 52, -53, 70, -52, -17, -57, -15, -57, 31, 33, 76, 5, -38, -14,
+ 10, 15, 34, -15, 64, -17, -10, 15, -20, 16, -2, 34, -23, 46, -16, -54,
+ 107, -17, 23, 48, 23, -23, -28, 82, -28, 62, 41, -10, -28, 56, -34, 36,
+ 0, -29, 1, 7, 40, -65, 3, 51, 0, 61, 24, -64, 54, -29, -22, 14,
+ 10, -66, 41, -28, -38, 69, -41, 34, 5, 54, 12, 35, 57, -19, 48, -46,
+ 45, -56, 95, -38, 0, 3, -59, 50, -56, 65, 49, -69, -14, -29, 53, 6,
+ -36, 3, 94, -10, -19, -55, 48, 73, -78, 61, 82, -58, 18, 27, 11, -32,
+ -24, 17, 24, 5, 52, -1, -13, -72, 66, -14, -49, 33, -24, -52, 37, 38,
+ -27, 23, -60, 49, 40, -67, 70, 46, 21, 8, 40, -34, 46, -10, -2, 13,
+ -10, 39, -41, 16, 0, 2, 35, -42, 45, 55, -47, 40, -66, 50, -58, 42,
+ 4, -19, 25, -45, -6, -11, -28, -51, 28, 32, -12, 23, -3, -18, 0, -48,
+ -47, 54, 6, 24, -6, -15, -27, -28, -30, -7, 16, 9, -47, 17, 50, 22,
+ 70, -66, 37, -50, -27, 27, -20, -30, 81, -79, 92, -65, -1, -2, -35, -24,
+ 62, -5, 85, -52, 112, -91, 2, -23, 11, -47, 25, -19, 31, 6, -14, 28,
+ 42, -44, -37, 16, -35, 0, -12, 44, -25, -7, -51, 37, 22, -57, 53, -22,
+ 38, 27, -4, 15, 72, -31, -30, 14, -61, 50, -64, -22, -1, -21, 67, -82,
+ -4, 65, -35, 64, -35, 62, -4, 54, -22, 51, -22, -69, -36, 0, 41, -27,
+ 2, 0, -45, -25, 22, -46, 14, 69, -60, 55, -61, 8, -40, -43, 24, 51,
+ -84, -44, 45, -22, -79, 24, -11, -50, 9, -79, -18, 31, -7, -64, 44, 15,
+ 5, 23, 45, -30, -47, 34, -33, -36, -14, -32, 3, 12, -4, -5, 18, 9,
+ -11, 4, -35, -3, 63, -15, 48, -27, 7, -59, 45, 11, -67, 29, -32, 36,
+ -9, 34, -62, 41, -60, -25, 62, -39, 12, -65, 8, 54, -6, -36, -34, 40,
+ 9, 17, -61, -34, 72, 49, -17, -29, 81, -40, -39, -7, -77, 66, -67, 54,
+ -8, -31, -45, -5, -43, 31, 13, 75, -72, 3, 65, -10, 31, -2, -3, -74,
+ 53, 0, -46, 27, -54, 15, -64, -62, 42, -28, -34, 64, -28, 29, -11, 33,
+ 27, 22, -37, -23, 14, 76, -54, 38, -24, -49, 31, -25, 10, 56, -44, -18,
+ 20, 10, -57, 39, 47, -14, -44, 42, 12, -24, 9, -55, -18, -60, 49, 65,
+ 64, -57, -30, 13, -48, 43, -38, 39, 27, 13, 30, -63, 18, 45, -28, -67,
+ -30, 4, 55, -39, 27, 20, 30, -29, -21, 7, -19, 14, 17, -36, 25, -22,
+ -65, 7, -19, -17, -63, 39, 11, 15, -32, -20, 15, 36, -21, -42, 40, -1,
+ 0, 28, 54, -42, 16, -7, -18, -5, 29, 30, -21, -43, 41, -1, -35, 11,
+ 9, -21, 27, 10, -46, 11, 8, 10, 62, -43, 33, -2, 16, -23, 29, 41,
+ 31, -9, -34, -8, -49, -21, 36, 18, -58, 50, 30, 65, -17, -31, 31, -8,
+ -55, 45, -25, 37, -42, 77, -48, -4, -35, 19, 13, -10, 88, -10, -44, 20,
+ 76, 20, -74, 59, 18, 28, 7, 70, 18, 2, 65, -72, 63, -3, -11, -52,
+ -21, 20, -17, 0, 5, 26, 17, 0, 28, -27, 45, -30, 19, -37, -24, -14,
+ 10, -12, 21, -1, -43, -47, 6, -60, 52, -38, -30, 23, 25, -11, 26, 32,
+ -28, -22, -31, 5, 34, 41, -51, 1, 38, 16, 8, -38, 51, 11, 53, -42,
+ -50, -21, 64, -48, -10, -69, -12, -14, -31, -17, 39, 19, 60, -33, 22, -62,
+ 41, 25, 43, 26, 2, 46, -77, 17, 30, 23, -84, 17, 0, -55, 80, -3,
+ -20, 19, 9, 7, 23, 39, 45, 62, -81, 15, 42, -50, -15, -2, 9, -37,
+ -41, -49, 45, 17, -66, -57, -23, 25, 25, -10, -16, -6, -2, -28, 53, 32,
+ -77, 14, 0, 39, -21, -5, 55, -10, -52, 18, 37, 0, 47, 62, -12, -66,
+ -45, 1, 64, -54, 51, -62, 74, -76, -6, -38, 2, 47, -7, -40, 35, 17,
+ 68, -65, -6, -27, 31, -74, 36, -6, 5, 4, -26, 15, -18, 15, -8, -4,
+ 95, -37, 52, 2, 4, 23, 4, 19, 18, 65, -20, -24, 6, -25, 57, -65,
+ 10, -49, -27, 70, -59, 81, -29, 21, -56, 19, -43, 73, -67, 24, -38, 62,
+ -33, 53, -69, 67, -27, 37, 8, -44, 39, -41, 32, -28, 0, -8, -23, 1,
+ -30, 20, -22, 16, -7, 62, -111, 42, -33, -41, 0, -67, 31, 39, -29, 16,
+ 49, -4, 6, -11, 35, -71, 32, -14, -48, 61, -22, -18, -78, 16, 52, -9,
+ -59, -33, 59, -38, 24, 12, -20, -101, 27, 41, -61, 9, 27, -37, 51, 9,
+ -27, -34, 21, -5, -4, -34, 41, -1, -33, -40, 52, -52, 55, 6, 3, 54,
+ 15, -35, -7, -23, 43, 32, -21, 13, 15, 46, -43, 24, -69, 74, -77, -12,
+ -23, 57, 35, 1, 43, 13, -22, -45, 41, 23, -36, 41, -73, 17, -42, 76,
+ -66, 89, -53, 65, -3, 61, 15, -12, 1, 4, 24, -26, -24, 31, 9, 20,
+ -21, -22, -51, 24, -33, -6, 35, -43, -51, 58, 18, -21, 49, -48, -16, 71,
+ -56, 35, -1, 25, -15, -36, -58, 17, 22, 45, -40, -23, 69, -21, -28, -8,
+ 63, -17, 17, 16, 45, -6, 74, -79, 31, 19, 35, -20, 41, -49, -38, 44,
+ 17, 31, 0, -16, -43, 49, -75, 80, -5, -16, -45, -32, 21, -48, 33, -7,
+ 71, 5, -47, 67, -55, -13, 26, 35, 52, -6, -44, 21, 3, 14, 0, -49,
+ -24, 72, -1, 0, -8, 22, -46, 57, 27, 3, -32, -2, 16, 15, 15, 14,
+ -36, -43, -6, -2, -24, -40, -25, -35, 11, -82, 60, -45, 28, -42, -57, 71,
+ -61, 69, -33, 30, -56, 20, -22, 16, 42, -12, -28, 33, -70, 91, -40, -33,
+ 47, -52, 31, -62, 7, -7, 9, -42, 54, -44, -16, 10, -15, 9, -37, 17,
+ -43, -11, 75, -72, 76, -78, 84, 29, 36, -29, 35, 73, -82, 51, -37, -28,
+ -31, 23, -1, -36, -39, 64, -50, 75, 13, 0, -29, 67, 43, -11, -13, -74,
+ 85, -34, -39, 60, -41, -61, 30, 87, -38, -24, 54, -27, -38, 53, -35, 37,
+ -16, 37, 27, 5, 0, -52, 25, -42, 36, 57, -65, 38, -43, 2, 31, -62,
+ -1, 14, 36, 13, 10, 5, 0, 68, -61, 2, -4, 12, -14, 48, -29, 34,
+ -1, -69, 8, -58, -21, -21, -14, 71, -96, -15, -17, -42, 54, 61, -43, 19,
+ 54, -46, -11, -43, 49, -80, -35, 56, -24, 9, -38, 39, -18, -4, -33, 47,
+ -1, 51, 58, -50, 5, -48, 81, -40, 43, -26, 4, 34, -27, 88, -38, -46,
+ -16, 6, 8, -40, -10, 45, -82, 74, -62, -24, 37, 55, -64, -16, 32, 23,
+ -65, 25, 35, -40, 38, 13, -16, 48, -31, -39, -16, -5, 51, -24, 52, -90,
+ 1, 45, -40, -23, 55, -31, 21, -51, 2, 58, 32, 9, -51, 6, -37, -2,
+ -29, -33, 61, -87, 93, -29, 42, -84, -31, 40, 13, -31, -7, -32, -29, 106,
+ -74, 19, -57, 46, 20, -39, 51, -77, -10, -11, 25, -41, 69, -104, 64, -57,
+ 4, 60, -1, -40, 71, 50, -18, -17, 43, 15, 5, -62, 56, 28, 39, 0,
+ -8, -41, 59, -51, 54, -6, -26, 44, -25, 57, -19, 23, 77, -91, 56, -50,
+ 4, 73, -54, 41, 30, 9, -71, 72, -61, 19, 50, -43, 30, 18, 61, -81,
+ 82, 11, -58, 5, 36, 3, -49, -19, -44, 21, -33, -53, 32, 55, -34, 14,
+ 67, -4, -38, 35, 58, -53, 52, -74, 62, -32, -18, -44, 49, -61, 21, 67,
+ -20, 5, -11, -49, 39, 5, 32, -69, -27, 66, -92, 44, 22, -29, -11, -4,
+ 13, -27, -35, 21, 18, 45, 6, 25, -49, 1, 45, -54, 43, -8, -37, -4,
+ 69, -27, -18, 41, -43, -39, 31, -39, -45, 87, -76, 47, -60, -10, -29, 42,
+ 22, 48, 0, 8, 30, 2, -25, 43, 42, 49, 53, 17, -18, -92, 77, -52,
+ 9, -5, 58, -9, 15, 14, 39, 3, -11, 41, -20, 14, -52, 64, 19, -56,
+ 35, -93, 40, -34, -24, 66, -73, -20, 50, -28, -16, -34, -25, -42, 18, 51,
+ 16, -18, -18, -39, 47, 8, 55, -47, 61, 17, -39, -24, 12, 49, -21, 44,
+ 25, -31, -14, -23, -15, -32, 19, -56, 28, 29, -21, 7, -19, 19, -75, 98,
+ 37, -25, -5, 55, -18, -10, -24, -25, 25, -68, -22, 27, 10, 30, 51, 6,
+ 5, -26, 45, 8, 0, -38, -18, 63, -4, 27, -35, 66, -46, 17, 60, -117,
+ 83, -41, 79, -63, -24, 79, -58, 114, -48, 24, 30, 25, -53, 58, -36, 45,
+ -40, -20, -25, 34, -65, 29, -41, 57, -49, 32, 29, 31, -47, 33, -22, 40,
+ 46, -9, -58, 29, -34, -24, 4, -56, 53, -47, -29, -32, -44, 28, 50, -58,
+ 83, -110, 50, -62, 70, -95, 111, -90, 43, -7, 10, -76, 45, -85, 60, -9,
+ 15, -66, 63, -5, -20, -64, 46, 67, -42, 77, -49, 35, 5, -73, 34, -22,
+ -50, -10, -6, 37, -42, 10, -41, 8, -49, 36, -35, 24, 22, -33, -15, 0,
+ -31, 45, 61, -19, 48, 0, -17, 10, 22, -16, 32, 23, -36, 14, -16, 21,
+ 22, 20, 33, -39, -47, 24, -11, -30, 6, 20, 57, -75, 84, -53, 60, -21,
+ -32, 14, 14, -42, -35, 54, -41, 52, 5, -38, 43, 42, 2, 65, -5, -45,
+ 7, -76, 12, 18, 18, -32, -23, -78, 50, -77, -52, 36, -47, 31, 19, -36,
+ -31, 13, -14, 19, -31, 40, -71, 52, -70, 54, -23, 1, 78, -80, -47, 70,
+ -55, 70, -22, 57, 36, -22, 44, -1, 8, -46, -16, 36, 47, -24, -15, -66,
+ 13, 4, -10, 82, -43, 20, -4, -20, -4, -52, -17, 62, -47, -39, 0, -33,
+ 7, 37, -45, 27, -64, 93, -81, 79, -55, 6, -21, 26, -27, 6, 59, -82,
+ -63, 19, -61, 19, -61, 33, 28, 9, 16, 77, -53, 47, 21, -28, -63, 51,
+ -36, 18, -57, -28, 20, -29, 83, -45, -6, -25, -37, 28, 40, -71, 59, 37,
+ -21, -31, -30, 0, 40, -58, -53, -14, -53, -4, -32, 44, 17, 17, -2, 54,
+ -68, 85, -27, -20, 73, -74, 68, -25, 27, -68, -17, -4, -11, -15, -54, -15,
+ -19, -15, 86, -69, 21, 35, -15, 46, -71, 55, -17, 50, -2, -49, 4, 19,
+ -90, 69, 60, -47, -63, 67, -44, 18, 36, 6, 16, 87, -79, 94, -26, -6,
+ -20, 2, -21, 65, -55, 99, -31, -70, 56, -107, 65, -47, -9, 14, 45, -11,
+ 26, 53, -38, 23, 0, 47, -33, 41, -18, 42, -8, 1, 0, 60, -39, -3,
+ -11, 15, -51, -5, -18, 22, -1, -33, 14, -29, -7, 27, 44, -15, -21, 7,
+ -33, 7, -87, 104, -11, -37, 3, 67, -45, -24, -33, 81, -91, 29, -60, 6,
+ -18, 2, 33, -5, 47, 23, -9, 0, -29, -9, 4, -56, -6, -27, -10, 33,
+ 59, -3, 50, -55, 53, -44, 76, 26, -25, 19, 34, -36, 36, 3, -2, 47,
+ -31, 2, -1, -33, -39, 58, -13, 0, -53, 37, -11, 21, -93, 83, -12, -63,
+ 36, -70, 2, -48, -17, -48, 48, -37, 3, 15, 61, -24, -5, 26, 0, 32,
+ 22, -12, 23, -87, 25, -48, 8, 8, 52, 66, -37, -71, 79, 13, -40, 2,
+ 13, -35, 19, 31, 15, 19, 6, -15, 10, -25, 26, 25, 64, -82, 4, 56,
+ 57, -43, 80, -24, 54, -19, 48, -14, -4, -62, 46, -63, -7, 32, 40, -58,
+ 10, 5, 64, 51, -41, 1, -65, 31, 9, 53, 1, -23, 33, -38, -22, 9,
+ 28, -56, 98, -34, -2, 38, 34, 51, 38, -13, -10, 4, -15, -71, 3, -5,
+ 19, -28, -27, 16, 5, 11, -20, -13, -27, 68, 19, -12, -62, 56, 21, 42,
+ -64, 54, -98, 60, -10, 30, -7, -21, -17, 46, 38, -35, 77, -12, 63, -30,
+ 89, -35, -35, 24, 51, -45, 53, -51, -28, 0, -40, -30, 24, -38, -23, 23,
+ 72, -29, -5, 4, -24, -80, 83, -44, 35, 27, 23, 46, -52, 44, -20, -27,
+ -16, -8, 30, -98, 51, -27, -6, -38, 51, -24, 3, -18, 0, 39, -53, 81,
+ -50, 0, 0, -7, 19, -57, 14, -16, 43, -5, 4, -37, -20, 40, -42, 41,
+ -55, 55, 36, -60, -37, 54, -10, -37, 44, -33, 51, -50, 68, -12, 55, 43,
+ -50, -10, -61, 23, -32, -21, 75, -84, 73, -36, -18, -7, 90, -43, 61, -50,
+ -48, 29, -43, -19, -37, 8, -27, 25, 9, -88, 71, -22, 4, 39, -72, 46,
+ -20, 4, 19, -1, 41, -28, 7, 23, 0, 10, -44, 1, 52, 12, -25, 75,
+ -13, 77, -44, 92, -13, 32, -8, 65, 3, 7, -26, -15, 8, 2, -39, 9,
+ 39, -19, 45, 16, 46, -7, 7, -17, -75, -11, 34, 55, -26, -10, 53, 58,
+ -74, 73, 9, -32, -7, -31, -1, -58, 38, -1, -15, -10, -45, 37, 66, -87,
+ -43, 66, -9, -68, 0, -66, -16, -13, 0, -11, -15, 68, 9, -51, 32, 49,
+ -49, 12, -78, 9, 17, -9, 51, -4, -37, -36, 49, -64, 47, 50, -13, -61,
+ 34, 59, -67, -24, 45, -34, -4, -62, 18, 45, -51, 0, -35, 80, 36, -50,
+ -29, 65, 13, 21, -46, 0, -9, 2, 35, -60, 37, -21, 65, 10, -26, 1,
+ 19, 5, 42, -3, -47, -14, 37, 35, -4, -33, -37, 24, -58, -61, 21, -23,
+ -60, 17, -27, -18, 15, -12, 22, -16, 39, -34, 64, 2, -23, 10, 7, -28,
+ -10, -14, 31, -37, 29, 46, -68, 57, 31, -40, -48, 42, -45, 52, -48, 6,
+ 0, -7, 18, 73, 15, 8, 6, -33, 38, -45, 72, -53, 75, -63, 15, -42,
+ -10, 71, -21, -48, 33, -2, 51, -44, 26, -33, 7, -43, -8, 19, -14, -25,
+ 72, -66, -13, 52, 9, 49, -39, 13, -20, -47, 13, -46, -40, 63, -56, 15,
+ 47, 21, 33, 20, -40, 55, -79, 41, 52, -12, 63, -35, -45, -29, 51, -32,
+ 21, -62, 52, 16, 52, 36, -26, -27, 54, 50, -3, -44, 20, -11, 35, 16,
+ -15, -2, -37, -34, 71, -57, -55, 72, -51, 76, -57, 36, -81, 64, -14, -1,
+ -68, 2, -19, -49, -22, -16, -25, -55, -36, 31, -73, 62, -51, 67, -4, 1,
+ -72, -13, 20, -52, -13, 27, -75, 78, 38, -15, -24, 15, -28, -19, -42, -34,
+ 19, -17, -48, 37, 39, -5, 19, 27, 20, -2, 29, -55, 32, -73, 2, 24,
+ 27, -66, 44, 37, 31, 24, 64, -31, 64, 2, 4, -73, 14, -20, -33, -57,
+ 69, -28, 55, -31, 22, -11, -29, 8, 2, -29, 18, 47, -67, -48, 15, 42,
+ -18, -42, 67, -62, 42, -11, 6, 83, -92, 24, 29, 22, -17, -62, 24, 44,
+ -33, 11, -51, 26, 33, 20, 9, -29, 47, -8, -59, 66, -65, 17, -1, 12,
+ 34, -75, 45, 15, 9, -13, -6, 0, -50, 38, -14, -31, 30, 86, -84, 64,
+ -1, -34, 52, -31, 52, -76, 42, 28, -60, 33, -27, 14, -19, 71, -44, -15,
+ -35, -54, 60, 2, -7, 28, -29, 11, -66, 0, 27, 6, -27, 20, -8, 42,
+ -60, 16, -19, -83, 11, -80, 27, 7, 28, -23, 5, -36, -42, 52, -9, -24,
+ 66, -85, 84, -36, 54, -82, 44, 36, -17, 14, 13, 49, -4, -18, 35, -2,
+ 35, -46, 60, -23, -63, 16, -65, 49, 23, 4, 59, 72, -29, -20, -11, -35,
+ 21, -41, -1, 0, -16, -19, -17, 47, -68, -38, 13, 17, 17, 21, -40, -28,
+ 0, 75, -52, 3, -40, -18, -4, -4, -46, -17, -33, -14, 33, -13, -24, -30,
+ 9, 46, -8, 34, -70, 78, 28, -82, 74, -84, 69, -18, 45, -83, 66, -58,
+ 104, -52, 53, 1, -4, 43, -5, 54, -21, 32, 17, 35, -47, -18, -37, 11,
+ 80, 23, -15, -15, 12, 44, -12, 19, -43, -45, 63, 28, -50, 26, 68, -58,
+ 36, -21, 12, -44, -7, -72, 37, -14, -2, 4, 1, 11, 35, 35, -45, 55,
+ -54, 36, -95, 58, -36, -7, -23, -12, -23, -15, -49, 23, 44, 48, 23, 15,
+ -8, -65, 29, 48, -64, 53, -17, 45, -3, -15, 3, -27, 47, 49, -24, -33,
+ 10, 13, -75, 42, 33, 2, -25, -58, 53, -38, 28, -5, -29, 24, -46, 19,
+ 20, -35, 22, -29, 40, -69, 3, -8, -7, -69, 75, -76, 88, -59, -4, -39,
+ 19, 11, -45, -15, 47, -47, 41, 7, 1, 36, -23, 75, -75, 22, -3, 18,
+ 3, 47, -38, 19, 5, 57, -67, -33, 58, 29, -47, 53, -60, -22, 43, 33,
+ 49, 62, -75, 35, -26, -26, 6, 18, 28, 23, -22, 65, -54, 49, -27, 20,
+ 60, -46, 45, 38, 40, 3, 28, 0, -4, -56, -3, 35, 19, -28, -1, 33,
+ -32, 55, -59, -3, 7, 18, -47, 19, -24, 30, -21, -14, 40, -37, 5, 0,
+ -21, -20, 15, -59, 86, -24, 80, -22, 21, -6, -46, -69, 32, -17, 70, -34,
+ 23, -25, 45, -41, 31, 12, 47, -53, 60, -12, 31, -42, 16, -69, 69, 46,
+ -13, -54, 92, -59, 56, 38, 6, 6, -20, 64, 6, 40, -50, -21, 73, 11,
+ -16, -16, 5, 74, -37, -6, -54, 80, -21, 35, -52, -38, 60, -17, -33, -26,
+ 22, -51, 13, -22, 55, 8, 18, -71, 43, -76, 36, 20, -40, 55, -26, 3,
+ -34, -42, 18, -4, -31, -11, -19, -36, 2, 28, -8, -61, 38, -30, -15, 6,
+ 3, 21, 17, -1, 59, 6, 33, -1, -6, 5, -49, 49, -40, 23, -9, 9,
+ 12, 1, 68, -79, 8, -8, -17, 33, 20, -3, 69, -3, -64, -6, -67, 69,
+ -39, 58, 2, -51, 30, -43, 71, -76, 71, -89, 82, -72, 41, -70, 34, 18,
+ -49, 34, 35, 11, -38, -18, -5, 74, 0, -38, -19, 37, 22, 2, 55, -52,
+ 3, 10, -40, 56, 19, -64, 85, 15, -42, 53, 42, -38, -25, 46, 12, -12,
+ 22, 12, -27, 49, -10, -19, 28, -40, 45, -29, -24, -41, 75, -67, 14, -22,
+ -22, 25, -10, -38, 62, -71, 76, -26, -65, 54, -37, 1, 13, 34, 3, -60,
+ -50, -1, 12, 40, -40, 52, -63, 35, 3, -19, -22, -2, -37, 26, 5, 4,
+ -14, -41, -34, 19, -46, 29, -6, -40, 37, 52, 19, -57, 23, -4, 22, -55,
+ 5, -57, 81, 4, 25, 49, -23, 6, -39, -13, 25, -8, -23, 41, -34, 37,
+ -7, -6, -27, 71, -34, -36, -32, -29, -40, -40, 21, 53, -20, 63, -70, -15,
+ 12, -60, 50, -68, 58, 6, -29, -51, 5, -36, 8, 11, 11, 38, -17, -27,
+ -33, 90, -89, 31, -47, -21, 34, -24, 28, -41, -77, 35, 51, -47, -33, 2,
+ -38, 47, -32, -70, 32, 38, -16, -53, 40, -19, 62, 16, -4, -19, 43, 22,
+ -23, 61, -44, 28, -63, 26, -3, 10, 14, 22, -13, 5, 34, -18, 42, 27,
+ -21, -14, 9, 0, 58, 31, 10, 30, 3, 3, -54, 61, 10, 54, 16, -46,
+ 10, 0, 9, 3, -46, -25, -17, -60, 60, -2, 41, 5, -49, 53, -31, -57,
+ 32, 9, -27, 62, 9, -22, 27, -51, 40, 30, -89, 35, 21, 63, -41, 9,
+ -23, 29, -87, 75, -58, 34, -49, -52, 55, 48, -45, 64, -8, 11, 37, -14,
+ 21, 12, -20, 0, 5, -19, 38, -93, 56, 10, 45, -29, 13, -72, 78, -82,
+ 104, -75, 97, -90, -6, 58, -80, -16, 26, -5, -5, 10, -20, -38, 19, 18,
+ -56, 20, -44, -25, 0, 31, -18, -14, -15, -41, 57, 52, -41, 33, 37, -41,
+ 63, 0, -39, -19, 10, -29, 41, -36, 79, -79, 56, -55, 18, -26, 42, -5,
+ 38, 25, 28, -34, 27, -56, 14, 32, -26, -18, 17, -16, 76, -71, 3, 15,
+ 21, 60, -32, 7, -65, 75, -35, 62, -68, -47, 37, 16, 29, 9, -61, 68,
+ -3, 64, -71, -33, -65, -26, 21, -21, 17, 40, -17, 35, -28, -12, -13, 11,
+ 43, -18, 73, -88, 33, 3, 44, -17, 52, 48, -68, 18, -6, -29, 56, -22,
+ 0, 53, -32, 40, -61, 61, 10, 53, 37, -31, -10, 65, -56, -1, 15, 0,
+ -48, -1, 0, 43, -28, 17, -37, -7, -27, -7, 78, 0, 14, 43, -29, 1,
+ -27, -27, 53, 30, -39, -7, 9, -27, -15, 27, -63, -64, -6, 26, -50, 21,
+ -52, 23, -45, 30, -22, -11, 12, -59, 29, -7, -53, 52, -53, -53, 34, -35,
+ -24, 30, 61, -3, -70, -27, 13, 18, -57, 37, 14, 5, -9, -80, -5, 49,
+ -2, -7, -55, 50, 37, 27, -36, 76, -46, -34, 0, -10, -21, -19, 25, -20,
+ 53, -53, 78, -128, 63, -7, 34, -27, 11, -50, 52, 21, -42, -54, 41, -67,
+ 41, 12, 40, 10, 33, -66, 57, 45, -34, -68, 66, -71, -20, -9, 7, -4,
+ -41, 13, 6, -46, 8, -31, -2, 50, -25, -51, 10, -6, -4, -37, 25, -1,
+ -56, 24, -52, 46, -14, 45, 0, 17, 26, -31, -51, -17, 29, 14, 9, 51,
+ 2, -50, 65, 7, -29, -26, -5, 17, -19, 73, -58, -51, -31, 29, -24, -24,
+ -37, -5, 48, 47, 14, -22, 5, 3, -16, 6, 23, -21, -5, 35, -57, 7,
+ 35, -58, -2, -45, 11, 17, 27, -61, -4, 34, -51, 31, -26, -9, 4, 0,
+ -84, -4, 15, -12, 68, -111, 67, -44, 33, 21, 8, -78, -3, 38, 31, -17,
+ -46, 61, -40, 46, 23, 59, 33, -70, 30, 8, 21, -55, 6, -3, 40, -76,
+ 59, -76, 15, 31, -47, 10, 24, 38, -19, 2, 21, 36, -19, 32, -54, 27,
+ -13, -2, 5, -51, 28, -56, -30, -73, 46, 15, -22, -65, 54, 41, -42, 21,
+ 29, 29, -13, -43, 47, -55, 90, -72, 49, 42, -68, -1, -16, -21, -37, 91,
+ 63, -2, -63, 0, 45, -32, 39, -3, 50, 7, 2, 82, 15, 13, 27, 1,
+ 9, 50, 34, -33, -36, 69, -51, 78, -1, 13, 17, -52, 53, -31, 63, -9,
+ 71, -73, -62, 20, -10, 82, -38, -16, 39, 13, -53, 10, -12, 76, -39, -59,
+ 53, 33, -4, -67, 0, 33, -57, 6, -13, 18, 27, -59, 56, -21, 24, -4,
+ -34, 62, -67, 86, 4, -16, -39, 21, -36, 6, 9, -8, -6, 46, 21, -20,
+ 42, -44, 0, -2, -42, 90, -69, 13, -22, 27, -21, 37, 61, -48, 6, 4,
+ -63, 66, -55, 82, -19, 47, -43, 18, -49, 92, -68, 45, 21, 55, -79, 54,
+ -28, 69, -25, 3, 12, -22, -61, 28, 25, 22, 44, 21, 19, -16, 0, -68,
+ -13, 45, -2, 37, -1, 70, -54, 14, 40, -51, -6, 84, -31, 16, -3, 44,
+ -15, 62, -58, -33, -22, -26, 68, -92, 63, -32, 27, 48, -31, -35, 38, 20,
+ -47, 54, -9, 41, 12, 3, -6, 1, 41, 40, -20, -14, -4, 40, 12, 44,
+ 9, 68, -94, 87, -59, 72, 14, -57, 14, 10, 12, 46, -55, 31, -45, -3,
+ -22, -12, 40, 18, -61, -12, -58, 93, -74, 1, -33, 53, -2, -30, 19, 69,
+ -69, 61, 27, -39, 36, 10, -41, -54, 0, -59, 58, -34, 38, -76, 29, 36,
+ 7, 18, 0, 19, 24, 15, 10, 90, -85, 45, 6, -27, 30, -36, -49, 20,
+ 11, 36, -42, 29, -19, 7, 10, 37, -19, 4, -10, -12, -13, 67, -38, -51,
+ -2, 17, 38, -14, -26, 10, -26, 9, -38, 41, -8, -59, -57, 52, -103, 58,
+ -25, -46, -4, 56, 21, -55, 77, -73, 40, -77, 18, -35, 64, 2, -39, 22,
+ -63, 56, 40, 6, -8, -49, -63, 66, -72, 21, 59, -49, -6, 61, -59, 117,
+ -88, 2, 35, 26, 16, -11, 55, -42, 47, -30, -12, 10, 7, 40, -48, 73,
+ 30, -69, 40, -66, -22, 9, 32, -29, 1, 41, -22, 26, -6, -18, 1, 43,
+ -44, 25, -32, 59, -35, -31, -32, 59, -49, 27, -36, 59, -69, 17, 29, 23,
+ 41, -14, 90, -81, -35, 60, -20, 4, -8, 14, -12, -17, -40, 26, 42, -19,
+ 7, -42, -2, 17, -52, 47, 7, 0, -29, -58, -9, -9, 29, -35, -5, 0,
+ 47, -49, 14, -50, -48, 16, 7, 28, -19, 31, 58, -91, 32, 6, 20, -89,
+ 65, -84, 71, -54, 73, -27, -24, 58, -51, 68, -7, -53, -28, 48, 0, -45,
+ 2, -45, -39, 21, -90, 41, -53, 17, -19, -50, 62, -52, 57, -53, -35, 26,
+ -72, 15, 34, -63, -3, -56, 63, 4, -39, -2, 15, -11, 18, -36, 9, 19,
+ -29, 47, -53, 0, 15, 39, -50, 33, -3, 53, -51, 39, -43, 9, -34, -4,
+ -3, -54, -8, -11, -11, -33, 71, 12, 63, 14, -54, -20, 38, -3, 37, -57,
+ -12, -52, 5, -8, -14, 10, 2, -48, -1, -14, 28, -22, 70, -60, 43, 58,
+ -50, -20, -15, -6, 41, -16, -50, 0, 35, -59, 53, 2, 43, -10, 60, -32,
+ 45, -75, 61, -44, 52, -39, 19, -26, -32, -16, 27, 52, -22, -22, 46, -14,
+ 56, -23, -45, -2, -15, -19, -52, -1, -5, 55, 36, -42, -4, -13, -9, -24,
+ 13, 41, -42, 6, -10, 84, 39, -19, -5, 5, -47, 60, -48, -19, 5, -85,
+ 44, -11, 17, -64, 5, 15, -65, 46, -12, -63, 50, 31, -12, -56, -21, -29,
+ -46, 6, 30, 7, -3, 14, 34, 41, -48, -33, 3, -22, 8, 24, -22, -33,
+ -56, 59, -73, 27, 7, 5, 10, 30, -9, -21, 71, -72, 11, 49, -41, 30,
+ -43, -35, -64, 43, 37, -51, -12, 56, -22, 71, -37, -34, 55, -15, -56, 75,
+ -23, 7, 3, 16, 28, -79, 46, -49, 31, 33, 11, -27, -10, 20, 37, 10,
+ -22, 35, -2, -8, 47, 50, -55, -44, 49, -62, -14, 16, 10, -12, -2, 42,
+ 25, -32, 40, 4, -49, -8, 27, 41, -34, -27, -43, 53, 10, 17, -1, 7,
+ 23, 57, 15, 10, 72, -5, 60, -9, 26, -27, -15, -7, -2, 59, -41, -13,
+ 66, 20, 27, -7, 20, 59, -65, 8, 53, -19, -38, 13, -68, 53, 2, 21,
+ 40, -35, -6, 46, -54, 22, -27, 41, -11, 16, -36, -6, 18, -13, 60, -11,
+ -24, 36, 25, 33, -8, 50, -67, -17, -64, -7, 57, -33, 1, -3, 53, -62,
+ 101, -26, 25, 36, 28, -67, 50, -8, 45, 5, 9, -1, -59, 2, 40, -63,
+ -22, 15, 56, -7, -22, -28, 75, -63, 36, 1, -2, -40, -16, -25, -39, -30,
+ 10, 68, -62, -22, 31, 35, 0, 46, 12, 3, -46, 13, 42, 30, 42, -79,
+ -20, 36, 8, -19, 77, -10, 49, 32, -61, -28, 35, -21, -8, 53, -9, -29,
+ 62, -45, -21, 33, -49, -67, -21, 33, -34, 40, 23, -16, 34, 11, -3, 73,
+ -16, -29, 21, -9, 26, -30, 71, -19, 17, 39, 20, -61, 39, 75, -37, 56,
+ -6, 34, -10, 4, 24, -85, 19, -60, 47, 71, 11, -12, -27, 65, -37, 29,
+ 63, -16, 39, 0, -54, 83, -94, 61, -11, 27, -78, 12, 27, -21, -34, -68,
+ 77, -24, 44, 2, -9, -35, 73, -65, -36, -14, 10, 7, -44, 37, -32, -32,
+ 15, -47, 52, -36, 31, 30, 0, 41, -16, 0, -45, -13, 82, -61, -55, 33,
+ -20, 12, 16, -66, 29, -41, -25, 70, -23, 19, -57, 65, -47, 15, -29, 32,
+ -8, -37, -19, -3, 56, 63, -56, -23, 3, -5, 16, -35, -8, 29, -27, -52,
+ 1, 13, -59, 20, -56, -26, -44, 25, 18, -9, 48, -63, 77, -89, 81, -10,
+ -50, -53, 58, -80, -6, -36, 8, 16, -3, -69, 92, 9, 57, -65, 57, -32,
+ -74, 59, 14, -28, 16, -55, 92, -102, 5, 38, -20, 13, 40, -39, -53, 93,
+ -67, 65, -80, -3, -34, 0, 80, 0, -12, 75, -25, -24, -20, -31, 9, -10,
+ -21, -9, -3, -23, 8, -2, 6, -50, -22, 8, 24, -67, 30, 31, -72, 76,
+ 30, -51, -31, 32, 1, -10, -38, 82, -67, 43, -42, 49, -51, 39, 67, -19,
+ -32, -24, 30, -1, 37, -95, 52, -87, 52, 13, -26, -14, -57, -42, -41, 83,
+ -30, 1, 14, 63, -71, -48, 52, -51, 100, -84, 69, -96, 54, -1, -2, -7,
+ -50, 53, -6, 14, 67, -5, 67, -19, 68, -69, -27, -18, -22, -5, -61, 42,
+ -33, -35, 60, -23, -11, 10, -5, -46, 27, -44, -38, 27, -68, -16, 37, -56,
+ 2, -17, -40, -10, 26, 83, -70, 72, -67, -29, -44, 29, 23, -30, -23, 48,
+ -78, 38, 22, -21, 24, -36, 52, -61, 17, 11, 22, 10, -29, -20, 45, 15,
+ -21, 63, -70, -8, 47, -49, -37, 89, -11, 28, -13, 40, 6, 13, -8, 33,
+ 3, -1, -58, 70, -23, 18, -68, -35, 8, 17, 70, -47, -37, 62, 26, 10,
+ -3, 17, -38, 22, 38, 15, 20, -82, 64, 8, 59, -21, 19, -12, 7, -62,
+ 46, -34, 66, -43, -32, -73, -3, 38, 40, -31, 51, 62, -62, 23, -5, 40,
+ -24, 57, -38, -14, 6, 47, -3, -29, 32, -45, 69, -57, 47, -27, -19, -13,
+ 49, -22, 19, 69, -18, -28, 49, -49, 5, 41, -87, 35, -39, 40, -63, 42,
+ 30, -38, 75, -63, 10, 10, -29, 66, 30, -23, -51, 10, 9, 23, -30, -34,
+ 20, 56, -63, 103, -41, -32, -55, 24, 27, -39, -30, 63, 27, 4, 12, 21,
+ -64, 55, -13, 15, -65, 79, -64, 70, -41, -8, -19, 66, 1, 22, -4, -28,
+ -1, 36, -21, 31, -11, 25, 2, -37, 37, 25, -36, 45, -42, 69, -77, 5,
+ 18, -12, -13, 35, -25, 59, 0, 27, -55, -41, 26, 54, 39, 66, -8, -11,
+ -12, 34, -21, -42, -7, 70, -17, -33, 5, 31, 6, 61, -22, 30, -46, 13,
+ -12, 4, 37, -17, -37, 7, -61, 5, -39, 37, 0, 13, 40, 14, 53, -65,
+ 46, -2, -27, -27, -20, 48, -60, 55, -47, 82, -19, 33, 1, 46, -64, 95,
+ -57, 88, -38, 16, -46, 15, -47, 67, -15, 24, 0, -43, -2, -5, 15, -43,
+ 28, 14, -75, 40, -35, -1, -16, 18, -69, 72, -65, 43, 8, -13, 20, 19,
+ 6, -24, 2, 23, 14, 22, 34, -37, -29, -37, -13, 7, -43, 0, -23, 50,
+ -48, 44, -14, -14, -62, 55, 56, -24, 53, -30, -27, 36, -38, -31, -15, -4,
+ -28, 60, -6, -15, 17, -43, 14, 63, -77, 27, -74, 15, -41, 47, -34, 15,
+ -5, 27, 17, -7, 24, 51, 17, -23, -5, 1, -52, -13, -3, -26, 35, -6,
+ -33, -25, 42, 15, -6, -2, 2, 49, -69, 37, -36, 28, -16, 38, -54, 73,
+ -5, -37, 44, -88, 72, -6, 29, -32, 33, -6, 51, -57, -21, 29, 28, -26,
+ -62, 53, -80, 70, -48, 21, -13, -17, -43, 22, 38, 9, -7, -44, 56, 51,
+ -53, -32, 91, -112, 58, 25, -3, -3, -3, -19, 32, -42, 43, -81, 69, -86,
+ 119, -90, 62, -74, 72, -42, 23, 17, 36, -4, 40, -44, 10, -7, -43, 45,
+ 34, -84, 59, -45, 43, -97, 60, -31, -3, -9, 35, -68, 14, 2, -9, 3,
+ -36, 44, 2, -45, -37, -3, -51, 62, 15, 52, -43, -8, -62, 6, -66, 41,
+ -49, 28, -27, -26, 68, -76, 16, -9, 24, -60, 31, -63, 18, 5, 46, -41,
+ 19, -13, -46, 17, 16, -38, 64, -31, 75, 3, 17, -53, -42, 11, 13, 10,
+ 26, -74, 89, 27, -14, -35, 47, -4, 0, -50, 3, 11, 18, -10, -15, -16,
+ 31, -70, 60, 46, -16, 31, -31, -12, -32, 52, -4, 31, 17, -18, -16, 0,
+ 1, -26, 62, -18, -8, 23, -40, 56, 71, -93, 78, 0, -57, 90, -81, 48,
+ -56, -40, 58, -16, 18, -103, 68, -84, 101, -2, 16, -23, 15, 26, 49, -39,
+ -35, 11, 25, 27, 8, -80, 43, -22, -51, 70, -48, -11, 51, 4, -20, 61,
+ -22, -62, 18, -40, -24, 25, -29, -67, 56, 17, 22, 9, 17, -1, 21, 36,
+ -50, -13, 3, 13, 0, -46, 52, 8, -39, -18, -30, 48, -4, 10, 16, 41,
+ 38, -47, 33, -4, 6, -16, -48, 0, 48, 25, -55, 39, -47, 26, -28, 1,
+ -16, -13, -52, 53, 1, -58, -1, 54, -55, 35, 3, 43, -31, 4, -15, 38,
+ 12, -9, 44, -51, 30, 20, 8, -1, 14, -15, 16, -5, -13, 6, -78, -1,
+ 17, -21, -46, 91, -58, 17, 9, -15, 18, -1, -42, 20, 0, 41, 2, 4,
+ -30, 6, -9, 91, -64, -36, -17, -27, 10, -27, -20, -34, 52, -39, 30, -58,
+ -38, 79, -56, 31, 13, 57, 42, -42, 4, -73, 14, 51, 33, -15, -36, 65,
+ -7, -20, 29, 13, 43, -19, -38, -11, 17, -46, 30, 14, 28, -38, 56, 15,
+ 39, 28, -14, 7, 23, -15, 40, -53, 20, 17, -45, -14, 24, -33, -7, -24,
+ 89, -80, 52, -6, -38, 62, -81, -14, -70, 11, 2, 21, 39, -2, 1, 6,
+ -52, 70, -87, -20, -9, 59, -45, 50, -14, 13, 25, 1, 7, -41, -49, 32,
+ -69, 69, -73, -11, 3, -46, 46, 8, 28, -20, -33, -15, 32, -16, 68, -50,
+ 44, -52, -4, 32, 36, 12, 10, -42, -47, 43, -103, 57, 20, -76, 19, -5,
+ 47, 17, -49, -32, 29, 25, 40, 21, -23, -63, 50, 39, -9, 13, -70, -31,
+ 59, 24, -66, 37, -34, 84, -93, 59, -13, -68, 39, 46, -58, -26, 36, -74,
+ 61, 45, -11, 29, 35, -4, -1, 80, -6, -58, 50, -91, 61, -80, -16, 21,
+ 8, 11, 4, -46, -8, 42, -80, 49, 21, 32, -11, 65, -54, 2, -38, -24,
+ -15, 0, 1, 20, 34, -80, 67, -38, -32, 21, 4, -30, 13, 17, 59, -40,
+ -1, 33, 3, 15, -49, 46, 4, -53, 45, -32, -54, 17, 29, -65, 26, 5,
+ -32, -6, 33, -27, 7, -19, -13, 41, -62, 32, 8, 17, -18, 39, 66, 17,
+ -26, 16, -4, 16, -71, 66, -15, 40, -65, 57, -27, 21, 14, -78, 9, -52,
+ 56, -26, -9, -75, 27, 40, 45, 22, -14, 45, 16, -38, 32, -19, 35, 30,
+ 63, -64, 49, -46, -25, -77, 33, -37, 28, 61, 21, -25, -38, -1, -6, 4,
+ -13, 13, 39, -74, 5, 42, 57, -56, 50, -1, -29, -40, 45, -32, -27, 4,
+ -67, 7, 0, -34, 48, -34, 31, 31, -24, -21, 73, -38, 52, 12, -19, -8,
+ -75, 78, -41, 26, 44, -51, 100, 17, 58, -68, 49, -48, -40, -14, -51, 0,
+ 64, -16, 60, 53, -51, 26, -16, -14, -55, -33, 7, 25, -16, 15, 49, 2,
+ 36, -24, 33, 16, 21, 20, -29, -39, 50, -44, 64, -42, 18, 26, -19, 13,
+ -19, 43, -26, -6, -55, 19, 40, -45, 62, -47, 76, -25, -61, 98, -66, 50,
+ -72, 37, -12, 62, -45, 28, -49, -8, -50, 79, -72, -8, -24, 18, 40, 54,
+ -43, -20, 21, -2, 58, -70, 39, 13, 12, 63, -39, 21, 18, -5, 38, -38,
+ -11, 0, -49, 44, -44, 9, -46, -29, -15, -3, 39, 24, 39, 0, 34, -40,
+ 74, -85, 60, 35, -22, -5, 22, -69, -11, 35, 44, -84, 1, 46, -32, -33,
+ 1, -19, 43, -48, -13, 70, -2, 30, -28, 3, 30, -62, 95, -80, -31, 71,
+ -30, -14, 20, -29, 50, -56, 22, -22, -39, 39, -12, 27, -35, 21, 18, -6,
+ 30, 3, -46, 14, 4, 47, -52, 47, -20, 7, 5, -45, 59, -54, -65, 54,
+ -43, 18, -4, -47, 97, -83, 29, -46, 67, -96, 83, -73, 37, 39, 53, -6,
+ 18, -63, 77, 50, 42, -86, 35, -50, 32, -29, 6, -11, -23, 7, -44, 30,
+ -77, 51, -47, -4, 38, 43, -11, -2, 16, -70, 22, -13, -7, 8, 36, 7,
+ 18, 5, -2, 17, 34, -85, 37, -10, -2, -57, 61, 28, 20, -51, 10, 34,
+ 42, -5, 55, 2, -27, 6, -25, -44, 43, 33, -35, 53, -60, -29, -10, 44,
+ 46, 8, -38, -20, 20, -32, -47, -19, -58, 36, 22, 27, 61, 2, 24, 22,
+ -79, 23, -51, 22, -33, 5, 2, 12, 61, 35, 6, -61, 40, -12, 10, -9,
+ 4, -22, -21, -7, -24, -4, 23, 18, -26, 10, -27, -16, -18, -68, 80, -74,
+ 58, -68, 17, 10, 5, -45, 0, -6, 19, 21, -37, 32, 13, -10, -9, 52,
+ -10, 45, -57, 62, -72, 46, -28, 8, -13, 16, 27, 6, 51, -33, -11, -31,
+ 41, -19, -9, -50, -4, 16, 12, -3, 4, -54, -46, 53, -10, 6, 37, -41,
+ 54, -31, -49, 79, -58, 34, 18, 39, 17, -21, -34, -30, 13, 14, 0, -7,
+ -58, 60, -73, 2, -22, 42, 16, 51, -34, -46, 8, 17, 65, -22, 76, 9,
+ 39, -70, 4, 37, 25, -77, -34, 69, -42, 3, -59, 72, -72, 50, 57, -78,
+ 45, -37, -4, 11, 32, -14, 13, 47, 28, -16, 5, -6, 53, -21, -23, 31,
+ -34, 33, -1, 8, -74, 66, -29, -40, -7, -12, 54, -18, -61, 52, -31, -12,
+ 38, 27, -27, 43, -27, -18, 72, -67, 30, 7, 27, 16, -39, -32, -22, 28,
+ -63, 84, -70, -74, 56, 1, -13, -40, 49, -61, 7, 47, 24, 4, -32, 14,
+ 1, 27, 25, -55, 68, -47, -16, 6, -5, 75, -68, 58, -71, 16, -14, -67,
+ -18, 23, -43, -39, 53, 0, -4, 5, -28, 54, -39, -43, 5, 18, 56, -66,
+ -14, -24, -22, 1, 4, 12, -14, 9, -26, -30, -28, -16, 52, 27, 8, -5,
+ -55, 35, 25, 32, 59, -49, 21, -8, 73, -4, -17, -30, -43, -28, 5, 18,
+ -12, 47, -6, -34, -6, 0, -8, 7, -34, -10, -31, -2, 43, -33, -11, 51,
+ -56, -19, 60, -33, 31, -30, 5, 4, -54, 52, 35, 11, 4, 54, -72, 72,
+ -25, 17, 39, -2, 50, 0, -8, -19, 32, -29, 22, 37, -54, -26, 32, -55,
+ 7, -5, 11, -47, 64, 21, 8, 41, 3, -13, -22, -26, -55, 8, 56, 15,
+ -79, 92, -58, 68, -35, 25, -50, -33, -57, 67, 64, -46, -23, 46, -48, 41,
+ -59, 21, 74, -44, 4, 21, -48, -19, -60, 31, -3, -19, -49, -13, 51, -35,
+ -10, 21, 56, -14, 24, -52, 6, 16, -51, 14, 27, -55, -43, -13, -72, -8,
+ 8, 35, 8, -49, -34, 65, 2, -18, -33, 62, 9, -22, -11, -35, -5, 37,
+ -28, -14, 46, 15, -29, 18, -26, 7, -25, -18, 47, -37, -33, 76, -67, -16,
+ 50, 4, 29, -42, 33, -53, 19, 62, -21, 7, -26, 28, 9, 5, 53, 37,
+ -103, 47, -20, -8, 41, -32, -33, 73, -20, -14, -56, 68, -37, 16, -49, 92,
+ -95, 60, -31, 47, -38, -30, 38, 2, -25, 79, -31, -45, -21, 54, 13, -28,
+ 31, -27, -34, 11, -27, 27, -40, 39, 6, -35, 11, 7, 28, 7, 20, 50,
+ 28, -61, 19, 81, -60, -41, 20, 0, 34, -22, 24, -4, 6, -3, -56, 20,
+ 69, 2, -25, -24, 45, -7, -43, -1, 57, 40, -27, 21, -1, -75, 31, -31,
+ -4, -45, -20, -16, -52, 32, 50, -47, -5, 10, -21, 36, 48, 8, -39, 16,
+ 28, -9, -38, 56, 38, -21, 0, 6, 38, 1, -5, -19, -8, 63, -13, -15,
+ 44, -10, 27, -72, 5, 59, -48, 63, -31, 18, 30, -54, -5, -54, 98, -70,
+ 53, -89, 58, -54, -27, -52, 91, -68, 29, -21, -19, -20, -8, 45, 25, -32,
+ 30, 18, -43, -30, -24, -34, -64, -18, 43, 0, 36, -48, 57, -17, -55, -7,
+ 45, -55, 43, 36, -40, 8, 39, 39, 46, -48, -39, 2, -20, -51, 5, 39,
+ 33, 18, -45, -51, 84, -81, 41, 35, 57, -41, 52, 0, 54, -38, -52, 32,
+ -34, 53, -57, 16, -4, -14, 1, -11, 33, 18, 18, 19, 71, -41, 70, 5,
+ 13, 8, 19, 36, 59, -49, 7, 9, 10, -3, -10, 6, 18, 30, -18, -48,
+ 19, 9, 17, -85, 72, -49, 31, 9, -57, 17, -30, 65, 0, -59, 37, 15,
+ -51, 0, -53, 68, 3, 23, 16, -10, -14, 6, 3, -63, 55, -32, -64, -14,
+ 49, 2, -27, 56, -81, -1, 41, -88, 48, -63, 84, -52, 7, 20, 22, -51,
+ 41, 4, -13, 27, 19, -13, -43, 59, -21, -15, -55, 17, 60, -99, 41, 11,
+ 37, -23, 16, 32, 9, -46, 91, -41, -39, 83, -29, 31, -31, 65, -55, -7,
+ 31, 29, -40, -46, 39, 13, 2, -39, 67, -33, 7, 18, 0, 17, 6, -8,
+ -49, -11, 3, 26, 4, -27, 42, 20, -55, -42, 11, 62, -39, 75, -49, 83,
+ -38, 49, 12, -8, -5, 30, -32, -6, -23, -58, 79, -44, -10, -12, 52, -31,
+ 14, -39, 6, -47, 21, -13, -56, 38, -36, 2, 30, 20, -2, -77, 3, -10,
+ -2, 53, 1, 56, 18, -65, -49, 52, -30, -23, -45, 50, 35, -18, -3, -24,
+ -35, 61, -27, 22, 44, -32, 5, -59, 67, -66, 77, -38, -2, -23, 52, -43,
+ 6, -15, 50, 52, -12, 70, 11, 54, -87, 55, -28, 0, 26, 33, 55, -32,
+ 31, -22, -38, -20, 14, 15, -5, -25, 62, -35, 48, -49, 75, 27, -24, -26,
+ -25, 0, -32, 83, -65, 62, 0, -42, 32, -56, 43, -19, 48, -17, 65, -31,
+ 38, -86, 94, -56, 43, 9, 22, 29, -55, 41, -79, 77, -75, 29, -46, -30,
+ 11, -46, -5, -52, -45, 61, -47, 45, 36, -71, 12, 10, 0, -3, 1, 9,
+ 49, -45, 17, -13, 31, -30, -40, 38, 62, -61, 60, -96, 32, 47, -37, -14,
+ -28, 27, -7, -9, -11, 5, -27, -35, 54, -52, -6, 30, 26, -17, 73, -33,
+ 41, -19, 23, -31, 93, -54, 21, 57, -6, 10, 57, -49, 36, -38, 0, 40,
+ 20, 25, -37, -17, 2, -10, 42, -23, 11, 29, 66, -36, -48, 63, -2, -81,
+ 0, -19, 24, -17, 35, -26, -18, -53, 87, -69, -34, -4, -5, -16, -28, 6,
+ -19, -35, 59, 19, 17, 0, -42, -7, -26, -39, 22, 15, -61, -8, 20, 34,
+ -44, 62, -58, 46, -64, 28, -14, 31, 27, 52, -37, -43, -37, -44, 34, -19,
+ 15, 0, -42, 4, -26, -11, 32, -16, 37, 31, -61, 9, 51, -61, -17, 58,
+ -11, 23, 5, 21, -46, 11, 11, 52, -51, 49, -73, 25, -52, 75, 30, 31,
+ -26, -66, -27, -19, -17, 71, 59, -76, 40, -38, 66, -11, -45, -29, 0, 34,
+ 65, -58, -35, 41, -23, 46, 27, 34, -3, 54, -81, 33, 26, -77, 36, -32,
+ -40, 34, -55, -12, 16, -58, 10, -40, 6, -15, 27, -13, 26, -49, -41, 15,
+ -35, 22, -24, 63, -30, -27, 37, -57, -69, 42, 0, 51, -87, -22, 81, -33,
+ 5, -34, 53, -86, 48, -26, 25, -47, 67, -67, 8, 18, -37, -14, 39, -26,
+ 49, -20, -6, -20, 16, -41, -13, 37, -48, -36, 25, -72, 38, -13, -40, 67,
+ -11, 73, -76, 45, -10, -7, 16, -40, -37, 51, 6, 18, -17, 60, -46, 0,
+ -62, 18, 13, -6, -2, 73, -39, 49, -63, 61, -6, 47, -89, 48, 8, 41,
+ 19, 26, 2, 0, -49, 57, 6, 13, 49, 16, -8, -4, -31, -19, 26, 5,
+ -60, -14, 55, -2, -42, -5, 4, -12, -52, -21, -29, -3, -42, 73, -40, -73,
+ -6, -3, -24, 54, -39, 74, -39, -19, -12, -16, 2, -9, 68, -51, 62, 30,
+ -1, 47, -7, -35, -51, 60, 18, 3, -50, 81, -4, -24, 27, 29, -8, -3,
+ -55, 31, -50, 15, -22, -10, 55, 23, 38, 2, -13, 2, 48, -14, 7, 1,
+ 0, -35, 32, 14, 2, -17, 42, -31, -34, -22, 3, 66, 37, 63, -28, -31,
+ 18, -5, 14, 93, -59, 17, 9, 36, -55, -19, 10, 16, 19, -20, 7, -43,
+ 42, -56, 43, 36, -14, 54, -61, 25, -34, 52, 24, -55, 70, -81, -28, -31,
+ 8, 81, -33, 14, -7, -49, -10, 33, 35, -38, -7, -11, 20, 61, 12, -41,
+ -57, 23, 56, -9, -17, -21, -54, 10, -74, 35, 17, 38, -13, 78, -18, 0,
+ 59, -2, 88, -39, 58, -35, 65, -15, 36, -50, 39, -57, -8, 20, 15, -13,
+ 75, -68, 77, -47, 53, -76, 36, -6, 67, -9, 2, -11, 3, 75, -81, 5,
+ 0, 59, -9, 33, -4, 7, -52, -38, 21, 41, -19, -48, 9, 16, 6, -46,
+ 53, -28, 13, -5, 9, 6, -23, -34, 59, 1, 50, -2, 16, 23, 28, -53,
+ 30, -53, 81, -78, 89, -66, -4, 14, 42, -37, 24, -43, -18, -36, -1, 71,
+ -6, 41, -71, 67, -53, 0, -3, -12, -31, -45, 7, 3, 77, -19, -68, 6,
+ 12, -45, -56, 40, -27, 1, -5, -47, -67, -12, 3, -13, 21, 33, -47, -40,
+ 40, 13, -73, 21, 33, 0, -59, 78, 8, 21, 9, 36, -44, 51, -23, 51,
+ 58, -6, 27, -70, 76, -67, -16, 79, -20, 28, -64, 72, -57, -15, -70, 19,
+ 14, -38, 23, -7, 44, -9, -11, -15, 14, -59, 53, -42, 56, -71, -27, 61,
+ -14, 66, -41, -21, 50, -38, -3, -22, 36, -12, -6, 51, -42, -25, 25, -52,
+ 70, -25, 0, 11, -22, -35, 42, 11, -10, -6, 70, -100, 21, -93, 81, -26,
+ -39, 57, -35, -48, -4, 35, -46, 78, -47, 45, 26, 13, -32, 26, 46, -26,
+ -20, -21, 5, -58, 11, -7, 20, 23, -49, -5, -23, 3, 13, 5, 11, 24,
+ 3, -80, 68, -5, 48, -39, 49, -71, -54, 48, 42, -2, -15, -22, -5, -8,
+ 75, -67, 37, -47, 60, -44, 39, 7, 53, -40, -22, -33, 49, -75, 2, -11,
+ -17, -24, -71, -36, -4, 42, -74, 4, -32, 32, -3, 54, -11, -8, 2, -34,
+ -7, 67, -48, -3, -66, 79, 1, 48, -66, -9, -17, 61, -67, 25, -13, -8,
+ 53, -78, 11, -8, -63, 45, 65, 3, 10, 33, -53, 99, -80, 22, -72, 17,
+ -37, -22, 37, -8, -40, 40, -22, 0, 18, -10, -9, -28, -10, 1, 28, -16,
+ 57, -49, 5, 46, -73, 49, -28, 38, -22, 0, 26, 14, -49, 98, -75, 13,
+ -29, 40, 30, 0, 17, -11, -36, -19, 67, -15, 20, -2, -45, -11, 40, 39,
+ -4, -6, 48, 47, -25, -28, 21, 19, 61, 25, -5, -53, 15, -12, -7, 85,
+ -42, -4, 23, 49, -32, 21, -13, 13, -74, 41, 31, -39, -16, 22, -51, 43,
+ -62, -53, 35, 14, -21, 29, -6, -18, -17, 30, -63, 42, -47, 44, 27, 13,
+ -65, 0, -23, 35, -85, 77, -6, -13, 55, -31, -33, 42, -15, 26, 34, 19,
+ 7, -22, -34, 36, 29, 2, -47, -9, -33, -5, -34, -19, 67, 24, 51, -62,
+ -1, -2, 39, -30, 24, -46, 13, -24, -54, 71, -101, 60, -32, 70, 7, -30,
+ -17, 9, 66, -9, -56, 43, -36, -25, -21, -2, 7, -44, -9, -3, -55, 49,
+ -62, 82, 54, 28, -51, 3, 17, -43, 21, 30, 44, 10, -7, -6, 38, 34,
+ -28, 83, -79, 11, 33, -12, 15, 45, 45, -45, -32, -56, 46, -12, 30, 9,
+ -38, 57, -65, 8, -37, 59, -11, 14, -24, 9, -2, 73, -61, 16, 31, 2,
+ -45, 24, 39, 59, -55, -4, 33, 20, 3, 0, 21, -37, -21, 31, -54, 44,
+ -13, -63, 46, -31, 68, -97, 44, -89, 51, 10, -45, 11, 8, 31, -64, 69,
+ -58, 49, 18, 19, 6, -13, -39, -25, -3, -37, 35, -28, 50, 15, 47, 31,
+ 18, 28, -48, 9, 67, -66, 52, -18, 5, 41, -37, -10, 27, -31, -16, -22,
+ -50, 64, -14, 27, -14, 63, -72, 60, -62, 46, -44, 60, -16, -26, 62, -24,
+ -20, -60, 46, -54, -1, 6, 21, 65, -51, 49, -23, -38, -11, 24, -45, 4,
+ -7, 41, -8, -67, 61, -10, 38, 33, -63, -28, 72, -16, 43, 2, 22, -81,
+ 81, 2, -34, -57, 40, 12, -17, 13, 36, -1, -51, 58, -42, 50, -14, 29,
+ -4, 52, 3, -39, -21, 49, -38, 17, -78, 70, 23, 35, 10, -53, 39, -5,
+ 21, 32, 40, -3, 21, -43, -35, -48, 11, -26, 51, -39, 49, -71, -8, -14,
+ 24, 56, -30, 26, -17, -38, 90, 5, -28, 50, 6, -40, -32, -40, 2, 43,
+ -63, 17, -26, 12, 3, 3, 47, -41, 83, -46, 50, 32, 19, -66, -2, -30,
+ 49, -14, -63, 6, 46, 25, 51, -39, 49, -39, -28, 52, -24, 48, 0, 12,
+ 25, -54, -47, -63, 15, 52, -36, 42, -28, -61, -27, 59, -59, 34, -70, -32,
+ -10, -39, 36, -25, -44, -17, -46, 28, -26, 28, -4, 53, -1, -39, -41, 62,
+ -56, -19, 56, 19, -30, -37, -44, 11, -33, 40, -42, -27, -25, -3, -9, 7,
+ 26, 36, -40, 16, -53, 62, -53, 35, -24, 56, -56, 81, -85, 36, 27, -48,
+ -11, 44, 32, -10, 0, 27, 34, 61, -35, 2, -2, 16, -8, 26, -17, -26,
+ 19, 43, -40, -52, 38, 6, 49, -11, 28, -7, -26, 31, -31, -55, 41, -53,
+ 17, -24, 36, -10, -30, 38, -50, 74, -90, 23, 6, 44, -53, 66, -18, -18,
+ 50, -2, -48, 38, -70, 65, -85, 70, -13, -28, -1, -11, 2, -16, 33, -79,
+ 66, 4, -18, 3, -14, 60, -58, -5, -21, 28, -31, 62, -13, 54, -57, 24,
+ -21, -8, -50, 22, -15, -21, -14, 13, -38, 56, -106, 64, -60, 29, 14, -57,
+ 2, -41, -20, 55, 24, -19, -21, -30, -62, -13, 53, -7, -35, -31, -19, 5,
+ -16, -71, 62, 8, -32, -9, -10, -9, 101, -49, -40, -55, 41, 37, -40, -14,
+ 29, -18, -51, 24, 24, -38, 69, 30, 11, 29, -67, 34, 31, 19, -6, -53,
+ -7, -47, 19, 2, -28, 76, -64, -19, 84, -39, -16, 68, -62, 37, -34, 34,
+ 33, -18, 40, 1, 26, -1, -35, -5, -33, 34, -33, -24, -49, 55, -46, 27,
+ 2, 38, 3, -49, 16, -38, -47, 6, -15, 36, -10, 16, -35, 17, 8, -53,
+ -7, -2, 52, 46, 28, -49, 16, -70, 55, 51, 13, -58, 6, 14, 67, -20,
+ 35, -35, 20, -12, 37, 36, 72, -47, 13, -38, 17, -2, -41, 17, 49, -57,
+ 33, 34, -34, 4, 49, 15, 40, 36, -3, -52, 79, 29, 24, 50, -20, 26,
+ -93, 27, 13, 12, 36, -8, 43, -44, -38, -34, 55, -58, 45, 8, 20, 18,
+ 13, -56, -34, -33, 16, 20, -57, -56, 99, -40, -17, 26, 28, -6, -39, 63,
+ -7, -52, 39, -34, 71, -56, 17, -45, 53, -32, 0, 29, -41, 16, -33, 26,
+ -5, -12, 48, -48, -11, 52, -15, -43, 67, -5, -37, 32, 41, -56, 40, -7,
+ -8, -20, 32, -10, 0, 46, 9, -10, -54, 30, 40, -31, -4, -29, 58, 5,
+ -8, 2, 57, -63, 42, -68, -1, 16, -6, 10, -4, -31, 52, -103, 63, -34,
+ -17, 5, 26, 29, -18, -25, -39, -4, 34, 25, 52, -61, -23, 13, 0, 58,
+ 7, -1, 88, -98, -5, -12, 24, 55, 33, 43, -32, 23, 73, 2, -26, -1,
+ 29, 56, -99, 37, 46, -45, 0, 51, -81, -39, 95, -41, 34, -14, -6, -32,
+ 56, -46, 12, -15, -21, 51, -33, -28, 4, -8, 61, 13, -61, -77, 66, 32,
+ 58, -59, 41, 34, -15, -56, 31, -37, -37, -1, -18, 29, 16, 32, -64, 13,
+ 38, -27, -70, 26, -36, 4, 38, 73, -63, 28, 23, -40, 55, -6, 48, -38,
+ -3, 24, -36, 43, 0, 0, 44, 24, 24, -47, 17, 21, -74, 61, -39, 105,
+ -36, 16, -4, -45, 40, -24, 8, 60, 27, -76, -40, 51, 56, -57, -10, 16,
+ 24, 13, 10, 21, -54, -28, -17, -53, 28, 35, -4, 19, 65, -80, 19, 56,
+ 3, -45, -7, -23, -42, 13, -57, -36, 42, -5, -77, 40, -38, -32, 2, -33,
+ 88, 12, 9, -53, -51, 60, -87, 53, 27, 38, -28, 1, 50, -49, -2, -10,
+ -25, 49, -1, 30, -31, 47, -37, 34, -62, -19, -27, 1, -25, -21, 23, -3,
+ -39, 4, 37, -26, -68, 49, -34, -35, -5, 18, 29, -45, 73, -44, 44, -18,
+ -19, 14, -48, 51, -18, -13, -11, 33, -13, 18, -26, -58, 36, 16, 15, -74,
+ 95, -58, 12, -47, 28, -49, -42, -33, 83, 18, -19, 56, -55, 28, -15, -43,
+ 73, -5, -45, -3, 49, -7, 66, -66, 86, -72, -14, 15, -7, 47, 27, 16,
+ 68, -78, 35, -3, -13, 53, 27, -35, 10, -18, -35, 52, 28, 17, -52, 42,
+ -66, -10, -47, 86, 51, -12, -38, 26, -58, 2, -3, -70, -12, -23, 39, -53,
+ 1, -16, 44, 21, -16, 40, -5, -26, 81, 20, -80, 49, -30, 7, 35, -30,
+ -13, 44, -37, -23, 55, -20, -3, -20, 56, 3, -57, -23, 56, 43, -2, -49,
+ -3, 8, -15, -45, -42, 55, -28, 78, -25, 0, 28, -36, 27, -54, 61, -6,
+ -64, 54, 58, -67, 50, -60, -41, -39, 14, -29, 40, 6, -16, -33, 8, 38,
+ 44, -54, -28, 28, 14, -24, 42, -117, 76, 12, -12, 4, 45, -49, 3, -53,
+ 6, 5, -52, 52, -23, 3, -15, -66, 35, 54, 15, -48, -39, 15, -23, -29,
+ 20, -6, -53, -22, 38, 54, -38, 54, -33, 30, -8, -6, -84, 95, -25, -40,
+ -26, 13, 39, 13, 18, 25, 19, -10, 45, -42, 73, -92, 16, 65, -25, -21,
+ -46, -53, -24, 71, -63, 37, 19, -29, 31, -68, 52, 8, -54, 2, 72, -61,
+ 49, 9, 44, 3, 38, 2, -14, 15, 23, 48, 18, -19, 60, 14, 18, -45,
+ 97, -35, -64, 55, 62, -12, -3, 39, 39, -41, -9, 25, -5, -34, 56, 5,
+ -52, 79, -64, 53, 10, -10, -6, -35, 12, -46, 77, -40, 40, -42, -16, 31,
+ -7, -4, 9, -9, 49, 33, 64, 16, -82, -17, -17, 11, 38, -10, -52, 48,
+ -67, -20, 37, -2, -2, -65, 36, 19, -63, 50, 19, 17, 46, -80, -6, -42,
+ -42, 53, 27, -32, 25, -18, 21, 6, 65, -61, -6, 10, -15, -6, -26, 21,
+ 5, 76, -43, -44, -48, -44, 50, -54, 48, -39, 61, 20, 29, -35, 52, 79,
+ -41, 55, -56, 42, -28, -32, 12, -26, -35, 4, 45, 19, -35, -37, -26, 28,
+ 67, -40, 20, 44, -15, 10, -41, -44, 32, -84, 86, -7, -25, 35, -25, 27,
+ 6, 14, -29, 74, -1, 16, -59, 42, -59, 63, -5, -6, 42, 33, -84, 82,
+ -48, 8, 15, 37, -87, 83, 37, 22, 25, 10, -51, -24, 30, 12, 32, -32,
+ -66, 90, -73, 39, 0, -57, 16, 86, -66, -15, -24, 37, 43, -41, 57, -23,
+ -31, 10, 34, -56, 31, 5, -39, 38, -39, -42, 3, 11, 46, -33, 74, -60,
+ 38, -56, 43, 57, -59, -10, 57, -70, 45, -26, -18, 27, 58, -70, 27, 12,
+ 44, -40, 50, -54, 29, 0, -29, 47, -57, -10, -1, 79, -21, 18, -78, 80,
+ 19, 45, 35, 27, -45, 79, -88, 78, -61, -1, -4, 33, -23, -37, -25, 47,
+ -47, -26, -41, -42, -64, 32, -54, -16, 39, 14, -40, 3, -37, -26, 20, -13,
+ -53, -10, 69, -24, -67, 59, -29, -21, -55, 73, -51, 2, 23, -17, -4, -40,
+ 46, -15, -30, 21, -79, -7, 59, 42, -59, -6, -26, 1, -27, 24, -13, 5,
+ -37, 0, 35, -49, 1, -86, -13, -18, 61, 43, -45, 27, -77, 6, 44, 3,
+ 59, -36, 1, 39, -17, 7, 25, -25, 35, -108, 82, -104, 28, 11, 21, 42,
+ 50, -47, -34, 16, -22, -17, 28, -65, -33, 76, 19, -54, 1, 2, 50, -79,
+ 26, -90, 101, -50, 61, 23, 27, -48, 29, 43, -44, 15, -42, 51, -48, -58,
+ -24, -14, -13, -46, 57, -31, -14, 91, -89, 78, -75, 16, 7, 44, -9, -24,
+ -70, 32, -21, 15, -33, -55, 67, 18, 57, -8, 6, -19, -45, 27, -16, -31,
+ 47, 1, -22, -26, 21, 33, -34, 41, 29, -32, -24, -16, -55, 31, -11, -13,
+ -33, 70, -65, -1, 105, -68, -51, 48, -40, 30, 66, -25, -7, -44, -6, -63,
+ 27, 1, 9, 0, 0, 74, -40, -23, 5, 10, -11, 11, -87, 40, 12, -54,
+ 17, 45, -31, 38, -81, 57, -10, -28, 19, 5, 12, 29, 27, -62, 63, -12,
+ -44, 6, 38, -17, 35, -49, 17, 21, -19, -17, -22, -19, -41, -21, -4, 39,
+ -40, -18, 12, -23, -61, 73, -26, 22, 11, -18, 29, -65, 14, 6, 15, 1,
+ -57, 2, -53, 8, 10, -46, -2, 32, -17, 51, -50, -15, 39, 56, -36, 37,
+ 13, 43, -47, 93, 14, 26, 38, -8, -52, -22, -3, -16, 76, -43, -9, -45,
+ 63, 0, 22, -49, 7, 59, -83, 92, 14, -34, -1, -35, 71, 22, -58, 54,
+ -38, -7, 45, 41, 64, 0, -68, 30, 26, 27, -1, 9, 6, 11, 28, 8,
+ -14, -3, 10, 52, -35, 65, 19, 64, -85, -16, -35, 52, 37, -29, 46, -64,
+ 12, 28, -49, -20, 86, -62, -10, 25, 19, 74, -19, 32, 24, -37, -28, -65,
+ -13, 46, -29, -43, 8, 36, 21, 23, -35, -47, 11, 60, -12, -31, 20, 25,
+ 36, 67, -91, 88, -69, -9, -12, 52, -40, -69, 21, -39, -6, 33, -33, 97,
+ -19, -32, 62, 58, -62, 54, -28, -66, 61, 27, -45, 0, -35, 34, 54, -27,
+ 81, -32, -30, 41, -18, 60, -43, 38, -81, -6, -33, -15, 47, -14, 14, -33,
+ 6, -50, 55, 37, -46, -37, 89, -72, -36, 78, -40, 22, 60, -55, 51, -5,
+ 5, -42, 47, -46, -44, -18, 107, -57, 8, -71, -19, 44, -45, 24, 53, 27,
+ 32, 10, -6, -44, -23, -1, -26, 9, 12, -49, 54, -14, 31, -12, 49, 29,
+ 35, -36, 47, 17, 4, 16, 20, 5, 45, -31, 25, -32, -61, 82, -73, 68,
+ -14, 63, -75, 31, -48, -40, 68, 4, -17, 32, 40, 38, -8, 52, -9, -31,
+ -15, 11, -51, 84, -1, -54, 55, -49, 13, 21, -21, 51, -24, 6, 4, 33,
+ -38, 44, -6, -13, 11, 2, -51, 59, -45, -56, 51, 46, -72, -13, -25, -11,
+ 28, -16, 6, -75, 21, -68, 11, -26, 22, 13, 12, 56, -49, 1, 53, 40,
+ -34, -11, -37, 77, 14, -59, 76, -91, -29, 4, 54, -2, -61, -33, 45, 27,
+ 20, -45, -36, -20, -51, 5, -6, 44, -41, -28, 26, -24, 33, -10, -13, -61,
+ 66, 0, -36, 19, 38, -99, 27, -85, 52, 26, -17, 7, 20, -72, 42, -13,
+ -47, 29, -2, 5, -86, 83, -55, 4, -8, -54, -20, -35, 30, 0, 10, 48,
+ 39, -12, 5, 38, 27, -60, 22, -37, 68, -22, -18, -10, -41, 52, 18, -30,
+ -4, -51, 38, 5, -48, 45, 36, -58, 61, 55, 0, 26, 14, -55, -5, -52,
+ 14, 69, -73, -8, -54, 53, 13, 86, -111, 69, 7, -18, 54, -72, 12, -29,
+ -21, -48, 55, -48, 58, -43, 22, 22, 20, -6, 19, 54, -7, -37, 17, -44,
+ 41, -24, 0, -56, 29, 27, -67, 41, 0, -33, 43, -47, 29, -5, -21, 68,
+ 12, -31, -8, 5, 55, -62, -35, -35, -5, 95, -61, 54, 35, 22, -71, 44,
+ -76, 11, 46, 26, -69, 87, -74, 31, -12, 44, 10, -39, -62, 80, -112, 24,
+ -53, 28, -68, 36, -10, -21, 22, 16, -28, -36, 51, -50, 70, -75, -28, 28,
+ 14, -74, -7, 20, 75, -16, -52, 0, -68, 50, -13, -60, 39, -16, 26, 24,
+ 30, 28, 26, -31, -34, 29, -41, -7, 17, -62, 33, -38, -51, 34, -69, 45,
+ 9, -46, 24, 2, -2, 80, -59, 33, 36, 61, -96, 57, -24, 60, 14, -60,
+ 22, -19, 2, 53, 7, 50, -40, -5, 49, 18, 25, -79, 25, 47, -80, -12,
+ -29, 52, -42, -59, 37, -47, 40, 14, 51, 28, -20, -50, 97, -32, -14, -16,
+ -22, 80, -18, -7, 42, -9, 2, -7, -17, 11, 7, 36, -47, 36, -39, 62,
+ -15, 14, -24, -29, -11, 40, 52, -29, 39, -48, 14, 8, -43, 96, -66, 24,
+ 51, -26, 46, -40, 60, -44, 78, -27, -33, 68, -26, 22, 2, -10, 12, -82,
+ 25, -18, -7, -15, 0, -32, 64, -24, -14, 5, -39, 78, 12, -49, 0, -37,
+ 21, -19, -3, -33, 32, -20, -30, 57, -90, 4, -30, 49, -67, 61, 34, 75,
+ -23, -26, -2, 40, 20, -32, -19, -49, 65, -29, -37, -13, 15, 23, 31, -23,
+ 46, 37, -35, 15, -39, 69, -58, 11, -32, 43, -46, 6, 6, -31, 16, 32,
+ -40, 39, 30, -6, 8, -63, 48, -23, 6, 31, 36, -38, 3, -10, -10, -57,
+ -28, 20, 18, 4, -10, 59, 48, 65, 8, -76, 42, -49, -12, -33, -28, 86,
+ -64, 62, -60, 9, 51, -13, 47, -28, -10, -9, -40, 50, 14, -10, 54, 27,
+ -64, 13, -14, 0, -8, -28, 1, 33, -6, -46, 41, 4, -50, 75, -11, -50,
+ 36, 31, 16, -8, -53, -1, 70, -4, 57, -37, -7, 4, 36, -50, -33, 36,
+ -22, -16, -60, 45, -26, 8, 13, 28, 22, 41, -24, 73, 13, 73, -25, 1,
+ -7, 96, -74, 73, -11, -76, 35, -16, -16, -81, 93, -51, 3, -47, 62, 39,
+ 16, -33, 67, -91, 78, -53, 40, 30, -43, -41, -5, 63, -78, 77, -9, 26,
+ 59, -25, 29, 0, 31, -37, 55, -68, -43, 38, -47, 58, -62, -18, 14, 37,
+ -16, -60, 44, -41, 17, -37, 61, 8, 12, -5, -37, 33, 10, 23, -24, 19,
+ -12, -10, -50, 82, -22, 69, -117, 72, 21, -27, 4, 55, -25, -48, 31, 17,
+ -41, -46, 7, 4, -23, 10, -20, 6, -26, 44, -72, 53, -42, 17, -18, 55,
+ 36, -4, 31, -11, 5, 38, -33, -11, 43, 64, -25, -43, -48, 44, 44, -24,
+ 71, -53, 55, -26, 63, -69, 56, -56, 74, 22, -35, 6, -1, 33, -53, -35,
+ -36, 49, -32, 35, -9, 41, -38, 21, 29, -20, 26, 49, -48, 5, -40, -50,
+ -17, 39, 2, 22, -21, -51, 60, -91, 105, -76, 50, -28, 25, 19, -39, 24,
+ -22, 0, -12, -56, 10, 44, -15, 7, -10, -15, -34, -2, 18, -8, -19, 110,
+ -66, 48, -17, -26, -30, -18, -37, -64, -18, 82, -30, -18, 8, 55, -61, -41,
+ 20, -2, -36, -19, -22, 5, -17, 1, 19, -26, 68, -61, 56, -45, -48, 23,
+ 52, 51, -76, 95, -32, 39, -70, 47, -18, 0, 23, 59, -72, 30, 42, 19,
+ 3, -63, 27, 14, 57, -22, -42, 0, 48, -73, 50, 14, -57, 62, -16, -62,
+ 52, -27, 59, 19, 5, 46, 5, -35, -21, -4, -46, -4, -44, -54, -23, 31,
+ -27, -81, 41, -64, 3, 61, 15, -54, 62, -12, 39, -45, 40, -21, -41, -54,
+ 17, -28, -50, 28, -73, 18, -19, 4, -42, 7, 64, -48, 38, -37, -56, 44,
+ -62, 1, 35, -13, -20, 14, 15, -39, 90, -14, 17, -17, 27, -7, 4, -51,
+ 32, 22, 1, 30, -61, 83, -76, -39, -16, 63, 8, -25, -48, -13, 70, -43,
+ -38, 55, 4, -12, -17, -46, 82, -68, 27, -43, 54, -82, 57, -4, 0, -40,
+ 46, 34, 23, 15, 17, 46, -60, -23, 31, -24, 7, 18, 59, -46, 64, -86,
+ -50, 0, 5, -42, 23, -50, 27, -17, -20, -52, 3, 77, -30, 31, -62, -26,
+ -29, 14, 53, -39, 9, 43, -34, -13, -51, 29, -30, 25, -43, -22, 39, -15,
+ 12, 41, -5, -18, -68, 51, -25, -17, -70, 51, -52, 3, 19, -39, 14, 53,
+ 39, -29, -57, 13, -13, 11, 26, 41, -50, -2, -31, 4, -29, 45, 5, 21,
+ -7, 37, 51, -14, 59, -71, 67, -41, -2, -50, 25, 9, -26, -23, 33, -58,
+ 30, -12, 23, 58, -65, 54, 49, -21, 78, -124, 84, -52, 65, -48, 92, -10,
+ 0, 38, 58, -6, -16, 66, -13, -27, 47, 74, -80, 28, -44, 22, -5, 24,
+ -64, -10, 43, -31, -27, -7, 42, -43, 11, 10, -27, -65, 99, -73, -13, -3,
+ -22, 23, 26, -35, -10, -25, 67, -25, -32, 44, -15, -19, -24, 39, 24, 7,
+ -24, 7, 1, -61, 36, -55, -3, -52, 32, 21, -16, 22, 34, 45, -47, 78,
+ -49, 86, -24, 40, -41, -53, 38, -29, 65, -48, 22, -9, -16, 6, 48, -18,
+ 59, -19, 47, -5, 27, 33, 2, -25, 15, 50, -89, 0, 13, -27, 5, 43,
+ -61, 51, -16, -32, 59, -75, 4, 48, -60, -47, -35, 23, -4, 33, 27, 0,
+ -20, 17, -75, 72, -29, 36, -28, 78, 15, -52, -37, -16, 5, 41, -75, 44,
+ -9, -32, 36, -35, 21, 16, -74, 60, 0, -6, -50, 95, -47, -44, 22, 7,
+ -12, -20, -62, 43, -56, -10, 42, 42, -6, 80, -45, -22, 21, -58, 19, 47,
+ 7, 36, -51, 51, 39, -29, 49, -21, -9, 64, -57, -36, 37, -30, 37, -14,
+ 47, 30, -68, -33, -38, 33, 0, 47, 31, 50, -37, -17, 83, -53, 3, -19,
+ 2, -26, -23, 18, 3, 31, -7, 60, 24, 42, -41, 20, -32, 55, 16, -47,
+ -3, 50, -13, 52, 25, -54, 43, -61, 99, -60, 62, 39, -48, -35, -32, 12,
+ -36, 10, -95, 69, -55, 28, 21, -58, 29, 83, -19, 28, 36, -27, -15, 51,
+ -42, 29, -38, 6, 29, -16, -52, 31, -22, 86, -55, 22, -93, 51, -60, 6,
+ -38, -15, -21, 33, -28, -52, -2, 32, -71, -83, 66, -62, -13, 45, 7, -24,
+ 49, -41, -17, -11, 40, -42, 49, -51, 14, -25, 42, 21, -66, 77, 25, -40,
+ 6, -67, 21, 13, -9, -3, -14, 11, -61, 47, -13, -11, 67, -90, 55, -14,
+ -3, -55, 45, 20, -25, 5, 9, 37, 36, -7, -40, 64, -65, 54, -90, 53,
+ -78, 36, -39, -24, 63, -22, 56, -60, 9, -30, 34, 10, -16, -15, 25, -37,
+ -10, 19, -75, 94, -87, 37, -4, 62, -79, 34, 54, 3, 11, 42, -60, 43,
+ 15, 2, -47, -12, 37, 30, 1, -39, 75, 58, 29, -45, -14, -3, -29, 39,
+ -53, 1, 24, -27, 0, 11, -21, -12, -64, 87, 45, 18, 50, -67, 56, -19,
+ 25, 3, 5, -3, 8, -66, 52, -18, -41, 18, 21, -15, -51, 102, -54, -29,
+ 2, 55, -12, 46, -52, 48, -49, -49, 15, -57, -35, 15, -35, 21, -5, 43,
+ -46, 1, -16, 0, -6, -23, -43, 16, -9, -20, 59, 15, -5, 34, 38, -77,
+ 53, -63, 67, 21, 52, -84, 76, -35, -44, -63, 57, -28, -6, 14, -31, 45,
+ 20, 12, 23, -19, 21, -34, 25, -53, -50, -10, 15, -2, 6, -40, 27, -32,
+ 25, -17, -39, 4, 0, -52, 43, 18, -79, 32, -72, 10, 48, -10, 3, 20,
+ 69, -73, 84, -55, -11, 12, 0, 34, -21, -46, -60, 48, -23, 63, -50, 0,
+ -18, -21, 48, 21, -47, 30, 3, 5, -35, -42, 42, 47, 45, -16, 19, 10,
+ -5, 37, -38, -37, 26, 53, -10, 6, 71, 35, -8, 55, -11, 44, -73, 80,
+ -91, 69, -7, 0, -39, 61, 2, 22, -7, 7, -2, -30, -1, -43, 35, -12,
+ 26, 59, 11, -46, 40, -33, -36, 18, 52, 21, -31, 18, 20, -7, -33, 33,
+ -48, 89, -72, 19, 20, -15, 66, -49, -26, 4, -14, -28, -9, 21, 49, -42,
+ 51, -31, 35, 2, -10, 54, -72, 19, 11, 11, -51, -37, 32, -25, 32, 28,
+ -60, 47, -25, -67, 40, -8, -62, 11, 15, -5, -60, -10, -19, 27, 28, -24,
+ -42, 10, 35, 53, -62, 61, -66, 38, -64, -56, 22, 12, -18, 33, -19, 13,
+ 15, 29, 29, -28, -23, -23, -41, 67, -12, -63, -60, 43, -105, 84, -54, -6,
+ -44, 22, 26, -11, -5, 64, 12, 6, -19, 56, -63, 34, -24, 23, -30, 73,
+ -28, -21, -30, 22, 5, -22, 20, 47, -30, 42, 21, -1, 24, -2, 8, -72,
+ 32, 14, -30, 47, -20, -4, 14, -5, 38, -8, -45, -9, -55, 23, -68, 62,
+ -59, 8, -19, -18, 38, -28, 12, -64, 119, -41, 6, 0, 64, -62, 61, -44,
+ 20, -45, 17, -36, -13, 28, 27, 1, -3, 76, -10, 10, -4, 55, -68, 37,
+ -37, 48, -7, -52, 48, 16, -54, 26, 5, 33, 19, -31, 44, -38, 34, -24,
+ 6, -50, 27, 47, 48, -15, -16, -28, -1, 59, 44, -71, 60, -105, 98, -44,
+ 86, -45, -42, -10, 4, -6, -2, -16, -22, 73, -21, -51, -17, -15, 37, 11,
+ -1, 3, 32, 6, -41, -53, 42, 13, -81, -18, 39, -96, 21, 3, -42, -24,
+ 58, -56, 65, -64, 77, -71, -19, -18, -24, 61, -32, 31, -25, -10, -17, 5,
+ 37, -49, -44, 72, -68, 67, 16, -18, -18, -33, 13, -13, -55, 39, -16, 69,
+ -41, 29, 7, -53, 49, 11, -36, -28, 20, 18, -3, -7, 31, 38, -65, 17,
+ 52, -53, 27, -15, -8, -55, 33, -1, 9, -43, 58, 10, 34, -25, -16, 10,
+ 30, 26, 56, 28, 9, -46, 64, 25, 27, -32, 23, 31, -60, 17, -8, -39,
+ 99, -88, 10, -56, -8, -79, 46, 33, -20, 51, -14, 27, 52, -62, 13, 56,
+ -72, 2, -11, -1, 55, 21, -10, 18, 10, 83, -35, 52, -12, 46, -56, 27,
+ 48, -49, 44, -50, -4, -39, 12, -4, -50, 4, -1, 63, -1, -42, 59, -47,
+ 51, 31, -47, 82, -56, 13, -11, 49, -51, 44, 32, -88, 32, 40, 1, 27,
+ -10, -24, 4, 17, 36, -7, -16, 16, -9, 6, 31, -33, 61, -5, 40, 10,
+ -46, 61, -3, -37, 6, -8, -45, 71, -49, -43, 17, 42, -62, 24, 5, -17,
+ 36, -15, -15, 34, 33, -16, -38, 18, -6, -78, 43, -81, 49, -36, 31, 24,
+ -35, 0, -45, 60, -11, -27, 21, 43, -7, -22, 22, -22, 37, -35, 43, -15,
+ -16, 65, -58, -53, -14, -3, 7, 15, 23, -46, 38, -31, 26, 39, -25, -22,
+ -57, -14, 86, 3, 30, 0, 17, -53, 69, -69, 8, 38, 1, -22, -55, 66,
+ -49, -26, 47, 0, 43, 27, -34, -34, 45, 29, -5, 44, -19, 34, 44, 20,
+ -46, 73, -54, 76, -56, 58, 61, -5, -6, -34, 45, -15, -4, 53, -47, 18,
+ -34, 24, -46, 28, 24, -19, -40, 53, -18, 56, -11, -44, 87, -62, 61, -56,
+ -25, -24, -42, 40, -24, -42, 61, -16, -10, -15, 3, 47, -24, -65, 39, 2,
+ -59, 51, 5, -27, -22, 67, 14, -16, 63, -61, 25, 7, -28, 0, 65, -20,
+ 37, -73, -82, 63, -85, 81, -85, 0, -34, 54, -55, 45, 9, 17, -15, -42,
+ -24, 87, -43, 60, 28, 72, -33, 28, -39, -27, 9, -36, 3, -22, 70, -60,
+ -20, 54, 45, -64, 43, -80, 79, -86, 54, -121, 57, -42, 42, -55, 46, -5,
+ -24, 61, -45, -25, 65, -13, 29, 21, 18, -22, -5, -51, 22, -2, -43, 51,
+ -42, -9, -2, -54, -15, 64, -36, -46, 91, -80, 15, 65, -39, -35, -34, 21,
+ -30, 16, 54, -59, -38, 58, -66, 40, 35, -47, 56, -46, 15, -19, -46, 74,
+ 1, -52, 39, 49, -32, -29, 97, -49, -7, 13, 46, 0, -49, -9, 3, -24,
+ 36, -50, 6, -30, -33, 2, 78, -30, -32, 78, -8, 80, -72, 34, 17, -4,
+ 40, 4, 26, -62, 69, -7, -20, -55, -21, -33, 50, -48, 38, -60, -3, 4,
+ -29, 32, 9, 35, 15, -5, 20, 0, -24, -18, -9, -17, 43, -64, -41, 60,
+ 43, 36, -104, 36, -67, -24, 56, -25, 22, 12, -3, -48, 23, 9, 22, -69,
+ 61, -36, 32, -71, 20, -52, 0, 53, -38, 46, -15, -55, 35, -35, -56, 56,
+ -59, -26, 36, -62, 16, -37, -36, -31, -50, 65, -50, 49, -19, 43, 0, 72,
+ -59, -34, 62, -1, -13, 8, 47, -76, -20, 49, -35, 5, -11, 36, -60, 26,
+ 48, 36, 25, -5, -19, -41, 36, -45, 25, 6, 29, -91, 60, 35, -79, 28,
+ 65, -72, 30, 14, 23, -61, -30, 39, -97, 66, -51, 34, 9, -23, -57, -2,
+ -83, 71, 67, -69, 52, -29, 19, 20, -9, -19, 60, -81, 48, 3, 43, 17,
+ 25, -34, 10, -23, -42, 5, -71, 9, 12, -20, -36, 65, -25, -23, -25, -14,
+ 73, -101, 4, 37, 13, -9, -36, 44, -26, 80, 4, -11, 19, 42, -29, 13,
+ -59, 12, 20, 7, -39, 42, -79, 49, 40, -55, 64, -19, -5, -41, 64, -35,
+ 0, 42, -57, 61, 18, -32, 12, -52, -13, -23, 32, -92, 56, 35, -16, 62,
+ -16, -26, -22, 75, -42, -6, 64, -67, 31, 28, -47, 43, 28, -48, 17, -82,
+ 51, -11, 55, -64, 53, -40, -9, -27, 9, 40, -50, 11, 43, 19, 2, -65,
+ 57, 37, 81, -59, 2, 36, -69, 0, 8, -9, -52, -58, 40, -3, -29, -33,
+ 12, 35, -38, 12, -57, 19, 10, 67, 8, 52, -29, -10, -28, 69, -7, 3,
+ 57, -28, -9, -20, -45, 13, -17, -35, 44, -14, 10, -11, 23, 29, 27, -35,
+ 4, -71, 82, 17, 49, -6, 14, -20, -56, 36, -28, 6, -15, 23, 58, 1,
+ -29, -19, 18, -16, 37, 28, 12, 15, -42, -33, -54, 73, 22, 36, -15, -32,
+ 49, -2, -11, 4, 10, 38, 25, 47, 41, -42, 19, -38, -48, -18, -8, -47,
+ 38, 70, -38, -30, 33, -51, -38, 84, -18, -18, 60, -40, -8, -30, 64, -71,
+ 31, -89, 38, -29, 82, 16, -30, 23, 14, 13, 23, 60, -62, -18, 67, -4,
+ -40, 2, -25, -38, 22, 5, 47, -7, 36, 43, -49, -11, -53, 81, -8, 24,
+ 84, -70, -72, 65, 14, -13, -8, -3, -6, -7, -38, -6, 30, -54, -69, 53,
+ -27, 8, -38, -20, 75, 43, 17, 15, 7, 72, -64, 34, 18, -7, 16, 11,
+ -22, 47, 29, -47, -38, -43, 59, -16, 22, -89, 48, -50, -1, -55, -14, 34,
+ 18, -19, 30, -8, -12, 26, 0, -68, 37, -42, 30, -14, 49, 6, -12, 18,
+ -5, -56, 73, -21, -23, 4, 39, 58, -6, 53, -45, 44, -5, -36, 20, -82,
+ 37, -13, 3, -41, -19, 29, -54, -5, -26, -57, 14, 10, -56, 65, -35, 82,
+ -54, -22, -43, -5, 3, 61, -13, 3, 20, 0, -52, 27, -68, 32, 4, 75,
+ -45, -28, -62, 33, 73, -48, 68, -53, 21, -5, 60, 32, -15, -37, 4, 0,
+ -29, 3, 13, 41, -32, 62, -60, -50, -13, -56, 13, -10, 82, -89, 8, -14,
+ -29, -37, 71, -56, 44, 6, -37, 55, 58, -51, 67, -21, 12, -33, 10, 0,
+ 49, -37, 5, -29, -45, 12, -40, 20, 38, -4, 41, 19, 41, -52, -31, -30,
+ 12, 68, -23, -9, 14, -9, -44, 14, 0, 43, 59, -58, -42, 2, 11, 54,
+ 27, -33, -26, 52, 5, -47, -26, 14, -50, 33, -23, 57, 36, -18, 60, -48,
+ -15, -39, 14, 65, -9, 22, 16, -43, -5, -31, -30, 11, 40, -49, 15, 39,
+ -16, 41, 11, -14, -27, -50, 71, -57, 10, -50, -23, -55, 59, -26, -32, 75,
+ -27, 34, 80, -44, -4, -14, -18, 18, 27, -73, 46, 48, -1, -25, -23, 31,
+ -89, 68, 47, -13, -73, 62, 19, 35, -51, 63, 2, 47, -66, 75, 15, -32,
+ 36, 0, 41, -39, -65, -78, 49, 28, -59, 7, 4, -25, -6, 30, -58, 51,
+ 29, -73, -34, 57, 55, 51, -12, -62, 84, -35, 21, 69, -59, 48, -4, 36,
+ -54, -50, 67, -55, -37, 61, -53, 43, 5, -11, 38, -28, 0, -29, -4, -6,
+ -29, 49, -46, -8, 8, 24, -42, -49, 47, -51, 0, 51, -10, 31, -1, 25,
+ 45, -3, 70, -47, 38, 43, 49, -27, 10, 54, -22, 36, 28, 34, -34, -64,
+ 16, 31, -14, 56, -49, 11, -21, -50, 13, -31, 68, -32, -21, 35, -74, -48,
+ 44, -21, 31, -25, -45, -20, 4, 51, -28, -38, -21, 57, -58, 60, 56, -14,
+ 16, -14, -21, 0, 21, -44, 51, -11, 70, 26, 47, -59, -31, 62, -2, -38,
+ 58, 47, -48, 87, -72, 62, -2, -34, -42, -3, -38, -17, -10, -27, 33, 4,
+ -61, 71, -20, -11, 8, 55, 18, -33, 12, -4, 10, -54, -29, 90, -43, -19,
+ 39, -45, -2, -18, -39, 30, -19, -22, 64, -32, -6, -37, 74, -68, 25, -51,
+ -50, 58, -50, -17, 21, 36, 15, -22, 2, -42, 4, 29, -42, -17, 8, 27,
+ 43, -18, -40, -75, 69, -36, -23, 43, 41, 35, 70, -26, 62, -8, 27, -57,
+ 0, 25, -15, -46, 47, -35, -13, 73, -42, 64, 15, 10, -24, 17, -20, -78,
+ 28, -38, -80, 40, 24, -1, -6, 2, -39, 28, -59, -11, -53, 36, -8, 30,
+ 4, -2, 29, -81, 59, -43, -41, -10, -13, 37, -19, 4, -35, 31, -25, 72,
+ -65, 34, -21, 35, 52, 69, -64, -17, 30, -21, 29, -9, 38, 50, -56, -23,
+ -11, 74, -14, -14, -67, -31, 10, 16, -38, -43, 46, -58, 58, -38, -17, 24,
+ 26, 29, -42, 54, 30, 21, -39, 0, -34, 14, 46, -66, 50, -49, 51, -36,
+ 96, -105, 98, -41, 7, -2, 29, 22, -3, 6, -31, -45, 2, -53, 76, -29,
+ -53, 36, -77, 69, -49, -42, -25, 13, 63, -77, 47, 11, -56, -32, 37, 75,
+ -50, 36, -68, 65, -30, 34, -21, 27, 70, -18, 19, 6, 22, 1, 46, 35,
+ -29, -68, 32, 27, -51, 84, -26, -7, -52, 89, 29, -39, -23, 11, -79, 38,
+ -16, -3, 1, -9, 14, 47, -47, 43, -52, -59, -33, 39, 38, -58, 49, -39,
+ -43, 34, -67, -12, 12, -48, 33, 28, -18, 9, 37, 33, -38, 54, -71, -15,
+ 75, -27, -67, 59, -65, -42, 18, -3, 0, -46, -17, 1, 31, -63, 37, 27,
+ 0, 42, -2, -19, 50, 24, 37, -37, -18, -23, 52, -3, -58, 36, 42, -37,
+ -20, 39, 51, -12, -53, 6, 2, -3, -2, 83, -65, 11, -44, 41, 31, 5,
+ -6, -38, 84, 18, -28, 22, -1, 11, -71, -17, -52, 4, -73, 52, -45, -30,
+ 38, -51, 16, 37, 15, -15, 16, -14, -29, -24, 12, -11, -1, 22, 65, 12,
+ 20, 14, 88, -78, 11, -21, 23, -24, 30, 6, 4, 36, 3, 55, -79, -4,
+ -46, 48, -57, 75, 18, 20, 4, -31, -7, -45, -7, -20, 30, -9, -65, 15,
+ -30, -44, 33, -37, 2, -37, 77, -22, -50, 44, -61, 15, -32, -69, 74, -7,
+ 39, -58, 17, 30, 36, 35, 32, -83, 87, -51, 12, 25, -33, 36, -15, 5,
+ -23, 13, 64, -80, -47, 47, -14, 5, -7, 28, -66, 54, 16, -31, -7, 17,
+ -56, 63, -43, -24, 72, -45, -49, 27, -39, 28, -5, 32, 53, 4, -67, 1,
+ 23, -55, 18, -19, 40, 38, -49, -16, -1, 6, -18, -36, 5, 11, 7, -21,
+ -18, 66, 10, -39, -48, 25, 45, -25, -33, -66, 71, -82, 10, 33, -59, 28,
+ 32, 68, -14, 20, 30, -4, -25, -23, 52, -56, -5, -28, 56, 27, 18, -66,
+ 66, -41, -12, 46, 17, -58, -32, 83, -48, 78, 20, -14, 38, -21, -10, 42,
+ -24, -54, 34, 70, -11, 38, -50, -14, 38, -30, -20, 0, -73, 67, -3, 69,
+ -114, 49, 15, 19, 49, 20, 26, -75, 58, 18, 37, 28, -41, -3, 15, -11,
+ 0, -49, 33, -43, 52, -31, -22, 4, -1, 59, -89, 28, 25, 10, -35, 41,
+ 27, -50, -6, -32, 61, -47, 11, 16, 31, -61, 58, -78, 67, -58, 11, -34,
+ -35, 61, -47, -47, -25, 31, -17, 2, -2, 36, -38, -1, 14, -11, 39, 33,
+ 0, 2, -18, -13, 54, -44, -16, 26, -10, 43, 6, -36, -17, -47, -42, -31,
+ 52, -23, -50, 90, -89, 82, -7, 11, 6, 23, -6, 43, -70, 17, 42, 31,
+ -17, -28, 11, -52, -18, -7, 21, 29, 15, 4, 30, 14, 35, -75, 88, -12,
+ 35, -13, 16, 43, -31, -16, -49, 24, 57, -72, 50, 16, 41, 0, 21, -61,
+ 68, -64, -3, -68, 37, -88, 53, -23, 32, 37, -60, -12, 58, -71, -19, -1,
+ -23, 31, -54, 44, 38, -34, 3, 27, 16, -46, 25, -21, 51, -25, 32, 23,
+ -18, 16, 27, -48, -59, 45, -6, 38, -14, -6, -12, -41, -19, 5, 25, 60,
+ -68, 67, -47, 74, -74, 73, -6, 44, -45, -3, -42, 69, -43, 17, -39, 7,
+ -3, -72, 18, 4, 66, -49, 7, -37, 11, 66, -74, 85, -65, 12, 46, -21,
+ 4, -54, -35, 32, -88, 37, -25, -32, 53, 0, -21, -9, -55, 0, 19, 13,
+ -9, 13, -10, -37, -4, 27, 11, -60, -13, -37, 46, -33, -49, 31, -8, -1,
+ 51, 55, -46, -62, 31, -9, -26, -2, 53, -56, 24, 66, 39, -47, 8, -62,
+ 64, 34, -15, -39, -44, 32, -41, 61, -31, -16, -50, 56, -45, 77, -30, -54,
+ 36, 16, -59, 11, -50, -22, 37, 28, -17, -39, 100, -71, 33, -15, -8, -4,
+ -5, -54, 68, 13, 50, -18, 16, -47, 24, 39, -59, 83, -21, 9, -29, -2,
+ 88, -69, 16, 61, -28, -43, 33, 19, 6, 0, 68, -15, -12, -31, 16, -1,
+ -52, 43, 24, -2, -32, -20, 8, 55, -81, 19, 32, 35, -33, 67, 59, -6,
+ -59, 44, -3, -24, 87, -70, -43, 34, -59, -61, 49, -34, 7, 50, -74, 51,
+ -12, 64, -56, 62, -60, 64, 20, -46, 16, -7, 49, -82, 2, 43, -29, 33,
+ -43, 49, -51, -46, 75, -57, 61, 19, -60, 58, -58, 41, -36, -31, 33, -24,
+ -25, 37, 60, 6, 15, 11, 13, -10, -56, 1, 6, 50, -51, 79, -18, 49,
+ -6, 0, -35, -18, -15, 48, -19, -64, 11, 9, 40, -46, -39, 34, -50, -14,
+ -47, 40, -25, 64, 19, 6, -46, 62, -63, 68, 8, -10, 46, -37, -35, -28,
+ 55, -42, 61, -16, -16, -61, -17, 16, 22, -34, 40, 0, 9, 25, 19, 22,
+ 41, 4, 26, -9, -22, -15, 37, -31, 79, -97, 19, 27, -27, 52, -63, -29,
+ -58, 74, 15, -32, 73, 2, 41, 31, -64, 54, -34, 40, 50, -70, 35, -14,
+ 19, 3, -42, 58, -19, 18, -30, 49, 18, 33, -57, 52, 8, -16, 49, 0,
+ -21, -36, 69, -28, -28, 16, 45, -26, -29, 83, -58, -31, -64, 47, 11, 29,
+ -29, -82, 22, 61, -7, 31, 1, -54, 15, 73, -35, -33, 19, -79, 43, 41,
+ -7, 17, 66, 21, -1, 66, -78, 40, 9, 5, -68, 58, -58, 52, -11, -12,
+ 54, -19, -19, -25, -45, -37, 13, 71, -67, 49, -39, -8, 16, 40, -28, -27,
+ -6, -22, 28, 17, 34, 44, 0, -14, -49, 71, -54, -9, 60, -3, 6, 21,
+ 50, -45, 2, -31, 10, 42, 23, -19, -8, 60, -62, -14, 61, -41, -4, -6,
+ 31, -38, -18, 0, -93, 83, 48, -44, 53, 56, -24, 11, -16, -28, 35, -26,
+ -15, 28, -37, 58, 12, -72, 1, -56, 79, -43, -31, 48, 10, 19, -50, -45,
+ 73, -30, -22, 90, -88, 92, -103, 38, 7, -31, 19, -51, 38, 50, -31, -42,
+ 18, -6, -49, -32, 22, 9, -11, 11, 71, 15, -43, 16, 2, -32, 28, -50,
+ -6, 43, -27, 48, 39, -30, 16, 16, 70, -66, 30, 28, -2, -31, 34, 39,
+ 0, 12, 51, -53, 3, -37, 55, -24, -17, -52, 58, -29, 16, -7, 59, -19,
+ 12, -13, -37, -15, 29, 35, 44, -43, 37, -14, 67, -72, 29, -16, 38, -41,
+ -26, 46, -31, 34, -48, 29, -51, -9, -13, 70, 31, -32, -4, -6, 9, 48,
+ 39, -3, -45, 7, -67, 19, -10, -54, 15, 30, -71, 76, -86, 107, -69, 33,
+ 16, 0, -39, 40, 17, -24, -36, 2, -61, 23, -2, 13, -10, -23, 21, -55,
+ 18, 11, -64, 64, -34, 71, -91, 60, 25, -77, 23, 54, -47, 64, -34, 48,
+ -5, 39, 12, -15, -60, 14, 15, -9, 9, -9, -34, 67, -11, 17, 28, -46,
+ -39, -26, -44, 30, -31, -24, -12, 31, -19, -34, 40, 6, -46, 81, -53, 13,
+ 53, -65, 66, 21, 7, 14, -29, -38, -31, 10, -48, 71, -75, 18, 45, -52,
+ 99, -92, 44, -68, -3, -68, 30, 31, -42, -23, -27, -23, -35, -24, 55, -81,
+ -32, 46, -48, -15, 4, -17, -21, -22, 46, -41, -19, -22, -10, -35, -11, -12,
+ -55, 59, -12, 2, 93, -55, -27, -12, 25, -62, -35, 50, 19, -10, -11, -39,
+ 73, -40, 12, -50, 6, 17, 30, 29, -78, 70, 0, 7, -58, 27, 51, -49,
+ 21, -52, 35, -20, -4, 12, 6, 26, 11, 32, 7, 8, -83, 31, -2, 61,
+ 10, 40, -14, 33, -14, -22, -39, 28, -93, -8, 64, -48, -7, 30, -71, 79,
+ -1, -2, -3, -70, 10, -64, 86, -43, -54, 29, 2, -55, 44, -76, 63, -81,
+ 67, -93, 19, -12, -39, 34, 18, -44, 6, 56, -71, 33, -5, -22, 41, -39,
+ -17, 15, -1, 11, -17, -61, 15, -24, 58, -60, 2, -14, -16, -6, -15, -61,
+ 46, -65, -2, 17, 78, -86, 79, -53, 38, -77, -37, 0, 12, 37, -50, 20,
+ -82, 51, -19, 10, 23, 23, 22, 40, -23, -7, 55, -48, 50, -89, 22, -39,
+ -46, 36, 78, -103, 26, 55, -13, 4, 66, -28, 27, -27, -27, -16, -24, 1,
+ 61, -18, 37, 19, -31, 24, -15, 19, -95, 87, 12, 27, -43, 20, -51, -19,
+ -50, 60, -42, -32, 64, -4, -11, 54, -66, 23, -27, -36, 40, -26, 1, 9,
+ 60, -3, 2, -30, -17, 24, 34, -38, 8, 35, -57, 38, -25, -57, 60, -35,
+ -56, -5, -43, 38, 18, 50, 3, 62, -37, 84, -20, -46, -8, 39, 19, -9,
+ -35, 77, -7, 12, 6, -39, 66, -83, 65, 42, 16, 35, 38, 18, -84, 76,
+ 49, -32, 46, 31, -20, 20, -9, 39, -21, 40, 82, -61, 47, 41, -11, 74,
+ -13, 35, 14, -35, -38, 31, 8, -36, -29, 46, 64, -57, 34, -33, -11, 4,
+ -2, -30, -42, 72, -10, -2, 9, -38, 11, 0, -12, -5, -25, 39, -69, 66,
+ -23, 57, -67, 87, -53, -20, 25, -17, -44, 34, -10, 22, 38, 3, -62, -31,
+ 31, -42, -18, -54, 88, -65, 46, -22, 44, 32, 21, -49, 13, 11, 47, -72,
+ 17, 10, 27, 40, -45, 73, -86, 4, 16, -11, 53, -4, -66, 89, 1, 30,
+ -71, 72, 53, -86, 75, -39, -13, 45, 1, -21, 30, 39, -73, 56, -67, 46,
+ 24, -59, 7, 10, 46, -8, 51, -14, -76, 66, 21, -56, 70, -44, 39, 81,
+ -64, 84, -28, -20, -50, 40, 24, 3, 58, 33, 49, -45, -18, 7, 28, 13,
+ 43, -27, -2, -23, 53, -58, 38, -61, -7, -11, -55, 56, -31, 47, 10, 29,
+ 27, -40, -51, 68, 27, -93, 12, 3, -6, -69, 36, 39, 45, 30, 24, -13,
+ -51, -59, 57, -64, -4, 41, -27, -17, 91, -47, -26, 1, -31, -1, -1, 63,
+ -18, -18, 71, -60, 12, -11, 55, -54, 57, -13, 78, 2, -40, 0, 41, -47,
+ -24, 40, -48, 67, -7, -8, -18, -3, -2, 19, -73, 76, -53, 1, 35, -10,
+ 69, 13, -7, -23, -57, -53, -23, -6, 22, -31, -34, 53, 50, -45, -57, 38,
+ -27, -7, -29, -4, 46, 52, -71, 27, -28, -56, 6, -18, 8, -19, 71, -33,
+ -63, -13, 46, -60, 44, -36, 71, -68, 31, -64, -44, 51, -18, -35, -31, -8,
+ 16, 16, -48, 46, 5, -34, -31, 82, -18, 39, -36, -35, 3, 9, 38, -3,
+ 45, -18, 42, -61, 21, 9, 21, -15, 18, 32, -39, -20, 92, -46, 36, -18,
+ 24, 4, -27, -72, 68, -65, 79, -43, -5, 11, -56, -14, 17, 4, 49, 33,
+ -65, -5, 59, 53, -57, 56, -40, 54, -59, -17, -19, 17, 23, 3, 28, -1,
+ -55, 63, -48, 38, -31, -32, 95, -46, 78, -55, 12, -5, 46, -42, -67, 27,
+ 46, -66, -14, 48, -16, 10, 49, -68, -4, -37, -27, 21, 50, -39, -19, 60,
+ -56, 38, 35, -20, -63, 26, 0, -51, 115, -89, 9, 19, -31, 21, -31, -58,
+ 63, -81, -23, 8, 69, -80, 46, -38, -46, -49, -43, 68, -28, -21, 29, -21,
+ -52, 40, 19, -22, 24, -8, -10, 39, -39, 94, -33, 31, -3, -7, 44, -36,
+ 43, -40, -22, 14, -53, 51, 51, -34, 39, 71, -35, -62, -14, -71, 12, 10,
+ 92, -26, 47, -10, 25, -38, -38, 87, -81, -2, 21, 12, 40, 0, -27, 0,
+ 1, -12, -50, 53, -32, -25, -21, -26, -17, 3, -58, 0, 5, -12, 64, -46,
+ 64, 3, 36, -39, 15, 30, -42, 39, 17, 43, 12, 15, -35, 54, -23, -43,
+ -26, -6, 34, 16, 32, 54, -17, 53, -73, 61, -21, -11, -19, -13, 64, -18,
+ -49, 13, 30, 34, -62, -44, 44, 12, 62, -25, 33, -11, 1, -28, -18, 33,
+ 68, -4, -9, 22, -21, -37, 12, 4, 16, 63, -33, 5, -24, 54, 1, -37,
+ -42, 5, -34, -5, -20, 83, -17, -21, -22, -45, 73, 0, -12, -19, -28, -57,
+ 7, 11, -20, 47, 16, -46, -7, -10, 43, -64, 57, -57, -33, -7, -27, -10,
+ 6, -31, 7, 96, -76, 91, -59, 23, -21, -17, 96, -45, 10, -28, -2, -55,
+ 51, 67, -73, 9, -51, 17, -62, 70, 15, 39, -58, -14, -30, -17, -26, 0,
+ 45, -71, -5, 65, -78, 75, -47, -8, -37, -14, -18, 19, -41, 15, 69, -43,
+ 24, -62, 64, -27, -16, 32, -25, 4, 36, 20, 13, 43, -108, 84, -68, 51,
+ -61, 37, 2, -32, 49, 30, -14, -19, -50, 22, 29, 11, -14, 34, 74, -61,
+ 35, 26, 40, -26, 31, 11, -44, 3, 51, 29, -48, 40, -2, -8, -7, 8,
+ -1, -29, 59, -50, 4, -22, -3, -19, 63, -69, 1, -51, 57, -52, -60, 61,
+ -95, 80, -32, 50, -49, 14, -54, -17, -29, -8, -32, 52, 7, 49, 0, -45,
+ -39, -20, -42, 24, -27, 47, -15, -55, 40, -13, -13, 9, -8, 30, 8, 3,
+ 2, 62, -30, 32, -3, 61, -61, 85, -53, 9, -3, 60, -87, 89, -104, 10,
+ -33, -11, -59, 10, 62, -73, 46, -25, -27, -28, -48, 27, 25, 2, -10, 10,
+ 20, 20, -27, -35, 10, -32, 41, -41, 29, -20, -15, 53, -26, 13, -42, 10,
+ 60, -31, -44, 29, 23, -10, -23, 50, -58, -10, 19, -20, 9, -29, 56, -49,
+ -31, -47, -18, 13, 22, 1, -16, -46, 7, -13, -30, -10, -20, 3, 27, 41,
+ 74, -37, 48, -6, 35, -77, -16, 43, 20, -22, -74, 76, -50, 41, 80, -16,
+ 71, -72, 64, -57, 30, -56, 46, -56, 11, 47, -33, 84, 7, -7, 69, -37,
+ 22, 13, 63, -94, 42, -91, 88, -36, 21, -20, -43, 18, 46, -31, -41, 79,
+ -14, -42, -25, 86, -46, 88, -15, -89, 25, -22, 85, 2, -52, 58, -3, 21,
+ -17, 23, 64, -72, 33, 4, 2, -44, 63, 7, 18, 17, 40, -10, 2, -38,
+ 3, 62, -84, 27, 18, -61, 23, 23, -87, 51, -74, -35, 52, -5, 67, -24,
+ -14, 39, -5, -40, -10, 37, -58, 31, 22, 51, -20, -10, 12, -88, 14, -53,
+ 53, 15, -80, 81, -39, -55, 54, -31, 34, 4, -11, 30, 13, -28, 49, 34,
+ -29, 26, -78, 66, -9, 2, -15, 82, -86, 73, -25, 30, -17, 19, 44, 19,
+ 9, 23, -6, -4, 66, -39, 58, 33, -55, 24, -8, -25, 49, -14, 11, -19,
+ 83, -9, 66, -68, 48, -24, -37, 60, 37, -33, -7, 23, -55, -22, -38, 58,
+ -77, 33, -60, 70, -53, -17, 67, -83, 66, -30, 18, -18, 64, -59, 43, 76,
+ -63, 79, -54, 77, -82, 5, 5, 27, 23, -16, 26, 37, -62, 28, -1, 3,
+ -11, 51, -32, 39, -30, -16, 11, 33, 16, 8, -7, -20, 29, -26, 29, 62,
+ -90, 66, 43, -37, -31, 15, -11, -57, 71, 4, 40, -67, 5, -2, 5, -33,
+ 0, 71, 26, -3, -18, 10, -9, 72, 6, 50, 22, 44, -16, -16, 4, -23,
+ -48, -12, -6, 15, -83, 90, -13, 8, -3, -10, 86, -91, 89, -21, -72, -19,
+ -37, 13, 4, 53, -66, 92, -18, 25, 36, -59, 37, -84, 9, -51, 0, 23,
+ 2, -67, -43, 20, 49, 37, -35, 10, -7, -19, 50, -39, 36, 0, 9, -43,
+ -6, -44, 60, -27, -20, -7, -29, 90, -5, 46, -58, -21, 87, -36, 41, -42,
+ 36, -44, -45, 11, 36, -26, 64, -68, 48, -26, -38, 14, -79, 28, 11, -24,
+ 55, -16, 20, 26, 9, 23, 22, 4, 36, 23, 39, 27, -45, 10, -40, -39,
+ 68, -69, 9, 9, 3, -17, 38, -14, -45, -30, -23, -20, 38, 46, -2, 50,
+ -28, -26, 51, -61, -1, 35, 30, -76, 1, 3, 45, -73, -46, 68, -96, 64,
+ -77, 25, 0, 30, -41, 24, -12, -40, 24, -39, -5, -36, 31, 39, -80, -29,
+ -53, 40, -32, 9, -19, -30, 0, 38, 35, -45, 62, 47, -70, -59, 92, -71,
+ 9, -36, 11, 11, 69, -62, 64, -45, -36, 50, 12, -25, 76, 1, 28, -58,
+ 9, 40, -2, 23, -30, -15, -2, 36, -42, 29, 38, -23, -3, 25, -16, -44,
+ -1, -41, 59, -59, 36, 28, -10, 18, 26, -27, -42, 4, 41, -15, -1, -50,
+ 20, -92, 64, -14, -20, 37, -31, -5, -25, -62, 31, 3, 26, -10, -37, -69,
+ 81, -65, -3, -12, 30, 50, -25, 23, -79, -16, 34, 23, 75, -40, 43, -6,
+ -10, 9, -88, 41, -43, 16, -32, -41, 10, -57, -37, -24, -3, -7, 13, -5,
+ -2, 33, 40, -37, 96, -92, 12, 13, -27, 8, -29, 5, -52, -7, 72, -24,
+ 34, 43, -50, -41, -7, -45, -24, 50, -45, 22, -35, 35, 32, 39, -44, -1,
+ 11, 59, 20, 10, -68, 4, -11, 43, -51, 96, -64, 0, -51, 34, 19, -28,
+ 55, 31, -15, 12, -49, 67, -53, -21, -30, -19, -21, -11, -46, -8, -18, 59,
+ -46, 6, 48, -25, 37, -93, 46, 36, -77, 53, 28, -38, 67, -7, 16, 16,
+ -35, -69, 59, -55, -8, -5, -11, -60, -44, 28, -48, -21, 47, 29, -17, 4,
+ -54, 87, -19, 1, 56, -36, -20, 63, -13, 21, 29, -54, 67, -100, 39, -41,
+ -50, 33, -23, 30, 11, -62, 36, 27, 69, -71, -44, 57, 19, -4, -37, 69,
+ 12, 10, 20, 22, -30, -16, 9, -23, -10, 34, -8, -3, 47, -66, 38, 48,
+ 34, -59, 49, -24, 10, 18, -48, -27, 10, -10, -33, -28, 83, -11, -25, 13,
+ -62, 62, 43, -78, -54, 24, -41, 39, -32, 50, -36, -3, -101, 91, -66, 74,
+ -80, 55, -62, 46, 6, -44, 42, 12, 13, -23, -42, -9, 38, -42, 25, 27,
+ -9, 47, 8, -2, -32, -15, -34, 11, -71, -1, 55, -58, -41, 24, 33, -4,
+ 17, 78, -99, 91, -40, -45, 33, 8, -37, 62, 15, 24, -44, 21, 17, 48,
+ -9, 1, -23, 32, -4, -30, -18, 28, 77, -47, 26, -70, -51, 35, -16, 23,
+ 9, 0, 52, 4, -8, 29, -21, 49, -5, -19, 44, 9, 54, -42, 20, -17,
+ 12, 21, -42, -10, -73, 40, 20, -4, 11, -12, 28, 48, -8, -21, -22, 21,
+ 24, -29, 39, 1, 57, 47, -24, 4, -56, 84, -71, 64, -68, 54, 10, -29,
+ 11, -2, -62, 40, 7, -25, 26, -41, -52, 32, -21, -16, 70, 33, -59, 66,
+ -70, 38, -37, -36, 44, -22, 12, 35, -7, 53, -9, 20, 48, -57, 57, -49,
+ 45, -43, -2, -39, -3, 63, -55, 14, 0, -48, 51, 8, -18, -38, -8, -19,
+ 74, 10, -19, -14, 63, 19, 55, -12, 42, -21, -10, 14, 23, -61, 95, -31,
+ -7, -34, -13, 52, -98, 66, -30, 5, -26, -3, -48, 25, 2, 0, 46, -35,
+ 78, -52, 15, 31, -29, 37, -10, -22, -52, 34, 18, -9, -8, 61, -38, -35,
+ -50, 54, -55, -37, 14, -15, 31, 37, 13, 39, -22, 2, -19, -20, 28, -77,
+ 25, 19, -24, 0, -10, 20, 5, 41, -38, -3, 39, -38, -50, 35, -25, 0,
+ 5, -41, -25, 81, 39, -24, 56, 12, -18, 2, -48, 26, 76, -62, -41, 40,
+ 42, 1, -17, -21, -49, 51, 5, -22, -46, 17, 30, 11, -81, 38, 11, 14,
+ -41, -36, -6, 26, 30, -9, -25, 42, 47, -2, 4, 29, 19, 29, -25, 2,
+ -46, 15, 4, -28, 15, -17, 40, -4, 16, 12, -53, 45, -56, 68, -60, -19,
+ -45, 85, -72, 63, -31, 20, 57, -48, -69, 0, 41, 21, -3, -7, -53, 59,
+ -57, 15, -77, 25, 58, -54, -4, 19, 11, 2, -38, 56, -65, 51, -30, 32,
+ -2, -24, -8, 33, 78, -73, 17, 7, 3, 25, -8, -25, -6, 41, 55, -28,
+ 1, -9, -34, -5, -48, 25, -79, 72, -68, -2, 52, -16, 7, -24, 6, -53,
+ 9, 3, 50, 28, -67, 67, -27, 62, 32, -18, -38, 82, -94, -33, -6, 12,
+ -20, -2, 35, 40, -72, 56, 0, -37, 16, -27, 30, 19, 17, -57, 39, -40,
+ 36, 54, -67, 61, -8, -13, 61, -61, 46, 58, -44, -29, -7, 47, 0, -8,
+ -58, -24, 94, -35, -54, -5, -49, -12, 2, 49, -52, 23, -73, -5, -76, 22,
+ 78, -50, 34, -27, 64, -38, 25, 17, -8, 50, 6, 4, 0, -56, 63, -3,
+ -31, 63, 0, 10, -29, 48, -64, -12, 68, -49, 40, 31, 11, -96, 56, 32,
+ -23, 5, -33, 68, 17, 26, -22, -58, 42, -78, 48, -22, 14, 45, 18, 33,
+ 22, -23, 2, -6, 3, -1, 33, -62, 72, 14, -61, 53, 13, 34, -53, 47,
+ -22, 10, 21, -78, 1, -37, 1, -45, 15, -4, 32, 44, -59, 11, 72, -33,
+ -41, -19, 15, -12, 75, -74, 30, 12, 75, -68, 9, -13, 65, 18, -23, -23,
+ -32, 92, -47, 10, -78, 60, 17, 10, -51, -6, -11, 23, -60, -25, 50, -76,
+ 62, -24, 10, 5, -4, 1, -3, 4, 37, -54, -34, 6, 51, -54, 39, 61,
+ -4, -60, 26, -11, -44, -8, -37, 17, 56, 59, -94, 90, -37, 97, -21, -29,
+ -5, 61, 64, -69, 6, -15, 29, -50, -3, 17, 51, -69, 88, -10, -7, -11,
+ 20, 20, 31, 11, -84, 64, 13, -4, 20, -75, 89, -48, -19, -25, -20, 29,
+ -22, -24, 21, 9, 29, -36, 47, 18, 29, 13, -56, 58, -42, 35, -45, 44,
+ 37, 5, -47, -78, 42, -70, 44, -42, -48, 34, -13, -33, 87, -11, 57, -80,
+ 66, -22, 23, -51, 33, 13, -19, 8, -46, 26, -30, -57, 46, -55, 50, 44,
+ -58, -33, 30, 6, -34, 31, -98, 54, -39, -16, -15, 24, -28, -47, 6, 67,
+ 31, -26, -36, -39, 52, 12, 13, 28, 28, -32, 65, 12, 48, 57, 1, 71,
+ -78, 7, 5, 26, -100, 52, -18, 6, -39, -2, 49, -56, 47, 0, -16, -21,
+ -2, -37, -26, -53, 35, -30, 37, 36, -59, 39, -22, -75, 18, 85, -79, 45,
+ -56, 37, 0, -40, -23, 23, 25, 18, 4, 14, 44, -19, -46, -40, -11, -28,
+ -11, 26, 17, -28, -8, -3, -53, 67, -56, -14, 78, -62, -1, 30, 11, 22,
+ 26, -40, 29, 49, -34, 35, -11, 56, -19, 6, -71, 2, 24, 28, -52, -2,
+ 18, 36, -9, 74, -67, 37, 8, 5, -50, 34, 3, 16, -40, -6, -28, 57,
+ 10, -55, 46, 3, 66, -62, 25, -48, 40, -3, 44, -29, -6, 56, -10, 73,
+ -7, -50, 55, -18, 43, 5, -5, -32, -59, 58, 32, 7, -82, 79, -78, 31,
+ -85, 114, -73, 90, -52, 96, -24, -51, 9, -82, 44, -52, -57, -34, -41, 38,
+ 12, -78, -11, 1, 22, 16, -10, 27, 8, -22, -39, 25, -80, -4, -49, -25,
+ -33, -15, -76, 17, -15, -34, -2, 34, -18, -10, -46, 21, 18, -24, -35, -21,
+ -12, 21, 0, 39, -27, -23, 0, 17, -30, 32, -53, 33, -38, -37, 22, -41,
+ -16, -4, 55, 29, 54, 17, 42, -23, 67, 11, 18, -11, -79, 47, -4, 14,
+ -20, -29, 3, 55, 0, -57, 1, 39, 23, -20, -22, 54, -25, 67, -41, -37,
+ 35, -28, 59, -44, 49, -6, 57, 13, 13, 61, -38, 35, 2, 53, -54, -36,
+ -46, 3, 45, -6, 1, -56, -28, -36, -6, 14, -38, -30, -18, -34, -8, -69,
+ 75, -41, 20, -15, 79, -28, -33, 31, -1, 38, -63, 71, -48, 10, -30, -18,
+ 46, 15, 39, -5, 24, 38, -11, -43, -9, 44, -45, 91, -53, 16, -60, 68,
+ 22, 2, -27, 57, -62, 49, -57, -2, -30, 14, -27, -10, 59, -24, 28, 54,
+ -40, 38, -57, 77, -25, 64, -37, -63, 37, 7, -43, 0, 4, -68, 84, -89,
+ 25, -27, 14, 47, -90, 64, -20, -15, -20, 25, 68, -12, -40, 29, -43, 16,
+ -4, -6, -11, -43, -2, 10, -21, -20, 0, -6, -30, -10, 27, -36, 19, -19,
+ 23, -23, -35, 30, -64, 64, -80, 60, -25, 48, -95, 79, 8, -39, 0, -80,
+ 18, 53, -67, 82, -62, 13, -38, 35, 40, -6, -32, 7, 19, -25, 60, -48,
+ 85, -108, 112, -111, 81, -117, 51, 0, 51, 42, -2, 23, 67, 56, 1, -14,
+ -1, 39, -28, 43, -61, 35, -26, 55, -74, 45, -37, 13, 42, 17, 55, 28,
+ 41, 36, 24, 24, 18, 3, -38, 32, -58, 74, -12, -19, 25, 49, 62, -24,
+ 51, 0, -48, 64, -65, 24, 12, -33, -31, 42, 27, -81, 59, 27, 43, 39,
+ 4, -12, -15, -17, -40, -45, -45, 21, -65, 13, 5, 65, 8, 3, -23, -44,
+ 64, 14, -47, -68, -20, 72, -45, -12, 13, 55, -11, 15, 11, -37, 25, -54,
+ 84, -57, -31, 68, -67, 25, -31, 2, -36, -48, 3, 6, 9, 16, 54, 20,
+ -21, 74, -25, -15, 28, 2, 62, 12, -10, -18, -1, -55, 49, 54, -49, 74,
+ -78, 12, 6, -2, -65, 84, 22, -27, -35, -66, 29, -25, 8, 34, -40, 77,
+ -32, -2, -5, -5, -28, -36, 40, -12, 48, -52, 11, -5, -44, 72, -6, -40,
+ -31, 41, 2, -23, 57, -64, 11, 63, -34, -17, 7, 36, -3, -1, 54, -60,
+ -36, -9, 4, -69, 53, -55, 50, 43, 24, 0, 17, -54, -2, 37, -73, 36,
+ -13, 55, -72, 0, 50, -8, -6, -33, 28, 24, -103, 31, -34, 61, 36, -5,
+ -4, -19, 53, -51, 19, 38, -34, 48, -28, 39, -9, 43, -27, 41, 15, -55,
+ 6, 31, 28, 8, -37, 33, 19, -72, 35, -12, 26, -70, 16, -31, -12, 64,
+ -22, -26, -5, -69, 76, -61, 53, -54, 34, -30, -28, -54, 70, 9, -53, 20,
+ -55, 67, -72, 36, 14, 51, -4, -23, -26, -57, 12, -78, 13, -101, 52, 61,
+ -47, 40, 8, 55, -53, 44, -62, 16, 32, -60, 54, -9, 8, 29, -47, -38,
+ 39, -63, 31, -47, 59, -42, 79, -37, 47, -9, 22, -29, 26, -21, -72, 56,
+ -35, -44, 51, -55, 24, 21, 48, -26, -30, 10, 17, 39, 14, -64, -63, -10,
+ -57, 36, 53, -24, -23, 61, 35, -40, 62, -51, -16, -54, -8, -25, 46, 19,
+ -36, 8, 59, 88, -31, 41, -22, 0, 21, -62, 2, -15, -21, -19, 34, 7,
+ -74, 58, 19, -44, 61, -52, 3, -6, -3, 45, -40, 20, -54, -43, -30, 1,
+ 13, -58, -6, 45, 1, -7, -14, 4, 33, 28, 42, 68, -98, 22, -20, -37,
+ 27, 32, -1, -10, -8, -69, 10, -26, 47, 42, 31, -6, 55, -58, -28, 17,
+ -21, 26, 7, -8, -38, 58, -17, 17, -17, 6, 27, 30, -4, -35, -62, 95,
+ -73, 51, -18, -45, 11, 59, -20, -41, 35, 16, -42, 8, 13, -42, -69, 55,
+ 46, 0, 34, 31, -33, 24, 19, -65, -28, -14, 21, 30, 12, 41, 29, 3,
+ 15, -83, 76, -72, 42, -44, 29, -25, 5, -28, 99, -49, 59, -87, -54, 0,
+ 10, -50, -16, 58, 9, -36, -19, -63, 83, -95, 34, -2, -41, 32, -29, 32,
+ 12, -23, -63, -8, 31, 4, 39, 10, -11, 24, 24, -16, 51, -7, 59, -46,
+ 46, -33, -4, 21, -1, -1, -7, -16, 19, -34, 76, 32, -58, 24, 6, 13,
+ 31, 6, -19, 33, -20, -89, 74, -12, 49, 7, 60, 24, -20, 85, -50, -43,
+ -56, 13, 0, 12, -13, -32, 56, 0, -8, 51, -42, 24, -59, 55, -26, -23,
+ 1, -21, 9, 5, -44, 15, -44, 0, -13, -8, -74, 48, -53, -24, 77, -75,
+ 46, -23, 2, 23, -27, 0, -44, 59, -55, 54, -41, -15, 11, 36, 29, 44,
+ 65, -69, 15, -45, 39, -7, -22, -37, -37, 4, 61, -28, 47, -1, -5, -44,
+ 71, -75, -49, -53, -16, 19, -48, 39, -39, 50, -47, 72, -64, 36, 51, -54,
+ 98, -33, -44, 45, -64, 41, 32, -29, -23, 38, -2, 67, -21, 90, -6, -39,
+ 70, -26, 10, -28, 55, 25, -52, -12, -33, -14, -35, -24, 59, 53, -27, 63,
+ -60, 31, 8, 16, 3, 28, 10, 45, -37, -27, 4, -2, -57, 60, 13, -45,
+ 1, -45, 15, -38, 45, -17, -18, 50, 4, 11, -48, -2, -21, 33, -7, 30,
+ 10, -48, -19, 47, -10, -73, 40, 46, -32, -11, -22, 6, -52, 71, 12, 12,
+ -72, -30, 39, 0, 15, -46, 36, -7, 39, 9, 53, -46, 4, -24, -82, 46,
+ -3, 0, 20, 65, -35, 0, 20, 22, 21, 60, -70, -28, 39, 40, 32, 24,
+ 38, 1, 8, -52, 28, -24, 72, 26, -38, 62, 7, 23, -27, -60, 48, 13,
+ -37, 51, 28, 44, -51, -26, 0, -39, -23, 29, -29, -15, -32, 52, -91, 20,
+ -6, 14, 62, -36, -39, 38, 53, -21, 2, 63, -71, 38, -38, -35, -6, -20,
+ 32, -44, 0, -50, -2, 70, -84, 37, -35, 14, -76, 73, -32, -30, -3, 38,
+ 77, -26, -28, -26, -16, -7, -27, 45, -74, 4, 29, -43, 66, -59, 35, 38,
+ -38, 38, -17, 18, -13, 29, 35, -42, -13, 20, 61, -14, 60, -11, -39, 36,
+ 25, -10, 11, 28, 14, -41, 32, -5, 56, -71, 40, -6, -41, -18, -72, 8,
+ -76, 61, -61, 42, -15, 38, 25, 73, -6, 20, -24, 20, -59, 72, -79, 73,
+ -38, 72, 14, 44, 41, -58, 25, 5, -8, 13, -30, 16, 62, -29, -41, -32,
+ -42, -8, 35, 19, -8, 5, 12, 43, -7, -19, -51, -2, -59, -20, -35, 45,
+ -51, 69, -16, -41, -53, -55, 60, -6, 36, -25, -12, -4, -35, -39, 0, -8,
+ 56, -58, -7, -66, 80, -104, 85, -66, 20, -23, 45, -8, -13, 2, 34, -10,
+ 59, -8, 13, 21, -28, 13, -2, -62, 7, -26, 1, 58, 1, 31, -24, 2,
+ -52, 67, -35, 28, 33, 24, -29, -16, 21, 45, 6, 41, 21, -23, -6, -14,
+ 95, -56, -12, -1, 23, 3, 0, -70, 2, 23, -76, -14, 30, 11, 43, 8,
+ -11, -33, 9, -60, 19, 0, -4, -58, 17, -95, 117, -65, 18, -31, -16, 7,
+ -9, -7, 42, 36, 29, -25, -61, 31, -24, -81, 49, 2, 23, 22, 21, -68,
+ 91, -82, -28, -18, 28, 31, 10, -16, 68, -23, -13, -13, 54, -32, 93, -18,
+ -36, 67, -92, 88, -23, -16, -13, -15, -10, 17, -43, 85, -22, 33, 71, -53,
+ 63, -25, 40, 12, 79, -77, 63, 9, 7, -47, 8, -43, 35, -25, 23, 25,
+ -92, 28, 21, -49, 76, -61, 38, -27, 58, 16, -10, -30, 12, -16, -17, -33,
+ -2, 0, 47, -20, 25, 3, -40, 1, 48, -43, 24, -46, -3, -45, 56, -14,
+ -65, 0, 43, -89, 48, -25, -30, 11, -67, 51, 24, 6, 41, 29, 47, -17,
+ 35, -17, 39, -2, 3, -26, -35, -51, -12, 27, 13, -39, -9, 2, 43, -20,
+ -52, -12, -62, 21, 0, 24, -15, 62, -31, -23, 34, -21, -67, 19, 45, 36,
+ -22, 69, -46, 43, -68, 40, -73, 33, -42, 5, 63, -11, 74, -23, 58, -54,
+ -19, -64, 42, 30, 64, -6, 46, -44, 27, -24, 11, 19, 69, 2, 24, -23,
+ -34, 45, 39, 8, -44, 92, -88, 43, 1, -30, -37, 7, 8, 48, -51, 44,
+ -79, -3, -9, 39, 16, -26, -28, 20, 13, 46, -58, 10, -63, 1, 39, 1,
+ -20, 14, 29, -39, 15, -58, 7, -7, -24, -35, -20, 16, -89, 74, -29, -31,
+ -39, 90, -58, -7, -32, -28, 12, 48, 14, -3, -5, 77, -51, -30, -25, -21,
+ 43, -43, 52, 17, -32, 52, -2, 18, -41, 85, -73, 1, 57, -32, 0, -32,
+ -33, -7, -42, -33, -34, 37, -16, -7, -10, 80, -68, 15, -63, 50, -64, 11,
+ -56, 86, 23, -30, 71, -89, 32, -41, -61, 64, -37, 88, -104, 56, -82, 0,
+ -48, -6, 23, -17, -7, -49, 59, 20, -42, 6, -10, -37, -48, -5, 0, -47,
+ -5, -53, 12, -42, -34, -8, 0, -39, 45, 23, -48, 83, -15, 8, -21, -24,
+ 31, 32, 14, 14, 12, 45, 8, -27, -47, 34, -36, 7, -13, 61, -38, 40,
+ 11, 38, -49, -51, 59, -16, 6, 44, -55, 22, 5, -10, 29, 1, 17, 0,
+ 45, 39, -49, 29, -6, 24, 31, 12, 35, -41, -46, -53, 56, -65, 9, 11,
+ -45, 62, 25, -47, 5, 0, -21, 50, 43, -1, -65, 73, 6, -42, 6, -39,
+ 56, 22, 62, -16, -15, 7, -46, -49, 74, -33, -29, 42, 37, -45, -14, 40,
+ -57, -6, -33, 22, 45, -32, 0, 6, 54, -14, -21, -38, -28, 43, -8, 0,
+ 50, 8, 47, -41, 0, -45, 13, -25, 1, 31, 43, -65, -45, -4, -46, -31,
+ 60, -90, 53, -35, 11, -54, 111, -76, 40, -13, 30, -24, -9, -53, 86, -66,
+ 65, 21, -4, -70, 46, 30, 3, -17, 37, -53, -15, 37, 19, -6, -46, 10,
+ 40, -56, 21, 40, -44, 71, -31, -1, -4, 33, 14, 19, 49, -39, 38, 40,
+ 6, -62, 99, -50, 107, -30, 0, 12, -27, 9, 16, -24, -20, 75, 22, 7,
+ 40, -25, 15, -39, -23, 23, -49, 7, -50, 35, -14, -20, -34, 54, 15, -10,
+ 66, 20, 4, 40, 11, 21, 22, -6, 28, -45, 27, 42, -1, -15, 42, 7,
+ -41, -33, -10, -1, -63, 54, 38, -18, 65, -85, 22, -72, 107, -61, 27, 33,
+ 52, -80, 41, 39, -55, 80, -41, 33, -3, -31, 41, 37, 32, 28, -50, 55,
+ 19, 44, -35, 87, 32, -36, 0, 33, -55, 50, 24, -43, -42, 14, -33, 69,
+ -43, -44, 48, -45, 63, -59, 2, 0, -17, 29, 58, -56, 26, -72, 95, -57,
+ 40, -46, 6, 34, -50, 28, -63, 28, -20, 0, 5, -22, 39, 41, -12, -27,
+ -36, -27, 19, 55, -56, 47, -78, 9, 16, -44, 97, -16, -46, 58, -8, 45,
+ -50, -70, -14, -7, 24, 23, -50, -23, -37, 28, 50, -57, 42, -29, 15, 28,
+ 7, -75, 29, -80, 53, 20, 42, 43, -84, 29, 46, -81, 19, 44, -55, 45,
+ 0, 20, -28, -3, -51, -4, 30, -24, -44, 28, 22, 33, 62, -69, 39, -9,
+ -39, -3, -16, -55, 5, -10, 46, 3, -39, 31, -15, 54, -10, 67, -6, 84,
+ -54, 70, -46, 31, -2, 1, -66, 26, 46, 17, -7, 39, 43, -32, -20, -28,
+ -3, 20, -55, 104, -85, 58, -29, -24, 0, 58, 16, 3, 17, -12, 55, -41,
+ -6, -24, 17, -9, -5, 17, -21, 18, -1, 28, -44, -50, 20, -1, -12, -4,
+ -55, 22, -36, -38, -49, 30, -68, 20, -2, 47, -18, -13, -1, -62, -23, 1,
+ -56, 62, -47, 47, 14, -31, 48, 23, 19, 39, -60, 56, -28, -44, 50, -56,
+ 9, -51, -24, 21, 19, -24, 2, -6, -13, 53, -43, 23, -83, 77, -24, -30,
+ 68, 1, 63, 0, -37, 41, -13, -50, 56, 21, 45, -6, -41, 58, -33, 23,
+ 10, 41, -9, 1, -26, -30, -42, 70, -50, 25, -11, -74, 38, -53, 25, -21,
+ 35, -13, -22, -66, 0, 34, -15, 0, 33, -72, 16, 11, 58, -42, 18, -7,
+ 63, -61, 7, -21, -31, 30, -38, -28, 47, -24, -21, -6, 61, -27, -37, 24,
+ -1, -32, 67, -66, 39, 39, 4, -58, 62, 19, 9, 25, -57, -34, -17, 71,
+ -74, 63, -42, -42, 87, -48, 37, 42, 26, -32, -25, 12, -25, 34, -48, 31,
+ 27, 59, 34, -5, 35, -66, 60, 41, -48, 4, -9, -38, -4, 48, -68, 19,
+ -8, -10, 72, -22, -5, -8, -47, -48, 33, -1, -1, 65, 9, -76, 63, -70,
+ 71, -8, 34, 36, 19, -1, 6, 64, -22, -13, -63, 30, -65, 10, -6, 18,
+ 26, -26, 61, 39, 30, -17, -29, 26, -14, -25, 0, 9, -50, -73, 43, -77,
+ 27, -30, 54, -32, -56, 35, 3, -17, -79, 10, -43, -45, 15, -30, 48, -59,
+ 12, 32, -44, 5, -40, -43, 60, -34, -8, -42, 15, -30, -4, -41, 31, -43,
+ 72, -12, -14, 48, -70, 60, -40, -6, 0, -11, -15, 52, -3, -44, -34, -24,
+ 93, -42, 45, 40, -20, 16, 32, 23, -88, 29, -31, 10, 19, 32, -12, 0,
+ -56, 44, -29, -43, 24, 7, -26, 30, -12, 20, 23, -51, 39, 16, -12, 3,
+ 48, 0, 20, -13, -54, 28, -19, -8, -37, 13, 25, 55, 6, -34, 9, 32,
+ -73, 86, -110, 65, -9, -23, 33, -14, -34, -19, -7, -35, -15, -59, 74, -74,
+ 13, -40, 4, 18, 47, 50, -26, -37, -8, 24, 32, 75, -74, 16, 5, -12,
+ -26, 34, -49, 111, -72, 49, -55, 20, -63, 47, 25, -53, 14, -10, -29, -27,
+ 16, 37, -44, 46, 20, -50, 30, 44, 13, 3, 19, 50, -82, 22, -23, -12,
+ 53, -54, 3, -50, 54, -24, -35, 98, -108, 56, -85, 51, -23, 32, -49, 35,
+ 77, -69, 24, 4, -55, -22, -5, -88, 54, -53, 80, -2, 2, -50, -8, -4,
+ -42, -27, -21, -41, 23, 37, -69, 45, 27, -8, 34, 36, -2, 8, 14, -14,
+ 26, -31, -63, 62, -40, 1, 55, 39, -28, 29, 8, -46, -55, 59, -18, 3,
+ -11, -75, 20, -53, 30, 16, -32, 6, -78, 98, -13, 29, 39, -33, -16, 5,
+ -32, -20, -19, -21, 2, -27, -1, -21, 9, -30, 4, -48, 71, 41, -9, -40,
+ 66, -55, 17, 38, 28, 40, -60, 54, 39, 21, 12, 17, 23, 17, 21, 37,
+ 35, -26, 9, 8, 7, 22, 60, -79, 95, -3, -29, 70, -28, 84, -73, 10,
+ -74, 76, -55, 54, 7, -41, 31, -11, -20, -13, 23, -16, 31, 25, 41, 58,
+ -78, -19, 8, -5, 61, -30, 20, 30, 89, -73, 68, -49, 36, 24, -5, 76,
+ 16, 9, 14, 82, -66, 22, 4, -62, 41, -98, 53, 5, 19, -6, 19, 0,
+ -1, -47, 3, 6, 51, -36, 5, 38, -26, 15, -69, -19, -29, 29, -59, 46,
+ 1, -63, 57, -44, -15, 43, -37, -45, 83, -77, 72, 0, 50, 18, -24, -16,
+ 0, 38, -69, 30, -66, 29, -30, -25, 76, -60, 16, -82, 61, -17, 33, -74,
+ 49, -16, -22, -39, 11, 2, 24, 1, 51, -13, -62, 1, 79, -26, 50, 18,
+ -57, 37, -23, -20, 6, 21, 14, -51, 21, -66, 17, -22, 61, -18, 42, -29,
+ 6, 36, 13, -20, 29, -35, 50, -61, 24, 8, 0, 6, -22, 15, -15, -9,
+ -37, 33, 0, 0, 95, -51, 67, 37, -48, 40, -77, 26, 21, 64, -27, 32,
+ 17, 38, 52, -58, 67, -8, -16, -7, -29, -56, -35, 20, 0, -14, 43, -5,
+ 52, 12, -26, 43, 12, -31, -14, 17, 6, 6, -15, 4, 12, 10, 53, -72,
+ 29, 69, -32, 31, -35, 30, -74, 40, 38, -50, -11, -60, 34, -32, 32, -10,
+ 8, 26, 9, -29, 59, 14, 47, -2, 4, -1, 25, 62, -75, 12, 52, 2,
+ 28, -22, -23, -58, 40, -79, 93, -46, 0, -20, 31, -68, 23, -72, 39, -76,
+ 63, -68, -7, 13, 52, -28, -39, 43, -56, -15, 18, -39, -34, -23, 61, 25,
+ 18, -61, -20, 8, -52, 72, 15, 19, -6, -6, 21, 20, -13, -13, -89, 24,
+ 26, 7, -26, 16, -89, 65, -73, -41, -48, 17, -14, -5, 24, -53, -43, -29,
+ -16, -32, 11, -39, -26, 45, -51, 6, 27, 40, -44, 18, -37, 2, -60, 20,
+ 31, 29, -27, 36, -10, -34, 58, -25, 50, -57, 70, 9, -42, 44, 18, -39,
+ -43, 10, 22, -32, 54, 6, -1, 54, -23, 42, -61, 41, -94, 9, 0, 36,
+ 34, 29, 10, -3, -35, -12, 59, 35, -51, 32, -43, 43, -16, 7, 26, 38,
+ -33, 18, 71, -10, -5, 30, -26, -30, -20, 11, 75, -15, -81, 18, -83, 61,
+ -18, 51, -25, 20, -15, -22, -37, 34, 46, -29, -27, 31, -54, -11, -16, -5,
+ 50, -44, 43, -4, -30, -24, 11, 1, 27, -2, 52, 13, -15, -6, 36, 26,
+ -19, -54, 73, -62, -28, -48, 47, -61, 41, -55, 59, 3, -25, -39, -15, -22,
+ 22, -75, 20, 2, -45, -37, 44, -3, 30, 69, 15, -62, -1, -20, 1, -50,
+ -31, 1, -1, -39, 35, -54, 15, -58, -1, -34, 51, -11, -5, -63, 43, 43,
+ -76, 2, -13, -65, 70, -53, 58, 20, -41, 8, 68, -16, 22, -4, 8, 18,
+ 32, 36, -57, 42, -77, 13, 15, -55, 44, -34, 43, -58, 3, 32, -80, 23,
+ -27, -21, 57, -6, 24, 21, -92, 68, -33, -16, -12, 48, -25, 52, -34, -19,
+ 31, 3, 55, 10, -73, 6, 80, -52, -15, 62, -59, 48, 33, 5, -66, 36,
+ -2, 98, -44, 0, 40, -32, -32, 39, -33, 27, -49, 2, -24, 17, 77, -56,
+ -51, 30, 44, -16, 11, 35, 8, 28, 3, 5, -33, -67, 71, -31, 73, 17,
+ 9, -36, 41, 39, -5, -47, 47, -7, -7, 26, -29, -19, 41, -38, 10, 59,
+ -83, -9, -38, 34, -67, 70, -80, 30, -44, -19, 30, -39, 45, 6, 7, 72,
+ 38, -24, 49, -78, 24, -43, 17, -17, -29, 21, -3, 4, 79, -51, 72, -79,
+ 1, -60, 30, -7, 47, 2, -38, -56, 52, 53, -36, -5, -3, 31, -29, -6,
+ -12, -23, -8, -71, 77, -88, 32, -27, 71, -43, -48, 80, 1, 57, 32, 23,
+ -80, 4, -24, 40, -56, 42, 39, -74, -1, 61, 30, -41, 87, -35, 65, -41,
+ 17, -55, 9, 18, 6, -35, 68, -44, -11, -54, -55, 35, -29, -54, 28, -77,
+ 42, -49, 39, 8, 34, 7, 16, -46, 24, -4, -19, -4, 45, -27, 70, -21,
+ -3, -25, 40, 4, -18, 38, 7, -21, 23, -84, 0, 89, -30, -31, 51, 38,
+ -44, 62, -52, 74, -55, 57, 14, 56, -39, 4, -40, 53, 7, 8, -54, 55,
+ 0, 56, 2, 40, -11, 5, -5, -11, 22, -39, -22, 9, -12, 10, -55, 0,
+ -66, 3, 1, 13, -5, 0, -23, 12, 1, 20, -22, -22, 52, -20, 5, 4,
+ -8, 63, -37, -51, -30, 53, 3, 62, -50, -6, 12, -30, -5, -2, 35, 26,
+ -60, 9, -61, -7, 45, 13, -61, 12, -26, 5, 51, -31, -51, -45, 61, 2,
+ -42, -63, 42, 27, -35, -3, 19, -17, -22, 32, -14, 49, 7, -6, -28, 38,
+ 44, 16, -71, 21, -39, 8, -61, 5, 31, 31, 38, 94, -81, 35, -6, -50,
+ 55, -39, -10, 30, -62, 79, -88, 25, 17, 2, -4, 32, -44, 66, -35, -27,
+ 66, 0, 91, -104, 98, -71, 39, -2, 59, -34, 38, -61, -13, -6, -27, -76,
+ -15, -5, 24, 26, -17, 69, -45, 9, 0, -21, 22, 23, -22, -45, -25, 8,
+ 63, -34, -33, 19, -80, 60, 4, -20, -3, -31, -11, 54, 2, -48, 80, -73,
+ 77, 1, 29, 24, -10, 24, 53, -48, -27, 43, -47, -43, -62, -13, -39, 48,
+ 11, 38, -31, -3, 60, -99, 75, 2, 15, -45, -4, -29, 7, -37, -34, 13,
+ 15, 71, -47, -12, 37, -66, 44, -46, 55, 63, -25, 68, -52, 74, 13, 23,
+ 45, -25, -7, 2, -20, -36, 46, 3, 28, -59, 88, -44, -10, -65, 49, -79,
+ 55, 11, -6, -5, 54, -78, 55, -2, 54, -42, 41, -77, 1, 10, 51, -99,
+ 87, -64, 52, -66, 36, -45, 50, -39, 45, 28, 32, -73, 35, -34, -52, 34,
+ -81, 24, -71, 38, 18, -43, 19, -7, 3, 0, 25, 34, -49, 16, 39, 44,
+ 45, -4, -13, -20, 49, -67, 47, -17, 34, -27, 26, 3, -24, 26, -61, 30,
+ -48, -19, 13, 75, 29, -27, 4, -71, 98, -69, 30, 36, 8, -32, 50, -47,
+ 87, -59, 75, 35, -74, 18, -22, 51, 52, -70, 4, -7, 56, 43, -37, -10,
+ -6, 71, -45, -37, -21, 20, -11, -18, 19, 36, 41, -80, -27, 30, 10, -45,
+ 29, -55, 74, 17, 24, -58, 50, 9, -36, -12, -33, -54, 7, 30, -37, 19,
+ -28, -28, 23, -15, 28, 6, 51, -45, 9, 0, 1, -37, 5, 36, -13, 12,
+ -59, -19, -60, 59, -11, -35, 10, 41, -47, 45, 19, 15, 14, -10, -10, 83,
+ -44, 33, -6, -48, 46, -54, 31, -38, 43, 35, -8, -43, 51, 63, 28, -43,
+ -40, 16, 57, 11, 50, -29, 16, -1, 29, 42, -47, -69, 50, -3, -44, 8,
+ -23, 1, -11, -78, 16, 14, -41, 28, 35, 30, 48, 45, 77, -27, 63, -74,
+ -42, 17, 20, 38, -36, 50, -24, -54, -8, 19, -8, -25, 61, -33, 63, -40,
+ 34, -86, 24, -7, 33, 33, -65, 28, -1, -94, 42, -16, 4, -25, -6, -2,
+ -65, 33, 4, 28, -48, 48, -31, 14, -37, 51, -73, -2, 49, 10, -1, 24,
+ -13, 42, -81, -3, 13, -19, -31, -2, -46, 37, 33, 30, -13, 10, -46, 64,
+ -49, 63, -53, 33, 12, 52, -25, -50, 1, -44, -23, -15, 45, 29, 74, -34,
+ 89, -68, 96, -27, -30, -42, 60, 12, -55, 68, -71, 2, 8, -6, -87, 23,
+ -49, 0, -38, 28, 45, -38, 48, -15, 31, -87, 35, -39, 48, 8, 65, 1,
+ 36, 55, -33, -63, -17, -36, 17, 25, -85, 39, 13, -4, -58, 69, -71, -4,
+ -29, 9, -49, -33, 46, 23, 8, -64, 36, -19, 9, 45, -71, 21, 14, -60,
+ 11, 40, -59, 36, 28, 10, -35, -47, 30, -79, 18, 38, 61, -1, -26, -23,
+ 79, -51, -33, -9, 44, 35, -4, 20, -35, 4, 14, 25, -39, -29, 17, 23,
+ 61, 21, -49, 51, -40, 11, -95, 72, -10, -12, 9, 18, -53, 6, 9, -67,
+ 61, 45, -11, 0, 23, -27, 35, -87, 47, -59, 0, 31, 3, -44, 17, -22,
+ 35, 34, 4, -12, -28, 17, -48, 95, -109, 24, -25, -29, -4, -74, -8, -3,
+ 37, 37, -91, 28, -79, 33, 35, -65, -50, -30, 68, 23, -5, 25, -25, 2,
+ -6, 8, 20, 34, 45, -2, 30, -61, 23, -61, -25, -42, -62, 29, -40, 83,
+ -16, 7, 8, -1, -26, -16, 27, -8, 61, -1, -51, 24, 48, -61, -33, 15,
+ 13, 51, -47, 31, -24, 42, -4, 40, 13, 80, -99, 49, -32, 5, 35, -19,
+ 62, -22, -17, -21, 59, -1, -10, 31, -28, 26, 23, -37, 22, -17, 8, -22,
+ -27, 26, 65, 14, 5, 0, 45, -12, -28, 50, -65, 41, -58, 74, -13, -50,
+ -25, -4, 18, -17, -36, -52, -9, 33, 38, 8, 32, 32, -68, 0, -55, 25,
+ -44, -10, -63, 22, 17, 88, -50, -35, 68, -45, 35, 52, -49, 57, 64, 3,
+ -4, -7, 42, -12, -33, 55, -70, -24, -29, 58, 43, -1, 0, -31, -77, 18,
+ -56, -27, -15, 66, -32, 29, 58, -101, 85, -13, 52, -61, 16, 16, -12, 70,
+ -52, 14, 33, 2, -66, 24, 8, 4, 28, -22, 59, -79, 87, -65, 46, 53,
+ -4, -50, 55, -15, 38, 24, 15, 48, -18, 34, -52, -34, -58, 34, -57, 14,
+ -53, 36, 50, -54, -30, -16, -18, 9, 34, -30, 32, -22, 33, 10, 8, -72,
+ 33, -63, 32, 26, -29, 29, 33, 5, -77, 51, -1, -26, 30, 16, 22, 37,
+ -21, -28, 43, -17, 29, -8, 4, 28, 28, 3, -14, 2, -48, 57, 11, -21,
+ -36, -9, -39, -7, 42, 27, -35, -53, 55, 35, 12, 19, 57, 3, 39, -34,
+ 70, -57, 50, -3, 42, -22, 2, 38, 46, 45, -27, -72, 69, -68, -7, 66,
+ -18, -8, -12, -9, -38, -9, 30, -46, 36, -27, 70, -22, 47, -40, 16, -35,
+ -1, -11, -24, -16, 28, 42, -41, 10, -20, -11, 34, -42, -17, 66, 0, -30,
+ -43, 8, -17, -15, -20, -38, -8, 3, -39, -63, 79, 39, -2, -3, -54, 61,
+ -23, 20, -14, -15, -39, 9, 20, 44, -70, 45, -33, 44, 10, 3, -5, 35,
+ -18, -35, -54, 20, -59, 46, -59, 6, 75, -73, 10, -8, 3, -9, -49, 61,
+ 68, 4, -25, -26, 66, 60, -51, -35, 37, -32, 36, -56, 75, 7, -1, -6,
+ 62, -28, 54, 66, -45, -77, 36, -17, -64, 42, -46, 6, -26, 6, -43, -54,
+ 68, -38, -56, 75, -34, -40, 67, 35, -8, 2, -84, 29, -45, -30, 60, 39,
+ 4, 13, 40, 8, 28, -55, 28, 16, 24, -44, -60, 54, 22, -63, 70, -33,
+ 15, -49, -25, 43, 9, -40, 9, -40, -60, 21, 20, -10, -78, 44, -82, 18,
+ -45, 60, -71, 48, -92, -32, -6, 36, -20, 3, 75, -46, 68, 18, 35, 26,
+ -18, -13, -25, 37, 46, -66, 43, 3, 24, -3, 20, 41, -80, 70, 0, 2,
+ 17, 61, -39, 41, -48, -59, 50, 6, 40, 2, 36, 9, -20, 14, -75, 60,
+ -52, 38, -34, 14, -9, -27, 1, -26, 36, -11, -44, 57, -41, 15, -1, -24,
+ 10, 60, -45, 38, -22, 43, 3, 3, 1, -21, -32, 0, -72, 14, -43, -26,
+ -68, 30, 16, -17, 28, -10, -35, 6, -8, -46, -2, 71, -107, 101, -62, 3,
+ 16, -34, 8, 27, -66, 75, -86, 72, -46, 17, -15, -13, 36, 6, -33, 36,
+ 69, -40, 21, 40, -36, 3, -46, 34, 14, 26, 5, 44, -6, 1, -18, -11,
+ 60, 28, 37, 26, 37, -40, 37, 26, -28, 82, -92, -54, -14, -27, 71, -69,
+ 27, -47, 36, 10, 32, -75, 25, -57, 42, -39, -46, 2, -65, 3, 18, 27,
+ -32, 27, 64, -54, 84, -37, 54, -50, -45, 65, -46, 15, -60, 66, -5, -7,
+ -86, 9, -14, 36, -69, 5, 73, -49, -17, -31, 28, -26, 4, -30, -33, -27,
+ -59, 85, -70, -66, -7, 94, -58, 7, 64, -43, 89, -56, -8, -12, 42, -29,
+ 0, 16, 74, -98, 30, 53, -84, 3, 25, 0, 51, -29, 35, 35, -30, -83,
+ 37, -3, -56, -25, 2, -22, 55, -35, 2, 40, -24, 56, -70, 75, -111, 61,
+ 1, 64, 57, -54, 14, 25, 43, 27, -7, 61, -38, -3, 47, 32, 9, 38,
+ -30, 16, 37, 9, 52, 38, -19, -5, -5, 16, -63, 25, -14, -42, 26, -44,
+ -10, 17, 29, -60, 21, -4, 28, -68, 16, -52, 40, -48, 77, -58, -34, -17,
+ 54, -74, -31, 37, 62, 1, -40, -5, -61, 26, -63, -1, 44, 0, 55, -57,
+ -22, 17, -12, -3, 63, -55, 33, -2, -34, -25, 19, 36, -29, 50, -44, -6,
+ 36, -23, -34, 12, 37, -12, -55, 38, 40, -45, 19, 16, 43, -13, 56, 15,
+ 64, -63, -17, 23, -26, -10, -1, 4, -19, 65, -40, 24, 40, 15, -47, 32,
+ 52, -25, -24, 21, 20, -9, 48, -4, 28, -32, -16, -44, 19, -70, 76, -62,
+ -39, -5, -59, -5, 14, -11, 51, 28, -19, -49, 17, -79, 31, 3, 14, 54,
+ -53, -44, -12, -9, -1, 12, -66, 58, -23, -47, 88, 64, -21, 72, -62, 39,
+ -27, -12, 56, -16, -7, 56, -45, 36, 4, 37, 53, 16, 34, 12, -29, 11,
+ -13, 51, -59, -38, -32, -30, 55, 12, -19, 46, -26, 21, 19, 11, -45, 62,
+ 63, -40, 8, -8, 43, -8, -38, 45, 23, -19, 0, -46, 30, 28, 72, -15,
+ 62, -81, 17, 89, -25, -25, 6, 48, -9, -44, 8, -20, 35, 51, -51, 27,
+ 40, -12, -46, 89, -53, 16, 5, -5, 33, -101, 53, -17, 38, -9, 76, -4,
+ 40, -17, 63, -48, 85, -41, -53, 13, -18, 5, 16, -73, 4, 31, 47, -18,
+ -13, -64, -36, 4, 16, 35, -61, -22, 58, -69, -24, 37, 2, -59, 1, -27,
+ 49, -67, 14, 4, -52, 16, -88, 43, -34, 14, 18, 6, -12, 40, -78, 73,
+ 2, -20, 13, 28, -36, 5, 75, -32, 35, -25, -47, 6, -14, 6, 55, -72,
+ 38, 4, 40, -66, -73, 14, 40, 1, 6, 31, -65, 83, -61, -49, 18, 37,
+ 25, -17, -34, 0, 14, -59, 73, -13, -10, 43, -16, 3, -5, -25, 70, -57,
+ 46, 13, -30, 37, -64, -11, 6, 7, 4, -34, -3, 39, -33, -41, 4, 22,
+ -69, 84, -32, 82, -48, 21, -16, 13, -40, 48, -58, 26, -42, -47, 89, -100,
+ 34, -34, 50, 28, -13, -53, 4, -41, -22, 29, 72, 14, 26, 24, -54, 92,
+ 7, 16, 66, 30, -41, -3, -36, -16, -42, 9, 73, -21, -4, 28, -23, -41,
+ -12, -8, 55, -6, 9, -33, 12, -28, 26, -15, -83, 22, -66, -4, 9, 8,
+ -29, 22, -26, -35, 45, -33, 6, -1, 6, -21, -59, -1, -14, -22, -3, 0,
+ 36, -46, 56, 65, 24, 0, -15, -23, 52, -35, 36, -16, 22, -11, 12, -76,
+ 35, -1, -5, -4, -6, 27, -30, 13, -19, 1, 52, 1, 13, -30, -62, -14,
+ -18, 55, -16, -24, 0, 37, 9, -41, 12, -25, 53, -47, 32, -50, -6, 7,
+ -21, 13, -19, -16, -26, -25, 63, -17, 7, 85, -74, 23, -46, -36, -97, 71,
+ -85, 5, -55, 11, -62, 62, -1, 11, -18, -7, 30, 44, 1, -68, 19, -45,
+ 35, 38, 5, 34, -67, 16, -49, 78, -31, 8, 25, -7, -9, 20, 3, 42,
+ -84, 89, -41, -4, 27, 35, 58, 35, -55, 31, 7, 1, 17, -59, 90, -87,
+ 70, -1, -42, -61, 72, -43, -40, -30, 28, 12, 66, -44, 10, -4, 31, -5,
+ 14, -56, 29, 47, 55, -12, 19, -54, -4, -2, 56, -88, 40, 19, -38, 42,
+ -74, -23, 52, 39, -30, 73, -83, -34, 18, 46, -50, 60, -16, -14, -34, 38,
+ -37, -27, 30, 31, 25, 15, -42, -48, 49, 42, -78, 29, 3, 14, 22, -5,
+ 10, -24, -5, -53, 18, 12, -31, 77, -49, -13, 38, -2, 28, -14, -12, 74,
+ -9, -53, 42, -91, 3, 68, -39, 27, 51, -34, -46, -45, 4, -4, 12, -52,
+ -56, 70, -86, 0, -8, 20, -6, 15, 57, -32, -21, 16, -18, 31, -28, 28,
+ 34, -48, 28, -29, -64, 43, 27, 18, 18, 45, 45, -36, 52, 2, -2, 39,
+ -28, 23, -69, 67, -63, 34, -27, 36, -16, 29, 27, -20, -6, 53, 25, -35,
+ -44, 23, 0, -61, -22, -33, 58, -41, -39, 26, -14, 3, 56, -81, 12, 0,
+ 7, 6, -58, 6, 58, -51, 5, 18, -26, -33, 20, -52, 59, -4, 16, 40,
+ 13, 41, -43, 3, -61, 35, -18, -26, -27, 55, 10, -38, 86, -49, 31, -10,
+ 27, -4, -37, 30, 31, 25, -43, -61, 67, -95, 27, 32, 0, 69, 46, -12,
+ 46, 25, 11, 55, 34, -64, 44, 35, -73, 61, -96, 40, -4, 0, 1, 35,
+ -79, 57, -78, 61, 0, -18, 58, -63, -25, 23, -59, 70, -41, 37, -18, -20,
+ 65, -43, 4, 1, -28, -48, -58, -27, 74, -53, -10, 23, 0, 51, -76, 60,
+ -21, -53, 55, 73, -55, 67, -20, 57, -41, -15, -14, 8, -1, -60, 55, -81,
+ -18, -2, 5, 0, -56, -1, 60, -39, 54, -70, 48, -15, 51, 25, -42, 0,
+ 36, 35, -30, -48, 2, -21, 36, 62, -59, -3, -23, -9, 0, -30, 28, 31,
+ 0, -33, -20, 0, 0, -27, 69, -14, 5, -16, 68, -1, 13, -47, -39, -14,
+ 56, -36, 8, 36, -53, 8, 0, -47, 73, 4, 7, -25, 42, -40, -15, -33,
+ -6, 24, 19, 26, 20, -24, -21, -5, -32, -40, 89, 19, -46, 45, 38, -10,
+ 16, -21, 58, -16, 53, -51, 28, -19, 24, -25, -20, 11, -3, -51, 48, -18,
+ 38, -1, -5, 28, 45, 19, -31, -59, 41, -77, -9, 83, -67, 2, -34, -21,
+ 2, 22, 52, 8, -30, 21, -38, 32, 21, -39, 8, -48, 37, -74, 43, -27,
+ 33, -14, -43, 6, 82, -62, -12, 56, -2, -53, 53, -45, -18, 47, 34, -51,
+ 43, -7, 15, 43, -78, 77, -20, 36, 8, -32, 48, 46, -74, 28, -41, 13,
+ 8, -26, -46, 70, 5, 11, 6, 20, 48, -70, 44, -45, -42, 39, -62, 57,
+ -97, 53, 38, -77, 67, -45, 92, -19, -16, 75, -69, 23, -32, -21, -28, -41,
+ 19, -44, 51, -74, -26, -3, -14, 8, 27, -27, 29, -19, 42, 29, 4, -80,
+ 90, -46, -26, 21, -2, -74, 38, 34, 69, -59, 38, -30, -6, 43, -3, -21,
+ -24, 20, -26, -19, 59, 20, 56, -15, -46, 51, -40, -29, 13, -6, -12, -18,
+ 36, 18, -49, -27, 36, -71, 9, 2, -43, 51, 10, 9, 40, -25, 31, 78,
+ 53, -48, -2, -25, 89, -56, 26, -71, 64, 40, -18, 15, -47, -21, 68, -72,
+ 57, 13, 4, 11, 43, 1, 45, -104, 32, 15, 19, -27, 62, 0, -19, -19,
+ -9, 0, 59, -52, 43, -25, -32, 37, -38, 39, -75, 5, -44, 73, 25, -33,
+ 25, 38, -2, 0, 24, 8, 31, -48, -33, -25, 26, -41, 16, 24, 41, -14,
+ 4, -3, -54, 34, 6, 29, -15, 69, -39, 45, -38, -19, -13, 10, -32, -63,
+ 64, -65, 34, -47, 43, -20, -18, 78, -50, 61, -72, 60, -42, 82, -94, 64,
+ -56, -24, 41, -83, 55, -34, 3, -6, 52, -8, 1, -56, -19, 69, -51, 55,
+ 19, 16, -95, 40, -41, 30, 6, -19, -51, 54, -28, 45, 2, 6, -13, 29,
+ 13, -36, 57, 2, -35, 45, 32, -55, 7, 6, -17, 29, -25, 18, -20, 4,
+ -15, -18, 30, 2, -50, -13, 29, -42, -20, 10, -55, 9, 5, -8, -10, -42,
+ 50, -44, 94, -62, -61, 53, -51, 12, -62, 25, 35, -2, -1, -15, 36, 3,
+ 59, 12, -67, 66, -62, -21, -44, -19, 21, -77, 93, -65, 59, -12, 25, -4,
+ 4, -12, 9, 34, -44, 47, 39, -44, -16, 11, 7, 43, -69, -5, 0, 90,
+ -96, 38, 56, -53, 46, 44, -5, -6, -47, 8, 35, -63, 66, -89, 37, -5,
+ 37, -56, 59, 6, -97, 30, 13, -13, 21, 8, -15, 60, -62, 62, 8, -26,
+ 32, -25, 0, 23, -42, 84, -76, 54, 2, 13, 13, -63, 27, -60, 1, -88,
+ -15, 2, 39, -11, -60, -5, 33, 28, -54, -43, -19, -63, 48, 24, -41, 26,
+ -60, 22, -57, -7, 8, -64, 42, 36, 21, -20, 37, -65, 0, -27, -26, 64,
+ 0, 40, -84, 50, -63, 95, -18, 18, -50, 38, -24, 76, -45, -4, -47, -6,
+ -45, -21, 11, -8, -32, 24, -58, 77, 80, -52, -34, 44, -15, -11, 13, -51,
+ -26, 28, 35, -25, 26, -89, 43, -25, 36, -34, 26, 27, -10, 25, 49, 49,
+ -64, 37, -20, 33, -62, 0, 6, -85, 12, 8, 35, 20, 58, -91, 76, -98,
+ 79, 2, 9, 6, 23, -19, -17, -16, -28, 0, 45, 57, -45, 36, -8, -17,
+ -20, 40, 43, 13, -21, -43, 18, 18, 58, -49, 12, 12, -35, -19, 54, -68,
+ 68, -51, 12, 10, -27, -14, 0, 35, -35, 16, -9, -29, 32, -73, 62, -93,
+ 65, -11, 31, -60, 87, -56, 67, 12, -7, 8, -29, 13, 25, 20, 8, 60,
+ -53, -19, -16, 4, 81, -75, 106, -97, 81, -15, -11, 6, 15, -32, -13, 5,
+ -61, -14, 46, 24, -11, 55, 7, 38, -39, 79, -22, -39, 24, -41, -39, 65,
+ -24, 9, -24, -12, 55, -43, -9, 11, 4, 62, -73, -3, -31, 46, -61, -25,
+ 42, 16, -61, 0, 3, 29, -53, -21, 56, 7, -34, 12, 11, 21, -3, -13,
+ -37, 34, -25, 18, 82, -54, 1, 49, -65, 55, -23, -29, -13, -48, 5, -24,
+ -58, 41, -26, 38, -11, -19, 61, -61, -35, -31, -5, 29, -5, 47, 55, 19,
+ -14, -11, -34, 3, 26, 62, -42, 19, 15, 16, 60, 43, 16, 9, -44, 59,
+ -54, 37, -3, 29, -44, -26, 33, -64, -18, -37, 50, 27, 46, 32, -24, -5,
+ -36, 9, 27, 11, 5, -88, 5, -48, 53, -70, 54, -61, 9, 47, 65, 15,
+ 20, 2, -12, 28, 46, -78, 75, -89, -50, 40, 46, -50, 31, -43, 18, 45,
+ 29, -27, 4, -33, -12, 82, -80, 68, -55, -21, -50, 8, 50, -86, -4, -32,
+ 2, 42, -64, -11, 23, 50, -30, 80, -5, -53, -44, -32, -26, 44, 4, 57,
+ -79, 26, -44, -1, -27, 9, 12, 30, 14, -2, -52, 2, 4, -23, 74, -47,
+ 26, -81, 23, -76, 57, 60, -63, 31, -50, -4, 29, -52, 71, 0, -11, -43,
+ 60, -40, 4, -27, 37, 7, 29, -40, -29, 67, -2, 42, -16, 8, 14, 31,
+ -2, 17, -70, 50, -17, -14, -44, -2, -19, 43, 42, -1, -43, 49, -25, -7,
+ -11, 70, 27, -75, 14, -19, -48, 74, -6, -53, 64, -95, 57, 6, 39, 15,
+ 8, -35, -28, 21, -65, 25, -52, 25, 3, -61, -11, 55, 21, 30, -16, -22,
+ -1, 33, 0, -3, -48, 38, -49, 8, 49, -86, 48, 12, 17, 10, 9, -35,
+ 44, 0, 48, -48, 15, -74, 81, -68, -29, -44, 107, -86, 55, -61, -9, 23,
+ -39, 15, 11, -27, -3, -44, -8, 22, -33, -24, -25, 46, 56, 9, 32, 37,
+ 24, 3, 58, -70, 28, 34, -57, 59, 69, -57, 40, 16, -21, -36, -49, 11,
+ 60, 23, 41, 13, -50, -1, -23, -10, 1, -23, -78, -7, -41, -33, 0, 4,
+ 57, -60, 58, -8, 41, 55, -34, 38, 61, -42, 0, -63, -15, 1, 11, -26,
+ 12, -23, 13, -7, 21, 58, 44, -6, -21, 62, 23, -34, 51, -75, -59, 44,
+ -81, 62, -19, -73, 24, -4, 3, 21, 76, -72, 64, -47, 39, -35, 30, -60,
+ 51, -58, 39, 31, -24, -25, 54, -18, 21, 47, 39, -26, 4, 78, -64, 65,
+ 40, -51, 87, -18, 31, -17, -33, -1, 12, 69, 61, -14, -29, -21, -3, 45,
+ -10, -33, 28, 23, 34, 16, -40, -19, -30, 27, 12, -46, 34, 31, -86, 61,
+ -66, 100, -60, 79, -23, -29, 43, -34, 4, 0, 11, -5, 20, -36, 24, -29,
+ 4, 37, 19, -29, 0, 11, -22, 33, 18, -75, 45, -76, 28, 14, 26, -13,
+ 23, -75, 75, -30, 2, -5, 42, -11, 27, -19, -75, -22, 16, -25, 19, -46,
+ 20, -57, -18, 55, -8, 52, 27, -25, -42, 41, -33, 69, -23, -16, 36, -39,
+ 10, 17, 2, -1, 80, -18, -3, 7, 11, 15, -32, -30, 10, -29, 18, -16,
+ 12, 53, -63, 5, 53, 31, 5, 35, -23, -17, 42, -3, 3, -11, 57, -66,
+ -38, -13, 38, -74, 99, -66, 46, 41, 54, -32, -36, -5, 17, 44, 41, -32,
+ 34, 1, 29, -4, 9, 33, 39, -92, 81, -16, 40, 7, -83, 29, 18, -48,
+ -36, -3, -19, -33, 37, -12, -39, -28, -13, -28, 45, -57, 3, 18, 37, -74,
+ -15, -7, 25, -33, 19, 3, -3, -33, 8, 35, 51, 26, 0, 48, -63, 70,
+ -56, 13, -28, -46, 27, -84, 36, -43, -1, 15, 2, 58, -10, -26, 24, -5,
+ 35, -10, 68, -86, 54, -85, -18, 25, -36, -37, -10, 16, 43, -7, 40, -37,
+ 72, -5, -12, 50, 19, 5, 36, -51, -44, 4, -49, 0, 0, 64, -65, 17,
+ -35, 59, -16, -6, -47, 34, 11, -58, -33, -66, 59, -55, 35, -41, -5, 5,
+ -75, 47, -91, 43, -51, 97, -70, 58, -44, -66, -86, 61, 70, -42, -15, -55,
+ 46, 27, -2, -69, 31, -10, -18, 72, -39, 34, 46, -33, 13, -13, 25, 0,
+ -33, 47, -31, -12, 33, -18, -57, 96, -25, -36, 69, -51, -17, -9, 20, -2,
+ -73, 76, -47, 64, -31, 6, 6, 21, -26, 25, 18, 12, 34, -17, -78, 30,
+ 57, -12, -7, 27, -19, -9, -5, 14, 13, -15, 67, 50, 2, -1, -48, 51,
+ -29, 8, -5, -35, 65, -68, 3, -21, 51, -79, 85, -49, 2, -32, 0, -5,
+ -21, 8, 47, 23, -90, 19, -21, 21, 68, -51, 39, 7, 8, 52, 1, -54,
+ 33, -64, 52, -3, -39, -79, 32, 11, -59, 57, -57, 3, 19, -40, 1, 60,
+ 34, -6, -7, 74, -78, 58, -5, -49, -21, 9, 48, 39, -40, -11, -78, 60,
+ -25, 43, -33, 6, 44, -55, -12, 51, 2, -16, -32, -3, 45, -70, 1, 22,
+ 10, 50, 0, 13, 12, -64, 35, 60, 9, 18, 0, 59, -95, 55, 18, 22,
+ 47, -36, -35, 18, -46, 7, -21, 63, 24, 5, -46, 6, 17, 18, -7, -20,
+ 0, 58, -32, -8, 51, 60, -50, 21, 16, -49, 13, 3, -59, -22, 51, -2,
+ 1, -48, -40, 24, -7, 39, -5, 16, -23, 80, -37, -19, 3, -20, 13, -29,
+ -51, 34, -21, -70, -3, -2, -18, 50, 6, 72, -41, 51, -22, -3, 16, 40,
+ -35, 5, -3, -32, 10, 47, -24, 62, 38, 65, -57, 38, -53, 53, 0, 6,
+ -11, 53, -5, 28, 16, -87, 61, -78, 77, 62, 76, -48, -16, -17, 94, -31,
+ 25, -50, 36, 6, 15, -37, -2, -57, 86, -65, 12, -40, -43, -18, 27, 5,
+ -30, -37, -33, 52, -72, 23, 31, -93, 23, 0, -42, 32, 49, -20, -20, 8,
+ 64, -45, -4, -22, 4, -16, -15, -32, 50, -66, 6, -9, -9, -59, 70, -20,
+ -39, -31, -21, -16, 35, 39, -11, 3, -17, 27, -30, -57, 40, -27, 49, 13,
+ 25, 39, 11, 64, -67, 13, -35, 44, -35, 33, -49, 18, 26, -6, -59, 46,
+ -4, -13, -29, -60, 84, -16, 3, -30, -89, 38, -31, 49, -52, -30, -4, 63,
+ -57, -19, 20, -34, 16, 98, -79, 49, -8, -5, 4, -40, 56, -26, 43, -81,
+ 15, 37, -78, 6, -45, -5, 33, -25, -2, -18, -43, 21, 2, 30, -12, 40,
+ -64, -1, -64, 19, -12, -9, -3, 13, -24, -1, 45, -72, 66, 20, -47, 14,
+ -11, -26, -38, 20, 27, 24, 14, -77, -16, -51, 44, 8, 74, -60, 25, -92,
+ -5, -6, -13, 50, 6, 26, 32, -79, -16, 16, -21, 31, -31, 24, -48, 35,
+ 9, -56, -14, 36, -57, -57, 61, -20, -39, 42, -27, -22, 81, 27, -50, 49,
+ -49, 40, 5, 15, -4, -34, 70, -83, 91, -91, 50, -47, 6, -16, 27, -50,
+ 70, -81, 69, 71, -38, 35, -43, 14, -22, -44, 38, -32, -18, -37, -49, -1,
+ 21, 27, -5, 22, -34, 1, 4, -80, 5, -59, 18, -53, 75, -62, -1, 3,
+ -16, 2, -29, 5, -64, 73, -41, 62, -44, -62, -74, 43, -28, -9, -82, 57,
+ 39, 13, -16, -21, -51, 94, -34, 62, -85, 12, 40, 54, 53, 3, 0, -62,
+ 72, 33, 8, -48, 50, 30, 10, 44, 0, 42, -42, 66, -72, 10, 26, 63,
+ -88, -9, -28, -5, -10, 8, 76, -26, -48, 88, -82, 72, -32, 7, 37, -20,
+ 23, 14, 24, -30, -19, -3, -29, -10, -27, 25, -38, -32, 25, 51, -31, -50,
+ -60, 0, -28, -69, 74, -43, -14, 63, -50, 6, 32, 15, -51, 49, 46, 29,
+ -39, 12, -35, 43, 29, -62, 24, 49, 30, 49, -57, 27, 35, -25, -1, 12,
+ 12, 39, 43, 28, -37, -43, 24, -55, 59, -37, 53, -24, -44, -6, 30, 14,
+ -72, 26, 48, -2, 56, -17, 4, 23, -1, 70, -20, -24, -21, 35, 42, -64,
+ 51, 27, 9, 47, -49, 18, -42, 49, -24, 10, 13, 25, -43, -15, 56, -20,
+ -12, 51, -43, -12, -34, 21, 34, 34, 34, -14, -33, -7, -82, 75, -51, 75,
+ -19, 61, 24, 23, -66, 47, -39, 20, 34, -10, 0, -15, -17, -27, 14, -41,
+ 54, 7, 41, -10, 11, 45, -10, -17, 85, -21, 36, -26, -47, 28, -42, -59,
+ 58, 7, -26, 33, 35, -50, 19, -5, -38, 42, -18, 8, 48, 25, 30, 36,
+ -27, 36, -44, -59, 16, 44, -15, 13, -30, 82, -16, 30, 51, 36, 52, 18,
+ 16, -44, 20, -21, 36, -59, 44, 19, 58, 3, -6, 60, -45, 0, 34, 49,
+ -48, -29, 66, -8, 79, -23, -28, -27, 2, 45, 67, -48, 14, 10, 58, -65,
+ -52, 7, 12, 5, 12, -49, -13, -2, 18, 39, -28, -73, -18, -26, 88, -16,
+ -20, 13, 41, -9, -22, -65, -2, -16, 21, -41, 35, -27, -17, 30, -33, -51,
+ 86, 34, 47, 37, -41, 6, -65, 61, -38, 9, 58, -62, 48, 16, -16, -39,
+ 42, -19, -18, 42, -3, -46, 55, -25, 36, -30, 41, 38, 37, -89, -31, 56,
+ 78, -41, 4, 62, -51, 39, 30, -23, -17, 5, 24, -62, 36, -57, -11, -37,
+ 27, 70, -23, -5, -40, 63, -35, 17, -72, -48, 68, -55, -42, 56, 68, -99,
+ 65, -39, -70, -9, -26, 69, 21, -14, 14, -11, 18, -52, 37, 73, -27, -26,
+ 74, -19, -44, 64, -90, 57, -7, -30, -61, 11, 6, -1, 12, -17, -16, -11,
+ 35, -52, 8, 47, -23, 7, -34, 22, -10, 12, 28, -61, 26, 61, -32, 10,
+ -30, 33, 12, 14, 21, -7, -80, 24, 17, -6, -5, -25, 70, -25, -7, -12,
+ 48, -97, -8, -65, 14, 1, 11, 32, -62, 11, -18, -24, 10, 12, 5, 47,
+ -17, -40, 27, -27, 1, 2, -30, -3, -59, -10, 1, -45, 69, 33, -8, 48,
+ -91, 57, 7, -42, -18, -7, -34, 21, 42, -23, 57, -49, -42, 6, -62, 0,
+ -3, -5, 79, -18, 8, -58, 9, 3, 1, -84, 17, -38, -49, -22, -52, -8,
+ -57, 60, -27, 27, -79, 71, -52, 55, -61, -25, -13, 0, 48, -18, -19, -23,
+ 74, -56, 23, -26, -39, -29, 55, 21, -12, -22, 43, -33, 3, 29, -11, 10,
+ 34, -24, -28, 11, 42, 15, 60, -48, 56, -93, 61, 38, -1, -34, -41, -1,
+ -23, 5, -15, -49, 52, -20, 89, -63, 33, 27, 6, -37, 73, -77, 71, 4,
+ -37, -34, -1, -67, 84, -41, 26, 46, -43, -14, -11, 14, -26, -18, 48, 9,
+ -33, 10, 32, 30, 10, 46, -71, 50, 12, 23, -50, 0, -27, 56, 36, -8,
+ -77, -25, 15, 34, 0, -45, 15, -5, -17, 77, -88, 95, -52, 65, -3, 10,
+ -38, -31, 2, -13, -16, -5, 22, 9, 52, 36, -63, 22, 50, -55, -73, 78,
+ -45, 56, 17, 55, -38, -16, -32, 46, -43, -18, 5, 40, -33, -54, -16, -2,
+ -24, 20, 10, -41, 88, -96, 62, 39, 73, -69, -3, 18, -39, -1, 6, 19,
+ -56, 90, -69, -24, 0, 5, 47, -36, 40, 2, -55, 73, -35, -36, -26, 46,
+ 5, 3, -62, 35, 27, -62, 47, 11, -79, 80, -33, 20, -28, 5, 25, -21,
+ -7, 67, 21, 70, -45, 10, -38, 37, 69, -21, 37, -21, -6, 66, -37, -20,
+ 9, -3, -44, 16, -9, 72, -37, 46, 51, -43, 90, -38, -75, 16, 1, 21,
+ 19, -31, -10, 12, 33, 25, 1, 41, -49, -10, -56, 87, -40, 12, -33, 34,
+ 26, -19, -53, -13, 20, 0, 71, -61, 26, 63, -26, 42, 27, -20, 39, -30,
+ 74, -80, 73, -30, 76, -21, 19, -53, 67, 61, -37, -8, -29, 19, -34, -53,
+ 63, -30, 11, -15, 49, -31, 19, -6, 3, -35, -20, 84, -74, 72, -70, 25,
+ 48, -58, 9, 30, -15, -51, -20, 8, 52, -34, 38, -78, 46, 23, -32, 59,
+ -56, 29, 50, 12, 27, -8, -53, -35, 20, 9, -69, 69, -11, -16, 39, -24,
+ -9, -10, -14, 60, -71, 21, -21, -79, 43, 47, -61, 9, 13, -4, -66, 45,
+ -44, -45, -7, -70, 19, 0, -6, -20, -50, 15, -42, 7, -3, -10, -28, 14,
+ 43, 56, 14, -45, -26, 61, -79, 66, 10, -42, 6, -31, 35, -19, -41, 64,
+ -3, -13, 51, -20, -3, -11, 27, -65, -4, 6, 46, -32, 19, -16, 71, -49,
+ -26, -12, -15, -14, -23, 9, 17, -56, 51, 24, -3, 0, -28, 67, -32, 65,
+ -55, 3, -13, 3, -24, 42, -32, -83, -44, 106, -54, 91, -49, 80, -74, 0,
+ -7, -7, 34, 47, -31, -37, 1, 51, -74, -17, -9, -40, 62, -3, 0, -52,
+ 51, 24, 17, -29, -23, 76, -61, 34, 47, -51, 39, -58, -2, 45, -34, 20,
+ 4, -60, -34, 7, -31, 79, -37, -9, -77, -16, 9, 18, 33, -50, -51, 27,
+ 27, -18, 87, -35, -5, -37, -32, -51, 2, 45, -109, 65, 37, -10, 32, -54,
+ -17, 35, -15, 15, -22, 42, -59, 50, -33, 56, 39, -90, 57, 7, 25, 27,
+ -61, 56, 64, -2, -8, -32, -21, 17, 15, -53, 3, -26, 35, -64, 54, -7,
+ -55, 49, -42, 52, -41, -1, 2, 13, -49, -60, 58, -51, 55, -45, 38, 43,
+ -54, 38, -24, -2, -3, 43, -68, 29, -62, 52, -24, -84, 82, -81, 7, 29,
+ -40, 24, -7, -22, 53, -28, 8, -25, -33, 54, -81, 92, -81, 56, 32, -46,
+ 29, -56, 9, -69, 30, 0, 34, 56, -28, -53, 74, -42, -40, 13, -63, 2,
+ 30, 17, -49, 30, 49, -43, 28, 90, -83, 47, 70, -67, 36, 45, 17, -19,
+ 60, 45, 9, 26, -14, -3, -10, 45, 7, -28, 66, -17, -14, 32, 52, -37,
+ 16, -65, -42, 6, -15, 53, -3, -39, 30, -18, 10, 47, -69, 83, -53, -60,
+ 62, 11, 22, 23, -17, -17, -27, 47, 18, -18, -38, -36, -20, -18, -8, 72,
+ -19, 30, -53, 42, 9, 44, -37, 27, -79, 70, -32, -3, 81, -61, -16, 19,
+ 76, -61, 18, -31, -4, 11, 21, 37, 63, -81, -31, -58, -7, 1, 73, 16,
+ 0, -4, 18, -47, -28, 80, 1, -68, 54, 29, -26, 81, -88, 45, 34, -28,
+ -40, -50, -37, 2, 33, -81, 18, 33, -66, 22, 41, 35, -42, 55, -57, 13,
+ -42, 64, 6, -45, 40, -64, 7, 9, 35, 43, -36, 31, 35, -29, 58, 11,
+ -9, -34, 0, 0, -14, 45, 61, 7, -23, 10, 64, -14, 2, -25, -49, 51,
+ 43, -31, 35, -8, 10, -15, -34, 6, -50, 14, -63, 55, 15, -61, 49, -61,
+ 5, -53, -42, 2, -29, -33, 47, -35, 52, 13, 54, -3, 19, 54, -50, 28,
+ 23, -49, -14, -33, 0, -23, 4, -15, 32, 32, -55, 11, 2, 52, -54, 72,
+ -55, 41, -14, -55, 73, -66, 7, 19, 34, -4, 17, 62, -17, 52, -45, 41,
+ 5, -29, 37, 23, -17, 0, -22, 14, -16, -10, 22, 11, -19, -59, 26, -24,
+ 86, -46, 34, 57, -15, -44, 50, -87, 60, -44, 45, -73, 91, -74, 80, -8,
+ 7, 49, 19, -38, -40, 58, -1, -32, -17, -31, -42, 18, 5, -41, -59, 22,
+ -66, 32, -8, -20, 65, -13, 29, -21, 19, 0, -13, 7, 35, -8, -29, 4,
+ -16, 60, 29, 43, 18, -30, -47, 74, -2, 2, 5, -57, 25, -19, 31, 27,
+ -51, -32, -27, -53, 13, 25, 27, -32, 0, -46, 79, 62, 43, -8, 6, -43,
+ -20, 57, 17, 31, -42, -52, 36, 14, 5, -10, -39, -27, -64, 63, 20, -7,
+ -61, 95, -32, 13, 22, -64, 37, 10, -88, 67, 21, 82, -11, 0, -67, 24,
+ -17, -38, -5, 8, -9, -21, -34, 34, 27, -46, 71, -61, -4, 35, -14, -18,
+ 44, 52, 70, -30, 52, 43, -43, -42, 74, -59, -26, -45, 1, -27, 49, -4,
+ -24, -46, 48, -16, 40, -11, 0, -6, 6, -39, 37, -68, -18, -9, -19, 76,
+ -51, 13, 7, -40, -11, 19, -17, -29, 36, -23, 0, -62, 52, -46, 62, -70,
+ -15, 3, 29, -91, 64, -85, 47, 4, 23, -5, 43, -18, 12, -44, 2, 15,
+ -32, 76, 17, 25, 3, 51, 23, -55, 0, -47, -22, -51, -20, 32, -51, 30,
+ -20, 37, 42, -42, 52, -43, 64, -68, 44, -5, 68, -48, 32, -42, 69, -74,
+ 7, 12, 9, 33, -19, 1, 42, 4, 24, -35, -42, -23, -27, -25, 70, -56,
+ 39, -16, 5, -8, 46, -3, 34, 18, -31, 24, 0, -8, 50, 12, 44, -5,
+ -40, 13, -71, 28, -38, -5, 9, 44, -48, 29, 65, -22, 42, 31, -18, 12,
+ -47, -39, -25, 56, 15, -48, -15, 51, 1, 79, -24, 24, 25, -48, 84, 12,
+ 28, -76, 11, 2, -63, -44, -2, -25, 22, -42, 16, 17, -68, 6, 10, -12,
+ 19, 12, -60, -63, 30, -18, 43, -67, 4, -47, 22, 49, -43, 47, -36, 16,
+ 24, 49, -35, 62, 22, 18, -62, 62, -82, 77, -55, -57, -50, 20, -48, 50,
+ -53, -34, 8, 5, 18, 1, 39, 12, 13, 35, 0, 63, 18, -63, 45, -29,
+ -16, -90, 51, 2, 35, -29, 17, 10, 52, -22, 12, -67, -12, -63, 58, -41,
+ 7, 8, 57, 50, -52, 75, -7, 13, 11, -35, 23, -47, 24, -28, -5, 37,
+ -21, -61, -16, -51, -55, 14, 60, -32, 15, 18, -20, 62, 18, -30, -44, 61,
+ 38, -35, 43, 29, -65, 31, -6, -2, 38, -44, 52, -8, 31, -32, -26, -57,
+ 11, 22, -34, 61, 17, -38, -30, -30, 27, -5, -19, 19, 24, -16, -13, 23,
+ 17, -9, -26, 38, 30, 57, -29, 64, -60, -7, -44, 39, -2, 2, 46, 7,
+ 55, -91, 6, 6, -39, 4, -28, 67, -57, 86, -46, 100, -70, 47, -27, 51,
+ -69, 48, -61, 55, -27, 15, -7, 50, -46, -42, -16, 1, -9, -27, -3, 10,
+ 16, -60, 53, -32, 12, 2, -29, 40, -52, 23, 33, -17, 19, -43, -37, 20,
+ 37, -38, -14, -20, -40, -63, 54, -68, 3, -10, 10, -18, 25, -66, -32, -22,
+ -24, 60, 7, 14, -10, -55, 18, 1, 27, -44, -43, -46, -22, -56, 12, 51,
+ -27, 62, -33, -36, 52, -65, 32, -80, 20, -66, 38, -48, -29, 40, -45, -26,
+ 0, 102, -70, 71, 42, 9, 14, 5, 28, -5, 39, -48, 76, -20, -5, -19,
+ -28, -5, 14, 67, -12, -52, 61, 36, -48, 6, 49, -23, 1, -44, 14, 29,
+ -77, 28, 33, -65, 13, -14, 43, -66, 77, -23, -9, 53, 32, 3, 39, -14,
+ 58, -18, 37, -19, -17, 24, -75, 15, -50, -52, 55, -34, -38, 44, -58, 23,
+ 14, 84, -17, 53, -40, -9, -43, -28, 29, -30, 70, -38, 69, 25, 14, 55,
+ -53, 45, -62, -5, -26, -40, 69, -38, -28, 39, -12, 32, -5, 52, -46, -54,
+ 38, 33, 31, 29, 49, 50, -96, 51, -52, 20, 26, -50, -6, 51, -46, 29,
+ -2, 2, -57, 14, 42, -48, 37, 0, 50, -50, 15, -21, 38, 17, 29, 45,
+ -10, 14, -3, -33, -2, 1, 47, 40, -24, 53, -33, -33, 25, -37, 74, -81,
+ 50, -63, 44, -27, -44, 0, -3, -53, 53, 34, 24, -5, -13, -17, -31, 1,
+ -5, 0, 43, -33, -24, 29, 38, -41, 20, -65, 55, -58, 32, 1, 3, -45,
+ 36, -49, 41, 21, -15, 27, 29, -63, 33, 23, 40, 17, 1, 58, -41, -5,
+ 27, -31, 0, -5, 21, -29, -33, -4, 4, 29, -16, 79, -35, 97, -37, -26,
+ -57, 64, 22, -6, 27, 35, -5, 91, -52, 0, -1, 46, -72, 97, -54, 96,
+ -81, 11, -25, 24, 39, 57, -22, -6, 2, 74, -34, 74, 26, 36, -93, 43,
+ -51, 43, -44, 57, -33, 49, 7, 51, -14, 27, -5, 41, 12, 6, 0, 42,
+ -18, -81, 17, -77, 24, -5, 7, -14, 0, 30, -50, -7, -43, -4, -29, 56,
+ -32, 34, -33, -12, 16, -11, -65, 24, 33, 25, -22, -6, -39, 25, 23, -25,
+ 54, -47, -2, 10, -42, -63, 58, -21, 44, -91, 81, -73, 6, -57, 25, -13,
+ 16, -37, -36, -37, 26, -55, 72, -40, 75, -64, 55, -64, 74, 6, 10, 13,
+ -70, -34, -33, -42, -21, 58, 32, -6, -44, 5, -45, 0, 35, -89, 71, -52,
+ 16, -36, -10, 33, 7, -6, -35, -15, -9, 43, -15, -42, 29, -76, 77, 19,
+ -36, -52, 34, -9, -46, -23, 52, -65, 57, 36, 17, -5, 50, -20, 34, -59,
+ 45, -71, 96, -83, 7, -35, -34, 31, -78, 83, -71, 5, 37, -61, 1, -45,
+ -3, -48, 65, -13, 27, -18, 15, -25, -7, -43, 63, -62, 43, -2, -19, 16,
+ 34, -33, 42, -20, 36, -14, -55, 51, -42, -26, -51, 74, -60, 37, -22, 6,
+ 11, 30, 13, -31, 26, -37, -26, 52, 18, 15, -36, 66, -53, 34, -47, 38,
+ 56, -33, -44, -2, 8, -74, 53, 2, -6, -58, -27, -39, 8, -17, 62, -39,
+ 28, 8, -45, 48, 2, 23, 35, -4, -78, 63, -43, -58, -6, -67, 72, 3,
+ 42, -69, 29, 35, -45, 20, -59, -28, 37, -20, 43, -49, 67, -33, 1, -39,
+ 69, 19, -12, 14, -43, -44, -29, 23, -36, -40, 16, -10, -9, -31, 54, 27,
+ -34, 0, -3, 18, -41, 4, 52, -73, -36, 24, -31, -33, -32, 35, 8, -49,
+ -11, 68, 25, 65, -67, 64, -62, -6, -42, 2, 47, 24, 41, 2, 16, -36,
+ 2, -47, 50, 31, -92, 73, 58, -65, 38, -64, -44, 38, 41, 0, 58, -67,
+ 5, 20, 21, 31, 27, 94, -79, 47, -36, 61, -27, -3, 49, -39, 69, -51,
+ 14, 9, 48, 1, 33, 32, -4, -21, 36, 34, -30, 40, -24, -47, 8, 39,
+ 47, 5, 48, 5, -11, 25, -20, -47, 25, 52, 18, 9, -49, 15, -12, 18,
+ -29, 6, 40, 31, -59, 49, -23, 83, -45, 4, -4, 32, 18, -20, 18, -14,
+ 72, 2, -34, 32, -27, 10, -25, 52, -38, -67, -34, 1, -22, -15, 60, -22,
+ 7, 40, -59, 99, 0, 18, 41, 22, -51, 9, 18, 32, 17, -20, 3, 59,
+ 2, 16, -56, 28, -76, 53, -45, -10, 51, -36, 25, 52, 5, 18, -31, 19,
+ -1, 3, 21, -42, -9, -1, 66, -27, -20, 44, -28, 24, -2, -6, 5, -21,
+ -51, 19, 4, -31, -13, 56, 17, -59, -20, 5, -32, -11, -28, -2, 37, 28,
+ -54, 0, 52, -3, -57, 61, -14, -54, 4, 56, 30, 42, -45, 12, -85, 25,
+ -67, 23, 18, -14, 19, -50, -15, 41, 24, 22, -66, 60, 43, 43, -11, -55,
+ -22, 15, 0, -16, -54, 58, -8, 21, 13, -22, -3, -66, 17, -30, -9, 54,
+ -67, -13, -31, 24, 4, 63, 23, -33, 2, 56, -70, 18, 5, 16, -9, 11,
+ 26, 20, 56, -93, 84, -52, -12, 35, -3, 31, 34, -9, 7, -1, -13, 37,
+ 10, 8, -45, -56, -1, 52, -24, 74, 10, -6, -10, -90, 28, 36, -4, 30,
+ 46, 14, -4, -17, 55, -55, -46, 20, -46, 60, 36, 16, -46, -43, -40, 55,
+ 3, -61, 34, -68, -46, -22, -19, 31, 0, -33, 42, 7, -23, -7, -30, 20,
+ -40, 57, 33, -53, 15, -42, 5, 15, -71, 6, -24, -27, 34, -7, 73, -77,
+ -4, 27, -76, 14, 50, -67, 31, 27, 24, -37, -23, -33, 63, -18, -13, 39,
+ -13, -15, 24, -11, 13, -1, -24, -36, 32, -16, 39, -67, 43, 0, -43, 10,
+ -46, -5, 2, -19, -16, 18, 46, -85, 53, 55, -48, 28, -31, 22, -60, -18,
+ -8, 65, -54, -48, -13, -16, -26, 25, 33, -3, -39, -26, 26, -64, 47, -91,
+ -28, 86, -29, 31, 47, -42, 69, 39, -97, 68, -65, -28, -3, -28, 53, -22,
+ -28, 26, -47, 70, -82, 67, -42, 52, -51, 21, -76, 48, -12, 19, 57, -67,
+ 85, -72, 54, 27, -25, 20, -20, 9, 38, 2, 41, -62, 68, -11, -20, -23,
+ -36, 17, 32, -62, 58, -31, 50, 45, -32, -47, 18, -20, 31, -11, 49, 18,
+ 42, 0, 17, -17, -36, 58, -23, 13, -35, -45, 86, -60, 12, -72, 23, 35,
+ 23, -11, -47, -5, 56, 18, -29, -80, 83, -74, 45, 39, 25, 23, 36, -14,
+ -5, -2, 34, 3, -45, -23, -1, 19, 35, -46, 58, -19, -11, -27, -4, -56,
+ 29, -64, 0, 61, -67, 24, 52, -83, 48, 27, -67, 33, 20, -66, -1, -59,
+ 24, -60, 32, 42, 20, -69, -3, -22, -12, -40, 42, 30, 23, -73, 48, -68,
+ -35, -60, 79, -42, 41, 29, 6, 34, -6, -15, -24, -41, 22, 35, -23, -49,
+ 38, 15, 35, -2, 84, -1, -44, 1, -8, 48, -60, -59, 46, 45, -13, -22,
+ -32, -51, 2, -30, -7, -28, 40, 0, 37, -48, 60, -16, -30, -50, 8, -65,
+ 87, -27, 36, 29, -5, 44, -31, -46, 0, 6, -6, 23, -46, -9, 28, -44,
+ 37, -28, -35, 50, -30, -23, 2, 64, -14, 0, -39, 12, -43, 21, 18, -56,
+ 86, -44, -19, 20, 65, -55, 39, 4, 10, 15, 12, 29, -11, -4, 46, 27,
+ -7, -81, 16, 63, -7, -34, 66, 0, -21, -41, -7, 40, 13, 0, 52, 40,
+ 49, -81, -10, 1, -11, -40, -48, -61, 85, 2, 32, -14, 1, 41, -54, -42,
+ 57, -16, 55, -93, 74, -22, 15, -40, 41, 22, 63, -9, -5, 33, -31, -20,
+ 16, 12, -61, -24, 41, -54, -19, 22, -45, -49, 73, -27, 68, -49, 7, 22,
+ 68, -43, 36, 51, -57, 51, -85, 40, 0, -39, 2, 33, 15, 32, -54, 39,
+ -24, 7, -34, -3, 17, -32, 61, 9, -6, 72, -81, -11, 52, 15, -51, 27,
+ -13, 48, -19, 25, -46, 5, 13, 57, -18, -20, 63, -9, -55, -25, -25, 25,
+ 50, -39, 47, -22, 39, 51, -49, -17, 27, -46, 40, -10, -1, 54, -11, 1,
+ 31, 37, -43, -6, 0, 67, -79, 75, -53, -34, 36, -42, -2, 45, 71, -6,
+ -11, 50, 18, -59, 17, 22, 42, -20, 50, -28, 58, -41, -30, -15, 0, 61,
+ 53, 18, -39, -18, -11, 5, -40, -3, 24, 7, 46, -34, 22, 12, 43, -57,
+ 54, -3, -19, -10, -6, -51, 101, -54, -10, 29, 21, 13, 46, -87, 10, 28,
+ 28, 28, 55, -23, 50, -61, 76, -61, 20, 36, 3, -28, 45, 14, 14, 49,
+ -46, -45, -15, 10, -30, -32, 51, -19, 69, -33, -36, 47, -20, 46, 22, -55,
+ 47, 2, 19, -39, 54, -14, -1, -3, -19, -36, 38, 35, 16, -12, 0, 28,
+ -38, 56, -35, 26, -110, 80, -56, -32, -10, -22, 47, -5, -42, 9, -13, 5,
+ 49, 35, 20, -10, -48, 19, -66, -4, 18, 74, -41, -31, -11, 54, -76, -78,
+ 54, 1, 19, 57, -41, 58, 52, 6, -65, 0, 46, -48, -18, -19, 80, -42,
+ -5, 33, -14, 43, -26, 15, 61, -72, 62, -41, -15, -5, -31, 12, -51, 46,
+ 1, 24, 43, -38, 29, 32, 20, 57, -31, 43, -61, 10, -40, -35, 26, 10,
+ -64, 20, -50, -4, -32, -16, -14, 38, -33, 69, -42, 32, -57, -25, 21, -46,
+ 12, -4, 7, -40, 90, -46, -33, -45, 20, -74, 42, 42, -40, 4, 29, -39,
+ 26, -17, 19, 30, 64, -89, 61, -71, 82, -44, -51, -12, 38, 27, 7, -50,
+ -71, 60, -14, -75, 37, -40, -7, 12, 23, -30, -36, 32, -38, 19, -44, -27,
+ -37, 41, -32, 41, -50, -52, 22, 58, -66, 69, -54, 74, -17, 24, -86, 16,
+ 14, -38, 13, 15, -10, 48, -73, -23, 50, -24, -29, 2, 96, -53, 30, -32,
+ -74, 18, 38, -49, 29, 3, -52, 63, -35, -32, 22, 52, -85, 51, -31, 36,
+ -65, -34, -20, 66, -48, 12, -63, 68, 13, -29, -31, 13, -26, 35, 52, -32,
+ -1, 16, -27, -28, -13, 45, -60, 10, 39, -58, 16, 10, 41, -84, 27, -43,
+ -26, 79, -48, -7, -17, -1, -41, 63, -55, 33, -10, 53, -40, -18, -59, 65,
+ -98, 49, -63, 19, -33, -33, 68, -57, 14, 11, 57, -43, -6, -7, -19, 25,
+ -25, 34, -43, 37, 54, -19, 32, 2, -17, -5, -48, 5, 3, -3, -13, -12,
+ -49, -15, 25, -11, 35, 23, 25, -17, -26, -16, 26, 76, -51, -9, 76, 52,
+ -45, -42, 36, -98, 58, -50, -40, 38, -19, 26, -46, 83, -51, 43, -19, 24,
+ -29, -23, 68, -75, -20, -3, -36, 14, -45, -31, 30, -47, 11, -31, 71, -8,
+ 6, -13, 22, -41, 31, -86, -20, -49, 25, 33, -31, 50, -21, 53, -57, 37,
+ -24, -13, 67, -21, 89, -28, 28, 25, -3, -5, -4, -42, 62, 54, 1, -2,
+ 18, -40, 59, -16, -10, -32, 7, 47, 13, 30, 26, -51, 15, -21, -42, 46,
+ -47, 53, -78, -13, -57, 87, -47, 49, -55, 1, 64, -20, -2, -36, -1, 45,
+ 20, 5, -67, 73, 10, 6, 13, -20, -7, -16, 27, 49, -8, 33, -6, 50,
+ 7, 19, -9, -69, 45, -2, 46, -99, 66, 8, -25, 4, -58, 72, -49, 38,
+ 6, -20, 6, -63, 71, -67, 65, -28, 12, -6, -17, -37, -51, 77, -86, 66,
+ 8, -23, 53, -56, 41, 36, -62, 44, -19, 10, -48, 34, 8, 6, -35, 51,
+ 29, 76, -75, 51, -76, 91, -50, 40, -54, 2, 29, 5, -20, 44, -76, 44,
+ -48, -32, 17, 50, -28, -67, 68, 13, -5, -40, -19, 33, -11, 46, 19, -4,
+ 16, 36, -30, 50, 28, -17, 30, -86, 91, -41, 15, -69, 74, 11, 49, 20,
+ 39, -4, 84, -61, 68, 13, 25, -45, 76, -68, -30, -6, 54, 1, 21, 5,
+ 50, -74, 20, -32, 1, -49, 29, 13, 15, -55, 96, -10, 19, 35, -20, 25,
+ 12, -38, 23, -72, 39, -27, -15, 17, 5, 15, -51, -12, 10, -52, -46, -4,
+ -39, 91, -80, 112, -58, 47, 3, 16, 4, -5, -28, 3, -12, 13, -3, -58,
+ 98, -50, -21, 89, -20, 30, 9, 59, -34, 71, -22, 50, 39, 44, -54, -61,
+ 23, -41, -50, 70, 31, 46, 28, 13, 2, -32, -19, 27, -4, -30, 40, 6,
+ 11, -26, 32, -48, -58, -25, 41, -34, -9, -2, -28, -4, -31, -11, -32, 33,
+ -22, -28, 39, -32, -39, 36, 44, -59, 28, -40, -7, 4, 62, -11, -11, 13,
+ 0, 51, 0, 41, 3, 14, -70, 21, 82, -66, 46, -49, -11, 46, 23, 18,
+ -45, 12, 79, -65, -53, 34, -26, 84, -53, 95, -22, -50, -24, -7, -21, 14,
+ 8, -32, 23, 77, 0, 10, 9, 8, 12, -44, 28, -32, 14, -6, 37, -6,
+ -55, 36, 28, -2, 18, -28, -35, 48, -58, 13, 56, 29, -18, -15, 5, 11,
+ -3, -73, 68, -34, 13, -35, 53, -43, 62, -18, 17, -30, -52, -8, 52, -41,
+ -27, -11, 8, 17, 55, -86, 73, -70, 64, 2, 19, -32, -3, -68, 77, 26,
+ -37, 47, 19, 24, -43, 80, -57, -12, 2, 59, 12, -11, -38, -24, 35, -41,
+ 27, -9, -17, 21, -35, 50, 18, -6, -4, -33, -2, 54, -37, -33, -16, -57,
+ 42, -17, -31, 0, -40, -23, -16, 25, -96, 102, -48, 1, -55, 43, -13, -48,
+ -29, 37, 34, 44, 32, 22, -32, -3, 46, 13, -47, -58, 21, -35, -10, 12,
+ 56, -11, 19, 34, 36, -52, 4, 70, -57, 50, -27, 34, 0, 16, 74, -42,
+ 16, 32, -54, -21, -8, -29, 36, -48, 28, 55, -38, 24, -9, 44, -37, 5,
+ 1, -24, -17, -35, -25, 46, -63, -6, -8, -29, -19, -31, -50, -48, 22, 45,
+ 55, 32, -6, -19, -60, -36, -10, 51, -30, -30, 17, -13, 48, 3, 22, -55,
+ 84, -64, 52, -33, 62, 8, 20, -7, -51, 59, 24, 6, -9, -14, -55, 64,
+ 3, 5, -5, 41, 33, -78, 10, 60, -38, -2, 17, -43, -28, 4, 33, -47,
+ 8, -48, 14, -6, -40, -15, 82, -59, -58, 13, 8, -2, 31, 4, -39, 14,
+ -50, 53, -77, 60, 34, 32, 10, -72, -13, -64, -18, 28, 12, 57, -24, 49,
+ -56, -35, -18, -45, 10, -50, 0, 12, 0, 27, 47, -41, 10, -52, 30, -12,
+ 28, 15, -62, -10, -19, 49, -7, 11, 11, 34, -65, -40, 16, 44, -53, 33,
+ 35, 34, -31, -18, 41, -11, 30, -35, -38, 13, -12, 30, 61, -3, -10, 21,
+ -52, -10, 39, -9, -20, 36, -1, -1, -26, -15, -11, -32, 2, 64, -64, -19,
+ -3, -36, 32, -59, 49, -37, 37, -13, -19, -36, -56, 68, -22, 0, -6, -16,
+ 47, -31, -21, -32, 39, -36, 0, -57, 67, 40, -49, -39, 17, -11, 11, 44,
+ -15, -27, -4, 7, 41, 25, -9, 50, 47, -44, 51, -68, 90, -47, 11, 43,
+ 12, 14, -66, -15, -56, -1, 25, -45, -22, 10, -13, 62, -7, 18, 15, -46,
+ -73, 28, -29, 29, -77, 52, 6, -86, 10, 6, -37, -28, 14, 35, -54, -5,
+ 27, -38, 53, 15, 59, -46, 70, -72, 61, -95, 58, 12, -64, 4, 55, -47,
+ -10, -3, 46, 6, -7, 0, 2, 7, 25, 38, -52, 56, 44, 31, -52, 1,
+ -83, -24, -14, 66, 3, -8, 69, -45, -7, 18, 27, -18, -67, 26, -1, 12,
+ -39, 19, -51, 9, 0, 7, -41, 48, 14, 2, -5, -4, -42, 50, 65, -84,
+ 59, -15, -43, -16, 4, 74, 10, -71, 39, 0, -21, 74, 3, -44, 17, 30,
+ 0, 29, -49, 18, 6, -1, -74, 58, 59, -4, -10, -50, -16, -5, 0, -20,
+ 41, -62, 27, -50, -17, -29, -14, 60, 6, 33, 65, -25, -52, -14, 34, -27,
+ 50, 43, 50, 2, -52, 65, -42, -26, 2, 2, -79, 48, 24, -18, -24, 13,
+ -28, 1, 39, 34, 64, -75, 23, -34, 47, -35, 20, 52, 18, -11, -2, 36,
+ -38, -17, -32, 38, -38, -13, 10, 27, 19, -9, 18, 15, -72, -41, -32, 8,
+ 13, 72, -59, 20, -37, -35, -4, -47, 25, 38, 66, 15, -1, 0, -16, 28,
+ 40, -26, -23, -18, 12, 43, -62, 9, -10, 60, -38, 2, 40, 1, -18, 34,
+ -31, 54, -10, -1, 11, -15, 13, 8, -45, -22, 51, 15, 75, -66, 11, 27,
+ -37, 78, -27, -52, 14, -58, 12, -44, -60, 50, 13, 48, -59, -25, 16, 15,
+ -83, 90, -56, 90, -8, 34, -56, 83, -63, 66, -14, -73, 54, -1, 13, -16,
+ -4, 57, -25, -49, 62, 16, -36, 77, 28, -45, 56, 40, -22, -12, 22, 32,
+ -31, 23, -38, 18, -87, 14, -27, -15, -3, 60, -57, -11, 70, -77, 44, -50,
+ 73, -56, -7, 31, -25, -38, 52, 30, -27, 13, 68, -56, 3, -16, 48, 1,
+ 85, -50, 37, -76, 59, -76, -14, -18, 63, -16, 46, 10, 40, 25, -74, 55,
+ -59, 19, 24, -25, 42, 20, -20, -31, 0, -49, -13, 44, 38, -75, 15, 10,
+ -24, -21, 48, -33, 18, -80, 25, -20, 20, -4, 46, -48, -21, 69, -63, -14,
+ -14, 22, 14, -26, -24, 61, -5, 27, -104, 45, 1, 13, 61, -39, -9, 2,
+ 1, 77, -9, 89, -59, 24, -37, 8, -1, 30, -69, -32, 81, -66, 16, -31,
+ 55, -103, 43, -66, 62, 22, 38, -67, 55, -26, 42, 15, -8, 54, -43, -26,
+ 65, 8, -24, -62, -35, 10, 12, 41, -46, 2, 33, -70, 32, -48, 4, -11,
+ -46, 72, -6, -59, 72, -37, -57, 29, -5, 33, -14, -30, 69, 38, 28, 32,
+ 14, -88, 70, 11, 14, 31, -18, 54, -33, -7, -41, -65, -1, 1, -14, 18,
+ -28, 52, 11, -6, -51, 57, -48, 59, 13, 44, -21, 20, 2, -60, 20, -7,
+ -21, 0, -27, 24, 47, -9, 19, -46, 85, 11, -44, 21, -62, 49, -60, 8,
+ 34, -63, -28, 59, 47, -35, 47, 41, -30, -37, -40, 37, -37, 84, -73, 11,
+ -19, -23, -24, -31, -74, 34, 15, -37, 11, 13, 11, 19, -35, 16, 18, 35,
+ 52, -102, 55, 27, -57, 48, -4, -21, -65, 93, -55, -33, 48, 14, -60, -32,
+ 45, -35, 16, 17, 60, 23, 38, -28, 4, -24, 19, 27, -67, 46, 0, 36,
+ 3, 36, 4, 48, 5, -19, -48, 9, -60, 32, -57, 5, -12, -11, -40, 51,
+ -63, 31, 4, -29, 38, 15, 40, 10, -40, -10, -67, -13, -104, 72, -46, 10,
+ -9, 29, 18, -19, -26, -60, 55, -20, 13, 64, -32, 16, -88, 71, -15, -13,
+ 49, -41, 39, 11, -49, 20, 59, -82, 42, -72, -28, 51, -58, 31, -15, 36,
+ 30, -43, 43, 27, -40, 46, -65, 39, 42, 20, -21, 24, -51, 66, -18, 8,
+ -15, -40, -41, -44, 67, -44, 14, 28, -49, 63, 5, -10, -19, 54, -43, 27,
+ -87, 93, -76, -2, 37, -80, 53, -21, 32, -29, -19, -9, -24, 27, 14, 35,
+ -110, 85, -70, 115, -64, 43, -6, -49, 35, 36, -9, -30, 37, 3, -13, 43,
+ 9, -38, 66, -13, 20, 23, 35, -19, -25, -39, 32, 7, -80, 16, -32, -49,
+ 8, 35, -79, 37, -58, -17, 43, 44, -46, 17, -49, 88, 43, -9, 21, 1,
+ -43, 2, 34, 39, -11, 25, -28, 24, -61, -43, -2, -27, 46, 35, -17, 21,
+ -33, 33, -47, 15, -89, 75, -46, 8, -52, -2, -14, 9, -40, 43, 57, -14,
+ -24, 75, -62, 26, -14, -14, -16, -3, -5, 54, 30, -25, 28, -49, 60, 29,
+ 0, 57, -14, 64, 28, 38, -41, -13, -34, -23, -20, -9, -3, -18, 2, 6,
+ -53, 65, -2, 9, -9, -28, -29, 53, -15, -14, -38, 45, -15, -81, 84, -37,
+ 63, -43, -51, 52, -62, -27, 42, -31, 52, -32, -5, 33, 10, -40, 6, 16,
+ -67, -23, -6, -50, 8, 2, 64, -7, 80, -43, 39, -9, -28, -22, 62, -52,
+ 13, 31, 37, 35, -59, 41, -61, -34, -16, 38, 62, 22, 63, -20, 4, 58,
+ 14, 33, -63, -9, 53, -37, 51, -12, -16, -18, 60, -8, 71, -18, 20, -24,
+ -12, 31, -44, 58, 13, -46, 25, 25, 33, 53, 20, 16, -7, -35, 73, -22,
+ -29, -53, 0, 40, -66, 24, -28, 15, -65, 6, -63, 72, 7, -11, -24, 7,
+ -14, 73, -31, 97, -67, -5, 54, -43, -19, 10, -58, 42, 2, 54, -37, -61,
+ 66, -9, 73, -58, 31, -15, 28, 22, -8, 21, 39, -29, 14, -40, 32, -16,
+ 86, -92, 47, -89, 25, 14, -66, 78, -73, -48, 16, 54, -92, 38, 47, -94,
+ 7, 29, -56, 0, -74, 22, 22, 5, 20, -2, -4, 21, 27, 7, 26, 9,
+ 8, -35, 59, -57, 54, 43, -73, -79, 84, -30, 64, -77, -20, 62, -73, 53,
+ -15, -19, -76, 12, -74, 85, -85, 60, -15, 48, 14, -61, -19, -38, 41, -72,
+ 72, 0, -2, 65, -9, -48, 71, -60, 51, 16, 2, 0, 11, -9, -44, -62,
+ 58, -53, 18, 62, -62, 37, 21, 12, 22, -37, 52, -60, 34, -12, -70, 5,
+ 53, -51, 5, -69, 20, -47, 17, 7, 70, 12, 42, -19, 5, -33, 19, -46,
+ 32, -17, -64, 71, -88, 56, -21, 36, -46, -24, 25, 15, -7, 63, -37, 13,
+ -45, 73, 57, -46, 2, -33, 19, -34, -43, 18, 17, -46, 52, -22, 0, -2,
+ 25, 27, -25, 41, -60, 46, -57, -6, -52, -7, -13, 38, 49, 45, -41, -33,
+ 59, -51, -23, -31, 20, 59, -31, 37, 41, -48, -42, 34, -53, 44, -21, -53,
+ -31, 14, 52, 6, 0, -44, 33, -24, -5, -12, -47, -35, -66, 16, -36, 65,
+ -10, -2, -34, -19, 26, -8, 44, -62, 2, -37, -72, 53, 43, -6, -50, -44,
+ 68, 20, 36, -59, 91, -6, 55, -57, 90, -62, 46, -70, 26, 3, 66, -23,
+ 14, -76, 59, -69, 21, 21, -14, -41, 64, 1, -37, 14, 14, -105, 67, 24,
+ 4, 1, -60, 60, -36, -11, -26, -12, -40, 14, -60, 46, -20, -12, -33, 64,
+ -64, 60, 27, 27, -1, -20, 73, -64, 38, 57, -73, -3, 75, -64, 7, 58,
+ 0, 1, 61, -68, 61, 28, -48, -42, 22, -12, 44, 2, -4, -61, 4, -14,
+ 33, 5, -10, -15, 43, -66, 55, 55, -68, 39, -10, 25, -18, -30, -23, 38,
+ 30, 29, 26, 30, 69, -88, 84, -48, -8, -10, 20, 48, 44, 0, 14, 31,
+ -38, -24, -17, -47, -11, 74, -84, 66, 13, -4, -18, -62, 55, -49, 70, 64,
+ -45, 25, 23, -77, 56, -16, -32, -16, -17, -8, -27, -50, 55, 14, 54, -33,
+ -71, 74, -21, 37, 50, -14, -6, 44, -88, 6, 0, 74, -68, 49, 35, -16,
+ -11, 7, -8, -27, 86, -16, 20, -53, 41, 49, -30, 38, 33, -85, 54, 28,
+ -40, -45, -13, -53, 39, 47, 23, 14, 1, 31, -5, 14, 23, -46, 53, -46,
+ 36, -65, 31, 12, 61, -46, 57, 6, 10, -19, 9, -59, -7, -43, 76, -25,
+ -8, -38, 29, -43, -45, -25, 25, 6, -15, -1, 2, -61, 63, -50, -5, 25,
+ 28, -47, -20, -23, 41, -23, 60, 26, -7, -3, 49, 48, 32, 13, 2, -51,
+ 42, 52, 10, -32, 8, -60, 46, 13, 19, -20, 81, -67, -3, -25, 21, 46,
+ -41, 28, -103, 90, -91, -45, 25, -11, -15, 35, 8, -21, -41, 25, -45, -31,
+ 29, 18, -30, -31, 73, -57, 83, -24, -9, 27, -28, 13, 44, 58, -1, -28,
+ 29, 22, -27, 24, 42, -26, 31, -29, 36, 40, -31, 64, 3, 22, -42, -23,
+ -25, -9, -39, 34, -9, -9, -47, 48, 36, -9, 31, 55, -16, -10, -3, -61,
+ 35, -6, -49, 51, -7, -36, 52, 0, -28, -51, -38, 0, 6, -8, 49, 2,
+ 10, -63, 53, -21, -5, 66, -43, 10, -7, 48, -6, -55, -33, 53, -17, -54,
+ -15, -7, 57, -52, -62, 40, -21, -28, 31, 1, 36, -35, -79, 81, -95, 74,
+ -39, 67, -22, 60, 23, 12, -10, -44, -10, 55, -35, 57, 2, 55, -69, -37,
+ -20, 59, -30, -4, 5, 9, 16, -12, 17, -6, 48, 44, -58, 13, -31, 2,
+ 4, 22, -54, -35, -5, 8, -55, 51, -34, 13, 38, -85, -14, 35, -74, 13,
+ 33, -38, 52, -9, -58, -20, 34, -14, 25, -22, -40, -62, -27, 42, -36, 5,
+ -3, 29, 37, 52, -65, -52, 44, -49, 20, -11, -9, -46, 8, 8, 41, -54,
+ 40, -8, 33, -49, -54, 8, -7, 34, -70, 56, 33, -29, 38, 16, -93, 57,
+ 29, 36, -7, 51, 52, 19, -19, 50, -57, 22, 29, 33, -56, 6, 75, -50,
+ -30, 52, 0, 8, -7, -48, -47, -45, 82, -80, 14, -26, -41, 16, -15, -5,
+ -5, -63, -20, 13, 11, 21, -62, 38, -51, -31, 19, -13, 13, 2, -1, 34,
+ -67, 57, 76, -78, 86, -34, 14, 54, -48, -7, -8, 3, 53, 1, 37, -20,
+ 7, 3, 62, -19, -37, -38, -32, 5, -70, 20, 21, 0, -77, -10, -28, -20,
+ -13, -14, 26, -22, 5, -28, -28, 18, -39, -5, -40, -9, -76, 33, 17, 42,
+ 0, 36, -41, 44, 8, -3, -15, 30, -51, -14, -37, -64, 2, 6, -19, 63,
+ -7, 34, -30, -66, 46, -28, 27, -59, 63, 54, 0, 52, -3, -49, 23, -64,
+ 44, 80, -83, 21, -25, -8, -33, -13, -7, -26, -15, 73, 36, -5, 30, 37,
+ 9, -34, -56, 17, 0, 27, 23, -38, 28, -19, -34, -8, 71, -75, 20, 10,
+ -75, 30, -42, 4, -78, -38, 46, -1, 22, -55, -6, 30, -59, -31, 0, 51,
+ -17, 21, -48, 56, -53, 87, -90, 74, -44, 3, -47, -66, 18, 20, 12, 19,
+ -17, 9, 51, 20, -55, 13, 40, -3, 41, -23, -32, 58, 4, 45, 1, 47,
+ -34, 24, 12, 0, 10, 29, -34, 65, -59, 37, 63, 57, -21, 9, -30, 67,
+ -18, -40, -17, -12, 66, 0, -34, 45, 4, -7, 43, -21, 24, -27, -59, 36,
+ 26, 18, -26, 12, 11, 35, -52, 47, -3, -16, -4, 66, -68, -62, 80, -27,
+ -36, -40, 69, -79, 23, -48, -50, -38, 39, 17, -21, -26, 66, 0, -79, 64,
+ -13, -15, 1, -24, 0, 55, 48, 17, -59, 44, 39, -29, 59, -19, 44, -85,
+ 57, 40, -15, -21, 65, -54, 44, -16, 65, -21, -59, 50, 16, -58, 38, -60,
+ 61, -52, -46, 39, 29, -71, 41, -62, 87, -25, 3, -7, 19, -68, 16, 3,
+ 9, 17, -77, 22, 63, 32, -23, 37, 71, -31, 4, -5, 44, -15, 68, -30,
+ 61, -42, -18, 21, -44, 54, -3, 33, 19, 54, -29, 23, 46, 21, -43, 3,
+ 0, -21, -21, 6, -54, 46, -21, 0, -8, -42, 84, 27, 2, 50, -36, -46,
+ 38, -53, 52, 48, 27, -59, 28, 44, -29, -40, 31, -76, 41, 13, 28, 10,
+ -24, -102, 84, -23, 22, -30, 34, 36, -7, 21, 24, -76, 8, 15, -18, -55,
+ 48, -26, 17, 40, 7, -59, 33, 33, -36, -31, 61, -41, -39, 43, 9, 2,
+ 51, 41, -18, -11, 68, 78, -46, -9, 28, 40, 12, -16, -6, 63, 17, -21,
+ -1, -23, -4, 38, -42, -59, 46, -16, 7, 20, 51, 68, -33, 19, -11, -40,
+ 0, 29, -9, -34, 43, 3, -16, -22, 22, -23, 19, 36, -71, -16, -16, -32,
+ -37, 24, -59, 9, -20, 54, -37, -28, 34, -58, -33, -61, 64, 24, -4, -29,
+ -8, 52, 0, -58, 30, -57, 15, -7, -50, 56, -66, 15, -20, 32, 41, 24,
+ -79, 50, -69, 36, 36, -43, 71, -48, 28, -26, 29, -38, 60, 45, -6, -15,
+ 86, -43, -8, 45, -52, 58, 74, -19, 64, -92, 63, -67, 0, 1, 25, 11,
+ -13, 49, -8, 1, -37, -41, 5, 26, 30, -21, -44, 17, -72, 16, -3, 34,
+ -4, -41, -11, 53, -71, 43, -26, 41, 12, -31, 110, -54, 46, -9, 61, -37,
+ 9, -19, -4, 3, -25, 63, -25, -28, -58, -17, 27, -57, 74, 3, -44, 34,
+ -13, 13, 30, 10, -96, 70, -24, 24, -63, 1, 23, 46, -79, 59, -72, 41,
+ -74, 32, -16, 44, -9, -16, -1, -30, 40, -57, 35, 13, -38, 22, -46, 53,
+ -75, 86, 0, -29, 93, -86, 82, -72, 8, 74, -88, -1, -2, -22, -19, 37,
+ -1, -12, -22, -69, 41, 44, -36, 12, -45, -21, -1, -16, 25, 16, -24, -48,
+ 47, 71, -43, 3, 52, -31, 34, -35, -51, 76, -95, 88, -47, -14, -8, 59,
+ -1, 26, -85, 41, -23, 11, -34, -7, 23, 22, 11, 11, 56, -45, 26, -14,
+ -49, -51, -41, 59, -67, -64, -1, 28, -50, 3, -18, 1, 11, -5, -41, 28,
+ -12, 9, -34, 34, 49, 34, -32, 36, -15, -24, -22, -71, 62, -42, 30, 36,
+ -36, -68, 51, 3, -75, 51, 56, -55, -5, -30, -32, 13, 31, 31, -62, 80,
+ 36, -34, 42, 1, 60, -63, 18, -17, 8, 33, 13, 11, -79, 0, -17, -13,
+ -10, 29, 8, -17, 34, 2, 16, -69, 38, 8, 35, -28, 7, -68, -28, -30,
+ -30, 33, 38, -36, -22, -7, -31, 39, -36, -15, -10, -19, 20, -33, 27, -53,
+ -19, -40, 39, -63, 66, -52, -37, 33, -93, 56, 16, -26, 69, -78, 35, -32,
+ -33, 9, -14, -28, 68, 60, -44, -26, -25, 1, -13, 37, 6, 2, 21, 8,
+ 39, -42, 54, 2, 0, -51, -15, -3, -52, -1, -53, -21, -39, 41, -60, -7,
+ 7, 26, 22, -7, 17, 5, -16, 38, 76, 36, -25, 4, -29, -47, 26, -19,
+ 0, -9, -87, 71, 0, -23, -2, -15, 4, 15, -49, 28, -34, 28, -45, 45,
+ -16, 44, -53, -54, 21, 6, 46, 0, -27, -16, -52, 40, -25, -21, 48, 0,
+ 64, -98, 40, -44, 4, -19, 16, 61, 35, -70, 40, 22, 55, -70, 71, -65,
+ 39, 47, -11, -2, -3, -74, 60, 37, -26, 79, 9, 36, -44, -5, 8, -13,
+ 22, -90, -22, 48, -71, -45, 24, 46, -42, -6, 46, -58, 54, 19, -24, -18,
+ -17, 17, 88, -80, 53, 9, 52, -50, 34, -47, 49, -47, -37, -12, -21, 59,
+ -22, 58, 47, -32, 78, 52, -13, -39, 19, -38, 3, -35, 18, 5, 21, -64,
+ 34, 11, -18, 14, -35, -80, 61, -61, 22, 19, 3, 78, -58, -60, 36, -27,
+ 55, 32, -97, 68, 10, -13, -72, 57, 2, 4, 25, 48, -85, -14, 73, -59,
+ 49, -67, 48, -34, -42, 51, -34, 42, -33, 30, 16, -22, 63, 38, -47, 61,
+ -6, -43, 28, 34, -46, 28, 0, 56, -30, 6, 39, -25, 58, 26, 17, 14,
+ 54, -36, 42, -52, 26, -17, 48, 23, -16, 40, -7, -12, -30, 12, -48, 58,
+ -6, 44, 3, -54, 46, -23, -21, -10, 74, 5, -12, 24, 0, 0, 18, 28,
+ -34, 39, 31, 19, -55, 21, -28, 37, -25, 34, 9, -36, 33, 27, -68, -4,
+ -19, 18, -24, -35, 67, 10, 14, 47, 18, -1, 50, -47, 62, -32, 43, 46,
+ -71, 13, -36, -25, -26, 7, 29, -32, -66, -50, 28, 44, 14, 59, -24, -7,
+ -7, 16, 46, -30, -19, 28, -13, 24, 49, -65, 77, 16, -7, 59, -7, 23,
+ -32, 35, 59, 49, -30, 24, -83, 9, 37, 50, -10, -7, 9, -7, 33, -61,
+ -24, 26, 1, 25, -7, -50, -5, -67, -51, 10, 13, 0, -30, 16, -41, 65,
+ -40, -13, 13, 22, 41, 32, -66, 18, -27, -22, -27, -67, 67, 46, -31, -12,
+ 14, 63, 49, -3, 83, -25, 80, -78, 53, 16, 25, -55, -12, -57, 80, 9,
+ 6, -9, -32, -33, 53, -81, 54, -28, 10, 50, -26, 9, 41, 21, 25, -56,
+ 11, 5, -59, 33, -54, -55, 19, 19, 34, -18, 73, -44, 4, 17, -12, 62,
+ -88, 47, -38, -50, 71, 52, -22, 12, -3, 29, -84, 10, 29, 43, 20, -43,
+ -18, 19, 41, 2, -70, 50, -8, 69, -39, -28, 48, -43, 51, -13, -39, 39,
+ -50, -21, 70, -53, 6, -12, 4, 35, -46, 5, -55, 47, -36, -18, -44, 48,
+ -40, -11, 17, -30, 25, 47, -66, 48, -56, -41, 13, -65, -1, -11, 27, 34,
+ -81, 42, 39, -18, -8, 29, -54, 14, -46, 29, -6, 2, 60, -5, 19, -31,
+ 1, 25, -3, 3, 16, 20, 16, -27, -91, 71, -70, 21, 32, -57, -15, 45,
+ -56, 9, -51, 8, -25, -28, 48, -87, 58, -91, 25, 24, 11, -96, 105, -56,
+ 71, -41, 21, 41, -42, -67, 66, -67, -16, -55, 45, 34, -50, -18, 20, -37,
+ 52, 18, 1, 86, -49, 33, -90, 82, 9, 30, 16, -83, 17, -17, -5, 32,
+ 0, 35, -54, 63, -52, 32, -38, -12, 40, -47, 6, -78, 30, -75, 22, -49,
+ 76, -82, -29, -76, 49, -50, 104, -41, -55, 18, -35, 0, 34, -8, -25, 58,
+ -1, 13, 4, 9, -20, 40, 23, 56, 61, -76, 72, -45, -3, -8, 40, -44,
+ 20, -57, -1, -68, -9, -5, -1, -31, 52, 29, -60, 100, -82, -36, 12, 10,
+ -58, -2, -57, -15, -28, -33, -26, -31, 0, -19, -7, 46, 46, -4, -43, -42,
+ -35, 14, -31, 21, 17, 25, -68, 40, -54, -39, 18, -40, 17, -53, 34, 32,
+ -15, 52, -87, 62, -35, -4, 54, -7, 33, -25, -14, 1, 1, -22, -4, 0,
+ 49, 31, -4, 41, -57, -14, -12, -2, 15, 45, 25, -20, -39, -43, 21, 42,
+ -45, 44, -3, 19, 0, 30, -37, -25, -23, 23, -23, 15, 18, 32, -50, 28,
+ 10, 45, -76, 78, -69, 19, -32, 58, -46, 32, 45, -6, -39, 50, 0, 14,
+ 58, -26, -4, -41, 27, -37, -12, 22, 40, 63, -32, 46, 32, 18, -38, 0,
+ -7, 14, -55, 32, -43, 17, -18, 24, 8, 8, -65, 35, -52, 2, 10, -45,
+ 36, 9, -24, -20, 22, -2, -35, 51, 19, -1, 17, -6, -34, 47, 9, 8,
+ -18, 62, -32, 22, 2, 12, 32, 57, 22, 63, -1, -60, 3, 74, -83, -17,
+ 21, -15, -7, 19, -44, 96, -28, 40, -22, 89, -103, 54, 31, 2, 21, -32,
+ -11, 4, 8, -64, 27, -27, 77, -52, 2, 8, -53, 73, -6, -4, -37, -44,
+ 38, -10, 0, 15, 6, -52, 51, -30, -40, 41, -81, 97, -56, 81, -72, 66,
+ -52, 44, 56, 50, -63, 80, -81, 52, -5, 12, -3, 53, -15, 22, -66, -2,
+ -69, 45, -52, 54, -88, 41, 33, -89, -18, 96, -84, 61, 30, -66, 61, -40,
+ 66, 20, 30, 57, 18, -37, 13, 59, -8, -55, 86, -62, 31, 66, 5, 29,
+ 67, -59, 53, 51, -48, 38, 59, -13, 37, -62, 23, -32, -41, -10, -5, 51,
+ 54, -44, 78, -9, -29, -2, -3, 44, 43, -37, 78, -27, -8, 47, -23, -41,
+ 6, 25, 70, -9, -14, 62, -60, -30, -65, 60, -1, -33, 50, 14, -47, 77,
+ -77, -20, 0, -10, 34, 39, -28, 14, -48, -48, 9, -33, 34, 51, -3, -21,
+ 33, 0, -37, -31, -2, -2, -5, 42, -37, 14, 23, -45, -31, 36, 57, -55,
+ 47, -62, 47, -18, 53, 43, -28, -74, 82, 10, -52, 30, -4, 68, -67, -23,
+ -1, -7, -22, 72, -9, 10, 9, 12, -53, -51, 25, -26, -73, -11, 29, -55,
+ 52, -52, 17, 17, -40, 51, 27, -53, 29, -42, 60, 67, -71, 105, -60, 65,
+ -37, -15, 0, 20, 3, 51, -74, 60, -83, 66, -41, -2, -9, 63, -88, 83,
+ -63, 38, -7, -35, 27, -32, 3, -83, -14, -68, 52, 5, -44, 20, 58, -25,
+ -16, -9, 52, -48, 12, -55, -51, 3, 68, -57, 52, -30, -55, 67, -49, -12,
+ 20, 16, -22, 16, -74, 80, -34, 7, -30, -1, 64, -19, -5, 35, 9, 31,
+ -65, 6, 45, -6, 11, 59, -74, 63, -26, 50, 56, -50, 57, -95, 36, -21,
+ 51, -49, -69, 74, -31, 4, -13, -41, 56, -87, 34, -78, 51, -46, 64, 47,
+ 28, 10, 0, 15, 29, 24, -57, 75, 7, -65, -16, 5, -61, 82, -42, -35,
+ -26, -53, 73, -62, 20, -48, 31, -50, -23, -28, 8, -36, 23, -38, -59, 21,
+ -56, 69, -78, 41, -16, -30, -23, 61, -42, 67, -30, 4, 54, -6, -6, 21,
+ -38, 4, -24, -35, 30, 39, 2, -46, -54, 79, -98, 47, -13, -22, -30, 3,
+ 36, -65, -95, 61, -46, -4, 27, 18, 28, -28, -12, -11, -17, 41, -43, -38,
+ 27, -6, -20, 5, -33, 15, -30, -10, 51, -24, 35, 31, 12, -61, 2, -8,
+ -30, 14, -2, -8, 68, -39, -18, -2, -3, -6, 61, -45, 54, -47, -56, 49,
+ -10, 22, -58, 51, -59, 18, -69, 92, -78, -49, 59, -4, -52, -58, 87, -48,
+ 55, -45, 24, -12, -66, 37, -79, 44, -28, 54, -25, 26, 35, 18, 30, -20,
+ -24, 37, 47, -15, 24, -71, 5, 47, -34, 9, -21, -58, 33, -60, 9, -39,
+ -45, 43, 8, -38, -11, 3, 24, -1, 18, -23, 20, 11, -41, -35, 56, 0,
+ -29, 15, 40, -7, -2, -9, -11, 60, 36, -4, 32, -28, -6, 40, -36, 9,
+ 61, -58, 76, -54, 52, 1, 71, -34, -46, -4, 49, -27, 24, -26, 34, -21,
+ 48, -60, 75, -19, 58, -54, -11, 18, 29, -21, -36, -32, -47, -8, 3, 37,
+ 30, 19, -84, 12, -50, 22, 30, -29, -20, -11, -42, 0, 0, 59, 6, 14,
+ -33, 80, -37, -33, -39, 8, 38, 31, -13, 77, 27, 2, 5, -1, -32, -68,
+ 45, -54, 18, -60, -23, -5, 4, -46, 9, 29, 52, -17, 13, 30, -72, 83,
+ 13, -5, -58, 11, -14, 91, -57, 71, 30, 58, 0, 4, -35, 68, 10, -13,
+ -18, -37, 27, -1, -11, 21, 17, -59, 19, 4, -24, 67, -59, 2, 16, -2,
+ 18, 60, -33, -24, 43, -31, -27, 55, -34, -2, 52, -42, -8, 2, 31, 3,
+ -35, 58, 62, 15, 15, 15, 8, 56, -43, -9, 63, -40, 60, -11, 44, 10,
+ -15, 65, 35, -27, -25, 41, 53, -6, -35, 40, 3, 14, -53, 20, -7, 34,
+ -28, -9, -17, 7, 26, -35, 14, 39, -17, 16, -59, 1, -28, -46, 75, -25,
+ -85, 17, 48, -59, -13, 45, 8, 8, 29, -12, -13, 26, 2, 63, -79, 34,
+ -76, 42, -34, 49, 29, 40, 48, -42, -11, 39, 15, -19, 12, 4, -75, 80,
+ -77, 78, -87, 14, 7, 35, -15, -8, -58, 77, -59, 23, 34, 9, -36, 42,
+ 63, -41, 12, 36, -4, -25, 12, 12, -14, 32, -36, -17, 100, -56, -41, -34,
+ -9, -25, -1, 2, 30, 44, -42, -60, 57, -77, -1, 11, -8, 15, -13, -5,
+ -35, 3, -58, 19, -36, 46, -71, 61, -15, -8, -60, -13, -2, -31, -13, -9,
+ -30, 58, -67, -34, 46, -6, -18, 13, 11, -49, 6, 64, 16, 51, -29, -35,
+ -41, 5, 47, 36, -41, 47, -17, 17, -23, 29, 42, -25, 22, -114, 69, -43,
+ -33, -31, 25, 66, 24, -57, 56, -61, -18, -39, -66, 58, -47, -20, 93, -50,
+ 49, 6, 6, 58, -4, -35, 4, 3, 55, -26, -48, 40, 7, -42, 62, -39,
+ -22, 1, 8, 66, -26, -37, -51, 13, -43, -46, -6, 5, 30, -55, 12, -27,
+ 92, -16, -32, -22, 5, 0, 38, -1, -35, -40, 67, -41, -26, 16, 7, -17,
+ -51, -41, 18, 24, -47, 7, -48, 7, -16, -15, 8, 14, 31, 0, -41, 25,
+ 8, -17, -59, -12, -32, -46, 16, -47, -17, 27, 9, -21, -18, -41, 19, -37,
+ 13, -43, -63, 61, 18, -56, -22, -52, 62, -35, -56, 30, 57, -44, -3, 0,
+ 12, -1, 24, 3, 0, -23, 29, -6, 42, -59, 45, 52, -1, 46, -51, 66};
diff --git a/gs/toolbin/halftone/ETS/win32/ETS.sln b/gs/toolbin/halftone/ETS/win32/ETS.sln
new file mode 100644
index 000000000..63c293e38
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/win32/ETS.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ETS", "ETS.vcproj", "{9F937420-ED89-4C41-AED3-52937666B60E}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9F937420-ED89-4C41-AED3-52937666B60E}.Debug|Win32.ActiveCfg = Debug|Win32
+ {9F937420-ED89-4C41-AED3-52937666B60E}.Debug|Win32.Build.0 = Debug|Win32
+ {9F937420-ED89-4C41-AED3-52937666B60E}.Release|Win32.ActiveCfg = Release|Win32
+ {9F937420-ED89-4C41-AED3-52937666B60E}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/gs/toolbin/halftone/ETS/win32/ETS.vcproj b/gs/toolbin/halftone/ETS/win32/ETS.vcproj
new file mode 100644
index 000000000..09f6c14d2
--- /dev/null
+++ b/gs/toolbin/halftone/ETS/win32/ETS.vcproj
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="ETS"
+ ProjectGUID="{9F937420-ED89-4C41-AED3-52937666B60E}"
+ RootNamespace="ETS"
+ TargetFrameworkVersion="196613"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ WarningLevel="3"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ EnableIntrinsicFunctions="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ WarningLevel="3"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\ets.c"
+ >
+ </File>
+ <File
+ RelativePath="..\test_ets.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\ets.h"
+ >
+ </File>
+ <File
+ RelativePath="..\tm.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>