diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3069f7d0faf59e8e99c0263f65cb8bd3efc8bbc3..65771af17e4d3f67200bd0c5a689f72309bb7c7e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,33 +1,22 @@ -variables: - GIT_SUBMODULE_STRATEGY: recursive +image: mambaorg/micromamba stages: - - build - - test + - build_and_test -build: - stage: build - image: gcc - before_script: - - apt update && apt -y install make autoconf cmake +build-and-test: + stage: build_and_test script: - - mkdir build - - cmake -S . -B build - - cmake --build build - artifacts: - expire_in: 2 hrs - paths: - - build/ - -test: - stage: test - image: python:3.9.13 - script: - # print Python version - - python --version - # install test suite dependencies - - python -m pip install numpy - # run test suite + # install dependencies + - micromamba install --yes --file environment.yml + # vendor evalhyd (while waiting for evalhyd to be uploaded to conda-forge) + - micromamba install --yes -c conda-forge git + - git clone https://gitlab.irstea.fr/HYCAR-Hydro/evalhyd/evalhyd-cpp deps/evalhyd-cpp --branch v0.1.0 + # configure evalhyd + - cmake -B build -D CMAKE_BUILD_TYPE=Release -D CMAKE_PREFIX_PATH="$CONDA_PREFIX" -D EVALHYD_SRC="${PWD}/deps/evalhyd-cpp" + # compile evalhyd + - cmake --build build --parallel + # install evalhyd + - cmake --install build/ --prefix local/ + - export PATH="${PWD}/local/bin:${PATH}" + # run tests - (cd ./tests && python run_all_tests.py) - dependencies: - - build diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 50a637b462cbde3458b078cd41b30456699d558f..0000000000000000000000000000000000000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "deps/evalhyd"] - path = deps/evalhyd - url = https://gitlab.irstea.fr/HYCAR-Hydro/evalhyd/evalhyd.git -[submodule "deps/CLI11"] - path = deps/CLI11 - url = https://github.com/CLIUtils/CLI11 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b4f297d8e48107712596513660ddb120a97e8da..a530b51c5e01e2460307436fa2bcae7a74d25f34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,33 +1,73 @@ -cmake_minimum_required(VERSION 3.18) -project(evalhyd_cli) +cmake_minimum_required(VERSION 3.15) -set(CMAKE_CXX_STANDARD 17) +project( + EvalHyd-CLI + LANGUAGES CXX + VERSION 0.1.0.0 + DESCRIPTION "Command line interface for EvalHyd" +) + +# ------------------------------------------------------------------------------ +# dependencies +# ------------------------------------------------------------------------------ + +find_package(xtl 0.7.5 REQUIRED) +message(STATUS "Found xtl: ${xtensor_INCLUDE_DIRS}/xtl") -if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(CMAKE_CXX_FLAGS "-O3") +find_package(xtensor 0.24.6 REQUIRED) +message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor") + +if(DEFINED EVALHYD_SRC) + set(EVALHYD_BUILD_TEST OFF CACHE BOOL "configure and compile tests") + add_subdirectory(${EVALHYD_SRC} deps/evalhyd-cpp) else() - set(CMAKE_CXX_FLAGS "--static -O3") + find_package(EvalHyd 0.1.0 REQUIRED) + message(STATUS "Found EvalHyd: ${EvalHyd_INCLUDE_DIRS}/evalhyd") endif() -include_directories("./src") -include_directories("./deps/evalhyd/include") -include_directories("./deps/evalhyd/src") -include_directories("./deps/evalhyd/deps/xtl/include") -include_directories("./deps/evalhyd/deps/xtensor/include") +find_package(CLI11 CONFIG REQUIRED) + +# ------------------------------------------------------------------------------ +# build +# ------------------------------------------------------------------------------ + +# define evalhyd-cli library +add_library( + evalhyd-cli + ${CMAKE_CURRENT_SOURCE_DIR}/src/evald.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/src/evalp.cpp +) + +add_library(EvalHyd-CLI::evalhyd-cli ALIAS evalhyd-cli) + +set_target_properties( + evalhyd-cli + PROPERTIES + VISIBILITY_INLINES_HIDDEN ON +) -include_directories("./deps/CLI11/include") +target_include_directories( + evalhyd-cli + PUBLIC + $<INSTALL_INTERFACE:include> + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/src +) -set( - EVALHYD_SRC - ./deps/evalhyd/src/probabilist/evaluator_brier.cpp - ./deps/evalhyd/src/probabilist/evaluator_elements.cpp - ./deps/evalhyd/src/probabilist/evaluator_quantiles.cpp +target_link_libraries( + evalhyd-cli + PUBLIC + xtensor + EvalHyd::evalhyd + CLI11::CLI11 ) -add_executable( - evalhyd - src/evald.cpp - src/evalp.cpp - src/evalhyd-cli.cpp - ${EVALHYD_SRC} +target_compile_features( + evalhyd-cli + PUBLIC + cxx_std_17 ) + +# add CLI application +add_subdirectory(apps) diff --git a/LICENCE.rst b/LICENCE.rst new file mode 100644 index 0000000000000000000000000000000000000000..23f589cb52912b4a70adac8992cf11dbb4054caa --- /dev/null +++ b/LICENCE.rst @@ -0,0 +1,619 @@ +GNU General Public License + +Version 3, 29 June 2007 +Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/> + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble +-------- + +The GNU General Public License is a free, copyleft license for software and other +kinds of works. + +The licenses for most software and other practical works are designed to take away +your freedom to share and change the works. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change all versions of a +program--to make sure it remains free software for all its users. We, the Free +Software Foundation, use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or +asking you to surrender the rights. Therefore, you have certain responsibilities if +you distribute copies of the software, or if you modify it: responsibilities to +respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, +you must pass on to the recipients the same freedoms that you received. 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. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert +copyright on the software, and (2) offer you this License giving you legal permission +to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is +no warranty for this free software. For both users' and authors' sake, the GPL +requires that modified versions be marked as changed, so that their problems will not +be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of +the software inside them, although the manufacturer can do so. This is fundamentally +incompatible with the aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we have designed +this version of the GPL to prohibit the practice for those products. If such problems +arise substantially in other domains, we stand ready to extend this provision to +those domains in future versions of the GPL, as needed to protect the freedom of +users. + +Finally, every program is threatened constantly by software patents. States should +not allow patents to restrict development and use of software on general-purpose +computers, but in those that do, we wish to avoid the special danger that patents +applied to a free program could make it effectively proprietary. To prevent this, the +GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +Terms and Conditions +-------------------- + +0. Definitions +^^^^^^^^^^^^^^ + +“This License†refers to version 3 of the GNU General Public License. + +“Copyright†also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +“The Program†refers to any copyrightable work licensed under this +License. Each licensee is addressed as “youâ€. “Licensees†and +“recipients†may be individuals or organizations. + +To “modify†a work means to copy from or adapt all or part of the work in +a fashion requiring copyright permission, other than the making of an exact copy. The +resulting work is called a “modified version†of the earlier work or a +work “based on†the earlier work. + +A “covered work†means either the unmodified Program or a work based on +the Program. + +To “propagate†a work means to do anything with it that, without +permission, would make you directly or secondarily liable for infringement under +applicable copyright law, except executing it on a computer or modifying a private +copy. Propagation includes copying, distribution (with or without modification), +making available to the public, and in some countries other activities as well. + +To “convey†a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through a computer +network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices†to the +extent that it includes a convenient and prominently visible feature that (1) +displays an appropriate copyright notice, and (2) tells the user that there is no +warranty for the work (except to the extent that warranties are provided), that +licensees may convey the work under this License, and how to view a copy of this +License. If the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code +^^^^^^^^^^^^^^ + +The “source code†for a work means the preferred form of the work for +making modifications to it. “Object code†means any non-source form of a +work. + +A “Standard Interface†means an interface that either is an official +standard defined by a recognized standards body, or, in the case of interfaces +specified for a particular programming language, one that is widely used among +developers working in that language. + +The “System Libraries†of an executable work include anything, other than +the work as a whole, that (a) is included in the normal form of packaging a Major +Component, but which is not part of that Major Component, and (b) serves only to +enable use of the work with that Major Component, or to implement a Standard +Interface for which an implementation is available to the public in source code form. +A “Major Componentâ€, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system (if any) on which +the executable work runs, or a compiler used to produce the work, or an object code +interpreter used to run it. + +The “Corresponding Source†for a work in object code form means all the +source code needed to generate, install, and (for an executable work) run the object +code and to modify the work, including scripts to control those activities. However, +it does not include the work's System Libraries, or general-purpose tools or +generally available free programs which are used unmodified in performing those +activities but which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for the work, and +the source code for shared libraries and dynamically linked subprograms that the work +is specifically designed to require, such as by intimate data communication or +control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate +automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions +^^^^^^^^^^^^^^^^^^^^ + +All rights granted under this License are granted for the term of copyright on the +Program, and are irrevocable provided the stated conditions are met. This License +explicitly affirms your unlimited permission to run the unmodified Program. The +output from running a covered work is covered by this License only if the output, +given its content, constitutes a covered work. This License acknowledges your rights +of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without +conditions so long as your license otherwise remains in force. You may convey covered +works to others for the sole purpose of having them make modifications exclusively +for you, or provide you with facilities for running those works, provided that you +comply with the terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for you must do so +exclusively on your behalf, under your direction and control, on terms that prohibit +them from making any copies of your copyrighted material outside their relationship +with you. + +Conveying under any other circumstances is permitted solely under the conditions +stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +No covered work shall be deemed part of an effective technological measure under any +applicable law fulfilling obligations under article 11 of the WIPO copyright treaty +adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention +of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of +technological measures to the extent such circumvention is effected by exercising +rights under this License with respect to the covered work, and you disclaim any +intention to limit operation or modification of the work as a means of enforcing, +against the work's users, your or third parties' legal rights to forbid circumvention +of technological measures. + +4. Conveying Verbatim Copies +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You may convey 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; keep intact all notices stating that this License and +any non-permissive terms added in accord with section 7 apply to the code; keep +intact all notices of the absence of any warranty; and give all recipients a copy of +this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer +support or warranty protection for a fee. + +5. Conveying Modified Source Versions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You may convey a work based on the Program, or the modifications to produce it from +the Program, in the form of source code under the terms of section 4, provided that +you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a + relevant date. + b) The work must carry prominent notices stating that it is released under this + License and any conditions added under section 7. This requirement modifies the + requirement in section 4 to “keep intact all noticesâ€. + c) You must license the entire work, as a whole, under this License to anyone who + comes into possession of a copy. This License will therefore apply, along with any + applicable section 7 additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no permission to license the + work in any other way, but it does not invalidate such permission if you have + separately received it. + d) If the work has interactive user interfaces, each must display Appropriate Legal + Notices; however, if the Program has interactive interfaces that do not display + Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are +not by their nature extensions of the covered work, and which are not combined with +it such as to form a larger program, in or on a volume of a storage or distribution +medium, is called an “aggregate†if the compilation and its resulting +copyright are not used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work in an aggregate +does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You may convey a covered work in object code form under the terms of sections 4 and +5, provided that you also convey the machine-readable Corresponding Source under the +terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a + physical distribution medium), accompanied by the Corresponding Source fixed on a + durable physical medium customarily used for software interchange. + b) Convey the object code in, or embodied in, a physical product (including a + physical distribution medium), accompanied by a written offer, valid for at least + three years and valid for as long as you offer spare parts or customer support for + that product model, to give anyone who possesses the object code either (1) a copy of + the Corresponding Source for all the software in the product that is covered by this + License, on a durable physical medium customarily used for software interchange, for + a price no more than your reasonable cost of physically performing this conveying of + source, or (2) access to copy the Corresponding Source from a network server at no + charge. + c) Convey individual copies of the object code with a copy of the written offer to + provide the Corresponding Source. This alternative is allowed only occasionally and + noncommercially, and only if you received the object code with such an offer, in + accord with subsection 6b. + d) Convey the object code by offering access from a designated place (gratis or for + a charge), and offer equivalent access to the Corresponding Source in the same way + through the same place at no further charge. You need not require recipients to copy + the Corresponding Source along with the object code. If the place to copy the object + code is a network server, the Corresponding Source may be on a different server + (operated by you or a third party) that supports equivalent copying facilities, + provided you maintain clear directions next to the object code saying where to find + the Corresponding Source. Regardless of what server hosts the Corresponding Source, + you remain obligated to ensure that it is available for as long as needed to satisfy + these requirements. + e) Convey the object code using peer-to-peer transmission, provided you inform + other peers where the object code and Corresponding Source of the work are being + offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the +Corresponding Source as a System Library, need not be included in conveying the +object code work. + +A “User Product†is either (1) a “consumer productâ€, which +means any tangible personal property which is normally used for personal, family, or +household purposes, or (2) anything designed or sold for incorporation into a +dwelling. In determining whether a product is a consumer product, doubtful cases +shall be resolved in favor of coverage. For a particular product received by a +particular user, “normally used†refers to a typical or common use of +that class of product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected to use, the +product. A product is a consumer product regardless of whether the product has +substantial commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +“Installation Information†for a User Product means any methods, +procedures, authorization keys, or other information required to install and execute +modified versions of a covered work in that User Product from a modified version of +its Corresponding Source. The information must suffice to ensure that the continued +functioning of the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for +use in, a User Product, and the conveying occurs as part of a transaction in which +the right of possession and use of the User Product is transferred to the recipient +in perpetuity or for a fixed term (regardless of how the transaction is +characterized), the Corresponding Source conveyed under this section must be +accompanied by the Installation Information. But this requirement does not apply if +neither you nor any third party retains the ability to install modified object code +on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to +continue to provide support service, warranty, or updates for a work that has been +modified or installed by the recipient, or for the User Product in which it has been +modified or installed. Access to a network may be denied when the modification itself +materially and adversely affects the operation of the network or violates the rules +and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with +this section must be in a format that is publicly documented (and with an +implementation available to the public in source code form), and must require no +special password or key for unpacking, reading or copying. + +7. Additional Terms +^^^^^^^^^^^^^^^^^^^ + +“Additional permissions†are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. Additional +permissions that are applicable to the entire Program shall be treated as though they +were included in this License, to the extent that they are valid under applicable +law. If additional permissions apply only to part of the Program, that part may be +used separately under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any +additional permissions from that copy, or from any part of it. (Additional +permissions may be written to require their own removal in certain cases when you +modify the work.) You may place additional permissions on material, added by you to a +covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a +covered work, you may (if authorized by the copyright holders of that material) +supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of + sections 15 and 16 of this License; or + b) Requiring preservation of specified reasonable legal notices or author + attributions in that material or in the Appropriate Legal Notices displayed by works + containing it; or + c) Prohibiting misrepresentation of the origin of that material, or requiring that + modified versions of such material be marked in reasonable ways as different from the + original version; or + d) Limiting the use for publicity purposes of names of licensors or authors of the + material; or + e) Declining to grant rights under trademark law for use of some trade names, + trademarks, or service marks; or + f) Requiring indemnification of licensors and authors of that material by anyone + who conveys the material (or modified versions of it) with contractual assumptions of + liability to the recipient, for any liability that these contractual assumptions + directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further +restrictions†within the meaning of section 10. If the Program as you received +it, or any part of it, contains a notice stating that it is governed by this License +along with a term that is a further restriction, you may remove that term. If a +license document contains a further restriction but permits relicensing or conveying +under this License, you may add to a covered work material governed by the terms of +that license document, provided that the further restriction does not survive such +relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in +the relevant source files, a statement of the additional terms that apply to those +files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a +separately written license, or stated as exceptions; the above requirements apply +either way. + +8. Termination +^^^^^^^^^^^^^^ + +You may not propagate or modify a covered work except as expressly provided under +this License. Any attempt otherwise to propagate or modify it is void, and will +automatically terminate your rights under this License (including any patent licenses +granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a +particular copyright holder is reinstated (a) provisionally, unless and until the +copyright holder explicitly and finally terminates your license, and (b) permanently, +if the copyright holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently +if the copyright holder notifies you of the violation by some reasonable means, this +is the first time you have received notice of violation of this License (for any +work) from that copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of +parties who have received copies or rights from you under this License. If your +rights have been terminated and not permanently reinstated, you do not qualify to +receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You are not required to accept this License in order to receive or run a copy of the +Program. Ancillary propagation of a covered work occurring solely as a consequence of +using peer-to-peer transmission to receive a copy likewise does not require +acceptance. However, nothing other than this License grants you permission to +propagate or modify any covered work. These actions infringe copyright if you do not +accept this License. Therefore, by modifying or propagating a covered work, you +indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each time you convey a covered work, the recipient automatically receives a license +from the original licensors, to run, modify and propagate that work, subject to this +License. You are not responsible for enforcing compliance by third parties with this +License. + +An “entity transaction†is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an organization, or +merging organizations. If propagation of a covered work results from an entity +transaction, each party to that transaction who receives a copy of the work also +receives whatever licenses to the work the party's predecessor in interest had or +could give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if the predecessor +has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or +affirmed under this License. For example, you may not impose a license fee, royalty, +or other charge for exercise of rights granted under this License, and you may not +initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging +that any patent claim is infringed by making, using, selling, offering for sale, or +importing the Program or any portion of it. + +11. Patents +^^^^^^^^^^^ + +A “contributor†is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The work thus +licensed is called the contributor's “contributor versionâ€. + +A contributor's “essential patent claims†are all patent claims owned or +controlled by the contributor, whether already acquired or hereafter acquired, that +would be infringed by some manner, permitted by this License, of making, using, or +selling its contributor version, but do not include claims that would be infringed +only as a consequence of further modification of the contributor version. For +purposes of this definition, “control†includes the right to grant patent +sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license +under the contributor's essential patent claims, to make, use, sell, offer for sale, +import and otherwise run, modify and propagate the contents of its contributor +version. + +In the following three paragraphs, a “patent license†is any express +agreement or commitment, however denominated, not to enforce a patent (such as an +express permission to practice a patent or covenant not to sue for patent +infringement). To “grant†such a patent license to a party means to make +such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the +Corresponding Source of the work is not available for anyone to copy, free of charge +and under the terms of this License, through a publicly available network server or +other readily accessible means, then you must either (1) cause the Corresponding +Source to be so available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner consistent with +the requirements of this License, to extend the patent license to downstream +recipients. “Knowingly relying†means you have actual knowledge that, but +for the patent license, your conveying the covered work in a country, or your +recipient's use of the covered work in a country, would infringe one or more +identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you +convey, or propagate by procuring conveyance of, a covered work, and grant a patent +license to some of the parties receiving the covered work authorizing them to use, +propagate, modify or convey a specific copy of the covered work, then the patent +license you grant is automatically extended to all recipients of the covered work and +works based on it. + +A patent license is “discriminatory†if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on the +non-exercise of one or more of the rights that are specifically granted under this +License. You may not convey a covered work if you are a party to an arrangement with +a third party that is in the business of distributing software, under which you make +payment to the third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties who would receive +the covered work from you, a discriminatory patent license (a) in connection with +copies of the covered work conveyed by you (or copies made from those copies), or (b) +primarily for and in connection with specific products or compilations that contain +the covered work, unless you entered into that arrangement, or that patent license +was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied +license or other defenses to infringement that may otherwise be available to you +under applicable patent law. + +12. No Surrender of Others' Freedom +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If 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 convey a covered work so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not convey it at all. For example, if you +agree to terms that obligate you to collect a royalty for further conveying from +those to whom you convey the Program, the only way you could satisfy both those terms +and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Notwithstanding any other provision of this License, you have permission to link or +combine any covered work with a work licensed under version 3 of the GNU Affero +General Public License into a single combined work, and to convey the resulting work. +The terms of this License will continue to apply to the part which is the covered +work, but the special requirements of the GNU Affero General Public License, section +13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Free Software Foundation may publish revised and/or new versions of the GNU +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 that +a certain numbered version of the GNU General Public License “or any later +version†applies to it, you have the option of following the terms and +conditions either of that numbered version or of any later version published by the +Free Software Foundation. If the Program does not specify a version number of the GNU +General Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU +General Public License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no +additional obligations are imposed on any author or copyright holder as a result of +your choosing to follow a later version. + +15. Disclaimer of Warranty +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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. + +16. Limitation of Liability +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY +COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. + +17. Interpretation of Sections 15 and 16 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the disclaimer of warranty and limitation of liability provided above cannot be +given local legal effect according to their terms, reviewing courts shall apply local +law that most closely approximates an absolute waiver of all civil liability in +connection with the Program, unless a warranty or assumption of liability accompanies +a copy of the Program in return for a fee. + +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 state the exclusion of warranty; +and each file should have at least the “copyright†line and a pointer to +where the full notice is found. + +.. pull-quote:: + + <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 3 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, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this +when it starts in an interactive mode: + +.. pull-quote:: + + <program> Copyright (C) <year> <name of author> + This program 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, your program's commands might be different; +for a GUI interface, you would use an “about boxâ€. + +You should also get your employer (if you work as a programmer) or school, if any, to +sign a “copyright disclaimer†for the program, if necessary. For more +information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + +The GNU 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 Lesser General Public License instead of this +License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. \ No newline at end of file diff --git a/README.md b/README.md index 188f3a79e46a7d3a4a78144b68abf25d909b512e..f7cfe739334a47b1a7953bfdf82e04fcb93128a9 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ Command line interface for `evalhyd` utility -Documentation: https://hycar-hydro.gitlab.irstea.page/evalhyd/evalhyd-docs/cli +Documentation: https://hydrogr.github.io/evalhyd/cli diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1dc4a6879242c0703fde35e04aa0543c914eb3da --- /dev/null +++ b/apps/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.15) + +# ------------------------------------------------------------------------------ +# build +# ------------------------------------------------------------------------------ + +add_executable( + evalhyd-app + evalhyd-cli.cpp +) + +target_compile_features( + evalhyd-app + PRIVATE + cxx_std_17 +) + +target_link_libraries( + evalhyd-app + PRIVATE + EvalHyd-CLI::evalhyd-cli + CLI11::CLI11 +) + +set_target_properties( + evalhyd-app PROPERTIES + OUTPUT_NAME evalhyd +) + +# ------------------------------------------------------------------------------ +# installation +# ------------------------------------------------------------------------------ + +install( + TARGETS evalhyd-app +) diff --git a/src/evalhyd-cli.cpp b/apps/evalhyd-cli.cpp similarity index 90% rename from src/evalhyd-cli.cpp rename to apps/evalhyd-cli.cpp index cc40b5923f47cf1aab0b887c38b0c65c3fe23282..040eebc8b1af4c3091eab31fd2de05defbfc7970 100644 --- a/src/evalhyd-cli.cpp +++ b/apps/evalhyd-cli.cpp @@ -1,7 +1,7 @@ #include <CLI/CLI.hpp> -#include "evald.h" -#include "evalp.h" +#include "evalhyd-cli/evald.hpp" +#include "evalhyd-cli/evalp.hpp" /// Main program implementing the Command Line Interface. int main(int argc, char **argv) { diff --git a/changelog.rst b/changelog.rst new file mode 100644 index 0000000000000000000000000000000000000000..91f4f5149d4f45b83ceb83ba7554ad97f89c0061 --- /dev/null +++ b/changelog.rst @@ -0,0 +1,14 @@ +.. default-role:: obj + +.. + latest + ------ + + Yet to be versioned and released. Only available from *dev* branch until then. + +v0.1.0.0 +-------- + +Released on 2023-04-14. + +* first release diff --git a/deps/CLI11 b/deps/CLI11 deleted file mode 160000 index b9be5b9444772324459989177108a6a65b8b2769..0000000000000000000000000000000000000000 --- a/deps/CLI11 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b9be5b9444772324459989177108a6a65b8b2769 diff --git a/deps/evalhyd b/deps/evalhyd deleted file mode 160000 index 592caff2eafc89a3cad9da4d47bb1a2eb777b2eb..0000000000000000000000000000000000000000 --- a/deps/evalhyd +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 592caff2eafc89a3cad9da4d47bb1a2eb777b2eb diff --git a/environment.yml b/environment.yml new file mode 100644 index 0000000000000000000000000000000000000000..53aae3aa14844b30a4492215d41c66d5090f1300 --- /dev/null +++ b/environment.yml @@ -0,0 +1,16 @@ +channels: + - conda-forge +dependencies: + # Build dependencies + - cxx-compiler + - c-compiler + - cmake + - make + # Host dependencies + - xtl==0.7.5 + - xtensor==0.24.6 +#TODO: - evalhyd==0.1.0 + - cli11 + # Test dependencies + - python + - numpy diff --git a/include/evalhyd-cli/evald.hpp b/include/evalhyd-cli/evald.hpp new file mode 100644 index 0000000000000000000000000000000000000000..63bc8e55a04591de87b399d05333f239345b1ea8 --- /dev/null +++ b/include/evalhyd-cli/evald.hpp @@ -0,0 +1,8 @@ +#ifndef EVALHYD_CLI_EVALD_HPP +#define EVALHYD_CLI_EVALD_HPP + +#include "CLI/CLI.hpp" + +void setup_evald(CLI::App &app); + +#endif //EVALHYD_CLI_EVALD_HPP diff --git a/include/evalhyd-cli/evalp.hpp b/include/evalhyd-cli/evalp.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f61e88f9de0cdf2aa25cbaa78d3758548eaf97fa --- /dev/null +++ b/include/evalhyd-cli/evalp.hpp @@ -0,0 +1,8 @@ +#ifndef EVALHYD_CLI_EVALP_HPP +#define EVALHYD_CLI_EVALP_HPP + +#include "CLI/CLI.hpp" + +void setup_evalp(CLI::App &app); + +#endif //EVALHYD_CLI_EVALP_HPP diff --git a/src/evald.cpp b/src/evald.cpp index 80286deb4caf7026af598d541255f534c8ea5f86..f37c2d103bfcffae222783be7aa0aeb718e392bf 100644 --- a/src/evald.cpp +++ b/src/evald.cpp @@ -8,9 +8,11 @@ #include <stdexcept> #include <memory> #include <algorithm> +#include <optional> #include <CLI/CLI.hpp> +#include <xtl/xoptional.hpp> #include <xtensor/xtensor.hpp> #include <xtensor/xarray.hpp> #include <xtensor/xview.hpp> @@ -20,7 +22,7 @@ #include <evalhyd/evald.hpp> -#include "evald.h" +#include "evalhyd-cli/evald.hpp" /// Data structure to store flags and options for 'evald' subcommand interface. struct EvalDInterface @@ -36,19 +38,26 @@ struct EvalDInterface // set default output directory std::string output_dir = "."; + // optionals related to thresholds-based metrics + std::string thr = {}; + std::optional<std::string> events; + // optionals related to flow transformation - std::string transform = "none"; - double exponent = 1; - double epsilon = -9; + std::optional<std::string> transform; + std::optional<double> exponent; + std::optional<double> epsilon; // optionals related to temporal subsetting std::string msk; std::string cdt; // optionals related to bootstrapping - std::vector<std::string> bootstrap = - {"n_samples", "-9", "len_sample", "-9", "summary", "0"}; + std::optional<std::vector<std::string>> bootstrap; std::string dts; + std::optional<int> seed; + + // optionals related to diagnostics + std::optional<std::vector<std::string>> diags; }; /// Procedure to run 'evald' subcommand (making use of evalhyd). @@ -66,115 +75,217 @@ void run_evald(EvalDInterface const &opt) xt::xtensor<double, 2> predicted = xt::load_csv<double>(in_file); in_file.close(); + // retrieve dimensions + std::size_t n_srs = predicted.shape(0); + std::size_t n_tim = predicted.shape(1); + // process temporal masks (if provided) - xt::xtensor<bool, 2> masks; - xt::xtensor<std::array<char, 32>, 1> conditions; + xt::xtensor<bool, 3> masks; + xt::xtensor<std::array<char, 32>, 2> conditions; - if (not opt.msk.empty()) + if (!opt.msk.empty()) { + // read file to determine number of masks in_file.open(opt.msk); - masks = xt::load_csv<double>(in_file); + auto n_lin = xt::load_csv<double>(in_file).shape(0); + in_file.close(); + + std::size_t n_msk = 0; + if (n_lin % n_srs == 0) + { + n_msk = n_lin / n_srs; + } + else + { + throw std::runtime_error( + "number of temporal masks is not a multiple of number of " + "prediction series" + ); + } + + // read and reshape CSV data into 3D tensor + in_file.open(opt.msk); + masks = xt::reshape_view( + xt::load_csv<bool>(in_file), {n_srs, n_msk, n_tim} + ); in_file.close(); } - else if (not opt.cdt.empty()) + else if (!opt.cdt.empty()) { - // use masking conditions file to determine number of masks + // read CSV data in_file.open(opt.cdt); - std::size_t n_msk = 0; - std::string line; - while (std::getline(in_file, line)) - n_msk++; + xt::xtensor<std::string, 2> cdt = xt::load_csv<std::string>(in_file); in_file.close(); - conditions = xt::xtensor<std::array<char, 32>, 1> ({n_msk}); - - in_file.open(opt.cdt); - int ss = 0; - while (std::getline(in_file, line)) + // convert string to 32-byte character array + conditions = xt::xtensor<std::array<char, 32>, 2> (cdt.shape()); + for (std::size_t i = 0; i < cdt.shape(0); i++) { - // remove special characters carriage return/new line - line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); - line.erase(std::remove(line.begin(), line.end(), '\n'), line.end()); + for (std::size_t j = 0; j < cdt.shape(0); j++) + { + auto condition = cdt(i, j); - // convert string to 32-byte character array - std::array<char, 32> arr ({}); - std::copy(line.begin(), line.end(), arr.data()); + std::array<char, 32> arr ({}); + std::copy(condition.begin(), condition.end(), arr.data()); - xt::view(conditions, ss) = arr; - ss++; + xt::view(conditions, i, j) = arr; + } } - in_file.close(); } // rearrange bootstrap parameters into mapping structure std::unordered_map<std::string, int> bootstrap; - if (opt.bootstrap.size() % 2) - { - throw std::runtime_error( - "bootstrap parameters not paired as key/value" - ); - } - else + if (opt.bootstrap.has_value()) { - for (int p = 0; p < opt.bootstrap.size() / 2; p++) + if (opt.bootstrap.value().size() % 2) { - try - { - bootstrap[opt.bootstrap[p*2]] = std::stoi(opt.bootstrap[p*2+1]); - } - catch (const std::invalid_argument& e) + throw std::runtime_error( + "bootstrap parameters not paired as key/value" + ); + } + else + { + for (int p = 0; p < opt.bootstrap.value().size() / 2; p++) { - throw std::runtime_error( - "bootstrap parameter value could not be converted to " - "an integer for key " + opt.bootstrap[p*2] - ); + try + { + bootstrap[opt.bootstrap.value()[p*2]] = + std::stoi(opt.bootstrap.value()[p*2+1]); + } + catch (const std::invalid_argument& e) + { + throw std::runtime_error( + "bootstrap parameter value could not be converted to " + "an integer for key " + opt.bootstrap.value()[p*2] + ); + } } } } + // initialise (and potentially populate) threshold tensor + xt::xtensor<double, 2> thresholds = {}; + + if (!opt.thr.empty()) + { + in_file.open(opt.thr); + thresholds = xt::load_csv<double>(in_file); + in_file.close(); + } + // read datetimes in if provided std::vector<std::string> datetimes = {}; - if (not opt.dts.empty()) + if (!opt.dts.empty()) { in_file.open(opt.dts); std::string dt; while (std::getline(in_file, dt, ',')) + { datetimes.push_back(dt); + } in_file.close(); } // compute metrics std::vector<xt::xarray<double>> results = evalhyd::evald( - observed, predicted, opt.metrics, - opt.transform, opt.exponent, opt.epsilon, - masks, conditions, bootstrap, datetimes + observed, + predicted, + opt.metrics, + thresholds, + (opt.events.has_value()) + ? opt.events.value() + : xtl::missing<std::string>(), + (opt.transform.has_value()) + ? opt.transform.value() + : xtl::missing<std::string>(), + (opt.exponent.has_value()) + ? opt.exponent.value() + : xtl::missing<double>(), + (opt.epsilon.has_value()) + ? opt.epsilon.value() + : xtl::missing<double>(), + masks, + conditions, + (opt.bootstrap.has_value()) + ? bootstrap + : xtl::missing<std::unordered_map<std::string, int>>(), + datetimes, + (opt.seed.has_value()) + ? opt.seed.value() + : xtl::missing<int>(), + (opt.diags.has_value()) + ? opt.diags.value() + : xtl::missing<std::vector<std::string>>() ); // handle output - int m = 0; - for (const auto& metric : opt.metrics) + int v = 0; + + std::vector<std::string> variables = opt.metrics; + if (opt.diags.has_value()) + { + variables.insert( + variables.end(), + opt.diags.value().begin(), opt.diags.value().end() + ); + } + + for (const auto& variable : variables) { // store results into CSV files if(opt.to_file) { - out_file.open(opt.output_dir + "/evald_" += metric + ".csv"); + out_file.open(opt.output_dir + "/evald_" += variable + ".csv"); + + auto result = results[v]; + // 3D: (series, subsets, samples) - xt::dump_csv( - out_file, - xt::reshape_view( - results[m], - {results[m].shape(0) * results[m].shape(1), - results[m].shape(2)} - ) - ); + if (result.dimension() == 3) + { + xt::dump_csv( + out_file, + xt::reshape_view( + result, + {result.shape(0) * result.shape(1), + result.shape(2)} + ) + ); + } + // 4D: (series, subsets, samples, components) + else if (result.dimension() == 4) + { + xt::dump_csv( + out_file, + xt::reshape_view( + result, + {result.shape(0) * result.shape(1) + * result.shape(2), + result.shape(3)} + ) + ); + } + // 5D: (series, subsets, samples, thresholds, cells) + else if (result.dimension() == 5) + { + xt::dump_csv( + out_file, + xt::reshape_view( + result, + {result.shape(0) * result.shape(1) + * result.shape(2) * result.shape(3), + result.shape(4)} + ) + ); + } + out_file.close(); } else { - std::cout << results[m] << std::endl; + std::cout << results[v] << std::endl; } - m++; + v++; } } @@ -197,14 +308,16 @@ void setup_evald(CLI::App &app) "List of evaluation metrics to compute") ->required(); - // flags - sub->add_flag("--to_file", opt->to_file, - "Divert output to CSV file, otherwise output to console"); - // optional parameters - sub->add_option("--out_dir", opt->output_dir, - "Path to output directory") - ->check(CLI::ExistingDirectory); + sub->add_option("--q_thr", opt->thr, + "Path to streamflow thresholds file") + ->check(CLI::ExistingFile); + + sub->add_option("--events", opt->events, + "Type of streamflow events to consider for threshold \n" + "exceedance-based metrics. It can either be set as \n" + "'high' (i.e. above threshold) or as 'low' (i.e. below \n" + "threshold)"); sub->add_option("--transform", opt->transform, "Transformation to apply to both streamflow observations \n" @@ -238,5 +351,19 @@ void setup_evald(CLI::App &app) "Path to datetimes CSV file") ->check(CLI::ExistingFile); + sub->add_option("--seed", opt->seed, + "Value of the seed for the random generator"); + + sub->add_option("--diagnostics", opt->diags, + "List of evaluation diagnostics to compute"); + + sub->add_option("--out_dir", opt->output_dir, + "Path to output directory") + ->check(CLI::ExistingDirectory); + + // flags + sub->add_flag("--to_file", opt->to_file, + "Divert output to CSV file, otherwise output to console"); + sub->callback([opt]() { run_evald(*opt); }); } diff --git a/src/evald.h b/src/evald.h deleted file mode 100644 index b86c6d7760926a0c2f586d84e3e675e3de5c48b7..0000000000000000000000000000000000000000 --- a/src/evald.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef EVALHYD_CLI_EVALD_H -#define EVALHYD_CLI_EVALD_H - -#include <CLI/CLI.hpp> - -void setup_evald(CLI::App &app); - -#endif //EVALHYD_CLI_EVALD_H diff --git a/src/evalp.cpp b/src/evalp.cpp index 981576f2c26f002010e063d7f5cc65d26b9dd1fe..0ceb23655a7143e7446c038484fb64ba3501033c 100644 --- a/src/evalp.cpp +++ b/src/evalp.cpp @@ -11,9 +11,11 @@ #include <stdexcept> #include <numeric> #include <algorithm> +#include <optional> #include <CLI/CLI.hpp> +#include <xtl/xoptional.hpp> #include <xtensor/xtensor.hpp> #include <xtensor/xarray.hpp> #include <xtensor/xview.hpp> @@ -23,7 +25,7 @@ #include <evalhyd/evalp.hpp> -#include "evalp.h" +#include "evalhyd-cli/evalp.hpp" namespace fs = std::filesystem; @@ -152,8 +154,6 @@ struct EvalPInterface std::string obs = "./q_obs"; std::string prd = "./q_prd"; - std::string thr = {}; - std::vector<std::string> metrics; bool to_file = false; @@ -161,14 +161,24 @@ struct EvalPInterface // set default output directory std::string output_dir = "."; + // optionals related to thresholds-based metrics + std::string thr = {}; + std::optional<std::string> events; + + // optionals related to intervals-based metrics + std::vector<double> lvl = {}; + // optionals related to temporal subsetting std::string msk; std::string cdt; // optionals related to bootstrapping - std::vector<std::string> bootstrap = - {"n_samples", "-9", "len_sample", "-9", "summary", "0"}; + std::optional<std::vector<std::string>> bootstrap; std::string dts; + std::optional<int> seed; + + // optionals related to diagnostics + std::optional<std::vector<std::string>> diags; }; /// Procedure to run 'evalp' subcommand (making use of evalhyd). @@ -190,21 +200,21 @@ void run_evalp(EvalPInterface const &opt) // process optional input data (thresholds, masks) s_tree thr_t; - if (not opt.thr.empty()) + if (!opt.thr.empty()) { thr_t = find_s_data(opt.thr); check_sites_in_s_tree(sites, thr_t, "streamflow thresholds"); } ls_tree msk_t; - if (not opt.msk.empty()) + if (!opt.msk.empty()) { msk_t = find_ls_data(opt.msk); check_sites_in_ls_tree(leadtimes, sites, msk_t, "temporal masks"); } s_tree cdt_t; - if (not opt.cdt.empty()) + if (!opt.cdt.empty()) { cdt_t = find_s_data(opt.cdt); check_sites_in_s_tree(sites, cdt_t, "masking conditions"); @@ -270,7 +280,7 @@ void run_evalp(EvalPInterface const &opt) std::size_t n_msk = 0; - if (not opt.msk.empty()) + if (!opt.msk.empty()) { // (use first threshold file to determine number of masks) in_file.open(msk_t[leadtimes[0]][sites[0]]); @@ -301,13 +311,15 @@ void run_evalp(EvalPInterface const &opt) l++; } } - else if (not opt.cdt.empty()) + else if (!opt.cdt.empty()) { // (use first masking conditions file to determine number of masks) in_file.open(cdt_t[sites[0]]); std::string line; while (std::getline(in_file, line)) + { n_msk++; + } in_file.close(); conditions = xt::xtensor<std::array<char, 32>, 2> ({sites.size(), n_msk}); @@ -332,9 +344,11 @@ void run_evalp(EvalPInterface const &opt) } in_file.close(); if (ss != n_msk) + { throw std::runtime_error( "mismatch in number of masking conditions across sites" ); + } s++; } } @@ -346,7 +360,7 @@ void run_evalp(EvalPInterface const &opt) // initialise (and potentially populate) threshold tensor xt::xtensor<double, 2> thresholds = {}; - if (not opt.thr.empty()) + if (!opt.thr.empty()) { // (use first threshold file to determine number of thresholds) in_file.open(thr_t[sites[0]]); @@ -375,51 +389,146 @@ void run_evalp(EvalPInterface const &opt) // rearrange bootstrap parameters into mapping structure std::unordered_map<std::string, int> bootstrap; - if (opt.bootstrap.size() % 2) + if (opt.bootstrap.has_value()) { - throw std::runtime_error( - "bootstrap parameters not paired as key/value" - ); - } - else - { - for (int p = 0; p < opt.bootstrap.size() / 2; p++) + if (opt.bootstrap.value().size() % 2) { - try - { - bootstrap[opt.bootstrap[p*2]] = std::stoi(opt.bootstrap[p*2+1]); - } - catch (const std::invalid_argument& e) + throw std::runtime_error( + "bootstrap parameters not paired as key/value" + ); + } + else + { + for (int p = 0; p < opt.bootstrap.value().size() / 2; p++) { - throw std::runtime_error( - "bootstrap parameter value could not be converted to " - "an integer for key " + opt.bootstrap[p*2] - ); + try + { + bootstrap[opt.bootstrap.value()[p*2]] = + std::stoi(opt.bootstrap.value()[p*2+1]); + } + catch (const std::invalid_argument& e) + { + throw std::runtime_error( + "bootstrap parameter value could not be converted to " + "an integer for key " + opt.bootstrap.value()[p*2] + ); + } } } } // read datetimes in if provided std::vector<std::string> datetimes = {}; - if (not opt.dts.empty()) + if (!opt.dts.empty()) { in_file.open(opt.dts); std::string dt; while (std::getline(in_file, dt, ',')) + { datetimes.push_back(dt); + } in_file.close(); } // compute metrics std::vector<xt::xarray<double>> results = evalhyd::evalp( - observations, predictions, opt.metrics, thresholds, - masks, conditions, bootstrap, datetimes + observations, + predictions, + opt.metrics, + thresholds, + (opt.events.has_value()) + ? opt.events.value() + : xtl::missing<std::string>(), + opt.lvl, + masks, + conditions, + (opt.bootstrap.has_value()) + ? bootstrap + : xtl::missing<std::unordered_map<std::string, int>>(), + datetimes, + (opt.seed.has_value()) + ? opt.seed.value() + : xtl::missing<int>(), + (opt.diags.has_value()) + ? opt.diags.value() + : xtl::missing<std::vector<std::string>>() ); // handle output - int m = 0; - for (const auto& metric : opt.metrics) + int v = 0; + + std::vector<std::string> variables = opt.metrics; + if (opt.diags.has_value()) + { + variables.insert( + variables.end(), + opt.diags.value().begin(), opt.diags.value().end() + ); + } + + std::vector<std::string> multisite = {"ES"}; + + // define lambda function to write result to CSV file + auto write_to_file = [&out_file](auto res) + { + // 2D: (subsets, samples) + if (res.dimension() == 2) + { + xt::dump_csv(out_file, res); + } + // 3D: (subsets, samples, thresholds) + // or (subsets, samples, quantiles) + // or (subsets, samples, ranks) + // or (subsets, samples, intervals) + else if (res.dimension() == 3) + { + xt::dump_csv( + out_file, + xt::reshape_view( + res, + {res.shape(0) * res.shape(1), + res.shape(2)} + ) + ); + } + // 4D: (subsets, samples, thresholds, components) + // or (subsets, samples, levels, thresholds) + else if (res.dimension() == 4) + { + xt::dump_csv( + out_file, + xt::reshape_view( + res, + {res.shape(0) * res.shape(1) + * res.shape(2), + res.shape(3)} + ) + ); + } + // 5D: (subsets, samples, thresholds, bins, axes) + else if (res.dimension() == 5) + { + xt::dump_csv( + out_file, + xt::reshape_view( + res, + {res.shape(0) * res.shape(1) + * res.shape(2) * res.shape(3), + res.shape(4)} + ) + ); + } + else + { + throw std::runtime_error( + "metric to output features more than five " + "dimensions" + ); + } + }; + + for (const auto& variable : variables) { // store results into CSV files (one for each leadtime and site) if(opt.to_file) @@ -430,49 +539,23 @@ void run_evalp(EvalPInterface const &opt) fs::path path = {opt.output_dir + "/" + lt}; fs::create_directories(path); - s = 0; - for (const auto &st: sites) + if (std::find(multisite.begin(), multisite.end(), variable) + != multisite.end()) { - out_file.open(path.string() + "/" + st + "_" + metric + ".csv"); - - auto result = xt::view(results[m], s, l); - - // 2D: (subsets, samples) - if (result.dimension() == 2) - xt::dump_csv(out_file, result); - // 3D: (subsets, samples, thresholds) - // or (subsets, samples, quantiles) - else if (result.dimension() == 3) - xt::dump_csv( - out_file, - xt::reshape_view( - result, - {result.shape(0) * result.shape(1), - result.shape(2)} - ) - ); - // 4D: (subsets, samples, thresholds, components) - else if (result.dimension() == 4) - xt::dump_csv( - out_file, - xt::reshape_view( - result, - {result.shape(0) * result.shape(1) - * result.shape(2), - result.shape(3)} - ) - ); - else + out_file.open(path.string() + "/" + "multisite_" + variable + ".csv"); + write_to_file(xt::view(results[v], 0, l)); + out_file.close(); + } + else + { + s = 0; + for (const auto &st: sites) { + out_file.open(path.string() + "/" + st + "_" + variable + ".csv"); + write_to_file(xt::view(results[v], s, l)); out_file.close(); - throw std::runtime_error( - "metric to output features more than four " - "dimensions" - ); + s++; } - - out_file.close(); - s++; } l++; } @@ -480,9 +563,9 @@ void run_evalp(EvalPInterface const &opt) // direct results to terminal else { - std::cout << results[m] << std::endl; + std::cout << results[v] << std::endl; } - m++; + v++; } } @@ -507,15 +590,20 @@ void setup_evalp(CLI::App &app) "List of evaluation metrics to compute") ->required(); - // flags - sub->add_flag("--to_file", opt->to_file, - "Divert output to CSV file, otherwise output to console"); - // optional parameters sub->add_option("--q_thr", opt->thr, "Path to streamflow thresholds folder") ->check(CLI::ExistingDirectory); + sub->add_option("--events", opt->events, + "Type of streamflow events to consider for threshold \n" + "exceedance-based metrics. It can either be set as \n" + "'high' (i.e. above threshold) or as 'low' (i.e. below \n" + "threshold)"); + + sub->add_option("--c_lvl", opt->lvl, + "Confidence levels to use for intervals-based metrics"); + sub->add_option("--t_msk", opt->msk, "Path to temporal masks folder") ->check(CLI::ExistingDirectory); @@ -525,10 +613,6 @@ void setup_evalp(CLI::App &app) "(note: t_msk takes precedence)") ->check(CLI::ExistingDirectory); - sub->add_option("--out_dir", opt->output_dir, - "Path to output directory") - ->check(CLI::ExistingDirectory); - sub->add_option("--bootstrap", opt->bootstrap, "Parameters to configure the bootstrapping in order \n" "to assess the uncertainty in the evaluation metrics"); @@ -537,5 +621,19 @@ void setup_evalp(CLI::App &app) "Path to datetimes CSV file") ->check(CLI::ExistingFile); + sub->add_option("--seed", opt->seed, + "Value of the seed for the random generator"); + + sub->add_option("--diagnostics", opt->diags, + "List of evaluation diagnostics to compute"); + + sub->add_option("--out_dir", opt->output_dir, + "Path to output directory") + ->check(CLI::ExistingDirectory); + + // flags + sub->add_flag("--to_file", opt->to_file, + "Divert output to CSV file, otherwise output to console"); + sub->callback([opt]() { run_evalp(*opt); }); } diff --git a/src/evalp.h b/src/evalp.h deleted file mode 100644 index d1693b8799c9fea943a4b660ceb69fb0fe59a746..0000000000000000000000000000000000000000 --- a/src/evalp.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef EVALHYD_CLI_EVALP_H -#define EVALHYD_CLI_EVALP_H - -#include <CLI/CLI.hpp> - -void setup_evalp(CLI::App &app); - -#endif //EVALHYD_CLI_EVALP_H diff --git a/tests/config/evald.toml b/tests/config/evald.toml index 504e9bc9419c318a77d4ae812fafb779c5bf3d6b..a1953d0deaa6870dad9fb3e2c9726f89cbd4a7ab 100644 --- a/tests/config/evald.toml +++ b/tests/config/evald.toml @@ -1,7 +1,11 @@ [evald] -metrics = ["NSE", "RMSE", "KGE", "KGEPRIME"] +metrics = ["MAE", "MARE", "MSE", "RMSE", + "NSE", "KGE", "KGE_D", "KGEPRIME", "KGEPRIME_D", + "CONT_TBL"] q_obs = "./data/evald/obs.csv" q_prd = "./data/evald/prd.csv" +q_thr = "./data/evald/thr.csv" +events = "high" transform = "pow" exponent = 0.3 to_file = false diff --git a/tests/config/evalp.toml b/tests/config/evalp.toml index abe38755139fc8e6237c49d5ad1be0b75c9d7142..8444d876ea1bb250060f4be116c46416d5eff32d 100644 --- a/tests/config/evalp.toml +++ b/tests/config/evalp.toml @@ -1,7 +1,16 @@ [evalp] -metrics = ["BS", "BSS", "BS_CRD", "BS_LBD", "QS", "CRPS"] +metrics = ["BS", "BSS", "BS_CRD", "BS_LBD", "REL_DIAG", "CRPS_FROM_BS", + "CRPS_FROM_ECDF", + "QS", "CRPS_FROM_QS", + "POD", "POFD", "FAR", "CSI", "ROCSS", + "RANK_HIST", "DS", "AS", + "CR", "AW", "AWN", "AWI", "WS", "WSS", + "ES"] q_obs = "./data/evalp/obs" q_prd = "./data/evalp/prd" q_thr = "./data/evalp/thr" +events = "high" +c_lvl = [30, 80] t_msk = "./data/evalp/msk" +seed = 7 to_file = false diff --git a/tests/data/evald/cdt.csv b/tests/data/evald/cdt.csv index 147fd075095d209000f6f686841782c5dbcecd49..8ce06cfd90024df2997332c459be0aabcfe2a53c 100644 --- a/tests/data/evald/cdt.csv +++ b/tests/data/evald/cdt.csv @@ -1 +1,51 @@ t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} +t{99:311} diff --git a/tests/data/evald/msk.csv b/tests/data/evald/msk.csv index 0b65742e9344c966fccae1b47bdd34fed2963ee5..53a1991a87debc67a9c92533f9027e7e6a7e53e6 100644 --- a/tests/data/evald/msk.csv +++ b/tests/data/evald/msk.csv @@ -1 +1,51 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/tests/data/evald/prd.csv b/tests/data/evald/prd.csv index 38394a9cf7655e0d81e608a2f61b0727152d75df..3c7cd7852c876dac0e3625479f13886a430b5f2c 100644 --- a/tests/data/evald/prd.csv +++ b/tests/data/evald/prd.csv @@ -3,3 +3,49 @@ 2247,2045,2038,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1136,1399,1179,1102,1055,1017,1001,979,953,926,935,1908,4788,2623,3050,2017,3543,5794,8785,7777,4086,2968,2456,2138,3325,7250,7165,4048,11588,4643,3618,3271,6052,3737,3356,2645,2330,2103,1928,1909,3648,3692,5821,2987,4161,3956,5200,3162,3978,19858,5228,3726,4879,4886,4267,2978,2748,2500,2276,2107,1969,1815,1714,1652,1561,1491,1428,1347,1288,1245,1207,1163,1197,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,710,760,929,755,687,737,804,680,639,620,713,2474,1422,2686,2037,1410,1130,992,901,847,798,766,755,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,802,784,875,711,802,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,417,484,801,537,457,483,534,477,484,583,575,557,504,479,516,643,627,627,546,515,500,578,1439,1224,1596,1815,1451,1117,960,847,809,788,750,896,870,801,752 2247,2048,2038,1825,1699,1600,1501,1435,1440,1388,1299,1259,1211,1177,1124,1147,1399,1179,1102,1055,1017,1001,979,953,926,943,1918,4800,2627,3050,2019,3560,5795,8812,7777,4086,2968,2456,2138,3334,7270,7165,4104,11588,4643,3618,3280,6052,3746,3356,2645,2330,2103,1928,1912,3674,3714,5821,2991,4161,3966,5200,3162,3981,19860,5228,3743,4881,4891,4267,2978,2748,2500,2276,2107,1969,1815,1714,1656,1561,1491,1428,1347,1288,1245,1207,1163,1201,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,712,762,929,755,687,737,804,680,639,620,722,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,729,721,765,826,808,784,875,711,804,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,417,485,801,538,458,483,534,478,484,583,575,557,504,479,516,643,627,627,546,515,500,583,1439,1227,1597,1815,1454,1117,960,847,809,788,751,896,870,801,752 2247,2048,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1153,1399,1180,1102,1055,1017,1001,979,953,926,944,1931,4801,2633,3050,2026,3560,5808,8833,7777,4086,2968,2456,2138,3380,7304,7165,4154,11588,4643,3618,3297,6052,3747,3356,2645,2330,2103,1928,1920,3677,3718,5821,2992,4161,3972,5200,3162,3995,19867,5228,3749,4883,4914,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1204,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,724,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,730,721,765,826,812,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,584,1439,1230,1598,1815,1454,1117,960,847,809,788,752,896,870,801,752 +2247,2049,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1161,1399,1181,1102,1055,1017,1001,979,953,926,944,1936,4806,2636,3050,2028,3571,5817,8844,7777,4086,2968,2456,2138,3474,7311,7165,4158,11588,4643,3618,3297,6052,3748,3356,2645,2330,2103,1928,1921,3681,3727,5821,2995,4161,3980,5200,3162,4060,19884,5228,3760,4884,4938,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1215,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,728,2474,1425,2686,2037,1410,1130,992,901,847,798,766,761,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,773,794,804,731,721,765,826,818,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,585,1439,1234,1601,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1437,1440,1388,1299,1259,1211,1177,1124,1162,1399,1181,1102,1055,1017,1001,979,953,926,945,1937,4809,2653,3050,2029,3601,5817,8848,7777,4086,2968,2456,2138,3504,7314,7165,4167,11588,4643,3618,3300,6052,3749,3356,2645,2330,2103,1928,1922,3688,3729,5821,3014,4161,4047,5200,3162,4095,19885,5228,3792,4886,4952,4267,2978,2748,2500,2276,2107,1969,1815,1714,1675,1561,1491,1428,1347,1288,1245,1207,1163,1218,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,715,764,929,755,693,737,804,680,639,620,731,2474,1429,2686,2037,1410,1130,992,901,847,798,766,764,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,731,721,765,826,831,784,875,711,806,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,538,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1603,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1173,1399,1182,1102,1055,1017,1001,979,953,926,948,1940,4810,2671,3050,2037,3607,5821,8860,7777,4086,2968,2456,2138,3507,7321,7165,4167,11588,4643,3618,3311,6052,3755,3356,2645,2330,2103,1928,1924,3688,3730,5821,3015,4161,4049,5200,3162,4102,19887,5228,3808,4887,4957,4267,2978,2748,2500,2276,2107,1969,1815,1714,1678,1561,1491,1428,1347,1288,1245,1207,1163,1222,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,764,929,755,693,737,804,680,639,620,731,2474,1430,2686,2037,1410,1130,992,901,847,798,766,765,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,721,765,826,832,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1604,1815,1456,1117,960,847,809,788,754,896,870,801,752 +2247,2052,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1176,1399,1182,1102,1055,1017,1001,979,953,926,952,1950,4822,2672,3050,2038,3615,5844,8866,7777,4086,2968,2456,2138,3518,7333,7165,4187,11588,4643,3618,3312,6052,3758,3356,2645,2330,2103,1928,1925,3689,3735,5821,3017,4161,4050,5200,3162,4112,19887,5228,3812,4894,4962,4267,2978,2748,2500,2276,2107,1969,1815,1714,1680,1561,1491,1428,1347,1288,1245,1207,1163,1228,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,765,929,755,693,737,804,680,639,620,732,2474,1449,2686,2037,1410,1130,992,901,847,798,766,766,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,722,765,826,833,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,587,1439,1249,1606,1815,1456,1117,960,847,809,788,755,896,870,801,752 +2247,2053,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1179,1399,1182,1102,1055,1017,1001,979,953,927,962,1958,4823,2682,3050,2038,3642,5845,8899,7777,4086,2968,2456,2138,3528,7338,7165,4190,11588,4643,3618,3314,6056,3761,3356,2645,2330,2103,1928,1926,3691,3749,5821,3018,4161,4050,5200,3162,4116,19905,5228,3813,4896,4973,4267,2978,2748,2500,2276,2107,1969,1815,1714,1681,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,695,737,804,680,639,620,733,2474,1453,2686,2037,1410,1130,992,901,847,798,766,767,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,775,794,804,732,722,765,826,835,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,589,1439,1250,1607,1815,1457,1117,960,847,809,788,755,896,870,801,752 +2247,2054,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1181,1399,1182,1102,1055,1017,1001,979,953,927,968,1959,4825,2682,3050,2041,3648,5856,8906,7777,4086,2968,2456,2138,3575,7343,7166,4252,11588,4643,3618,3323,6059,3762,3356,2645,2330,2103,1928,1937,3697,3752,5821,3023,4161,4053,5200,3162,4118,19917,5228,3824,4901,4975,4267,2978,2748,2500,2276,2107,1969,1815,1714,1684,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,736,2474,1453,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,776,794,804,732,722,765,826,836,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,590,1439,1250,1609,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2057,2040,1825,1699,1600,1501,1441,1440,1388,1299,1259,1211,1177,1124,1184,1399,1182,1102,1055,1017,1001,979,953,928,968,1965,4825,2682,3050,2044,3649,5886,8914,7777,4086,2968,2456,2138,3630,7348,7169,4269,11588,4643,3618,3326,6062,3774,3356,2645,2330,2103,1928,1957,3699,3756,5821,3023,4161,4057,5200,3162,4180,19920,5228,3828,4901,4981,4267,2978,2748,2500,2276,2107,1969,1815,1714,1686,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,738,2474,1458,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,722,765,826,837,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,460,483,534,478,484,584,575,557,504,480,517,643,627,627,546,515,501,591,1439,1251,1610,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2058,2040,1825,1699,1600,1501,1445,1440,1388,1299,1259,1211,1177,1124,1191,1399,1182,1102,1055,1017,1001,979,953,928,969,1966,4841,2694,3050,2044,3650,5895,8920,7777,4086,2968,2456,2138,3683,7348,7170,4284,11588,4643,3618,3337,6072,3775,3356,2645,2330,2103,1928,1967,3704,3762,5821,3025,4161,4057,5200,3162,4198,19920,5228,3828,4903,4985,4267,2978,2748,2500,2276,2107,1969,1815,1714,1689,1561,1491,1428,1347,1288,1245,1207,1163,1233,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,719,767,929,755,698,737,804,680,639,620,742,2474,1476,2686,2037,1410,1130,992,901,847,798,766,770,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,723,765,826,847,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,461,483,534,479,485,584,575,557,504,480,518,643,627,627,546,515,501,592,1439,1251,1611,1815,1460,1117,960,847,809,788,757,896,870,801,752 +2247,2061,2040,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,928,969,1966,4844,2695,3050,2045,3659,5929,8932,7777,4086,2968,2456,2138,3707,7350,7171,4285,11588,4643,3618,3339,6076,3777,3356,2645,2330,2103,1928,1968,3707,3763,5821,3032,4161,4080,5200,3162,4202,19925,5228,3836,4904,4987,4267,2978,2748,2500,2276,2107,1969,1815,1714,1690,1561,1491,1428,1347,1288,1245,1207,1163,1235,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,617,719,767,929,755,699,737,804,680,639,620,744,2474,1477,2686,2037,1410,1130,992,901,847,798,766,772,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,724,765,826,856,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1252,1612,1815,1461,1117,960,847,809,788,758,896,870,801,752 +2247,2062,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,929,974,1973,4844,2697,3050,2048,3676,5930,8948,7777,4086,2968,2456,2138,3729,7360,7171,4300,11588,4643,3618,3341,6076,3779,3357,2645,2330,2103,1928,1968,3708,3770,5821,3035,4161,4091,5200,3162,4210,19927,5228,3840,4906,4997,4267,2978,2748,2500,2276,2107,1969,1815,1714,1694,1561,1491,1428,1347,1288,1245,1207,1163,1238,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,767,929,755,699,737,804,680,639,620,745,2474,1479,2686,2037,1410,1130,992,901,847,798,766,773,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,779,794,804,733,724,765,826,857,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1255,1612,1815,1462,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1192,1399,1183,1102,1055,1017,1001,979,953,929,981,1999,4851,2699,3050,2052,3680,5984,8953,7777,4086,2968,2456,2138,3765,7372,7173,4306,11588,4643,3618,3342,6076,3786,3357,2645,2330,2103,1928,1969,3710,3771,5821,3041,4161,4093,5200,3162,4227,19932,5228,3851,4907,5010,4267,2978,2748,2500,2276,2107,1969,1815,1714,1699,1561,1491,1428,1347,1288,1245,1207,1163,1240,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,699,737,804,680,639,620,749,2474,1479,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,734,724,765,826,863,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1613,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1193,1399,1183,1102,1055,1017,1001,979,953,929,993,2006,4852,2699,3050,2055,3681,6005,8964,7777,4086,2968,2456,2138,3785,7373,7173,4322,11588,4643,3618,3343,6079,3787,3357,2645,2330,2103,1928,1974,3711,3771,5821,3043,4162,4103,5200,3162,4228,19950,5228,3854,4908,5011,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1242,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,700,737,804,680,639,620,750,2474,1482,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,869,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1614,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2064,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1194,1399,1184,1102,1055,1017,1001,979,953,930,994,2008,4854,2699,3050,2056,3685,6006,8965,7777,4086,2968,2456,2138,3790,7383,7174,4328,11588,4643,3618,3359,6079,3788,3357,2645,2330,2103,1928,1974,3712,3772,5821,3049,4164,4108,5200,3162,4261,19953,5228,3862,4908,5019,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1246,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,721,769,929,755,702,737,804,680,639,620,752,2474,1493,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,870,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,463,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1257,1615,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2065,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1197,1399,1184,1102,1055,1017,1001,979,953,930,994,2009,4855,2705,3050,2056,3690,6017,8978,7777,4086,2968,2456,2138,3815,7385,7175,4328,11588,4643,3618,3362,6084,3788,3359,2645,2330,2103,1928,1979,3717,3777,5821,3055,4165,4112,5200,3162,4267,19962,5228,3863,4909,5020,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,769,929,755,704,737,804,680,639,620,752,2474,1496,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,780,794,804,735,724,765,826,871,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,421,489,801,539,463,483,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,593,1439,1260,1617,1815,1464,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1184,1102,1055,1017,1001,979,953,930,1003,2013,4855,2706,3050,2058,3715,6018,8996,7777,4086,2968,2456,2138,3824,7387,7177,4356,11588,4643,3618,3372,6085,3790,3359,2645,2330,2103,1928,1980,3720,3780,5821,3059,4169,4120,5200,3162,4270,19965,5228,3870,4910,5025,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,770,929,755,707,737,804,680,639,620,757,2474,1500,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,883,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,450,421,489,801,539,463,484,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,594,1439,1263,1618,1815,1466,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1007,2020,4856,2710,3050,2060,3716,6046,9002,7777,4086,2968,2456,2138,3834,7391,7181,4360,11588,4643,3618,3372,6086,3791,3359,2645,2330,2103,1928,1993,3723,3781,5821,3062,4173,4136,5201,3162,4293,19970,5228,3873,4911,5026,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1254,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,723,770,929,755,708,737,804,680,639,620,758,2474,1500,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,894,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,481,518,643,627,627,546,515,504,595,1439,1265,1621,1815,1467,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1008,2030,4858,2713,3050,2064,3718,6049,9002,7777,4086,2968,2456,2138,3843,7416,7182,4361,11588,4643,3618,3376,6089,3794,3359,2645,2330,2103,1928,1995,3724,3783,5821,3062,4175,4145,5201,3162,4302,19980,5228,3879,4911,5031,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1256,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,618,725,771,929,755,708,737,804,680,639,620,765,2474,1504,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,737,724,765,826,896,784,875,712,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,482,518,643,627,627,546,515,504,597,1439,1266,1622,1815,1468,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,930,1008,2031,4859,2717,3050,2065,3719,6056,9007,7777,4086,2968,2456,2138,3859,7421,7184,4375,11588,4643,3618,3376,6091,3794,3359,2645,2330,2103,1928,1998,3725,3784,5821,3072,4180,4163,5201,3162,4347,19987,5228,3879,4913,5032,4267,2978,2748,2500,2276,2107,1969,1815,1714,1706,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,711,737,804,680,639,620,766,2474,1510,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,724,765,826,901,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,504,598,1439,1266,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,931,1012,2032,4865,2717,3050,2071,3720,6063,9016,7777,4086,2968,2456,2138,3865,7424,7184,4391,11588,4643,3618,3390,6095,3797,3362,2645,2330,2103,1928,1999,3726,3787,5821,3073,4185,4167,5204,3162,4385,19987,5228,3884,4914,5035,4267,2978,2748,2500,2276,2107,1969,1815,1714,1709,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,712,737,804,680,639,620,769,2474,1511,2686,2037,1410,1130,992,901,847,798,766,781,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,598,1439,1270,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1218,1399,1186,1102,1055,1017,1001,979,953,931,1013,2043,4866,2722,3050,2075,3721,6077,9018,7777,4086,2968,2456,2138,3879,7427,7185,4392,11588,4643,3618,3391,6095,3800,3365,2645,2330,2103,1928,2003,3740,3793,5821,3092,4189,4169,5204,3162,4388,19995,5228,3891,4921,5036,4267,2978,2748,2500,2276,2107,1969,1815,1714,1719,1561,1491,1428,1347,1288,1245,1207,1163,1258,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,727,771,929,755,714,737,804,680,639,620,769,2474,1512,2686,2037,1410,1130,992,901,847,798,766,782,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,599,1439,1277,1624,1815,1469,1118,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1230,1399,1186,1102,1055,1017,1001,979,953,931,1014,2070,4872,2724,3050,2077,3731,6083,9022,7777,4086,2968,2456,2138,3893,7428,7186,4399,11588,4643,3618,3413,6097,3801,3368,2645,2330,2103,1928,2007,3742,3795,5821,3096,4196,4175,5205,3164,4402,19996,5228,3896,4922,5044,4267,2978,2748,2500,2276,2107,1969,1815,1714,1722,1561,1491,1428,1347,1288,1245,1207,1163,1261,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,728,772,929,755,714,737,804,680,639,620,771,2474,1518,2686,2037,1410,1130,992,901,847,798,766,784,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,912,784,875,712,813,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1282,1624,1815,1470,1118,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1232,1399,1186,1102,1055,1017,1001,979,953,931,1014,2107,4877,2727,3050,2077,3734,6084,9026,7777,4086,2968,2456,2138,3907,7430,7187,4412,11588,4643,3618,3417,6098,3803,3369,2645,2330,2103,1928,2008,3742,3796,5821,3102,4203,4175,5206,3167,4419,20002,5228,3898,4923,5045,4267,2978,2748,2500,2276,2107,1969,1815,1714,1732,1561,1491,1428,1347,1288,1245,1207,1163,1272,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,718,737,804,680,639,620,781,2474,1520,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,917,784,875,712,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1284,1624,1815,1471,1119,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1233,1399,1186,1102,1055,1017,1001,979,953,931,1017,2118,4878,2729,3050,2079,3736,6085,9031,7777,4086,2968,2456,2138,3925,7433,7188,4412,11588,4643,3618,3437,6101,3804,3370,2645,2330,2103,1928,2009,3756,3798,5821,3106,4204,4194,5208,3167,4421,20010,5228,3904,4924,5046,4267,2978,2748,2500,2276,2107,1969,1815,1714,1733,1561,1491,1428,1347,1288,1245,1207,1163,1273,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,722,737,804,680,639,620,783,2474,1524,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,739,725,765,826,920,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,585,575,557,504,482,519,643,627,627,546,515,505,602,1439,1287,1624,1815,1471,1119,960,847,810,788,761,896,870,801,752 +2247,2072,2044,1825,1699,1600,1501,1451,1440,1388,1299,1259,1211,1177,1124,1236,1399,1187,1102,1055,1017,1001,979,953,931,1019,2120,4880,2734,3050,2080,3737,6103,9035,7777,4086,2968,2456,2138,3938,7438,7188,4419,11588,4643,3618,3452,6104,3805,3371,2645,2330,2103,1928,2016,3769,3802,5821,3106,4215,4204,5209,3171,4425,20020,5228,3908,4927,5048,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1275,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,731,773,929,755,722,737,804,680,639,620,784,2474,1524,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,921,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1289,1624,1815,1471,1120,960,847,810,788,761,896,870,801,752 +2247,2073,2044,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1237,1399,1187,1102,1055,1017,1001,979,953,932,1020,2129,4883,2736,3050,2083,3739,6104,9047,7777,4086,2968,2456,2138,3943,7438,7189,4453,11588,4643,3618,3472,6105,3805,3371,2645,2330,2103,1928,2017,3771,3811,5821,3106,4216,4209,5209,3173,4430,20022,5228,3913,4928,5051,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1277,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,732,774,929,755,723,737,804,680,639,620,788,2474,1527,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,947,784,875,713,815,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1292,1626,1815,1471,1121,960,847,810,788,762,896,870,801,752 +2247,2074,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1238,1399,1187,1102,1055,1017,1001,979,953,932,1023,2144,4885,2743,3050,2084,3746,6108,9050,7777,4086,2968,2456,2138,3944,7442,7190,4453,11588,4643,3618,3478,6109,3806,3371,2645,2330,2103,1928,2019,3776,3811,5821,3109,4219,4230,5209,3179,4436,20023,5228,3913,4928,5053,4267,2978,2748,2500,2276,2107,1969,1815,1714,1737,1561,1491,1428,1347,1288,1245,1207,1163,1281,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,733,774,929,755,725,737,804,680,639,620,789,2474,1529,2686,2037,1410,1130,992,901,847,798,766,789,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,784,794,804,743,726,765,826,947,784,875,713,816,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,506,603,1439,1293,1626,1815,1472,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2156,4889,2753,3050,2091,3750,6138,9059,7777,4086,2968,2456,2139,3952,7447,7191,4480,11588,4643,3618,3479,6112,3815,3372,2645,2330,2103,1928,2021,3789,3814,5821,3118,4222,4240,5210,3180,4437,20027,5228,3918,4932,5054,4267,2978,2748,2500,2276,2107,1969,1815,1714,1747,1561,1491,1428,1347,1288,1245,1207,1163,1284,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,738,774,929,755,727,737,804,680,639,620,791,2474,1530,2686,2037,1410,1130,992,901,847,798,766,790,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,743,727,765,826,949,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,604,1439,1295,1629,1815,1473,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1452,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2169,4891,2758,3050,2097,3760,6157,9066,7777,4086,2968,2456,2141,3979,7455,7191,4485,11588,4643,3618,3480,6117,3816,3372,2645,2330,2103,1928,2030,3792,3821,5821,3144,4228,4243,5210,3181,4493,20031,5228,3925,4932,5057,4267,2978,2748,2500,2276,2107,1969,1815,1714,1749,1561,1491,1428,1347,1288,1245,1207,1163,1286,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,741,775,929,755,734,737,804,680,639,620,793,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,744,728,765,826,954,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,492,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,605,1439,1303,1630,1815,1473,1122,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1253,1399,1188,1102,1055,1017,1001,979,953,932,1028,2187,4892,2765,3050,2099,3766,6208,9074,7777,4086,2968,2456,2142,3983,7472,7191,4498,11588,4643,3618,3489,6124,3816,3372,2645,2330,2103,1928,2036,3797,3823,5821,3148,4231,4246,5211,3182,4563,20032,5228,3940,4933,5060,4267,2978,2748,2500,2276,2107,1969,1815,1714,1752,1561,1491,1428,1347,1288,1245,1207,1163,1287,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,794,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,805,746,728,765,826,962,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,466,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,506,607,1439,1304,1630,1815,1473,1123,960,847,811,788,763,896,870,801,752 +2247,2078,2046,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1257,1399,1188,1102,1055,1017,1001,979,953,932,1030,2189,4893,2766,3050,2100,3771,6210,9090,7777,4086,2968,2456,2142,4018,7478,7197,4505,11588,4643,3618,3496,6125,3816,3373,2645,2330,2103,1928,2042,3797,3824,5821,3158,4234,4253,5211,3184,4565,20032,5228,3944,4943,5064,4267,2978,2748,2500,2276,2107,1969,1815,1714,1755,1561,1491,1428,1347,1288,1245,1207,1163,1288,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,797,2474,1532,2686,2037,1410,1130,992,901,847,798,766,794,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,746,728,765,826,966,784,875,714,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,467,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,608,1439,1306,1631,1815,1473,1123,960,847,812,788,764,896,870,801,752 +2247,2079,2046,1825,1699,1600,1501,1454,1441,1388,1299,1259,1211,1177,1124,1258,1399,1189,1102,1055,1017,1001,979,953,933,1032,2212,4896,2768,3050,2104,3772,6213,9108,7777,4086,2968,2456,2142,4030,7481,7204,4513,11588,4643,3618,3502,6132,3817,3374,2645,2330,2103,1928,2042,3807,3828,5821,3161,4241,4253,5214,3190,4648,20039,5228,3955,4944,5065,4267,2978,2748,2500,2276,2107,1969,1815,1714,1761,1561,1491,1428,1347,1288,1245,1207,1163,1292,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,743,775,929,756,741,737,804,680,639,620,807,2474,1538,2686,2037,1410,1130,992,901,847,798,766,795,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,747,729,765,826,968,784,875,715,819,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,609,1439,1306,1632,1815,1474,1124,960,847,813,788,765,896,870,801,752 +2247,2080,2046,1825,1699,1600,1501,1456,1441,1388,1299,1259,1211,1177,1124,1279,1399,1190,1102,1055,1017,1001,979,953,934,1039,2215,4902,2779,3050,2112,3774,6222,9125,7777,4086,2968,2456,2144,4058,7484,7205,4516,11588,4643,3618,3527,6133,3817,3376,2645,2330,2103,1928,2053,3821,3830,5829,3195,4250,4254,5214,3190,4651,20053,5228,3958,4948,5070,4267,2978,2748,2500,2276,2107,1969,1815,1714,1763,1561,1491,1428,1347,1288,1245,1207,1163,1294,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,744,775,929,756,742,737,804,680,639,620,808,2474,1541,2686,2037,1410,1130,992,901,847,798,766,798,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,788,794,806,747,729,765,826,969,784,875,715,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1315,1633,1815,1475,1125,960,847,813,788,765,896,870,801,752 +2247,2081,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1284,1399,1190,1102,1055,1017,1001,979,953,934,1047,2223,4902,2783,3050,2116,3817,6254,9131,7777,4086,2968,2456,2148,4064,7492,7209,4538,11588,4643,3618,3535,6133,3820,3377,2645,2330,2103,1928,2058,3838,3833,5830,3201,4251,4254,5214,3198,4662,20076,5228,3963,4951,5074,4267,2978,2748,2500,2276,2107,1969,1815,1714,1768,1561,1491,1428,1347,1288,1245,1207,1163,1296,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,620,747,777,929,756,743,737,804,680,639,620,812,2474,1541,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,681,744,932,789,794,806,747,730,765,826,986,784,875,716,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,492,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1317,1635,1815,1476,1125,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1288,1400,1191,1102,1055,1017,1001,979,953,935,1071,2238,4906,2784,3050,2117,3823,6265,9138,7777,4086,2968,2456,2151,4067,7504,7218,4563,11588,4643,3618,3539,6139,3821,3378,2645,2330,2103,1928,2096,3840,3840,5831,3219,4257,4305,5214,3198,4757,20077,5228,3968,4955,5082,4267,2978,2748,2500,2276,2107,1969,1815,1714,1775,1561,1491,1428,1347,1288,1245,1207,1163,1297,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,749,778,929,757,745,737,804,680,639,620,817,2474,1542,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,790,794,806,748,730,765,826,1023,784,875,716,821,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,493,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,508,611,1439,1317,1636,1815,1477,1126,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1291,1400,1192,1102,1055,1017,1001,979,953,935,1080,2253,4908,2789,3050,2124,3825,6291,9142,7777,4086,2968,2456,2152,4079,7510,7224,4569,11588,4643,3618,3563,6146,3824,3381,2645,2330,2103,1928,2104,3844,3845,5832,3229,4269,4315,5214,3200,4762,20111,5228,3970,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1777,1561,1491,1428,1347,1288,1245,1207,1163,1299,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,750,780,929,757,748,737,804,680,639,620,822,2474,1555,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,791,794,807,749,730,765,826,1026,784,875,716,823,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,427,493,802,542,470,485,534,484,488,586,575,557,504,484,519,643,627,627,546,515,509,613,1439,1320,1637,1816,1479,1127,960,847,814,788,766,897,870,801,752 +2247,2084,2046,1825,1699,1600,1501,1458,1442,1388,1299,1259,1211,1177,1124,1307,1401,1193,1102,1055,1017,1001,979,953,935,1085,2253,4909,2790,3050,2125,3836,6294,9153,7777,4086,2968,2456,2155,4084,7515,7228,4572,11588,4643,3618,3564,6156,3826,3383,2645,2330,2103,1928,2106,3847,3847,5836,3235,4269,4323,5215,3201,4762,20123,5228,3973,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1778,1561,1491,1428,1347,1288,1245,1207,1163,1305,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,761,781,929,757,756,737,804,680,639,620,831,2474,1575,2686,2037,1410,1130,992,901,847,798,766,801,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,792,794,807,750,732,765,826,1030,784,875,717,824,2295,1266,1115,936,817,742,713,680,647,647,678,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,428,493,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,509,613,1439,1321,1637,1816,1479,1127,960,847,814,789,767,897,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1319,1401,1193,1102,1055,1017,1001,979,953,935,1088,2256,4913,2791,3050,2144,3844,6301,9157,7777,4086,2968,2456,2158,4090,7516,7229,4617,11589,4643,3618,3582,6157,3828,3383,2645,2330,2103,1928,2108,3852,3856,5838,3238,4269,4333,5216,3201,4775,20135,5228,3979,4962,5094,4267,2978,2748,2500,2276,2107,1969,1815,1714,1782,1562,1491,1428,1347,1288,1245,1207,1163,1306,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,621,763,783,929,758,757,737,804,680,639,620,860,2474,1578,2686,2037,1410,1130,992,901,847,798,766,803,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,793,794,807,754,732,765,826,1040,784,875,717,826,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,510,614,1439,1322,1638,1816,1482,1127,960,847,815,789,768,898,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1350,1401,1193,1102,1055,1017,1001,979,953,936,1111,2264,4916,2791,3050,2146,3852,6310,9187,7777,4086,2968,2456,2164,4093,7524,7233,4618,11594,4643,3618,3605,6160,3834,3383,2645,2330,2103,1928,2115,3856,3856,5841,3263,4289,4341,5219,3202,4837,20152,5228,3979,4969,5099,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1563,1491,1428,1347,1288,1245,1207,1163,1308,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,621,778,784,929,759,768,737,804,680,639,620,866,2474,1587,2686,2037,1410,1130,992,901,847,798,766,804,2793,1574,1087,960,883,823,782,755,730,705,683,746,932,794,794,808,757,733,765,826,1043,784,875,718,827,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,485,519,643,627,627,546,515,510,615,1439,1326,1641,1817,1484,1128,960,847,815,789,768,898,870,801,752 +2247,2086,2048,1825,1699,1600,1501,1459,1443,1388,1299,1259,1211,1177,1124,1355,1403,1194,1102,1055,1017,1001,979,953,936,1112,2311,4927,2807,3050,2148,3856,6318,9214,7777,4086,2968,2456,2170,4096,7525,7233,4634,11598,4643,3618,3611,6161,3841,3384,2645,2330,2103,1928,2122,3880,3861,5845,3290,4303,4377,5220,3203,4919,20159,5228,3981,4970,5105,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1564,1491,1428,1347,1288,1245,1207,1163,1313,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,622,780,784,929,759,769,737,804,680,639,620,867,2474,1592,2686,2037,1410,1130,992,901,847,798,766,807,2793,1574,1087,960,883,823,782,755,730,705,684,746,932,795,794,808,757,734,765,826,1044,784,875,720,830,2295,1268,1115,936,817,742,713,680,647,647,679,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,803,542,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,510,618,1439,1327,1644,1818,1486,1128,960,847,816,790,768,898,870,801,752 +2247,2087,2048,1825,1699,1600,1501,1461,1443,1388,1299,1259,1211,1177,1124,1356,1403,1196,1102,1055,1017,1001,979,953,937,1117,2317,4929,2809,3050,2153,3857,6338,9222,7777,4086,2968,2456,2171,4110,7574,7238,4635,11599,4643,3618,3620,6164,3842,3384,2645,2330,2103,1928,2122,3895,3863,5850,3296,4308,4386,5220,3203,4932,20181,5228,4017,4978,5129,4267,2978,2748,2500,2276,2107,1969,1815,1714,1801,1564,1491,1428,1347,1288,1245,1207,1163,1316,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,606,625,623,781,785,929,759,772,737,804,680,639,620,869,2474,1600,2686,2037,1410,1130,992,901,847,798,766,808,2793,1574,1087,960,883,823,782,755,730,705,685,747,932,798,795,809,759,734,765,826,1070,784,875,721,832,2295,1269,1115,936,817,742,713,680,647,647,680,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,430,495,803,543,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,511,619,1439,1327,1646,1818,1488,1129,960,847,816,791,768,899,870,801,752 +2247,2090,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1359,1403,1197,1102,1055,1017,1001,979,953,938,1119,2322,4930,2814,3050,2159,3884,6444,9223,7777,4086,2968,2456,2181,4113,7582,7242,4651,11603,4643,3618,3621,6166,3844,3385,2645,2330,2103,1928,2123,3931,3869,5851,3301,4321,4396,5224,3205,4943,20185,5228,4055,4982,5140,4267,2978,2748,2500,2276,2107,1969,1815,1714,1805,1565,1491,1428,1347,1288,1245,1207,1163,1332,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,607,625,625,782,786,929,760,773,737,804,680,639,620,875,2474,1604,2686,2037,1410,1130,992,901,847,798,766,809,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,798,796,809,768,735,765,826,1118,784,875,722,832,2295,1273,1115,936,817,742,713,680,647,647,681,651,692,608,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,431,496,803,543,472,485,534,485,488,588,576,557,504,486,520,643,627,627,546,515,511,619,1439,1330,1647,1821,1489,1130,960,847,822,792,772,899,870,801,752 +2247,2094,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1376,1405,1200,1102,1055,1017,1001,979,953,938,1128,2340,4931,2815,3050,2160,3898,6450,9233,7777,4086,2968,2456,2196,4154,7589,7242,4680,11607,4643,3618,3632,6169,3845,3390,2645,2330,2105,1928,2124,3952,3877,5857,3339,4324,4397,5227,3218,5130,20191,5228,4080,4984,5143,4267,2978,2748,2500,2276,2107,1969,1815,1714,1828,1566,1491,1428,1347,1288,1245,1207,1163,1334,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,609,625,626,784,786,929,761,777,737,804,680,639,620,876,2474,1607,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,799,796,809,772,738,765,826,1123,784,875,723,837,2295,1274,1115,936,817,742,713,680,647,647,683,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,432,496,803,543,474,486,534,485,489,588,576,557,504,487,521,643,627,627,546,515,511,622,1439,1343,1655,1823,1492,1133,960,847,823,794,775,899,870,801,752 +2247,2097,2049,1825,1700,1600,1501,1465,1443,1388,1299,1259,1211,1177,1124,1377,1406,1200,1102,1055,1017,1001,979,953,938,1130,2425,4933,2833,3050,2161,3909,6452,9233,7777,4086,2968,2456,2211,4232,7600,7258,4711,11617,4643,3618,3670,6182,3852,3390,2645,2330,2108,1928,2130,3958,3886,5861,3344,4339,4401,5235,3218,5158,20211,5228,4087,4990,5213,4267,2978,2748,2500,2276,2107,1969,1815,1714,1839,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,610,625,626,786,788,929,762,778,737,804,680,639,621,920,2474,1629,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,688,750,933,801,797,809,775,738,765,826,1126,784,876,723,838,2295,1276,1115,936,817,742,713,680,649,647,689,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,450,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,435,496,803,544,475,486,534,485,491,588,576,557,504,487,522,643,627,627,546,515,513,623,1439,1364,1655,1829,1494,1138,960,847,825,798,777,899,870,801,752 +2247,2098,2049,1825,1701,1600,1501,1476,1444,1388,1299,1259,1211,1177,1124,1415,1408,1200,1102,1055,1017,1001,979,953,942,1209,2471,4934,2835,3050,2168,3961,6499,9275,7777,4086,2968,2456,2222,4239,7634,7268,4909,11617,4643,3618,3730,6184,3860,3394,2645,2330,2111,1928,2152,3958,3891,5869,3361,4352,4472,5235,3222,5199,20236,5230,4188,4991,5279,4267,2978,2748,2500,2276,2107,1969,1815,1714,1847,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,613,625,627,789,793,929,764,796,737,804,680,639,621,927,2474,1656,2686,2037,1410,1130,992,901,847,798,766,826,2793,1574,1087,960,883,823,782,755,730,705,692,752,935,808,797,811,777,741,765,826,1146,784,876,723,869,2303,1278,1115,936,817,742,713,680,649,647,693,651,692,609,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,409,398,551,450,437,496,803,544,476,486,534,486,491,588,576,557,504,487,522,643,627,627,546,515,514,623,1439,1364,1659,1830,1495,1138,960,847,828,802,786,901,870,801,752 +2247,2106,2051,1825,1702,1600,1501,1477,1447,1388,1299,1259,1211,1177,1124,1415,1409,1200,1102,1055,1017,1001,980,953,942,1309,2510,4939,2880,3050,2210,4038,6563,9357,7781,4086,2968,2456,2250,4290,7640,7269,4968,11619,4643,3618,3763,6189,3869,3394,2645,2330,2112,1928,2208,4062,3895,5876,3439,4358,4513,5255,3230,5251,20249,5234,4213,4998,5285,4267,2987,2748,2500,2276,2107,1969,1815,1714,1872,1570,1491,1428,1347,1288,1245,1207,1163,1338,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,614,626,629,819,800,929,765,798,737,804,680,639,623,937,2478,1659,2686,2037,1410,1130,992,901,847,798,766,837,2793,1574,1087,960,883,823,782,755,730,705,696,753,935,813,798,812,784,745,765,826,1317,784,882,726,881,2305,1283,1115,936,817,742,713,680,649,647,695,651,692,610,576,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,533,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,410,399,551,451,441,497,805,545,478,487,534,486,493,588,576,557,504,489,522,643,627,627,546,515,519,667,1439,1365,1675,1831,1497,1139,960,851,830,805,787,902,870,801,752 +2247,2177,2056,1825,1705,1600,1501,1477,1448,1388,1299,1259,1211,1177,1124,1420,1411,1206,1102,1055,1017,1001,984,954,963,1426,2614,4959,2923,3050,2212,4284,6685,9417,7782,4086,2968,2456,2284,4451,7676,7273,5053,11664,4643,3618,4118,6230,3886,3396,2645,2330,2130,1928,2211,4371,3940,5900,3487,4420,4600,5290,3263,5401,20348,5240,4273,5090,5561,4275,2990,2748,2500,2276,2107,1969,1815,1714,1890,1571,1491,1428,1347,1288,1245,1207,1163,1376,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,601,621,626,630,821,830,929,767,891,737,804,680,646,624,1025,2481,1666,2693,2037,1410,1130,992,901,847,798,766,847,2793,1574,1087,960,883,823,782,755,730,705,704,754,937,819,802,815,792,746,766,826,1983,784,887,737,886,2337,1290,1117,936,817,742,713,680,664,647,697,651,692,612,578,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,535,476,448,397,367,354,342,332,320,324,327,333,340,359,331,383,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,520,413,410,399,551,451,454,503,806,549,504,488,534,487,494,591,578,558,504,489,524,644,627,627,546,515,521,677,1439,1390,1718,1848,1504,1155,960,852,836,896,792,910,870,801,752 diff --git a/tests/data/evald/thr.csv b/tests/data/evald/thr.csv new file mode 100644 index 0000000000000000000000000000000000000000..62881b6c2f6fdbcea3a0c890820a417b5c09c109 --- /dev/null +++ b/tests/data/evald/thr.csv @@ -0,0 +1,51 @@ +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN diff --git a/tests/data/evald/thr_1yr_3yrs.csv b/tests/data/evald/thr_1yr_3yrs.csv new file mode 100644 index 0000000000000000000000000000000000000000..97b7f32b88cee5266163e4c05c698ee091d259fe --- /dev/null +++ b/tests/data/evald/thr_1yr_3yrs.csv @@ -0,0 +1,50 @@ +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN +690,534,445,NAN diff --git a/tests/data/evalp/cdt/site_d.csv b/tests/data/evalp/cdt/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..ea8c8ab34133c09e0c7e31cd7de3cb40086b233c --- /dev/null +++ b/tests/data/evalp/cdt/site_d.csv @@ -0,0 +1,2 @@ +t{99:311} +t{:} diff --git a/tests/data/evalp/cdt/site_e.csv b/tests/data/evalp/cdt/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..ea8c8ab34133c09e0c7e31cd7de3cb40086b233c --- /dev/null +++ b/tests/data/evalp/cdt/site_e.csv @@ -0,0 +1,2 @@ +t{99:311} +t{:} diff --git a/tests/data/evalp/msk/leadtime_1/site_d.csv b/tests/data/evalp/msk/leadtime_1/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..c30828c91bd118ee6b8dc7cd3d34caf5b2ab904e --- /dev/null +++ b/tests/data/evalp/msk/leadtime_1/site_d.csv @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/tests/data/evalp/msk/leadtime_1/site_e.csv b/tests/data/evalp/msk/leadtime_1/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..c30828c91bd118ee6b8dc7cd3d34caf5b2ab904e --- /dev/null +++ b/tests/data/evalp/msk/leadtime_1/site_e.csv @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/tests/data/evalp/msk/leadtime_2/site_d.csv b/tests/data/evalp/msk/leadtime_2/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..c30828c91bd118ee6b8dc7cd3d34caf5b2ab904e --- /dev/null +++ b/tests/data/evalp/msk/leadtime_2/site_d.csv @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/tests/data/evalp/msk/leadtime_2/site_e.csv b/tests/data/evalp/msk/leadtime_2/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..c30828c91bd118ee6b8dc7cd3d34caf5b2ab904e --- /dev/null +++ b/tests/data/evalp/msk/leadtime_2/site_e.csv @@ -0,0 +1,2 @@ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 diff --git a/tests/data/evalp/obs/site_d.csv b/tests/data/evalp/obs/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..167011e7c6b9a1f3e9d58262bcd37e75056c3b3d --- /dev/null +++ b/tests/data/evalp/obs/site_d.csv @@ -0,0 +1 @@ +2520,2270,2130,1950,1820,1680,1590,1560,1570,1450,1410,1370,1350,1280,1230,1290,1320,1210,1160,1120,1130,1120,1100,1070,1050,1060,1590,2280,2300,2480,2250,2800,3490,9270,7180,4210,3160,2600,2260,2630,5160,5430,4420,8780,5270,3890,3840,4120,3410,2840,2530,2200,1960,1810,1820,2470,2980,3710,3160,4330,3760,4300,3200,9720,10200,5410,3980,4560,4290,3560,3140,2860,2530,2300,2120,1890,1770,1690,1620,1550,1490,1380,1320,1290,1270,1230,1200,1210,1430,1220,1200,1250,1200,1100,1080,1060,1030,1000,977,965,944,924,910,873,829,805,776,753,735,728,706,689,661,638,635,629,639,725,712,870,856,1120,886,722,738,997,723,642,610,593,1930,1740,1470,3100,1740,1190,949,798,725,653,618,590,3210,2120,1080,864,749,660,608,585,563,538,504,494,1070,717,660,803,654,666,796,899,843,698,1040,681,804,2810,1630,1360,1000,768,631,595,548,498,523,604,568,691,509,459,564,468,421,414,406,398,385,350,329,322,332,322,302,315,378,420,374,309,262,236,234,230,215,218,206,202,200,199,196,193,207,651,529,466,347,279,252,226,205,179,192,200,215,236,281,217,340,314,282,228,195,192,199,186,177,161,157,395,509,1020,704,394,354,299,268,245,258,277,255,241,225,223,229,227,224,220,218,228,241,242,257,249,261,309,495,675,416,398,360,729,491,402,467,1200,622,424,420,552,447,374,657,588,593,480,419,409,723,731,744,565,503,468,455,1270,1730,967,2290,1790,1090,946,791,734,719,681,758,934,814,737,707 diff --git a/tests/data/evalp/obs/site_e.csv b/tests/data/evalp/obs/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..167011e7c6b9a1f3e9d58262bcd37e75056c3b3d --- /dev/null +++ b/tests/data/evalp/obs/site_e.csv @@ -0,0 +1 @@ +2520,2270,2130,1950,1820,1680,1590,1560,1570,1450,1410,1370,1350,1280,1230,1290,1320,1210,1160,1120,1130,1120,1100,1070,1050,1060,1590,2280,2300,2480,2250,2800,3490,9270,7180,4210,3160,2600,2260,2630,5160,5430,4420,8780,5270,3890,3840,4120,3410,2840,2530,2200,1960,1810,1820,2470,2980,3710,3160,4330,3760,4300,3200,9720,10200,5410,3980,4560,4290,3560,3140,2860,2530,2300,2120,1890,1770,1690,1620,1550,1490,1380,1320,1290,1270,1230,1200,1210,1430,1220,1200,1250,1200,1100,1080,1060,1030,1000,977,965,944,924,910,873,829,805,776,753,735,728,706,689,661,638,635,629,639,725,712,870,856,1120,886,722,738,997,723,642,610,593,1930,1740,1470,3100,1740,1190,949,798,725,653,618,590,3210,2120,1080,864,749,660,608,585,563,538,504,494,1070,717,660,803,654,666,796,899,843,698,1040,681,804,2810,1630,1360,1000,768,631,595,548,498,523,604,568,691,509,459,564,468,421,414,406,398,385,350,329,322,332,322,302,315,378,420,374,309,262,236,234,230,215,218,206,202,200,199,196,193,207,651,529,466,347,279,252,226,205,179,192,200,215,236,281,217,340,314,282,228,195,192,199,186,177,161,157,395,509,1020,704,394,354,299,268,245,258,277,255,241,225,223,229,227,224,220,218,228,241,242,257,249,261,309,495,675,416,398,360,729,491,402,467,1200,622,424,420,552,447,374,657,588,593,480,419,409,723,731,744,565,503,468,455,1270,1730,967,2290,1790,1090,946,791,734,719,681,758,934,814,737,707 diff --git a/tests/data/evalp/prd/leadtime_1/site_d.csv b/tests/data/evalp/prd/leadtime_1/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..3c7cd7852c876dac0e3625479f13886a430b5f2c --- /dev/null +++ b/tests/data/evalp/prd/leadtime_1/site_d.csv @@ -0,0 +1,51 @@ +2247,2044,2037,1825,1699,1600,1501,1432,1440,1388,1299,1259,1211,1177,1124,1121,1399,1179,1102,1055,1017,1001,979,953,925,927,1899,4782,2601,3050,1998,3478,5762,8745,7777,4086,2968,2456,2138,3199,7187,7165,3942,11588,4643,3618,3184,6052,3723,3356,2645,2330,2103,1928,1890,3624,3647,5821,2949,4161,3855,5200,3162,3896,19818,5228,3711,4874,4868,4267,2978,2748,2500,2276,2107,1969,1815,1714,1649,1561,1491,1428,1347,1288,1245,1207,1163,1189,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,707,759,929,755,684,737,804,680,639,620,706,2474,1406,2686,2037,1410,1130,992,901,847,798,766,750,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,770,794,804,728,721,765,826,795,784,875,711,795,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,402,398,551,449,416,484,801,537,457,483,534,477,483,582,575,557,504,477,515,643,627,627,546,515,497,577,1439,1198,1591,1815,1448,1117,960,847,809,788,749,896,870,801,752 +2247,2045,2037,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1132,1399,1179,1102,1055,1017,1001,979,953,925,932,1905,4784,2619,3050,2002,3506,5783,8764,7777,4086,2968,2456,2138,3299,7225,7165,3957,11588,4643,3618,3255,6052,3726,3356,2645,2330,2103,1928,1900,3645,3691,5821,2950,4161,3916,5200,3162,3956,19830,5228,3723,4877,4869,4267,2978,2748,2500,2276,2107,1969,1815,1714,1650,1561,1491,1428,1347,1288,1245,1207,1163,1195,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,710,760,929,755,686,737,804,680,639,620,713,2474,1418,2686,2037,1410,1130,992,901,847,798,766,754,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,798,784,875,711,798,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,416,484,801,537,457,483,534,477,483,583,575,557,504,478,516,643,627,627,546,515,498,578,1439,1216,1592,1815,1449,1117,960,847,809,788,750,896,870,801,752 +2247,2045,2038,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1136,1399,1179,1102,1055,1017,1001,979,953,926,935,1908,4788,2623,3050,2017,3543,5794,8785,7777,4086,2968,2456,2138,3325,7250,7165,4048,11588,4643,3618,3271,6052,3737,3356,2645,2330,2103,1928,1909,3648,3692,5821,2987,4161,3956,5200,3162,3978,19858,5228,3726,4879,4886,4267,2978,2748,2500,2276,2107,1969,1815,1714,1652,1561,1491,1428,1347,1288,1245,1207,1163,1197,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,710,760,929,755,687,737,804,680,639,620,713,2474,1422,2686,2037,1410,1130,992,901,847,798,766,755,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,802,784,875,711,802,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,417,484,801,537,457,483,534,477,484,583,575,557,504,479,516,643,627,627,546,515,500,578,1439,1224,1596,1815,1451,1117,960,847,809,788,750,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1435,1440,1388,1299,1259,1211,1177,1124,1147,1399,1179,1102,1055,1017,1001,979,953,926,943,1918,4800,2627,3050,2019,3560,5795,8812,7777,4086,2968,2456,2138,3334,7270,7165,4104,11588,4643,3618,3280,6052,3746,3356,2645,2330,2103,1928,1912,3674,3714,5821,2991,4161,3966,5200,3162,3981,19860,5228,3743,4881,4891,4267,2978,2748,2500,2276,2107,1969,1815,1714,1656,1561,1491,1428,1347,1288,1245,1207,1163,1201,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,712,762,929,755,687,737,804,680,639,620,722,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,729,721,765,826,808,784,875,711,804,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,417,485,801,538,458,483,534,478,484,583,575,557,504,479,516,643,627,627,546,515,500,583,1439,1227,1597,1815,1454,1117,960,847,809,788,751,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1153,1399,1180,1102,1055,1017,1001,979,953,926,944,1931,4801,2633,3050,2026,3560,5808,8833,7777,4086,2968,2456,2138,3380,7304,7165,4154,11588,4643,3618,3297,6052,3747,3356,2645,2330,2103,1928,1920,3677,3718,5821,2992,4161,3972,5200,3162,3995,19867,5228,3749,4883,4914,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1204,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,724,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,730,721,765,826,812,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,584,1439,1230,1598,1815,1454,1117,960,847,809,788,752,896,870,801,752 +2247,2049,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1161,1399,1181,1102,1055,1017,1001,979,953,926,944,1936,4806,2636,3050,2028,3571,5817,8844,7777,4086,2968,2456,2138,3474,7311,7165,4158,11588,4643,3618,3297,6052,3748,3356,2645,2330,2103,1928,1921,3681,3727,5821,2995,4161,3980,5200,3162,4060,19884,5228,3760,4884,4938,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1215,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,728,2474,1425,2686,2037,1410,1130,992,901,847,798,766,761,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,773,794,804,731,721,765,826,818,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,585,1439,1234,1601,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1437,1440,1388,1299,1259,1211,1177,1124,1162,1399,1181,1102,1055,1017,1001,979,953,926,945,1937,4809,2653,3050,2029,3601,5817,8848,7777,4086,2968,2456,2138,3504,7314,7165,4167,11588,4643,3618,3300,6052,3749,3356,2645,2330,2103,1928,1922,3688,3729,5821,3014,4161,4047,5200,3162,4095,19885,5228,3792,4886,4952,4267,2978,2748,2500,2276,2107,1969,1815,1714,1675,1561,1491,1428,1347,1288,1245,1207,1163,1218,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,715,764,929,755,693,737,804,680,639,620,731,2474,1429,2686,2037,1410,1130,992,901,847,798,766,764,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,731,721,765,826,831,784,875,711,806,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,538,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1603,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1173,1399,1182,1102,1055,1017,1001,979,953,926,948,1940,4810,2671,3050,2037,3607,5821,8860,7777,4086,2968,2456,2138,3507,7321,7165,4167,11588,4643,3618,3311,6052,3755,3356,2645,2330,2103,1928,1924,3688,3730,5821,3015,4161,4049,5200,3162,4102,19887,5228,3808,4887,4957,4267,2978,2748,2500,2276,2107,1969,1815,1714,1678,1561,1491,1428,1347,1288,1245,1207,1163,1222,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,764,929,755,693,737,804,680,639,620,731,2474,1430,2686,2037,1410,1130,992,901,847,798,766,765,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,721,765,826,832,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1604,1815,1456,1117,960,847,809,788,754,896,870,801,752 +2247,2052,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1176,1399,1182,1102,1055,1017,1001,979,953,926,952,1950,4822,2672,3050,2038,3615,5844,8866,7777,4086,2968,2456,2138,3518,7333,7165,4187,11588,4643,3618,3312,6052,3758,3356,2645,2330,2103,1928,1925,3689,3735,5821,3017,4161,4050,5200,3162,4112,19887,5228,3812,4894,4962,4267,2978,2748,2500,2276,2107,1969,1815,1714,1680,1561,1491,1428,1347,1288,1245,1207,1163,1228,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,765,929,755,693,737,804,680,639,620,732,2474,1449,2686,2037,1410,1130,992,901,847,798,766,766,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,722,765,826,833,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,587,1439,1249,1606,1815,1456,1117,960,847,809,788,755,896,870,801,752 +2247,2053,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1179,1399,1182,1102,1055,1017,1001,979,953,927,962,1958,4823,2682,3050,2038,3642,5845,8899,7777,4086,2968,2456,2138,3528,7338,7165,4190,11588,4643,3618,3314,6056,3761,3356,2645,2330,2103,1928,1926,3691,3749,5821,3018,4161,4050,5200,3162,4116,19905,5228,3813,4896,4973,4267,2978,2748,2500,2276,2107,1969,1815,1714,1681,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,695,737,804,680,639,620,733,2474,1453,2686,2037,1410,1130,992,901,847,798,766,767,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,775,794,804,732,722,765,826,835,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,589,1439,1250,1607,1815,1457,1117,960,847,809,788,755,896,870,801,752 +2247,2054,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1181,1399,1182,1102,1055,1017,1001,979,953,927,968,1959,4825,2682,3050,2041,3648,5856,8906,7777,4086,2968,2456,2138,3575,7343,7166,4252,11588,4643,3618,3323,6059,3762,3356,2645,2330,2103,1928,1937,3697,3752,5821,3023,4161,4053,5200,3162,4118,19917,5228,3824,4901,4975,4267,2978,2748,2500,2276,2107,1969,1815,1714,1684,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,736,2474,1453,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,776,794,804,732,722,765,826,836,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,590,1439,1250,1609,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2057,2040,1825,1699,1600,1501,1441,1440,1388,1299,1259,1211,1177,1124,1184,1399,1182,1102,1055,1017,1001,979,953,928,968,1965,4825,2682,3050,2044,3649,5886,8914,7777,4086,2968,2456,2138,3630,7348,7169,4269,11588,4643,3618,3326,6062,3774,3356,2645,2330,2103,1928,1957,3699,3756,5821,3023,4161,4057,5200,3162,4180,19920,5228,3828,4901,4981,4267,2978,2748,2500,2276,2107,1969,1815,1714,1686,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,738,2474,1458,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,722,765,826,837,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,460,483,534,478,484,584,575,557,504,480,517,643,627,627,546,515,501,591,1439,1251,1610,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2058,2040,1825,1699,1600,1501,1445,1440,1388,1299,1259,1211,1177,1124,1191,1399,1182,1102,1055,1017,1001,979,953,928,969,1966,4841,2694,3050,2044,3650,5895,8920,7777,4086,2968,2456,2138,3683,7348,7170,4284,11588,4643,3618,3337,6072,3775,3356,2645,2330,2103,1928,1967,3704,3762,5821,3025,4161,4057,5200,3162,4198,19920,5228,3828,4903,4985,4267,2978,2748,2500,2276,2107,1969,1815,1714,1689,1561,1491,1428,1347,1288,1245,1207,1163,1233,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,719,767,929,755,698,737,804,680,639,620,742,2474,1476,2686,2037,1410,1130,992,901,847,798,766,770,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,723,765,826,847,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,461,483,534,479,485,584,575,557,504,480,518,643,627,627,546,515,501,592,1439,1251,1611,1815,1460,1117,960,847,809,788,757,896,870,801,752 +2247,2061,2040,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,928,969,1966,4844,2695,3050,2045,3659,5929,8932,7777,4086,2968,2456,2138,3707,7350,7171,4285,11588,4643,3618,3339,6076,3777,3356,2645,2330,2103,1928,1968,3707,3763,5821,3032,4161,4080,5200,3162,4202,19925,5228,3836,4904,4987,4267,2978,2748,2500,2276,2107,1969,1815,1714,1690,1561,1491,1428,1347,1288,1245,1207,1163,1235,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,617,719,767,929,755,699,737,804,680,639,620,744,2474,1477,2686,2037,1410,1130,992,901,847,798,766,772,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,724,765,826,856,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1252,1612,1815,1461,1117,960,847,809,788,758,896,870,801,752 +2247,2062,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,929,974,1973,4844,2697,3050,2048,3676,5930,8948,7777,4086,2968,2456,2138,3729,7360,7171,4300,11588,4643,3618,3341,6076,3779,3357,2645,2330,2103,1928,1968,3708,3770,5821,3035,4161,4091,5200,3162,4210,19927,5228,3840,4906,4997,4267,2978,2748,2500,2276,2107,1969,1815,1714,1694,1561,1491,1428,1347,1288,1245,1207,1163,1238,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,767,929,755,699,737,804,680,639,620,745,2474,1479,2686,2037,1410,1130,992,901,847,798,766,773,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,779,794,804,733,724,765,826,857,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1255,1612,1815,1462,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1192,1399,1183,1102,1055,1017,1001,979,953,929,981,1999,4851,2699,3050,2052,3680,5984,8953,7777,4086,2968,2456,2138,3765,7372,7173,4306,11588,4643,3618,3342,6076,3786,3357,2645,2330,2103,1928,1969,3710,3771,5821,3041,4161,4093,5200,3162,4227,19932,5228,3851,4907,5010,4267,2978,2748,2500,2276,2107,1969,1815,1714,1699,1561,1491,1428,1347,1288,1245,1207,1163,1240,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,699,737,804,680,639,620,749,2474,1479,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,734,724,765,826,863,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1613,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1193,1399,1183,1102,1055,1017,1001,979,953,929,993,2006,4852,2699,3050,2055,3681,6005,8964,7777,4086,2968,2456,2138,3785,7373,7173,4322,11588,4643,3618,3343,6079,3787,3357,2645,2330,2103,1928,1974,3711,3771,5821,3043,4162,4103,5200,3162,4228,19950,5228,3854,4908,5011,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1242,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,700,737,804,680,639,620,750,2474,1482,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,869,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1614,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2064,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1194,1399,1184,1102,1055,1017,1001,979,953,930,994,2008,4854,2699,3050,2056,3685,6006,8965,7777,4086,2968,2456,2138,3790,7383,7174,4328,11588,4643,3618,3359,6079,3788,3357,2645,2330,2103,1928,1974,3712,3772,5821,3049,4164,4108,5200,3162,4261,19953,5228,3862,4908,5019,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1246,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,721,769,929,755,702,737,804,680,639,620,752,2474,1493,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,870,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,463,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1257,1615,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2065,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1197,1399,1184,1102,1055,1017,1001,979,953,930,994,2009,4855,2705,3050,2056,3690,6017,8978,7777,4086,2968,2456,2138,3815,7385,7175,4328,11588,4643,3618,3362,6084,3788,3359,2645,2330,2103,1928,1979,3717,3777,5821,3055,4165,4112,5200,3162,4267,19962,5228,3863,4909,5020,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,769,929,755,704,737,804,680,639,620,752,2474,1496,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,780,794,804,735,724,765,826,871,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,421,489,801,539,463,483,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,593,1439,1260,1617,1815,1464,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1184,1102,1055,1017,1001,979,953,930,1003,2013,4855,2706,3050,2058,3715,6018,8996,7777,4086,2968,2456,2138,3824,7387,7177,4356,11588,4643,3618,3372,6085,3790,3359,2645,2330,2103,1928,1980,3720,3780,5821,3059,4169,4120,5200,3162,4270,19965,5228,3870,4910,5025,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,770,929,755,707,737,804,680,639,620,757,2474,1500,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,883,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,450,421,489,801,539,463,484,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,594,1439,1263,1618,1815,1466,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1007,2020,4856,2710,3050,2060,3716,6046,9002,7777,4086,2968,2456,2138,3834,7391,7181,4360,11588,4643,3618,3372,6086,3791,3359,2645,2330,2103,1928,1993,3723,3781,5821,3062,4173,4136,5201,3162,4293,19970,5228,3873,4911,5026,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1254,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,723,770,929,755,708,737,804,680,639,620,758,2474,1500,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,894,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,481,518,643,627,627,546,515,504,595,1439,1265,1621,1815,1467,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1008,2030,4858,2713,3050,2064,3718,6049,9002,7777,4086,2968,2456,2138,3843,7416,7182,4361,11588,4643,3618,3376,6089,3794,3359,2645,2330,2103,1928,1995,3724,3783,5821,3062,4175,4145,5201,3162,4302,19980,5228,3879,4911,5031,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1256,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,618,725,771,929,755,708,737,804,680,639,620,765,2474,1504,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,737,724,765,826,896,784,875,712,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,482,518,643,627,627,546,515,504,597,1439,1266,1622,1815,1468,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,930,1008,2031,4859,2717,3050,2065,3719,6056,9007,7777,4086,2968,2456,2138,3859,7421,7184,4375,11588,4643,3618,3376,6091,3794,3359,2645,2330,2103,1928,1998,3725,3784,5821,3072,4180,4163,5201,3162,4347,19987,5228,3879,4913,5032,4267,2978,2748,2500,2276,2107,1969,1815,1714,1706,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,711,737,804,680,639,620,766,2474,1510,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,724,765,826,901,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,504,598,1439,1266,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,931,1012,2032,4865,2717,3050,2071,3720,6063,9016,7777,4086,2968,2456,2138,3865,7424,7184,4391,11588,4643,3618,3390,6095,3797,3362,2645,2330,2103,1928,1999,3726,3787,5821,3073,4185,4167,5204,3162,4385,19987,5228,3884,4914,5035,4267,2978,2748,2500,2276,2107,1969,1815,1714,1709,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,712,737,804,680,639,620,769,2474,1511,2686,2037,1410,1130,992,901,847,798,766,781,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,598,1439,1270,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1218,1399,1186,1102,1055,1017,1001,979,953,931,1013,2043,4866,2722,3050,2075,3721,6077,9018,7777,4086,2968,2456,2138,3879,7427,7185,4392,11588,4643,3618,3391,6095,3800,3365,2645,2330,2103,1928,2003,3740,3793,5821,3092,4189,4169,5204,3162,4388,19995,5228,3891,4921,5036,4267,2978,2748,2500,2276,2107,1969,1815,1714,1719,1561,1491,1428,1347,1288,1245,1207,1163,1258,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,727,771,929,755,714,737,804,680,639,620,769,2474,1512,2686,2037,1410,1130,992,901,847,798,766,782,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,599,1439,1277,1624,1815,1469,1118,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1230,1399,1186,1102,1055,1017,1001,979,953,931,1014,2070,4872,2724,3050,2077,3731,6083,9022,7777,4086,2968,2456,2138,3893,7428,7186,4399,11588,4643,3618,3413,6097,3801,3368,2645,2330,2103,1928,2007,3742,3795,5821,3096,4196,4175,5205,3164,4402,19996,5228,3896,4922,5044,4267,2978,2748,2500,2276,2107,1969,1815,1714,1722,1561,1491,1428,1347,1288,1245,1207,1163,1261,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,728,772,929,755,714,737,804,680,639,620,771,2474,1518,2686,2037,1410,1130,992,901,847,798,766,784,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,912,784,875,712,813,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1282,1624,1815,1470,1118,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1232,1399,1186,1102,1055,1017,1001,979,953,931,1014,2107,4877,2727,3050,2077,3734,6084,9026,7777,4086,2968,2456,2138,3907,7430,7187,4412,11588,4643,3618,3417,6098,3803,3369,2645,2330,2103,1928,2008,3742,3796,5821,3102,4203,4175,5206,3167,4419,20002,5228,3898,4923,5045,4267,2978,2748,2500,2276,2107,1969,1815,1714,1732,1561,1491,1428,1347,1288,1245,1207,1163,1272,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,718,737,804,680,639,620,781,2474,1520,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,917,784,875,712,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1284,1624,1815,1471,1119,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1233,1399,1186,1102,1055,1017,1001,979,953,931,1017,2118,4878,2729,3050,2079,3736,6085,9031,7777,4086,2968,2456,2138,3925,7433,7188,4412,11588,4643,3618,3437,6101,3804,3370,2645,2330,2103,1928,2009,3756,3798,5821,3106,4204,4194,5208,3167,4421,20010,5228,3904,4924,5046,4267,2978,2748,2500,2276,2107,1969,1815,1714,1733,1561,1491,1428,1347,1288,1245,1207,1163,1273,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,722,737,804,680,639,620,783,2474,1524,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,739,725,765,826,920,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,585,575,557,504,482,519,643,627,627,546,515,505,602,1439,1287,1624,1815,1471,1119,960,847,810,788,761,896,870,801,752 +2247,2072,2044,1825,1699,1600,1501,1451,1440,1388,1299,1259,1211,1177,1124,1236,1399,1187,1102,1055,1017,1001,979,953,931,1019,2120,4880,2734,3050,2080,3737,6103,9035,7777,4086,2968,2456,2138,3938,7438,7188,4419,11588,4643,3618,3452,6104,3805,3371,2645,2330,2103,1928,2016,3769,3802,5821,3106,4215,4204,5209,3171,4425,20020,5228,3908,4927,5048,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1275,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,731,773,929,755,722,737,804,680,639,620,784,2474,1524,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,921,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1289,1624,1815,1471,1120,960,847,810,788,761,896,870,801,752 +2247,2073,2044,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1237,1399,1187,1102,1055,1017,1001,979,953,932,1020,2129,4883,2736,3050,2083,3739,6104,9047,7777,4086,2968,2456,2138,3943,7438,7189,4453,11588,4643,3618,3472,6105,3805,3371,2645,2330,2103,1928,2017,3771,3811,5821,3106,4216,4209,5209,3173,4430,20022,5228,3913,4928,5051,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1277,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,732,774,929,755,723,737,804,680,639,620,788,2474,1527,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,947,784,875,713,815,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1292,1626,1815,1471,1121,960,847,810,788,762,896,870,801,752 +2247,2074,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1238,1399,1187,1102,1055,1017,1001,979,953,932,1023,2144,4885,2743,3050,2084,3746,6108,9050,7777,4086,2968,2456,2138,3944,7442,7190,4453,11588,4643,3618,3478,6109,3806,3371,2645,2330,2103,1928,2019,3776,3811,5821,3109,4219,4230,5209,3179,4436,20023,5228,3913,4928,5053,4267,2978,2748,2500,2276,2107,1969,1815,1714,1737,1561,1491,1428,1347,1288,1245,1207,1163,1281,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,733,774,929,755,725,737,804,680,639,620,789,2474,1529,2686,2037,1410,1130,992,901,847,798,766,789,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,784,794,804,743,726,765,826,947,784,875,713,816,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,506,603,1439,1293,1626,1815,1472,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2156,4889,2753,3050,2091,3750,6138,9059,7777,4086,2968,2456,2139,3952,7447,7191,4480,11588,4643,3618,3479,6112,3815,3372,2645,2330,2103,1928,2021,3789,3814,5821,3118,4222,4240,5210,3180,4437,20027,5228,3918,4932,5054,4267,2978,2748,2500,2276,2107,1969,1815,1714,1747,1561,1491,1428,1347,1288,1245,1207,1163,1284,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,738,774,929,755,727,737,804,680,639,620,791,2474,1530,2686,2037,1410,1130,992,901,847,798,766,790,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,743,727,765,826,949,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,604,1439,1295,1629,1815,1473,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1452,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2169,4891,2758,3050,2097,3760,6157,9066,7777,4086,2968,2456,2141,3979,7455,7191,4485,11588,4643,3618,3480,6117,3816,3372,2645,2330,2103,1928,2030,3792,3821,5821,3144,4228,4243,5210,3181,4493,20031,5228,3925,4932,5057,4267,2978,2748,2500,2276,2107,1969,1815,1714,1749,1561,1491,1428,1347,1288,1245,1207,1163,1286,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,741,775,929,755,734,737,804,680,639,620,793,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,744,728,765,826,954,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,492,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,605,1439,1303,1630,1815,1473,1122,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1253,1399,1188,1102,1055,1017,1001,979,953,932,1028,2187,4892,2765,3050,2099,3766,6208,9074,7777,4086,2968,2456,2142,3983,7472,7191,4498,11588,4643,3618,3489,6124,3816,3372,2645,2330,2103,1928,2036,3797,3823,5821,3148,4231,4246,5211,3182,4563,20032,5228,3940,4933,5060,4267,2978,2748,2500,2276,2107,1969,1815,1714,1752,1561,1491,1428,1347,1288,1245,1207,1163,1287,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,794,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,805,746,728,765,826,962,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,466,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,506,607,1439,1304,1630,1815,1473,1123,960,847,811,788,763,896,870,801,752 +2247,2078,2046,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1257,1399,1188,1102,1055,1017,1001,979,953,932,1030,2189,4893,2766,3050,2100,3771,6210,9090,7777,4086,2968,2456,2142,4018,7478,7197,4505,11588,4643,3618,3496,6125,3816,3373,2645,2330,2103,1928,2042,3797,3824,5821,3158,4234,4253,5211,3184,4565,20032,5228,3944,4943,5064,4267,2978,2748,2500,2276,2107,1969,1815,1714,1755,1561,1491,1428,1347,1288,1245,1207,1163,1288,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,797,2474,1532,2686,2037,1410,1130,992,901,847,798,766,794,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,746,728,765,826,966,784,875,714,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,467,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,608,1439,1306,1631,1815,1473,1123,960,847,812,788,764,896,870,801,752 +2247,2079,2046,1825,1699,1600,1501,1454,1441,1388,1299,1259,1211,1177,1124,1258,1399,1189,1102,1055,1017,1001,979,953,933,1032,2212,4896,2768,3050,2104,3772,6213,9108,7777,4086,2968,2456,2142,4030,7481,7204,4513,11588,4643,3618,3502,6132,3817,3374,2645,2330,2103,1928,2042,3807,3828,5821,3161,4241,4253,5214,3190,4648,20039,5228,3955,4944,5065,4267,2978,2748,2500,2276,2107,1969,1815,1714,1761,1561,1491,1428,1347,1288,1245,1207,1163,1292,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,743,775,929,756,741,737,804,680,639,620,807,2474,1538,2686,2037,1410,1130,992,901,847,798,766,795,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,747,729,765,826,968,784,875,715,819,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,609,1439,1306,1632,1815,1474,1124,960,847,813,788,765,896,870,801,752 +2247,2080,2046,1825,1699,1600,1501,1456,1441,1388,1299,1259,1211,1177,1124,1279,1399,1190,1102,1055,1017,1001,979,953,934,1039,2215,4902,2779,3050,2112,3774,6222,9125,7777,4086,2968,2456,2144,4058,7484,7205,4516,11588,4643,3618,3527,6133,3817,3376,2645,2330,2103,1928,2053,3821,3830,5829,3195,4250,4254,5214,3190,4651,20053,5228,3958,4948,5070,4267,2978,2748,2500,2276,2107,1969,1815,1714,1763,1561,1491,1428,1347,1288,1245,1207,1163,1294,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,744,775,929,756,742,737,804,680,639,620,808,2474,1541,2686,2037,1410,1130,992,901,847,798,766,798,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,788,794,806,747,729,765,826,969,784,875,715,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1315,1633,1815,1475,1125,960,847,813,788,765,896,870,801,752 +2247,2081,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1284,1399,1190,1102,1055,1017,1001,979,953,934,1047,2223,4902,2783,3050,2116,3817,6254,9131,7777,4086,2968,2456,2148,4064,7492,7209,4538,11588,4643,3618,3535,6133,3820,3377,2645,2330,2103,1928,2058,3838,3833,5830,3201,4251,4254,5214,3198,4662,20076,5228,3963,4951,5074,4267,2978,2748,2500,2276,2107,1969,1815,1714,1768,1561,1491,1428,1347,1288,1245,1207,1163,1296,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,620,747,777,929,756,743,737,804,680,639,620,812,2474,1541,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,681,744,932,789,794,806,747,730,765,826,986,784,875,716,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,492,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1317,1635,1815,1476,1125,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1288,1400,1191,1102,1055,1017,1001,979,953,935,1071,2238,4906,2784,3050,2117,3823,6265,9138,7777,4086,2968,2456,2151,4067,7504,7218,4563,11588,4643,3618,3539,6139,3821,3378,2645,2330,2103,1928,2096,3840,3840,5831,3219,4257,4305,5214,3198,4757,20077,5228,3968,4955,5082,4267,2978,2748,2500,2276,2107,1969,1815,1714,1775,1561,1491,1428,1347,1288,1245,1207,1163,1297,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,749,778,929,757,745,737,804,680,639,620,817,2474,1542,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,790,794,806,748,730,765,826,1023,784,875,716,821,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,493,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,508,611,1439,1317,1636,1815,1477,1126,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1291,1400,1192,1102,1055,1017,1001,979,953,935,1080,2253,4908,2789,3050,2124,3825,6291,9142,7777,4086,2968,2456,2152,4079,7510,7224,4569,11588,4643,3618,3563,6146,3824,3381,2645,2330,2103,1928,2104,3844,3845,5832,3229,4269,4315,5214,3200,4762,20111,5228,3970,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1777,1561,1491,1428,1347,1288,1245,1207,1163,1299,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,750,780,929,757,748,737,804,680,639,620,822,2474,1555,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,791,794,807,749,730,765,826,1026,784,875,716,823,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,427,493,802,542,470,485,534,484,488,586,575,557,504,484,519,643,627,627,546,515,509,613,1439,1320,1637,1816,1479,1127,960,847,814,788,766,897,870,801,752 +2247,2084,2046,1825,1699,1600,1501,1458,1442,1388,1299,1259,1211,1177,1124,1307,1401,1193,1102,1055,1017,1001,979,953,935,1085,2253,4909,2790,3050,2125,3836,6294,9153,7777,4086,2968,2456,2155,4084,7515,7228,4572,11588,4643,3618,3564,6156,3826,3383,2645,2330,2103,1928,2106,3847,3847,5836,3235,4269,4323,5215,3201,4762,20123,5228,3973,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1778,1561,1491,1428,1347,1288,1245,1207,1163,1305,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,761,781,929,757,756,737,804,680,639,620,831,2474,1575,2686,2037,1410,1130,992,901,847,798,766,801,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,792,794,807,750,732,765,826,1030,784,875,717,824,2295,1266,1115,936,817,742,713,680,647,647,678,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,428,493,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,509,613,1439,1321,1637,1816,1479,1127,960,847,814,789,767,897,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1319,1401,1193,1102,1055,1017,1001,979,953,935,1088,2256,4913,2791,3050,2144,3844,6301,9157,7777,4086,2968,2456,2158,4090,7516,7229,4617,11589,4643,3618,3582,6157,3828,3383,2645,2330,2103,1928,2108,3852,3856,5838,3238,4269,4333,5216,3201,4775,20135,5228,3979,4962,5094,4267,2978,2748,2500,2276,2107,1969,1815,1714,1782,1562,1491,1428,1347,1288,1245,1207,1163,1306,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,621,763,783,929,758,757,737,804,680,639,620,860,2474,1578,2686,2037,1410,1130,992,901,847,798,766,803,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,793,794,807,754,732,765,826,1040,784,875,717,826,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,510,614,1439,1322,1638,1816,1482,1127,960,847,815,789,768,898,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1350,1401,1193,1102,1055,1017,1001,979,953,936,1111,2264,4916,2791,3050,2146,3852,6310,9187,7777,4086,2968,2456,2164,4093,7524,7233,4618,11594,4643,3618,3605,6160,3834,3383,2645,2330,2103,1928,2115,3856,3856,5841,3263,4289,4341,5219,3202,4837,20152,5228,3979,4969,5099,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1563,1491,1428,1347,1288,1245,1207,1163,1308,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,621,778,784,929,759,768,737,804,680,639,620,866,2474,1587,2686,2037,1410,1130,992,901,847,798,766,804,2793,1574,1087,960,883,823,782,755,730,705,683,746,932,794,794,808,757,733,765,826,1043,784,875,718,827,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,485,519,643,627,627,546,515,510,615,1439,1326,1641,1817,1484,1128,960,847,815,789,768,898,870,801,752 +2247,2086,2048,1825,1699,1600,1501,1459,1443,1388,1299,1259,1211,1177,1124,1355,1403,1194,1102,1055,1017,1001,979,953,936,1112,2311,4927,2807,3050,2148,3856,6318,9214,7777,4086,2968,2456,2170,4096,7525,7233,4634,11598,4643,3618,3611,6161,3841,3384,2645,2330,2103,1928,2122,3880,3861,5845,3290,4303,4377,5220,3203,4919,20159,5228,3981,4970,5105,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1564,1491,1428,1347,1288,1245,1207,1163,1313,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,622,780,784,929,759,769,737,804,680,639,620,867,2474,1592,2686,2037,1410,1130,992,901,847,798,766,807,2793,1574,1087,960,883,823,782,755,730,705,684,746,932,795,794,808,757,734,765,826,1044,784,875,720,830,2295,1268,1115,936,817,742,713,680,647,647,679,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,803,542,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,510,618,1439,1327,1644,1818,1486,1128,960,847,816,790,768,898,870,801,752 +2247,2087,2048,1825,1699,1600,1501,1461,1443,1388,1299,1259,1211,1177,1124,1356,1403,1196,1102,1055,1017,1001,979,953,937,1117,2317,4929,2809,3050,2153,3857,6338,9222,7777,4086,2968,2456,2171,4110,7574,7238,4635,11599,4643,3618,3620,6164,3842,3384,2645,2330,2103,1928,2122,3895,3863,5850,3296,4308,4386,5220,3203,4932,20181,5228,4017,4978,5129,4267,2978,2748,2500,2276,2107,1969,1815,1714,1801,1564,1491,1428,1347,1288,1245,1207,1163,1316,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,606,625,623,781,785,929,759,772,737,804,680,639,620,869,2474,1600,2686,2037,1410,1130,992,901,847,798,766,808,2793,1574,1087,960,883,823,782,755,730,705,685,747,932,798,795,809,759,734,765,826,1070,784,875,721,832,2295,1269,1115,936,817,742,713,680,647,647,680,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,430,495,803,543,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,511,619,1439,1327,1646,1818,1488,1129,960,847,816,791,768,899,870,801,752 +2247,2090,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1359,1403,1197,1102,1055,1017,1001,979,953,938,1119,2322,4930,2814,3050,2159,3884,6444,9223,7777,4086,2968,2456,2181,4113,7582,7242,4651,11603,4643,3618,3621,6166,3844,3385,2645,2330,2103,1928,2123,3931,3869,5851,3301,4321,4396,5224,3205,4943,20185,5228,4055,4982,5140,4267,2978,2748,2500,2276,2107,1969,1815,1714,1805,1565,1491,1428,1347,1288,1245,1207,1163,1332,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,607,625,625,782,786,929,760,773,737,804,680,639,620,875,2474,1604,2686,2037,1410,1130,992,901,847,798,766,809,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,798,796,809,768,735,765,826,1118,784,875,722,832,2295,1273,1115,936,817,742,713,680,647,647,681,651,692,608,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,431,496,803,543,472,485,534,485,488,588,576,557,504,486,520,643,627,627,546,515,511,619,1439,1330,1647,1821,1489,1130,960,847,822,792,772,899,870,801,752 +2247,2094,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1376,1405,1200,1102,1055,1017,1001,979,953,938,1128,2340,4931,2815,3050,2160,3898,6450,9233,7777,4086,2968,2456,2196,4154,7589,7242,4680,11607,4643,3618,3632,6169,3845,3390,2645,2330,2105,1928,2124,3952,3877,5857,3339,4324,4397,5227,3218,5130,20191,5228,4080,4984,5143,4267,2978,2748,2500,2276,2107,1969,1815,1714,1828,1566,1491,1428,1347,1288,1245,1207,1163,1334,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,609,625,626,784,786,929,761,777,737,804,680,639,620,876,2474,1607,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,799,796,809,772,738,765,826,1123,784,875,723,837,2295,1274,1115,936,817,742,713,680,647,647,683,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,432,496,803,543,474,486,534,485,489,588,576,557,504,487,521,643,627,627,546,515,511,622,1439,1343,1655,1823,1492,1133,960,847,823,794,775,899,870,801,752 +2247,2097,2049,1825,1700,1600,1501,1465,1443,1388,1299,1259,1211,1177,1124,1377,1406,1200,1102,1055,1017,1001,979,953,938,1130,2425,4933,2833,3050,2161,3909,6452,9233,7777,4086,2968,2456,2211,4232,7600,7258,4711,11617,4643,3618,3670,6182,3852,3390,2645,2330,2108,1928,2130,3958,3886,5861,3344,4339,4401,5235,3218,5158,20211,5228,4087,4990,5213,4267,2978,2748,2500,2276,2107,1969,1815,1714,1839,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,610,625,626,786,788,929,762,778,737,804,680,639,621,920,2474,1629,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,688,750,933,801,797,809,775,738,765,826,1126,784,876,723,838,2295,1276,1115,936,817,742,713,680,649,647,689,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,450,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,435,496,803,544,475,486,534,485,491,588,576,557,504,487,522,643,627,627,546,515,513,623,1439,1364,1655,1829,1494,1138,960,847,825,798,777,899,870,801,752 +2247,2098,2049,1825,1701,1600,1501,1476,1444,1388,1299,1259,1211,1177,1124,1415,1408,1200,1102,1055,1017,1001,979,953,942,1209,2471,4934,2835,3050,2168,3961,6499,9275,7777,4086,2968,2456,2222,4239,7634,7268,4909,11617,4643,3618,3730,6184,3860,3394,2645,2330,2111,1928,2152,3958,3891,5869,3361,4352,4472,5235,3222,5199,20236,5230,4188,4991,5279,4267,2978,2748,2500,2276,2107,1969,1815,1714,1847,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,613,625,627,789,793,929,764,796,737,804,680,639,621,927,2474,1656,2686,2037,1410,1130,992,901,847,798,766,826,2793,1574,1087,960,883,823,782,755,730,705,692,752,935,808,797,811,777,741,765,826,1146,784,876,723,869,2303,1278,1115,936,817,742,713,680,649,647,693,651,692,609,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,409,398,551,450,437,496,803,544,476,486,534,486,491,588,576,557,504,487,522,643,627,627,546,515,514,623,1439,1364,1659,1830,1495,1138,960,847,828,802,786,901,870,801,752 +2247,2106,2051,1825,1702,1600,1501,1477,1447,1388,1299,1259,1211,1177,1124,1415,1409,1200,1102,1055,1017,1001,980,953,942,1309,2510,4939,2880,3050,2210,4038,6563,9357,7781,4086,2968,2456,2250,4290,7640,7269,4968,11619,4643,3618,3763,6189,3869,3394,2645,2330,2112,1928,2208,4062,3895,5876,3439,4358,4513,5255,3230,5251,20249,5234,4213,4998,5285,4267,2987,2748,2500,2276,2107,1969,1815,1714,1872,1570,1491,1428,1347,1288,1245,1207,1163,1338,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,614,626,629,819,800,929,765,798,737,804,680,639,623,937,2478,1659,2686,2037,1410,1130,992,901,847,798,766,837,2793,1574,1087,960,883,823,782,755,730,705,696,753,935,813,798,812,784,745,765,826,1317,784,882,726,881,2305,1283,1115,936,817,742,713,680,649,647,695,651,692,610,576,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,533,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,410,399,551,451,441,497,805,545,478,487,534,486,493,588,576,557,504,489,522,643,627,627,546,515,519,667,1439,1365,1675,1831,1497,1139,960,851,830,805,787,902,870,801,752 +2247,2177,2056,1825,1705,1600,1501,1477,1448,1388,1299,1259,1211,1177,1124,1420,1411,1206,1102,1055,1017,1001,984,954,963,1426,2614,4959,2923,3050,2212,4284,6685,9417,7782,4086,2968,2456,2284,4451,7676,7273,5053,11664,4643,3618,4118,6230,3886,3396,2645,2330,2130,1928,2211,4371,3940,5900,3487,4420,4600,5290,3263,5401,20348,5240,4273,5090,5561,4275,2990,2748,2500,2276,2107,1969,1815,1714,1890,1571,1491,1428,1347,1288,1245,1207,1163,1376,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,601,621,626,630,821,830,929,767,891,737,804,680,646,624,1025,2481,1666,2693,2037,1410,1130,992,901,847,798,766,847,2793,1574,1087,960,883,823,782,755,730,705,704,754,937,819,802,815,792,746,766,826,1983,784,887,737,886,2337,1290,1117,936,817,742,713,680,664,647,697,651,692,612,578,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,535,476,448,397,367,354,342,332,320,324,327,333,340,359,331,383,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,520,413,410,399,551,451,454,503,806,549,504,488,534,487,494,591,578,558,504,489,524,644,627,627,546,515,521,677,1439,1390,1718,1848,1504,1155,960,852,836,896,792,910,870,801,752 diff --git a/tests/data/evalp/prd/leadtime_1/site_e.csv b/tests/data/evalp/prd/leadtime_1/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..3c7cd7852c876dac0e3625479f13886a430b5f2c --- /dev/null +++ b/tests/data/evalp/prd/leadtime_1/site_e.csv @@ -0,0 +1,51 @@ +2247,2044,2037,1825,1699,1600,1501,1432,1440,1388,1299,1259,1211,1177,1124,1121,1399,1179,1102,1055,1017,1001,979,953,925,927,1899,4782,2601,3050,1998,3478,5762,8745,7777,4086,2968,2456,2138,3199,7187,7165,3942,11588,4643,3618,3184,6052,3723,3356,2645,2330,2103,1928,1890,3624,3647,5821,2949,4161,3855,5200,3162,3896,19818,5228,3711,4874,4868,4267,2978,2748,2500,2276,2107,1969,1815,1714,1649,1561,1491,1428,1347,1288,1245,1207,1163,1189,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,707,759,929,755,684,737,804,680,639,620,706,2474,1406,2686,2037,1410,1130,992,901,847,798,766,750,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,770,794,804,728,721,765,826,795,784,875,711,795,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,402,398,551,449,416,484,801,537,457,483,534,477,483,582,575,557,504,477,515,643,627,627,546,515,497,577,1439,1198,1591,1815,1448,1117,960,847,809,788,749,896,870,801,752 +2247,2045,2037,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1132,1399,1179,1102,1055,1017,1001,979,953,925,932,1905,4784,2619,3050,2002,3506,5783,8764,7777,4086,2968,2456,2138,3299,7225,7165,3957,11588,4643,3618,3255,6052,3726,3356,2645,2330,2103,1928,1900,3645,3691,5821,2950,4161,3916,5200,3162,3956,19830,5228,3723,4877,4869,4267,2978,2748,2500,2276,2107,1969,1815,1714,1650,1561,1491,1428,1347,1288,1245,1207,1163,1195,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,710,760,929,755,686,737,804,680,639,620,713,2474,1418,2686,2037,1410,1130,992,901,847,798,766,754,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,798,784,875,711,798,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,416,484,801,537,457,483,534,477,483,583,575,557,504,478,516,643,627,627,546,515,498,578,1439,1216,1592,1815,1449,1117,960,847,809,788,750,896,870,801,752 +2247,2045,2038,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1136,1399,1179,1102,1055,1017,1001,979,953,926,935,1908,4788,2623,3050,2017,3543,5794,8785,7777,4086,2968,2456,2138,3325,7250,7165,4048,11588,4643,3618,3271,6052,3737,3356,2645,2330,2103,1928,1909,3648,3692,5821,2987,4161,3956,5200,3162,3978,19858,5228,3726,4879,4886,4267,2978,2748,2500,2276,2107,1969,1815,1714,1652,1561,1491,1428,1347,1288,1245,1207,1163,1197,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,710,760,929,755,687,737,804,680,639,620,713,2474,1422,2686,2037,1410,1130,992,901,847,798,766,755,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,802,784,875,711,802,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,417,484,801,537,457,483,534,477,484,583,575,557,504,479,516,643,627,627,546,515,500,578,1439,1224,1596,1815,1451,1117,960,847,809,788,750,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1435,1440,1388,1299,1259,1211,1177,1124,1147,1399,1179,1102,1055,1017,1001,979,953,926,943,1918,4800,2627,3050,2019,3560,5795,8812,7777,4086,2968,2456,2138,3334,7270,7165,4104,11588,4643,3618,3280,6052,3746,3356,2645,2330,2103,1928,1912,3674,3714,5821,2991,4161,3966,5200,3162,3981,19860,5228,3743,4881,4891,4267,2978,2748,2500,2276,2107,1969,1815,1714,1656,1561,1491,1428,1347,1288,1245,1207,1163,1201,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,712,762,929,755,687,737,804,680,639,620,722,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,729,721,765,826,808,784,875,711,804,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,417,485,801,538,458,483,534,478,484,583,575,557,504,479,516,643,627,627,546,515,500,583,1439,1227,1597,1815,1454,1117,960,847,809,788,751,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1153,1399,1180,1102,1055,1017,1001,979,953,926,944,1931,4801,2633,3050,2026,3560,5808,8833,7777,4086,2968,2456,2138,3380,7304,7165,4154,11588,4643,3618,3297,6052,3747,3356,2645,2330,2103,1928,1920,3677,3718,5821,2992,4161,3972,5200,3162,3995,19867,5228,3749,4883,4914,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1204,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,724,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,730,721,765,826,812,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,584,1439,1230,1598,1815,1454,1117,960,847,809,788,752,896,870,801,752 +2247,2049,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1161,1399,1181,1102,1055,1017,1001,979,953,926,944,1936,4806,2636,3050,2028,3571,5817,8844,7777,4086,2968,2456,2138,3474,7311,7165,4158,11588,4643,3618,3297,6052,3748,3356,2645,2330,2103,1928,1921,3681,3727,5821,2995,4161,3980,5200,3162,4060,19884,5228,3760,4884,4938,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1215,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,728,2474,1425,2686,2037,1410,1130,992,901,847,798,766,761,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,773,794,804,731,721,765,826,818,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,585,1439,1234,1601,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1437,1440,1388,1299,1259,1211,1177,1124,1162,1399,1181,1102,1055,1017,1001,979,953,926,945,1937,4809,2653,3050,2029,3601,5817,8848,7777,4086,2968,2456,2138,3504,7314,7165,4167,11588,4643,3618,3300,6052,3749,3356,2645,2330,2103,1928,1922,3688,3729,5821,3014,4161,4047,5200,3162,4095,19885,5228,3792,4886,4952,4267,2978,2748,2500,2276,2107,1969,1815,1714,1675,1561,1491,1428,1347,1288,1245,1207,1163,1218,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,715,764,929,755,693,737,804,680,639,620,731,2474,1429,2686,2037,1410,1130,992,901,847,798,766,764,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,731,721,765,826,831,784,875,711,806,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,538,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1603,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1173,1399,1182,1102,1055,1017,1001,979,953,926,948,1940,4810,2671,3050,2037,3607,5821,8860,7777,4086,2968,2456,2138,3507,7321,7165,4167,11588,4643,3618,3311,6052,3755,3356,2645,2330,2103,1928,1924,3688,3730,5821,3015,4161,4049,5200,3162,4102,19887,5228,3808,4887,4957,4267,2978,2748,2500,2276,2107,1969,1815,1714,1678,1561,1491,1428,1347,1288,1245,1207,1163,1222,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,764,929,755,693,737,804,680,639,620,731,2474,1430,2686,2037,1410,1130,992,901,847,798,766,765,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,721,765,826,832,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1604,1815,1456,1117,960,847,809,788,754,896,870,801,752 +2247,2052,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1176,1399,1182,1102,1055,1017,1001,979,953,926,952,1950,4822,2672,3050,2038,3615,5844,8866,7777,4086,2968,2456,2138,3518,7333,7165,4187,11588,4643,3618,3312,6052,3758,3356,2645,2330,2103,1928,1925,3689,3735,5821,3017,4161,4050,5200,3162,4112,19887,5228,3812,4894,4962,4267,2978,2748,2500,2276,2107,1969,1815,1714,1680,1561,1491,1428,1347,1288,1245,1207,1163,1228,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,765,929,755,693,737,804,680,639,620,732,2474,1449,2686,2037,1410,1130,992,901,847,798,766,766,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,722,765,826,833,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,587,1439,1249,1606,1815,1456,1117,960,847,809,788,755,896,870,801,752 +2247,2053,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1179,1399,1182,1102,1055,1017,1001,979,953,927,962,1958,4823,2682,3050,2038,3642,5845,8899,7777,4086,2968,2456,2138,3528,7338,7165,4190,11588,4643,3618,3314,6056,3761,3356,2645,2330,2103,1928,1926,3691,3749,5821,3018,4161,4050,5200,3162,4116,19905,5228,3813,4896,4973,4267,2978,2748,2500,2276,2107,1969,1815,1714,1681,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,695,737,804,680,639,620,733,2474,1453,2686,2037,1410,1130,992,901,847,798,766,767,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,775,794,804,732,722,765,826,835,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,589,1439,1250,1607,1815,1457,1117,960,847,809,788,755,896,870,801,752 +2247,2054,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1181,1399,1182,1102,1055,1017,1001,979,953,927,968,1959,4825,2682,3050,2041,3648,5856,8906,7777,4086,2968,2456,2138,3575,7343,7166,4252,11588,4643,3618,3323,6059,3762,3356,2645,2330,2103,1928,1937,3697,3752,5821,3023,4161,4053,5200,3162,4118,19917,5228,3824,4901,4975,4267,2978,2748,2500,2276,2107,1969,1815,1714,1684,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,736,2474,1453,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,776,794,804,732,722,765,826,836,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,590,1439,1250,1609,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2057,2040,1825,1699,1600,1501,1441,1440,1388,1299,1259,1211,1177,1124,1184,1399,1182,1102,1055,1017,1001,979,953,928,968,1965,4825,2682,3050,2044,3649,5886,8914,7777,4086,2968,2456,2138,3630,7348,7169,4269,11588,4643,3618,3326,6062,3774,3356,2645,2330,2103,1928,1957,3699,3756,5821,3023,4161,4057,5200,3162,4180,19920,5228,3828,4901,4981,4267,2978,2748,2500,2276,2107,1969,1815,1714,1686,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,738,2474,1458,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,722,765,826,837,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,460,483,534,478,484,584,575,557,504,480,517,643,627,627,546,515,501,591,1439,1251,1610,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2058,2040,1825,1699,1600,1501,1445,1440,1388,1299,1259,1211,1177,1124,1191,1399,1182,1102,1055,1017,1001,979,953,928,969,1966,4841,2694,3050,2044,3650,5895,8920,7777,4086,2968,2456,2138,3683,7348,7170,4284,11588,4643,3618,3337,6072,3775,3356,2645,2330,2103,1928,1967,3704,3762,5821,3025,4161,4057,5200,3162,4198,19920,5228,3828,4903,4985,4267,2978,2748,2500,2276,2107,1969,1815,1714,1689,1561,1491,1428,1347,1288,1245,1207,1163,1233,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,719,767,929,755,698,737,804,680,639,620,742,2474,1476,2686,2037,1410,1130,992,901,847,798,766,770,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,723,765,826,847,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,461,483,534,479,485,584,575,557,504,480,518,643,627,627,546,515,501,592,1439,1251,1611,1815,1460,1117,960,847,809,788,757,896,870,801,752 +2247,2061,2040,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,928,969,1966,4844,2695,3050,2045,3659,5929,8932,7777,4086,2968,2456,2138,3707,7350,7171,4285,11588,4643,3618,3339,6076,3777,3356,2645,2330,2103,1928,1968,3707,3763,5821,3032,4161,4080,5200,3162,4202,19925,5228,3836,4904,4987,4267,2978,2748,2500,2276,2107,1969,1815,1714,1690,1561,1491,1428,1347,1288,1245,1207,1163,1235,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,617,719,767,929,755,699,737,804,680,639,620,744,2474,1477,2686,2037,1410,1130,992,901,847,798,766,772,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,724,765,826,856,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1252,1612,1815,1461,1117,960,847,809,788,758,896,870,801,752 +2247,2062,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,929,974,1973,4844,2697,3050,2048,3676,5930,8948,7777,4086,2968,2456,2138,3729,7360,7171,4300,11588,4643,3618,3341,6076,3779,3357,2645,2330,2103,1928,1968,3708,3770,5821,3035,4161,4091,5200,3162,4210,19927,5228,3840,4906,4997,4267,2978,2748,2500,2276,2107,1969,1815,1714,1694,1561,1491,1428,1347,1288,1245,1207,1163,1238,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,767,929,755,699,737,804,680,639,620,745,2474,1479,2686,2037,1410,1130,992,901,847,798,766,773,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,779,794,804,733,724,765,826,857,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1255,1612,1815,1462,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1192,1399,1183,1102,1055,1017,1001,979,953,929,981,1999,4851,2699,3050,2052,3680,5984,8953,7777,4086,2968,2456,2138,3765,7372,7173,4306,11588,4643,3618,3342,6076,3786,3357,2645,2330,2103,1928,1969,3710,3771,5821,3041,4161,4093,5200,3162,4227,19932,5228,3851,4907,5010,4267,2978,2748,2500,2276,2107,1969,1815,1714,1699,1561,1491,1428,1347,1288,1245,1207,1163,1240,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,699,737,804,680,639,620,749,2474,1479,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,734,724,765,826,863,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1613,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1193,1399,1183,1102,1055,1017,1001,979,953,929,993,2006,4852,2699,3050,2055,3681,6005,8964,7777,4086,2968,2456,2138,3785,7373,7173,4322,11588,4643,3618,3343,6079,3787,3357,2645,2330,2103,1928,1974,3711,3771,5821,3043,4162,4103,5200,3162,4228,19950,5228,3854,4908,5011,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1242,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,700,737,804,680,639,620,750,2474,1482,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,869,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1614,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2064,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1194,1399,1184,1102,1055,1017,1001,979,953,930,994,2008,4854,2699,3050,2056,3685,6006,8965,7777,4086,2968,2456,2138,3790,7383,7174,4328,11588,4643,3618,3359,6079,3788,3357,2645,2330,2103,1928,1974,3712,3772,5821,3049,4164,4108,5200,3162,4261,19953,5228,3862,4908,5019,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1246,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,721,769,929,755,702,737,804,680,639,620,752,2474,1493,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,870,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,463,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1257,1615,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2065,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1197,1399,1184,1102,1055,1017,1001,979,953,930,994,2009,4855,2705,3050,2056,3690,6017,8978,7777,4086,2968,2456,2138,3815,7385,7175,4328,11588,4643,3618,3362,6084,3788,3359,2645,2330,2103,1928,1979,3717,3777,5821,3055,4165,4112,5200,3162,4267,19962,5228,3863,4909,5020,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,769,929,755,704,737,804,680,639,620,752,2474,1496,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,780,794,804,735,724,765,826,871,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,421,489,801,539,463,483,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,593,1439,1260,1617,1815,1464,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1184,1102,1055,1017,1001,979,953,930,1003,2013,4855,2706,3050,2058,3715,6018,8996,7777,4086,2968,2456,2138,3824,7387,7177,4356,11588,4643,3618,3372,6085,3790,3359,2645,2330,2103,1928,1980,3720,3780,5821,3059,4169,4120,5200,3162,4270,19965,5228,3870,4910,5025,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,770,929,755,707,737,804,680,639,620,757,2474,1500,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,883,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,450,421,489,801,539,463,484,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,594,1439,1263,1618,1815,1466,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1007,2020,4856,2710,3050,2060,3716,6046,9002,7777,4086,2968,2456,2138,3834,7391,7181,4360,11588,4643,3618,3372,6086,3791,3359,2645,2330,2103,1928,1993,3723,3781,5821,3062,4173,4136,5201,3162,4293,19970,5228,3873,4911,5026,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1254,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,723,770,929,755,708,737,804,680,639,620,758,2474,1500,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,894,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,481,518,643,627,627,546,515,504,595,1439,1265,1621,1815,1467,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1008,2030,4858,2713,3050,2064,3718,6049,9002,7777,4086,2968,2456,2138,3843,7416,7182,4361,11588,4643,3618,3376,6089,3794,3359,2645,2330,2103,1928,1995,3724,3783,5821,3062,4175,4145,5201,3162,4302,19980,5228,3879,4911,5031,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1256,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,618,725,771,929,755,708,737,804,680,639,620,765,2474,1504,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,737,724,765,826,896,784,875,712,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,482,518,643,627,627,546,515,504,597,1439,1266,1622,1815,1468,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,930,1008,2031,4859,2717,3050,2065,3719,6056,9007,7777,4086,2968,2456,2138,3859,7421,7184,4375,11588,4643,3618,3376,6091,3794,3359,2645,2330,2103,1928,1998,3725,3784,5821,3072,4180,4163,5201,3162,4347,19987,5228,3879,4913,5032,4267,2978,2748,2500,2276,2107,1969,1815,1714,1706,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,711,737,804,680,639,620,766,2474,1510,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,724,765,826,901,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,504,598,1439,1266,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,931,1012,2032,4865,2717,3050,2071,3720,6063,9016,7777,4086,2968,2456,2138,3865,7424,7184,4391,11588,4643,3618,3390,6095,3797,3362,2645,2330,2103,1928,1999,3726,3787,5821,3073,4185,4167,5204,3162,4385,19987,5228,3884,4914,5035,4267,2978,2748,2500,2276,2107,1969,1815,1714,1709,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,712,737,804,680,639,620,769,2474,1511,2686,2037,1410,1130,992,901,847,798,766,781,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,598,1439,1270,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1218,1399,1186,1102,1055,1017,1001,979,953,931,1013,2043,4866,2722,3050,2075,3721,6077,9018,7777,4086,2968,2456,2138,3879,7427,7185,4392,11588,4643,3618,3391,6095,3800,3365,2645,2330,2103,1928,2003,3740,3793,5821,3092,4189,4169,5204,3162,4388,19995,5228,3891,4921,5036,4267,2978,2748,2500,2276,2107,1969,1815,1714,1719,1561,1491,1428,1347,1288,1245,1207,1163,1258,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,727,771,929,755,714,737,804,680,639,620,769,2474,1512,2686,2037,1410,1130,992,901,847,798,766,782,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,599,1439,1277,1624,1815,1469,1118,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1230,1399,1186,1102,1055,1017,1001,979,953,931,1014,2070,4872,2724,3050,2077,3731,6083,9022,7777,4086,2968,2456,2138,3893,7428,7186,4399,11588,4643,3618,3413,6097,3801,3368,2645,2330,2103,1928,2007,3742,3795,5821,3096,4196,4175,5205,3164,4402,19996,5228,3896,4922,5044,4267,2978,2748,2500,2276,2107,1969,1815,1714,1722,1561,1491,1428,1347,1288,1245,1207,1163,1261,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,728,772,929,755,714,737,804,680,639,620,771,2474,1518,2686,2037,1410,1130,992,901,847,798,766,784,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,912,784,875,712,813,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1282,1624,1815,1470,1118,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1232,1399,1186,1102,1055,1017,1001,979,953,931,1014,2107,4877,2727,3050,2077,3734,6084,9026,7777,4086,2968,2456,2138,3907,7430,7187,4412,11588,4643,3618,3417,6098,3803,3369,2645,2330,2103,1928,2008,3742,3796,5821,3102,4203,4175,5206,3167,4419,20002,5228,3898,4923,5045,4267,2978,2748,2500,2276,2107,1969,1815,1714,1732,1561,1491,1428,1347,1288,1245,1207,1163,1272,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,718,737,804,680,639,620,781,2474,1520,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,917,784,875,712,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1284,1624,1815,1471,1119,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1233,1399,1186,1102,1055,1017,1001,979,953,931,1017,2118,4878,2729,3050,2079,3736,6085,9031,7777,4086,2968,2456,2138,3925,7433,7188,4412,11588,4643,3618,3437,6101,3804,3370,2645,2330,2103,1928,2009,3756,3798,5821,3106,4204,4194,5208,3167,4421,20010,5228,3904,4924,5046,4267,2978,2748,2500,2276,2107,1969,1815,1714,1733,1561,1491,1428,1347,1288,1245,1207,1163,1273,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,722,737,804,680,639,620,783,2474,1524,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,739,725,765,826,920,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,585,575,557,504,482,519,643,627,627,546,515,505,602,1439,1287,1624,1815,1471,1119,960,847,810,788,761,896,870,801,752 +2247,2072,2044,1825,1699,1600,1501,1451,1440,1388,1299,1259,1211,1177,1124,1236,1399,1187,1102,1055,1017,1001,979,953,931,1019,2120,4880,2734,3050,2080,3737,6103,9035,7777,4086,2968,2456,2138,3938,7438,7188,4419,11588,4643,3618,3452,6104,3805,3371,2645,2330,2103,1928,2016,3769,3802,5821,3106,4215,4204,5209,3171,4425,20020,5228,3908,4927,5048,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1275,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,731,773,929,755,722,737,804,680,639,620,784,2474,1524,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,921,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1289,1624,1815,1471,1120,960,847,810,788,761,896,870,801,752 +2247,2073,2044,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1237,1399,1187,1102,1055,1017,1001,979,953,932,1020,2129,4883,2736,3050,2083,3739,6104,9047,7777,4086,2968,2456,2138,3943,7438,7189,4453,11588,4643,3618,3472,6105,3805,3371,2645,2330,2103,1928,2017,3771,3811,5821,3106,4216,4209,5209,3173,4430,20022,5228,3913,4928,5051,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1277,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,732,774,929,755,723,737,804,680,639,620,788,2474,1527,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,947,784,875,713,815,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1292,1626,1815,1471,1121,960,847,810,788,762,896,870,801,752 +2247,2074,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1238,1399,1187,1102,1055,1017,1001,979,953,932,1023,2144,4885,2743,3050,2084,3746,6108,9050,7777,4086,2968,2456,2138,3944,7442,7190,4453,11588,4643,3618,3478,6109,3806,3371,2645,2330,2103,1928,2019,3776,3811,5821,3109,4219,4230,5209,3179,4436,20023,5228,3913,4928,5053,4267,2978,2748,2500,2276,2107,1969,1815,1714,1737,1561,1491,1428,1347,1288,1245,1207,1163,1281,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,733,774,929,755,725,737,804,680,639,620,789,2474,1529,2686,2037,1410,1130,992,901,847,798,766,789,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,784,794,804,743,726,765,826,947,784,875,713,816,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,506,603,1439,1293,1626,1815,1472,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2156,4889,2753,3050,2091,3750,6138,9059,7777,4086,2968,2456,2139,3952,7447,7191,4480,11588,4643,3618,3479,6112,3815,3372,2645,2330,2103,1928,2021,3789,3814,5821,3118,4222,4240,5210,3180,4437,20027,5228,3918,4932,5054,4267,2978,2748,2500,2276,2107,1969,1815,1714,1747,1561,1491,1428,1347,1288,1245,1207,1163,1284,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,738,774,929,755,727,737,804,680,639,620,791,2474,1530,2686,2037,1410,1130,992,901,847,798,766,790,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,743,727,765,826,949,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,604,1439,1295,1629,1815,1473,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1452,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2169,4891,2758,3050,2097,3760,6157,9066,7777,4086,2968,2456,2141,3979,7455,7191,4485,11588,4643,3618,3480,6117,3816,3372,2645,2330,2103,1928,2030,3792,3821,5821,3144,4228,4243,5210,3181,4493,20031,5228,3925,4932,5057,4267,2978,2748,2500,2276,2107,1969,1815,1714,1749,1561,1491,1428,1347,1288,1245,1207,1163,1286,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,741,775,929,755,734,737,804,680,639,620,793,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,744,728,765,826,954,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,492,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,605,1439,1303,1630,1815,1473,1122,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1253,1399,1188,1102,1055,1017,1001,979,953,932,1028,2187,4892,2765,3050,2099,3766,6208,9074,7777,4086,2968,2456,2142,3983,7472,7191,4498,11588,4643,3618,3489,6124,3816,3372,2645,2330,2103,1928,2036,3797,3823,5821,3148,4231,4246,5211,3182,4563,20032,5228,3940,4933,5060,4267,2978,2748,2500,2276,2107,1969,1815,1714,1752,1561,1491,1428,1347,1288,1245,1207,1163,1287,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,794,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,805,746,728,765,826,962,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,466,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,506,607,1439,1304,1630,1815,1473,1123,960,847,811,788,763,896,870,801,752 +2247,2078,2046,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1257,1399,1188,1102,1055,1017,1001,979,953,932,1030,2189,4893,2766,3050,2100,3771,6210,9090,7777,4086,2968,2456,2142,4018,7478,7197,4505,11588,4643,3618,3496,6125,3816,3373,2645,2330,2103,1928,2042,3797,3824,5821,3158,4234,4253,5211,3184,4565,20032,5228,3944,4943,5064,4267,2978,2748,2500,2276,2107,1969,1815,1714,1755,1561,1491,1428,1347,1288,1245,1207,1163,1288,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,797,2474,1532,2686,2037,1410,1130,992,901,847,798,766,794,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,746,728,765,826,966,784,875,714,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,467,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,608,1439,1306,1631,1815,1473,1123,960,847,812,788,764,896,870,801,752 +2247,2079,2046,1825,1699,1600,1501,1454,1441,1388,1299,1259,1211,1177,1124,1258,1399,1189,1102,1055,1017,1001,979,953,933,1032,2212,4896,2768,3050,2104,3772,6213,9108,7777,4086,2968,2456,2142,4030,7481,7204,4513,11588,4643,3618,3502,6132,3817,3374,2645,2330,2103,1928,2042,3807,3828,5821,3161,4241,4253,5214,3190,4648,20039,5228,3955,4944,5065,4267,2978,2748,2500,2276,2107,1969,1815,1714,1761,1561,1491,1428,1347,1288,1245,1207,1163,1292,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,743,775,929,756,741,737,804,680,639,620,807,2474,1538,2686,2037,1410,1130,992,901,847,798,766,795,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,747,729,765,826,968,784,875,715,819,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,609,1439,1306,1632,1815,1474,1124,960,847,813,788,765,896,870,801,752 +2247,2080,2046,1825,1699,1600,1501,1456,1441,1388,1299,1259,1211,1177,1124,1279,1399,1190,1102,1055,1017,1001,979,953,934,1039,2215,4902,2779,3050,2112,3774,6222,9125,7777,4086,2968,2456,2144,4058,7484,7205,4516,11588,4643,3618,3527,6133,3817,3376,2645,2330,2103,1928,2053,3821,3830,5829,3195,4250,4254,5214,3190,4651,20053,5228,3958,4948,5070,4267,2978,2748,2500,2276,2107,1969,1815,1714,1763,1561,1491,1428,1347,1288,1245,1207,1163,1294,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,744,775,929,756,742,737,804,680,639,620,808,2474,1541,2686,2037,1410,1130,992,901,847,798,766,798,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,788,794,806,747,729,765,826,969,784,875,715,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1315,1633,1815,1475,1125,960,847,813,788,765,896,870,801,752 +2247,2081,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1284,1399,1190,1102,1055,1017,1001,979,953,934,1047,2223,4902,2783,3050,2116,3817,6254,9131,7777,4086,2968,2456,2148,4064,7492,7209,4538,11588,4643,3618,3535,6133,3820,3377,2645,2330,2103,1928,2058,3838,3833,5830,3201,4251,4254,5214,3198,4662,20076,5228,3963,4951,5074,4267,2978,2748,2500,2276,2107,1969,1815,1714,1768,1561,1491,1428,1347,1288,1245,1207,1163,1296,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,620,747,777,929,756,743,737,804,680,639,620,812,2474,1541,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,681,744,932,789,794,806,747,730,765,826,986,784,875,716,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,492,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1317,1635,1815,1476,1125,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1288,1400,1191,1102,1055,1017,1001,979,953,935,1071,2238,4906,2784,3050,2117,3823,6265,9138,7777,4086,2968,2456,2151,4067,7504,7218,4563,11588,4643,3618,3539,6139,3821,3378,2645,2330,2103,1928,2096,3840,3840,5831,3219,4257,4305,5214,3198,4757,20077,5228,3968,4955,5082,4267,2978,2748,2500,2276,2107,1969,1815,1714,1775,1561,1491,1428,1347,1288,1245,1207,1163,1297,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,749,778,929,757,745,737,804,680,639,620,817,2474,1542,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,790,794,806,748,730,765,826,1023,784,875,716,821,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,493,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,508,611,1439,1317,1636,1815,1477,1126,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1291,1400,1192,1102,1055,1017,1001,979,953,935,1080,2253,4908,2789,3050,2124,3825,6291,9142,7777,4086,2968,2456,2152,4079,7510,7224,4569,11588,4643,3618,3563,6146,3824,3381,2645,2330,2103,1928,2104,3844,3845,5832,3229,4269,4315,5214,3200,4762,20111,5228,3970,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1777,1561,1491,1428,1347,1288,1245,1207,1163,1299,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,750,780,929,757,748,737,804,680,639,620,822,2474,1555,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,791,794,807,749,730,765,826,1026,784,875,716,823,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,427,493,802,542,470,485,534,484,488,586,575,557,504,484,519,643,627,627,546,515,509,613,1439,1320,1637,1816,1479,1127,960,847,814,788,766,897,870,801,752 +2247,2084,2046,1825,1699,1600,1501,1458,1442,1388,1299,1259,1211,1177,1124,1307,1401,1193,1102,1055,1017,1001,979,953,935,1085,2253,4909,2790,3050,2125,3836,6294,9153,7777,4086,2968,2456,2155,4084,7515,7228,4572,11588,4643,3618,3564,6156,3826,3383,2645,2330,2103,1928,2106,3847,3847,5836,3235,4269,4323,5215,3201,4762,20123,5228,3973,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1778,1561,1491,1428,1347,1288,1245,1207,1163,1305,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,761,781,929,757,756,737,804,680,639,620,831,2474,1575,2686,2037,1410,1130,992,901,847,798,766,801,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,792,794,807,750,732,765,826,1030,784,875,717,824,2295,1266,1115,936,817,742,713,680,647,647,678,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,428,493,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,509,613,1439,1321,1637,1816,1479,1127,960,847,814,789,767,897,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1319,1401,1193,1102,1055,1017,1001,979,953,935,1088,2256,4913,2791,3050,2144,3844,6301,9157,7777,4086,2968,2456,2158,4090,7516,7229,4617,11589,4643,3618,3582,6157,3828,3383,2645,2330,2103,1928,2108,3852,3856,5838,3238,4269,4333,5216,3201,4775,20135,5228,3979,4962,5094,4267,2978,2748,2500,2276,2107,1969,1815,1714,1782,1562,1491,1428,1347,1288,1245,1207,1163,1306,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,621,763,783,929,758,757,737,804,680,639,620,860,2474,1578,2686,2037,1410,1130,992,901,847,798,766,803,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,793,794,807,754,732,765,826,1040,784,875,717,826,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,510,614,1439,1322,1638,1816,1482,1127,960,847,815,789,768,898,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1350,1401,1193,1102,1055,1017,1001,979,953,936,1111,2264,4916,2791,3050,2146,3852,6310,9187,7777,4086,2968,2456,2164,4093,7524,7233,4618,11594,4643,3618,3605,6160,3834,3383,2645,2330,2103,1928,2115,3856,3856,5841,3263,4289,4341,5219,3202,4837,20152,5228,3979,4969,5099,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1563,1491,1428,1347,1288,1245,1207,1163,1308,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,621,778,784,929,759,768,737,804,680,639,620,866,2474,1587,2686,2037,1410,1130,992,901,847,798,766,804,2793,1574,1087,960,883,823,782,755,730,705,683,746,932,794,794,808,757,733,765,826,1043,784,875,718,827,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,485,519,643,627,627,546,515,510,615,1439,1326,1641,1817,1484,1128,960,847,815,789,768,898,870,801,752 +2247,2086,2048,1825,1699,1600,1501,1459,1443,1388,1299,1259,1211,1177,1124,1355,1403,1194,1102,1055,1017,1001,979,953,936,1112,2311,4927,2807,3050,2148,3856,6318,9214,7777,4086,2968,2456,2170,4096,7525,7233,4634,11598,4643,3618,3611,6161,3841,3384,2645,2330,2103,1928,2122,3880,3861,5845,3290,4303,4377,5220,3203,4919,20159,5228,3981,4970,5105,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1564,1491,1428,1347,1288,1245,1207,1163,1313,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,622,780,784,929,759,769,737,804,680,639,620,867,2474,1592,2686,2037,1410,1130,992,901,847,798,766,807,2793,1574,1087,960,883,823,782,755,730,705,684,746,932,795,794,808,757,734,765,826,1044,784,875,720,830,2295,1268,1115,936,817,742,713,680,647,647,679,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,803,542,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,510,618,1439,1327,1644,1818,1486,1128,960,847,816,790,768,898,870,801,752 +2247,2087,2048,1825,1699,1600,1501,1461,1443,1388,1299,1259,1211,1177,1124,1356,1403,1196,1102,1055,1017,1001,979,953,937,1117,2317,4929,2809,3050,2153,3857,6338,9222,7777,4086,2968,2456,2171,4110,7574,7238,4635,11599,4643,3618,3620,6164,3842,3384,2645,2330,2103,1928,2122,3895,3863,5850,3296,4308,4386,5220,3203,4932,20181,5228,4017,4978,5129,4267,2978,2748,2500,2276,2107,1969,1815,1714,1801,1564,1491,1428,1347,1288,1245,1207,1163,1316,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,606,625,623,781,785,929,759,772,737,804,680,639,620,869,2474,1600,2686,2037,1410,1130,992,901,847,798,766,808,2793,1574,1087,960,883,823,782,755,730,705,685,747,932,798,795,809,759,734,765,826,1070,784,875,721,832,2295,1269,1115,936,817,742,713,680,647,647,680,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,430,495,803,543,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,511,619,1439,1327,1646,1818,1488,1129,960,847,816,791,768,899,870,801,752 +2247,2090,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1359,1403,1197,1102,1055,1017,1001,979,953,938,1119,2322,4930,2814,3050,2159,3884,6444,9223,7777,4086,2968,2456,2181,4113,7582,7242,4651,11603,4643,3618,3621,6166,3844,3385,2645,2330,2103,1928,2123,3931,3869,5851,3301,4321,4396,5224,3205,4943,20185,5228,4055,4982,5140,4267,2978,2748,2500,2276,2107,1969,1815,1714,1805,1565,1491,1428,1347,1288,1245,1207,1163,1332,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,607,625,625,782,786,929,760,773,737,804,680,639,620,875,2474,1604,2686,2037,1410,1130,992,901,847,798,766,809,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,798,796,809,768,735,765,826,1118,784,875,722,832,2295,1273,1115,936,817,742,713,680,647,647,681,651,692,608,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,431,496,803,543,472,485,534,485,488,588,576,557,504,486,520,643,627,627,546,515,511,619,1439,1330,1647,1821,1489,1130,960,847,822,792,772,899,870,801,752 +2247,2094,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1376,1405,1200,1102,1055,1017,1001,979,953,938,1128,2340,4931,2815,3050,2160,3898,6450,9233,7777,4086,2968,2456,2196,4154,7589,7242,4680,11607,4643,3618,3632,6169,3845,3390,2645,2330,2105,1928,2124,3952,3877,5857,3339,4324,4397,5227,3218,5130,20191,5228,4080,4984,5143,4267,2978,2748,2500,2276,2107,1969,1815,1714,1828,1566,1491,1428,1347,1288,1245,1207,1163,1334,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,609,625,626,784,786,929,761,777,737,804,680,639,620,876,2474,1607,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,799,796,809,772,738,765,826,1123,784,875,723,837,2295,1274,1115,936,817,742,713,680,647,647,683,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,432,496,803,543,474,486,534,485,489,588,576,557,504,487,521,643,627,627,546,515,511,622,1439,1343,1655,1823,1492,1133,960,847,823,794,775,899,870,801,752 +2247,2097,2049,1825,1700,1600,1501,1465,1443,1388,1299,1259,1211,1177,1124,1377,1406,1200,1102,1055,1017,1001,979,953,938,1130,2425,4933,2833,3050,2161,3909,6452,9233,7777,4086,2968,2456,2211,4232,7600,7258,4711,11617,4643,3618,3670,6182,3852,3390,2645,2330,2108,1928,2130,3958,3886,5861,3344,4339,4401,5235,3218,5158,20211,5228,4087,4990,5213,4267,2978,2748,2500,2276,2107,1969,1815,1714,1839,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,610,625,626,786,788,929,762,778,737,804,680,639,621,920,2474,1629,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,688,750,933,801,797,809,775,738,765,826,1126,784,876,723,838,2295,1276,1115,936,817,742,713,680,649,647,689,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,450,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,435,496,803,544,475,486,534,485,491,588,576,557,504,487,522,643,627,627,546,515,513,623,1439,1364,1655,1829,1494,1138,960,847,825,798,777,899,870,801,752 +2247,2098,2049,1825,1701,1600,1501,1476,1444,1388,1299,1259,1211,1177,1124,1415,1408,1200,1102,1055,1017,1001,979,953,942,1209,2471,4934,2835,3050,2168,3961,6499,9275,7777,4086,2968,2456,2222,4239,7634,7268,4909,11617,4643,3618,3730,6184,3860,3394,2645,2330,2111,1928,2152,3958,3891,5869,3361,4352,4472,5235,3222,5199,20236,5230,4188,4991,5279,4267,2978,2748,2500,2276,2107,1969,1815,1714,1847,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,613,625,627,789,793,929,764,796,737,804,680,639,621,927,2474,1656,2686,2037,1410,1130,992,901,847,798,766,826,2793,1574,1087,960,883,823,782,755,730,705,692,752,935,808,797,811,777,741,765,826,1146,784,876,723,869,2303,1278,1115,936,817,742,713,680,649,647,693,651,692,609,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,409,398,551,450,437,496,803,544,476,486,534,486,491,588,576,557,504,487,522,643,627,627,546,515,514,623,1439,1364,1659,1830,1495,1138,960,847,828,802,786,901,870,801,752 +2247,2106,2051,1825,1702,1600,1501,1477,1447,1388,1299,1259,1211,1177,1124,1415,1409,1200,1102,1055,1017,1001,980,953,942,1309,2510,4939,2880,3050,2210,4038,6563,9357,7781,4086,2968,2456,2250,4290,7640,7269,4968,11619,4643,3618,3763,6189,3869,3394,2645,2330,2112,1928,2208,4062,3895,5876,3439,4358,4513,5255,3230,5251,20249,5234,4213,4998,5285,4267,2987,2748,2500,2276,2107,1969,1815,1714,1872,1570,1491,1428,1347,1288,1245,1207,1163,1338,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,614,626,629,819,800,929,765,798,737,804,680,639,623,937,2478,1659,2686,2037,1410,1130,992,901,847,798,766,837,2793,1574,1087,960,883,823,782,755,730,705,696,753,935,813,798,812,784,745,765,826,1317,784,882,726,881,2305,1283,1115,936,817,742,713,680,649,647,695,651,692,610,576,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,533,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,410,399,551,451,441,497,805,545,478,487,534,486,493,588,576,557,504,489,522,643,627,627,546,515,519,667,1439,1365,1675,1831,1497,1139,960,851,830,805,787,902,870,801,752 +2247,2177,2056,1825,1705,1600,1501,1477,1448,1388,1299,1259,1211,1177,1124,1420,1411,1206,1102,1055,1017,1001,984,954,963,1426,2614,4959,2923,3050,2212,4284,6685,9417,7782,4086,2968,2456,2284,4451,7676,7273,5053,11664,4643,3618,4118,6230,3886,3396,2645,2330,2130,1928,2211,4371,3940,5900,3487,4420,4600,5290,3263,5401,20348,5240,4273,5090,5561,4275,2990,2748,2500,2276,2107,1969,1815,1714,1890,1571,1491,1428,1347,1288,1245,1207,1163,1376,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,601,621,626,630,821,830,929,767,891,737,804,680,646,624,1025,2481,1666,2693,2037,1410,1130,992,901,847,798,766,847,2793,1574,1087,960,883,823,782,755,730,705,704,754,937,819,802,815,792,746,766,826,1983,784,887,737,886,2337,1290,1117,936,817,742,713,680,664,647,697,651,692,612,578,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,535,476,448,397,367,354,342,332,320,324,327,333,340,359,331,383,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,520,413,410,399,551,451,454,503,806,549,504,488,534,487,494,591,578,558,504,489,524,644,627,627,546,515,521,677,1439,1390,1718,1848,1504,1155,960,852,836,896,792,910,870,801,752 diff --git a/tests/data/evalp/prd/leadtime_2/site_d.csv b/tests/data/evalp/prd/leadtime_2/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..3c7cd7852c876dac0e3625479f13886a430b5f2c --- /dev/null +++ b/tests/data/evalp/prd/leadtime_2/site_d.csv @@ -0,0 +1,51 @@ +2247,2044,2037,1825,1699,1600,1501,1432,1440,1388,1299,1259,1211,1177,1124,1121,1399,1179,1102,1055,1017,1001,979,953,925,927,1899,4782,2601,3050,1998,3478,5762,8745,7777,4086,2968,2456,2138,3199,7187,7165,3942,11588,4643,3618,3184,6052,3723,3356,2645,2330,2103,1928,1890,3624,3647,5821,2949,4161,3855,5200,3162,3896,19818,5228,3711,4874,4868,4267,2978,2748,2500,2276,2107,1969,1815,1714,1649,1561,1491,1428,1347,1288,1245,1207,1163,1189,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,707,759,929,755,684,737,804,680,639,620,706,2474,1406,2686,2037,1410,1130,992,901,847,798,766,750,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,770,794,804,728,721,765,826,795,784,875,711,795,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,402,398,551,449,416,484,801,537,457,483,534,477,483,582,575,557,504,477,515,643,627,627,546,515,497,577,1439,1198,1591,1815,1448,1117,960,847,809,788,749,896,870,801,752 +2247,2045,2037,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1132,1399,1179,1102,1055,1017,1001,979,953,925,932,1905,4784,2619,3050,2002,3506,5783,8764,7777,4086,2968,2456,2138,3299,7225,7165,3957,11588,4643,3618,3255,6052,3726,3356,2645,2330,2103,1928,1900,3645,3691,5821,2950,4161,3916,5200,3162,3956,19830,5228,3723,4877,4869,4267,2978,2748,2500,2276,2107,1969,1815,1714,1650,1561,1491,1428,1347,1288,1245,1207,1163,1195,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,710,760,929,755,686,737,804,680,639,620,713,2474,1418,2686,2037,1410,1130,992,901,847,798,766,754,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,798,784,875,711,798,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,416,484,801,537,457,483,534,477,483,583,575,557,504,478,516,643,627,627,546,515,498,578,1439,1216,1592,1815,1449,1117,960,847,809,788,750,896,870,801,752 +2247,2045,2038,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1136,1399,1179,1102,1055,1017,1001,979,953,926,935,1908,4788,2623,3050,2017,3543,5794,8785,7777,4086,2968,2456,2138,3325,7250,7165,4048,11588,4643,3618,3271,6052,3737,3356,2645,2330,2103,1928,1909,3648,3692,5821,2987,4161,3956,5200,3162,3978,19858,5228,3726,4879,4886,4267,2978,2748,2500,2276,2107,1969,1815,1714,1652,1561,1491,1428,1347,1288,1245,1207,1163,1197,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,710,760,929,755,687,737,804,680,639,620,713,2474,1422,2686,2037,1410,1130,992,901,847,798,766,755,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,802,784,875,711,802,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,417,484,801,537,457,483,534,477,484,583,575,557,504,479,516,643,627,627,546,515,500,578,1439,1224,1596,1815,1451,1117,960,847,809,788,750,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1435,1440,1388,1299,1259,1211,1177,1124,1147,1399,1179,1102,1055,1017,1001,979,953,926,943,1918,4800,2627,3050,2019,3560,5795,8812,7777,4086,2968,2456,2138,3334,7270,7165,4104,11588,4643,3618,3280,6052,3746,3356,2645,2330,2103,1928,1912,3674,3714,5821,2991,4161,3966,5200,3162,3981,19860,5228,3743,4881,4891,4267,2978,2748,2500,2276,2107,1969,1815,1714,1656,1561,1491,1428,1347,1288,1245,1207,1163,1201,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,712,762,929,755,687,737,804,680,639,620,722,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,729,721,765,826,808,784,875,711,804,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,417,485,801,538,458,483,534,478,484,583,575,557,504,479,516,643,627,627,546,515,500,583,1439,1227,1597,1815,1454,1117,960,847,809,788,751,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1153,1399,1180,1102,1055,1017,1001,979,953,926,944,1931,4801,2633,3050,2026,3560,5808,8833,7777,4086,2968,2456,2138,3380,7304,7165,4154,11588,4643,3618,3297,6052,3747,3356,2645,2330,2103,1928,1920,3677,3718,5821,2992,4161,3972,5200,3162,3995,19867,5228,3749,4883,4914,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1204,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,724,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,730,721,765,826,812,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,584,1439,1230,1598,1815,1454,1117,960,847,809,788,752,896,870,801,752 +2247,2049,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1161,1399,1181,1102,1055,1017,1001,979,953,926,944,1936,4806,2636,3050,2028,3571,5817,8844,7777,4086,2968,2456,2138,3474,7311,7165,4158,11588,4643,3618,3297,6052,3748,3356,2645,2330,2103,1928,1921,3681,3727,5821,2995,4161,3980,5200,3162,4060,19884,5228,3760,4884,4938,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1215,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,728,2474,1425,2686,2037,1410,1130,992,901,847,798,766,761,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,773,794,804,731,721,765,826,818,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,585,1439,1234,1601,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1437,1440,1388,1299,1259,1211,1177,1124,1162,1399,1181,1102,1055,1017,1001,979,953,926,945,1937,4809,2653,3050,2029,3601,5817,8848,7777,4086,2968,2456,2138,3504,7314,7165,4167,11588,4643,3618,3300,6052,3749,3356,2645,2330,2103,1928,1922,3688,3729,5821,3014,4161,4047,5200,3162,4095,19885,5228,3792,4886,4952,4267,2978,2748,2500,2276,2107,1969,1815,1714,1675,1561,1491,1428,1347,1288,1245,1207,1163,1218,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,715,764,929,755,693,737,804,680,639,620,731,2474,1429,2686,2037,1410,1130,992,901,847,798,766,764,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,731,721,765,826,831,784,875,711,806,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,538,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1603,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1173,1399,1182,1102,1055,1017,1001,979,953,926,948,1940,4810,2671,3050,2037,3607,5821,8860,7777,4086,2968,2456,2138,3507,7321,7165,4167,11588,4643,3618,3311,6052,3755,3356,2645,2330,2103,1928,1924,3688,3730,5821,3015,4161,4049,5200,3162,4102,19887,5228,3808,4887,4957,4267,2978,2748,2500,2276,2107,1969,1815,1714,1678,1561,1491,1428,1347,1288,1245,1207,1163,1222,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,764,929,755,693,737,804,680,639,620,731,2474,1430,2686,2037,1410,1130,992,901,847,798,766,765,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,721,765,826,832,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1604,1815,1456,1117,960,847,809,788,754,896,870,801,752 +2247,2052,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1176,1399,1182,1102,1055,1017,1001,979,953,926,952,1950,4822,2672,3050,2038,3615,5844,8866,7777,4086,2968,2456,2138,3518,7333,7165,4187,11588,4643,3618,3312,6052,3758,3356,2645,2330,2103,1928,1925,3689,3735,5821,3017,4161,4050,5200,3162,4112,19887,5228,3812,4894,4962,4267,2978,2748,2500,2276,2107,1969,1815,1714,1680,1561,1491,1428,1347,1288,1245,1207,1163,1228,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,765,929,755,693,737,804,680,639,620,732,2474,1449,2686,2037,1410,1130,992,901,847,798,766,766,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,722,765,826,833,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,587,1439,1249,1606,1815,1456,1117,960,847,809,788,755,896,870,801,752 +2247,2053,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1179,1399,1182,1102,1055,1017,1001,979,953,927,962,1958,4823,2682,3050,2038,3642,5845,8899,7777,4086,2968,2456,2138,3528,7338,7165,4190,11588,4643,3618,3314,6056,3761,3356,2645,2330,2103,1928,1926,3691,3749,5821,3018,4161,4050,5200,3162,4116,19905,5228,3813,4896,4973,4267,2978,2748,2500,2276,2107,1969,1815,1714,1681,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,695,737,804,680,639,620,733,2474,1453,2686,2037,1410,1130,992,901,847,798,766,767,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,775,794,804,732,722,765,826,835,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,589,1439,1250,1607,1815,1457,1117,960,847,809,788,755,896,870,801,752 +2247,2054,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1181,1399,1182,1102,1055,1017,1001,979,953,927,968,1959,4825,2682,3050,2041,3648,5856,8906,7777,4086,2968,2456,2138,3575,7343,7166,4252,11588,4643,3618,3323,6059,3762,3356,2645,2330,2103,1928,1937,3697,3752,5821,3023,4161,4053,5200,3162,4118,19917,5228,3824,4901,4975,4267,2978,2748,2500,2276,2107,1969,1815,1714,1684,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,736,2474,1453,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,776,794,804,732,722,765,826,836,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,590,1439,1250,1609,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2057,2040,1825,1699,1600,1501,1441,1440,1388,1299,1259,1211,1177,1124,1184,1399,1182,1102,1055,1017,1001,979,953,928,968,1965,4825,2682,3050,2044,3649,5886,8914,7777,4086,2968,2456,2138,3630,7348,7169,4269,11588,4643,3618,3326,6062,3774,3356,2645,2330,2103,1928,1957,3699,3756,5821,3023,4161,4057,5200,3162,4180,19920,5228,3828,4901,4981,4267,2978,2748,2500,2276,2107,1969,1815,1714,1686,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,738,2474,1458,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,722,765,826,837,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,460,483,534,478,484,584,575,557,504,480,517,643,627,627,546,515,501,591,1439,1251,1610,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2058,2040,1825,1699,1600,1501,1445,1440,1388,1299,1259,1211,1177,1124,1191,1399,1182,1102,1055,1017,1001,979,953,928,969,1966,4841,2694,3050,2044,3650,5895,8920,7777,4086,2968,2456,2138,3683,7348,7170,4284,11588,4643,3618,3337,6072,3775,3356,2645,2330,2103,1928,1967,3704,3762,5821,3025,4161,4057,5200,3162,4198,19920,5228,3828,4903,4985,4267,2978,2748,2500,2276,2107,1969,1815,1714,1689,1561,1491,1428,1347,1288,1245,1207,1163,1233,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,719,767,929,755,698,737,804,680,639,620,742,2474,1476,2686,2037,1410,1130,992,901,847,798,766,770,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,723,765,826,847,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,461,483,534,479,485,584,575,557,504,480,518,643,627,627,546,515,501,592,1439,1251,1611,1815,1460,1117,960,847,809,788,757,896,870,801,752 +2247,2061,2040,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,928,969,1966,4844,2695,3050,2045,3659,5929,8932,7777,4086,2968,2456,2138,3707,7350,7171,4285,11588,4643,3618,3339,6076,3777,3356,2645,2330,2103,1928,1968,3707,3763,5821,3032,4161,4080,5200,3162,4202,19925,5228,3836,4904,4987,4267,2978,2748,2500,2276,2107,1969,1815,1714,1690,1561,1491,1428,1347,1288,1245,1207,1163,1235,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,617,719,767,929,755,699,737,804,680,639,620,744,2474,1477,2686,2037,1410,1130,992,901,847,798,766,772,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,724,765,826,856,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1252,1612,1815,1461,1117,960,847,809,788,758,896,870,801,752 +2247,2062,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,929,974,1973,4844,2697,3050,2048,3676,5930,8948,7777,4086,2968,2456,2138,3729,7360,7171,4300,11588,4643,3618,3341,6076,3779,3357,2645,2330,2103,1928,1968,3708,3770,5821,3035,4161,4091,5200,3162,4210,19927,5228,3840,4906,4997,4267,2978,2748,2500,2276,2107,1969,1815,1714,1694,1561,1491,1428,1347,1288,1245,1207,1163,1238,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,767,929,755,699,737,804,680,639,620,745,2474,1479,2686,2037,1410,1130,992,901,847,798,766,773,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,779,794,804,733,724,765,826,857,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1255,1612,1815,1462,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1192,1399,1183,1102,1055,1017,1001,979,953,929,981,1999,4851,2699,3050,2052,3680,5984,8953,7777,4086,2968,2456,2138,3765,7372,7173,4306,11588,4643,3618,3342,6076,3786,3357,2645,2330,2103,1928,1969,3710,3771,5821,3041,4161,4093,5200,3162,4227,19932,5228,3851,4907,5010,4267,2978,2748,2500,2276,2107,1969,1815,1714,1699,1561,1491,1428,1347,1288,1245,1207,1163,1240,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,699,737,804,680,639,620,749,2474,1479,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,734,724,765,826,863,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1613,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1193,1399,1183,1102,1055,1017,1001,979,953,929,993,2006,4852,2699,3050,2055,3681,6005,8964,7777,4086,2968,2456,2138,3785,7373,7173,4322,11588,4643,3618,3343,6079,3787,3357,2645,2330,2103,1928,1974,3711,3771,5821,3043,4162,4103,5200,3162,4228,19950,5228,3854,4908,5011,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1242,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,700,737,804,680,639,620,750,2474,1482,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,869,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1614,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2064,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1194,1399,1184,1102,1055,1017,1001,979,953,930,994,2008,4854,2699,3050,2056,3685,6006,8965,7777,4086,2968,2456,2138,3790,7383,7174,4328,11588,4643,3618,3359,6079,3788,3357,2645,2330,2103,1928,1974,3712,3772,5821,3049,4164,4108,5200,3162,4261,19953,5228,3862,4908,5019,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1246,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,721,769,929,755,702,737,804,680,639,620,752,2474,1493,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,870,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,463,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1257,1615,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2065,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1197,1399,1184,1102,1055,1017,1001,979,953,930,994,2009,4855,2705,3050,2056,3690,6017,8978,7777,4086,2968,2456,2138,3815,7385,7175,4328,11588,4643,3618,3362,6084,3788,3359,2645,2330,2103,1928,1979,3717,3777,5821,3055,4165,4112,5200,3162,4267,19962,5228,3863,4909,5020,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,769,929,755,704,737,804,680,639,620,752,2474,1496,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,780,794,804,735,724,765,826,871,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,421,489,801,539,463,483,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,593,1439,1260,1617,1815,1464,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1184,1102,1055,1017,1001,979,953,930,1003,2013,4855,2706,3050,2058,3715,6018,8996,7777,4086,2968,2456,2138,3824,7387,7177,4356,11588,4643,3618,3372,6085,3790,3359,2645,2330,2103,1928,1980,3720,3780,5821,3059,4169,4120,5200,3162,4270,19965,5228,3870,4910,5025,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,770,929,755,707,737,804,680,639,620,757,2474,1500,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,883,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,450,421,489,801,539,463,484,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,594,1439,1263,1618,1815,1466,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1007,2020,4856,2710,3050,2060,3716,6046,9002,7777,4086,2968,2456,2138,3834,7391,7181,4360,11588,4643,3618,3372,6086,3791,3359,2645,2330,2103,1928,1993,3723,3781,5821,3062,4173,4136,5201,3162,4293,19970,5228,3873,4911,5026,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1254,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,723,770,929,755,708,737,804,680,639,620,758,2474,1500,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,894,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,481,518,643,627,627,546,515,504,595,1439,1265,1621,1815,1467,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1008,2030,4858,2713,3050,2064,3718,6049,9002,7777,4086,2968,2456,2138,3843,7416,7182,4361,11588,4643,3618,3376,6089,3794,3359,2645,2330,2103,1928,1995,3724,3783,5821,3062,4175,4145,5201,3162,4302,19980,5228,3879,4911,5031,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1256,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,618,725,771,929,755,708,737,804,680,639,620,765,2474,1504,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,737,724,765,826,896,784,875,712,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,482,518,643,627,627,546,515,504,597,1439,1266,1622,1815,1468,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,930,1008,2031,4859,2717,3050,2065,3719,6056,9007,7777,4086,2968,2456,2138,3859,7421,7184,4375,11588,4643,3618,3376,6091,3794,3359,2645,2330,2103,1928,1998,3725,3784,5821,3072,4180,4163,5201,3162,4347,19987,5228,3879,4913,5032,4267,2978,2748,2500,2276,2107,1969,1815,1714,1706,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,711,737,804,680,639,620,766,2474,1510,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,724,765,826,901,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,504,598,1439,1266,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,931,1012,2032,4865,2717,3050,2071,3720,6063,9016,7777,4086,2968,2456,2138,3865,7424,7184,4391,11588,4643,3618,3390,6095,3797,3362,2645,2330,2103,1928,1999,3726,3787,5821,3073,4185,4167,5204,3162,4385,19987,5228,3884,4914,5035,4267,2978,2748,2500,2276,2107,1969,1815,1714,1709,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,712,737,804,680,639,620,769,2474,1511,2686,2037,1410,1130,992,901,847,798,766,781,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,598,1439,1270,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1218,1399,1186,1102,1055,1017,1001,979,953,931,1013,2043,4866,2722,3050,2075,3721,6077,9018,7777,4086,2968,2456,2138,3879,7427,7185,4392,11588,4643,3618,3391,6095,3800,3365,2645,2330,2103,1928,2003,3740,3793,5821,3092,4189,4169,5204,3162,4388,19995,5228,3891,4921,5036,4267,2978,2748,2500,2276,2107,1969,1815,1714,1719,1561,1491,1428,1347,1288,1245,1207,1163,1258,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,727,771,929,755,714,737,804,680,639,620,769,2474,1512,2686,2037,1410,1130,992,901,847,798,766,782,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,599,1439,1277,1624,1815,1469,1118,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1230,1399,1186,1102,1055,1017,1001,979,953,931,1014,2070,4872,2724,3050,2077,3731,6083,9022,7777,4086,2968,2456,2138,3893,7428,7186,4399,11588,4643,3618,3413,6097,3801,3368,2645,2330,2103,1928,2007,3742,3795,5821,3096,4196,4175,5205,3164,4402,19996,5228,3896,4922,5044,4267,2978,2748,2500,2276,2107,1969,1815,1714,1722,1561,1491,1428,1347,1288,1245,1207,1163,1261,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,728,772,929,755,714,737,804,680,639,620,771,2474,1518,2686,2037,1410,1130,992,901,847,798,766,784,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,912,784,875,712,813,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1282,1624,1815,1470,1118,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1232,1399,1186,1102,1055,1017,1001,979,953,931,1014,2107,4877,2727,3050,2077,3734,6084,9026,7777,4086,2968,2456,2138,3907,7430,7187,4412,11588,4643,3618,3417,6098,3803,3369,2645,2330,2103,1928,2008,3742,3796,5821,3102,4203,4175,5206,3167,4419,20002,5228,3898,4923,5045,4267,2978,2748,2500,2276,2107,1969,1815,1714,1732,1561,1491,1428,1347,1288,1245,1207,1163,1272,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,718,737,804,680,639,620,781,2474,1520,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,917,784,875,712,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1284,1624,1815,1471,1119,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1233,1399,1186,1102,1055,1017,1001,979,953,931,1017,2118,4878,2729,3050,2079,3736,6085,9031,7777,4086,2968,2456,2138,3925,7433,7188,4412,11588,4643,3618,3437,6101,3804,3370,2645,2330,2103,1928,2009,3756,3798,5821,3106,4204,4194,5208,3167,4421,20010,5228,3904,4924,5046,4267,2978,2748,2500,2276,2107,1969,1815,1714,1733,1561,1491,1428,1347,1288,1245,1207,1163,1273,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,722,737,804,680,639,620,783,2474,1524,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,739,725,765,826,920,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,585,575,557,504,482,519,643,627,627,546,515,505,602,1439,1287,1624,1815,1471,1119,960,847,810,788,761,896,870,801,752 +2247,2072,2044,1825,1699,1600,1501,1451,1440,1388,1299,1259,1211,1177,1124,1236,1399,1187,1102,1055,1017,1001,979,953,931,1019,2120,4880,2734,3050,2080,3737,6103,9035,7777,4086,2968,2456,2138,3938,7438,7188,4419,11588,4643,3618,3452,6104,3805,3371,2645,2330,2103,1928,2016,3769,3802,5821,3106,4215,4204,5209,3171,4425,20020,5228,3908,4927,5048,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1275,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,731,773,929,755,722,737,804,680,639,620,784,2474,1524,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,921,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1289,1624,1815,1471,1120,960,847,810,788,761,896,870,801,752 +2247,2073,2044,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1237,1399,1187,1102,1055,1017,1001,979,953,932,1020,2129,4883,2736,3050,2083,3739,6104,9047,7777,4086,2968,2456,2138,3943,7438,7189,4453,11588,4643,3618,3472,6105,3805,3371,2645,2330,2103,1928,2017,3771,3811,5821,3106,4216,4209,5209,3173,4430,20022,5228,3913,4928,5051,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1277,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,732,774,929,755,723,737,804,680,639,620,788,2474,1527,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,947,784,875,713,815,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1292,1626,1815,1471,1121,960,847,810,788,762,896,870,801,752 +2247,2074,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1238,1399,1187,1102,1055,1017,1001,979,953,932,1023,2144,4885,2743,3050,2084,3746,6108,9050,7777,4086,2968,2456,2138,3944,7442,7190,4453,11588,4643,3618,3478,6109,3806,3371,2645,2330,2103,1928,2019,3776,3811,5821,3109,4219,4230,5209,3179,4436,20023,5228,3913,4928,5053,4267,2978,2748,2500,2276,2107,1969,1815,1714,1737,1561,1491,1428,1347,1288,1245,1207,1163,1281,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,733,774,929,755,725,737,804,680,639,620,789,2474,1529,2686,2037,1410,1130,992,901,847,798,766,789,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,784,794,804,743,726,765,826,947,784,875,713,816,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,506,603,1439,1293,1626,1815,1472,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2156,4889,2753,3050,2091,3750,6138,9059,7777,4086,2968,2456,2139,3952,7447,7191,4480,11588,4643,3618,3479,6112,3815,3372,2645,2330,2103,1928,2021,3789,3814,5821,3118,4222,4240,5210,3180,4437,20027,5228,3918,4932,5054,4267,2978,2748,2500,2276,2107,1969,1815,1714,1747,1561,1491,1428,1347,1288,1245,1207,1163,1284,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,738,774,929,755,727,737,804,680,639,620,791,2474,1530,2686,2037,1410,1130,992,901,847,798,766,790,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,743,727,765,826,949,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,604,1439,1295,1629,1815,1473,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1452,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2169,4891,2758,3050,2097,3760,6157,9066,7777,4086,2968,2456,2141,3979,7455,7191,4485,11588,4643,3618,3480,6117,3816,3372,2645,2330,2103,1928,2030,3792,3821,5821,3144,4228,4243,5210,3181,4493,20031,5228,3925,4932,5057,4267,2978,2748,2500,2276,2107,1969,1815,1714,1749,1561,1491,1428,1347,1288,1245,1207,1163,1286,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,741,775,929,755,734,737,804,680,639,620,793,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,744,728,765,826,954,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,492,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,605,1439,1303,1630,1815,1473,1122,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1253,1399,1188,1102,1055,1017,1001,979,953,932,1028,2187,4892,2765,3050,2099,3766,6208,9074,7777,4086,2968,2456,2142,3983,7472,7191,4498,11588,4643,3618,3489,6124,3816,3372,2645,2330,2103,1928,2036,3797,3823,5821,3148,4231,4246,5211,3182,4563,20032,5228,3940,4933,5060,4267,2978,2748,2500,2276,2107,1969,1815,1714,1752,1561,1491,1428,1347,1288,1245,1207,1163,1287,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,794,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,805,746,728,765,826,962,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,466,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,506,607,1439,1304,1630,1815,1473,1123,960,847,811,788,763,896,870,801,752 +2247,2078,2046,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1257,1399,1188,1102,1055,1017,1001,979,953,932,1030,2189,4893,2766,3050,2100,3771,6210,9090,7777,4086,2968,2456,2142,4018,7478,7197,4505,11588,4643,3618,3496,6125,3816,3373,2645,2330,2103,1928,2042,3797,3824,5821,3158,4234,4253,5211,3184,4565,20032,5228,3944,4943,5064,4267,2978,2748,2500,2276,2107,1969,1815,1714,1755,1561,1491,1428,1347,1288,1245,1207,1163,1288,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,797,2474,1532,2686,2037,1410,1130,992,901,847,798,766,794,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,746,728,765,826,966,784,875,714,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,467,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,608,1439,1306,1631,1815,1473,1123,960,847,812,788,764,896,870,801,752 +2247,2079,2046,1825,1699,1600,1501,1454,1441,1388,1299,1259,1211,1177,1124,1258,1399,1189,1102,1055,1017,1001,979,953,933,1032,2212,4896,2768,3050,2104,3772,6213,9108,7777,4086,2968,2456,2142,4030,7481,7204,4513,11588,4643,3618,3502,6132,3817,3374,2645,2330,2103,1928,2042,3807,3828,5821,3161,4241,4253,5214,3190,4648,20039,5228,3955,4944,5065,4267,2978,2748,2500,2276,2107,1969,1815,1714,1761,1561,1491,1428,1347,1288,1245,1207,1163,1292,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,743,775,929,756,741,737,804,680,639,620,807,2474,1538,2686,2037,1410,1130,992,901,847,798,766,795,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,747,729,765,826,968,784,875,715,819,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,609,1439,1306,1632,1815,1474,1124,960,847,813,788,765,896,870,801,752 +2247,2080,2046,1825,1699,1600,1501,1456,1441,1388,1299,1259,1211,1177,1124,1279,1399,1190,1102,1055,1017,1001,979,953,934,1039,2215,4902,2779,3050,2112,3774,6222,9125,7777,4086,2968,2456,2144,4058,7484,7205,4516,11588,4643,3618,3527,6133,3817,3376,2645,2330,2103,1928,2053,3821,3830,5829,3195,4250,4254,5214,3190,4651,20053,5228,3958,4948,5070,4267,2978,2748,2500,2276,2107,1969,1815,1714,1763,1561,1491,1428,1347,1288,1245,1207,1163,1294,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,744,775,929,756,742,737,804,680,639,620,808,2474,1541,2686,2037,1410,1130,992,901,847,798,766,798,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,788,794,806,747,729,765,826,969,784,875,715,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1315,1633,1815,1475,1125,960,847,813,788,765,896,870,801,752 +2247,2081,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1284,1399,1190,1102,1055,1017,1001,979,953,934,1047,2223,4902,2783,3050,2116,3817,6254,9131,7777,4086,2968,2456,2148,4064,7492,7209,4538,11588,4643,3618,3535,6133,3820,3377,2645,2330,2103,1928,2058,3838,3833,5830,3201,4251,4254,5214,3198,4662,20076,5228,3963,4951,5074,4267,2978,2748,2500,2276,2107,1969,1815,1714,1768,1561,1491,1428,1347,1288,1245,1207,1163,1296,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,620,747,777,929,756,743,737,804,680,639,620,812,2474,1541,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,681,744,932,789,794,806,747,730,765,826,986,784,875,716,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,492,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1317,1635,1815,1476,1125,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1288,1400,1191,1102,1055,1017,1001,979,953,935,1071,2238,4906,2784,3050,2117,3823,6265,9138,7777,4086,2968,2456,2151,4067,7504,7218,4563,11588,4643,3618,3539,6139,3821,3378,2645,2330,2103,1928,2096,3840,3840,5831,3219,4257,4305,5214,3198,4757,20077,5228,3968,4955,5082,4267,2978,2748,2500,2276,2107,1969,1815,1714,1775,1561,1491,1428,1347,1288,1245,1207,1163,1297,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,749,778,929,757,745,737,804,680,639,620,817,2474,1542,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,790,794,806,748,730,765,826,1023,784,875,716,821,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,493,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,508,611,1439,1317,1636,1815,1477,1126,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1291,1400,1192,1102,1055,1017,1001,979,953,935,1080,2253,4908,2789,3050,2124,3825,6291,9142,7777,4086,2968,2456,2152,4079,7510,7224,4569,11588,4643,3618,3563,6146,3824,3381,2645,2330,2103,1928,2104,3844,3845,5832,3229,4269,4315,5214,3200,4762,20111,5228,3970,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1777,1561,1491,1428,1347,1288,1245,1207,1163,1299,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,750,780,929,757,748,737,804,680,639,620,822,2474,1555,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,791,794,807,749,730,765,826,1026,784,875,716,823,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,427,493,802,542,470,485,534,484,488,586,575,557,504,484,519,643,627,627,546,515,509,613,1439,1320,1637,1816,1479,1127,960,847,814,788,766,897,870,801,752 +2247,2084,2046,1825,1699,1600,1501,1458,1442,1388,1299,1259,1211,1177,1124,1307,1401,1193,1102,1055,1017,1001,979,953,935,1085,2253,4909,2790,3050,2125,3836,6294,9153,7777,4086,2968,2456,2155,4084,7515,7228,4572,11588,4643,3618,3564,6156,3826,3383,2645,2330,2103,1928,2106,3847,3847,5836,3235,4269,4323,5215,3201,4762,20123,5228,3973,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1778,1561,1491,1428,1347,1288,1245,1207,1163,1305,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,761,781,929,757,756,737,804,680,639,620,831,2474,1575,2686,2037,1410,1130,992,901,847,798,766,801,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,792,794,807,750,732,765,826,1030,784,875,717,824,2295,1266,1115,936,817,742,713,680,647,647,678,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,428,493,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,509,613,1439,1321,1637,1816,1479,1127,960,847,814,789,767,897,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1319,1401,1193,1102,1055,1017,1001,979,953,935,1088,2256,4913,2791,3050,2144,3844,6301,9157,7777,4086,2968,2456,2158,4090,7516,7229,4617,11589,4643,3618,3582,6157,3828,3383,2645,2330,2103,1928,2108,3852,3856,5838,3238,4269,4333,5216,3201,4775,20135,5228,3979,4962,5094,4267,2978,2748,2500,2276,2107,1969,1815,1714,1782,1562,1491,1428,1347,1288,1245,1207,1163,1306,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,621,763,783,929,758,757,737,804,680,639,620,860,2474,1578,2686,2037,1410,1130,992,901,847,798,766,803,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,793,794,807,754,732,765,826,1040,784,875,717,826,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,510,614,1439,1322,1638,1816,1482,1127,960,847,815,789,768,898,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1350,1401,1193,1102,1055,1017,1001,979,953,936,1111,2264,4916,2791,3050,2146,3852,6310,9187,7777,4086,2968,2456,2164,4093,7524,7233,4618,11594,4643,3618,3605,6160,3834,3383,2645,2330,2103,1928,2115,3856,3856,5841,3263,4289,4341,5219,3202,4837,20152,5228,3979,4969,5099,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1563,1491,1428,1347,1288,1245,1207,1163,1308,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,621,778,784,929,759,768,737,804,680,639,620,866,2474,1587,2686,2037,1410,1130,992,901,847,798,766,804,2793,1574,1087,960,883,823,782,755,730,705,683,746,932,794,794,808,757,733,765,826,1043,784,875,718,827,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,485,519,643,627,627,546,515,510,615,1439,1326,1641,1817,1484,1128,960,847,815,789,768,898,870,801,752 +2247,2086,2048,1825,1699,1600,1501,1459,1443,1388,1299,1259,1211,1177,1124,1355,1403,1194,1102,1055,1017,1001,979,953,936,1112,2311,4927,2807,3050,2148,3856,6318,9214,7777,4086,2968,2456,2170,4096,7525,7233,4634,11598,4643,3618,3611,6161,3841,3384,2645,2330,2103,1928,2122,3880,3861,5845,3290,4303,4377,5220,3203,4919,20159,5228,3981,4970,5105,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1564,1491,1428,1347,1288,1245,1207,1163,1313,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,622,780,784,929,759,769,737,804,680,639,620,867,2474,1592,2686,2037,1410,1130,992,901,847,798,766,807,2793,1574,1087,960,883,823,782,755,730,705,684,746,932,795,794,808,757,734,765,826,1044,784,875,720,830,2295,1268,1115,936,817,742,713,680,647,647,679,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,803,542,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,510,618,1439,1327,1644,1818,1486,1128,960,847,816,790,768,898,870,801,752 +2247,2087,2048,1825,1699,1600,1501,1461,1443,1388,1299,1259,1211,1177,1124,1356,1403,1196,1102,1055,1017,1001,979,953,937,1117,2317,4929,2809,3050,2153,3857,6338,9222,7777,4086,2968,2456,2171,4110,7574,7238,4635,11599,4643,3618,3620,6164,3842,3384,2645,2330,2103,1928,2122,3895,3863,5850,3296,4308,4386,5220,3203,4932,20181,5228,4017,4978,5129,4267,2978,2748,2500,2276,2107,1969,1815,1714,1801,1564,1491,1428,1347,1288,1245,1207,1163,1316,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,606,625,623,781,785,929,759,772,737,804,680,639,620,869,2474,1600,2686,2037,1410,1130,992,901,847,798,766,808,2793,1574,1087,960,883,823,782,755,730,705,685,747,932,798,795,809,759,734,765,826,1070,784,875,721,832,2295,1269,1115,936,817,742,713,680,647,647,680,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,430,495,803,543,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,511,619,1439,1327,1646,1818,1488,1129,960,847,816,791,768,899,870,801,752 +2247,2090,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1359,1403,1197,1102,1055,1017,1001,979,953,938,1119,2322,4930,2814,3050,2159,3884,6444,9223,7777,4086,2968,2456,2181,4113,7582,7242,4651,11603,4643,3618,3621,6166,3844,3385,2645,2330,2103,1928,2123,3931,3869,5851,3301,4321,4396,5224,3205,4943,20185,5228,4055,4982,5140,4267,2978,2748,2500,2276,2107,1969,1815,1714,1805,1565,1491,1428,1347,1288,1245,1207,1163,1332,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,607,625,625,782,786,929,760,773,737,804,680,639,620,875,2474,1604,2686,2037,1410,1130,992,901,847,798,766,809,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,798,796,809,768,735,765,826,1118,784,875,722,832,2295,1273,1115,936,817,742,713,680,647,647,681,651,692,608,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,431,496,803,543,472,485,534,485,488,588,576,557,504,486,520,643,627,627,546,515,511,619,1439,1330,1647,1821,1489,1130,960,847,822,792,772,899,870,801,752 +2247,2094,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1376,1405,1200,1102,1055,1017,1001,979,953,938,1128,2340,4931,2815,3050,2160,3898,6450,9233,7777,4086,2968,2456,2196,4154,7589,7242,4680,11607,4643,3618,3632,6169,3845,3390,2645,2330,2105,1928,2124,3952,3877,5857,3339,4324,4397,5227,3218,5130,20191,5228,4080,4984,5143,4267,2978,2748,2500,2276,2107,1969,1815,1714,1828,1566,1491,1428,1347,1288,1245,1207,1163,1334,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,609,625,626,784,786,929,761,777,737,804,680,639,620,876,2474,1607,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,799,796,809,772,738,765,826,1123,784,875,723,837,2295,1274,1115,936,817,742,713,680,647,647,683,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,432,496,803,543,474,486,534,485,489,588,576,557,504,487,521,643,627,627,546,515,511,622,1439,1343,1655,1823,1492,1133,960,847,823,794,775,899,870,801,752 +2247,2097,2049,1825,1700,1600,1501,1465,1443,1388,1299,1259,1211,1177,1124,1377,1406,1200,1102,1055,1017,1001,979,953,938,1130,2425,4933,2833,3050,2161,3909,6452,9233,7777,4086,2968,2456,2211,4232,7600,7258,4711,11617,4643,3618,3670,6182,3852,3390,2645,2330,2108,1928,2130,3958,3886,5861,3344,4339,4401,5235,3218,5158,20211,5228,4087,4990,5213,4267,2978,2748,2500,2276,2107,1969,1815,1714,1839,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,610,625,626,786,788,929,762,778,737,804,680,639,621,920,2474,1629,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,688,750,933,801,797,809,775,738,765,826,1126,784,876,723,838,2295,1276,1115,936,817,742,713,680,649,647,689,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,450,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,435,496,803,544,475,486,534,485,491,588,576,557,504,487,522,643,627,627,546,515,513,623,1439,1364,1655,1829,1494,1138,960,847,825,798,777,899,870,801,752 +2247,2098,2049,1825,1701,1600,1501,1476,1444,1388,1299,1259,1211,1177,1124,1415,1408,1200,1102,1055,1017,1001,979,953,942,1209,2471,4934,2835,3050,2168,3961,6499,9275,7777,4086,2968,2456,2222,4239,7634,7268,4909,11617,4643,3618,3730,6184,3860,3394,2645,2330,2111,1928,2152,3958,3891,5869,3361,4352,4472,5235,3222,5199,20236,5230,4188,4991,5279,4267,2978,2748,2500,2276,2107,1969,1815,1714,1847,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,613,625,627,789,793,929,764,796,737,804,680,639,621,927,2474,1656,2686,2037,1410,1130,992,901,847,798,766,826,2793,1574,1087,960,883,823,782,755,730,705,692,752,935,808,797,811,777,741,765,826,1146,784,876,723,869,2303,1278,1115,936,817,742,713,680,649,647,693,651,692,609,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,409,398,551,450,437,496,803,544,476,486,534,486,491,588,576,557,504,487,522,643,627,627,546,515,514,623,1439,1364,1659,1830,1495,1138,960,847,828,802,786,901,870,801,752 +2247,2106,2051,1825,1702,1600,1501,1477,1447,1388,1299,1259,1211,1177,1124,1415,1409,1200,1102,1055,1017,1001,980,953,942,1309,2510,4939,2880,3050,2210,4038,6563,9357,7781,4086,2968,2456,2250,4290,7640,7269,4968,11619,4643,3618,3763,6189,3869,3394,2645,2330,2112,1928,2208,4062,3895,5876,3439,4358,4513,5255,3230,5251,20249,5234,4213,4998,5285,4267,2987,2748,2500,2276,2107,1969,1815,1714,1872,1570,1491,1428,1347,1288,1245,1207,1163,1338,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,614,626,629,819,800,929,765,798,737,804,680,639,623,937,2478,1659,2686,2037,1410,1130,992,901,847,798,766,837,2793,1574,1087,960,883,823,782,755,730,705,696,753,935,813,798,812,784,745,765,826,1317,784,882,726,881,2305,1283,1115,936,817,742,713,680,649,647,695,651,692,610,576,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,533,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,410,399,551,451,441,497,805,545,478,487,534,486,493,588,576,557,504,489,522,643,627,627,546,515,519,667,1439,1365,1675,1831,1497,1139,960,851,830,805,787,902,870,801,752 +2247,2177,2056,1825,1705,1600,1501,1477,1448,1388,1299,1259,1211,1177,1124,1420,1411,1206,1102,1055,1017,1001,984,954,963,1426,2614,4959,2923,3050,2212,4284,6685,9417,7782,4086,2968,2456,2284,4451,7676,7273,5053,11664,4643,3618,4118,6230,3886,3396,2645,2330,2130,1928,2211,4371,3940,5900,3487,4420,4600,5290,3263,5401,20348,5240,4273,5090,5561,4275,2990,2748,2500,2276,2107,1969,1815,1714,1890,1571,1491,1428,1347,1288,1245,1207,1163,1376,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,601,621,626,630,821,830,929,767,891,737,804,680,646,624,1025,2481,1666,2693,2037,1410,1130,992,901,847,798,766,847,2793,1574,1087,960,883,823,782,755,730,705,704,754,937,819,802,815,792,746,766,826,1983,784,887,737,886,2337,1290,1117,936,817,742,713,680,664,647,697,651,692,612,578,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,535,476,448,397,367,354,342,332,320,324,327,333,340,359,331,383,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,520,413,410,399,551,451,454,503,806,549,504,488,534,487,494,591,578,558,504,489,524,644,627,627,546,515,521,677,1439,1390,1718,1848,1504,1155,960,852,836,896,792,910,870,801,752 diff --git a/tests/data/evalp/prd/leadtime_2/site_e.csv b/tests/data/evalp/prd/leadtime_2/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..3c7cd7852c876dac0e3625479f13886a430b5f2c --- /dev/null +++ b/tests/data/evalp/prd/leadtime_2/site_e.csv @@ -0,0 +1,51 @@ +2247,2044,2037,1825,1699,1600,1501,1432,1440,1388,1299,1259,1211,1177,1124,1121,1399,1179,1102,1055,1017,1001,979,953,925,927,1899,4782,2601,3050,1998,3478,5762,8745,7777,4086,2968,2456,2138,3199,7187,7165,3942,11588,4643,3618,3184,6052,3723,3356,2645,2330,2103,1928,1890,3624,3647,5821,2949,4161,3855,5200,3162,3896,19818,5228,3711,4874,4868,4267,2978,2748,2500,2276,2107,1969,1815,1714,1649,1561,1491,1428,1347,1288,1245,1207,1163,1189,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,707,759,929,755,684,737,804,680,639,620,706,2474,1406,2686,2037,1410,1130,992,901,847,798,766,750,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,770,794,804,728,721,765,826,795,784,875,711,795,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,402,398,551,449,416,484,801,537,457,483,534,477,483,582,575,557,504,477,515,643,627,627,546,515,497,577,1439,1198,1591,1815,1448,1117,960,847,809,788,749,896,870,801,752 +2247,2045,2037,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1132,1399,1179,1102,1055,1017,1001,979,953,925,932,1905,4784,2619,3050,2002,3506,5783,8764,7777,4086,2968,2456,2138,3299,7225,7165,3957,11588,4643,3618,3255,6052,3726,3356,2645,2330,2103,1928,1900,3645,3691,5821,2950,4161,3916,5200,3162,3956,19830,5228,3723,4877,4869,4267,2978,2748,2500,2276,2107,1969,1815,1714,1650,1561,1491,1428,1347,1288,1245,1207,1163,1195,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,594,625,616,710,760,929,755,686,737,804,680,639,620,713,2474,1418,2686,2037,1410,1130,992,901,847,798,766,754,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,798,784,875,711,798,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,416,484,801,537,457,483,534,477,483,583,575,557,504,478,516,643,627,627,546,515,498,578,1439,1216,1592,1815,1449,1117,960,847,809,788,750,896,870,801,752 +2247,2045,2038,1825,1699,1600,1501,1433,1440,1388,1299,1259,1211,1177,1124,1136,1399,1179,1102,1055,1017,1001,979,953,926,935,1908,4788,2623,3050,2017,3543,5794,8785,7777,4086,2968,2456,2138,3325,7250,7165,4048,11588,4643,3618,3271,6052,3737,3356,2645,2330,2103,1928,1909,3648,3692,5821,2987,4161,3956,5200,3162,3978,19858,5228,3726,4879,4886,4267,2978,2748,2500,2276,2107,1969,1815,1714,1652,1561,1491,1428,1347,1288,1245,1207,1163,1197,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,710,760,929,755,687,737,804,680,639,620,713,2474,1422,2686,2037,1410,1130,992,901,847,798,766,755,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,771,794,804,728,721,765,826,802,784,875,711,802,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,516,412,403,398,551,449,417,484,801,537,457,483,534,477,484,583,575,557,504,479,516,643,627,627,546,515,500,578,1439,1224,1596,1815,1451,1117,960,847,809,788,750,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1435,1440,1388,1299,1259,1211,1177,1124,1147,1399,1179,1102,1055,1017,1001,979,953,926,943,1918,4800,2627,3050,2019,3560,5795,8812,7777,4086,2968,2456,2138,3334,7270,7165,4104,11588,4643,3618,3280,6052,3746,3356,2645,2330,2103,1928,1912,3674,3714,5821,2991,4161,3966,5200,3162,3981,19860,5228,3743,4881,4891,4267,2978,2748,2500,2276,2107,1969,1815,1714,1656,1561,1491,1428,1347,1288,1245,1207,1163,1201,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,712,762,929,755,687,737,804,680,639,620,722,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,729,721,765,826,808,784,875,711,804,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,417,485,801,538,458,483,534,478,484,583,575,557,504,479,516,643,627,627,546,515,500,583,1439,1227,1597,1815,1454,1117,960,847,809,788,751,896,870,801,752 +2247,2048,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1153,1399,1180,1102,1055,1017,1001,979,953,926,944,1931,4801,2633,3050,2026,3560,5808,8833,7777,4086,2968,2456,2138,3380,7304,7165,4154,11588,4643,3618,3297,6052,3747,3356,2645,2330,2103,1928,1920,3677,3718,5821,2992,4161,3972,5200,3162,3995,19867,5228,3749,4883,4914,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1204,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,724,2474,1424,2686,2037,1410,1130,992,901,847,798,766,758,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,772,794,804,730,721,765,826,812,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,584,1439,1230,1598,1815,1454,1117,960,847,809,788,752,896,870,801,752 +2247,2049,2038,1825,1699,1600,1501,1436,1440,1388,1299,1259,1211,1177,1124,1161,1399,1181,1102,1055,1017,1001,979,953,926,944,1936,4806,2636,3050,2028,3571,5817,8844,7777,4086,2968,2456,2138,3474,7311,7165,4158,11588,4643,3618,3297,6052,3748,3356,2645,2330,2103,1928,1921,3681,3727,5821,2995,4161,3980,5200,3162,4060,19884,5228,3760,4884,4938,4267,2978,2748,2500,2276,2107,1969,1815,1714,1664,1561,1491,1428,1347,1288,1245,1207,1163,1215,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,713,763,929,755,691,737,804,680,639,620,728,2474,1425,2686,2037,1410,1130,992,901,847,798,766,761,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,773,794,804,731,721,765,826,818,784,875,711,805,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,418,486,801,538,458,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,585,1439,1234,1601,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1437,1440,1388,1299,1259,1211,1177,1124,1162,1399,1181,1102,1055,1017,1001,979,953,926,945,1937,4809,2653,3050,2029,3601,5817,8848,7777,4086,2968,2456,2138,3504,7314,7165,4167,11588,4643,3618,3300,6052,3749,3356,2645,2330,2103,1928,1922,3688,3729,5821,3014,4161,4047,5200,3162,4095,19885,5228,3792,4886,4952,4267,2978,2748,2500,2276,2107,1969,1815,1714,1675,1561,1491,1428,1347,1288,1245,1207,1163,1218,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,715,764,929,755,693,737,804,680,639,620,731,2474,1429,2686,2037,1410,1130,992,901,847,798,766,764,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,731,721,765,826,831,784,875,711,806,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,538,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1603,1815,1455,1117,960,847,809,788,753,896,870,801,752 +2247,2050,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1173,1399,1182,1102,1055,1017,1001,979,953,926,948,1940,4810,2671,3050,2037,3607,5821,8860,7777,4086,2968,2456,2138,3507,7321,7165,4167,11588,4643,3618,3311,6052,3755,3356,2645,2330,2103,1928,1924,3688,3730,5821,3015,4161,4049,5200,3162,4102,19887,5228,3808,4887,4957,4267,2978,2748,2500,2276,2107,1969,1815,1714,1678,1561,1491,1428,1347,1288,1245,1207,1163,1222,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,764,929,755,693,737,804,680,639,620,731,2474,1430,2686,2037,1410,1130,992,901,847,798,766,765,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,721,765,826,832,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,671,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,479,517,643,627,627,546,515,501,586,1439,1239,1604,1815,1456,1117,960,847,809,788,754,896,870,801,752 +2247,2052,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1176,1399,1182,1102,1055,1017,1001,979,953,926,952,1950,4822,2672,3050,2038,3615,5844,8866,7777,4086,2968,2456,2138,3518,7333,7165,4187,11588,4643,3618,3312,6052,3758,3356,2645,2330,2103,1928,1925,3689,3735,5821,3017,4161,4050,5200,3162,4112,19887,5228,3812,4894,4962,4267,2978,2748,2500,2276,2107,1969,1815,1714,1680,1561,1491,1428,1347,1288,1245,1207,1163,1228,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,595,625,616,718,765,929,755,693,737,804,680,639,620,732,2474,1449,2686,2037,1410,1130,992,901,847,798,766,766,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,774,794,804,732,722,765,826,833,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,459,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,587,1439,1249,1606,1815,1456,1117,960,847,809,788,755,896,870,801,752 +2247,2053,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1179,1399,1182,1102,1055,1017,1001,979,953,927,962,1958,4823,2682,3050,2038,3642,5845,8899,7777,4086,2968,2456,2138,3528,7338,7165,4190,11588,4643,3618,3314,6056,3761,3356,2645,2330,2103,1928,1926,3691,3749,5821,3018,4161,4050,5200,3162,4116,19905,5228,3813,4896,4973,4267,2978,2748,2500,2276,2107,1969,1815,1714,1681,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,695,737,804,680,639,620,733,2474,1453,2686,2037,1410,1130,992,901,847,798,766,767,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,775,794,804,732,722,765,826,835,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,589,1439,1250,1607,1815,1457,1117,960,847,809,788,755,896,870,801,752 +2247,2054,2039,1825,1699,1600,1501,1440,1440,1388,1299,1259,1211,1177,1124,1181,1399,1182,1102,1055,1017,1001,979,953,927,968,1959,4825,2682,3050,2041,3648,5856,8906,7777,4086,2968,2456,2138,3575,7343,7166,4252,11588,4643,3618,3323,6059,3762,3356,2645,2330,2103,1928,1937,3697,3752,5821,3023,4161,4053,5200,3162,4118,19917,5228,3824,4901,4975,4267,2978,2748,2500,2276,2107,1969,1815,1714,1684,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,736,2474,1453,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,776,794,804,732,722,765,826,836,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,419,487,801,539,460,483,534,478,484,583,575,557,504,480,517,643,627,627,546,515,501,590,1439,1250,1609,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2057,2040,1825,1699,1600,1501,1441,1440,1388,1299,1259,1211,1177,1124,1184,1399,1182,1102,1055,1017,1001,979,953,928,968,1965,4825,2682,3050,2044,3649,5886,8914,7777,4086,2968,2456,2138,3630,7348,7169,4269,11588,4643,3618,3326,6062,3774,3356,2645,2330,2103,1928,1957,3699,3756,5821,3023,4161,4057,5200,3162,4180,19920,5228,3828,4901,4981,4267,2978,2748,2500,2276,2107,1969,1815,1714,1686,1561,1491,1428,1347,1288,1245,1207,1163,1231,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,718,766,929,755,697,737,804,680,639,620,738,2474,1458,2686,2037,1410,1130,992,901,847,798,766,769,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,722,765,826,837,784,875,711,807,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,529,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,460,483,534,478,484,584,575,557,504,480,517,643,627,627,546,515,501,591,1439,1251,1610,1815,1457,1117,960,847,809,788,756,896,870,801,752 +2247,2058,2040,1825,1699,1600,1501,1445,1440,1388,1299,1259,1211,1177,1124,1191,1399,1182,1102,1055,1017,1001,979,953,928,969,1966,4841,2694,3050,2044,3650,5895,8920,7777,4086,2968,2456,2138,3683,7348,7170,4284,11588,4643,3618,3337,6072,3775,3356,2645,2330,2103,1928,1967,3704,3762,5821,3025,4161,4057,5200,3162,4198,19920,5228,3828,4903,4985,4267,2978,2748,2500,2276,2107,1969,1815,1714,1689,1561,1491,1428,1347,1288,1245,1207,1163,1233,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,616,719,767,929,755,698,737,804,680,639,620,742,2474,1476,2686,2037,1410,1130,992,901,847,798,766,770,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,723,765,826,847,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,403,398,551,449,420,487,801,539,461,483,534,479,485,584,575,557,504,480,518,643,627,627,546,515,501,592,1439,1251,1611,1815,1460,1117,960,847,809,788,757,896,870,801,752 +2247,2061,2040,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,928,969,1966,4844,2695,3050,2045,3659,5929,8932,7777,4086,2968,2456,2138,3707,7350,7171,4285,11588,4643,3618,3339,6076,3777,3356,2645,2330,2103,1928,1968,3707,3763,5821,3032,4161,4080,5200,3162,4202,19925,5228,3836,4904,4987,4267,2978,2748,2500,2276,2107,1969,1815,1714,1690,1561,1491,1428,1347,1288,1245,1207,1163,1235,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,596,625,617,719,767,929,755,699,737,804,680,639,620,744,2474,1477,2686,2037,1410,1130,992,901,847,798,766,772,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,777,794,804,733,724,765,826,856,784,875,711,808,2295,1265,1115,936,817,742,713,680,647,647,672,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1252,1612,1815,1461,1117,960,847,809,788,758,896,870,801,752 +2247,2062,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1191,1399,1183,1102,1055,1017,1001,979,953,929,974,1973,4844,2697,3050,2048,3676,5930,8948,7777,4086,2968,2456,2138,3729,7360,7171,4300,11588,4643,3618,3341,6076,3779,3357,2645,2330,2103,1928,1968,3708,3770,5821,3035,4161,4091,5200,3162,4210,19927,5228,3840,4906,4997,4267,2978,2748,2500,2276,2107,1969,1815,1714,1694,1561,1491,1428,1347,1288,1245,1207,1163,1238,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,767,929,755,699,737,804,680,639,620,745,2474,1479,2686,2037,1410,1130,992,901,847,798,766,773,2793,1574,1087,960,883,823,782,755,730,705,677,744,932,779,794,804,733,724,765,826,857,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,436,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,592,1439,1255,1612,1815,1462,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1446,1440,1388,1299,1259,1211,1177,1124,1192,1399,1183,1102,1055,1017,1001,979,953,929,981,1999,4851,2699,3050,2052,3680,5984,8953,7777,4086,2968,2456,2138,3765,7372,7173,4306,11588,4643,3618,3342,6076,3786,3357,2645,2330,2103,1928,1969,3710,3771,5821,3041,4161,4093,5200,3162,4227,19932,5228,3851,4907,5010,4267,2978,2748,2500,2276,2107,1969,1815,1714,1699,1561,1491,1428,1347,1288,1245,1207,1163,1240,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,699,737,804,680,639,620,749,2474,1479,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,734,724,765,826,863,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,488,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1613,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2063,2041,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1193,1399,1183,1102,1055,1017,1001,979,953,929,993,2006,4852,2699,3050,2055,3681,6005,8964,7777,4086,2968,2456,2138,3785,7373,7173,4322,11588,4643,3618,3343,6079,3787,3357,2645,2330,2103,1928,1974,3711,3771,5821,3043,4162,4103,5200,3162,4228,19950,5228,3854,4908,5011,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1242,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,720,768,929,755,700,737,804,680,639,620,750,2474,1482,2686,2037,1410,1130,992,901,847,798,766,777,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,869,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,462,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1255,1614,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2064,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1194,1399,1184,1102,1055,1017,1001,979,953,930,994,2008,4854,2699,3050,2056,3685,6006,8965,7777,4086,2968,2456,2138,3790,7383,7174,4328,11588,4643,3618,3359,6079,3788,3357,2645,2330,2103,1928,1974,3712,3772,5821,3049,4164,4108,5200,3162,4261,19953,5228,3862,4908,5019,4267,2978,2748,2500,2276,2107,1969,1815,1714,1700,1561,1491,1428,1347,1288,1245,1207,1163,1246,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,597,625,617,721,769,929,755,702,737,804,680,639,620,752,2474,1493,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,779,794,804,735,724,765,826,870,784,875,711,809,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,448,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,420,489,801,539,463,483,534,479,485,584,575,557,504,481,518,643,627,627,546,515,502,593,1439,1257,1615,1815,1463,1117,960,847,809,788,758,896,870,801,752 +2247,2065,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1197,1399,1184,1102,1055,1017,1001,979,953,930,994,2009,4855,2705,3050,2056,3690,6017,8978,7777,4086,2968,2456,2138,3815,7385,7175,4328,11588,4643,3618,3362,6084,3788,3359,2645,2330,2103,1928,1979,3717,3777,5821,3055,4165,4112,5200,3162,4267,19962,5228,3863,4909,5020,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,769,929,755,704,737,804,680,639,620,752,2474,1496,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,780,794,804,735,724,765,826,871,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,449,421,489,801,539,463,483,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,593,1439,1260,1617,1815,1464,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1184,1102,1055,1017,1001,979,953,930,1003,2013,4855,2706,3050,2058,3715,6018,8996,7777,4086,2968,2456,2138,3824,7387,7177,4356,11588,4643,3618,3372,6085,3790,3359,2645,2330,2103,1928,1980,3720,3780,5821,3059,4169,4120,5200,3162,4270,19965,5228,3870,4910,5025,4267,2978,2748,2500,2276,2107,1969,1815,1714,1701,1561,1491,1428,1347,1288,1245,1207,1163,1253,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,721,770,929,755,707,737,804,680,639,620,757,2474,1500,2686,2037,1410,1130,992,901,847,798,766,778,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,883,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,404,398,551,450,421,489,801,539,463,484,534,480,485,584,575,557,504,481,518,643,627,627,546,515,503,594,1439,1263,1618,1815,1466,1117,960,847,809,788,758,896,870,801,752 +2247,2066,2042,1825,1699,1600,1501,1447,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1007,2020,4856,2710,3050,2060,3716,6046,9002,7777,4086,2968,2456,2138,3834,7391,7181,4360,11588,4643,3618,3372,6086,3791,3359,2645,2330,2103,1928,1993,3723,3781,5821,3062,4173,4136,5201,3162,4293,19970,5228,3873,4911,5026,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1254,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,617,723,770,929,755,708,737,804,680,639,620,758,2474,1500,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,736,724,765,826,894,784,875,711,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,481,518,643,627,627,546,515,504,595,1439,1265,1621,1815,1467,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1198,1399,1185,1102,1055,1017,1001,979,953,930,1008,2030,4858,2713,3050,2064,3718,6049,9002,7777,4086,2968,2456,2138,3843,7416,7182,4361,11588,4643,3618,3376,6089,3794,3359,2645,2330,2103,1928,1995,3724,3783,5821,3062,4175,4145,5201,3162,4302,19980,5228,3879,4911,5031,4267,2978,2748,2500,2276,2107,1969,1815,1714,1703,1561,1491,1428,1347,1288,1245,1207,1163,1256,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,598,625,618,725,771,929,755,708,737,804,680,639,620,765,2474,1504,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,781,794,804,737,724,765,826,896,784,875,712,810,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,539,464,484,534,480,486,584,575,557,504,482,518,643,627,627,546,515,504,597,1439,1266,1622,1815,1468,1117,960,847,809,788,758,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1448,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,930,1008,2031,4859,2717,3050,2065,3719,6056,9007,7777,4086,2968,2456,2138,3859,7421,7184,4375,11588,4643,3618,3376,6091,3794,3359,2645,2330,2103,1928,1998,3725,3784,5821,3072,4180,4163,5201,3162,4347,19987,5228,3879,4913,5032,4267,2978,2748,2500,2276,2107,1969,1815,1714,1706,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,711,737,804,680,639,620,766,2474,1510,2686,2037,1410,1130,992,901,847,798,766,780,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,724,765,826,901,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,489,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,504,598,1439,1266,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2068,2042,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1212,1399,1185,1102,1055,1017,1001,979,953,931,1012,2032,4865,2717,3050,2071,3720,6063,9016,7777,4086,2968,2456,2138,3865,7424,7184,4391,11588,4643,3618,3390,6095,3797,3362,2645,2330,2103,1928,1999,3726,3787,5821,3073,4185,4167,5204,3162,4385,19987,5228,3884,4914,5035,4267,2978,2748,2500,2276,2107,1969,1815,1714,1709,1561,1491,1428,1347,1288,1245,1207,1163,1257,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,599,625,618,726,771,929,755,712,737,804,680,639,620,769,2474,1511,2686,2037,1410,1130,992,901,847,798,766,781,2793,1574,1087,960,883,823,782,755,730,705,678,744,932,782,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,673,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,422,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,598,1439,1270,1623,1815,1468,1117,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1218,1399,1186,1102,1055,1017,1001,979,953,931,1013,2043,4866,2722,3050,2075,3721,6077,9018,7777,4086,2968,2456,2138,3879,7427,7185,4392,11588,4643,3618,3391,6095,3800,3365,2645,2330,2103,1928,2003,3740,3793,5821,3092,4189,4169,5204,3162,4388,19995,5228,3891,4921,5036,4267,2978,2748,2500,2276,2107,1969,1815,1714,1719,1561,1491,1428,1347,1288,1245,1207,1163,1258,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,727,771,929,755,714,737,804,680,639,620,769,2474,1512,2686,2037,1410,1130,992,901,847,798,766,782,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,737,725,765,826,906,784,875,712,812,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,473,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,599,1439,1277,1624,1815,1469,1118,960,847,809,788,759,896,870,801,752 +2247,2069,2043,1825,1699,1600,1501,1449,1440,1388,1299,1259,1211,1177,1124,1230,1399,1186,1102,1055,1017,1001,979,953,931,1014,2070,4872,2724,3050,2077,3731,6083,9022,7777,4086,2968,2456,2138,3893,7428,7186,4399,11588,4643,3618,3413,6097,3801,3368,2645,2330,2103,1928,2007,3742,3795,5821,3096,4196,4175,5205,3164,4402,19996,5228,3896,4922,5044,4267,2978,2748,2500,2276,2107,1969,1815,1714,1722,1561,1491,1428,1347,1288,1245,1207,1163,1261,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,600,625,618,728,772,929,755,714,737,804,680,639,620,771,2474,1518,2686,2037,1410,1130,992,901,847,798,766,784,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,912,784,875,712,813,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,490,801,540,464,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1282,1624,1815,1470,1118,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1232,1399,1186,1102,1055,1017,1001,979,953,931,1014,2107,4877,2727,3050,2077,3734,6084,9026,7777,4086,2968,2456,2138,3907,7430,7187,4412,11588,4643,3618,3417,6098,3803,3369,2645,2330,2103,1928,2008,3742,3796,5821,3102,4203,4175,5206,3167,4419,20002,5228,3898,4923,5045,4267,2978,2748,2500,2276,2107,1969,1815,1714,1732,1561,1491,1428,1347,1288,1245,1207,1163,1272,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,718,737,804,680,639,620,781,2474,1520,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,738,725,765,826,917,784,875,712,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,584,575,557,504,482,518,643,627,627,546,515,505,602,1439,1284,1624,1815,1471,1119,960,847,809,788,761,896,870,801,752 +2247,2071,2044,1825,1699,1600,1501,1450,1440,1388,1299,1259,1211,1177,1124,1233,1399,1186,1102,1055,1017,1001,979,953,931,1017,2118,4878,2729,3050,2079,3736,6085,9031,7777,4086,2968,2456,2138,3925,7433,7188,4412,11588,4643,3618,3437,6101,3804,3370,2645,2330,2103,1928,2009,3756,3798,5821,3106,4204,4194,5208,3167,4421,20010,5228,3904,4924,5046,4267,2978,2748,2500,2276,2107,1969,1815,1714,1733,1561,1491,1428,1347,1288,1245,1207,1163,1273,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,729,772,929,755,722,737,804,680,639,620,783,2474,1524,2686,2037,1410,1130,992,901,847,798,766,786,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,783,794,804,739,725,765,826,920,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,481,486,585,575,557,504,482,519,643,627,627,546,515,505,602,1439,1287,1624,1815,1471,1119,960,847,810,788,761,896,870,801,752 +2247,2072,2044,1825,1699,1600,1501,1451,1440,1388,1299,1259,1211,1177,1124,1236,1399,1187,1102,1055,1017,1001,979,953,931,1019,2120,4880,2734,3050,2080,3737,6103,9035,7777,4086,2968,2456,2138,3938,7438,7188,4419,11588,4643,3618,3452,6104,3805,3371,2645,2330,2103,1928,2016,3769,3802,5821,3106,4215,4204,5209,3171,4425,20020,5228,3908,4927,5048,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1275,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,731,773,929,755,722,737,804,680,639,620,784,2474,1524,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,921,784,875,713,814,2295,1265,1115,936,817,742,713,680,647,647,674,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,399,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,465,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1289,1624,1815,1471,1120,960,847,810,788,761,896,870,801,752 +2247,2073,2044,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1237,1399,1187,1102,1055,1017,1001,979,953,932,1020,2129,4883,2736,3050,2083,3739,6104,9047,7777,4086,2968,2456,2138,3943,7438,7189,4453,11588,4643,3618,3472,6105,3805,3371,2645,2330,2103,1928,2017,3771,3811,5821,3106,4216,4209,5209,3173,4430,20022,5228,3913,4928,5051,4267,2978,2748,2500,2276,2107,1969,1815,1714,1735,1561,1491,1428,1347,1288,1245,1207,1163,1277,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,732,774,929,755,723,737,804,680,639,620,788,2474,1527,2686,2037,1410,1130,992,901,847,798,766,787,2793,1574,1087,960,883,823,782,755,730,705,679,744,932,784,794,804,739,726,765,826,947,784,875,713,815,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,341,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,412,405,398,551,450,423,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,505,603,1439,1292,1626,1815,1471,1121,960,847,810,788,762,896,870,801,752 +2247,2074,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1238,1399,1187,1102,1055,1017,1001,979,953,932,1023,2144,4885,2743,3050,2084,3746,6108,9050,7777,4086,2968,2456,2138,3944,7442,7190,4453,11588,4643,3618,3478,6109,3806,3371,2645,2330,2103,1928,2019,3776,3811,5821,3109,4219,4230,5209,3179,4436,20023,5228,3913,4928,5053,4267,2978,2748,2500,2276,2107,1969,1815,1714,1737,1561,1491,1428,1347,1288,1245,1207,1163,1281,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,618,733,774,929,755,725,737,804,680,639,620,789,2474,1529,2686,2037,1410,1130,992,901,847,798,766,789,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,784,794,804,743,726,765,826,947,784,875,713,816,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,428,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,353,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,486,585,575,557,504,482,519,643,627,627,546,515,506,603,1439,1293,1626,1815,1472,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1451,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2156,4889,2753,3050,2091,3750,6138,9059,7777,4086,2968,2456,2139,3952,7447,7191,4480,11588,4643,3618,3479,6112,3815,3372,2645,2330,2103,1928,2021,3789,3814,5821,3118,4222,4240,5210,3180,4437,20027,5228,3918,4932,5054,4267,2978,2748,2500,2276,2107,1969,1815,1714,1747,1561,1491,1428,1347,1288,1245,1207,1163,1284,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,738,774,929,755,727,737,804,680,639,620,791,2474,1530,2686,2037,1410,1130,992,901,847,798,766,790,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,743,727,765,826,949,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,491,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,604,1439,1295,1629,1815,1473,1121,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1452,1441,1388,1299,1259,1211,1177,1124,1248,1399,1188,1102,1055,1017,1001,979,953,932,1026,2169,4891,2758,3050,2097,3760,6157,9066,7777,4086,2968,2456,2141,3979,7455,7191,4485,11588,4643,3618,3480,6117,3816,3372,2645,2330,2103,1928,2030,3792,3821,5821,3144,4228,4243,5210,3181,4493,20031,5228,3925,4932,5057,4267,2978,2748,2500,2276,2107,1969,1815,1714,1749,1561,1491,1428,1347,1288,1245,1207,1163,1286,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,601,625,619,741,775,929,755,734,737,804,680,639,620,793,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,804,744,728,765,826,954,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,675,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,424,492,801,540,466,484,534,482,487,585,575,557,504,483,519,643,627,627,546,515,506,605,1439,1303,1630,1815,1473,1122,960,847,811,788,763,896,870,801,752 +2247,2075,2045,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1253,1399,1188,1102,1055,1017,1001,979,953,932,1028,2187,4892,2765,3050,2099,3766,6208,9074,7777,4086,2968,2456,2142,3983,7472,7191,4498,11588,4643,3618,3489,6124,3816,3372,2645,2330,2103,1928,2036,3797,3823,5821,3148,4231,4246,5211,3182,4563,20032,5228,3940,4933,5060,4267,2978,2748,2500,2276,2107,1969,1815,1714,1752,1561,1491,1428,1347,1288,1245,1207,1163,1287,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,794,2474,1531,2686,2037,1410,1130,992,901,847,798,766,791,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,805,746,728,765,826,962,784,875,713,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,605,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,466,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,506,607,1439,1304,1630,1815,1473,1123,960,847,811,788,763,896,870,801,752 +2247,2078,2046,1825,1699,1600,1501,1453,1441,1388,1299,1259,1211,1177,1124,1257,1399,1188,1102,1055,1017,1001,979,953,932,1030,2189,4893,2766,3050,2100,3771,6210,9090,7777,4086,2968,2456,2142,4018,7478,7197,4505,11588,4643,3618,3496,6125,3816,3373,2645,2330,2103,1928,2042,3797,3824,5821,3158,4234,4253,5211,3184,4565,20032,5228,3944,4943,5064,4267,2978,2748,2500,2276,2107,1969,1815,1714,1755,1561,1491,1428,1347,1288,1245,1207,1163,1288,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,742,775,929,755,735,737,804,680,639,620,797,2474,1532,2686,2037,1410,1130,992,901,847,798,766,794,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,746,728,765,826,966,784,875,714,817,2295,1265,1115,936,817,742,713,680,647,647,676,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,467,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,608,1439,1306,1631,1815,1473,1123,960,847,812,788,764,896,870,801,752 +2247,2079,2046,1825,1699,1600,1501,1454,1441,1388,1299,1259,1211,1177,1124,1258,1399,1189,1102,1055,1017,1001,979,953,933,1032,2212,4896,2768,3050,2104,3772,6213,9108,7777,4086,2968,2456,2142,4030,7481,7204,4513,11588,4643,3618,3502,6132,3817,3374,2645,2330,2103,1928,2042,3807,3828,5821,3161,4241,4253,5214,3190,4648,20039,5228,3955,4944,5065,4267,2978,2748,2500,2276,2107,1969,1815,1714,1761,1561,1491,1428,1347,1288,1245,1207,1163,1292,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,743,775,929,756,741,737,804,680,639,620,807,2474,1538,2686,2037,1410,1130,992,901,847,798,766,795,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,786,794,806,747,729,765,826,968,784,875,715,819,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,483,519,643,627,627,546,515,507,609,1439,1306,1632,1815,1474,1124,960,847,813,788,765,896,870,801,752 +2247,2080,2046,1825,1699,1600,1501,1456,1441,1388,1299,1259,1211,1177,1124,1279,1399,1190,1102,1055,1017,1001,979,953,934,1039,2215,4902,2779,3050,2112,3774,6222,9125,7777,4086,2968,2456,2144,4058,7484,7205,4516,11588,4643,3618,3527,6133,3817,3376,2645,2330,2103,1928,2053,3821,3830,5829,3195,4250,4254,5214,3190,4651,20053,5228,3958,4948,5070,4267,2978,2748,2500,2276,2107,1969,1815,1714,1763,1561,1491,1428,1347,1288,1245,1207,1163,1294,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,619,744,775,929,756,742,737,804,680,639,620,808,2474,1541,2686,2037,1410,1130,992,901,847,798,766,798,2793,1574,1087,960,883,823,782,755,730,705,680,744,932,788,794,806,747,729,765,826,969,784,875,715,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,405,398,551,450,425,492,801,541,468,484,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1315,1633,1815,1475,1125,960,847,813,788,765,896,870,801,752 +2247,2081,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1284,1399,1190,1102,1055,1017,1001,979,953,934,1047,2223,4902,2783,3050,2116,3817,6254,9131,7777,4086,2968,2456,2148,4064,7492,7209,4538,11588,4643,3618,3535,6133,3820,3377,2645,2330,2103,1928,2058,3838,3833,5830,3201,4251,4254,5214,3198,4662,20076,5228,3963,4951,5074,4267,2978,2748,2500,2276,2107,1969,1815,1714,1768,1561,1491,1428,1347,1288,1245,1207,1163,1296,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,602,625,620,747,777,929,756,743,737,804,680,639,620,812,2474,1541,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,681,744,932,789,794,806,747,730,765,826,986,784,875,716,820,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,492,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,507,611,1439,1317,1635,1815,1476,1125,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1288,1400,1191,1102,1055,1017,1001,979,953,935,1071,2238,4906,2784,3050,2117,3823,6265,9138,7777,4086,2968,2456,2151,4067,7504,7218,4563,11588,4643,3618,3539,6139,3821,3378,2645,2330,2103,1928,2096,3840,3840,5831,3219,4257,4305,5214,3198,4757,20077,5228,3968,4955,5082,4267,2978,2748,2500,2276,2107,1969,1815,1714,1775,1561,1491,1428,1347,1288,1245,1207,1163,1297,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,749,778,929,757,745,737,804,680,639,620,817,2474,1542,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,790,794,806,748,730,765,826,1023,784,875,716,821,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,426,493,802,542,469,485,534,483,487,586,575,557,504,484,519,643,627,627,546,515,508,611,1439,1317,1636,1815,1477,1126,960,847,814,788,766,896,870,801,752 +2247,2082,2046,1825,1699,1600,1501,1457,1442,1388,1299,1259,1211,1177,1124,1291,1400,1192,1102,1055,1017,1001,979,953,935,1080,2253,4908,2789,3050,2124,3825,6291,9142,7777,4086,2968,2456,2152,4079,7510,7224,4569,11588,4643,3618,3563,6146,3824,3381,2645,2330,2103,1928,2104,3844,3845,5832,3229,4269,4315,5214,3200,4762,20111,5228,3970,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1777,1561,1491,1428,1347,1288,1245,1207,1163,1299,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,750,780,929,757,748,737,804,680,639,620,822,2474,1555,2686,2037,1410,1130,992,901,847,798,766,800,2793,1574,1087,960,883,823,782,755,730,705,682,744,932,791,794,807,749,730,765,826,1026,784,875,716,823,2295,1265,1115,936,817,742,713,680,647,647,677,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,427,493,802,542,470,485,534,484,488,586,575,557,504,484,519,643,627,627,546,515,509,613,1439,1320,1637,1816,1479,1127,960,847,814,788,766,897,870,801,752 +2247,2084,2046,1825,1699,1600,1501,1458,1442,1388,1299,1259,1211,1177,1124,1307,1401,1193,1102,1055,1017,1001,979,953,935,1085,2253,4909,2790,3050,2125,3836,6294,9153,7777,4086,2968,2456,2155,4084,7515,7228,4572,11588,4643,3618,3564,6156,3826,3383,2645,2330,2103,1928,2106,3847,3847,5836,3235,4269,4323,5215,3201,4762,20123,5228,3973,4959,5092,4267,2978,2748,2500,2276,2107,1969,1815,1714,1778,1561,1491,1428,1347,1288,1245,1207,1163,1305,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,620,761,781,929,757,756,737,804,680,639,620,831,2474,1575,2686,2037,1410,1130,992,901,847,798,766,801,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,792,794,807,750,732,765,826,1030,784,875,717,824,2295,1266,1115,936,817,742,713,680,647,647,678,651,692,606,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,428,493,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,509,613,1439,1321,1637,1816,1479,1127,960,847,814,789,767,897,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1319,1401,1193,1102,1055,1017,1001,979,953,935,1088,2256,4913,2791,3050,2144,3844,6301,9157,7777,4086,2968,2456,2158,4090,7516,7229,4617,11589,4643,3618,3582,6157,3828,3383,2645,2330,2103,1928,2108,3852,3856,5838,3238,4269,4333,5216,3201,4775,20135,5228,3979,4962,5094,4267,2978,2748,2500,2276,2107,1969,1815,1714,1782,1562,1491,1428,1347,1288,1245,1207,1163,1306,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,603,625,621,763,783,929,758,757,737,804,680,639,620,860,2474,1578,2686,2037,1410,1130,992,901,847,798,766,803,2793,1574,1087,960,883,823,782,755,730,705,682,745,932,793,794,807,754,732,765,826,1040,784,875,717,826,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,517,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,484,519,643,627,627,546,515,510,614,1439,1322,1638,1816,1482,1127,960,847,815,789,768,898,870,801,752 +2247,2084,2047,1825,1699,1600,1501,1459,1442,1388,1299,1259,1211,1177,1124,1350,1401,1193,1102,1055,1017,1001,979,953,936,1111,2264,4916,2791,3050,2146,3852,6310,9187,7777,4086,2968,2456,2164,4093,7524,7233,4618,11594,4643,3618,3605,6160,3834,3383,2645,2330,2103,1928,2115,3856,3856,5841,3263,4289,4341,5219,3202,4837,20152,5228,3979,4969,5099,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1563,1491,1428,1347,1288,1245,1207,1163,1308,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,621,778,784,929,759,768,737,804,680,639,620,866,2474,1587,2686,2037,1410,1130,992,901,847,798,766,804,2793,1574,1087,960,883,823,782,755,730,705,683,746,932,794,794,808,757,733,765,826,1043,784,875,718,827,2295,1267,1115,936,817,742,713,680,647,647,678,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,332,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,802,542,470,485,534,484,488,587,575,557,504,485,519,643,627,627,546,515,510,615,1439,1326,1641,1817,1484,1128,960,847,815,789,768,898,870,801,752 +2247,2086,2048,1825,1699,1600,1501,1459,1443,1388,1299,1259,1211,1177,1124,1355,1403,1194,1102,1055,1017,1001,979,953,936,1112,2311,4927,2807,3050,2148,3856,6318,9214,7777,4086,2968,2456,2170,4096,7525,7233,4634,11598,4643,3618,3611,6161,3841,3384,2645,2330,2103,1928,2122,3880,3861,5845,3290,4303,4377,5220,3203,4919,20159,5228,3981,4970,5105,4267,2978,2748,2500,2276,2107,1969,1815,1714,1786,1564,1491,1428,1347,1288,1245,1207,1163,1313,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,605,625,622,780,784,929,759,769,737,804,680,639,620,867,2474,1592,2686,2037,1410,1130,992,901,847,798,766,807,2793,1574,1087,960,883,823,782,755,730,705,684,746,932,795,794,808,757,734,765,826,1044,784,875,720,830,2295,1268,1115,936,817,742,713,680,647,647,679,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,437,518,413,406,398,551,450,429,494,803,542,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,510,618,1439,1327,1644,1818,1486,1128,960,847,816,790,768,898,870,801,752 +2247,2087,2048,1825,1699,1600,1501,1461,1443,1388,1299,1259,1211,1177,1124,1356,1403,1196,1102,1055,1017,1001,979,953,937,1117,2317,4929,2809,3050,2153,3857,6338,9222,7777,4086,2968,2456,2171,4110,7574,7238,4635,11599,4643,3618,3620,6164,3842,3384,2645,2330,2103,1928,2122,3895,3863,5850,3296,4308,4386,5220,3203,4932,20181,5228,4017,4978,5129,4267,2978,2748,2500,2276,2107,1969,1815,1714,1801,1564,1491,1428,1347,1288,1245,1207,1163,1316,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,594,606,625,623,781,785,929,759,772,737,804,680,639,620,869,2474,1600,2686,2037,1410,1130,992,901,847,798,766,808,2793,1574,1087,960,883,823,782,755,730,705,685,747,932,798,795,809,759,734,765,826,1070,784,875,721,832,2295,1269,1115,936,817,742,713,680,647,647,680,651,692,607,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,530,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,430,495,803,543,471,485,534,484,488,587,575,557,504,486,520,643,627,627,546,515,511,619,1439,1327,1646,1818,1488,1129,960,847,816,791,768,899,870,801,752 +2247,2090,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1359,1403,1197,1102,1055,1017,1001,979,953,938,1119,2322,4930,2814,3050,2159,3884,6444,9223,7777,4086,2968,2456,2181,4113,7582,7242,4651,11603,4643,3618,3621,6166,3844,3385,2645,2330,2103,1928,2123,3931,3869,5851,3301,4321,4396,5224,3205,4943,20185,5228,4055,4982,5140,4267,2978,2748,2500,2276,2107,1969,1815,1714,1805,1565,1491,1428,1347,1288,1245,1207,1163,1332,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,607,625,625,782,786,929,760,773,737,804,680,639,620,875,2474,1604,2686,2037,1410,1130,992,901,847,798,766,809,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,798,796,809,768,735,765,826,1118,784,875,722,832,2295,1273,1115,936,817,742,713,680,647,647,681,651,692,608,576,612,564,536,526,516,506,494,474,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,406,398,551,450,431,496,803,543,472,485,534,485,488,588,576,557,504,486,520,643,627,627,546,515,511,619,1439,1330,1647,1821,1489,1130,960,847,822,792,772,899,870,801,752 +2247,2094,2048,1825,1700,1600,1501,1464,1443,1388,1299,1259,1211,1177,1124,1376,1405,1200,1102,1055,1017,1001,979,953,938,1128,2340,4931,2815,3050,2160,3898,6450,9233,7777,4086,2968,2456,2196,4154,7589,7242,4680,11607,4643,3618,3632,6169,3845,3390,2645,2330,2105,1928,2124,3952,3877,5857,3339,4324,4397,5227,3218,5130,20191,5228,4080,4984,5143,4267,2978,2748,2500,2276,2107,1969,1815,1714,1828,1566,1491,1428,1347,1288,1245,1207,1163,1334,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,595,609,625,626,784,786,929,761,777,737,804,680,639,620,876,2474,1607,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,686,749,933,799,796,809,772,738,765,826,1123,784,875,723,837,2295,1274,1115,936,817,742,713,680,647,647,683,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,449,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,432,496,803,543,474,486,534,485,489,588,576,557,504,487,521,643,627,627,546,515,511,622,1439,1343,1655,1823,1492,1133,960,847,823,794,775,899,870,801,752 +2247,2097,2049,1825,1700,1600,1501,1465,1443,1388,1299,1259,1211,1177,1124,1377,1406,1200,1102,1055,1017,1001,979,953,938,1130,2425,4933,2833,3050,2161,3909,6452,9233,7777,4086,2968,2456,2211,4232,7600,7258,4711,11617,4643,3618,3670,6182,3852,3390,2645,2330,2108,1928,2130,3958,3886,5861,3344,4339,4401,5235,3218,5158,20211,5228,4087,4990,5213,4267,2978,2748,2500,2276,2107,1969,1815,1714,1839,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,610,625,626,786,788,929,762,778,737,804,680,639,621,920,2474,1629,2686,2037,1410,1130,992,901,847,798,766,813,2793,1574,1087,960,883,823,782,755,730,705,688,750,933,801,797,809,775,738,765,826,1126,784,876,723,838,2295,1276,1115,936,817,742,713,680,649,647,689,651,692,608,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,298,400,450,669,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,407,398,551,450,435,496,803,544,475,486,534,485,491,588,576,557,504,487,522,643,627,627,546,515,513,623,1439,1364,1655,1829,1494,1138,960,847,825,798,777,899,870,801,752 +2247,2098,2049,1825,1701,1600,1501,1476,1444,1388,1299,1259,1211,1177,1124,1415,1408,1200,1102,1055,1017,1001,979,953,942,1209,2471,4934,2835,3050,2168,3961,6499,9275,7777,4086,2968,2456,2222,4239,7634,7268,4909,11617,4643,3618,3730,6184,3860,3394,2645,2330,2111,1928,2152,3958,3891,5869,3361,4352,4472,5235,3222,5199,20236,5230,4188,4991,5279,4267,2978,2748,2500,2276,2107,1969,1815,1714,1847,1567,1491,1428,1347,1288,1245,1207,1163,1337,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,613,625,627,789,793,929,764,796,737,804,680,639,621,927,2474,1656,2686,2037,1410,1130,992,901,847,798,766,826,2793,1574,1087,960,883,823,782,755,730,705,692,752,935,808,797,811,777,741,765,826,1146,784,876,723,869,2303,1278,1115,936,817,742,713,680,649,647,693,651,692,609,576,612,564,536,526,516,506,494,475,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,531,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,409,398,551,450,437,496,803,544,476,486,534,486,491,588,576,557,504,487,522,643,627,627,546,515,514,623,1439,1364,1659,1830,1495,1138,960,847,828,802,786,901,870,801,752 +2247,2106,2051,1825,1702,1600,1501,1477,1447,1388,1299,1259,1211,1177,1124,1415,1409,1200,1102,1055,1017,1001,980,953,942,1309,2510,4939,2880,3050,2210,4038,6563,9357,7781,4086,2968,2456,2250,4290,7640,7269,4968,11619,4643,3618,3763,6189,3869,3394,2645,2330,2112,1928,2208,4062,3895,5876,3439,4358,4513,5255,3230,5251,20249,5234,4213,4998,5285,4267,2987,2748,2500,2276,2107,1969,1815,1714,1872,1570,1491,1428,1347,1288,1245,1207,1163,1338,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,596,614,626,629,819,800,929,765,798,737,804,680,639,623,937,2478,1659,2686,2037,1410,1130,992,901,847,798,766,837,2793,1574,1087,960,883,823,782,755,730,705,696,753,935,813,798,812,784,745,765,826,1317,784,882,726,881,2305,1283,1115,936,817,742,713,680,649,647,695,651,692,610,576,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,533,476,448,397,367,354,342,332,320,324,327,333,340,359,331,382,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,518,413,410,399,551,451,441,497,805,545,478,487,534,486,493,588,576,557,504,489,522,643,627,627,546,515,519,667,1439,1365,1675,1831,1497,1139,960,851,830,805,787,902,870,801,752 +2247,2177,2056,1825,1705,1600,1501,1477,1448,1388,1299,1259,1211,1177,1124,1420,1411,1206,1102,1055,1017,1001,984,954,963,1426,2614,4959,2923,3050,2212,4284,6685,9417,7782,4086,2968,2456,2284,4451,7676,7273,5053,11664,4643,3618,4118,6230,3886,3396,2645,2330,2130,1928,2211,4371,3940,5900,3487,4420,4600,5290,3263,5401,20348,5240,4273,5090,5561,4275,2990,2748,2500,2276,2107,1969,1815,1714,1890,1571,1491,1428,1347,1288,1245,1207,1163,1376,1558,1313,1186,1147,1143,1099,1036,1008,982,953,924,899,880,858,836,818,791,762,742,720,701,685,674,658,643,625,609,602,601,621,626,630,821,830,929,767,891,737,804,680,646,624,1025,2481,1666,2693,2037,1410,1130,992,901,847,798,766,847,2793,1574,1087,960,883,823,782,755,730,705,704,754,937,819,802,815,792,746,766,826,1983,784,887,737,886,2337,1290,1117,936,817,742,713,680,664,647,697,651,692,612,578,612,564,536,526,516,506,494,476,459,451,450,441,429,430,453,467,444,413,390,376,373,368,360,359,351,348,345,343,340,337,342,535,476,448,397,367,354,342,332,320,324,327,333,340,359,331,383,371,356,333,318,316,318,312,308,300,299,400,450,670,534,402,384,361,347,337,342,349,339,333,325,324,326,324,322,320,318,322,327,327,333,329,333,354,438,520,413,410,399,551,451,454,503,806,549,504,488,534,487,494,591,578,558,504,489,524,644,627,627,546,515,521,677,1439,1390,1718,1848,1504,1155,960,852,836,896,792,910,870,801,752 diff --git a/tests/data/evalp/thr/site_d.csv b/tests/data/evalp/thr/site_d.csv new file mode 100644 index 0000000000000000000000000000000000000000..796b16c7ae26f9bf8cffaf2446fed2bada5daa37 --- /dev/null +++ b/tests/data/evalp/thr/site_d.csv @@ -0,0 +1 @@ +690,534,445,NAN diff --git a/tests/data/evalp/thr/site_e.csv b/tests/data/evalp/thr/site_e.csv new file mode 100644 index 0000000000000000000000000000000000000000..796b16c7ae26f9bf8cffaf2446fed2bada5daa37 --- /dev/null +++ b/tests/data/evalp/thr/site_e.csv @@ -0,0 +1 @@ +690,534,445,NAN diff --git a/tests/expected/evald/CONT_TBL.csv b/tests/expected/evald/CONT_TBL.csv new file mode 100644 index 0000000000000000000000000000000000000000..af1f83f062215033b332f69cbc6b7e205e7beb49 --- /dev/null +++ b/tests/expected/evald/CONT_TBL.csv @@ -0,0 +1,204 @@ +157.,19.,15.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +157.,19.,15.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +157.,19.,15.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +157.,19.,15.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,19.,14.,120. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,21.,14.,118. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,21.,14.,118. +200.,15.,8.,88. +220.,21.,6.,64. +nan,nan,nan,nan +158.,21.,14.,118. +200.,16.,8.,87. +221.,21.,5.,64. +nan,nan,nan,nan diff --git a/tests/expected/evald/KGE.csv b/tests/expected/evald/KGE.csv new file mode 100644 index 0000000000000000000000000000000000000000..65b1265ba054dbeee0465666a960c4b6c07944c3 --- /dev/null +++ b/tests/expected/evald/KGE.csv @@ -0,0 +1,51 @@ +0.7480876678384525 +0.74610619665192 +0.7441110304778197 +0.7430108522656984 +0.7417677706194681 +0.740519915124128 +0.7396393314765528 +0.7391812106418076 +0.7385521156240031 +0.7374975605864584 +0.736478762920044 +0.7356032352557134 +0.7349262719558889 +0.7341531483736209 +0.7335193136927298 +0.732498016247827 +0.7316031283668971 +0.7311620062353068 +0.7304853804554484 +0.7298301318606002 +0.7291682672297097 +0.7284933080332816 +0.7278420198262487 +0.7273338548948837 +0.7266696338186898 +0.7261028872180326 +0.7255515136947399 +0.7249203100577184 +0.724129099815763 +0.7235915471922136 +0.723195030128365 +0.7223157825504646 +0.7214401411915639 +0.7203988937539173 +0.7197737983854688 +0.7188157660001235 +0.7176518268945717 +0.716230562324343 +0.7149933138365094 +0.7133901818967825 +0.7126230134351779 +0.711672543996632 +0.7101399598194 +0.7086263896776204 +0.7068405183946846 +0.7050500737470602 +0.7031816136500466 +0.7006732963875493 +0.6961818766730593 +0.6916216736996625 +0.6764337637969222 diff --git a/tests/expected/evald/KGEPRIME.csv b/tests/expected/evald/KGEPRIME.csv new file mode 100644 index 0000000000000000000000000000000000000000..b3ab57461cefacf8d86dc335cc9a7bb86c323507 --- /dev/null +++ b/tests/expected/evald/KGEPRIME.csv @@ -0,0 +1,51 @@ +0.8131407494929581 +0.8127748549543973 +0.8120324184047302 +0.8117867087643632 +0.8113865804825375 +0.8110546552600805 +0.8110115513420257 +0.8109282579595157 +0.8107808794738488 +0.8102714601853906 +0.8098723493335118 +0.80972964340455 +0.8096359354316549 +0.8093267143355573 +0.8091370309262083 +0.80876520882257 +0.808297843099951 +0.8082504172955576 +0.8079588362318786 +0.8077792859196675 +0.8075824101888797 +0.8072872435440667 +0.8071551289052044 +0.8070989073590911 +0.8068619291248411 +0.8067928045232984 +0.8066998263051663 +0.806455314511177 +0.806108392682091 +0.8060009627097642 +0.8059219799600571 +0.8056200993568368 +0.805444123201897 +0.805182363569416 +0.8049830239354914 +0.8048140123227603 +0.8043601618202886 +0.8037118677795622 +0.8035729804192682 +0.8027506521878371 +0.8024589351470541 +0.8021804568386013 +0.8017099458589753 +0.8013131114124993 +0.8004747893474917 +0.7998057696216888 +0.7995518852898957 +0.7986597353849383 +0.7971020515928053 +0.7958136756510419 +0.7899796163833354 diff --git a/tests/expected/evald/KGEPRIME_D.csv b/tests/expected/evald/KGEPRIME_D.csv new file mode 100644 index 0000000000000000000000000000000000000000..558a3361645bc094d86d5c9b20fc189c013d9873 --- /dev/null +++ b/tests/expected/evald/KGEPRIME_D.csv @@ -0,0 +1,51 @@ +0.9071248643948864,1.1477333530243923,1.0668239858924582 +0.9077537938998346,1.1478429758547268,1.0684568980300118 +0.9080496949392161,1.1484028026509738,1.0696675053044051 +0.9082556740306482,1.1484209022637022,1.0705581846521615 +0.9084737485198940,1.1486630576436567,1.0713951161082431 +0.9089321810875520,1.1489428726605424,1.0722704389155211 +0.9093310954815347,1.1488135780819770,1.0731457617227991 +0.9094546896430078,1.1488016399441205,1.0735373535050023 +0.9095397983553178,1.1487856134230323,1.0740517976110342 +0.9095735837396087,1.1491999363901180,1.0745611228702399 +0.9096311356178044,1.1494305824532358,1.0751830627596215 +0.9101044432964827,1.1495392868849328,1.0758920230450484 +0.9102441911392056,1.1494163423692945,1.0765318788983218 +0.9102574967893201,1.1495752574168396,1.0770053722297441 +0.9103829299622012,1.1496597741688170,1.0774558307504485 +0.9104389606151662,1.1498193287039202,1.0781263996846790 +0.9103708026184928,1.1501613638087465,1.0785359074307741 +0.9106545061768646,1.1501897035858120,1.0789198209427380 +0.9106680754546872,1.1503679937353128,1.0793037344547021 +0.9107871131080774,1.1504053916036157,1.0798002625968421 +0.9109331668775991,1.1504930666773272,1.0802711965048515 +0.9109503931900584,1.1506796793881644,1.0806474317465762 +0.9112916063517488,1.1507819870125124,1.0811465193121295 +0.9116384611328783,1.1508213892258903,1.0815841807157685 +0.9116240546641530,1.1508649226798111,1.0820474363535382 +0.9117728671872545,1.1507388089259101,1.0826002718107666 +0.9119101939393581,1.1506625843082945,1.0831019187997328 +0.9119150575215442,1.1507542944710545,1.0835088671224147 +0.9119108416265477,1.1509472994224532,1.0839593256431190 +0.9120349545371204,1.1508964568748929,1.0844277001277152 +0.9120974194539910,1.1508349399490534,1.0847834599821353 +0.9121099264543083,1.1508757330670814,1.0854130781417561 +0.9125099729643541,1.1509349546260605,1.0861169195803568 +0.9129864907072712,1.1511152707612748,1.0868719494872194 +0.9130727481787702,1.1511623991072226,1.0873224080079240 +0.9137178424599028,1.1513164779920453,1.0880697596445472 +0.9137419646569960,1.1514764306974452,1.0888222301279968 +0.9136897426066677,1.1518176713888661,1.0896156513860558 +0.9144254206019433,1.1517387012476892,1.0907520353814693 +0.9142984381688551,1.1522701343488451,1.0915224218288104 +0.9142709614317646,1.1523150149572656,1.0920496630519076 +0.9144137451984202,1.1523110423287639,1.0927842175714655 +0.9149046185657690,1.1525453982271228,1.0938489377113123 +0.9155452591872579,1.1527254670882050,1.0949674057428342 +0.9155186197874120,1.1532046716768467,1.0959246300993313 +0.9154368750377250,1.1532273515892346,1.0972017823824649 +0.9167750313811954,1.1532539657633949,1.0988244568263661 +0.9169078074034277,1.1533196303650488,1.1006314097560101 +0.9175076075676912,1.1535549186612073,1.1038434861394426 +0.9179463597643975,1.1527797412590994,1.1077849981956065 +0.9179618893753376,1.1523899554203556,1.1189773567810644 diff --git a/tests/expected/evald/KGE_D.csv b/tests/expected/evald/KGE_D.csv new file mode 100644 index 0000000000000000000000000000000000000000..7d65cb59f4074a5036b38bfead4a934248bdf974 --- /dev/null +++ b/tests/expected/evald/KGE_D.csv @@ -0,0 +1,51 @@ +0.9071248643948864,1.2244294704151979,1.0668239858924582 +0.9077537938998346,1.2264207454072791,1.0684568980300118 +0.9080496949392161,1.2284091609962542,1.0696675053044051 +0.9082556740306482,1.2294513963440263,1.0705581846521615 +0.9084737485198940,1.2306719900133749,1.0713951161082431 +0.9089321810875520,1.2319774783565793,1.0722704389155211 +0.9093310954815347,1.2328444223282775,1.0731457617227991 +0.9094546896430078,1.2332814722478178,1.0735373535050023 +0.9095397983553178,1.2338552531667024,1.0740517976110342 +0.9095735837396087,1.2348855740497733,1.0745611228702399 +0.9096311356178044,1.2358482940716458,1.0751830627596215 +0.9101044432964827,1.2367801489363925,1.0758920230450484 +0.9102441911392056,1.2373833346872534,1.0765318788983218 +0.9102574967893201,1.2380987280203271,1.0770053722297441 +0.9103829299622012,1.2387076270574358,1.0774558307504485 +0.9104389606151662,1.2396505731434120,1.0781263996846790 +0.9103708026184928,1.2404903302072829,1.0785359074307741 +0.9106545061768646,1.2409624690429850,1.0789198209427380 +0.9106680754546872,1.2415964716356864,1.0793037344547021 +0.9107871131080774,1.2422080439464072,1.0798002625968421 +0.9109331668775991,1.2428445217100519,1.0802711965048515 +0.9109503931900584,1.2434790402937934,1.0806474317465762 +0.9112916063517488,1.2441639397456739,1.0811465193121295 +0.9116384611328783,1.2447102094160669,1.0815841807157685 +0.9116240546641530,1.2452904391749027,1.0820474363535382 +0.9117728671872545,1.2457901473263877,1.0826002718107666 +0.9119101939393581,1.2462848529553729,1.0831019187997328 +0.9119150575215442,1.2468524819385858,1.0835088671224147 +0.9119108416265477,1.2475800585327315,1.0839593256431190 +0.9120349545371204,1.2480639978139763,1.0844277001277152 +0.9120974194539910,1.2484067080262666,1.0847834599821353 +0.9121099264543083,1.2491755719869908,1.0854130781417561 +0.9125099729643541,1.2500499275558148,1.0861169195803568 +0.9129864907072712,1.2511148984168152,1.0868719494872194 +0.9130727481787702,1.2516846718054440,1.0873224080079240 +0.9137178424599028,1.2527126434836113,1.0880697596445472 +0.9137419646569960,1.2537531352118179,1.0888222301279968 +0.9136897426066677,1.2550385622883493,1.0896156513860558 +0.9144254206019433,1.2562613326135268,1.0907520353814693 +0.9142984381688551,1.2577286876454601,1.0915224218288104 +0.9142709614317646,1.2583852238137356,1.0920496630519076 +0.9144137451984202,1.2592273207901978,1.0927842175714655 +0.9149046185657690,1.2607105595147998,1.0938489377113123 +0.9155452591872579,1.2621968142312687,1.0949674057428342 +0.9155186197874120,1.2638254032362688,1.0959246300993313 +0.9154368750377250,1.2653231056559175,1.0972017823824649 +0.9167750313811954,1.2672236625128150,1.0988244568263661 +0.9169078074034277,1.2693798106679639,1.1006314097560101 +0.9175076075676912,1.2733440828682880,1.1038434861394426 +0.9179463597643975,1.2770321035906431,1.1077849981956065 +0.9179618893753376,1.2894982662973180,1.1189773567810644 diff --git a/tests/expected/evald/MAE.csv b/tests/expected/evald/MAE.csv new file mode 100644 index 0000000000000000000000000000000000000000..ef9cf0e5aa19cebfd335aaaafd5f73f21178bff5 --- /dev/null +++ b/tests/expected/evald/MAE.csv @@ -0,0 +1,51 @@ +265.1929260450160655 +265.6816720257234579 +265.7041800643086731 +265.7041800643086731 +265.8360128617363216 +266.1318327974276485 +266.4019292604501743 +266.3729903536977304 +266.5048231511253789 +266.6816720257234579 +266.6977491961415012 +266.8360128617363216 +267.0482315112540164 +267.3215434083601281 +267.4758842443729918 +267.8617363344051228 +268.0160771704179865 +267.9389067524115831 +268.1511254019292778 +268.1382636655948772 +268.3311897106109427 +268.5144694533761935 +268.4726688102894059 +268.3344051446945286 +268.5369774919614088 +268.6527331189710708 +268.7556270096462754 +268.9260450160771825 +269.0739549839228175 +269.2443729903537246 +269.4147909967845749 +269.7491961414791035 +269.7909967845658912 +269.9099678456591391 +270.0643086816720029 +269.9421221864951690 +270.1864951768488936 +270.6623794212218854 +271.1061093247588474 +271.5852090032154251 +271.9067524115755532 +272.1286173633440626 +272.3279742765273568 +272.6784565916398719 +273.4501607717041907 +274.5530546623793953 +274.8617363344051228 +276.1286173633440626 +278.5176848874597795 +281.2700964630225258 +291.2990353697749129 diff --git a/tests/expected/evald/MARE.csv b/tests/expected/evald/MARE.csv new file mode 100644 index 0000000000000000000000000000000000000000..bb93762afc8ff3ed5f1bad0080f8eaf37ae81c78 --- /dev/null +++ b/tests/expected/evald/MARE.csv @@ -0,0 +1,51 @@ +0.2110884459948862 +0.2114774783536764 +0.2114953943175681 +0.2114953943175681 +0.2116003306775049 +0.2118357976315096 +0.2120507891982094 +0.2120277543874916 +0.2121326907474284 +0.2122734590351485 +0.2122862561522140 +0.2123963113589770 +0.2125652333042412 +0.2127827842943542 +0.2129056366181827 +0.2132127674277538 +0.2133356197515823 +0.2132741935896681 +0.2134431155349323 +0.2134328778412799 +0.2135864432460655 +0.2137323303806118 +0.2136990578762416 +0.2135890026694786 +0.2137502463445035 +0.2138423855873749 +0.2139242871365938 +0.2140599365774878 +0.2141776700544901 +0.2143133194953841 +0.2144489689362780 +0.2147151489712397 +0.2147484214756099 +0.2148431201418944 +0.2149659724657229 +0.2148687143760253 +0.2150632305554205 +0.2154420252205583 +0.2157952256515652 +0.2161765797401161 +0.2164325220814255 +0.2166091222969289 +0.2167678065485407 +0.2170467837005679 +0.2176610453197104 +0.2185389275504014 +0.2187846321980584 +0.2197930450228172 +0.2216946966187457 +0.2238855630603538 +0.2318684046857924 diff --git a/tests/expected/evald/MSE.csv b/tests/expected/evald/MSE.csv new file mode 100644 index 0000000000000000000000000000000000000000..53a1eb3781e0e67ab67632c05a929f6d1aff72f9 --- /dev/null +++ b/tests/expected/evald/MSE.csv @@ -0,0 +1,51 @@ +603782.2604501608293504 +603540.1704180064843968 +604973.1768488745437935 +605519.1061093247262761 +606241.1157556270482019 +605823.9710610932670534 +605116.8520900321891531 +605160.5144694533664733 +605628.1511254019569606 +607006.1800643086899072 +608195.0578778134658933 +607157.1061093247262761 +607415.4598070739302784 +608465.9453376205638051 +608766.6463022507959977 +609964.8456591640133411 +611618.5176848875125870 +610871.5080385851906613 +611795.5273311897180974 +612155.2250803858041763 +612401.4630225080763921 +613310.6237942122388631 +612593.7202572347596288 +611633.2090032154228538 +612660.8906752411276102 +612724.9549839228857309 +612831.2958199357381091 +613728.3408360128523782 +614918.0514469452900812 +615075.4372990353731439 +615330.4244372990215197 +616544.5594855305971578 +615854.5048231511609629 +615046.1800643086899072 +615534.5530546624213457 +613767.3826366559369490 +615365.1704180064843968 +617751.3633440514095128 +615900.7909967845771462 +618968.0353697749087587 +620238.9099678456550464 +620927.2025723472470418 +620784.1286173633998260 +619856.3247588424710557 +622720.4019292604643852 +625799.9421221865341067 +621881.5369774919236079 +624982.4630225080763921 +628774.5691318328026682 +633351.0771704179933295 +656835.5305466237477958 diff --git a/tests/expected/evald/NSE.csv b/tests/expected/evald/NSE.csv new file mode 100644 index 0000000000000000000000000000000000000000..578721bc7dab93dc5517cb15d48d9d81844d6e7d --- /dev/null +++ b/tests/expected/evald/NSE.csv @@ -0,0 +1,51 @@ +0.7189121923160171 +0.7190248961181289 +0.7183577671505612 +0.7181036125173065 +0.7177674845422075 +0.7179616841657375 +0.7182908798615486 +0.7182705530594651 +0.718052847156156 +0.7174113126846504 +0.7168578365723296 +0.7173410498202125 +0.7172207745500294 +0.7167317262719881 +0.7165917364437786 +0.7160339207336052 +0.7152640620034193 +0.7156118286033213 +0.7151816560490262 +0.7150142005632107 +0.7148995657223857 +0.714476310478086 +0.7148100613295596 +0.715257222533744 +0.7147787904778381 +0.7147489656597577 +0.7146994592160939 +0.7142818444011523 +0.7137279805841595 +0.7136547103888884 +0.7135360024036145 +0.7129707679121519 +0.7132920194045123 +0.7136683309479988 +0.7134409713480524 +0.7142636686863795 +0.7135198265862999 +0.7124089464193454 +0.7132704711081728 +0.7118425308507162 +0.7112508815459708 +0.7109304503708312 +0.710997057734077 +0.7114289921740817 +0.710095635390346 +0.7086619708754944 +0.7104861647677075 +0.7090425441765131 +0.7072771481677261 +0.705146577768962 +0.6942135081069736 diff --git a/tests/expected/evald/RMSE.csv b/tests/expected/evald/RMSE.csv new file mode 100644 index 0000000000000000000000000000000000000000..42b7512dae33e1eea96a9afcc51236c16e3ba7ce --- /dev/null +++ b/tests/expected/evald/RMSE.csv @@ -0,0 +1,51 @@ +777.0342723780984 +776.8784785396018 +777.8002165394881 +778.1510818018085 +778.6148699810626 +778.3469477431598 +777.8925710469488 +777.9206350711191 +778.2211453856814 +779.1060133668002 +779.8686157794872 +779.2028658246354 +779.3686289600538 +780.0422715068848 +780.2349942820117 +781.0024620058275 +782.0604309673821 +781.5826943059737 +782.1735915582868 +782.4034925026765 +782.5608366271009 +783.1415094312216 +782.6836655106805 +782.0698236111757 +782.7265746576138 +782.7674973987633 +782.8354206472366 +783.4081572437275 +784.1671068381696 +784.267452658234 +784.4299997050719 +785.2035146925481 +784.7639803298513 +784.2487998488162 +784.5601016204319 +783.4330747655832 +784.4521466718072 +785.971604667784 +784.7934702816943 +786.7452162992635 +787.5524807705488 +787.9893416616416 +787.8985522371287 +787.3095482456963 +789.1263535893733 +791.0751810809049 +788.5946594908514 +790.5583236058602 +792.9530686817681 +795.833573789406 +810.4539040233095 diff --git a/tests/expected/evalp/AS.csv b/tests/expected/evalp/AS.csv new file mode 100644 index 0000000000000000000000000000000000000000..2062dbb440cef55fc54fcc1c82abe591701a9b02 --- /dev/null +++ b/tests/expected/evalp/AS.csv @@ -0,0 +1 @@ +0.4914810317862 diff --git a/tests/expected/evalp/AW.csv b/tests/expected/evalp/AW.csv new file mode 100644 index 0000000000000000000000000000000000000000..40622cd35ff86f9f32c117c5d13b4572137f2d13 --- /dev/null +++ b/tests/expected/evalp/AW.csv @@ -0,0 +1 @@ +9.2749196141479,31.3215434083601 diff --git a/tests/expected/evalp/AWI.csv b/tests/expected/evalp/AWI.csv new file mode 100644 index 0000000000000000000000000000000000000000..8b3b7e7f9598b23911dc06f440d71572b99b48e5 --- /dev/null +++ b/tests/expected/evalp/AWI.csv @@ -0,0 +1 @@ +0.9821120161733,0.9880951944476 diff --git a/tests/expected/evalp/AWN.csv b/tests/expected/evalp/AWN.csv new file mode 100644 index 0000000000000000000000000000000000000000..34e29a4d703bbbd371011a5dca898f891df2ab20 --- /dev/null +++ b/tests/expected/evalp/AWN.csv @@ -0,0 +1 @@ +0.0073826568351,0.0249313434669 diff --git a/tests/expected/evalp/BS.csv b/tests/expected/evalp/BS.csv new file mode 100644 index 0000000000000000000000000000000000000000..3db5ba184a4650f383600095ea081a04acf97c74 --- /dev/null +++ b/tests/expected/evalp/BS.csv @@ -0,0 +1,4 @@ +0.1061513565769 +0.0739562201528 +0.0866918610329 +nan diff --git a/tests/expected/evalp/BSS.csv b/tests/expected/evalp/BSS.csv new file mode 100644 index 0000000000000000000000000000000000000000..6b26f31c41c6febf5321dbd600f2c38654b819a6 --- /dev/null +++ b/tests/expected/evalp/BSS.csv @@ -0,0 +1,4 @@ +0.5705594211361 +0.6661165249535 +0.5635125720476 +nan diff --git a/tests/expected/evalp/BS_CRD.csv b/tests/expected/evalp/BS_CRD.csv new file mode 100644 index 0000000000000000000000000000000000000000..9fa242b1a1bf2d7e205232c2eb70a407319e2295 --- /dev/null +++ b/tests/expected/evalp/BS_CRD.csv @@ -0,0 +1,4 @@ +0.0114117580190,0.1524456042419,0.2471852027998 +0.0055324125593,0.1530792786029,0.2215030861964 +0.0101394313199,0.1220600742934,0.1986125040064 +nan,nan,nan diff --git a/tests/expected/evalp/BS_LBD.csv b/tests/expected/evalp/BS_LBD.csv new file mode 100644 index 0000000000000000000000000000000000000000..903f1023e8152bb24a3439e5c5695868c6d65bd4 --- /dev/null +++ b/tests/expected/evalp/BS_LBD.csv @@ -0,0 +1,4 @@ +0.0121598807967,0.1506234181408,0.2446148939211 +0.0080317462446,0.1473868836293,0.2133113575375 +0.0171912794414,0.1048221425794,0.1743227241709 +nan,nan,nan diff --git a/tests/expected/evalp/CR.csv b/tests/expected/evalp/CR.csv new file mode 100644 index 0000000000000000000000000000000000000000..a4a746929f3e5aef516ba7ca4e79cb9982e0f69f --- /dev/null +++ b/tests/expected/evalp/CR.csv @@ -0,0 +1 @@ +0.0064308681672,0.0353697749196 diff --git a/tests/expected/evalp/CRPS_FROM_BS.csv b/tests/expected/evalp/CRPS_FROM_BS.csv new file mode 100644 index 0000000000000000000000000000000000000000..7a155403cfd93a41adafa598edbc99227973ad0a --- /dev/null +++ b/tests/expected/evalp/CRPS_FROM_BS.csv @@ -0,0 +1 @@ +226.5713674310274 diff --git a/tests/expected/evalp/CRPS_FROM_ECDF.csv b/tests/expected/evalp/CRPS_FROM_ECDF.csv new file mode 100644 index 0000000000000000000000000000000000000000..a639c991d747ee29be096a2354aafdb4d737cb01 --- /dev/null +++ b/tests/expected/evalp/CRPS_FROM_ECDF.csv @@ -0,0 +1 @@ +262.615225902479 diff --git a/tests/expected/evalp/CRPS_FROM_QS.csv b/tests/expected/evalp/CRPS_FROM_QS.csv new file mode 100644 index 0000000000000000000000000000000000000000..c449874f5f2b510060ab8d33d4f09642f0f2221a --- /dev/null +++ b/tests/expected/evalp/CRPS_FROM_QS.csv @@ -0,0 +1 @@ +252.9569186533230 diff --git a/tests/expected/evalp/CSI.csv b/tests/expected/evalp/CSI.csv new file mode 100644 index 0000000000000000000000000000000000000000..ed9f3d5d8e6be62028c0a624937bc8b71aeac154 --- /dev/null +++ b/tests/expected/evalp/CSI.csv @@ -0,0 +1,52 @@ +0.4469453376206,0.3311897106109,0.2733118971061,nan +0.7792207792208,0.8108108108108,0.7032967032967,nan +0.7792207792208,0.8108108108108,0.7032967032967,nan +0.7792207792208,0.8108108108108,0.7032967032967,nan +0.7792207792208,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7843137254902,0.8108108108108,0.7032967032967,nan +0.7712418300654,0.8108108108108,0.7032967032967,nan +0.7712418300654,0.8108108108108,0.7032967032967,nan +0.7712418300654,0.8018018018018,0.7111111111111,nan diff --git a/tests/expected/evalp/DS.csv b/tests/expected/evalp/DS.csv new file mode 100644 index 0000000000000000000000000000000000000000..bf3ba37e57fefc74f9d488499775accd02e3a2d0 --- /dev/null +++ b/tests/expected/evalp/DS.csv @@ -0,0 +1 @@ +148.7901639344262 diff --git a/tests/expected/evalp/ES.csv b/tests/expected/evalp/ES.csv new file mode 100644 index 0000000000000000000000000000000000000000..63564433c01ac6a3420db76dbcf9b76a6fc6ffb3 --- /dev/null +++ b/tests/expected/evalp/ES.csv @@ -0,0 +1 @@ +587.2254970444062 diff --git a/tests/expected/evalp/FAR.csv b/tests/expected/evalp/FAR.csv new file mode 100644 index 0000000000000000000000000000000000000000..7f82d19402209cdc1006165e106dc64febbc30d5 --- /dev/null +++ b/tests/expected/evalp/FAR.csv @@ -0,0 +1,52 @@ +0.5530546623794,0.6688102893891,0.7266881028939,nan +0.1111111111111,0.0816326530612,0.0857142857143,nan +0.1111111111111,0.0816326530612,0.0857142857143,nan +0.1111111111111,0.0816326530612,0.0857142857143,nan +0.1111111111111,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1044776119403,0.0816326530612,0.0857142857143,nan +0.1060606060606,0.0816326530612,0.0857142857143,nan +0.1060606060606,0.0816326530612,0.0857142857143,nan +0.1060606060606,0.0824742268041,0.0724637681159,nan diff --git a/tests/expected/evalp/POD.csv b/tests/expected/evalp/POD.csv new file mode 100644 index 0000000000000000000000000000000000000000..80667c12ae32a3ce3b15b0f4ad6f17cefa1a9d74 --- /dev/null +++ b/tests/expected/evalp/POD.csv @@ -0,0 +1,52 @@ +1.0000000000000,1.0000000000000,1.0000000000000,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8633093525180,0.8737864077670,0.7529411764706,nan +0.8489208633094,0.8737864077670,0.7529411764706,nan +0.8489208633094,0.8737864077670,0.7529411764706,nan +0.8489208633094,0.8640776699029,0.7529411764706,nan diff --git a/tests/expected/evalp/POFD.csv b/tests/expected/evalp/POFD.csv new file mode 100644 index 0000000000000000000000000000000000000000..d3007cb09d09716c216dece30c97b68dd9752c3b --- /dev/null +++ b/tests/expected/evalp/POFD.csv @@ -0,0 +1,52 @@ +1.0000000000000,1.0000000000000,1.0000000000000,nan +0.0872093023256,0.0384615384615,0.0265486725664,nan +0.0872093023256,0.0384615384615,0.0265486725664,nan +0.0872093023256,0.0384615384615,0.0265486725664,nan +0.0872093023256,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0265486725664,nan +0.0813953488372,0.0384615384615,0.0221238938053,nan diff --git a/tests/expected/evalp/QS.csv b/tests/expected/evalp/QS.csv new file mode 100644 index 0000000000000000000000000000000000000000..10f11b5a009026f2a9fc07994ed57e0854f3e690 --- /dev/null +++ b/tests/expected/evalp/QS.csv @@ -0,0 +1 @@ +345.9157803611179,345.0692555033388,343.1293593865944,340.7098689092258,338.2815978233983,335.9735345040806,333.5551570615883,330.3324264160278,327.3335394509029,324.3259955478602,321.1900816225579,318.1751174870145,315.1221864951768,311.9720504575810,308.6449418748451,305.6121691813011,302.1695523126391,298.4459559732869,294.9746475389559,291.2738065792731,287.7245857036857,284.1019045263419,280.2355923818945,276.2186495176851,272.5014840465003,268.6527331189711,264.7401681919366,260.8558001484045,256.9032896364086,252.9262923571603,248.9312391788272,244.9863962404153,240.6629977739305,236.3289636408610,232.0897848132574,227.3870887954491,222.9760079149148,218.6999752658918,214.0996784565916,209.6725204056392,205.1895869403907,200.3957457333661,195.2372000989366,190.0801385110065,185.3842443729902,180.6178580262183,174.5832302745488,169.1540934949294,163.1109324758844,156.2747959436064,147.5753153598814 diff --git a/tests/expected/evalp/RANK_HIST.csv b/tests/expected/evalp/RANK_HIST.csv new file mode 100644 index 0000000000000000000000000000000000000000..c35d0094a8725513a0e888bd151ab70f0fcb9b60 --- /dev/null +++ b/tests/expected/evalp/RANK_HIST.csv @@ -0,0 +1 @@ +0.6077170418006,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0032154340836,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0032154340836,0.0000000000000,0.0032154340836,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0032154340836,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0000000000000,0.0064308681672,0.0000000000000,0.0000000000000,0.0032154340836,0.0064308681672,0.0000000000000,0.0000000000000,0.0000000000000,0.0032154340836,0.0000000000000,0.0000000000000,0.0032154340836,0.0032154340836,0.0032154340836,0.0000000000000,0.0064308681672,0.3440514469453 diff --git a/tests/expected/evalp/REL_DIAG.csv b/tests/expected/evalp/REL_DIAG.csv new file mode 100644 index 0000000000000000000000000000000000000000..3568332be044fda594e68d46f3c9ac93bfad0af4 --- /dev/null +++ b/tests/expected/evalp/REL_DIAG.csv @@ -0,0 +1,208 @@ +0.0000000000000,0.1060606060606,132.0000000000000 +0.0196078431373,0.0000000000000,0.0000000000000 +0.0392156862745,0.0000000000000,0.0000000000000 +0.0588235294118,0.0000000000000,2.0000000000000 +0.0784313725490,0.0000000000000,0.0000000000000 +0.0980392156863,0.0000000000000,0.0000000000000 +0.1176470588235,0.0000000000000,0.0000000000000 +0.1372549019608,0.0000000000000,0.0000000000000 +0.1568627450980,0.0000000000000,0.0000000000000 +0.1764705882353,0.0000000000000,0.0000000000000 +0.1960784313725,0.0000000000000,0.0000000000000 +0.2156862745098,0.0000000000000,0.0000000000000 +0.2352941176471,0.0000000000000,0.0000000000000 +0.2549019607843,0.0000000000000,0.0000000000000 +0.2745098039216,0.0000000000000,0.0000000000000 +0.2941176470588,0.0000000000000,0.0000000000000 +0.3137254901961,0.0000000000000,0.0000000000000 +0.3333333333333,0.0000000000000,0.0000000000000 +0.3529411764706,0.0000000000000,0.0000000000000 +0.3725490196078,0.0000000000000,0.0000000000000 +0.3921568627451,0.0000000000000,0.0000000000000 +0.4117647058824,0.0000000000000,0.0000000000000 +0.4313725490196,0.0000000000000,0.0000000000000 +0.4509803921569,0.0000000000000,0.0000000000000 +0.4705882352941,0.0000000000000,0.0000000000000 +0.4901960784314,0.0000000000000,0.0000000000000 +0.5098039215686,0.0000000000000,0.0000000000000 +0.5294117647059,0.0000000000000,0.0000000000000 +0.5490196078431,0.0000000000000,0.0000000000000 +0.5686274509804,0.0000000000000,0.0000000000000 +0.5882352941176,0.0000000000000,0.0000000000000 +0.6078431372549,0.0000000000000,0.0000000000000 +0.6274509803922,0.0000000000000,0.0000000000000 +0.6470588235294,0.0000000000000,0.0000000000000 +0.6666666666667,0.0000000000000,0.0000000000000 +0.6862745098039,0.0000000000000,0.0000000000000 +0.7058823529412,0.0000000000000,0.0000000000000 +0.7254901960784,0.0000000000000,0.0000000000000 +0.7450980392157,0.0000000000000,0.0000000000000 +0.7647058823529,0.0000000000000,0.0000000000000 +0.7843137254902,0.0000000000000,0.0000000000000 +0.8039215686275,0.0000000000000,0.0000000000000 +0.8235294117647,0.0000000000000,0.0000000000000 +0.8431372549020,0.0000000000000,0.0000000000000 +0.8627450980392,0.0000000000000,0.0000000000000 +0.8823529411765,0.0000000000000,0.0000000000000 +0.9019607843137,0.0000000000000,0.0000000000000 +0.9215686274510,1.0000000000000,1.0000000000000 +0.9411764705882,0.0000000000000,0.0000000000000 +0.9607843137255,0.0000000000000,0.0000000000000 +0.9803921568627,0.0000000000000,0.0000000000000 +1.0000000000000,0.8920454545455,176.0000000000000 +0.0000000000000,0.0842105263158,95.0000000000000 +0.0196078431373,0.0000000000000,1.0000000000000 +0.0392156862745,0.0000000000000,0.0000000000000 +0.0588235294118,0.0000000000000,0.0000000000000 +0.0784313725490,0.0000000000000,0.0000000000000 +0.0980392156863,0.0000000000000,0.0000000000000 +0.1176470588235,0.0000000000000,0.0000000000000 +0.1372549019608,0.0000000000000,0.0000000000000 +0.1568627450980,0.0000000000000,0.0000000000000 +0.1764705882353,0.0000000000000,0.0000000000000 +0.1960784313725,0.0000000000000,0.0000000000000 +0.2156862745098,0.0000000000000,0.0000000000000 +0.2352941176471,0.0000000000000,0.0000000000000 +0.2549019607843,0.0000000000000,0.0000000000000 +0.2745098039216,0.0000000000000,0.0000000000000 +0.2941176470588,0.0000000000000,0.0000000000000 +0.3137254901961,0.0000000000000,0.0000000000000 +0.3333333333333,0.0000000000000,0.0000000000000 +0.3529411764706,0.0000000000000,0.0000000000000 +0.3725490196078,0.0000000000000,0.0000000000000 +0.3921568627451,0.0000000000000,0.0000000000000 +0.4117647058824,0.0000000000000,0.0000000000000 +0.4313725490196,0.0000000000000,0.0000000000000 +0.4509803921569,0.0000000000000,0.0000000000000 +0.4705882352941,0.0000000000000,0.0000000000000 +0.4901960784314,0.0000000000000,0.0000000000000 +0.5098039215686,0.0000000000000,0.0000000000000 +0.5294117647059,0.0000000000000,0.0000000000000 +0.5490196078431,0.0000000000000,0.0000000000000 +0.5686274509804,0.0000000000000,0.0000000000000 +0.5882352941176,0.0000000000000,0.0000000000000 +0.6078431372549,0.0000000000000,0.0000000000000 +0.6274509803922,0.0000000000000,0.0000000000000 +0.6470588235294,0.0000000000000,0.0000000000000 +0.6666666666667,0.0000000000000,0.0000000000000 +0.6862745098039,0.0000000000000,0.0000000000000 +0.7058823529412,0.0000000000000,0.0000000000000 +0.7254901960784,0.0000000000000,0.0000000000000 +0.7450980392157,0.0000000000000,0.0000000000000 +0.7647058823529,0.0000000000000,0.0000000000000 +0.7843137254902,0.0000000000000,0.0000000000000 +0.8039215686275,0.0000000000000,0.0000000000000 +0.8235294117647,0.0000000000000,0.0000000000000 +0.8431372549020,0.0000000000000,0.0000000000000 +0.8627450980392,0.0000000000000,0.0000000000000 +0.8823529411765,0.0000000000000,0.0000000000000 +0.9019607843137,0.0000000000000,0.0000000000000 +0.9215686274510,0.0000000000000,0.0000000000000 +0.9411764705882,0.0000000000000,0.0000000000000 +0.9607843137255,0.0000000000000,0.0000000000000 +0.9803921568627,0.0000000000000,0.0000000000000 +1.0000000000000,0.9302325581395,215.0000000000000 +0.0000000000000,0.0724637681159,69.0000000000000 +0.0196078431373,1.0000000000000,1.0000000000000 +0.0392156862745,0.0000000000000,0.0000000000000 +0.0588235294118,0.0000000000000,0.0000000000000 +0.0784313725490,0.0000000000000,0.0000000000000 +0.0980392156863,0.0000000000000,0.0000000000000 +0.1176470588235,0.0000000000000,0.0000000000000 +0.1372549019608,0.0000000000000,0.0000000000000 +0.1568627450980,0.0000000000000,0.0000000000000 +0.1764705882353,0.0000000000000,0.0000000000000 +0.1960784313725,0.0000000000000,0.0000000000000 +0.2156862745098,0.0000000000000,0.0000000000000 +0.2352941176471,0.0000000000000,0.0000000000000 +0.2549019607843,0.0000000000000,0.0000000000000 +0.2745098039216,0.0000000000000,0.0000000000000 +0.2941176470588,0.0000000000000,0.0000000000000 +0.3137254901961,0.0000000000000,0.0000000000000 +0.3333333333333,0.0000000000000,0.0000000000000 +0.3529411764706,0.0000000000000,0.0000000000000 +0.3725490196078,0.0000000000000,0.0000000000000 +0.3921568627451,0.0000000000000,0.0000000000000 +0.4117647058824,0.0000000000000,0.0000000000000 +0.4313725490196,0.0000000000000,0.0000000000000 +0.4509803921569,0.0000000000000,0.0000000000000 +0.4705882352941,0.0000000000000,0.0000000000000 +0.4901960784314,0.0000000000000,0.0000000000000 +0.5098039215686,0.0000000000000,0.0000000000000 +0.5294117647059,0.0000000000000,0.0000000000000 +0.5490196078431,0.0000000000000,0.0000000000000 +0.5686274509804,0.0000000000000,0.0000000000000 +0.5882352941176,0.0000000000000,0.0000000000000 +0.6078431372549,0.0000000000000,0.0000000000000 +0.6274509803922,0.0000000000000,0.0000000000000 +0.6470588235294,0.0000000000000,0.0000000000000 +0.6666666666667,0.0000000000000,0.0000000000000 +0.6862745098039,0.0000000000000,0.0000000000000 +0.7058823529412,0.0000000000000,0.0000000000000 +0.7254901960784,0.0000000000000,0.0000000000000 +0.7450980392157,0.0000000000000,0.0000000000000 +0.7647058823529,0.0000000000000,0.0000000000000 +0.7843137254902,0.0000000000000,0.0000000000000 +0.8039215686275,0.0000000000000,0.0000000000000 +0.8235294117647,0.0000000000000,0.0000000000000 +0.8431372549020,0.0000000000000,0.0000000000000 +0.8627450980392,0.0000000000000,0.0000000000000 +0.8823529411765,0.0000000000000,0.0000000000000 +0.9019607843137,0.0000000000000,0.0000000000000 +0.9215686274510,0.0000000000000,0.0000000000000 +0.9411764705882,0.0000000000000,0.0000000000000 +0.9607843137255,0.0000000000000,0.0000000000000 +0.9803921568627,0.0000000000000,0.0000000000000 +1.0000000000000,0.9128630705394,241.0000000000000 +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan diff --git a/tests/expected/evalp/ROCSS.csv b/tests/expected/evalp/ROCSS.csv new file mode 100644 index 0000000000000000000000000000000000000000..ab68dea18a015816e96dbd71aca33f6bbbd64567 --- /dev/null +++ b/tests/expected/evalp/ROCSS.csv @@ -0,0 +1,4 @@ +0.7108499247114 +0.8017176997760 +0.7130661114003 +nan diff --git a/tests/expected/evalp/WS.csv b/tests/expected/evalp/WS.csv new file mode 100644 index 0000000000000000000000000000000000000000..82b07bb09227e378a17fa2a7a485f5371f36cccf --- /dev/null +++ b/tests/expected/evalp/WS.csv @@ -0,0 +1 @@ +764.4471750114835,2578.1382636655953 diff --git a/tests/expected/evalp/WSS.csv b/tests/expected/evalp/WSS.csv new file mode 100644 index 0000000000000000000000000000000000000000..fd929dabd8f58354be587455dcbd4402d6a9f83d --- /dev/null +++ b/tests/expected/evalp/WSS.csv @@ -0,0 +1 @@ +0.6621887740287,0.4360388849930 diff --git a/tests/test_determinist.py b/tests/test_determinist.py index 85e0816abea4002120dba6f61e6025bfdf6e4ddb..a330e73bbfc630255b1daff9acc843835c19c74c 100644 --- a/tests/test_determinist.py +++ b/tests/test_determinist.py @@ -1,165 +1,206 @@ import unittest import subprocess import numpy +from tempfile import NamedTemporaryFile +# path to input data files _obs = "./data/evald/obs.csv" _prd = "./data/evald/prd.csv" +_thr = "./data/evald/thr.csv" +_events = "high" _msk = "./data/evald/msk.csv" _cdt = "./data/evald/cdt.csv" +# list all available deterministic metrics +_all_metrics = ( + # errors-based + 'MAE', 'MARE', 'MSE', 'RMSE', + # efficiencies-based + 'NSE', 'KGE', 'KGE_D', 'KGEPRIME', 'KGEPRIME_D', + # contingency table-based + 'CONT_TBL' +) + +# list all available deterministic diagnostics +_all_diags = ( + 'completeness' +) + class TestMetrics(unittest.TestCase): - def test_metrics_console(self): - expected = { - 'RMSE': - "{{{ 777.034272}},\n" - " {{ 776.878479}},\n" - " {{ 777.800217}},\n" - " {{ 778.151082}},\n" - " {{ 778.61487 }}}\n", - 'NSE': - "{{{ 0.718912}},\n" - " {{ 0.719025}},\n" - " {{ 0.718358}},\n" - " {{ 0.718104}},\n" - " {{ 0.717767}}}\n", - 'KGE': - "{{{ 0.748088}},\n" - " {{ 0.746106}},\n" - " {{ 0.744111}},\n" - " {{ 0.743011}},\n" - " {{ 0.741768}}}\n", - 'KGEPRIME': - "{{{ 0.813141}},\n" - " {{ 0.812775}},\n" - " {{ 0.812032}},\n" - " {{ 0.811787}},\n" - " {{ 0.811387}}}\n" - } - - for metric in expected.keys(): - # compute each metric in turn with evalhyd evald - # and check console output - with self.subTest(metric=metric): - res = subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, metric], - stdout=subprocess.PIPE - ) - self.assertEqual( - res.stdout.decode('utf-8').replace('\r\n', '\n'), - expected[metric] - ) + expected = { + metric: ( + numpy.genfromtxt(f"./expected/evald/{metric}.csv", delimiter=',') + [:, numpy.newaxis, numpy.newaxis] + ) for metric in _all_metrics + } + # /!\ stacked-up thresholds in CSV file for CONT_TBL + # because 5D metric so need to reshape array + expected['CONT_TBL'] = ( + expected['CONT_TBL'].reshape(expected['NSE'].shape + (4, 4)) + ) def test_metrics_to_file(self): - expected = { - 'RMSE': - [[[777.03427238]], - [[776.87847854]], - [[777.80021654]], - [[778.15108180]], - [[778.61486998]]], - 'NSE': - [[[0.71891219]], - [[0.71902490]], - [[0.71835777]], - [[0.71810361]], - [[0.71776748]]], - 'KGE': - [[[0.74808767]], - [[0.74610620]], - [[0.74411103]], - [[0.74301085]], - [[0.74176777]]], - 'KGEPRIME': - [[[0.81314075]], - [[0.81277485]], - [[0.81203242]], - [[0.81178671]], - [[0.81138658]]] - } - # clean up outputs directory to make sure # it is checking newly created files subprocess.run(['rm -f ./outputs/*.csv'], shell=True) # compute all metrics with evalhyd evald subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, - *tuple(expected.keys()), + ['evalhyd', 'evald', _obs, _prd, + *tuple(self.expected.keys()), + '--q_thr', _thr, '--events', _events, '--to_file', '--out_dir', './outputs'] ) # read in and check data in CSV files - for metric in expected.keys(): + for metric in self.expected.keys(): res = numpy.genfromtxt( f"./outputs/evald_{metric}.csv", delimiter=',' - ).reshape(-1, 1, 1) + )[:, numpy.newaxis, numpy.newaxis] + if metric == 'CONT_TBL': + # /!\ stacked-up thresholds in CSV file for CONT_TBL + # because 5D metric so need to reshape array + res = res.reshape(self.expected['CONT_TBL'].shape) + with self.subTest(metric=metric): numpy.testing.assert_almost_equal( - res, expected[metric], - decimal=(3 if metric == "RMSE" else 6) + res, self.expected[metric], + decimal=(0 if metric in ("MSE") + else 3 if metric in ("RMSE", "MAE") + else 5) ) class TestTransform(unittest.TestCase): + obs = numpy.genfromtxt(_obs, delimiter=',')[numpy.newaxis, :] + prd = numpy.genfromtxt(_prd, delimiter=',')[:, :] + thr = numpy.genfromtxt(_thr, delimiter=',')[:, :] + def test_transform_sqrt(self): - self.assertEqual( - subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, 'NSE', - '--transform', 'sqrt'], - stdout=subprocess.PIPE - ).stdout.decode('utf-8').replace('\r\n', '\n'), - "{{{ 0.882817}},\n" - " {{ 0.883023}},\n" - " {{ 0.883019}},\n" - " {{ 0.883029}},\n" - " {{ 0.882972}}}\n" - ) + + obs_trf = NamedTemporaryFile() + numpy.savetxt(obs_trf.name, self.obs ** 0.5, delimiter=',') + prd_trf = NamedTemporaryFile() + numpy.savetxt(prd_trf.name, self.prd ** 0.5, delimiter=',') + thr_trf = NamedTemporaryFile() + numpy.savetxt(thr_trf.name, self.thr ** 0.5, delimiter=',') + + for metric in _all_metrics: + with self.subTest(metric=metric): + self.assertEqual( + subprocess.run( + ['evalhyd', 'evald', _obs, _prd, metric, + '--transform', 'sqrt', + '--q_thr', _thr, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8'), + subprocess.run( + ['evalhyd', 'evald', obs_trf.name, prd_trf.name, metric, + '--q_thr', thr_trf.name, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + ) + + obs_trf.close() + prd_trf.close() + thr_trf.close() def test_transform_inv(self): - self.assertEqual( - subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, 'NSE', - '--transform', 'inv'], - stdout=subprocess.PIPE - ).stdout.decode('utf-8').replace('\r\n', '\n'), - "{{{ 0.737323}},\n" - " {{ 0.737404}},\n" - " {{ 0.737429}},\n" - " {{ 0.737546}},\n" - " {{ 0.737595}}}\n" - ) + + eps = 0.01 * numpy.mean(self.obs) + + obs_trf = NamedTemporaryFile() + numpy.savetxt(obs_trf.name, 1 / (self.obs + eps), delimiter=',') + prd_trf = NamedTemporaryFile() + numpy.savetxt(prd_trf.name, 1 / (self.prd + eps), delimiter=',') + thr_trf = NamedTemporaryFile() + numpy.savetxt(thr_trf.name, 1 / (self.thr + eps), delimiter=',') + + for metric in _all_metrics: + with self.subTest(metric=metric): + self.assertEqual( + subprocess.run( + ['evalhyd', 'evald', _obs, _prd, metric, + '--transform', 'inv', + '--q_thr', _thr, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8'), + subprocess.run( + ['evalhyd', 'evald', + obs_trf.name, prd_trf.name, metric, + '--q_thr', thr_trf.name, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + ) + + obs_trf.close() + prd_trf.close() + thr_trf.close() def test_transform_log(self): - self.assertEqual( - subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, 'NSE', - '--transform', 'log'], - stdout=subprocess.PIPE - ).stdout.decode('utf-8').replace('\r\n', '\n'), - "{{{ 0.893344}},\n" - " {{ 0.893523}},\n" - " {{ 0.893585}},\n" - " {{ 0.893758}},\n" - " {{ 0.893793}}}\n" - ) + + eps = 0.01 * numpy.mean(self.obs) + + obs_trf = NamedTemporaryFile() + numpy.savetxt(obs_trf.name, numpy.log(self.obs + eps), delimiter=',') + prd_trf = NamedTemporaryFile() + numpy.savetxt(prd_trf.name, numpy.log(self.prd + eps), delimiter=',') + thr_trf = NamedTemporaryFile() + numpy.savetxt(thr_trf.name, numpy.log(self.thr + eps), delimiter=',') + + for metric in _all_metrics: + with self.subTest(metric=metric): + self.assertEqual( + subprocess.run( + ['evalhyd', 'evald', _obs, _prd, metric, + '--transform', 'log', + '--q_thr', _thr, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8'), + subprocess.run( + ['evalhyd', 'evald', + obs_trf.name, prd_trf.name, metric, + '--q_thr', thr_trf.name, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + ) + + obs_trf.close() + prd_trf.close() + thr_trf.close() def test_transform_pow(self): - self.assertEqual( - subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, 'NSE', - '--transform', 'pow', '--exponent', '0.3'], - stdout=subprocess.PIPE - ).stdout.decode('utf-8').replace('\r\n', '\n'), - "{{{ 0.898006}},\n" - " {{ 0.8982 }},\n" - " {{ 0.898246}},\n" - " {{ 0.89834 }},\n" - " {{ 0.898331}}}\n" - ) + + obs_trf = NamedTemporaryFile() + numpy.savetxt(obs_trf.name, self.obs ** 0.3, delimiter=',') + prd_trf = NamedTemporaryFile() + numpy.savetxt(prd_trf.name, self.prd ** 0.3, delimiter=',') + thr_trf = NamedTemporaryFile() + numpy.savetxt(thr_trf.name, self.thr ** 0.3, delimiter=',') + + for metric in _all_metrics: + with self.subTest(metric=metric): + self.assertEqual( + subprocess.run( + ['evalhyd', 'evald', _obs, _prd, metric, + '--transform', 'pow', '--exponent', '0.3', + '--q_thr', _thr, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8'), + subprocess.run( + ['evalhyd', 'evald', obs_trf.name, prd_trf.name, metric, + '--q_thr', thr_trf.name, '--events', _events], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + ) + + obs_trf.close() + prd_trf.close() + thr_trf.close() class TestMasking(unittest.TestCase): @@ -167,12 +208,14 @@ class TestMasking(unittest.TestCase): def test_masks_vs_conditions(self): self.assertEqual( subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, "NSE", + ['evalhyd', 'evald', _obs, _prd, *_all_metrics, + '--q_thr', _thr, '--events', _events, '--t_msk', _msk], stdout=subprocess.PIPE ).stdout.decode('utf-8'), subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, "NSE", + ['evalhyd', 'evald', _obs, _prd, *_all_metrics, + '--q_thr', _thr, '--events', _events, '--m_cdt', _cdt], stdout=subprocess.PIPE ).stdout.decode('utf-8') @@ -185,14 +228,15 @@ class TestInterface(unittest.TestCase): self.assertEqual( # passing command arguments inline subprocess.run( - ['../build/evalhyd', 'evald', _obs, _prd, - 'NSE', 'RMSE', 'KGE', 'KGEPRIME', - '--transform', 'pow', '--exponent', '0.3'], + ['evalhyd', 'evald', _obs, _prd, + *_all_metrics, + '--transform', 'pow', '--exponent', '0.3', + '--q_thr', _thr, '--events', _events], stdout=subprocess.PIPE ).stdout.decode('utf-8'), # passing command arguments via TOML config file subprocess.run( - ['../build/evalhyd', '--config', './config/evald.toml', 'evald'], + ['evalhyd', '--config', './config/evald.toml', 'evald'], stdout=subprocess.PIPE ).stdout.decode('utf-8') ) @@ -201,31 +245,89 @@ class TestInterface(unittest.TestCase): class TestUncertainty(unittest.TestCase): def test_bootstrap(self): - for metric in ('NSE', 'RMSE', 'KGE', 'KGEPRIME'): + for metric in _all_metrics: # compute each metric in turn with evalhyd evald # and check console output with self.subTest(metric=metric): self.assertEqual( # use one year of data through the year block bootstrapping subprocess.run( - ['../build/evalhyd', 'evald', + ['evalhyd', 'evald', './data/evald/obs_1yr.csv', './data/evald/prd_1yr.csv', metric, + '--q_thr', './data/evald/thr_1yr_3yrs.csv', + '--events', _events, '--bootstrap', 'n_samples', '1', 'len_sample', '3', 'summary', '0', '--dts', './data/evald/dts.csv'], stdout=subprocess.PIPE ).stdout.decode('utf-8'), # use three years of data (same year repeated three times) subprocess.run( - ['../build/evalhyd', 'evald', + ['evalhyd', 'evald', './data/evald/obs_3yrs.csv', './data/evald/prd_3yrs.csv', - metric], + metric, + '--q_thr', './data/evald/thr_1yr_3yrs.csv', + '--events', _events], stdout=subprocess.PIPE ).stdout.decode('utf-8') ) +class TestDiagnostics(unittest.TestCase): + + def test_completeness(self): + obs = numpy.array( + [[4.7, 4.3, numpy.nan, 2.7, 4.1, 5.0]] + ) + obs_file = NamedTemporaryFile() + numpy.savetxt(obs_file.name, obs, delimiter=',') + + prd = numpy.array( + [[5.3, numpy.nan, 5.7, 2.3, 3.3, 4.1], + [4.3, 4.2, 4.7, 4.3, 3.3, 2.8], + [5.3, numpy.nan, 5.7, 2.3, 3.8, numpy.nan]] + ) + prd_file = NamedTemporaryFile() + numpy.savetxt(prd_file.name, prd, delimiter=',') + + msk = numpy.array( + [[[True, True, True, False, True, True], + [True, True, True, True, True, True]], + [[True, True, True, True, True, False], + [True, True, True, True, True, True]], + [[True, True, True, False, False, True], + [True, True, True, True, True, True]]] + ) + msk_file = NamedTemporaryFile() + numpy.savetxt(msk_file.name, msk.reshape(-1, 6), delimiter=',') + + exp = ("{{{ 0.776745},\n" + " { 0.701783}},\n" + " {{ 0.917878},\n" + " { 1.281405}},\n" + " {{ 0.6 },\n" + " { 0.450925}}}\n" + "{{{ 3.},\n" + " { 4.}},\n" + " {{ 4.},\n" + " { 5.}},\n" + " {{ 1.},\n" + " { 3.}}}\n") + + res = subprocess.run( + ['evalhyd', 'evald', obs_file.name, prd_file.name, 'RMSE', + '--t_msk', msk_file.name, '--diagnostics', 'completeness'], + stdout=subprocess.PIPE + ).stdout.decode('utf-8').replace('\r\n', '\n') + + obs_file.close() + prd_file.close() + msk_file.close() + + self.assertEqual(res, exp) + + if __name__ == '__main__': test_loader = unittest.TestLoader() test_suite = unittest.TestSuite() diff --git a/tests/test_probabilist.py b/tests/test_probabilist.py index fbe91d7cb5868db50aa90d017284b70236c87ec4..2c128fe910cf5efd249ab4722472ca4cf6464027 100644 --- a/tests/test_probabilist.py +++ b/tests/test_probabilist.py @@ -1,404 +1,295 @@ import unittest import subprocess import numpy +import os +import tempfile _obs = "./data/evalp/obs" _prd = "./data/evalp/prd" _thr = "./data/evalp/thr" +_events = "high" +_lvl = ("30.", "80.") _msk = "./data/evalp/msk" _cdt = "./data/evalp/cdt" +# list all available probabilistic metrics +_all_metrics = ( + # threshold-based + 'BS', 'BSS', 'BS_CRD', 'BS_LBD', 'REL_DIAG', 'CRPS_FROM_BS', + # CDF-based + 'CRPS_FROM_ECDF', + # quantile-based + 'QS', 'CRPS_FROM_QS', + # contingency table-based + 'POD', 'POFD', 'FAR', 'CSI', 'ROCSS', + # ranks-based + 'RANK_HIST', 'DS', 'AS', + # intervals-based + 'CR', 'AW', 'AWN', 'AWI', 'WS', 'WSS', + # multivariate + 'ES' +) + +# list all available deterministic diagnostics +_all_diags = ( + 'completeness' +) + class TestMetrics(unittest.TestCase): - def test_metrics_console(self): - expected_thr = { - 'BS': - "{{{{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}},\n" - " {{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}}},\n" - " {{{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}},\n" - " {{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}}},\n" - " {{{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}},\n" - " {{{ 0.155722, 0.108492, 0.127175, nan}},\n" - " {{ 0.106151, 0.073956, 0.086692, nan}}}}}\n", - 'BSS': - "{{{{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}},\n" - " {{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}}},\n" - " {{{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}},\n" - " {{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}}},\n" - " {{{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}},\n" - " {{{ 0.310262, 0.565683, 0.470517, nan}},\n" - " {{ 0.570559, 0.666117, 0.563513, nan}}}}}\n", - 'BS_CRD': - "{{{{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}}},\n" - " {{{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}}},\n" - " {{{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02918 , 0.099228, 0.22577 },\n" - " { 0.012329, 0.153636, 0.2498 },\n" - " { 0.020892, 0.133905, 0.240188},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.011412, 0.152446, 0.247185},\n" - " { 0.005532, 0.153079, 0.221503},\n" - " { 0.010139, 0.12206 , 0.198613},\n" - " { nan, nan, nan}}}}}}\n", - 'BS_LBD': - "{{{{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}}},\n" - " {{{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}}},\n" - " {{{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}},\n" - " {{{{ 0.02521 , 0.101229, 0.231742},\n" - " { 0.013101, 0.152284, 0.247676},\n" - " { 0.025801, 0.119668, 0.221042},\n" - " { nan, nan, nan}}},\n" - " {{{ 0.01216 , 0.150623, 0.244615},\n" - " { 0.008032, 0.147387, 0.213311},\n" - " { 0.017191, 0.104822, 0.174323},\n" - " { nan, nan, nan}}}}}}\n", - } - - expected_qtl = { - 'QS': - "{{{{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}},\n" - " {{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}}},\n" - " {{{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}},\n" - " {{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}}},\n" - " {{{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}},\n" - " {{{ 186.522315, 185.729318, 184.84434 , 183.94775 , 182.969521, \n" - " 182.018142, 181.104318, 180.066763, 179.064042, 178.018868, \n" - " 176.941038, 175.873004, 174.889151, 173.889332, 172.853411, \n" - " 171.785196, 170.740385, 169.708273, 168.643868, 167.633527, \n" - " 166.570755, 165.447388, 164.362119, 163.260522, 162.157656, \n" - " 161.080189, 159.896771, 158.75762 , 157.596335, 156.528302, \n" - " 155.366836, 154.128447, 152.906205, 151.733309, 150.536103, \n" - " 149.269956, 148.069848, 146.822932, 145.643868, 144.381713, \n" - " 143.009978, 141.488752, 140.046807, 138.645138, 137.276125, \n" - " 135.864296, 134.308599, 132.50508 , 130.511248, 127.78193 , \n" - " 124.049891}},\n" - " {{ 345.91578 , 345.069256, 343.129359, 340.709869, 338.281598, \n" - " 335.973535, 333.555157, 330.332426, 327.333539, 324.325996, \n" - " 321.190082, 318.175117, 315.122186, 311.97205 , 308.644942, \n" - " 305.612169, 302.169552, 298.445956, 294.974648, 291.273807, \n" - " 287.724586, 284.101905, 280.235592, 276.21865 , 272.501484, \n" - " 268.652733, 264.740168, 260.8558 , 256.90329 , 252.926292, \n" - " 248.931239, 244.986396, 240.662998, 236.328964, 232.089785, \n" - " 227.387089, 222.976008, 218.699975, 214.099678, 209.67252 , \n" - " 205.189587, 200.395746, 195.2372 , 190.080139, 185.384244, \n" - " 180.617858, 174.58323 , 169.154093, 163.110932, 156.274796, \n" - " 147.575315}}}}}\n", - 'CRPS': - "{{{{ 153.691561},\n" - " { 252.956919}},\n" - " {{ 153.691561},\n" - " { 252.956919}}},\n" - " {{{ 153.691561},\n" - " { 252.956919}},\n" - " {{ 153.691561},\n" - " { 252.956919}}},\n" - " {{{ 153.691561},\n" - " { 252.956919}},\n" - " {{ 153.691561},\n" - " { 252.956919}}}}\n" - } - - # compute each metric in turn with evalhyd evald - # and check console output - for metric in expected_thr.keys(): - with self.subTest(metric=metric): - res = subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, metric, - '--q_thr', _thr, '--t_msk', _msk], - stdout=subprocess.PIPE - ) - self.assertEqual( - res.stdout.decode('utf-8').replace('\r\n', '\n'), - expected_thr[metric] - ) + expected_thr = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('BS', 'BSS', 'BS_CRD', 'BS_LBD', 'REL_DIAG', 'CRPS_FROM_BS') + } + # /!\ stacked-up thresholds in CSV file for REL_DIAG + # because 7D metric so need to reshape array + expected_thr['REL_DIAG'] = ( + expected_thr['REL_DIAG'].reshape(expected_thr['BS'].shape + (52, 3)) + ) - for metric in expected_qtl.keys(): - with self.subTest(metric=metric): - res = subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, metric, - '--t_msk', _msk], - stdout=subprocess.PIPE - ) - self.assertEqual( - res.stdout.decode('utf-8').replace('\r\n', '\n'), - expected_qtl[metric] + expected_qtl = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('QS', 'CRPS_FROM_QS') + } + + expected_ct = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('POD', 'POFD', 'FAR', 'CSI', 'ROCSS') + } + + expected_rk = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('RANK_HIST', 'DS', 'AS') + } + + expected_itv = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('CR', 'AW', 'AWN', 'AWI', 'WS', 'WSS') + } + + expected_mvr = { + metric: ( + numpy.genfromtxt(f"./expected/evalp/{metric}.csv", delimiter=',') + [numpy.newaxis, numpy.newaxis, numpy.newaxis, numpy.newaxis, ...] + ) for metric in ('ES',) + } + + def test_thresholds_metrics_to_file(self): + # clean up outputs directory to make sure + # it is checking newly created files + subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) + + # compute all metrics with evalhyd evald + subprocess.run( + ['evalhyd', 'evalp', _obs, _prd, + *tuple(self.expected_thr.keys()), + '--q_thr', _thr, '--events', 'high', + '--to_file', '--out_dir', './outputs'] + ) + + # read in and check data in CSV files + for metric in self.expected_thr.keys(): + for lt in ['leadtime_1', 'leadtime_2']: + for st in ['site_a', 'site_b', 'site_c']: + res = numpy.genfromtxt( + f"./outputs/{lt}/{st}_{metric}.csv", delimiter=',' + ) + if metric == 'REL_DIAG': + # /!\ stacked-up thresholds in CSV file for REL_DIAG + # because 7D metric so need to reshape array + res = res.reshape(self.expected_thr['REL_DIAG'].shape[4:]) + + with self.subTest(metric=metric, leadtime=lt, site=st): + numpy.testing.assert_almost_equal( + res, self.expected_thr[metric][0, 0, 0, 0], + decimal=(3 if metric == 'CRPS_FROM_BS' else 6) + ) + + def test_quantiles_metrics_to_file(self): + # clean up outputs directory to make sure + # it is checking newly created files + subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) + + # compute all metrics with evalhyd evald + subprocess.run( + ['evalhyd', 'evalp', _obs, _prd, + *tuple(self.expected_qtl.keys()), + '--to_file', '--out_dir', './outputs'] + ) + + # read in and check data in CSV files + for metric in self.expected_qtl.keys(): + for lt in ['leadtime_1', 'leadtime_2']: + for st in ['site_a', 'site_b', 'site_c']: + res = numpy.genfromtxt( + f"./outputs/{lt}/{st}_{metric}.csv", delimiter=',' + ) + + with self.subTest(metric=metric, leadtime=lt, site=st): + numpy.testing.assert_almost_equal( + res, self.expected_qtl[metric][0, 0, 0, 0], + decimal=3 + ) + + def test_contingency_table_metrics_to_file(self): + # clean up outputs directory to make sure + # it is checking newly created files + subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) + + # compute all metrics with evalhyd evald + subprocess.run( + ['evalhyd', 'evalp', _obs, _prd, + *tuple(self.expected_ct.keys()), + '--q_thr', _thr, '--events', 'low', + '--to_file', '--out_dir', './outputs'] + ) + + # read in and check data in CSV files + for metric in self.expected_ct.keys(): + for lt in ['leadtime_1', 'leadtime_2']: + for st in ['site_a', 'site_b', 'site_c']: + res = numpy.genfromtxt( + f"./outputs/{lt}/{st}_{metric}.csv", delimiter=',' + ) + + with self.subTest(metric=metric, leadtime=lt, site=st): + numpy.testing.assert_almost_equal( + res, self.expected_ct[metric][0, 0, 0, 0], + decimal=6 + ) + + def test_ranks_metrics_to_file(self): + # subset input data set to include only one site and one lead time + # because due the random nature of the ranks-base metrics, the problem + # shape has an impact on the random tensor generated, and expected + # output files are based on a mono-site mono-leadtime problem + with tempfile.TemporaryDirectory() as tmp_dir: + obs = os.path.join(tmp_dir, 'obs') + prd = os.path.join(tmp_dir, 'prd') + if not os.path.exists(obs): + os.makedirs(obs) + if not os.path.exists(os.path.join(prd, 'leadtime_1')): + os.makedirs(os.path.join(prd, 'leadtime_1')) + + numpy.savetxt( + os.path.join(obs, 'site_a.csv'), + numpy.genfromtxt( + os.path.join(_obs, 'site_a.csv'), delimiter=',' + )[numpy.newaxis, :], + delimiter=',' + ) + numpy.savetxt( + os.path.join(prd, 'leadtime_1', 'site_a.csv'), + numpy.genfromtxt( + os.path.join(_prd, 'leadtime_1', 'site_a.csv'), delimiter=',' + )[:, :], + delimiter=',' + ) + + # clean up outputs directory to make sure + # it is checking newly created files + subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) + + # compute all metrics with evalhyd evald + subprocess.run( + ['evalhyd', 'evalp', obs, prd, + *tuple(self.expected_rk.keys()), + '--seed', '7', '--to_file', '--out_dir', './outputs'] + ) + + # read in and check data in CSV files + for metric in self.expected_rk.keys(): + res = numpy.genfromtxt( + f"./outputs/leadtime_1/site_a_{metric}.csv", delimiter=',' ) - def test_metrics_to_file(self): - expected = { - 'BS': - [[0.155722, 0.108492, 0.127175, numpy.nan], - [0.106151, 0.0739562, 0.0866919, numpy.nan]], - 'BSS': - [[0.310262, 0.565683, 0.470517, numpy.nan], - [0.570559, 0.666117, 0.563513, numpy.nan]], - 'BS_CRD': - [[0.0291803, 0.0992281, 0.22577], - [0.0123289, 0.153636, 0.2498], - [0.0208921, 0.133905, 0.240188], - [numpy.nan, numpy.nan, numpy.nan], - [0.0114118, 0.152446, 0.247185], - [0.00553241, 0.153079, 0.221503], - [0.0101394, 0.12206, 0.198613], - [numpy.nan, numpy.nan, numpy.nan]], - 'BS_LBD': - [[0.0252098, 0.101229, 0.231742], - [0.0131006, 0.152284, 0.247676], - [0.0258012, 0.119668, 0.221042], - [numpy.nan, numpy.nan, numpy.nan], - [0.0121599, 0.150623, 0.244615], - [0.00803175, 0.147387, 0.213311], - [0.0171913, 0.104822, 0.174323], - [numpy.nan, numpy.nan, numpy.nan]], - 'QS': - [[186.522, 185.729, 184.844, 183.948, 182.97, 182.018, 181.104, - 180.067, 179.064, 178.019, 176.941, 175.873, 174.889, 173.889, - 172.853, 171.785, 170.74, 169.708, 168.644, 167.634, 166.571, - 165.447, 164.362, 163.261, 162.158, 161.08, 159.897, 158.758, - 157.596, 156.528, 155.367, 154.128, 152.906, 151.733, 150.536, - 149.27, 148.07, 146.823, 145.644, 144.382, 143.01, 141.489, - 140.047, 138.645, 137.276, 135.864, 134.309, 132.505, 130.511, - 127.782, 124.05], - [345.916, 345.069, 343.129, 340.71, 338.282, 335.974, 333.555, - 330.332, 327.334, 324.326, 321.19, 318.175, 315.122, 311.972, - 308.645, 305.612, 302.17, 298.446, 294.975, 291.274, 287.725, - 284.102, 280.236, 276.219, 272.501, 268.653, 264.74, 260.856, - 256.903, 252.926, 248.931, 244.986, 240.663, 236.329, 232.09, - 227.387, 222.976, 218.7, 214.1, 209.673, 205.19, 200.396, - 195.237, 190.08, 185.384, 180.618, 174.583, 169.154, 163.111, - 156.275, 147.575]], - 'CRPS': - [153.692, 252.957] - } + with self.subTest(metric=metric): + numpy.testing.assert_almost_equal( + res, self.expected_rk[metric][0, 0, 0, 0], + decimal=(2 if metric == 'DS' else 6) + ) + def test_intervals_metrics_to_file(self): # clean up outputs directory to make sure # it is checking newly created files subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) # compute all metrics with evalhyd evald subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, - *tuple(expected.keys()), '--q_thr', _thr, '--t_msk', _msk, + ['evalhyd', 'evalp', _obs, _prd, + *tuple(self.expected_itv.keys()), + '--c_lvl', *_lvl, '--to_file', '--out_dir', './outputs'] ) # read in and check data in CSV files - for metric in expected.keys(): + for metric in self.expected_itv.keys(): for lt in ['leadtime_1', 'leadtime_2']: for st in ['site_a', 'site_b', 'site_c']: res = numpy.genfromtxt( f"./outputs/{lt}/{st}_{metric}.csv", delimiter=',' ) + with self.subTest(metric=metric, leadtime=lt, site=st): numpy.testing.assert_almost_equal( - res, expected[metric], - decimal=(3 if metric in ("QS", "CRPS") else 6) + res, self.expected_itv[metric][0, 0, 0, 0], + decimal=(2 if metric == 'WS' else + 4 if metric == 'AW' else + 6) ) + def test_multivariate_metrics_to_file(self): + # clean up outputs directory to make sure + # it is checking newly created files + subprocess.run(['rm -rf ./outputs/*/*.csv'], shell=True) + + # compute all metrics with evalhyd evald + subprocess.run( + ['evalhyd', 'evalp', _obs, _prd, + *tuple(self.expected_mvr.keys()), + '--to_file', '--out_dir', './outputs'] + ) + + # read in and check data in CSV files + for metric in self.expected_mvr.keys(): + for lt in ['leadtime_1', 'leadtime_2']: + res = numpy.genfromtxt( + f"./outputs/{lt}/multisite_{metric}.csv", delimiter=',' + ) + + with self.subTest(metric=metric, leadtime=lt): + numpy.testing.assert_almost_equal( + res, self.expected_mvr[metric][0, 0, 0, 0], + decimal=(3 if metric == 'ES' else 6) + ) + class TestMasking(unittest.TestCase): def test_masks_vs_conditions(self): self.assertEqual( subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, "BS", - '--q_thr', _thr, '--t_msk', _msk], + ['evalhyd', 'evalp', _obs, _prd, *_all_metrics, + '--q_thr', _thr, '--events', _events, '--c_lvl', *_lvl, + '--seed', '7', '--t_msk', _msk], stdout=subprocess.PIPE ).stdout.decode('utf-8'), subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, "BS", - '--q_thr', _thr, '--m_cdt', _cdt], + ['evalhyd', 'evalp', _obs, _prd, *_all_metrics, + '--q_thr', _thr, '--events', _events, '--c_lvl', *_lvl, + '--seed', '7', '--m_cdt', _cdt], stdout=subprocess.PIPE ).stdout.decode('utf-8') ) @@ -410,14 +301,16 @@ class TestInterface(unittest.TestCase): self.assertEqual( # passing command arguments inline subprocess.run( - ['../build/evalhyd', 'evalp', _obs, _prd, - "BS", "BSS", "BS_CRD", "BS_LBD", "QS", "CRPS", - '--q_thr', _thr, '--t_msk', _msk], + ['evalhyd', 'evalp', _obs, _prd, + *_all_metrics, + '--q_thr', _thr, '--events', _events, + '--c_lvl', *_lvl, '--seed', '7', + '--t_msk', _msk], stdout=subprocess.PIPE ).stdout.decode('utf-8'), # passing command arguments via TOML config file subprocess.run( - ['../build/evalhyd', '--config', './config/evalp.toml', 'evalp'], + ['evalhyd', '--config', './config/evalp.toml', 'evalp'], stdout=subprocess.PIPE ).stdout.decode('utf-8') ) @@ -426,31 +319,107 @@ class TestInterface(unittest.TestCase): class TestUncertainty(unittest.TestCase): def test_bootstrap(self): - for metric in ("BS", "BSS", "BS_CRD", "BS_LBD", "QS", "CRPS"): + for metric in _all_metrics: # compute each metric in turn with evalhyd evald # and check console output with self.subTest(metric=metric): + # skip ranks-based metrics because they contain a random element + if metric in ("RANK_HIST", "DS", "AS"): + continue + self.assertEqual( # use one year of data through the year block bootstrapping subprocess.run( - ['../build/evalhyd', 'evalp', + ['evalhyd', 'evalp', './data/evalp/obs_1yr', './data/evalp/prd_1yr', - metric, '--q_thr', _thr, + metric, '--q_thr', _thr, '--events', _events, + '--c_lvl', *_lvl, '--bootstrap', 'n_samples', '1', 'len_sample', '3', 'summary', '0', '--dts', './data/evalp/dts.csv'], stdout=subprocess.PIPE ).stdout.decode('utf-8'), # use three years of data (same year repeated three times) subprocess.run( - ['../build/evalhyd', 'evalp', + ['evalhyd', 'evalp', './data/evalp/obs_3yrs', './data/evalp/prd_3yrs', - metric, '--q_thr', _thr], + metric, '--q_thr', _thr, '--events', _events, + '--c_lvl', *_lvl], stdout=subprocess.PIPE ).stdout.decode('utf-8') ) +class TestDiagnostics(unittest.TestCase): + + def test_completeness(self): + obs = numpy.array( + [[4.7, 4.3, numpy.nan, 2.7, 4.1, 5.0]] + ) + + prd = numpy.array( + [[[[5.3, numpy.nan, 5.7, 2.3, 3.3, numpy.nan], + [4.3, numpy.nan, 4.7, 4.3, 3.4, numpy.nan], + [5.3, numpy.nan, 5.7, 2.3, 3.8, numpy.nan]], + [[numpy.nan, 4.2, 5.7, 2.3, 3.1, 4.1], + [numpy.nan, 4.2, 4.7, 4.3, 3.3, 2.8], + [numpy.nan, 5.2, 5.7, 2.3, 3.9, 3.5]]]] + ) + + msk = numpy.array( + [[[[True, True, True, False, True, True], + [True, True, True, True, True, True]], + [[True, True, True, True, True, False], + [True, True, True, True, True, True]]]] + ) + + with tempfile.TemporaryDirectory() as tmp_dir: + obs_dir = os.path.join(tmp_dir, 'obs') + if not os.path.exists(obs_dir): + os.makedirs(obs_dir) + numpy.savetxt( + os.path.join(obs_dir, 'site_a.csv'), + obs, + delimiter=',' + ) + + prd_dir = os.path.join(tmp_dir, 'prd') + msk_dir = os.path.join(tmp_dir, 'msk') + for n in [1, 2]: + if not os.path.exists(os.path.join(prd_dir, f'leadtime_{n}')): + os.makedirs(os.path.join(prd_dir, f'leadtime_{n}')) + if not os.path.exists(os.path.join(msk_dir, f'leadtime_{n}')): + os.makedirs(os.path.join(msk_dir, f'leadtime_{n}')) + + numpy.savetxt( + os.path.join(prd_dir, f'leadtime_{n}', 'site_a.csv'), + prd[0, n-1], + delimiter=',' + ) + numpy.savetxt( + os.path.join(msk_dir, f'leadtime_{n}', 'site_a.csv'), + msk[0, n-1], + delimiter=',' + ) + + exp = ("{{{{ 0.246875},\n" + " { 0.239583}},\n" + " {{ 0.204167},\n" + " { 0.323437}}}}\n" + "{{{{ 2.},\n" + " { 3.}},\n" + " {{ 3.},\n" + " { 4.}}}}\n") + + res = subprocess.run( + ['evalhyd', 'evalp', obs_dir, prd_dir, 'CRPS_FROM_QS', + '--t_msk', msk_dir, '--diagnostics', 'completeness'], + stdout=subprocess.PIPE + ).stdout.decode('utf-8').replace('\r\n', '\n') + + self.assertEqual(res, exp) + + if __name__ == '__main__': test_loader = unittest.TestLoader() test_suite = unittest.TestSuite() @@ -467,6 +436,9 @@ if __name__ == '__main__': test_suite.addTests( test_loader.loadTestsFromTestCase(TestUncertainty) ) + test_suite.addTests( + test_loader.loadTestsFromTestCase(TestDiagnostics) + ) runner = unittest.TextTestRunner(verbosity=2) result = runner.run(test_suite)