pax_global_header00006660000000000000000000000064150550007210014505gustar00rootroot0000000000000052 comment=f82ea99ccf42b66db5463919f66e31d12bec6e76 scotchpy/000077500000000000000000000000001505500072100127055ustar00rootroot00000000000000scotchpy/.gitignore000066400000000000000000000001351505500072100146740ustar00rootroot00000000000000*__pycache__* doc/build build/ dist/ scotchpy.egg-info/ tags *.so .eggs/ *whl pyproject.toml scotchpy/CMakeLists.txt000066400000000000000000000037771505500072100154630ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.17) project(${SKBUILD_PROJECT_NAME} VERSION 0.1 DESCRIPTION "Python interface to the Scotch/Pt-Scotch partitioning library" LANGUAGES C ) # Add path of the custom module list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(getLocalConfig) if(PIP_BUILD_SCOTCH) include(FetchContent) FetchContent_Declare( scotch GIT_REPOSITORY https://gitlab.inria.fr/scotch/scotch.git GIT_TAG v7.0.9 CMAKE_ARGS -DBUILD_SHARED_LIBS=ON -DBUILD_PTSCOTCH=${BUILD_PTSCOTCH} PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_SOURCE_DIR}/fixFetchAndSupressExec.patch) FetchContent_MakeAvailable(scotch) install(TARGETS scotch DESTINATION scotchpy) if(BUILD_PTSCOTCH) install(TARGETS ptscotch DESTINATION scotchpy) endif(BUILD_PTSCOTCH) endif(PIP_BUILD_SCOTCH) # Build the extension find_package(Python REQUIRED COMPONENTS Interpreter Development.Module) set(CMAKE_POSITION_INDEPENDENT_CODE ON) python_add_library(scotchpy_err MODULE "${CMAKE_CURRENT_SOURCE_DIR}/src/scotchpy_err.c" WITH_SOABI) install(TARGETS scotchpy_err DESTINATION scotchpy) if (BUILD_PTSCOTCH) find_package(MPI COMPONENTS C REQUIRED) # build the ptscotch extension python_add_library(libptscotch_mpi4py MODULE "${CMAKE_CURRENT_SOURCE_DIR}/src/libptscotch_mpi4py.c" WITH_SOABI) if(PIP_BUILD_PTSCOTCH) get_target_property(_INCLUDES ptscotch INTERFACE_INCLUDE_DIRECTORIES) add_dependencies(libptscotch_mpi4py ptscotch) else() add_library(ptscotch UNKNOWN IMPORTED) set_target_properties(ptscotch PROPERTIES IMPORTED_LOCATION ${PTSCOTCH_LIB}) endif() if(DEFINED ENV{SCOTCHPY_SCOTCH}) set(_INCLUDES "$ENV{SCOTCHPY_SCOTCH}/../include" ${_INCLUDES}) endif() if(PIP_BUILD_SCOTCH) add_dependencies(libptscotch_mpi4py scotch) endif() target_include_directories(libptscotch_mpi4py PRIVATE ${_INCLUDES}) target_link_libraries(libptscotch_mpi4py PRIVATE ptscotch MPI::MPI_C) install(TARGETS libptscotch_mpi4py DESTINATION scotchpy) endif(BUILD_PTSCOTCH) scotchpy/LICENSE.txt000066400000000000000000000024151505500072100145320ustar00rootroot00000000000000Copyright 2020-2025 Inria & Université de Bordeaux Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. scotchpy/README.md000066400000000000000000000112531505500072100141660ustar00rootroot00000000000000# `ScotchPy` This project provides a `Python3` interface for the [Scotch graph partitioning library](https://gitlab.inria.fr/scotch/scotch) [![pipeline status](https://gitlab.inria.fr/ppavia/scotchpy/badges/main/pipeline.svg)](https://gitlab.inria.fr/ppavia/scotchpy/-/commits/main) [![Developer documentation](https://img.shields.io/badge/docs-stable-blue.svg)](https://ppavia.gitlabpages.inria.fr/scotchpy/html) ## Requirements - `Python >= 3.10` - `NumPy`, to handle integer arrays - `pytest`, to test the `ScotchPy` module - Optional : - `mpi4py`, to use the features of PT-ScotchPy - `Sphinx`, to build the documentation - `networkx` and `matplotlib`, to view some examples - A recent *DYNAMIC/SHARED* `Scotch` library (>=`v7.0.9`), if you do not have access to the Internet ## Configuring, compiling and testing `ScotchPy` ### Configure Before using `pip` you need to generate the `pyproject.toml` and select which version of the package you need: - integer size (32/64) -> `export INTSIZE=64,` for instance - ptscotch -> `export PTSCOTCH=ON` ```bash ./configure ``` At the time being, the scotchpy package supports 4 configurations: | config | INTSIZE=32 | INTSIZE=64 | |------------|------------|--------------| | sequential | scotchpy | scotchpy64 | | parallel | ptscotchpy | ptscotchpy64 | Before using `pip` you need to generate the `pyproject.toml` and select which version of the package you need: - integer size (32/64) -> `export INTSIZE=64,` for instance - ptscotch -> `export PTSCOTCH=1` ```bash ./configure ``` We *strongly* recommand to have the same integer size for scotch than the `numpy.dtype`. ### If you already have a Scotch library >= 7.0.8 installed on your system ```bash virtualenv /some/path SCOTCHPY_SCOTCH="dir/containing/the/lib" /some/path/bin/pip -v install . export SCOTCHPY_ERR=${$(find /some/path/lib/ -name "*scotchpy_err*.so"):h} SCOTCHPY_SCOTCH="dir/containing/the/lib" /some/path/bin/python -m pytest ``` ### Scotch library older than 7.0.9 or not available The building system (`scikit-build-core`) will download sources from the Internet and compile it for you. ```bash virtualenv /some/path /some/path/bin/pip -v install . # This step uses scikit-build-core /some/path/bin/python -m pytest ``` ## Using a binary wheel from the Internet (*experimental*, only for Linux and sequential version at the time being) ```bash virtualenv /tmp/test_sotchpy /tmp/test_sotchpy/bin/pip install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple scotchpy64==1.0.1 /tmp/test_sotchpy/bin/python -c 'import scotchpy; print(scotchpy.num_sizeof())' ``` ## Testing `ScotchPy` To use `ScotchPy` locally, you can run some examples like `load_part.py` provided below: ```python import scotchpy import scotchpy from scotchpy.common import proper_int as scotch_num import importlib.resources as resources import os # Allocate a graph graf = scotchpy.Graph() # Read a graph from the scotchpy/data dir data_dir = resources.files("scotchpy").joinpath("data") graf.load(os.path.join(data_dir, "m4x4.grf")) # Partition a graph into 4 parts parttab = np.zeros(graf.vertnbr, dtype=scotch_num) graf.part(partnbr = 4, parttab = parttab) # Export the graph to the dot format if scotchpy.graph._nx_found: import networkx as nx graf_nx = graf.tonx() color = { 0:"red" , 1:"blue", 2:"green", 3:"black"} for i in graf_nx.nodes: graf_nx.nodes[i]["color"] = color[parttab[i]] try: nx.nx_pydot.to_pydot(graf_nx).write_dot("m4x4.dot") except ModuleNotFoundError: pass ``` from a `Python` prompt. ## Generating the documentation ```bash sphinx-build -b html doc/source build/doc ``` The HTML pages will be in `build/doc`. ## Testing To run all `ScotchPy` tests, type: ```bash tmpdir=$(mktemp -d) cp -R path/to/scotchpy/sources/tests $tmpdir cd $tmpdir /path/to/an/installed/scotchpy/bin/python -m pytest ``` For parallel tests (e.g. those involving `mpi4py` and the submodule `scotchpy.dgraph`), we use the plugin `pytest-isolate-mpi` that you can find on [pypi.org](https://pypi.org/project/pytest-isolate-mpi/) ## Contributing Contributions are welcome! To apply the `pylint` syntax checking tool, type: ```bash pylint --disable=R0902,R0903,R0904,R0912,R0913,C0114,C0116 scotchpy ``` ## Authors - Pierre PAVIA: initial core development, while intern at Inria Bordeaux-Sud Ouest (2020-2021) - Aymen ALI YAHIA (aymenali.aay@gmail.com): final core development, while intern at Inria Bordeaux-Sud Ouest (2024) - Marc FUENTES (marc.fuentes@inria.fr): support and packaging - François PELLEGRINI (francois.pellegrini@u-bordeaux.fr): project architect and syntax nitpicker ## License This project is distributed under the 2-clause BSD License. scotchpy/cmake/000077500000000000000000000000001505500072100137655ustar00rootroot00000000000000scotchpy/cmake/getLocalConfig.cmake000066400000000000000000000010511505500072100176440ustar00rootroot00000000000000# checks for scotch if (DEFINED ENV{SCOTCHPY_SCOTCH}) message(STATUS "SCOTCHPY_SCOTCH IS DEFINED") find_library(SCOTCH_LIB scotch PATHS $ENV{SCOTCHPY_SCOTCH} NO_DEFAULT_PATH) if (NOT SCOTCH_LIB) set(PIP_BUILD_SCOTCH ON) endif() if(BUILD_PTSCOTCH) find_library(PTSCOTCH_LIB ptscotch $ENV{SCOTCHPY_SCOTCH} NO_DEFAULT_PATH) if (NOT PTSCOTCH_LIB) set(PIP_BUILD_PTSCOTCH ON) endif() endif(BUILD_PTSCOTCH) else() set(PIP_BUILD_SCOTCH ON) if(BUILD_PTSCOTCH) set(PIP_BUILD_PTSCOTCH ON) endif(BUILD_PTSCOTCH) endif() scotchpy/configure000077500000000000000000000017661505500072100146260ustar00rootroot00000000000000#!/bin/bash cmake_script=$(mktemp) int_size_default=$(python3 -c 'import numpy; print(numpy.arange(1).dtype)' | sed -e 's#.*\([0-9]\{2\}\)#\1#') echo " # integer config if(DEFINED ENV{INTSIZE}) set(INTSIZE \$ENV{INTSIZE}) else() set(INTSIZE $int_size_default) endif() # scotch/ptscotch config if(DEFINED ENV{PTSCOTCH}) if("\$ENV{PTSCOTCH}" STREQUAL "ON") set(PTSCOTCH ON) set(PACKAGE_NAME ptscotchpy) set(DEPENDENCIES \"dependencies = [ \\\"numpy\\\" , \\\"pytest\\\", \\\"mpy4py\\\"]\") set(BEFORE_ALL \"before-all = \\\"yum -y install flex && yum -y install bison && yum -y install openmpi-devel\\\"\") endif() else() set(PTSCOTCH OFF) set(PACKAGE_NAME scotchpy) set(DEPENDENCIES \"dependencies = [ \\\"numpy\\\" , \\\"pytest\\\"]\") set(BEFORE_ALL \"before-all = \\\"yum -y install flex && yum -y install bison\\\"\") endif() set(PACKAGE_NAME \${PACKAGE_NAME}\${INTSIZE}) configure_file(pyproject.toml.in pyproject.toml) " >$cmake_script cmake -P $cmake_script rm $cmake_script scotchpy/doc/000077500000000000000000000000001505500072100134525ustar00rootroot00000000000000scotchpy/doc/Makefile000066400000000000000000000011761505500072100151170ustar00rootroot00000000000000# Minimal makefile for Sphinx documentation # # You can set these variables from the command line, and also # from the environment for the first two. SPHINXOPTS ?= SPHINXBUILD ?= sphinx-build SOURCEDIR = source BUILDDIR = build # Put it first so that "make" without argument is like "make help". help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) .PHONY: help Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) scotchpy/doc/make.bat000066400000000000000000000013741505500072100150640ustar00rootroot00000000000000@ECHO OFF pushd %~dp0 REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set SOURCEDIR=source set BUILDDIR=build if "%1" == "" goto help %SPHINXBUILD% >NUL 2>NUL if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% goto end :help %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% :end popd scotchpy/doc/source/000077500000000000000000000000001505500072100147525ustar00rootroot00000000000000scotchpy/doc/source/arch.rst000066400000000000000000000226441505500072100164310ustar00rootroot00000000000000==================================== Architecture in ScotchPy ==================================== Architectures are implemented in ScotchPy with the Arch class. The Arch class ############### .. class:: Arch(init=True) The graph constructor itself calls libscotch's ``archAlloc`` function, and usually ``archInit`` is called too. :param init: If True, the architecture allocation is followed by the init. If not, the :meth:`~Arch.init` method needs to be called before :meth:`~Arch.build/build0`, :meth:`~Arch.build2` or :meth:`~Arch.load`. | .. method:: init() This routine is included in a class call with ``init=True``. Mandatory before calling either :meth:`~Arch.build` or :meth:`~Arch.load`, or after calling :meth:`~Arch.exit`. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Arch.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Arch.init` call follows. | .. method:: load(stream) This routine builds the architecture from the data included in the given file or stream. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``). | .. method:: save(stream) This routine saves the architecture to the given file or stream in the form of a text string. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``). | .. method:: name() This routine gives the name of the architecture. :returns: The name of the architecture. :rtype: String | .. method:: size() This routine gives the size of the architecture. :returns: The size of the architecture. :rtype: Integer | .. method:: build/build0 (graf, listtab, strat) These two routines (as of now) fill the contents of the given opaque target structure with the data provided by the user. The source graph provided on input is turned into the ``deco 1`` decomposition-defined target architecture. :param graf: The source graph. :type graf: :class:`Graph` :param listtab: Restricts the vertices to be considered for the architecture. :type listtab: Numpy array or list of integers :param strat: Bi-partitioning strategy to be used. :type strat: a :class:`Strat` instance | .. method:: build2(graf, listtab) This routines fill the contents of the given opaque target structure with the data provided by the user. The source graph provided on input is turned into the ``deco 1`` decomposition-defined target architecture. :param graf: The source graph. :type graf: :class:`Graph` :param listtab: Restricts the vertices to be considered for the architecture. :type listtab: Numpy array or list of integers | .. method:: cmplt(vertnbr) This routine fills the contents of the given opaque target structure with the description of a complete graph architecture with ``vertnbr`` processors. :param vertnbr: Number of processors that can be used as input. :type vertnbr: Integer | .. method:: cmpltw(velotab) This routine fills the contents of the given opaque target structure with the description of a weighted graph architecture with length of ``velotab`` processors. :param velotab: Array of processor weights. :type velotab: Numpy array or list of integers | .. method:: hcub(hdimval) This routine fills the contents of the given opaque target structure with the description of a hypercube graph architecture of dimension ``hdimval``. :param hdimval: Dimension of the hypercube. :type hdimval: Integer | .. method:: ltLeaf(sizetab, linktab, permtab) This routine fills the contents of the given opaque target structure with the description of a labeled tree-shaped, hierarchical graph architecture. :param sizetab: Array of numbers of childs at level (i+1) for each node at level i. :type sizetab: Numpy array or list of integers :param linktab: Array of costs of communication between processors the first of which belongs to this level i. :type linktab: A1ny iterable of integers :param permtab: Numpy array or list of integers :type permtab: Numpy array or list of integers | .. method:: mesh(*args) This routine is generalized version of :meth:`~Arch.mesh2`, :meth:`~Arch.mesh3` and :meth:`~Arch.meshX` - it's almost :meth:`~Arch.meshX`, but the integers don't have to be wrapped in an iterable and must be given ore after the other. :param args: Number of processors in each dimension. :type args: Numpy array or list of integers | .. method:: mesh2(xdimval, ydimval) This routine fills the contents of the given opaque target structure with the description of a 2D mesh architecture with ``xdimval`` X ``ydimval`` processors. :param xdimval: Number of processors in the X dimension. :type xdimval: Integer :param ydimval: Number of processors in the Y dimension. :type ydimval: Integer | .. method:: mesh3(xdimval, ydimval, zdimval) This routine fills the contents of the given opaque target structure with the description of a 3D mesh architecture with ``xdimval`` X ``ydimval`` X ``zdimval`` processors. :param xdimval: Number of processors in the X dimension. :type xdimval: Integer :param ydimval: Number of processors in the Y dimension. :type ydimval: Integer :param zdimval: Number of processors in the Z dimension. :type zdimval: Integer | .. method:: meshX(dimntab) This routine fills the contents of the given opaque target structure with the description of a mesh architecture with length of ``dimntab``- dimension and the product of all elements of ``dimntab`` processors. :param dimntab: Array of numbers of processors in each dimension. :type dimntab: Numpy array or list of integers | .. method:: sub(orgarch, vnumtab) This routine fills the contents of the given opaque target structure with the description of a subset of the ``orgarch`` architecture, restricted to the ``vertnbr`` processors which are listed in ``vnumtab``. :param orgarch: Original architecture. :type orgarch: :class:`Arch` :param vnumtab: Array with processor ranks to be included in the sub-architecture. :type vnumtab: Numpy array or list of integers | .. method:: tLeaf(sizetab, linktab) This routine fills the contents of the given opaque target structure with the description of a tree-shaped, hierarchical graph architecture with the sum of all of ``sizetab`` processors. :param sizetab: Array of numbers of childs at level (i+1) for each node at level i. :type sizetab: Numpy array or list of integers :param linktab: Array of costs of communication between processors the first of which belongs to this level i. :type linktab: Numpy array or list of integers | .. method:: torus(*args) This routine is generalized version of :meth:`~Arch.torus2`, :meth:`~Arch.torus3` and :meth:`~Arch.torusX` - it's almost :meth:`~Arch.torusX`, but the integers don't have to be wrapped in an iterable and must be given ore after the other. :param args: Number of processors in each dimension. :type args: Numpy array or list of integers | .. method:: torus2(xdimval, ydimval) This routine fills the contents of the given opaque target structure with the description of a 2D torus architecture with ``xdimval`` X ``ydimval`` processors. :param xdimval: Number of processors in the X dimension. :type xdimval: Integer :param ydimval: Number of processors in the Y dimension. :type ydimval: Integer | .. method:: torus3(xdimval, ydimval, zdimval) This routine fills the contents of the given opaque target structure with the description of a 3D torus architecture with ``xdimval`` X ``ydimval`` X ``zdimval`` processors. :param xdimval: Number of processors in the X dimension. :type xdimval: Integer :param ydimval: Number of processors in the Y dimension. :type ydimval: Integer :param zdimval: Number of processors in the Z dimension. :type zdimval: Integer | .. method:: torusX(dimntab) This routine fills the contents of the given opaque target structure with the description of a torus architecture with length of ``dimntab``- dimension and the product of all elements of ``dimntab`` processors. :param dimntab: Array of numbers of processors in each dimension. :type dimntab: Numpy array or list of integers | .. method:: vhcub(): This routine fills the contents of the given opaque target structure with the description of a 'variable-sized' hypercube architecture. | .. method:: vcmplt(): This routine fills the contents of the given opaque target structure with the description of a 'variable-sized' complete graph architecture. | **Various functions are defined as wrappers of Arch operations:** | .. function:: arch_alloc() Recreates the ``archAlloc`` function, returning a non-initialized :class:`Arch` instance. It will need the :meth:`~Arch.init` method to be called before the instance be built or loaded upon. scotchpy/doc/source/archDom.rst000066400000000000000000000045041505500072100170640ustar00rootroot00000000000000==================================== ArchDom in ScotchPy ==================================== ArchDomains are implemented in ScotchPy with the ArchDom class. The ArchDom class ################# .. class:: ArchDom() The ArchDom constructor itself calls libscotch's ``archDomAlloc`` function. This object doesn't need to be initialized. | **The following routines, which need to be called from an :class:`ArchDom` object are relayed to the ArchDom class but not present in the class itself:** | .. method:: dom_size(domn) This routine returns the size of the domain. :param domn: Domain to be considered. :type domn: :class:`ArchDom` :returns: The size of the domain. :rtype: Integer | .. method:: dom_wght(domn) This routine returns the weight of the domain. :param domn: Domain to be considered. :type domn: :class:`ArchDom` :returns: The weight of the domain. :rtype: Integer | .. method:: dom_dist(domn0, domn1) This routine returns the distance of the domain. :param domn0: First domain. :type domn0: :class:`ArchDom` :param domn1: Second domain. :type domn1: :class:`ArchDom` :returns: The distance between the two domains. :rtype: Integer | .. method:: dom_frst(domn) This routine initializes the domain with the biggest domain of the architecture. :param domn: Domain to be initialized. :type domn: :class:`ArchDom` | .. method:: dom_term(domn,domnum) This routine initializes the domain to correspond to the terminal domain of index ``domnum`` in the architecture. :param domn: Domain to be initialized. :type domn: :class:`ArchDom` :param domnum: Index of the terminal domain. :type domnum: Integer | .. method:: dom_num(domn) This routine returns the number of the domain. :param domn: Domain to be considered. :type domn: :class:`ArchDom` :returns: The number of the domain. :rtype: Integer | .. method:: dom_bipart(domn, dom0, dom1) This routine initializes the two subdomains to correspond to the two parts of the bipartition of the ``domn`` domain. :param domn: Domain to be considered. :type domn: :class:`ArchDom` :param dom0: First subdomain. :type dom0: :class:`ArchDom` :param dom1: Second subdomain. :type dom1: :class:`ArchDom` scotchpy/doc/source/conf.py000066400000000000000000000036431505500072100162570ustar00rootroot00000000000000# Configuration file for the Sphinx documentation builder. # # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = 'ScotchPy' copyright = '2020-2024, Inria & Université de Bordeaux' author = 'Pierre PAVIA, Aymen ALI YAHIA, Marc FUENTES, François PELLEGRINI' # The full version, including alpha/beta/rc tags release = "1" # -- General configuration --------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = "alabaster" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = [] scotchpy/doc/source/context.rst000066400000000000000000000116561505500072100172010ustar00rootroot00000000000000==================================== Contexts in ScotchPy ==================================== Contexts are implemented in ScotchPy with the Context class. The Context class ################# .. class:: Context(init=True) The graph constructor itself calls libscotch's ``contextAlloc`` function, and usually ``contextInit`` is called too. :param init: If True, the context allocation is followed by the init. If not, the :meth:`~Context.init` method needs to be called before. | .. method:: init() This routine Initializes the fields of the Context object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling context routines or after calling :meth:`~Context.exit` in order to re-use the same Context instance. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Context.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Context.init` call follows. | .. method:: option_get_num(optinum, optival) This routine retrieves the value of a given integer context value of index ``optinum`` in ``optival``. :param optinum: The index of the context value to retrieve. :type optinum: Integer :param optival: The value of the context value. :type optival: Integer | .. method:: option_set_num(optinum, optival) This routine sets the value of a given integer context value of index ``optinum`` to ``optival``. :param optinum: The index of the context value to set. :type optinum: Integer :param optival: The value of the context value. :type optival: Integer | .. method:: random_clone() This routine clones the current state of the random number generator of the context. | .. method:: random_reset() This routine resets the state of the random number generator of the context. | .. method:: random_seed(seedval) This routine sets the state of the random number generator of the context with the given seed. :param seedval: The seed value. :type seedval: Integer | .. method:: thread_import1(thrdnbr) This routine initiates the capture, into the context, of an existing pool of threads. It must be called only by the master thread providing ``thrdnbr`` number of threads (including the master thread itself). :param thrdnbr: The number of threads to capture. :type thrdnbr: Integer | .. method:: thread_import2(thrdnum) This routine captures the ``thrdnum`` thread as a slave thread of the context. It must be called by each slave thread and the master thread after them. ``threading.Thread`` must be used here. See in "tests/test_context.py" for an example. :param thrdnum: The number of the thread to capture. :type thrdnum: Integer | .. method:: thread_spawn(thrdnbr, coretab) This routine populates the context with a pool of ``thrdnbr``- 1 slave threads, in addition to the master thread. :param thrdnbr: The number of threads to spawn. :type thrdnbr: Integer :param coretab: The core table, when not None, is an array of ``thrdnbr`` integers that gives the core number on which each thread should be bound. :type coretab: Any iterable of integers | .. method:: bind_graph(orggraf, cntgraf) This routine initializes a context container object with the graph ``orggraf``. The graph ``cntgraf`` is a context container that will contain the graph ``orggraf``. The graph ``orggraf`` is not duplicated, but only linked to the context container. The context container is used to store the graph and to provide a context for all graph operations. :param orggraf: The graph to bind. :type orggraf: :class:`~Graph` :param cntgraf: The context container. :type cntgraf: :class:`~Graph` | .. method:: bind_mesh(orgmesh, cntmesh) This routine initializes a context container object with the mesh ``orgmesh``. The mesh ``cntmesh`` is a context container that will contain the mesh ``orgmesh``. The mesh ``orgmesh`` is not duplicated, but only linked to the context container. The context container is used to store the mesh and to provide a context for all mesh operations. :param orgmesh: The mesh to bind. :type orgmesh: :class:`~Mesh` :param cntmesh: The context container. :type cntmesh: :class:`~Mesh` | **Various functions are defined as wrappers of Context operations:** | .. function:: context_alloc() This routine creates the ``contextAlloc`` function, returning a non-initialized :class:`Context` instance. It will need the :meth:`~Context.init` method to be called before the instance be built or loaded upon. | scotchpy/doc/source/dgraph.rst000066400000000000000000000631311505500072100167550ustar00rootroot00000000000000==================================== Distributed Graphs in ScotchPy ==================================== Distributed graphs are implemented in ScotchPy with the DGraph class. The DGraph class ################ ** WARNING: the DGraph class and related tests only work if mpi4py is installed. ** .. class:: DGraph(init=True) The distributed graph constructor itself calls libscotch's ``dgraphAlloc`` function, and usually ``dgraphInit`` is called too. :param init: If True, the graph allocation is followed by the init. If not, the :meth:`~DGraph.init` method needs to be called before :meth:`~DGraph.build` or :meth:`~DGraph.load`. The graph object stores the arguments given to the :meth:`~DGraph.build` method as integers and numpy arrays. They are accessible even when the graph has been constructed with :meth:`~DGraph.load`. They default to None if the argument was not given. | .. method:: init() This routine Initializes the fields of the DGraph object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling either :meth:`~DGraph.build` or :meth:`~DGraph.load`, or after calling :meth:`~DGraph.exit` in order to re-use the same DGraph instance. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~DGraph.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~DGraph.init` call follows. | .. method:: free() This routine resets the instance fields so that it can hold a new DGraph topology. Is equivalent to calling :meth:`~DGraph.exit` and :meth:`~DGraph.init` successively. | .. method:: build(baseval=None, vertglbnbr=None, vertlocnbr=None, vertlocmax=None, vertgstnbr=None, vertloctab=None, vendloctab=None, veloloctab=None, vlblloctab=None, edgeglbnbr=None, edgelocnbr=None, edgelocsiz=None, edgeloctab=None, edgegsttab=None, edloloctab=None) This routine builds the distributed graph itself using the given values. Arguments should be given as ints and ideally numpy arrays of ints, although any iterable would work. Mutating these arrays is not recommended as it may cause runtime errors while Scotch handles them. Some arguments may be omitted, but : - ``baseval`` must be given if the graph is not compact. - if ``vertloctab`` has no size, ``baseval``, ``vertlocnbr`` and ``edgelocnbr`` must be given. :param baseval: DGraph base value for index arrays. :type baseval: Integer :param vertglbnbr: The global number of vertices. :type vertglbnbr: Integer :param vertlocnbr: The number of local vertices. :type vertlocnbr: Integer :param vertlocmax: The maximum number of local vertices. :type vertlocmax: Integer :param vertgstnbr: The number of ghost vertices. :type vertgstnbr: Integer :param vertloctab: The local adjacency index array (**Required**). :type vertloctab: Any iterable of integers ideally numpy array :param vendloctab: The adjacency end index array of size vertlocnbr if disjoint from vertloctab (**Optional**). :type vendloctab: Any iterable of integers ideally numpy array :param veloloctab: The local vertex load array of size vertlocnbr (**Optional**). :type veloloctab: Any iterable of integers ideally numpy array :param vlblloctab: The vertex label array of size vertlocnbr (**Optional**). :type vlblloctab: Any iterable of integers ideally numpy array :param edgeglbnbr: The global number of edges. :type edgeglbnbr: Integer :param edgelocnbr: The number of local edges. :type edgelocnbr: Integer :param edgelocsiz: The size of the local edge array. :type edgelocsiz: Integer :param edgeloctab: The local adjacency array of size edgelocsiz (*more if not compact*) (**Required**). :type edgeloctab: Any iterable of integers ideally numpy array :param edgegsttab: The global adjacency array of size edgelocsiz (*more if not compact*) (**Required**). :type edgegsttab: Any iterable of integers ideally numpy array :param edloloctab: The local arc load array of size edgelocsiz (**Optional**). :type edloloctab: Any iterable of integers ideally numpy array | .. method:: build_grid_3d(baseval, dimxval, dimyval, dimzval, incrval, flagval) This routine fills the distributed graph with the description of a 3D grid of dimensions ``dimxval``, ``dimyval`` and ``dimzval``, using ``baseval`` as the base value for vertex and edge indices. :param baseval: The base value for index arrays. :type baseval: Integer :param dimxval: The number of vertices in the X dimension. :type dimxval: Integer :param dimyval: The number of vertices in the Y dimension. :type dimyval: Integer :param dimzval: The number of vertices in the Z dimension. :type dimzval: Integer :param incrval: The increment value for vertex indices. :type incrval: Integer :param flagval: The flagval value is a combination of the following integer values, that may be added or bitwise-ored: - ``1`` : 26-neighbor mesh (defaults at 6-neighbor mesh). - ``2`` : torus (defaults at mesh) - ``4`` : weighted vertices (defaults at no weights). - ``8`` : weighted edges (ddefaults at no weights). :type flagval: Integer | .. method:: load(stream, baseval=-1, flagval=0) This routine builds the distributed graph with :meth:`~DGraph.build` from data included in the given file or stream. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param baseval: The graph base value for index arrays(0 or 1), takes the baseval value from the ``stream`` data if -1. :type baseval: Integer :param flagval: The flagval value is a combination of the following integer values, that may be added or bitwise-ored: - ``0`` : Keep vertex and edge weights if they are present in the stream data. - ``1`` : Remove vertex weights. The graph read will have all of its vertex weights set to one, regardless of what is specified in the stream data. - ``2`` : Remove edge weights. The graph read will have all of its edge weights set to one, regardless of what is specified in the stream data. :type flagval: Integer | **The following routines can't be called before the graph is properly built either with DGraph.build or with DGraph.load:** | .. method:: save(stream) This routine saves the distributed graph to the given file or stream in the Scotch graph format. :param stream: input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: check() Runs a self-test to check data consistency after the :meth:`~DGraph.build` or :meth:`~DGraph.load` method is called, raises a :class:`LibraryError` if not. | .. method:: data(as_dict=None) This routine returns the values taken by the :meth:`~DGraph.build` method. The arrays are returned as numpy arrays. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 15-element tuple. :type as_dict: Boolean :returns: Values in this order: (``baseval``, ``vertglbnbr``, ``vertlocnbr``, ``vertlocmax``, ``vertgstnbr``, ``vertloctab``, ``vendloctab``, ``veloloctab``, ``vlblloctab``, ``edgeglbnbr``, ``edgelocnbr``, ``edgelocsiz``, ``edgeloctab``, ``edgegsttab``, ``edloloctab``). :rtype: Tuple or Dict | .. method:: size(as_dict=None) This routine returns the values of ``edgeglbnbr``, ``edgelocnbr``, ``vertlocnbr`` and ``vertglbnbr`` taken by the :meth:`~DGraph.build` method. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 4-element tuple. :type as_dict: Boolean :returns: Values in this order: (``edgeglbnbr``, ``edgelocnbr``, ``vertlocnbr``, ``vertglbnbr``). :rtype: Tuple or Dict | .. method:: part(partnbr, strat=Strat(init=True), partloctab=None) This routine computes a vertex-separated partition, into ``partnbr`` parts, of the graph itself, with respect to the given strategy. :param partnbr: The number of parts in the partitioning. :type partnbr: Integer :param strat: Strategy to be used for the partitioning. :type strat: :class:`Strat` :param partloctab: The local partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type partloctab: Any kind of iterable or a numpy array | .. method:: induce_part(orgpartloctab, indpartval, indvertlocnbr, indgraf) This routine induces a partition of the distributed graph itself from the given partition array ``orgpartloctab`` to the induced distributed graph ``indgraf`` with respect to the given induced partition value ``indpartval`` and the number of local vertices ``indvertlocnbr``. :param orgpartloctab: The original partition array. :type orgpartloctab: Any kind of iterable or a numpy array :param indpartval: The induced partition value. :type indpartval: Integer :param indvertlocnbr: The number of local vertices. :type indvertlocnbr: Integer :param indgraf: The induced graph. :type indgraf: :class:`DGraph` | .. method:: map(arch, strat=Strat(init=True), partloctab=None) This routine computes a mapping of the distributed graph itself onto the given target architecture ``arch`` , with respect to the given strategy ``strat``. :param arch: The target architecture. :type arch: :class:`Arch` :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` :param partloctab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type partloctab: Any kind of iterable or a numpy array | .. method:: map_init(mapping, arch, partloctab=None) This routine initializes an API opaque mapping with respect to the distributed graph itself and the given parameters. :param mapping: The mapping to be initialized. :type mapping: :class:`Mapping` :param arch: The target architecture. :type arch: :class:`Arch` :param partloctab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type partloctab: Any kind of iterable or a numpy array | .. method:: map_exit(mapping) This routine frees an API mapping instance. :param mapping: The mapping to be freed. :type mapping: :class:`Mapping` | .. method:: map_view(mapping, stream) This routine writes mapping statistics (load of target processors, number of neigh- boring domains, average dilation and expansion, edge cut size, distribution of edge dilations) to the given stream. :param mapping: The mapping to be viewed. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: map_compute(mapping, strat) This routine computes a mapping of the API mapping structure ``mapping`` with respect to the given strategy ``strat`` . :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param strat: Strategy to be used for the mapping . :type strat: :class:`Strat` | .. method:: map_save(mapping, stream) This routine saves the contents of the given user mapping ``mapping`` to the given stream ``stream``. :param mapping: The mapping to be saved. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: map_view(mapping, stream) This routine writes mapping statistics (load of target processors, number of neigh- boring domains, average dilation and expansion, edge cut size, distribution of edge dilations) to the given stream. :param mapping: The mapping to be displayed. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) .. method:: order_init(ordering) This routine initializes an ordering instance. :param ordering: Ordering to be initialized. :type ordering: :class:`Ordering` .. method:: order_exit(ordering) This routine frees an ordering instance. :param ordering: Ordering to be freed. :type ordering: :class:`Ordering` | .. method:: order_compute(ordering, strat) This routine computes a block ordering of the distributed graph itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. :param ordering: Ordering to be computed. :type ordering: :class:`Ordering` :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: order_save(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream``. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_cblk_dist(ordering) This routine returns the global number of distributed elimination tree (super-)nodes possessed by the given distributed ordering instance ``ordering``. :param ordering: Ordering to be used. :type ordering: :class:`Ordering` .. method:: order_save_map(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the Scotch mapping format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save_tree(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the tree output format format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_perm(ordering, permloctab=None) This routine fills the distributed direct permutation array ``permloctab`` with the inverse permutation of the ordering array ``ordering``. :param ordering: Ordering to be used. :type ordering: :class:`Ordering` :param permloctab: The permutation array or size vertlocnbr. If given as a list or numpy array of integers, it is updated with the returned values. :type permloctab: Any kind of iterable or a numpy array | .. method:: order_tree_dist(ordering, treeglbtab=None, sizeglbtab=None) This routine fills on all processes the arrays representing the distributed part of the elimination tree associated with the given ordering instance ``ordering``. :param ordering: Ordering to be used. :type ordering: :class:`Ordering` :param treeglbtab: The global elimination tree array. If given as a list or numpy array of integers, it is updated with the returned values. :type treeglbtab: Any kind of iterable or a numpy array :param sizeglbtab: The global size array. If given as a list or numpy array of integers, it is updated with the returned values. :type sizeglbtab: Any kind of iterable or a numpy array | .. method:: centralized_order_exit(cordering) This routine frees a centralized ordering instance. :param cordering: Centralized ordering to be freed. :type cordering: :class:`Ordering` | .. method:: centralized_order_init(cordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) This routine fills the centralized ordering instance ``cordering`` with the given parameters. :param cordering: Centralized ordering to be filled. :type cordering: :class:`Ordering` :param permtab: The ordering permutation array. :type permtab: Any kind of iterable or a numpy array :param peritab: The inverse ordering permutation array. :type peritab: Any kind of iterable or a numpy array :param cblknbr: The number of column blocks. :type cblknbr: Integer :param rangtab: The column block span array. :type rangtab: Any kind of iterable or a numpy array :param treetab: The separators tree array. :type treetab: Any kind of iterable or a numpy array | .. method:: grow(seedlocnbr, seedloctab, distmax, partgsttab=None) This routine grows areas of the distributed graph itself from a set of colored seeds provided on each process. :param seedlocnbr: The number of local vertices in the seed. :type seedlocnbr: Integer :param seedloctab: The local vertex array of the seed. :type seedloctab: Any kind of iterable or a numpy array :param distval: The distance value. :type distval: Integer :param partgsttab: The ghost partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type partgsttab: Any kind of iterable or a numpy array | .. method:: coarsen(coarnbr, coarrat, flagval, coargraf, multloctab=None) This routine coarsens the graph itself with respect to the given parameters. The coarsened distributed graph is created only if it comprises more than ``coarnbr`` vertices, or if the coarsening ratio is lower than ``coarrat``. Valid coarsening ratio values range from 0.5 (in the case of a perfect matching) to 1.0 (if no vertex could be coarsened). Classical threshold values range from 0.7 to 0.8. Raises :class:`CannotCoarsen` if not because of threshold parameters, raises :class:`LibraryError` otherwise. :param coarnbr: Number of vertices in the coarsened graph. :type coarvertnbr: Integer :param coarrat: Coarsening ratio. :type coarrat: Floating-point number :param flagval: The flagval flag specifies the type of coarsening :type flagval: Integer :param coargraf: Another :class:`DGraph` instance, which gets modified. :type coargraf: :class:`DGraph` :param multloctab: The vertex-to-vertex multiplicity array. If given as a list or numpy array of integers, it is updated with the returned values. :type coarmulttab: Any kind of iterable or a numpy array | .. method:: stat(as_dict=False) This routine gives various stats about the distributed graph: - ``velomin``, ``velomax``, ``velosum``, ``veloavg``, ``velodlt``, are the minimum vertex load, the maximum vertex load, the sum of all vertex loads, the average vertex load and the variance of the vertex degrees, respectively. - ``degrmin``, ``degrmax``, ``degravg``, ``degrdlt``, are the minimum vertex degree, the maximum vertex degree, the average vertex degree and the variance of the vertex degrees, respectively. - ``edlomin``, ``edlomax``, ``edlosum``, ``edloavg``, ``edlodlt`` are the minimum edge load, the maximum edge load, the sum of all edge loads, the average edge load and the variance of the edge loads, respectively. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 14-element tuple. :type as_dict: Boolean :returns: various stats about the distributed graph, in this specific order :(``velomin``, ``velomax``, ``velosum``, ``veloavg``, ``velodlt``, ``degrmin``, ``degrmax``, ``degravg``, ``degrdlt``, ``edlomin``, ``edlomax``, ``edlosum``, ``edloavg``, ``edlodlt``). :rtype: Tuple or Dict | .. method:: coarsen_vert_loc_max(flagval) This routine computes an upper bound on the local number of coarse vertices that can be created by the coarsening process. :param flagval: The flagval flag specifies the type of coarsening. :type flagval: Integer :returns: The upper bound on the local number of coarse vertices. :rtype: Integer | .. method:: gather(cgrf) This routine gathers the contents of the distributed graph itself into the centralized graph ``cgrf``. :param cgrf: The centralized graph to be filled. :type cgrf: :class:`Graph` | .. method:: scatter(cgrf) This routine scatters the contents of the centralized graph ``cgrf`` into the distributed graph itself. :param cgrf: The centralized graph to be scattered. :type cgrf: :class:`Graph` | .. method:: redist(partloctab, permgsttab, vertlocdlt, edgelocdlt, redgraf) This routine initializes and fills the redistributed graph ``redgraf`` with a new distributed graph made from the original graph itself and the given parameters. :param partloctab: The partition array. :type partloctab: Any kind of iterable or a numpy array :param permgsttab: The global permutation array. :type permgsttab: Any kind of iterable or a numpy array :param vertlocdlt: The local vertex weight array. :type vertlocdlt: Any kind of iterable or a numpy array :param edgelocdlt: The local edge weight array. :type edgelocdlt: Any kind of iterable or a numpy array :param redgraf: The redistributed graph. :type redgraf: :class:`DGraph` | .. method:: ghst() This routine fills the ``edgegsttab`` array of the distributed graph itself with the local and ghost vertex indices corresponding to the global vertex indices contained in the ``edgeloctab`` array. | .. method:: halo(datatab, typeval) This routine propagates the data borne by local vertices to all of the corresponding halo vertices located on neighboring processes. :param datatab: The data array to be propagated of size ``vertgstnbr`` at least. :type datatab: Any kind of iterable or a numpy array :param typeval: The type of data to be propagated. :type typeval: Integer | .. method:: halo_async(datatab, typeval, requ) This routine propagates the data borne by local vertices to all of the corresponding halo vertices located on neighboring processes, asynchronously. :param datatab: The data array to be propagated of size ``vertgstnbr`` at least. :type datatab: Any kind of iterable or a numpy array :param typeval: The type of data to be propagated. :type typeval: Integer :param requ: HaloReq data structure. :type requ: :class:`HaloReq` instance | .. method:: halo_wait(requ) This routine waits for the completion of the asynchronous halo exchange process. :param requ: HaloReq data structure. :type requ: :class:`HaloReq` instance | **Various functions are defined as wrappers of DGraph operations:** | .. function:: dgraph_alloc() Recreates the ``dgraphAlloc`` function, returning a non-initialized :class:`DGraph` instance. It will need the :meth:`~DGraph.init` method to be called before the instance be built or loaded upon. | .. function:: build_dgraph(*args, **kwargs) Returns a properly built graph instance. Positional and keyword arguments need to be given in the same fashion as :meth:`DGraph.build` takes them. | .. function:: load_dgraph(*args, **kwargs) Returns a distributed graph instance loaded from the given file or stream. Positional arguments need to be given in the same fashion as :meth:`DGraph.load` takes them. | There is no explicit equivalent to Scotch's ``memFree`` function, since its call is included in the class destructor. To delete the ``graf`` variable and free the related graph structure before the local scope expires, simply use:: del graf However, due to how Python's garbage-collector works, the ``memFree`` function may not be called immediately. Good practices ############## All in all, the Python and ScotchPy good practices tend not to use the :meth:`~DGraph.init` and :meth:`~DGraph.exit` methods and the :class:`DGraph` constructor. They return unfinished and *per se* unusable objects, since they are included for compatibility with the C version of PT-Scotch. The use of the :func:`build_dgraph` or :func:`load_dgraph` functions is therefore advised. scotchpy/doc/source/geom.rst000066400000000000000000000147311505500072100164410ustar00rootroot00000000000000==================================== Geometries in ScotchPy ==================================== Geometries are implemented in ScotchPy with the Geom class. The Geom class ################# .. class:: Geom() The Geom constructor itself calls libscotch's ``geomAlloc`` function. This object doesn't need to be initialized. | .. method:: init() This routine initializes the fields of the Geom object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling geom routines or after calling :meth:`~Geom.exit` in order to re-use the same Geom instance. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Geom.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Geom.init` call follows. | .. method:: free() This routine frees the geometry data. Can be called after the geometry is no longer needed. Calls :meth:`~Geom.exit` and :meth:`~Geom.init` to reinitialize the object. | .. method:: data(as_dict=False) This routine returns the data of the geometry. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 2-element tuple. :type as_dict: Boolean :returns: Values in this order: ``dimnnbr``, ``geomtab``. :rtype: Tuple or Dict | **The following routines, which need to be called from a :class:`Graph` (or a :class:`Mesh` if specified) object are relayed to the Geom class but not present in the class itself:** | .. method:: geom_load_chac(geom, grafstream, geomstream, string) This routine loads the geometry of the graph from the given file or stream in the Chaco graph format. :param geom: The geometry to be loaded. :type geom: :class:`~Geom` :param grafstream: Input file or stream to read from. :type grafstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param geomstream: Input file or stream to read from. :type geomstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param string: The string to be used. :type string: String | .. method:: geom_load_habo(geom, grafstream/meshstream, geomstream, string) This routine loads the geometry of the graph or the mesh from the given file or stream in the Harwell-Boeing square assembled matrix format. :param geom: The geometry to be loaded. :type geom: :class:`~Geom` :param grafstream: Input file or stream to read from. :type grafstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param geomstream: Input file or stream to read from. :type geomstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param string: The string to be used. :type string: String | .. method:: geom_load_scot(geom, grafstream/meshstream, geomstream, string) This routine loads the geometry of the graph or the mesh from the given file or stream in the Scotch graph/mesh and geometry formats. :param geom: The geometry to be loaded. :type geom: :class:`~Geom` :param grafstream: Input file or stream to read from. :type grafstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param geomstream: Input file or stream to read from. :type geomstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param string: The string to be used. :type string: String | .. method:: geom_save_chac(geom, grafstream, geomstream, string) This routine saves the geometry of the graph to the given file or stream in the Chaco graph format. :param geom: The geometry to be saved. :type geom: :class:`~Geom` :param grafstream: Input file or stream to write to. :type grafstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param geomstream: Input file or stream to write to. :type geomstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param string: The string to be used. :type string: String | .. method:: geom_save_scot(geom, grafstream/meshstream, geomstream, string) This routine saves the geometry of the graph or the mesh to the given file or stream in the Scotch graph/mesh and geometry formats. :param geom: The geometry to be saved. :type geom: :class:`~Geom` :param grafstream: Input file or stream to write to. :type grafstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param geomstream: Input file or stream to write to. :type geomstream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param string: The string to be used. :type string: String | .. function:: geom_alloc() This routine allocates a new geometry object and returns it. :returns: The new geometry object. :rtype: :class:`~Geom` scotchpy/doc/source/graph.rst000066400000000000000000001026221505500072100166100ustar00rootroot00000000000000==================================== Graphs in ScotchPy ==================================== Graphs are implemented in ScotchPy with the Graph class. The Graph class ############### .. class:: Graph(init=True) The graph constructor itself calls libscotch's ``graphAlloc`` function, and usually ``graphInit`` is called too. :param init: If True, the graph allocation is followed by the init. If not, the :meth:`~Graph.init` method needs to be called before :meth:`~Graph.build` or :meth:`~Graph.load`. The graph object stores the arguments given to the :meth:`~Graph.build` method as integers and numpy arrays. They are accessible even when the graph has been constructed with :meth:`~Graph.load`. They default to None if the argument was not given. | .. method:: init() This routine Initializes the fields of the Graph object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling either :meth:`~Graph.build` or :meth:`~Graph.load`, or after calling :meth:`~Graph.exit` in order to re-use the same Graph instance. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Graph.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Graph.init` call follows. | .. method:: free() This routine resets the instance fields so that it can hold a new Graph topology. Is equivalent to calling :meth:`~Graph.exit` and :meth:`~Graph.init` successively. | .. method:: build(baseval=None, vertnbr=None, verttab=None, vendtab=None, velotab=None, vlbltab=None, edgenbr=None, edgetab=None, edlotab=None) This routine builds the graph itself using the given values. Arguments should be given as ints and ideally numpy arrays of ints, although any iterable would work. Mutating these arrays is not recommended as it may cause runtime errors while Scotch handles them. Some arguments may be omitted, but : - ``baseval`` must be given if the graph is not compact. - if ``verttab`` has no size, ``baseval``, ``vertnbr`` and ``edgenbr`` must be given. :param baseval: Graph base value for index arrays. :type baseval: Integer :param vertnbr: Number of vertices. :type vertnbr: Integer :param verttab: Adjacency index array (**Required**). :type verttab: Any iterable of integers ideally numpy array :param vendtab: Adjacency end index array of size vertnbr if disjoint from verttab (**Optional**). :type vendtab: Any iterable of integers ideally numpy array :param velotab: Vertex load array of size vertnbr (**Optional**). :type velotab: Any iterable of integers ideally numpy array :param vlbltab: Vertex label array of size vertnbr (**Optional**). :type vlbltab: Any iterable of integers ideally numpy array :param edgenbr: Number of arcs (*which is twice the number of edges*). :type edgenbr: Integer :param edgetab: Adjacency array of size edgenbr (*more if not compact*) (**Required**). :type edgetab: Any iterable of integers ideally numpy array :param edlotab: Arc load array of size edgenbr (**Optional**). :type edlotab: Any iterable of integers ideally numpy array | .. method:: build_from_csgraph(csg) This routine builds the graph ``csg`` using :meth:`~Graph.build`. :param csg: A scipy.csgraph matrix. :type csg: scipy.sparse.csr_matrix | .. method:: load(stream, baseval=-1, flagval=0) This routine builds the graph with :meth:`~Graph.build` from data included in the given file or stream. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param baseval: The graph base value for index arrays(0 or 1), takes the baseval value from the ``stream`` data if -1. :type baseval: Integer :param flagval: The flagval value is a combination of the following integer values, that may be added or bitwise-ored: - ``0`` : Keep vertex and edge weights if they are present in the stream data. - ``1`` : Remove vertex weights. The graph read will have all of its vertex weights set to one, regardless of what is specified in the stream data. - ``2`` : Remove edge weights. The graph read will have all of its edge weights set to one, regardless of what is specified in the stream data. :type flagval: Integer | **The following routines can't be called before the graph is properly built either with Graph.build or with Graph.load:** | .. method:: base(baseval) This routine re-sets the baseval value and modifies the stored arrays to maintain data consistency. :param baseval: Graph base value for index arrays. :type baseval: Integer :returns: Former baseval value. :rtype: Integer | .. method:: save(stream) This routine saves the graph to the given file or stream in the Scotch graph format. :param stream: input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: check() Runs a self-test to check data consistency after the :meth:`~Graph.build` or :meth:`~Graph.load` method is called, raises a :class:`LibraryError` if not. | .. method:: data(as_dict=None) This routine returns the values taken by the :meth:`~Graph.build` method. The arrays are returned as numpy arrays. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 9-element tuple. :type as_dict: Boolean :returns: Values in this order: (``baseval``, ``vertnbr``, ``verttab``, ``vendtab``, ``velotab``, ``vlbltab``, ``edgenbr``, ``edgetab``, ``edlotab``) . :rtype: Tuple or Dict | .. method:: size(as_dict=None) This routine returns the values of ``edgenbr`` and ``vertnbr`` taken by the :meth:`~Graph.build` method. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 2-element tuple. :type as_dict: Boolean :returns: The values of ``edgenbr`` and ``vertnbr``. :rtype: Tuple or Dict | .. method:: diam_pv() This routine computes the the edge-weighted (pseudo) diameter of the graph and returns it. :returns: The graph's diameter. :rtype: Integer | .. method:: stat(as_dict=None) This routine gives various stats about the graph: - ``velomin``, ``velomax``, ``velosum``, ``veloavg``, ``velodlt``, are the minimum vertex load, the maximum vertex load, the sum of all vertex loads, the average vertex load and the variance of the vertex degrees, respectively. - ``degrmin``, ``degrmax``, ``degravg``, ``degrdlt``, are the minimum vertex degree, the maximum vertex degree, the average vertex degree and the variance of the vertex degrees, respectively. - ``edlomin``, ``edlomax``, ``edlosum``, ``edloavg``, ``edlodlt`` are the minimum edge load, the maximum edge load, the sum of all edge loads, the average edge load and the variance of the edge loads, respectively. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 14-element tuple. :type as_dict: Boolean :returns: various stats about the graph, in this specific order :(``velomin``, ``velomax``, ``velosum``, ``veloavg``, ``velodlt``, ``degrmin``, ``degrmax``, ``degravg``, ``degrdlt``, ``edlomin``, ``edlomax``, ``edlosum``, ``edloavg``, ``edlodlt``). :rtype: Tuple or Dict | .. method:: color(colotab=None, flagval=0) This routine creates a color array for the given graph. To get the ``colonum`` value, the built-in ``max`` function can be called on colortab. :param colotab: If given as a list or numpy array of integers, it is updated with the returned values. :type colotab: Any iterable of integers ideally numpy array :param flagval: Defaults to 0, not used for now. :type flagval: Integer | .. method:: tab_save(stream, parttab=None) This routine saves the partition array ``parttab`` to the given file or stream in the Scotch mapping format. :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: tab_load(stream, parttab=None) This routine loads the partition array ``parttab`` from the given file or stream. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: part(partnbr, strat=Strat(init=True), parttab=None) This routine computes an edge-separated partition ,into ``partnbr`` parts, of the graph itself, with respect to the given strategy. :param partnbr: The number of parts. :type partnbr: Integer :param strat: A :class:`Strat` instance to be used for the partitioning. :type strat: Strat :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: part_fixed(partnbr, strat=Strat(init=True), parttab=None) This routine computes a edge-separated partition, into ``partnbr`` parts, of the graph itself, with respect to the given strategy and the fixed vertices in ``maptab``. :param partnbr: The number of parts. :type partnbr: Integer :param strat: Strategy to be used for the partitioning. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: part_ovl(partnbr, strat=Strat(init=True), parttab=None) This routine computes an overlapped vertex-separated partition, into ``partnbr`` parts, of the graph itself, with respect to the given strategy and the fixed vertices in ``maptab``. :param partnbr: The number of parts. :type partnbr: Integer :param strat: Strategy to be used for the partitioning. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: induce_list(vnumnbr, vnumtab, indgraf) This routine computes the induced graph of the graph itself, with respect to the given vertex list. :param vnumnbr: The number of vertices in the list. :type vnumnbr: Integer :param vnumtab: The vertex list. :type vnumtab: Any kind of iterable or a numpy array :param indgraf: The induced subgraph. :type indgraf: :class:`Graph` | .. method:: induce_part(vnumnbr, vnumtab, partval, indgraf) This routine computes the induced graph of the graph itself, with respect to the given vertex list and the given partition. :param vnumnbr: The number of vertices in the list. :type vnumnbr: Integer :param vnumtab: The vertex list. :type vnumtab: Any kind of iterable or a numpy array :param partval: The partition array. :type partval: Any kind of iterable or a numpy array :param indgraf: The induced subgraph. :type indgraf: :class:`Graph` | .. method:: repart(partnbr, parotab, emraval, vmlotab, strat=Strat(init=True), parttab=None) This routine computes an edge-separated repartition , into ``partnbr`` parts, of the graph itself, based on the old partition array ``parotab`` , with respect to the given strategy ``strat`` . :param partnbr: The number of parts. :type partnbr: Integer :param parotab: The old partition array. :type parotab: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the partitioning. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: repart_fixed(partnbr, parotab, emraval, vmlotab, strat=Strat(init=True), parttab=None) This routine computes an edge-separated repartition , into ``partnbr`` parts, of the graph itself, based on the old partition array ``parotab`` , with respect to the given strategy ``strat`` and the fixed vertices in ``maptab``. :param partnbr: The number of parts. :type partnbr: Integer :param parotab: The old partition array. :type parotab: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the partitioning. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: map(arch, strat=Strat(init=True), parttab=None) This routine computes a mapping of the given graph itself onto the given target architecture ``arch`` , with respect to the given strategy ``strat``. :param arch: The target architecture. :type arch: :class:`Arch` :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: map_fixed(arch, strat=Strat(init=True), parttab=None) This routine computes a mapping of the given graph itself onto the given target architecture ``arch`` , with respect to the given strategy ``strat`` and fixed vertices in maptab. :param arch: The target architecture. :type arch: :class:`Arch` :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: remap(arch, parotab, emraval, vmlotab, strat=Strat(init=True), parttab=None) This routine computes a remapping of the graph itself onto the given target architecture ``arch`` , based on the old partition array ``parotab``, with respect to the given strategy ``strat``. :param arch: The target architecture. :type arch: :class:`Arch` :param parotab: The old mapping array. :type parotab: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: remap_fixed(arch, parotab, emraval, vmlotab, strat=Strat(init=True), parttab=None) This routine computes a remapping of the graph itself onto the given target architecture ``arch`` , based on the old partition array ``parotab``, with respect to the given strategy ``strat`` and the fixed vertices in maptab. :param arch: The target architecture. :type arch: :class:`Arch` :param parotab: The old mapping array. :type parotab: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: map_init(mapping, arch, parttab=None) This routine initializes an API opaque mapping with respect to the graph itself and the locations of output parameters. :param mapping: The mapping to be initialized. :type mapping: :class:`Mapping` :param arch: The target architecture. :type arch: :class:`Arch` :param parttab: The partition array. If given as a list or numpy array of integers, it is updated with the returned values. :type parttab: Any kind of iterable or a numpy array | .. method:: map_exit(mapping) This routine frees an API mapping instance. :param mapping: The mapping to be freed. :type mapping: :class:`Mapping` | .. method:: map_compute(mapping, strat) This routine computes a mapping of the API mapping structure ``mapping`` with respect to the given strategy ``strat`` . :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param strat: Strategy to be used for the mapping . :type strat: :class:`Strat` | .. method:: map_fixed_compute(mapping, strat) This routine computes a mapping with fixed vertices of the API mapping structure with respect to the given strategy. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: remap_compute(mapping, mapo, emraval, vmlotab, strat) This routine computes a remapping of the API mapping structure ``mapping`` with respect to the given strategy ``strat``. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param mapo: The already computed mapping array used to account for migration costs. :type mapo: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: remap_fixed_compute(mapping, mapo, emraval, vmlotab, strat) This routine computes a remapping with fixed vertices of the API mapping structure ``mapping`` with respect to the given strategy ``strat``. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param mapo: The already computed mapping array used to account for migration costs. :type mapo: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: map_load(mapping, stream) This routine loads the contents of the given user mapping ``mapping`` from the given stream ``stream``. :param mapping: The mapping to be loaded. :type mapping: :class:`Mapping` :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: map_save(mapping, stream) This routine saves the contents of the given user mapping ``mapping`` to the given stream ``stream``. :param mapping: The mapping to be saved. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: map_view(mapping, stream) This routine writes mapping statistics (load of target processors, number of neigh- boring domains, average dilation and expansion, edge cut size, distribution of edge dilations) to the given stream. :param mapping: The mapping to be viewed. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order(strat=Strat(init=True), permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) This routine computes a block ordering of the unknowns of the symmetric sparse matrix the adjacency structure, which is represented by the graph itself. :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` :param permtab: Array holding the permutation of the reordered matrix. If given, the values of the returned array are copied in this one. :type permtab: Any kind of iterable or a numpy array :param peritab: Inverse permutation of the reordered matrix. If given, the values of the returned array are copied in this one. :type peritab: Any kind of iterable or a numpy array :param cblknbr: Number of column blocks in the block ordering. If given, the value is copied in this one. :type cblknbr: integer :param rangtab: Array of ranges for the column blocks. If given, the values of the returned array are copied in this one. :type rangtab: Any kind of iterable or a numpy array :param treetab: Array of ascendants of permuted column blocks in the separators tree. If given, the values of the returned array are copied in this one. :type treetab: Any kind of iterable or a numpy array | .. method:: order_init(ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) This routine initializes an ordering structure with respect to the graph itself. If called using :class:`Ordering`'s constructor however, nothing is returned. :param ordering: Ordering to be initialized. :type ordering: :class:`Ordering` :param permtab: Array holding the permutation of the reordered matrix. If given, the values of the returned array are copied in this one. :type permtab: Any kind of iterable or a numpy array :param peritab: Inverse permutation of the reordered matrix. If given, the values of the returned array are copied in this one. :type peritab: Any kind of iterable or a numpy array :param cblknbr: Number of column blocks in the block ordering. If given, the value is copied in this one. :type cblknbr: Integer :param rangtab: Array of ranges for the column blocks. If given, the values of the returned array are copied in this one. :type rangtab: Any kind of iterable or a numpy array :param treetab: Array of ascendants of permuted column blocks in the separators tree. If given, the values of the returned array are copied in this one. :type treetab: Any kind of iterable or a numpy array | .. method:: order_exit(ordering) This routine frees an ordering instance. :param ordering: Ordering to be freed. :type ordering: :class:`Ordering` | .. method:: order_check(ordering) This routine checks the consistency of the ordering instance. :param ordering: Ordering to be checked. :type ordering: :class:`Ordering` | .. method:: order_compute(ordering, strat) This routine computes a block ordering of the graph itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. :param ordering: Ordering to be computed. :type ordering: :class:`Ordering` :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: order_compute_list(ordering, listtab, strat) This routine computes a block ordering of the graph itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. The induced subgraph is described by means of a vertex list: listnbr holds the number of vertices to keep in the induced subgraph, the indices of which are given, in any order, in the ``listtab`` array. :param ordering: Ordering to be computed. :type ordering: :class:`Ordering` :param listtab: The list of vertices to keep in the induced subgraph. :type listtab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: order_load(ordering, stream) This routine loads the contents of the given ordering instance ``ordering`` from the given stream ``stream``. :param ordering: Ordering to be loaded. :type ordering: :class:`Ordering` :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream``. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save_map(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the Scotch mapping format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save_tree(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the tree output format format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: coarsen(coarvertnbr, coarrat, flagval, coargraf, coarmulttab=None) This routine coarsens the graph itself with respect to the given parameters. The coarsened graph is created only if it comprises more than ``coarvertnbr`` vertices, or if the coarsening ratio is lower than ``coarrat``. Valid coarsening ratio values range from 0.5 (in the case of a perfect matching) to 1.0 (if no vertex could be coarsened). Classical threshold values range from 0.7 to 0.8. Raises :class:`CannotCoarsen` if not because of threshold parameters, raises :class:`LibraryError` otherwise. :param coarvertnbr: Number of vertices in the coarsened graph. :type coarvertnbr: Integer :param coarrat: Coarsening ratio. :type coarrat: Floating-point number :param flagval: The flagval flag specifies the type of coarsening :type flagval: Integer :param coargraf: Another :class:`Graph` instance, which gets modified. :type coargraf: :class:`Graph` :param coarmulttab: The vertex-to-vertex multiplicity array. If given as a list or numpy array of integers, it is updated with the returned values. :type coarmulttab: Any kind of iterable or a numpy array | .. method:: coarsen_match(coarvertnbr, coarrat, flagval, finematetab=None) The routine fills the ``finematetab`` array with a matching of the vertices of the graph itself. The matching is computed so as to minimize the sum of the weights of the matched edges. The matching is computed only if it comprises more than ``coarvertnbr`` vertices, or if the coarsening ratio is lower than ``coarrat``. Valid coarsening ratio values range from 0.5 (in the case of a perfect matching) to 1.0 (if no vertex could be coarsened). Classical threshold values range from 0.7 to 0.8. Raises :class:`CannotCoarsen` if not because of threshold parameters, raises :class:`LibraryError` otherwise. :param coarvertnbr: Number of vertices in the coarsened graph. :type coarvertnbr: Integer :param coarrat: Coarsening ratio. :type coarrat: Floating-point number :param flagval: The flagval flag specifies the type of coarsening :type flagval: Integer :param finematetab: The matching array. If given as a list or numpy array of integers, it is updated with the returned values. :type finematetab: Any kind of iterable or a numpy array :returns: The number of matched vertices. :rtype: Integer | .. method:: coarsen_build(coarvertnbr, finematetab, coargraf, coarmulttab=None) This routine builds the coarsened graph itself with respect to the given parameters. :param coarvertnbr: Number of vertices in the coarsened graph. :type coarvertnbr: Integer :param finematetab: The matching array. If given as a list or numpy array of integers, it is updated with the returned values. :type finematetab: Any kind of iterable or a numpy array :param coargraf: Another :class:`Graph` instance, which gets modified. :type coargraf: :class:`Graph` :param coarmulttab: The vertex-to-vertex multiplicity array. If given as a list or numpy array of integers, it is updated with the returned values. :type coarmulttab: Any kind of iterable or a numpy array **Various functions are defined as wrappers of Graph operations:** | .. function:: graph_alloc() Recreates the ``graphAlloc`` function, returning a non-initialized :class:`Graph` instance. It will need the :meth:`~Graph.init` method to be called before the instance be built or loaded upon. | .. function:: build_graph(*args, **kwargs) Returns a properly built graph instance. Positional and keyword arguments need to be given in the same fashion as :meth:`Graph.build` takes them. | .. function:: build_graph_from_csgraph(*args, **kwargs) Returns a graph instance built from the given scipy.csgraph matrix. Positional and keyword arguments need to be given in the same fashion as :meth:`Graph.build_from_csgraph` takes them. | .. function:: load_graph(*args, **kwargs) Returns a graph instance loaded from the given file or stream. Positional arguments need to be given in the same fashion as :meth:`Graph.load` takes them. | There is no explicit equivalent to Scotch's ``memFree`` function, since its call is included in the class destructor. To delete the ``graf`` variable and free the related graph structure before the local scope expires, simply use:: del graf However, due to how Python's garbage-collector works, the ``memFree`` function may not be called immediately. Good practices ############## All in all, the Python and ScotchPy good practices tend not to use the :meth:`~Graph.init` and :meth:`~Graph.exit` methods and the :class:`Graph` constructor. They return unfinished and *per se* unusable objects, since they are included for compatibility with the C version of Scotch. The use of the :func:`build_graph`, :func:`build_graph_from_csgraph` or :func:`load_graph` functions is therefore advised. scotchpy/doc/source/index.rst000066400000000000000000000010541505500072100166130ustar00rootroot00000000000000.. ScotchPy documentation master file, created by sphinx-quickstart on Thu Feb 25 12:54:27 2021. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. Welcome to ScotchPy's documentation! ==================================== .. toctree:: :maxdepth: 2 :caption: Contents: graph.rst dgraph.rst strat.rst arch.rst maporder.rst mesh.rst geom.rst context.rst archDom.rst misc.rst Indices and tables ================== * :ref:`genindex` * :ref:`search` scotchpy/doc/source/maporder.rst000066400000000000000000000303161505500072100173200ustar00rootroot00000000000000======================== Mapping and Ordering ======================== The Mapping class ################# .. class:: Mapping(*args) The Mapping constructor calls libscotch's ``mapAlloc`` function. Any argument is conveyed to the :meth:`~Mapping.init` method. If there are no arguments, the :meth:`~Mapping.init` method is not called. ``first`` being the argument given to the :meth:`~Mapping.init` method, the following ``func`` methods all proxy to ``first.map_func(self, *args)``, except for :meth:`~Mapping.re_compute` and :meth:`~Mapping.re_fixed_compute` which proxy the ``remap_compute`` and ``remap_fixed_compute`` methods, respectively. For now ``first`` is always a :class: `Graph` instance, can be used to factorize :class:`Mesh` routines later on. We will define the methods in the way in which they are called, using a graph :class: `Graph` instance as the calling object : | .. method:: init(first,mapp, arch, parttab) Calls ``first.map_init(first, mapp, arch, parttab)``, ``self`` being the :class:`Mapping` instance. ``first.map_init(first, mapp, arch, parttab)`` can also be called directly. :param first: The first argument is the object to be mapped. :type first: :class:`Graph` :param mapp: The mapping to be initialized. :type mapp: :class:`Mapping` :param arch: The architecture to be used for mapping. :type arch: :class:`Arch` :param parttab: The partition table. :type parttab: A numpy array | .. method:: graph.map_exit(mapp) This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Mapping.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Mapping.init` call follows. :param mapp: The mapping to be freed. :type mapp: A :class:`Mapping` | .. method:: graph.map_compute(mapp, strat) This routine computes a mapping of the API mapping structure ``mapping`` with respect to the given strategy ``strat`` . :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param strat: Strategy to be used for the mapping . :type strat: :class:`Strat` | .. method:: graph.map_fixed_compute(mapp, start) This routine computes a mapping with fixed vertices of the API mapping structure with respect to the given strategy. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: graph.remap_compute(mapp, mapo, emrval, vmlotab, start) This routine computes a remapping of the API mapping structure ``mapping`` with respect to the given strategy ``strat``. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param mapo: The already computed mapping array used to account for migration costs. :type mapo: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: graph.remap_fixed_compute(mapp, mapo, emrval, vmlotab, start) This routine computes a remapping with fixed vertices of the API mapping structure ``mapping`` with respect to the given strategy ``strat``. :param mapping: The mapping to be computed. :type mapping: :class:`Mapping` :param mapo: The already computed mapping array used to account for migration costs. :type mapo: Any kind of iterable or a numpy array :param emraval: Individual migration cost. :type emraval: Floating-point number :param vmlotab: Vertex migration cost array. :type vmlotab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the mapping. :type strat: :class:`Strat` | .. method:: graph.map_save(stream) This routine saves the contents of the given user mapping ``mapping`` to the given stream ``stream``. :param mapping: The mapping to be saved. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph.map_load(stream) This routine loads the contents of the given user mapping ``mapping`` from the given stream ``stream``. :param mapping: The mapping to be loaded. :type mapping: :class:`Mapping` :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph.map_view(*args) This routine writes mapping statistics (load of target processors, number of neigh- boring domains, average dilation and expansion, edge cut size, distribution of edge dilations) to the given stream. :param mapping: The mapping to be viewed. :type mapping: :class:`Mapping` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. function:: map_alloc() Recreates the ``mapAlloc`` function, returning a non-initialized :class:`Mapping` instance. It will need the :meth:`~Mapping.init` method to be called before the instance be built or loaded upon. The Ordering class ################## .. class:: Ordering(*args) The Ordering constructor calls libscotch's ``orderAlloc`` function. Any argument is conveyed to the :meth:`~Ordering.init` method. If there are no arguments, the :meth:`~Ordering.init` method is not called. ``first`` being the argument given to the :meth:`~Ordering.init` method, the following ``func`` methods all proxy to ``first.map_func(self, *args)``. For now ``first`` is always a :class: `Graph` instance, can be used to factorize :class:`Mesh` routines later on. We will define the methods in the way in which they are called, using a graph :class: `Graph` instance as the calling object : .. method:: init(first, ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) Calls ``first.map_init(ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None)``, ``self`` being the :class:`Mapping` instance. ``first.map_init(ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None)`` can also be called directly. :param first: The first argument is the object to be ordered. :type first: :class:`Graph` :param ordering: Ordering to be initialized. :type ordering: :class:`Ordering` :param permtab: Array holding the permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type permtab: Any kind of iterable or a numpy array :param peritab: Inverse permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type peritab: Any kind of iterable or a numpy array :param cblknbr: Number of column blocks in the block ordering. If given, the value is copied in this one. (**Optional**) :type cblknbr: Integer :param rangtab: Array of ranges for the column blocks. If given, the values of the returned array are copied in this one. (**Optional**) :type rangtab: Any kind of iterable or a numpy array :param treetab: Array of ascendants of permuted column blocks in the separators tree. If given, the values of the returned array are copied in this one. (**Optional**) :type treetab: Any kind of iterable or a numpy array | .. method:: graph.order_exit(ordering) This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Ordering.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Ordering.init` call follows. :param ordering: The ordering to be freed. :type ordering: :class:`Ordering` | .. method:: graph.order_check(ordering) This routine checks the consistency of the ordering instance. :param ordering: Ordering to be checked. :type ordering: :class:`Ordering` | .. method:: graph.order_compute(ordering, strat) This routine computes a block ordering of the graph itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. :param ordering: The ordering to be computed. :type ordering: :class:`Ordering` :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: graph.order_compute_list(ordering, listtab, strat) This routine computes a block ordering of the graph itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. The induced subgraph is described by means of a vertex list: listnbr holds the number of vertices to keep in the induced subgraph, the indices of which are given, in any order, in the ``listtab`` array. :param ordering: Ordering to be computed. :type ordering: :class:`Ordering` :param listtab: The list of vertices to keep in the induced subgraph. :type listtab: Any kind of iterable or a numpy array :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: graph.order_load(ordering, stream) This routine loads the contents of the given ordering instance ``ordering`` from the given stream ``stream``. :param ordering: Ordering to be loaded. :type ordering: :class:`Ordering` :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph.order_save(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream``. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph.order_save_map(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the Scotch mapping format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph.order_save_tree(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the tree output format format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. function:: order_alloc() Recreates the ``orderAlloc`` function, returning a non-initialized :class:`Ordering` instance. It will need the :meth:`~Ordering.init` method to be called before the instance be built or loaded upon. scotchpy/doc/source/mesh.rst000066400000000000000000000322201505500072100164370ustar00rootroot00000000000000==================================== Meshes in ScotchPy ==================================== Graphs are implemented in ScotchPy with the Mesh class. The Mesh class ############### .. class:: Mesh(init=True) The mesh constructor itself calls libscotch's ``meshAlloc`` function, and usually ``meshInit`` is called too. :param init: If True, the mesh allocation is followed by the init. If not, the :meth:`~Mesh.init` method needs to be called before :meth:`~Mesh.build` or :meth:`~Mesh.load`. The mesh object stores the arguments given to the :meth:`~Mesh.build` method as integers and numpy arrays. They are accessible even when the mesh has been constructed with :meth:`~Mesh.load`. They default to None if the argument was not given. | .. method:: init() This routine Initializes the fields of the Mesh object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling either :meth:`~Mesh.build` or :meth:`~Mesh.load`, or after calling :meth:`~Mesh.exit` in order to re-use the same Mesh instance. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Mesh.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Mesh.init` call follows. | .. method:: build(velmbas = None, vnodbas = None, velmnbr = None, vnodnbr = None, verttab = None, vendtab = None, velotab = None, vnlotab = None, vlbltab = None, edgenbr = None, edgetab = None) This routine builds the mesh itself using the given values. Arguments should be given as ints and ideally numpy arrays of ints, although any iterable would work. Mutating these arrays is not recommended as it may cause runtime errors while Scotch handles them. Some arguments may be omitted, but : - ``velmbas`` and ``vnodbas`` must be given . - if ``vnlotab`` has no size, ``velmbas``, ``velmnbr`` and ``edgenbr`` must be given. :param velmbas: Base value for mesh vertex indices. :type velmbas: Integer :param vnodbas: Base value for mesh node indices. :type vnodbas: Integer :param velmnbr: Number of mesh vertices. :type velmnbr: Integer :param vnodnbr: Number of mesh nodes. :type vnodnbr: Integer :param verttab: Adjacency index array (**Required**). :type verttab: Any iterable of integers ideally numpy array :param vendtab: Adjacency end index array of size vertnbr if disjoint from verttab (**Optional**). :type vendtab: Any iterable of integers ideally numpy array :param velotab: Vertex load array of size vertnbr (**Optional**). :type velotab: Any iterable of integers ideally numpy array :param vlbltab: Vertex label array of size vertnbr (**Optional**). :type vlbltab: Any iterable of integers ideally numpy array :param edgenbr: Number of arcs (*which is twice the number of edges*). :type edgenbr: Integer :param edgetab: Adjacency array of size edgenbr (*more if not compact*) (**Required**). :type edgetab: Any iterable of integers ideally numpy array :param edlotab: Arc load array of size edgenbr (**Optional**). :type edlotab: Any iterable of integers ideally numpy array | .. method:: load(stream, baseval=-1) This routine builds the mesh with :meth:`~Mesh.build` from data included in the given file or stream. :param stream: Input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) :param baseval: The mesh base value for index arrays(0 or 1), takes the baseval value from the ``stream`` data if -1. :type baseval: Integer | **The following routines can't be called before the mesh is properly built either with :meth:`~Mesh.build` or with :meth:`~Mesh.load`:** | .. method:: save(stream) This routine saves the mesh to the given file or stream in the Scotch mesh format. :param stream: input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: check() Runs a self-test to check data consistency after the :meth:`~Mesh.build` or :meth:`~Mesh.load` method is called, raises a :class:`LibraryError` if not. | .. method:: data(as_dict=None) This routine returns the values taken by the :meth:`~Mesh.build` method. The arrays are returned as numpy arrays. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 13-element tuple. :type as_dict: Boolean :returns: Values in this order: (``velmbas``, ``vnodbas``, ``velmnbr``, ``vnodnbr``, ``verttab``, ``vendtab``, ``velotab``, ``vnlotab``, ``vlbltab``, ``edgenbr``, ``edgetab``, ``edlotab``, ``degrnbr``). (**Not sure about the last one**) :rtype: Tuple or Dict | .. method:: size(as_dict=None) This routine returns the values of ``velmnbr``, ``vnodnbr`` and ``edgenbr`` taken by the :meth:`~Mesh.build` method. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 3-element tuple. :type as_dict: Boolean :returns: The values of ``velmnbr``, ``vnodnbr`` and ``edgenbr``. :rtype: Tuple or Dict | .. method:: graph(graf) This routine builds a graph from the mesh itself. :param graf: Graph to be built. :type graf: :class:`Graph` | .. method:: graph_dual(graf, ncomval) This routine builds the dual graph of the mesh itself. :param graf: Graph to be built. :type graf: :class:`Graph` :param ncomval: Number of components in the mesh. :type ncomval: Integer | .. method:: stat(as_dict=None) This routine gives various stats about the mesh: - ``vnlomin``, ``vnlomax``, ``vnlosum``, ``vnloavg``, ``vnloadl`` are the minimum node vertex load, the maximum node vertex load, the sum of all node vertex loads, the average node vertex load and the variance of the node vertex degrees, respectively. - ``edegmin``, ``edegmax``, ``edegavg``, ``edegdlt`` are the minimum element vertex degree, the maximum element vertex degree, the average element vertex degree and the variance of the element vertex degrees, respectively. - ``ndegmin``, ``ndegmax``, ``ndegavg``, ``ndegdlt`` are the minimum node vertex degree, the maximum node vertex degree, the average node vertex degree and the variance of the node vertex degrees, respectively. :param as_dict: If True, the requested data is returned as a dict. If not, it is returned as a 13-element tuple. :type as_dict: Boolean :returns: various stats about the mesh, in this specific order :(``vnlomin``, ``vnlomax``, ``vnlosum``, ``vnloavg``, ``vnloadl``, ``edegmin``, ``edegmax``, ``edegavg``, ``edegdlt``, ``ndegmin``, ``ndegmax``, ``ndegavg``, ``ndegdlt``). :rtype: Tuple or Dict | .. method:: order(strat=Strat(init=True), permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) This routine computes a block ordering of the unknowns of the symmetric sparse matrix the adjacency structure, which is represented by the mesh itself. :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` :param permtab: Array holding the permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type permtab: Any kind of iterable or a numpy array :param peritab: Inverse permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type peritab: Any kind of iterable or a numpy array :param cblknbr: Number of column blocks in the block ordering. If given, the value is copied in this one. (**Optional**) :type cblknbr: integer :param rangtab: Array of ranges for the column blocks. If given, the values of the returned array are copied in this one. (**Optional**) :type rangtab: Any kind of iterable or a numpy array :param treetab: Array of ascendants of permuted column blocks in the separators tree. If given, the values of the returned array are copied in this one. (**Optional**) :type treetab: Any kind of iterable or a numpy array | .. method:: order_init(ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None) This routine initializes an ordering structure with respect to the mesh itself. If called using :class:`Ordering`'s constructor however, nothing is returned. :param ordering: Ordering to be initialized. :type ordering: :class:`Ordering` :param permtab: Array holding the permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type permtab: Any kind of iterable or a numpy array :param peritab: Inverse permutation of the reordered matrix. If given, the values of the returned array are copied in this one. (**Optional**) :type peritab: Any kind of iterable or a numpy array :param cblknbr: Number of column blocks in the block ordering. If given, the value is copied in this one. (**Optional**) :type cblknbr: Integer :param rangtab: Array of ranges for the column blocks. If given, the values of the returned array are copied in this one. (**Optional**) :type rangtab: Any kind of iterable or a numpy array :param treetab: Array of ascendants of permuted column blocks in the separators tree. If given, the values of the returned array are copied in this one. (**Optional**) :type treetab: Any kind of iterable or a numpy array | .. method:: order_exit(ordering) This routine frees an ordering instance. :param ordering: Ordering to be freed. :type ordering: :class:`Ordering` | .. method:: order_check(ordering) This routine checks the consistency of the ordering instance. :param ordering: Ordering to be checked. :type ordering: :class:`Ordering` | .. method:: order_compute(ordering, strat) This routine computes a block ordering of the mesh itself with respect to the given strategy ``strat``. Stores the result in the given ordering instance ``ordering``. :param ordering: Ordering to be computed. :type ordering: :class:`Ordering` :param strat: Strategy to be used for the ordering. :type strat: :class:`Strat` | .. method:: order_save(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream``. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save_map(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the Scotch mapping format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: order_save_tree(ordering, stream) This routine saves the contents of the given ordering instance ``ordering`` to the given stream ``stream`` in the tree output format format. :param ordering: Ordering to be saved. :type ordering: :class:`Ordering` :param stream: Input file or stream to write to. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. function:: mesh_alloc() Recreates the ``meshAlloc`` function, returning a non-initialized :class:`Mesh` instance. It will need the :meth:`~Mesh.init` method to be called before the instance be built or loaded upon. | .. function:: build_mesh(*args, **kwargs) Returns a properly built mesh instance. Positional and keyword arguments need to be given in the same fashion as :meth:`Mesh.build` takes them. | .. function:: load_mesh(*args, **kwargs) Returns a mesh instance loaded from the given file or stream. Positional arguments need to be given in the same fashion as :meth:`Mesh.load` takes them. scotchpy/doc/source/misc.rst000066400000000000000000000067501505500072100164470ustar00rootroot00000000000000===================================== ScotchPy miscellaneous ===================================== ScotchPy's common functions ########################### .. function:: version(as_dict=None) This routine returns three integers as the version number(s), either as a tuple or as a dictionary. .. function:: num_sizeof() This routine returns the number of bytes taken by Scotch's internal integers. .. function:: mem_cur() This routine returns the current memory usage of Scotch. .. function:: mem_max() This routine returns the maximum memory usage of Scotch. .. function:: random_proc() This routine sets to procnum the number of the process that will be used to generate random numbers. .. function:: random_reset() This routine resets the seed of the global pseudo-random number generator used by default by the SCOTCH library. .. function:: random_seed() This routine sets the seed of the global pseudo-random number generator used by default by the SCOTCH library. .. function:: random_val() This routine returns a pseudo-random integer value between 0 and randmax-1. Exceptions ########## ScotchPy defines several exceptions. .. exception:: LibraryError Typically raised when a libscotch function would return a non-zero value to signal a failure to compute. .. exception:: CannotCoarsen Raised by :meth:`Graph.coarsen` and :meth:`Graph.coarsen_match` when no error is encountered but no further coarsening could enforce the threshold parameters. Somewhat similar to, but not a subclass of, the ``StopInteration`` built-in exception. Meant to be caught in a try-except structure. Input data format ################# A lot of methods in Scotchpy are specified to take any form of iterables containing integers. However, in libscotch, a lot of side-effects happen to these iterables. Whenever such side-effect is supposed to happen, it is guaranteed **only** with numpy arrays having the proper dtype, which is accessible as ``scotchpy.common.proper_int``. Other mutable iterables such as lists or custom types *may* be mutated in most cases but are not guaranteed to. Furthermore, when a class is built using such iterable, no side-effect whatsoever will happen to said iterables unless they are numpy arrays of the proper dtype. General names rule of thumb ########################### As Numpy is generally imported as np, Scotchpy is intended to be imported as SCOTCH. No constraint is made about that of course, but an underlying reason for it is that the name of the Scotchpy version of a C Scotch (libscotch) function can usually be found by stripping the "SCOTCH\_" prefix, converting it from CamelCase to snake_case, and try and replacing some underscores with dots. Taking SCOTCH_graphDiamPV for example, it becomes ``Graph.diam_pv``. Adding the module name imported as SCOTCH, we end up with ``SCOTCH.Graph.diam_pv``. When you master that matching, most of this documentation will become superfluous. Note that this name-resolving recipe is valid when taking the method names as attached to their respective classes. When called as instance methods, the infamous ``self`` implicit parameter will match the first argument of the related C function. .. Options .. ####### .. .. The ``options`` submodule defines several variables tuning ScotchPy's beavior. .. .. .. data:: return_as_dict .. .. Defines the default value of the ``as_dict`` argument of functions or .. methods such as :func:`version` or :meth:`Graph.data`. It defaults to True. scotchpy/doc/source/strat.rst000066400000000000000000000212201505500072100166360ustar00rootroot00000000000000======================= Partitioning Strategies ======================= The Strat class ############### .. class:: Strat(init=True) The strategy constructor itself calls libscotch's ``stratAlloc`` function, and usually ``stratInit`` is called too. :param init: If True, the graph allocation is followed by the init. If not, the :meth:`~strat.init` method needs to be called before. | .. method:: init() This routine Initializes the fields of the :class:`Strat` object instance. Called by a class constructor when ``init=True`` (by default). Mandatory before calling any routine. | .. method:: exit() This routine cleans-up all fields of the instance. Is the opposite of the :meth:`~Strat.init` routine. Called automatically when the object is destroyed. Calling explicitly this method is only required when an :meth:`~Graph.init` call follows. | .. method:: save(stream) This routine saves the strategy to the given file or stream in the form of a text string. :param stream: input file or stream to read from. :type stream: Either a file object (result of an ``open()``, don't forget to close it) or a filename, as a string or as a bytes object (such as ``b"file/name"``) | .. method:: graph_cluster_build(flagval, pwgtmax, densmin, bbalval) This routine provides predefined clustering strategies. The strategy can only be used as a mapping strategy. :param flagval: The type of clustering strategy to use. :type flagval: Integer :param pwgtmax: The maximum cluster vertex weight. :type pwgtmax: Integer :param densmin: The minimum edge density. :type densmin: Float :param bbalval: The bipartition imbalance ratio. :type bbalval: Float | .. method:: graph_map_build(flagval, partnbr, balrat) This routine fills the strategy with predefined mapping strategies. The strategy can only be used as a mapping strategy. :param flagval: The type of mapping strategy to use. :type flagval: Integer :param partnbr: The number of parts to map to. :type partnbr: Integer :param balrat: The bipartition imbalance ratio. :type balrat: Float | .. method:: graph_part_ovl_build(flagval, partnbr, balrat) This routine provides predefined overlap partitioning strategies. The strategy can only be used as a partitioning with overlap strategy. :param flagval: The type of overlap partitioning strategy to use. :type flagval: Integer :param partnbr: The number of parts to partition into. :type partnbr: Integer :param balrat: The bipartition imbalance ratio. :type balrat: Float | .. method:: graph_order_build(flagval, lvlnbr, balrat) This routine provides predefined ordering strategies. The strategy can only be used as a graph ordering strategy. :param flagval: The type of ordering strategy to use. :type flagval: Integer :param lvlnbr: The number of levels to use (When the ``SCOTCH_STRATLEVELMIN`` or ``SCOTCH_STRATLEVELMAX`` or flag is set, the value of ``lvlnbr`` is not ignored.) :type lvlnbr: Integer :param balrat: The bipartition imbalance ratio. :type balrat: Float | .. method:: mesh_order_build(flagval, balrat) This routine provides predefined ordering strategies. The strategy can only be used as a mesh ordering strategy. :param flagval: The type of ordering strategy to use. :type flagval: Integer :param balrat: The bipartition imbalance ratio. :type balrat: Float | .. method:: dgraph_cluster_build(flagval, pwgtmax, densmin, bbalval) This routine fills the strategy with predefined clustering strategies. The strategy can only be used as a distributed mapping strategy. :param flagval: The type of clustering strategy to use. :type flagval: Integer :param pwgtmax: The maximum cluster vertex weight. :type pwgtmax: Integer :param densmin: The minimum edge density. :type densmin: Float :param bbalval: The bipartition imbalance ratio. :type bbalval: Float | .. method:: dgraph_map(string) This routine parses the given distributed mapping strategy. The strategy can only be used as a distributed mapping strategy. :param string: The distributed mapping strategy. :type string: String | .. method:: dgraph_map_build(flagval, procnbr, partnbr, balrat) This routine fills the strategy with the parameters of a default mapping strategy and the given parameters. :param flagval: The type of distributed mapping strategy to use. :type flagval: Integer :param procnbr: The number of processors to map to. :type procnbr: Integer :param partnbr: The number of parts to map to. :type partnbr: Integer :param balrat: The bipartition imbalance ratio. :type balrat: Float | .. method:: dgraph_order(string) This routine parses the given distributed ordering strategy. The strategy can only be used as a distributed ordering strategy. :param string: The distributed ordering strategy. :type string: String | .. method:: dgraph_order_build(flagval, procnbr, levlnbr, balrat) This routine fills the strategy with the parameters of a default ordering strategy and the given parameters. :param flagval: The type of distributed ordering strategy to use. :type flagval: Integer :param procnbr: The number of processors to map to. :type procnbr: Integer :param levlnbr: The number of levels to use. .. method:: graph_bipart(string) This routine parses the given bipartitioning strategy. The strategy can only be used as a graph bipartitioning strategy. :param string: The graph bipartitioning strategy. :type string: String | .. method:: graph_map(string) This routine parses the given mapping strategy. The strategy can only be used as a mapping strategy. :param string: The mapping strategy. :type string: String | .. method:: graph_part_ovl(string) This routine parses the given partitioning strategy. The strategy can only be used as a partitioning with overlap strategy. :param string: The partitioning strategy. :type string: String | .. method:: graph_order(string) This routine parses the given graph ordering strategy. The strategy can only be used as a graph ordering strategy. :param string: The graph ordering strategy. :type string: String | .. method:: mesh_order(string) This routine parses the given mesh ordering strategy. The strategy can only be used as a mesh ordering strategy. :param string: The mesh ordering strategy. :type string: String | .. function:: strat_alloc() This routine ecreates the ``stratAlloc`` function, returning a non-initialized :class:`Strat` instance. It will need the :meth:`~Strat.init` method to be called before the instance be built or loaded upon. | .. function:: graph_part(graph, partnbr, strat, parttab=None) This routine computes a partition of the graph, with respect to the given strategy. :param graph: The graph to partition. :type graph: :class:`Graph` :param partnbr: The number of parts to partition into. :type partnbr: Integer :param strat: The partitioning strategy. :type strat: :class:`Strat` :param parttab: The partition array. :type parttab: :class:`numpy.ndarray` | .. function:: graph_part_fixed(graph, partnbr, strat, parttab=None) This routine computes a partition of the graph, with respect to the given strategy and the fixed vertices in ``maptab``. :param graph: The graph to partition. :type graph: :class:`Graph` :param partnbr: The number of parts to partition into. :type partnbr: Integer :param strat: The partitioning strategy. :type strat: :class:`Strat` :param parttab: The partition array. :type parttab: :class:`numpy.ndarray` | .. function:: graph_part_ovl(graph, partnbr, strat, parttab=None) This routine computes a partition with overlap of the graph, with respect to the given strategy and the fixed vertices in ``maptab``. :param graph: The graph to partition. :type graph: :class:`Graph` :param partnbr: The number of parts to partition into. :type partnbr: Integer :param strat: The partitioning strategy. :type strat: :class:`Strat` :param parttab: The partition array. :type parttab: :class:`numpy.ndarray` Further documentation about these three ``graph_part*`` functions can be found in :meth:`Graph.part`, :meth:`Graph.part_fixed` and :meth:`Graph.part_ovl`. scotchpy/examples/000077500000000000000000000000001505500072100145235ustar00rootroot00000000000000scotchpy/examples/load_part.py000066400000000000000000000042601505500072100170440ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import numpy as np import scotchpy from scotchpy.common import proper_int as scotch_num import importlib.resources as resources import os # Allocate a graph graf = scotchpy.Graph() data_dir = resources.files("scotchpy").joinpath("data") # read a graph from scotchpy data dir graf.load(os.path.join(data_dir, "m4x4.grf")) # Partition a graph into 4 parts parttab = np.zeros(graf.vertnbr, dtype=scotch_num) graf.part(partnbr = 4, parttab = parttab) # Export to dot format if scotchpy.graph._nx_found: import networkx as nx graf_nx = graf.tonx() color = { 0:"red" , 1:"green", 2:"blue", 3:"yellow"} for i in graf_nx.nodes: graf_nx.nodes[i]["color"] = color[parttab[i]] try: nx.nx_pydot.to_pydot(graf_nx).write_dot("m4x4.dot") except ModuleNotFoundError: pass scotchpy/examples/simple_map.py000066400000000000000000000051121505500072100172220ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import math import numpy as np import scotchpy from scotchpy.common import proper_int as scotchpy_int import os import importlib.resources data_dir = importlib.resources.files('scotchpy').joinpath("data") # Allocate a graph graf = scotchpy.Graph() # Load a graph from file graf.load(os.path.join(data_dir, 'm4x4.grf')) vertnbr, _ = graf.size(as_dict=False) xdimsiz = int(math.sqrt(vertnbr)) assert vertnbr == xdimsiz*xdimsiz # Initialize a strategy strat = scotchpy.Strat() strat.graph_map_build(scotchpy.STRATDEFAULT, 4, .05) # Build a complete architechure (i.e., plain partitioning) arch = scotchpy.Arch() arch.cmplt(5) # Initialize mapping... oneMap = scotchpy.Mapping() parttab = np.full(vertnbr, 0, scotchpy_int) graf.map_init(oneMap, arch, parttab) # ...and compute it graf.map_compute(oneMap, strat) graf.map_exit(oneMap) # Export to dot format if scotchpy.graph._nx_found: import networkx as nx graf_nx = graf.tonx() color = { 0:"red" , 1:"green", 2:"blue", 3:"yellow", 4:"magenta"} for i in graf_nx.nodes: graf_nx.nodes[i]["color"] = color[parttab[i]] try: nx.nx_pydot.to_pydot(graf_nx).write_dot("m4x4_5map.dot") except ModuleNotFoundError: pass scotchpy/examples/simple_part.py000066400000000000000000000044351505500072100174220ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import numpy as np import scotchpy from scotchpy.common import proper_int as scotch_num try: graf = scotchpy.Graph() except scotchpy.LibraryError: self.fail("cannot initialize graph") raise # Example from Scotch user's manual, page 59 graf.build(baseval=1, vertnbr=7, edgenbr = 24, verttab = np.array([1,4,10,13,16,19,22,25], dtype=scotch_num), edgetab = np.array([3,2,6,3,4,1,7,6,5,1,2,4,2,7,3,7,2,6,2,1,5,5,2,4], dtype=scotch_num), edlotab = np.array([1,1,1,2,2,1,2,3,3,1,2,2,2,1,2,1,3,3,3,1,3,1,2,1], dtype=scotch_num)) if scotchpy.graph._nx_found and scotchpy.graph._matplotlib_found: parttab = np.zeros(graf.vertnbr, dtype=scotch_num) graf.part(partnbr = 2, parttab = parttab) try: graf.draw(node_color = parttab, labels=dict(zip(range(1,8), [f'{i}' for i in range(1,8)]))) except ModuleNotFoundError: pass scotchpy/fixFetchAndSupressExec.patch000066400000000000000000000035151505500072100203070ustar00rootroot00000000000000diff --git a/CMakeLists.txt b/CMakeLists.txt index 60e2d4b..010f868 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,47 +125,7 @@ set(LIBPTSCOTCHERR "" CACHE STRING "Which parallel error library is linked by de # Allow for testing option(ENABLE_TESTS "Enable testing" ON) -if(ENABLE_TESTS) - enable_testing() -endif(ENABLE_TESTS) - # use GNU standard for file hierarchy installation system include(GNUInstallDirs) add_subdirectory(src) - -# Install man pages -set(scotch_man_pages -acpl.1 -amk_ccc.1 -amk_grf.1 -atst.1 -gbase.1 -gcv.1 -gdump.1 -gmap.1 -gmk_hy.1 -gmk_m2.1 -gmk_msh.1 -gmtst.1 -gord.1 -gotst.1 -gout.1 -gtst.1 -mcv.1 -mmk_m2.1 -mord.1 -mtst.1 -) -foreach(f IN LISTS scotch_man_pages) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/${f} - DESTINATION ${CMAKE_INSTALL_DATADIR}/man/man1 COMPONENT scotch) -endforeach() - -if(BUILD_PTSCOTCH) - set(ptscotch_man_pages dgmap.1 dgord.1 dgscat.1 dgtst.1) - foreach(f IN LISTS ptscotch_man_pages) - install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/${f} - DESTINATION ${CMAKE_INSTALL_DATADIR}/man/man1 COMPONENT ptscotch) - endforeach() -endif(BUILD_PTSCOTCH) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c6e21eb..b97f9b7 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -214,23 +214,6 @@ file(MAKE_DIRECTORY ${GENERATED_INCLUDE_DIR}) # Build Scotch and PT-Scotch libraries add_subdirectory(libscotch) -# Build Scotch executables -add_subdirectory(scotch) - -# Build EsMUMPS library -if(BUILD_LIBESMUMPS AND NOT USE_SUFFIX) - add_subdirectory(esmumps) -endif(BUILD_LIBESMUMPS AND NOT USE_SUFFIX) - -# Build ScotchMeTiS library -if(BUILD_LIBSCOTCHMETIS) - add_subdirectory(libscotchmetis) -endif(BUILD_LIBSCOTCHMETIS) - -# Testing -if(ENABLE_TESTS) - add_subdirectory(check) -endif(ENABLE_TESTS) #################### # Export targets # scotchpy/misc/000077500000000000000000000000001505500072100136405ustar00rootroot00000000000000scotchpy/misc/ScotchPy_110.xcf000066400000000000000000002427631505500072100164750ustar00rootroot00000000000000gimp xcf v011nnBBd path86156BZiAm6gAa*ABAa*ABAa*ABAAGAAGAAGB\hAGB\hAGB\hAGB\hAB\hAB\hAAAAAAAAEB[nB]"AyqBZAyqBZAyqBZAvAB2A*'B2AT8B2ApB*>vABABAB vXApB vXAT8B vXA*'BA path86206B] BBBB'BçHB'BçHB'BçHBBn?BBn?BBn?B[Bn?B[Bn?B[Bn?B[BۉB[BۉB[BۉBCBۉBCBۉBCBۉBBBB\eBA֋uBΒAޔBΒAޔBΒAޔB0AޔB0AޔB0AޔB0B#B0B#B0B#B1BbB~BbBW.BbB-EeBbB-EeBbB-EeBbA7BavA7B$A7ByA7B}A7B}A7B}AѵBB.9B BB BBƻ BBfyBBBBB.9BB{BBBBBfyBBƻ B{B gimp-image-grid(style solid) (fgcolor (color-rgba 0 0 0 1)) (bgcolor (color-rgba 1 1 1 1)) (xspacing 10) (yspacing 10) (spacing-unit inches) (xoffset 0) (yoffset 0) (offset-unit inches) \v DnnCalque!? "     :%$# nnPnn w )׬mU=( "&=Zs%r2"U  %6  BI|u9(mTkmmnT(nsooPp  p"p"q"r"r"3666 ͨ$ T 1.4m6=7@8Y9::u; ;<(<==B= =>>>`>?>,>">>!Ft ic ɵ c& ")j'?]zz 8H    +E's$I" c "  .!ztxxxxxxxxxxxxx x L x xWx2x4x[xxxxxB ](e~N2 | x^ A +b+#!)g   _ d rD!,,#,.,A,c,,   !`!&!["""A"x"x"x"x"x"bx"5x"8x"Xx" x" O x x$x$x$x3x"x"x"x"x"x"x"x"x"s"x"""!!,   # c"K$t'чG+䳐u\?'"")?XnDDD,+ +F++*+*) ){(('_&C%B#q"3X 3ssrqq pTpovn+TnmmlUo&8tzFH    : *  Z"7v%)77nnscotch_pattern squished!? "     %$# lnnvnn3Lde432432343233333233333233332342343233333333333333333333333332343242333323333233333233333234323423432432343 ! "! !"! 33333 33333 3333 !" !"! !33333333333333333333333 ! !"! " 3333 3333 33333 33333 !"! !" !"! "! !"! 33333233333233332342343233333333333333333333333332343242333323333233333233333234323423  33333 33333 3333 !" !"! !33333333333333333333333 ! !"! " 3333 3333 33333 33333 !"! !" !D77scotch_pattern.gif!? "     %$#xx' xW%0/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/0@@nnPython-logo-notext.svg!? "     %$# nn Dnn .<+@967677878787768&.78787#<87!67879 879 875 879 87 87983;67878789798987879878758787678768879876987 767#7#78"76"76"7#7676767 @689$87 ;8-778.778/7+807U8178279837;847857986786768676686768676988676@8867686768676857657 647 6827 627 617 6$767676 789785778776797 676!67!+xzyyxwvwvvxv&tx{yxwvu#xzyxwvu!|zyxwvuq{zyxwvux{zyxwvu}{zyxwvut|zyxwvut{zyzxwvut{zyfvxwvutyzywywvutzyvwvutszyvwwvutsyzyxvwvutszyxwwvutsyxyvutsyxyuvutsxyyxwquvutsryxwxvutsryxwvutsrwxwvutsrxwvutsrwxwvutsrqwxxwvutsrqxwvutsrq6rq6rq6rqp {zy xtqsrqp |{zyxwvutsrqp|zyxwvutsrqpzyxwvutsrqpzyxwvutsrqpoUyzyxwvutsrqpoyzyxwvutsrqpoxzyxwvutsrqpovzyxwvutsrqpozyxwvutsrqponzzyxwvutsrqpon{zyxwvutsrqpon{yxwvutsrqponwyxwvutsrqponyxwvutsrqponyxwvutsrqponmyxwvutsrqponmzyyxwvutsrqponmxyxwvutsrqponmyxwvutsrqponmxwvutsrqponmlxwvutsrqponmlxwvutsrqponmlxwvutsrqponmlxwvutsrqponmlxwvutsrqpq o lwvutsrqrwvutsrquwvutsrqp wvutsrqpwvutsrqrwvutsrqruvutsrqwvvutsrqrvutsrqrwutsrqp+&#!666   QMQN KHPQPONMLKJI`RPONMLKJIHQPONMLKJIHQPONMLKJIHQPONMLKJIHGSQPONMLKJIHGQPONMLKJIHG+ 1Kazy]B)& F#d!! $+ e e<e?n$R>m7`^ |"""""666 4IP$D '1%3s5789H9 :;;r<</=|===2>[>|>>>>>>!ﻍxhXU:T8LU;CJs9^X&+g @,7(76%769" 786! 7 737<7767776777777777767767 767 767 767 767  767 7677677 677 677 677 677 677677676767656676665663 67 67 65 67+65680 ,uvs(uts%utsq"utsrs!tsrqmtsrptsrqxtsrqtsrqpsrqpsrqpnsrqposrqpqsrqposrqporqporqporqporqponrqponqponqponqponqponqponponmnponmnponmn ponmnponmlonmlonmlonmlonmlonmlnmlklnmlklѿnmlklnmlknmlknmlkjimlkjgmlkjmlkjkmmlkjkmlkjlkjflkjhlkjhlkjlkjkUkjilikp  ,'$"!DKUJIHG JIHGFHJIHGFEUIHGFE9IHGFEDEUIHGFEDCIHGFEDCDHGFEDCBIHGFEDCBCHGFEDCB@GFEDCBAGFEDCBA@GFEDCBA@GFEDCBA@@FEDCBA@GFFEDCBA@?GFFEDCBA@?7GFEDCBA@?=FEDCBA@?>?EDCBA@?>?FEEDCBA@?>KEEDCBA@?>=EDCBA@?>=DEDCBA@?>=CEDCBA@?>=<FEDCBA@?>=< BEEDCBA@?>=< GEDCBA@?>=<HFHFEDCBA@?>=<;HGFEDCBA@?>=<;HGFEDCBA@?>=<;HGFEDCBA@?>=<;GFEDCBA@?>=<;:GFEDCBA@?>=<;:GFEDCBA@?>=<;:;GFEDCBA@?>=<;:8,ԣs3'G$q " Y!   K%c ͏6  9  DoV~nZX*K>~?e (% S X 5pO؛?9UK7W  =UXiy!,,,,,,y,W876";7"7:#7#67#37#7#87#U7#67#+7#7#7#U7#+76#@8 76#8 76# 676#@<3$$$##############""!! !"$',tutsrqvutsrqouutsrqptutsrqptsrqpwtsrqpotsrqpousrqpoUsrqposrqposrqposrqposrqponUqrqponrqponrqqponopon qpponm`if$$$!"$',QPONMLKJIHGOPPONMLKJIHGFUPONMLKJIHGFNPPONMLKJIHGFPONMLKJIHGFONMLKJIHGFEPOONMLKJIHGFEONMLKJIHGFEONMLKJIHGFEDMNMLKJIHGFEDMNNMLKJIHGFEDMNMLKJIHGFEDMLKJIHGFEDCMLKJIHGFEDCMLKJIHGFEDCMLKJIHGFEDCBLKJIHGFEDCB LKJIHGFE DLKJIHGFED$LKJIHGFED$LKKJIHGFED$LKJIHGFEDCDDBALJIHGFEDCBA@JIHGFEDCBA@JIHGFEDCBA@JIHGFEDCBA@JIHGFEDCBA@?JIIHGFEDCBA@?JIHGFEDCBA@?JHGFEDCBA@?>HGFEDCBA@?>HGFEDCBA@?>IHGFEDCBA@?>IGFEDCBA@?>=HGGFEDCBA@?>=GFEDCBA@?>=EFEDCBA@?>=<EFEDCBA@?>=<KEDCBA@?>=<GEDCBA@?>=<IDCBA@?>=<;!CBA@?>=<;"9CBA@?>=<;%CA@?>=<;(>??@@?>=<;:,IA@=??>=>=<:;:;@zB! E!!."Z]"q""W""q""E"""" "7 " 4D$$$"""""""""""e"'"!N! !X" o$E'1q,'@\vv_J,,+++**)(('%$"     ! #&+ȿ Ͽȶ!#&+FEDCBA@?>=<;:9:FFEDCBA@?>=<;:9UFEDCBA@?>=<;:98FEDCBA@?>=<;:9EDCBA@?>=<;:95EEDCBA@?>=<;:9EDCBA@?>=<;:98DCBA@?>=<;:98<DCBA@?>=<;:989DCBA@?>=<;:98.DCBA@?>=<;:987CBA@?>=<;:987CBA@?>=<;:987@CBA@?>=<;:987@BA@?>=<;:987BA@?>=<;:98:BA@?>=<;:989 D @ <8:997@?>=<;@?>=<;:@?>=<;:@?>=<;<?>=<;9?>=<;:9?>=<;:;>=@<;:9>?<;:98>;:98>=:9:=>9::98=;::989=<9:987<=;:987<;3;987<;9:9876<;:9873;:9868;:986;:987I:985!:987#:969&<3+,0+++x++**n))y( 'J'&%#o!#х$ DOG1y^]7k?R$mAe=b h ) ! !`#ݳB &/ +77nnMasque de sélection!? " & EnnEEnnEEEE  D77scotchpy/misc/ScotchPy_128.xcf000066400000000000000000001637671505500072100165140ustar00rootroot00000000000000gimp xcf v011BBd path86156B~'AZ6fBBK'AbBK'AbBK'AbBp?A Bp?A Bp?A B|B BB>|B BB>|B5/BӅBRBӅBzߡBӅBIBӅBIBӅBIBӅBBCBBfBBljKBBBBBBACBBCgBBCgB@B@ B@B 0B@BUBBBBBJBBFBUBFB 0BFB@ BJBCggimp-image-grid(style solid) (fgcolor (color-rgba 0 0 0 1)) (bgcolor (color-rgba 1 1 1 1)) (xspacing 10) (yspacing 10) (spacing-unit inches) (xoffset 0) (yoffset 0) (offset-unit inches) 9Calque!? "     :%$#   1իt^H." -ؗX) )j'!%$5#"!!A  E4 euZ 0D*         <$ iO 8)         :"՗hO<;*D $0 2(4 5678J9:":; ;<`< <==B= =>>>o>M>6>,>">>&I}$I"%4Lf3 Fw. K+ d)T'%F$)#-"]"!1! x A (                  i fg   I  @    u t    5    -$5vF&_^)xj2{."lNC5\+4!1e w!2""4 n ܚc/  1(a3?Lj#+u5os'\]$Ct2$0    9   s }    A  L   h fi                  & ? u  /!"[",#($E%'T)f +M .zI 3溟hM6)"E$í{G&>>#>.>8>Q>q>>>= =F==<<f<;";:!:9H87654*2 0) *D=>Qk":         ,9 Qi '<        *@1 Yrh 3A  G!!"#;$%&'m* -\-""1J_x1@@scotch_pattern.gif!? "     %$#-7\_0/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/00/030/030/3333/333333/33333/3333/030/030/0333333333333333333333333333333330/030/0303333/3333/333333/33333//030/030/0@@Python-logo-notext.svg!? "     %$#Hl3358868678.:78 7*U8898 7(798 7&9 8 7$+9 8 7#: 87"9 87!. 87!9 87 6 897 8936 7 875 7 89 7 83 7 87 @ 7 87 0 7 8798 7 878 7 876 7 87=:8 7 87 7 7 7 7 7 7 737889)7 U98*7 798+7:78,778-7:8.7 8/73807817982783798478577867877I88798978:7988;7@88<78=79>78=76=76<76;768976976876)7857:<%768@3f{y{ywxwxxyw.yzyxw*U|yyzzyxw(|yzyxw&yzyxw${zyxw#{zyxwv"{zyxwv!t{zyxwv!zyxwv |zyzxwvxwv zys|xxwv zy{wvu {zyxvwvu zyuwvu zy wwvu zy pwvu yxwwvu yxuvut yxyuvut yxwysuvut yxwvut yxwvut xwvut xwvuts xwvuts xwvuts xwvuts xwvutszyyzx v usq Uy{zyxwvutsr {zyxwvutsrzyxwvutsrq{zyxwvutsrqyzyxwvutsrqzyxwvutsrqwzyxwvutsrqzyxwvutsrqyzyxwvutsrqpzyxwvutsrqpzyxwvutsrqpzyxwvutsrqp{zyxwvutsrqpzyxwvutsrqpmyxwvutsrqpoyxwvutsrqpoyxwvutsrqpoyxwvutsrqpoyxwvutsrqpovyyxwvutsrqpoyxwvutsrqponzxwvutsrqponwxwvutsrqponxwvutsrqponxwvutsrqponxwvutsrqponxwvutsrqponmxwvutsrqponmwvutsrqpoosiwvutsrqr3.*(&$#"!!                       37Mc|.T *D(%&($~#"! ! !@-E !  Yy  %     -M  _~  ˸        An, P/ S2485962789P::^;;8<<<?=|===)>L>m>>>>>>>&R>.$W6767505 7875+/763,76*7(76&78%7$78#78"764!7!73 76 78 7 7 7 7 7 7 7 7 7 76 76 76 76 76 876 876 876 876 7 6 7 6 7 67 67 67676 76 76 76 76 767676765767767765763776769656764656: 65U 65@!673" <@ $%xvwvvwvuwp5wvtuuvs/wvutp,wvut)wvutsr(vutsq&vutsr%vutsrs#vutsrq#vutsrqr"vutsrqo!utsrq!utsrqpo utsrqpo utsrqpq utsrqp utsrqp tsrqp tsrqpo tsrqpo tsrqpo tsrqpo tsrqpo srqpon srqpon srqpon srqpon srqpon srqpon rqponm rqponm rqponm rqponmrqponm rqponm qponmkqponmlkqponmlkqponmlkqponmlkqponmlkponmlkponmlkponmlkponmlkponmlkponmlklonmlkjonmlkjonmlkjkonmlkjoonmlkjfonmlkjknmlkjkjnmlkjnmlkjmnmlkjinmlkjnmlkjkmlkjUmlkjkjmlkjim ij 5/,)'&%#""!!                    JKIHJIHGFGG JIHGFI JIHGFECJIHGFEIHGFEDCIHGFEDBIHGFEDCBIHGFEDCHGFEDCBAHGFEDCBUHGFEDCBAHGFEDCBAGFEDCBAGFEDCBAGFEDCBA@GFEDCBA@IFEDCBA@HFEDCBA@?FEDCBA@?FEDCBA@?FEDCBA@?@EDCBA@?>=EDCBA@?>=EDCBA@?>=FEEDCBA@?>=NEEDCBA@?>=EDCBA@?>=FEDCBA@?>=EDCBA@?>=< UEEDCBA@?>=<GDEDCBA@?>=#EEDCBA@?>%EDCBA@?>&CECBA@?>(CBA@?>)ACBBA@?>=,@A@?>=/3A@?>=57=@>=>><>="<   Y(jd mo "Y3*wnY:( Z,?kt&1TQ DleA  # %Or wu                   y !!!)"o"#%o&5'\)J,b/3d 5*D^u(>>>==<<<;::98764 3 0                   !!"#$&(*. 3   ̿                     !!"#ȿ$&(*.ȿ3MFEDCBA@?>=<KJGIEFGFEDCBA@?>=<;KJIHGFEDCBA@?>=<;KJIHGFEDCBA@?>=<;KJIHGFEDCBA@?>=<;JIHGFEDCBA@?>=<;:JIHGFEDCBA@?>=<;:9JJIHGFEDCBA@?>=<;:JIHGFEDCBA@?>=<;:IHGFEDCBA@?>=<;:9IHGFEDCBA@?>=<;:9;IIHGFEDCBA@?>=<;:9UIHGFEDCBA@?>=<;:98HGFEDCBA@?>=<;:9HGFEDCBA@?>=<;:9HHGFEDCBA@?>=<;:983HGFEDCBA@?>=<;:98GFEDCBA@?>=<;:986GFEDCBA@?>=<;:989GFEDCBA@?>=<;:987GFEDCBA@?>=<;:98FEDCBA@?>=<;:987FEDCBA@?>=<;:98FEDCBA@?>=<;:9897FEDCBA@?>=<;:986FEDCBA@?>=<;:989EDCBA@?>=<;:986EDCBA@?>=<;:98=EDCBA@?>=<;:987 EDCBA@?>=<;:9879 DCA?><:9897@CBA@?>=< CBA@?>=<; CBA@?>=<; BA@?>=<; BA@?>=<; BA@?>=<;: BA@?>=<;:; A@?>=<;: A@?>@;<<;: A@?>?<;:9 A@?>;:9 @?>=;:9 @?>=D :9: @?>=@ :98 @?>=@@::98 ?>=<:989 ?>=<>@98 ?>=<7;98 ?>=<;<99;;:9875 >=<;:987!>=<;:9879!>=<;:9876;">=<;:9873#>=<;:987@$=<;:989&=<;:9896(=<;:986+=<;:9:93.<=<<::;::;7@3 [$/?U&>>>>>>>j>H>'===x=:<<<4;;X::J987/665442O /L +l<       и  z^  J.     $  w\  " G-A ! !"#y$$&!(ґB* өQ.y`K43@@scotchpy/pyproject.toml.in000066400000000000000000000033311505500072100162260ustar00rootroot00000000000000[build-system] requires = [ "scikit-build-core" ] build-backend = "scikit_build_core.build" [project] name = "@PACKAGE_NAME@" version = "1.0.0" dynamic = [ "dependencies" ] requires-python = ">=3.10" authors = [ {name = 'Pierre PAVIA'}, {name = 'Aymen ALI YAHIA', email = 'aymenali.aay@gmail.com'}, {name = 'Marc FUENTES', email = 'marc.fuentes@inria.fr'}, {name = 'Francois PELLEGRINI', email ='francois.pellegrini@u-bordeaux.fr'} ] maintainers = [ {name = 'Marc Fuentes', email ='marc.fuentes@inria.fr'} ] readme = 'README.md' license = "BSD-2-Clause" license-files = [ "LICENSE.txt" ] keywords = [ "graph", "partitioning", "mapping", "reordering", "sparse matrix" ] description = 'The official Python interface to the Scotch and PT-Scotch graph partitioning libraries' classifiers = [ "Intended Audience :: Science/Research", "Intended Audience :: Developers", "Programming Language :: C", "Programming Language :: Python", "Topic :: Software Development", "Topic :: Scientific/Engineering", "Development Status :: 4 - Beta", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: Implementation :: CPython", ] [tool.scikit-build] cmake.minimum-version = "3.17.2" ninja.make-fallback = true wheel.packages = [ "scotchpy" ] cmake.args = [ "-DBUILD_SHARED_LIBS=ON", "-DINTSIZE=@INTSIZE@", "-DBUILD_PTSCOTCH=@PTSCOTCH@", "-DENABLE_TESTS=OFF", "-DBUILD_LIBESMUMPS=OFF", "-DBUILD_LIBSCOTCHMETIS=OFF" ] build.verbose = true install.strip = false [tool.cibuildwheel.linux] skip = [ "*-musllinux_*" ] archs = [ "auto" ] @BEFORE_ALL@ scotchpy/scotchpy/000077500000000000000000000000001505500072100145415ustar00rootroot00000000000000scotchpy/scotchpy/__init__.py000066400000000000000000000044551505500072100166620ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib, scotch_minimal_version from .common import version from .exception import * if version() < scotch_minimal_version: raise LibraryError(msg="the SCOTCH library version " +".".join(map(str,version())) +" is not >= to " +".".join(map(str,scotch_minimal_version))) from .graph import * from .strat import * from .arch import * from .maporder import * from .context import * from .mesh import * from .common import num_sizeof, version from pathlib import Path import warnings STRATDEFAULT = 0x00000 STRATQUALITY = 0x00001 STRATSPEED = 0x00002 STRATBALANCE = 0x00004 STRATSAFETY = 0x00008 STRATSCALABILITY = 0x00010 STRATRECURSIVE = 0x00100 STRATREMAP = 0x00200 STRATLEVELMAX = 0x01000 STRATLEVELMIN = 0x02000 STRATLEAFSIMPLE = 0x04000 STRATSEPASIMPLE = 0x08000 STRATDISCONNECTED = 0x10000 scotchpy/scotchpy/arch.py000066400000000000000000000261301505500072100160320ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common from .exception import LibraryError def arch_alloc(): return Arch(init=False) class Arch: """docstring for Arch""" class _ArchStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_archSizeof())] _exitval = True _sub_arch = None def __init__(self, init=True): _common.libscotch.SCOTCH_archAlloc.restype = ctypes.POINTER(self._ArchStruct) archptr = _common.libscotch.SCOTCH_archAlloc() self._archptr = archptr if init: self.init() def init(self): if not self._exitval: self.exit() self._exitval = False _common.libscotch.SCOTCH_archInit(self._archptr) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._archptr) def exit(self): if not self._exitval: self._sub_arch = None _common.libscotch.SCOTCH_archExit(self._archptr) self._exitval = True def load(self, stream): """ `stream` being either a file object (result of an `open()`, don't forget to close it) or a filename, as a string or as a bytes object (such as b"file/name"). """ if isinstance(stream, (str, bytes)): with open(stream) as st: return self.load(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_archLoad(self._archptr, filep): raise LibraryError("archLoad") _common.libc.fflush(filep) _common.libc.fclose(filep) def save(self, stream): """ `stream` being either a file object (result of an `open()`, don't forget to close it) or a filename, as a string or as a bytes object (such as b"file/name"). """ if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.save(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_archSave(self._archptr, filep): raise LibraryError("archSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def name(self): """ Returns a string giving the name of the arch. """ _common.libscotch.SCOTCH_archName.restype = ctypes.c_char_p return _common.libscotch.SCOTCH_archName(self._archptr).value.decode() def size(self): """ Returns the number of nodes of the given architecture as a SCOTCH_Num. """ return _common.libscotch.SCOTCH_archSize(self._archptr) def build(self, graf, listtab, strat): """ The listnbr arg is omitted and taken from listtab's length. """ if _common.libscotch.SCOTCH_archBuild( self._archptr, graf._grafptr, _common.proper_int(len(listtab)), _common.array_to_pointer(listtab), strat._straptr, ): raise LibraryError("archBuild") def build0(self, graf, listtab, strat): """ The listnbr arg is omitted and taken from listtab's length. """ if _common.libscotch.SCOTCH_archBuild0( self._archptr, graf._grafptr, _common.proper_int(len(listtab)), _common.array_to_pointer(listtab), strat._straptr, ): raise LibraryError("archBuild0") def build2(self, graf, listtab): """ The listnbr arg is omitted and taken from listtab's length. """ if _common.libscotch.SCOTCH_archBuild2( self._archptr, graf._grafptr, _common.proper_int(len(listtab)), _common.array_to_pointer(listtab), ): raise LibraryError("archBuild2") def cmplt(self, vertnbr): if _common.libscotch.SCOTCH_archCmplt( self._archptr, _common.proper_int(vertnbr) ): raise LibraryError("archCmplt") def cmpltw(self, velotab): """ The vertnbr arg is omitted and taken from velotab's length. """ if _common.libscotch.SCOTCH_archCmpltw( self._archptr, _common.proper_int(len(velotab)), _common.array_to_pointer(velotab), ): raise LibraryError("archCmpltw") def hcub(self, hdimval): if _common.libscotch.SCOTCH_archHcub( self._archptr, _common.proper_int(hdimval) ): raise LibraryError("archHcub") def ltleaf(self, sizetab, linktab, permtab): """ The levlnbr and permnbr args are omitted and taken from sizetab's and permtab's lengths, respectively. """ if _common.libscotch.SCOTCH_archLtleaf( self._archptr, _common.proper_int(len(sizetab)), _common.array_to_pointer(sizetab), _common.array_to_pointer(linktab), _common.proper_int(len(permtab)), _common.array_to_pointer(permtab), ): raise LibraryError("archLtLeaf") def mesh(self, *args): """ A generalized version of mesh2, mesh3 and meshX - it's almost meshX, but the integers don't have to be wrapped in an iterable and must be given ore after the other. """ if len(args) == 2: return self.mesh2(*args) elif len(args) == 3: return self.mesh3(*args) else: return self.meshX(args) def mesh2(self, xdimval, ydimval): if _common.libscotch.SCOTCH_archMesh2( self._archptr, _common.proper_int(xdimval), _common.proper_int(ydimval) ): raise LibraryError("archMesh2") def mesh3(self, xdimval, ydimval, zdimval): if _common.libscotch.SCOTCH_archMesh3( self._archptr, _common.proper_int(xdimval), _common.proper_int(ydimval), _common.proper_int(zdimval), ): raise LibraryError("archMesh3") def meshX(self, dimntab): """ The dimnbr arg is omitted and taken from dimntab's length. """ if _common.libscotch.SCOTCH_archMeshX( self._archptr, _common.proper_int(len(dimntab)), _common.array_to_pointer(dimntab), ): raise LibraryError("archMeshX") def sub(self, orgarch, vnumtab): """ The vnumnbr arg is omitted and taken from vnumtab's length. """ self._sub_arch = orgarch if _common.libscotch.SCOTCH_archSub( self._archptr, orgarch._archptr, _common.proper_int(len(vnumtab)), _common.array_to_pointer(vnumtab), ): raise LibraryError("archSub") def tleaf(self, sizetab, linktab): """ The levlnbr arg is omitted and taken from sizetab's length. """ if _common.libscotch.SCOTCH_archTleaf( self._archptr, _common.proper_int(len(sizetab)), _common.array_to_pointer(sizetab), _common.array_to_pointer(linktab), ): raise LibraryError("archTleaf") def torus(self, *args): if len(args) == 2: return self.torus2(*args) elif len(args) == 3: return self.torus3(*args) else: return self.torusX(args) def torus2(self, xdimval, ydimval): if _common.libscotch.SCOTCH_archTorus2( self._archptr, _common.proper_int(xdimval), _common.proper_int(ydimval) ): raise LibraryError("archTorus2") def torus3(self, xdimval, ydimval, zdimval): if _common.libscotch.SCOTCH_archTorus3( self._archptr, _common.proper_int(xdimval), _common.proper_int(ydimval), _common.proper_int(zdimval), ): raise LibraryError("archTorus3") def torusX(self, dimntab): """ The dimnbr arg is omitted and taken from dimntab's length. """ if _common.libscotch.SCOTCH_archTorusX( self._archptr, _common.proper_int(len(dimntab)), _common.array_to_pointer(dimntab), ): raise LibraryError("archTorusX") def vhcub(self): if _common.libscotch.SCOTCH_archVhcub(self._archptr): raise LibraryError("archVhcub") def vcmplt(self): if _common.libscotch.SCOTCH_archVcmplt(self._archptr): raise LibraryError("archVcmplt") def dom_size(self, domn): return _common.libscotch.SCOTCH_archDomSize(self._archptr, domn.archdomptr) def dom_wght(self, domn): return _common.libscotch.SCOTCH_archDomWght(self._archptr, domn.archdomptr) def dom_dist(self, domn0, domn1): return _common.libscotch.SCOTCH_archDomDist( self._archptr, domn0.archdomptr, domn1.archdomptr ) def dom_frst(self, domn): if _common.libscotch.SCOTCH_archDomFrst(self._archptr, domn.archdomptr): raise LibraryError("archDomFrst") def dom_term(self, domn, domnum): if _common.libscotch.SCOTCH_archDomTerm( self._archptr, domn.archdomptr, _common.proper_int(domnum) ): raise LibraryError("archDomTerm") def dom_num(self, domn): return _common.libscotch.SCOTCH_archDomNum(self._archptr, domn.archdomptr) def dom_bipart(self, domn, domn0, domn1): if _common.libscotch.SCOTCH_archDomBipart( self._archptr, domn.archdomptr, domn0.archdomptr, domn1.archdomptr ): raise LibraryError("archDomBipart") scotchpy/scotchpy/archDom.py000066400000000000000000000041201505500072100164650ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common from .exception import LibraryError def archDom_alloc(): return ArchDom(init=False) class ArchDom: """docstring for ArchDom""" class _ArchDomStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_archDomSizeof())] def __init__(self): _common.libscotch.SCOTCH_archDomAlloc.restype = ctypes.POINTER( self._ArchDomStruct ) archdomptr = _common.libscotch.SCOTCH_archDomAlloc() self._archdomptr = archdomptr def __del__(self): _common.libscotch.SCOTCH_memFree(self._archdomptr) scotchpy/scotchpy/common.py000066400000000000000000000172121505500072100164060ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import os from collections.abc import Iterable import ctypes from ctypes.util import find_library import numpy as np from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib, _libptscotch_mpi4py_lib from .exception import LibraryError from .exception import last_error_msg as _last_error_msg # Set up the call in case of error def print_scotch(string): _last_error_msg.append("Inside Python %s " % string.decode("utf-8")) lib_call_back = ctypes.PyDLL(_scotchpy_err_lib) CallBackType = ctypes.CFUNCTYPE(None, ctypes.c_char_p) setCallBack = lib_call_back.setCallBack setCallBack.argtype = CallBackType setCallBack.restype = None callback = CallBackType(print_scotch) setCallBack(callback) ctypes.CDLL(_scotchpy_err_lib, mode=ctypes.RTLD_GLOBAL) libscotch = ctypes.CDLL(_scotch_lib) # When using PT-Scotch if _ptscotch_lib: libptscotch = ctypes.CDLL(_ptscotch_lib) if _libptscotch_mpi4py_lib: libhelper = ctypes.CDLL(_libptscotch_mpi4py_lib) else: raise Exception("the extension liptscotch_mpi4py is not found") print(f"Warning: MPI helper not found. PT-ScotchPy routines will not work.") # To call classic C functions such as fopen() libc = ctypes.CDLL(find_library("c")) class FILE(ctypes.Structure): pass FILE_p = ctypes.POINTER(FILE) libc.fdopen.argtypes = ctypes.c_int, ctypes.c_char_p libc.fdopen.restype = FILE_p libc.fclose.argtype = FILE_p libc.fclose.restype = ctypes.c_int libc.dup.argtype = ctypes.c_int libc.dup.restype = ctypes.c_int def num_sizeof(): # num_sizeof() is libscotch.SCOTCH_numSizeof() return libscotch.SCOTCH_numSizeof() proper_int_size = 8 * num_sizeof() # 32 or 64 proper_int = getattr(ctypes, "c_int" + str(proper_int_size)) import warnings if (np.arange(1).dtype.name[3:] != str(proper_int_size)): warnings.warn("Warning: (proper_int_size) {} != {} (dtype default value) ".format(np.zeros(1).dtype.name[5:], str(proper_int_size))) # When properly implemented as library-wide constants in libscotch, define as: # COARSENNONE = ctypes.c_long.in_dll(_libscotch, "COARSENNONE").value # and decomment _libscotch import COARSENNONE = 0x0000 COARSENFOLD = 0x0100 COARSENFOLDDUP = 0x0300 COARSENNOMERGE = 0x4000 def version(as_dict=False): """ This routine returns the version number, release number and patch level of the SCOTCH library. """ vers, rela, patc = proper_int(), proper_int(), proper_int() libscotch.SCOTCH_version(ctypes.byref(vers), ctypes.byref(rela), ctypes.byref(patc)) rv = (vers.value, rela.value, patc.value) if as_dict: rv = dict(zip(("versnbr", "relanbr", "patcnbr"), rv)) return rv def mem_cur(): """ This routine returns the current memory usage. """ return libscotch.SCOTCH_memCur() def mem_max(): """ This routine returns the maximum memory usage. """ return libscotch.SCOTCH_memMax() def random_proc(procnum): """ This routine sets to procnum the number of the process that will be used to generate random numbers. """ libscotch.SCOTCH_randomProc(proper_int(procnum)) def random_reset(): """ This routine resets the seed of the global pseudo-random number generator used by default by the SCOTCH library. """ libscotch.SCOTCH_randomReset() def random_seed(seedval): """ This routine sets the seed of the global pseudo-random number generator used by default by the SCOTCH library. """ libscotch.SCOTCH_randomSeed(proper_int(seedval)) def random_val(randmax): """ This routine returns a pseudo-random integer value between 0 and randmax-1. """ return libscotch.SCOTCH_randomVal(proper_int(randmax)) def properly_format(ite): """ Turns an Iterable in a numpy array whose dtype is proper_int. If something other than None or an Iterable is given, it is alleged to be a ctypes array and returned as is. """ if ite is None: return None if not isinstance(ite, Iterable): return ite # np.array returns an instance of np.ndarray # copy=False creates a new object only if necessary return np.asarray(ite, dtype=proper_int) # turns floats in neat proper_ints, and raises an error if overflows occur def array_to_pointer(arr): """ Turns an np.ndarray or any iterable into a ctypes pointer. If something else is given (None or a ctypes array for example), it's returned as is. """ if isinstance(arr, (np.ndarray, Iterable)): return properly_format(arr).ctypes.data_as(ctypes.POINTER(proper_int)) return arr def array_to_c_array(arr, length=None): """ Turns any iterable into a ctypes array of given length. If None is given, the array will be empty. If something else is given (a ctypes array for example), it's returned as is. There will be no possible side-effect between the array and the initial arr. """ if length is None: length = len(arr) if arr is None: arr = () if isinstance(arr, (np.ndarray, Iterable)): return (proper_int * length)(*arr) return arr # The following function wrappers remain untested # for direct C function wrapping # and they probably won't work in python2 def wrap(clbl, **kwargz): """ Returns a callable with `clbl`'s behavior but for key : val in kwargs, the key attribute of the returned callable will be set to val. """ def func(*args, **kwargs): return clbl(*args, **kwargs) for key, val in kwargz.items(): setattr(func, key, val) # since python3's repr uses __qualname__ instead of __name__ func.__qualname__ = func.__name__ return func def testwrap(clbl): """ Returns a callable which calls clbl and raises a LibraryError if the returned value is other than 0. """ def func(*args, **kwargs): if clbl(*args, **kwargs): raise LibraryError return 0 func.__name__ = clbl.__name__[6:] # Since python3's repr uses __qualname__ instead of __name__ func.__qualname__ = func.__name__ return func def curry(clbl, *argz, **kwargz): """ Returns a callable which calls clbl. The arguments in that call are both the set argz and kwargz arguments and the call-given arguments. """ def func(*args, **kwargs): return clbl(*argz, *args, **kwargz, **kwargs) return func scotchpy/scotchpy/context.py000066400000000000000000000115331505500072100166020ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common from .exception import LibraryError def context_alloc(): return Context(init=False) class Context: """docstring for Context""" class SCOTCH_Context(ctypes.Structure): _fields_ = [ ("dummy", ctypes.c_double * _common.libscotch.SCOTCH_contextSizeof()) ] # sizeof(SCOTCH_Context) is 3 * sizeof(double) _exitval = True def __init__(self, init=True): _common.libscotch.SCOTCH_contextAlloc.restype = ctypes.POINTER( self.SCOTCH_Context ) contextptr = _common.libscotch.SCOTCH_contextAlloc() self._contextptr = contextptr if init: self.init() def init(self): if not self._exitval: self.exit() self._exitval = False _common.libscotch.SCOTCH_contextInit(self._contextptr) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._contextptr) def exit(self): if not self._exitval: _common.libscotch.SCOTCH_contextExit(self._contextptr) self._exitval = True def option_get_num(self, optinum, optival): if _common.libscotch.SCOTCH_contextOptionGetNum( self._contextptr, _common.proper_int(optinum), _common.proper_int(optival) ): raise LibraryError("contextOptionGetNum") def option_set_num(self, optinum, optival): if _common.libscotch.SCOTCH_contextOptionSetNum( self._contextptr, _common.proper_int(optinum), _common.proper_int(optival) ): raise LibraryError("contextOptionSetNum") def random_clone(self): if _common.libscotch.SCOTCH_contextRandomClone(self._contextptr): raise LibraryError("randomClone") def random_reset(self): if _common.libscotch.SCOTCH_contextRandomReset(self._contextptr): raise LibraryError("randomReset") def random_seed(self, seedval): if _common.libscotch.SCOTCH_contextRandomSeed( self._contextptr, _common.proper_int(seedval) ): raise LibraryError("randomSeed") def thread_import1(self, thrdnbr): if _common.libscotch.SCOTCH_contextThreadImport1( self._contextptr, _common.proper_int(thrdnbr) ): raise LibraryError("threadImport1") def thread_import2(self, thrdnum): if _common.libscotch.SCOTCH_contextThreadImport2( self._contextptr, _common.proper_int(thrdnum) ): raise LibraryError("threadImport2") def thread_spawn(self, thrdnbr, coretab): coretabnew = _common.properly_format(coretab) if _common.libscotch.SCOTCH_contextThreadSpawn( self._contextptr, _common.proper_int(thrdnbr), coretabnew ): raise LibraryError("threadSpawn") def bind_graph(self, orggraf, cntgraf): if _common.libscotch.SCOTCH_contextBindGraph( self._contextptr, orggraf._grafptr, cntgraf._grafptr ): raise LibraryError("bindGraph") def bind_mesh(self, orgmeshptr, cntmeshptr): if _common.libscotch.SCOTCH_meshBind(self._contextptr, orgmeshptr, cntmeshptr): raise LibraryError("meshBind") def bind_dgraph(self, orggrafptr, cntgrafptr): if _common.libscotch.SCOTCH_dgraphBind( self._contextptr, orggrafptr, cntgrafptr ): raise LibraryError("dgraphBind") scotchpy/scotchpy/data/000077500000000000000000000000001505500072100154525ustar00rootroot00000000000000scotchpy/scotchpy/data/bump.grf000066400000000000000000011214351505500072100171240ustar00rootroot000000000000000 9800 57978 0 000 3 413 407 6 4 9771 43 9772 44 4 76 1474 1475 77 3 1242 147 148 3 693 206 207 3 521 348 349 4 7 412 413 0 4 6 412 8 647 4 9 3238 647 7 4 3235 3238 8 10 4 11 3233 3235 9 4 3234 3233 10 12 4 3684 3234 11 13 4 14 418 3684 12 4 15 417 418 13 4 14 417 16 3088 4 17 3086 3088 15 4 16 3086 3087 18 4 3087 17 3095 19 4 3095 18 3096 20 4 21 414 3096 19 4 20 414 1171 22 4 1171 21 1172 23 4 1172 22 1173 24 4 1173 23 1526 25 4 1526 24 26 9781 4 27 3852 9781 25 4 28 2179 3852 26 4 27 2179 2180 29 4 2180 28 30 2503 4 31 2505 2503 29 4 2508 2505 30 32 4 3330 2508 33 31 4 3330 32 3331 34 4 35 2248 3331 33 4 34 2248 2249 36 4 2249 35 2250 37 4 38 416 2250 36 4 39 415 416 37 4 38 415 2194 40 4 2194 39 2195 41 4 2195 40 2196 42 3 2196 41 43 4 42 2196 9771 1 4 9769 9772 1 45 4 46 9768 9769 44 4 47 427 9768 45 4 48 426 427 46 4 47 426 49 411 4 50 410 411 48 4 49 410 51 421 4 50 421 422 52 4 422 51 4650 53 4 4650 52 4651 54 4 4657 4651 53 55 4 5380 4657 54 56 4 57 430 5380 55 4 56 430 429 58 4 59 408 429 57 4 58 408 2218 60 4 2218 59 2219 61 4 2219 60 2220 62 4 2220 61 2221 63 4 2221 62 2222 64 4 6701 2222 63 65 4 6701 64 6703 66 4 6703 65 3505 67 4 68 3452 3505 66 4 69 3451 3452 67 4 3441 3451 68 70 4 71 2491 3441 69 4 70 2491 2492 72 4 73 409 2492 71 4 72 409 74 428 4 73 428 75 1603 4 74 1603 1604 76 4 2 1474 1604 75 4 1475 2 1476 78 4 1476 77 1477 79 4 1477 78 1478 80 4 1478 79 1479 81 4 1479 80 1480 82 4 1480 81 1481 83 4 1481 82 1482 84 4 1482 83 1483 85 4 86 1160 1483 84 4 85 1160 1161 87 4 1161 86 1162 88 4 1162 87 1163 89 4 1163 88 1186 90 4 1186 89 1185 91 4 1185 90 1187 92 4 1187 91 1188 93 4 1188 92 1189 94 4 1189 93 1190 95 4 1190 94 1191 96 4 1191 95 1192 97 4 1192 96 1193 98 4 1193 97 1194 99 4 1194 98 1195 100 4 1195 99 1196 101 4 1196 100 1197 102 4 1197 101 1198 103 4 1198 102 1199 104 4 1199 103 1200 105 4 1200 104 1201 106 4 1201 105 1202 107 4 1202 106 1203 108 4 1203 107 1204 109 4 1204 108 1205 110 4 1205 109 1206 111 4 1206 110 1207 112 4 1207 111 1208 113 4 1208 112 1209 114 4 1209 113 1210 115 4 1210 114 1211 116 4 1211 115 1212 117 4 1212 116 1213 118 4 1213 117 1214 119 4 1214 118 1215 120 4 1215 119 1216 121 4 1216 120 1217 122 4 1217 121 1218 123 4 1218 122 1219 124 4 1219 123 1220 125 4 1220 124 1221 126 4 1221 125 1222 127 4 1222 126 1223 128 4 1223 127 1224 129 4 1224 128 1225 130 4 1225 129 1226 131 4 1226 130 1227 132 4 1227 131 1228 133 4 1228 132 1229 134 4 1229 133 1230 135 4 1230 134 1231 136 4 1231 135 1232 137 4 1232 136 1233 138 4 1233 137 1234 139 4 1234 138 1235 140 4 1235 139 1236 141 4 1236 140 1237 142 4 1237 141 1238 143 4 1238 142 1239 144 4 1239 143 1240 145 4 1240 144 1241 146 4 1241 145 1242 147 3 1242 146 3 4 1242 3 1243 149 4 1243 148 1244 150 4 1244 149 1245 151 4 1245 150 1246 152 4 1246 151 1247 153 4 1247 152 1248 154 4 155 923 1248 153 4 154 923 924 156 4 924 155 925 157 4 925 156 926 158 4 926 157 927 159 4 927 158 928 160 4 928 159 929 161 4 929 160 930 162 4 930 161 931 163 4 164 651 931 162 4 163 651 652 165 4 652 164 653 166 4 653 165 654 167 4 654 166 655 168 4 655 167 656 169 4 656 168 657 170 4 657 169 658 171 4 658 170 659 172 4 659 171 660 173 4 660 172 661 174 4 661 173 662 175 4 662 174 663 176 4 663 175 664 177 4 664 176 665 178 4 665 177 666 179 4 666 178 667 180 4 667 179 668 181 4 668 180 669 182 4 669 181 670 183 4 670 182 671 184 4 671 183 672 185 4 672 184 673 186 4 673 185 674 187 4 674 186 675 188 4 675 187 676 189 4 676 188 677 190 4 677 189 678 191 4 678 190 679 192 4 679 191 680 193 4 680 192 681 194 4 681 193 682 195 4 682 194 683 196 4 683 195 684 197 4 684 196 685 198 4 685 197 686 199 4 686 198 687 200 4 687 199 688 201 4 688 200 689 202 4 689 201 690 203 4 690 202 691 204 4 691 203 692 205 3 692 204 206 4 692 205 693 4 3 693 4 208 4 693 207 694 209 4 694 208 695 210 4 695 209 696 211 4 696 210 697 212 4 697 211 698 213 4 698 212 699 214 4 699 213 700 215 4 700 214 701 216 4 701 215 702 217 4 702 216 703 218 4 703 217 704 219 4 704 218 705 220 4 705 219 706 221 4 706 220 707 222 4 707 221 708 223 4 708 222 709 224 4 709 223 710 225 4 710 224 711 226 4 711 225 712 227 4 712 226 713 228 4 713 227 714 229 4 714 228 715 230 4 715 229 716 231 4 716 230 717 232 4 717 231 718 233 4 718 232 719 234 4 719 233 720 235 4 720 234 721 236 4 721 235 722 237 4 722 236 723 238 4 723 237 724 239 4 724 238 725 240 4 725 239 726 241 4 726 240 727 242 4 727 241 728 243 4 728 242 729 244 4 729 243 730 245 4 730 244 731 246 4 731 245 732 247 4 732 246 733 248 4 733 247 734 249 4 734 248 735 250 4 735 249 736 251 4 736 250 737 252 4 737 251 738 253 4 738 252 739 254 4 739 253 740 255 4 740 254 741 256 4 741 255 742 257 4 258 431 742 256 4 257 431 432 259 4 432 258 433 260 4 433 259 434 261 4 434 260 435 262 4 435 261 436 263 4 436 262 437 264 4 437 263 438 265 4 438 264 439 266 4 439 265 440 267 4 440 266 441 268 4 441 267 442 269 4 442 268 443 270 4 443 269 444 271 4 444 270 445 272 4 445 271 446 273 4 446 272 447 274 4 447 273 448 275 4 448 274 449 276 4 449 275 450 277 4 450 276 451 278 4 451 277 452 279 4 452 278 453 280 4 453 279 454 281 4 454 280 455 282 4 455 281 456 283 4 456 282 457 284 4 457 283 458 285 4 458 284 459 286 4 459 285 460 287 4 460 286 461 288 4 461 287 462 289 4 462 288 463 290 4 463 289 464 291 4 464 290 465 292 4 465 291 466 293 4 466 292 467 294 4 467 293 468 295 4 468 294 469 296 4 469 295 470 297 4 470 296 471 298 4 471 297 472 299 4 472 298 473 300 4 473 299 474 301 4 474 300 475 302 4 475 301 476 303 4 476 302 477 304 4 477 303 478 305 4 478 304 479 306 4 479 305 480 307 4 480 306 481 308 4 481 307 482 309 4 482 308 483 310 4 483 309 484 311 4 484 310 485 312 4 485 311 486 313 4 486 312 487 314 4 487 313 488 315 4 488 314 489 316 4 489 315 490 317 4 490 316 491 318 4 491 317 492 319 4 492 318 493 320 4 493 319 494 321 4 494 320 495 322 4 495 321 496 323 4 496 322 497 324 4 497 323 498 325 4 498 324 499 326 4 499 325 500 327 4 500 326 501 328 4 501 327 502 329 4 502 328 503 330 4 503 329 504 331 4 504 330 505 332 4 505 331 506 333 4 506 332 507 334 4 507 333 508 335 4 508 334 509 336 4 509 335 510 337 4 510 336 511 338 4 511 337 512 339 4 512 338 513 340 4 513 339 514 341 4 514 340 515 342 4 515 341 516 343 4 516 342 517 344 4 517 343 518 345 4 518 344 519 346 4 519 345 520 347 4 520 346 521 348 3 521 347 5 4 521 5 522 350 4 522 349 523 351 4 523 350 524 352 4 524 351 525 353 4 525 352 526 354 4 526 353 527 355 4 527 354 528 356 4 528 355 529 357 4 529 356 530 358 4 530 357 531 359 4 531 358 532 360 4 532 359 533 361 4 533 360 534 362 4 534 361 535 363 4 535 362 536 364 4 536 363 537 365 4 537 364 538 366 4 538 365 539 367 4 539 366 540 368 4 540 367 541 369 4 541 368 542 370 4 542 369 543 371 4 543 370 544 372 4 544 371 545 373 4 545 372 546 374 4 546 373 547 375 4 550 547 374 376 4 550 375 551 377 4 551 376 552 378 4 552 377 553 379 4 556 553 378 380 4 566 556 379 381 4 566 380 567 382 4 567 381 568 383 4 568 382 569 384 4 569 383 570 385 4 425 570 386 384 4 387 423 425 385 4 386 423 424 388 4 579 424 389 387 4 584 579 388 390 4 584 389 585 391 4 585 390 586 392 4 586 391 420 393 4 394 419 420 392 4 393 419 594 395 4 396 596 594 394 4 622 596 395 397 4 622 396 623 398 4 623 397 624 399 4 398 624 626 400 4 626 399 628 401 4 630 628 402 400 4 630 401 631 403 4 402 631 2097 404 4 405 649 2097 403 4 648 649 404 406 4 648 405 413 407 3 413 406 0 6 58 59 429 2218 2545 2841 6 72 73 2492 2493 1606 428 6 49 50 411 4521 4515 421 6 49 410 48 426 4514 4515 6 6 7 413 647 646 648 6 6 412 648 406 407 0 6 20 21 1171 3882 3128 3096 6 38 39 416 2194 2252 9704 6 38 415 37 2250 2251 2252 6 14 15 418 3088 3098 3099 6 14 417 13 3099 3100 3684 6 393 394 420 593 588 594 6 393 419 586 392 587 588 6 50 51 422 5237 4521 410 6 421 51 52 4650 9684 5237 6 386 387 424 425 577 575 6 423 387 577 578 579 388 6 386 423 572 570 385 575 6 47 48 427 411 4514 5612 6 47 426 46 5612 7500 9768 6 73 74 1603 1605 1606 409 6 58 408 430 57 2841 9690 6 56 57 429 9689 5380 9690 6 257 258 432 742 743 744 6 431 258 259 433 744 745 6 432 259 260 434 745 746 6 433 260 261 435 746 747 6 434 261 262 436 747 748 6 435 262 263 437 748 749 6 436 263 264 438 749 750 6 437 264 265 439 750 751 6 438 265 266 440 751 752 6 439 266 267 441 752 753 6 440 267 268 442 753 754 6 441 268 269 443 754 755 6 442 269 270 444 755 756 6 443 270 271 445 756 757 6 444 271 272 446 757 758 6 445 272 273 447 758 759 6 446 273 274 448 759 760 6 447 274 275 449 760 761 6 448 275 276 450 761 762 6 449 276 277 451 762 763 6 450 277 278 452 763 764 6 451 278 279 453 764 765 6 452 279 280 454 765 766 6 453 280 281 455 766 767 6 454 281 282 456 767 768 6 455 282 283 457 768 769 6 456 283 284 458 769 770 6 457 284 285 459 770 771 6 458 285 286 460 771 772 6 459 286 287 461 772 773 6 460 287 288 462 773 774 6 461 288 289 463 774 775 6 462 289 290 464 775 776 6 463 290 291 465 776 777 6 464 291 292 466 777 778 6 465 292 293 467 778 779 6 466 293 294 468 779 780 6 467 294 295 469 780 781 6 468 295 296 470 781 782 6 469 296 297 471 782 783 6 470 297 298 472 783 784 6 471 298 299 473 784 785 6 472 299 300 474 785 786 6 473 300 301 475 786 787 6 474 301 302 476 787 788 6 475 302 303 477 788 789 6 476 303 304 478 789 790 6 477 304 305 479 790 791 6 478 305 306 480 791 792 6 479 306 307 481 792 793 6 480 307 308 482 793 794 6 481 308 309 483 794 795 6 482 309 310 484 795 796 6 483 310 311 485 796 797 6 484 311 312 486 797 798 6 485 312 313 487 798 799 6 486 313 314 488 799 800 6 487 314 315 489 800 801 6 488 315 316 490 801 802 6 489 316 317 491 802 803 6 490 317 318 492 803 804 6 491 318 319 493 804 805 6 492 319 320 494 805 806 6 493 320 321 495 806 807 6 494 321 322 496 807 808 6 495 322 323 497 808 809 6 496 323 324 498 809 810 6 497 324 325 499 810 811 6 498 325 326 500 811 812 6 499 326 327 501 812 813 6 500 327 328 502 813 814 6 501 328 329 503 814 815 6 502 329 330 504 815 816 6 503 330 331 505 816 817 6 504 331 332 506 817 818 6 505 332 333 507 818 819 6 506 333 334 508 819 820 6 507 334 335 509 820 821 6 508 335 336 510 821 822 6 509 336 337 511 822 823 6 510 337 338 512 823 824 6 511 338 339 513 824 825 6 512 339 340 514 825 826 6 513 340 341 515 826 827 6 514 341 342 516 827 828 6 515 342 343 517 828 829 6 516 343 344 518 829 830 6 517 344 345 519 830 831 6 518 345 346 520 831 832 6 519 346 347 521 832 833 7 520 347 348 5 349 522 833 6 521 349 350 523 833 834 5 522 350 351 524 834 6 523 351 352 525 834 835 6 524 352 353 526 835 836 6 525 353 354 527 836 837 6 526 354 355 528 837 838 6 527 355 356 529 838 839 6 528 356 357 530 839 840 6 529 357 358 531 840 841 6 530 358 359 532 841 842 6 531 359 360 533 842 843 6 532 360 361 534 843 844 6 533 361 362 535 844 845 6 534 362 363 536 845 846 6 535 363 364 537 846 847 6 536 364 365 538 847 848 6 537 365 366 539 848 849 6 538 366 367 540 849 850 6 539 367 368 541 853 850 6 540 368 369 542 855 853 6 541 369 370 543 855 856 6 542 370 371 544 856 857 6 543 371 372 545 857 858 6 544 372 373 546 858 859 6 545 373 374 547 548 859 6 546 374 548 549 550 375 6 546 547 549 859 860 861 6 548 547 550 861 862 863 6 549 547 375 376 551 863 6 550 376 377 552 863 864 6 551 377 378 553 554 864 6 552 378 554 555 556 379 6 552 553 555 557 864 865 6 554 553 556 557 558 565 6 555 553 379 565 566 380 6 554 555 558 559 865 866 6 557 555 559 560 561 565 6 557 558 560 866 867 868 6 559 558 561 562 922 868 6 560 558 562 563 564 565 6 560 561 563 921 920 922 6 562 561 564 9743 921 9744 6 563 561 565 566 9744 567 6 564 561 558 555 556 566 6 565 556 380 381 567 564 6 566 381 382 568 9744 564 6 567 382 383 569 9744 9739 6 568 383 384 570 571 9739 6 569 384 571 572 425 385 6 569 570 572 573 9739 9740 6 571 570 425 573 574 575 6 571 572 574 9740 9741 916 6 573 572 575 576 916 915 6 574 572 425 576 577 423 6 574 575 577 915 2474 1515 6 576 575 423 424 578 1515 6 577 424 579 580 581 1515 6 578 424 388 580 584 389 6 578 579 581 582 583 584 6 578 580 582 1515 1516 1517 6 581 580 583 1517 1508 1506 6 582 580 584 585 589 1506 6 583 580 579 389 390 585 6 584 390 391 586 589 583 6 585 391 392 420 587 589 6 586 420 588 589 590 591 6 587 420 591 592 593 419 6 586 587 590 585 583 1506 6 589 587 591 1506 1507 1514 6 590 587 588 592 599 1514 6 591 588 593 597 598 599 6 592 588 419 594 595 597 6 593 419 394 595 596 395 6 593 594 596 597 621 606 6 595 594 621 622 396 395 6 593 595 592 598 605 606 6 592 597 599 600 604 605 6 592 598 600 601 1514 591 6 599 598 601 602 603 604 6 599 600 602 1513 1514 1539 6 601 600 603 1539 1540 1583 6 602 600 604 1602 1583 608 6 603 600 598 605 607 608 6 604 598 597 606 607 614 6 605 597 621 620 595 614 6 604 605 608 609 610 614 6 604 607 609 1602 603 1600 6 608 607 610 611 1599 1600 6 609 607 611 612 613 614 6 609 610 612 6557 1598 1599 6 611 610 613 615 3764 6557 6 612 610 614 615 616 620 6 613 610 620 606 605 607 6 612 613 616 617 3760 3764 6 615 613 617 618 619 620 6 615 616 618 3760 3761 625 6 617 616 619 623 624 625 6 618 616 620 621 623 622 6 619 616 613 614 621 606 6 619 620 606 595 596 622 6 621 596 396 397 623 619 6 622 397 398 624 618 619 6 623 398 618 625 626 399 6 618 624 626 627 3761 617 6 625 624 627 628 399 400 6 625 626 628 629 3761 3762 6 627 626 629 630 401 400 6 627 628 630 635 3762 632 6 629 628 401 402 631 632 6 630 402 632 633 403 2097 6 630 631 633 634 635 629 6 632 631 634 2097 650 641 6 632 633 635 636 637 641 6 632 634 636 3217 3762 629 6 635 634 637 638 3217 3218 6 636 634 638 639 640 641 6 636 637 639 3218 3219 3220 6 638 637 640 3220 3239 3240 6 639 637 641 642 643 3239 6 640 637 642 633 650 634 6 640 641 643 644 645 650 6 640 642 644 3237 3236 3239 6 643 642 645 646 647 3237 6 644 642 646 648 649 650 5 644 645 647 412 648 7 644 646 412 8 3238 3237 7 7 412 646 645 649 405 406 413 6 648 645 650 405 404 2097 6 649 645 633 2097 641 642 6 163 164 652 931 932 933 6 651 164 165 653 933 934 6 652 165 166 654 934 935 6 653 166 167 655 935 936 6 654 167 168 656 936 937 6 655 168 169 657 937 938 6 656 169 170 658 938 939 6 657 170 171 659 939 940 6 658 171 172 660 940 941 6 659 172 173 661 941 942 6 660 173 174 662 942 943 6 661 174 175 663 943 944 6 662 175 176 664 944 945 6 663 176 177 665 945 946 6 664 177 178 666 946 947 6 665 178 179 667 947 948 6 666 179 180 668 948 949 6 667 180 181 669 949 950 6 668 181 182 670 950 951 6 669 182 183 671 951 952 6 670 183 184 672 952 953 6 671 184 185 673 953 954 6 672 185 186 674 954 955 6 673 186 187 675 955 956 6 674 187 188 676 956 957 6 675 188 189 677 957 958 6 676 189 190 678 958 959 6 677 190 191 679 959 960 6 678 191 192 680 960 961 6 679 192 193 681 961 962 6 680 193 194 682 962 963 6 681 194 195 683 963 964 6 682 195 196 684 964 965 6 683 196 197 685 965 966 6 684 197 198 686 966 967 6 685 198 199 687 967 968 6 686 199 200 688 968 969 6 687 200 201 689 969 970 6 688 201 202 690 970 971 6 689 202 203 691 971 972 6 690 203 204 692 972 973 7 691 204 205 206 693 973 694 6 692 206 4 207 208 694 7 693 208 209 695 973 692 974 6 694 209 210 696 974 975 6 695 210 211 697 975 976 6 696 211 212 698 976 977 6 697 212 213 699 977 978 6 698 213 214 700 978 979 6 699 214 215 701 979 980 6 700 215 216 702 980 981 6 701 216 217 703 981 982 6 702 217 218 704 982 983 6 703 218 219 705 983 984 6 704 219 220 706 984 985 6 705 220 221 707 985 986 6 706 221 222 708 986 987 6 707 222 223 709 987 988 6 708 223 224 710 988 989 6 709 224 225 711 989 990 6 710 225 226 712 990 991 6 711 226 227 713 991 992 6 712 227 228 714 992 993 6 713 228 229 715 993 994 6 714 229 230 716 994 995 6 715 230 231 717 995 996 6 716 231 232 718 996 997 6 717 232 233 719 997 998 6 718 233 234 720 998 999 6 719 234 235 721 999 1000 6 720 235 236 722 1000 1001 6 721 236 237 723 1001 1002 6 722 237 238 724 1002 1003 6 723 238 239 725 1003 1004 6 724 239 240 726 1004 1005 6 725 240 241 727 1005 1006 6 726 241 242 728 1006 1007 6 727 242 243 729 1007 1008 6 728 243 244 730 1008 1009 6 729 244 245 731 1009 1010 6 730 245 246 732 1010 1011 6 731 246 247 733 1011 1012 6 732 247 248 734 1012 1013 6 733 248 249 735 1016 1013 6 734 249 250 736 1016 1017 6 735 250 251 737 1017 1018 6 736 251 252 738 1018 1019 6 737 252 253 739 1019 1020 6 738 253 254 740 1020 1021 6 739 254 255 741 1021 1022 6 740 255 256 742 1022 1023 6 741 256 257 431 743 1023 6 742 431 744 1023 1024 1025 6 743 431 432 745 1025 1026 6 744 432 433 746 1026 1027 6 745 433 434 747 1027 1028 6 746 434 435 748 1028 1029 6 747 435 436 749 1029 1030 6 748 436 437 750 1030 1031 6 749 437 438 751 1031 1032 6 750 438 439 752 1032 1033 6 751 439 440 753 1033 1034 6 752 440 441 754 1034 1035 6 753 441 442 755 1035 1036 6 754 442 443 756 1036 1037 6 755 443 444 757 1037 1038 6 756 444 445 758 1038 1039 6 757 445 446 759 1039 1040 6 758 446 447 760 1040 1041 6 759 447 448 761 1041 1042 6 760 448 449 762 1042 1043 6 761 449 450 763 1043 1044 6 762 450 451 764 1044 1045 6 763 451 452 765 1045 1046 6 764 452 453 766 1046 1047 6 765 453 454 767 1047 1048 6 766 454 455 768 1048 1049 6 767 455 456 769 1049 1050 6 768 456 457 770 1050 1051 6 769 457 458 771 1051 1052 6 770 458 459 772 1052 1053 6 771 459 460 773 1053 1054 6 772 460 461 774 1054 1055 6 773 461 462 775 1055 1056 6 774 462 463 776 1056 1057 6 775 463 464 777 1057 1058 6 776 464 465 778 1058 1059 6 777 465 466 779 1059 1060 6 778 466 467 780 1060 1061 6 779 467 468 781 1061 1062 6 780 468 469 782 1062 1063 6 781 469 470 783 1063 1064 6 782 470 471 784 1064 1065 6 783 471 472 785 1065 1066 6 784 472 473 786 1066 1067 6 785 473 474 787 1067 1068 6 786 474 475 788 1068 1069 6 787 475 476 789 1069 1070 6 788 476 477 790 1070 1071 6 789 477 478 791 1071 1072 6 790 478 479 792 1072 1073 6 791 479 480 793 1073 1074 6 792 480 481 794 1074 1075 6 793 481 482 795 1075 1076 6 794 482 483 796 1076 1077 6 795 483 484 797 1077 1078 6 796 484 485 798 1078 1079 6 797 485 486 799 1079 1080 6 798 486 487 800 1080 1081 6 799 487 488 801 1081 1082 6 800 488 489 802 1082 1083 6 801 489 490 803 1083 1084 6 802 490 491 804 1084 1085 6 803 491 492 805 1085 1086 6 804 492 493 806 1086 1087 6 805 493 494 807 1087 1088 6 806 494 495 808 1088 1089 6 807 495 496 809 1089 1090 6 808 496 497 810 1090 1091 6 809 497 498 811 1091 1092 6 810 498 499 812 1092 1093 6 811 499 500 813 1093 1094 6 812 500 501 814 1094 1095 6 813 501 502 815 1095 1096 6 814 502 503 816 1096 1097 6 815 503 504 817 1097 1098 6 816 504 505 818 1098 1099 6 817 505 506 819 1099 1100 6 818 506 507 820 1100 1101 6 819 507 508 821 1101 1102 6 820 508 509 822 1102 1103 6 821 509 510 823 1103 1104 6 822 510 511 824 1104 1105 6 823 511 512 825 1105 1106 6 824 512 513 826 1106 1107 6 825 513 514 827 1107 1108 6 826 514 515 828 1108 1109 6 827 515 516 829 1109 1110 6 828 516 517 830 1110 1111 6 829 517 518 831 1111 1112 6 830 518 519 832 1112 1113 6 831 519 520 833 1113 1114 6 832 520 521 522 834 1114 6 833 522 523 524 835 1114 7 834 524 525 836 1114 1115 1116 6 835 525 526 837 1116 1117 6 836 526 527 838 1117 1118 6 837 527 528 839 1118 1119 6 838 528 529 840 1119 1120 6 839 529 530 841 1120 1121 6 840 530 531 842 1121 1122 6 841 531 532 843 1122 1123 6 842 532 533 844 1123 1124 6 843 533 534 845 1124 1125 6 844 534 535 846 1125 1126 6 845 535 536 847 1126 1127 6 846 536 537 848 1127 1128 6 847 537 538 849 1128 1129 6 848 538 539 850 851 1129 6 849 539 851 852 853 540 6 849 850 852 1129 1130 1131 6 851 850 853 854 1131 1132 6 852 850 854 855 541 540 6 852 853 855 1132 1133 1134 6 854 853 541 542 856 1134 6 855 542 543 857 1134 1135 6 856 543 544 858 1135 1136 6 857 544 545 859 1136 1137 6 858 545 546 548 860 1137 6 859 548 861 1137 1138 1139 6 860 548 549 862 1139 1140 6 861 549 863 1140 1141 1142 6 862 549 550 551 864 1142 6 863 551 552 554 865 1142 6 864 554 557 866 1142 1143 6 865 557 559 867 1143 1144 6 866 559 868 869 1144 1145 6 867 559 869 870 922 560 6 867 868 870 871 1145 1146 6 869 868 871 872 873 922 6 869 870 872 1146 1147 1148 6 871 870 873 874 1151 1148 6 872 870 874 875 922 920 6 872 873 875 876 1170 1151 6 874 873 876 877 919 920 6 874 875 877 878 879 1170 6 876 875 878 918 882 919 6 876 877 879 880 881 882 6 876 878 880 884 886 1170 6 879 878 881 884 885 891 6 880 878 882 883 891 892 6 881 878 883 917 918 877 6 881 882 912 892 913 917 6 879 880 885 886 887 888 6 884 880 888 889 890 891 6 879 884 887 1964 1169 1170 6 886 884 888 1965 1964 2075 6 887 884 885 889 2075 2076 6 888 885 890 2076 2077 2081 6 889 885 891 893 894 2081 6 890 885 880 881 892 893 6 891 881 893 896 912 883 6 891 892 890 894 895 896 6 890 893 895 897 898 2081 6 894 893 896 897 909 910 6 895 893 892 910 911 912 6 894 895 898 899 900 909 6 894 897 899 901 2081 2080 6 898 897 900 901 902 906 6 899 897 906 907 908 909 6 898 899 902 903 2080 2082 6 901 899 903 904 905 906 6 901 902 904 2082 2083 2084 6 903 902 905 2084 2085 1565 6 904 902 906 1563 1564 1565 6 905 902 899 900 907 1563 6 906 900 908 1543 1563 1536 6 907 900 909 1522 1523 1536 6 908 900 897 895 910 1522 6 909 895 896 911 1520 1522 6 910 896 912 1521 1520 914 6 911 896 892 883 913 914 6 912 883 914 915 916 917 6 912 913 915 2474 1521 911 6 914 913 916 574 576 2474 6 915 913 917 9741 573 574 6 916 913 883 882 918 9741 6 917 882 877 919 9742 9741 6 918 877 875 920 921 9742 6 919 875 921 562 922 873 6 919 920 562 9743 9742 563 6 562 920 873 870 868 560 6 154 155 924 1248 1249 1250 6 923 155 156 925 1250 1251 6 924 156 157 926 1251 1252 6 925 157 158 927 1252 1253 6 926 158 159 928 1253 1254 6 927 159 160 929 1254 1255 6 928 160 161 930 1255 1256 6 929 161 162 931 1256 1257 6 930 162 163 651 932 1257 6 931 651 933 1257 1258 1259 6 932 651 652 934 1259 1260 6 933 652 653 935 1260 1261 6 934 653 654 936 1261 1262 6 935 654 655 937 1262 1263 6 936 655 656 938 1263 1264 6 937 656 657 939 1264 1265 6 938 657 658 940 1265 1266 6 939 658 659 941 1266 1267 6 940 659 660 942 1267 1268 6 941 660 661 943 1268 1269 6 942 661 662 944 1269 1270 6 943 662 663 945 1270 1271 6 944 663 664 946 1271 1272 6 945 664 665 947 1272 1273 6 946 665 666 948 1273 1274 6 947 666 667 949 1274 1275 6 948 667 668 950 1275 1276 6 949 668 669 951 1276 1277 6 950 669 670 952 1277 1278 6 951 670 671 953 1278 1279 6 952 671 672 954 1279 1280 6 953 672 673 955 1280 1281 6 954 673 674 956 1281 1282 6 955 674 675 957 1282 1283 6 956 675 676 958 1283 1284 6 957 676 677 959 1284 1285 6 958 677 678 960 1285 1286 6 959 678 679 961 1286 1287 6 960 679 680 962 1287 1288 6 961 680 681 963 1288 1289 6 962 681 682 964 1289 1290 6 963 682 683 965 1290 1291 6 964 683 684 966 1291 1292 6 965 684 685 967 1292 1293 6 966 685 686 968 1293 1294 6 967 686 687 969 1294 1295 6 968 687 688 970 1295 1296 6 969 688 689 971 1296 1297 6 970 689 690 972 1297 1298 6 971 690 691 973 1298 1299 6 972 691 692 694 974 1299 5 973 694 695 975 1299 6 974 695 696 976 1299 1300 6 975 696 697 977 1300 1301 6 976 697 698 978 1301 1302 6 977 698 699 979 1302 1303 6 978 699 700 980 1303 1304 6 979 700 701 981 1304 1305 6 980 701 702 982 1305 1306 6 981 702 703 983 1306 1307 6 982 703 704 984 1307 1308 6 983 704 705 985 1308 1309 6 984 705 706 986 1309 1310 6 985 706 707 987 1310 1311 6 986 707 708 988 1311 1312 6 987 708 709 989 1312 1313 6 988 709 710 990 1313 1314 6 989 710 711 991 1314 1315 6 990 711 712 992 1315 1316 6 991 712 713 993 1316 1317 6 992 713 714 994 1317 1318 6 993 714 715 995 1318 1319 6 994 715 716 996 1319 1320 6 995 716 717 997 1320 1321 6 996 717 718 998 1321 1322 6 997 718 719 999 1322 1323 6 998 719 720 1000 1323 1324 6 999 720 721 1001 1324 1325 6 1000 721 722 1002 1325 1326 6 1001 722 723 1003 1326 1327 6 1002 723 724 1004 1327 1328 6 1003 724 725 1005 1328 1329 6 1004 725 726 1006 1329 1330 6 1005 726 727 1007 1330 1331 6 1006 727 728 1008 1331 1332 6 1007 728 729 1009 1332 1333 6 1008 729 730 1010 1333 1334 6 1009 730 731 1011 1334 1335 6 1010 731 732 1012 1335 1336 6 1011 732 733 1013 1014 1336 6 1012 733 1014 1015 1016 734 6 1012 1013 1015 1336 1337 1338 6 1014 1013 1016 1338 1339 1340 6 1015 1013 734 735 1017 1340 6 1016 735 736 1018 1340 1341 6 1017 736 737 1019 1341 1342 6 1018 737 738 1020 1342 1343 6 1019 738 739 1021 1343 1344 6 1020 739 740 1022 1344 1345 6 1021 740 741 1023 1345 1346 6 1022 741 742 743 1024 1346 6 1023 743 1025 1346 1347 1348 6 1024 743 744 1026 1348 1349 6 1025 744 745 1027 1349 1350 6 1026 745 746 1028 1350 1351 6 1027 746 747 1029 1351 1352 6 1028 747 748 1030 1352 1353 6 1029 748 749 1031 1353 1354 6 1030 749 750 1032 1354 1355 6 1031 750 751 1033 1355 1356 6 1032 751 752 1034 1356 1357 6 1033 752 753 1035 1357 1358 6 1034 753 754 1036 1358 1359 6 1035 754 755 1037 1359 1360 6 1036 755 756 1038 1360 1361 6 1037 756 757 1039 1361 1362 6 1038 757 758 1040 1362 1363 6 1039 758 759 1041 1363 1364 6 1040 759 760 1042 1364 1365 6 1041 760 761 1043 1365 1366 6 1042 761 762 1044 1366 1367 6 1043 762 763 1045 1367 1368 6 1044 763 764 1046 1368 1369 6 1045 764 765 1047 1369 1370 6 1046 765 766 1048 1370 1371 6 1047 766 767 1049 1371 1372 6 1048 767 768 1050 1372 1373 6 1049 768 769 1051 1373 1374 6 1050 769 770 1052 1374 1375 6 1051 770 771 1053 1375 1376 6 1052 771 772 1054 1376 1377 6 1053 772 773 1055 1377 1378 6 1054 773 774 1056 1378 1379 6 1055 774 775 1057 1379 1380 6 1056 775 776 1058 1380 1381 6 1057 776 777 1059 1381 1382 6 1058 777 778 1060 1382 1383 6 1059 778 779 1061 1383 1384 6 1060 779 780 1062 1384 1385 6 1061 780 781 1063 1385 1386 6 1062 781 782 1064 1386 1387 6 1063 782 783 1065 1387 1388 6 1064 783 784 1066 1388 1389 6 1065 784 785 1067 1389 1390 6 1066 785 786 1068 1390 1391 6 1067 786 787 1069 1391 1392 6 1068 787 788 1070 1392 1393 6 1069 788 789 1071 1393 1394 6 1070 789 790 1072 1394 1395 6 1071 790 791 1073 1395 1396 6 1072 791 792 1074 1396 1397 6 1073 792 793 1075 1397 1398 6 1074 793 794 1076 1398 1399 6 1075 794 795 1077 1399 1400 6 1076 795 796 1078 1400 1401 6 1077 796 797 1079 1401 1402 6 1078 797 798 1080 1402 1403 6 1079 798 799 1081 1403 1404 6 1080 799 800 1082 1404 1405 6 1081 800 801 1083 1405 1406 6 1082 801 802 1084 1406 1407 6 1083 802 803 1085 1407 1408 6 1084 803 804 1086 1408 1409 6 1085 804 805 1087 1409 1410 6 1086 805 806 1088 1410 1411 6 1087 806 807 1089 1411 1412 6 1088 807 808 1090 1412 1413 6 1089 808 809 1091 1413 1414 6 1090 809 810 1092 1414 1415 6 1091 810 811 1093 1415 1416 6 1092 811 812 1094 1416 1417 6 1093 812 813 1095 1417 1418 6 1094 813 814 1096 1418 1419 6 1095 814 815 1097 1419 1420 6 1096 815 816 1098 1420 1421 6 1097 816 817 1099 1421 1422 6 1098 817 818 1100 1422 1423 6 1099 818 819 1101 1423 1424 6 1100 819 820 1102 1424 1425 6 1101 820 821 1103 1425 1426 6 1102 821 822 1104 1426 1427 6 1103 822 823 1105 1427 1428 6 1104 823 824 1106 1428 1429 6 1105 824 825 1107 1429 1430 6 1106 825 826 1108 1430 1431 6 1107 826 827 1109 1431 1432 6 1108 827 828 1110 1432 1433 6 1109 828 829 1111 1433 1434 6 1110 829 830 1112 1434 1435 6 1111 830 831 1113 1435 1436 6 1112 831 832 1114 1436 1115 6 1113 832 833 834 835 1115 6 1114 835 1116 1436 1113 1437 5 1115 835 836 1117 1437 6 1116 836 837 1118 1437 1438 6 1117 837 838 1119 1438 1439 6 1118 838 839 1120 1439 1440 6 1119 839 840 1121 1440 1441 6 1120 840 841 1122 1441 1442 6 1121 841 842 1123 1442 1443 6 1122 842 843 1124 1443 1444 6 1123 843 844 1125 1444 1445 6 1124 844 845 1126 1445 1446 6 1125 845 846 1127 1446 1447 6 1126 846 847 1128 1447 1448 6 1127 847 848 1129 1448 1449 6 1128 848 849 851 1130 1449 6 1129 851 1131 1449 1450 1451 6 1130 851 852 1132 1451 1452 6 1131 852 854 1133 1452 1453 6 1132 854 1134 1456 1453 1152 6 1133 854 855 856 1135 1152 6 1134 856 857 1136 1152 1153 6 1135 857 858 1137 1153 1154 6 1136 858 859 860 1138 1154 6 1137 860 1139 1154 1155 1156 6 1138 860 861 1140 1156 1157 6 1139 861 862 1141 1157 1158 6 1140 862 1142 1158 1159 1143 6 1141 862 863 864 865 1143 6 1142 865 866 1144 1159 1141 6 1143 866 867 1145 1498 1159 6 1144 867 869 1146 1498 1499 6 1145 869 871 1147 1164 1499 6 1146 871 1148 1149 1164 1165 6 1147 871 1149 1150 1151 872 6 1147 1148 1150 1165 1166 1167 6 1149 1148 1151 1167 1168 1169 6 1150 1148 872 1169 1170 874 6 1134 1135 1153 1473 1456 1133 6 1152 1135 1136 1154 1473 1490 6 1153 1136 1137 1138 1155 1490 6 1154 1138 1156 1490 1491 1492 6 1155 1138 1139 1157 1492 1493 6 1156 1139 1140 1158 1493 1494 6 1157 1140 1141 1159 1497 1494 6 1158 1141 1143 1144 1498 1497 6 85 86 1161 1483 1484 1488 6 1160 86 87 1162 1174 1488 6 1161 87 88 1163 1174 1175 6 1162 88 89 1175 1177 1186 6 1146 1147 1165 1499 1527 1528 6 1164 1147 1149 1166 1528 1533 6 1165 1149 1167 1535 1533 1541 6 1166 1149 1150 1168 1541 1962 6 1167 1150 1169 1962 1963 1964 6 1168 1150 1151 1170 886 1964 6 1169 1151 874 886 879 876 6 414 21 22 1172 3337 3882 6 1171 22 23 1173 1524 3337 6 1172 23 24 1524 1525 1526 6 1161 1162 1175 1176 1488 1489 6 1174 1162 1176 1163 1177 1178 6 1174 1175 1489 1642 1643 1178 6 1175 1163 1178 1179 1186 1183 6 1175 1177 1179 1180 1643 1176 6 1178 1177 1180 1181 1182 1183 6 1178 1179 1181 1643 1644 1645 6 1180 1179 1182 1645 1646 1647 6 1181 1179 1183 1184 3097 1647 6 1182 1179 1184 1185 1186 1177 6 1182 1183 1185 3097 2241 1187 6 1184 1183 1186 90 91 1187 6 1185 1183 1177 1163 89 90 6 1185 91 92 1188 2241 1184 6 1187 92 93 1189 2241 1659 6 1188 93 94 1190 1660 1659 6 1189 94 95 1191 1662 1660 6 1190 95 96 1192 1670 1662 6 1191 96 97 1193 1670 1671 6 1192 97 98 1194 1671 1672 6 1193 98 99 1195 1672 1673 6 1194 99 100 1196 1673 1674 6 1195 100 101 1197 1674 1675 6 1196 101 102 1198 1500 1675 6 1197 102 103 1199 1457 1500 6 1198 103 104 1200 1457 1458 6 1199 104 105 1201 1458 1459 6 1200 105 106 1202 1459 1460 6 1201 106 107 1203 1460 1685 6 1202 107 108 1204 1687 1685 6 1203 108 109 1205 1687 1688 6 1204 109 110 1206 1688 1689 6 1205 110 111 1207 1689 1690 6 1206 111 112 1208 1693 1690 6 1207 112 113 1209 1693 1694 6 1208 113 114 1210 1694 1695 6 1209 114 115 1211 1556 1695 6 1210 115 116 1212 1546 1556 6 1211 116 117 1213 1546 1547 6 1212 117 118 1214 1547 1548 6 1213 118 119 1215 1548 1549 6 1214 119 120 1216 1549 1550 6 1215 120 121 1217 1553 1550 6 1216 121 122 1218 1555 1553 6 1217 122 123 1219 1716 1555 6 1218 123 124 1220 1716 1717 6 1219 124 125 1221 1717 1718 6 1220 125 126 1222 1718 1719 6 1221 126 127 1223 1719 1720 6 1222 127 128 1224 1720 1721 6 1223 128 129 1225 1721 1722 6 1224 129 130 1226 1722 1723 6 1225 130 131 1227 1726 1723 6 1226 131 132 1228 1726 1727 6 1227 132 133 1229 1727 1728 6 1228 133 134 1230 1728 1729 6 1229 134 135 1231 1729 1730 6 1230 135 136 1232 1733 1730 6 1231 136 137 1233 1733 1734 6 1232 137 138 1234 1734 1735 6 1233 138 139 1235 1735 1736 6 1234 139 140 1236 1736 1737 6 1235 140 141 1237 1737 1738 6 1236 141 142 1238 1738 1739 6 1237 142 143 1239 1739 1740 6 1238 143 144 1240 1740 1741 6 1239 144 145 1241 1741 1742 6 1240 145 146 1242 1742 1743 7 1241 146 147 3 148 1243 1743 5 1242 148 149 1244 1743 6 1243 149 150 1245 1743 1744 6 1244 150 151 1246 1744 1745 6 1245 151 152 1247 1745 1746 6 1246 152 153 1248 1746 1747 6 1247 153 154 923 1249 1747 6 1248 923 1250 1747 1748 1749 6 1249 923 924 1251 1749 1750 6 1250 924 925 1252 1750 1751 6 1251 925 926 1253 1751 1752 6 1252 926 927 1254 1752 1753 6 1253 927 928 1255 1753 1754 6 1254 928 929 1256 1754 1755 6 1255 929 930 1257 1755 1756 6 1256 930 931 932 1258 1756 6 1257 932 1259 1756 1757 1758 6 1258 932 933 1260 1758 1759 6 1259 933 934 1261 1759 1760 6 1260 934 935 1262 1760 1761 6 1261 935 936 1263 1761 1762 6 1262 936 937 1264 1762 1763 6 1263 937 938 1265 1763 1764 6 1264 938 939 1266 1764 1765 6 1265 939 940 1267 1765 1766 6 1266 940 941 1268 1766 1767 6 1267 941 942 1269 1767 1768 6 1268 942 943 1270 1768 1769 6 1269 943 944 1271 1769 1770 6 1270 944 945 1272 1770 1771 6 1271 945 946 1273 1771 1772 6 1272 946 947 1274 1772 1773 6 1273 947 948 1275 1773 1774 6 1274 948 949 1276 1774 1775 6 1275 949 950 1277 1775 1776 6 1276 950 951 1278 1776 1777 6 1277 951 952 1279 1777 1778 6 1278 952 953 1280 1778 1779 6 1279 953 954 1281 1779 1780 6 1280 954 955 1282 1780 1781 6 1281 955 956 1283 1781 1782 6 1282 956 957 1284 1782 1783 6 1283 957 958 1285 1783 1784 6 1284 958 959 1286 1784 1785 6 1285 959 960 1287 1785 1786 6 1286 960 961 1288 1786 1787 6 1287 961 962 1289 1787 1788 6 1288 962 963 1290 1788 1789 6 1289 963 964 1291 1789 1790 6 1290 964 965 1292 1790 1791 6 1291 965 966 1293 1791 1792 6 1292 966 967 1294 1792 1793 6 1293 967 968 1295 1793 1794 6 1294 968 969 1296 1794 1795 6 1295 969 970 1297 1795 1796 6 1296 970 971 1298 1796 1797 6 1297 971 972 1299 1797 1300 6 1298 972 973 974 975 1300 7 1299 975 976 1301 1797 1298 2100 6 1300 976 977 1302 2100 2101 6 1301 977 978 1303 2101 2102 6 1302 978 979 1304 2102 2103 6 1303 979 980 1305 2103 2104 6 1304 980 981 1306 2104 2105 6 1305 981 982 1307 2105 2106 6 1306 982 983 1308 1798 2106 6 1307 983 984 1309 1798 1799 6 1308 984 985 1310 1799 1800 6 1309 985 986 1311 1800 1801 6 1310 986 987 1312 1801 1802 6 1311 987 988 1313 1802 1803 6 1312 988 989 1314 1803 1804 6 1313 989 990 1315 1804 1805 6 1314 990 991 1316 1805 1806 6 1315 991 992 1317 1806 1807 6 1316 992 993 1318 1807 1808 6 1317 993 994 1319 1808 1809 6 1318 994 995 1320 1809 1810 6 1319 995 996 1321 1810 1811 6 1320 996 997 1322 1811 1812 6 1321 997 998 1323 1812 1813 6 1322 998 999 1324 1813 1814 6 1323 999 1000 1325 1814 1815 6 1324 1000 1001 1326 1815 1816 6 1325 1001 1002 1327 1816 1817 6 1326 1002 1003 1328 1817 1818 6 1327 1003 1004 1329 1818 1819 6 1328 1004 1005 1330 1819 1820 6 1329 1005 1006 1331 1820 1821 6 1330 1006 1007 1332 1821 1822 6 1331 1007 1008 1333 1822 1823 6 1332 1008 1009 1334 1823 1824 6 1333 1009 1010 1335 1824 1825 6 1334 1010 1011 1336 1825 1826 6 1335 1011 1012 1014 1337 1826 6 1336 1014 1338 1826 1827 1828 6 1337 1014 1015 1339 1828 1829 6 1338 1015 1340 1829 1830 1831 6 1339 1015 1016 1017 1341 1831 6 1340 1017 1018 1342 1831 1832 6 1341 1018 1019 1343 1832 1833 6 1342 1019 1020 1344 1833 1834 6 1343 1020 1021 1345 1834 1835 6 1344 1021 1022 1346 1835 1836 6 1345 1022 1023 1024 1347 1836 6 1346 1024 1348 1836 1837 1838 6 1347 1024 1025 1349 1838 1839 6 1348 1025 1026 1350 1839 1840 6 1349 1026 1027 1351 1840 1841 6 1350 1027 1028 1352 1841 1842 6 1351 1028 1029 1353 1842 1843 6 1352 1029 1030 1354 1843 1844 6 1353 1030 1031 1355 1844 1845 6 1354 1031 1032 1356 1845 1846 6 1355 1032 1033 1357 1846 1847 6 1356 1033 1034 1358 1847 1848 6 1357 1034 1035 1359 1848 1849 6 1358 1035 1036 1360 1849 1850 6 1359 1036 1037 1361 1850 1851 6 1360 1037 1038 1362 1851 1852 6 1361 1038 1039 1363 1852 1853 6 1362 1039 1040 1364 1853 1854 6 1363 1040 1041 1365 1854 1855 6 1364 1041 1042 1366 1855 1856 6 1365 1042 1043 1367 1856 1857 6 1366 1043 1044 1368 1857 1858 6 1367 1044 1045 1369 1858 1859 6 1368 1045 1046 1370 1859 1860 6 1369 1046 1047 1371 1860 1861 6 1370 1047 1048 1372 1861 1862 6 1371 1048 1049 1373 1862 1863 6 1372 1049 1050 1374 1863 1864 6 1373 1050 1051 1375 1864 1865 6 1374 1051 1052 1376 1865 1866 6 1375 1052 1053 1377 1866 1867 6 1376 1053 1054 1378 1867 1868 6 1377 1054 1055 1379 1868 1869 6 1378 1055 1056 1380 1869 1870 6 1379 1056 1057 1381 1870 1871 6 1380 1057 1058 1382 1871 1872 6 1381 1058 1059 1383 1872 1873 6 1382 1059 1060 1384 1873 1874 6 1383 1060 1061 1385 1874 1875 6 1384 1061 1062 1386 1875 1876 6 1385 1062 1063 1387 1876 1877 6 1386 1063 1064 1388 1877 1878 6 1387 1064 1065 1389 1878 1879 6 1388 1065 1066 1390 1879 1880 6 1389 1066 1067 1391 1880 1881 6 1390 1067 1068 1392 1881 1882 6 1391 1068 1069 1393 1882 1883 6 1392 1069 1070 1394 1883 1884 6 1393 1070 1071 1395 1884 1885 6 1394 1071 1072 1396 1885 1886 6 1395 1072 1073 1397 1886 1887 6 1396 1073 1074 1398 1887 1888 6 1397 1074 1075 1399 1888 1889 6 1398 1075 1076 1400 1889 1890 6 1399 1076 1077 1401 1890 1891 6 1400 1077 1078 1402 1891 1892 6 1401 1078 1079 1403 1892 1893 6 1402 1079 1080 1404 1893 1894 6 1403 1080 1081 1405 1894 1895 6 1404 1081 1082 1406 1895 1896 6 1405 1082 1083 1407 1896 1897 6 1406 1083 1084 1408 1897 1898 6 1407 1084 1085 1409 1898 1899 6 1408 1085 1086 1410 1899 1900 6 1409 1086 1087 1411 1900 1901 6 1410 1087 1088 1412 1901 1902 6 1411 1088 1089 1413 1902 1903 6 1412 1089 1090 1414 1903 1904 6 1413 1090 1091 1415 1904 1905 6 1414 1091 1092 1416 1905 1906 6 1415 1092 1093 1417 1906 1907 6 1416 1093 1094 1418 1907 1908 6 1417 1094 1095 1419 1908 1909 6 1418 1095 1096 1420 1909 1910 6 1419 1096 1097 1421 1910 1911 6 1420 1097 1098 1422 1911 1912 6 1421 1098 1099 1423 1912 1913 6 1422 1099 1100 1424 1913 1914 6 1423 1100 1101 1425 1914 1915 6 1424 1101 1102 1426 1915 1916 6 1425 1102 1103 1427 1916 1917 6 1426 1103 1104 1428 1917 1918 6 1427 1104 1105 1429 1918 1919 6 1428 1105 1106 1430 1919 1920 6 1429 1106 1107 1431 1920 1921 6 1430 1107 1108 1432 1921 1922 6 1431 1108 1109 1433 1922 1923 6 1432 1109 1110 1434 1923 1924 6 1433 1110 1111 1435 1924 1925 6 1434 1111 1112 1436 1925 1926 6 1435 1112 1113 1115 1437 1926 6 1436 1115 1116 1117 1438 1926 6 1437 1117 1118 1439 1926 1927 6 1438 1118 1119 1440 1927 1928 6 1439 1119 1120 1441 1928 1929 6 1440 1120 1121 1442 1929 1930 6 1441 1121 1122 1443 1930 1931 6 1442 1122 1123 1444 1931 1932 6 1443 1123 1124 1445 1461 1932 6 1444 1124 1125 1446 1461 1462 6 1445 1125 1126 1447 1462 1463 6 1446 1126 1127 1448 1463 1464 6 1447 1127 1128 1449 1464 1465 6 1448 1128 1129 1130 1450 1465 6 1449 1130 1451 1465 1466 1467 6 1450 1130 1131 1452 1467 1468 6 1451 1131 1132 1453 1454 1468 6 1452 1132 1454 1455 1456 1133 6 1452 1453 1455 1468 1469 1470 6 1454 1453 1456 1470 1471 1472 6 1455 1453 1133 1472 1473 1152 6 1198 1199 1458 1500 1501 1679 6 1457 1199 1200 1459 1679 1680 6 1458 1200 1201 1460 1680 1681 6 1459 1201 1202 1681 1684 1685 6 1444 1445 1462 1932 1933 1934 6 1461 1445 1446 1463 1934 1935 6 1462 1446 1447 1464 1935 1936 6 1463 1447 1448 1465 1936 1937 6 1464 1448 1449 1450 1466 1937 6 1465 1450 1467 1937 1938 1939 6 1466 1450 1451 1468 1939 1940 6 1467 1451 1452 1454 1469 1940 6 1468 1454 1470 1940 1941 1942 6 1469 1454 1455 1471 1942 1943 6 1470 1455 1472 1943 1944 1945 6 1471 1455 1456 1473 1945 1946 6 1472 1456 1152 1153 1490 1946 7 76 2 1475 1608 1604 1609 1618 6 1474 2 77 1476 1620 1618 6 1475 77 78 1477 1620 1621 6 1476 78 79 1478 1621 1622 6 1477 79 80 1479 1630 1622 6 1478 80 81 1480 1630 1631 6 1479 81 82 1481 1631 1632 6 1480 82 83 1482 1635 1632 6 1481 83 84 1483 1485 1635 6 1482 84 85 1160 1484 1485 6 1483 1160 1485 1486 1487 1488 6 1483 1484 1486 1502 1635 1482 6 1485 1484 1487 1502 1503 1504 6 1486 1484 1488 1504 1505 1489 6 1487 1484 1160 1161 1174 1489 6 1488 1174 1176 1505 1487 1642 6 1473 1153 1154 1155 1491 1946 6 1490 1155 1492 1946 1947 1948 6 1491 1155 1156 1493 1948 1949 6 1492 1156 1157 1494 1495 1949 6 1493 1157 1495 1496 1497 1158 6 1493 1494 1496 1951 1949 1952 6 1495 1494 1497 1952 1530 1529 6 1496 1494 1158 1159 1498 1529 6 1144 1145 1499 1159 1497 1529 6 1498 1145 1146 1164 1527 1529 6 1197 1198 1457 1501 1675 1676 6 1500 1457 1676 1677 1678 1679 6 1485 1486 1503 1637 1634 1635 6 1502 1486 1504 1637 1638 1639 6 1503 1486 1487 1505 1639 1640 6 1504 1487 1489 1640 1641 1642 6 583 589 590 1507 1508 582 6 1506 590 1508 1509 1513 1514 6 1506 1507 1509 1510 1517 582 6 1508 1507 1510 1511 1512 1513 6 1508 1509 1511 1517 1518 1519 6 1510 1509 1512 1523 1519 1537 6 1511 1509 1513 1537 1538 1539 6 1512 1509 1507 1514 601 1539 6 1513 1507 601 599 591 590 6 577 578 581 1516 2474 576 6 1515 581 1517 1518 1521 2474 6 1516 581 582 1508 1510 1518 6 1517 1510 1519 1520 1521 1516 6 1518 1510 1520 1522 1523 1511 6 1518 1519 1521 911 910 1522 6 1518 1520 911 1516 2474 914 6 910 1520 1519 1523 908 909 6 1522 1519 1511 908 1536 1537 6 1172 1173 1525 3337 3338 4250 6 1524 1173 1526 3130 2205 4250 6 1525 1173 24 25 3130 9781 6 1499 1164 1528 1529 1530 1531 6 1527 1164 1165 1531 1532 1533 6 1497 1498 1499 1527 1530 1496 6 1529 1527 1531 1952 1496 1953 6 1530 1527 1528 1532 1953 1954 6 1531 1528 1533 1534 1954 1955 6 1532 1528 1534 1535 1166 1165 6 1532 1533 1535 1955 1956 1957 6 1534 1533 1166 1541 1960 1957 6 908 1523 1537 1542 1543 907 6 1536 1523 1511 1512 1538 1542 6 1537 1512 1539 1540 1545 1542 6 1538 1512 1513 601 602 1540 6 1539 602 1538 1582 1545 1583 6 1535 1166 1167 1960 1961 1962 6 1536 1537 1543 1544 1545 1538 6 1536 1542 1544 1562 1563 907 6 1543 1542 1545 1562 1580 1577 6 1544 1542 1538 1582 1580 1540 6 1211 1212 1547 1556 1557 1558 6 1546 1212 1213 1548 1561 1558 6 1547 1213 1214 1549 1710 1561 6 1548 1214 1215 1550 1551 1710 6 1549 1215 1551 1552 1553 1216 6 1549 1550 1552 1710 1711 1712 6 1551 1550 1553 1554 1712 1713 6 1552 1550 1554 1555 1217 1216 6 1552 1553 1555 1713 1714 1715 6 1554 1553 1217 1715 1716 1218 6 1210 1211 1546 1557 1695 1696 6 1556 1546 1558 1559 1696 1697 6 1557 1546 1559 1560 1561 1547 6 1557 1558 1560 1697 1698 1699 6 1559 1558 1561 1699 1700 1709 6 1560 1558 1547 1709 1710 1548 6 1543 1544 1563 1564 1576 1577 6 1543 1562 1564 905 907 906 6 1563 1562 905 1565 1566 1576 6 905 1564 1566 1567 2085 904 6 1565 1564 1567 1568 1569 1576 6 1565 1566 1568 2085 3766 3767 6 1567 1566 1569 1570 1571 3767 6 1568 1566 1570 1574 1575 1576 6 1568 1569 1571 1572 1573 1574 7 1568 1570 1572 3769 3767 6317 6319 5 1571 1570 1573 6319 6320 7 1572 1570 1574 6320 6361 6360 2475 6 1573 1570 1569 1575 1578 2475 6 1574 1569 1576 1577 1578 1579 6 1575 1569 1566 1564 1562 1577 6 1576 1562 1575 1579 1580 1544 6 1574 1575 1579 1586 1587 2475 6 1578 1575 1577 1580 1581 1586 6 1579 1577 1544 1581 1582 1545 6 1579 1580 1582 1584 1585 1586 6 1581 1580 1545 1540 1583 1584 6 1582 1540 1584 1602 603 602 6 1582 1583 1581 1585 1601 1602 6 1581 1584 1586 1591 1588 1601 6 1581 1585 1579 1578 1587 1588 6 1578 1586 1588 1589 2475 2476 6 1587 1586 1589 1590 1591 1585 6 1587 1588 1590 6354 6353 2476 6 1589 1588 1591 1592 1594 6354 6 1590 1588 1585 1592 1593 1601 6 1590 1591 1593 1594 1595 1596 6 1592 1591 1599 1596 1600 1601 6 1590 1592 1595 6358 6356 6354 6 1594 1592 1596 1597 3970 6358 6 1595 1592 1597 1598 1599 1593 6 1595 1596 1598 3970 3969 6556 6 1597 1596 1599 6556 6557 611 6 1598 1596 1593 1600 611 609 6 1599 1593 1601 1602 608 609 6 1600 1593 1591 1585 1584 1602 6 1600 1601 1584 1583 603 608 6 74 75 1604 428 1605 1608 5 1603 75 76 1608 1474 6 428 1603 1606 1607 1608 3519 6 428 1605 1607 2493 409 3516 6 1606 1605 3518 3516 1613 3519 7 1605 1603 1604 1474 1609 1610 3519 5 1608 1474 1610 1611 1618 6 1608 1609 1611 1612 1613 3519 6 1610 1609 1612 1616 1617 1618 6 1610 1611 1613 1614 1615 1616 7 1610 1612 1614 3518 1607 3519 3523 6 1613 1612 1615 3523 3524 3528 6 1614 1612 1616 3093 3544 3528 6 1615 1612 1611 1617 3093 3094 6 1616 1611 1618 1619 3094 1624 7 1617 1611 1619 1620 1475 1609 1474 6 1617 1618 1620 1621 1623 1624 5 1619 1618 1475 1476 1621 6 1620 1476 1477 1622 1623 1619 6 1621 1477 1623 1629 1630 1478 6 1621 1622 1619 1624 1625 1629 7 1619 1623 1625 1626 1617 3094 4367 6 1624 1623 1626 1627 1628 1629 5 1624 1625 1627 4376 4367 7 1626 1625 1628 4377 4376 2862 7215 6 1627 1625 1629 2861 1633 2862 6 1628 1625 1623 1622 1630 2861 6 1629 1622 1478 1479 1631 2861 6 1630 1479 1480 1632 1633 2861 6 1631 1480 1633 1634 1635 1481 7 1631 1632 1634 1636 2861 1628 2862 6 1633 1632 1635 1636 1637 1502 6 1634 1632 1481 1502 1485 1482 5 1633 1634 1637 2862 2863 7 1636 1634 1502 1503 1638 2863 2864 5 1637 1503 1639 2864 2865 6 1638 1503 1504 1640 2865 2866 6 1639 1504 1505 1641 2866 2867 6 1640 1505 1642 2479 2490 2867 6 1641 1505 1489 1176 1643 2479 6 1642 1176 1178 1180 1644 2479 6 1643 1180 1645 2479 2480 2481 6 1644 1180 1181 1646 2481 1650 6 1645 1181 1647 1648 1649 1650 6 1646 1181 1648 1655 3097 1182 6 1646 1647 1649 1653 1654 1655 6 1646 1648 1650 1651 1652 1653 6 1646 1649 1651 2481 1645 2495 6 1650 1649 1652 2495 2496 2497 6 1651 1649 1653 2497 2498 2499 6 1652 1649 1648 1654 2499 2500 6 1653 1648 1655 1656 2500 2501 6 1654 1648 1647 1656 1657 3097 6 1654 1655 1657 1658 2501 2812 6 1656 1655 1658 1659 2241 3097 6 1656 1657 1659 1660 1661 2812 6 1658 1657 1660 1189 1188 2241 6 1658 1659 1661 1662 1190 1189 6 1658 1660 1662 1663 1664 2812 6 1661 1660 1663 1670 1191 1190 6 1661 1662 1664 1665 1669 1670 6 1661 1663 1665 1666 2812 2811 6 1664 1663 1666 1667 1668 1669 6 1664 1665 1667 2811 2813 2814 6 1666 1665 1668 2814 2815 2816 6 1667 1665 1669 2816 2821 2822 6 1668 1665 1663 1670 1671 2822 6 1669 1663 1662 1191 1192 1671 6 1670 1192 1193 1672 2822 1669 6 1671 1193 1194 1673 2823 2822 6 1672 1194 1195 1674 3147 2823 6 1673 1195 1196 1675 3147 3412 6 1674 1196 1197 1500 1676 3412 6 1675 1500 1501 1677 3412 3413 6 1676 1501 1678 3413 3414 3415 6 1677 1501 1679 3415 5381 5382 6 1678 1501 1457 1458 1680 5381 6 1679 1458 1459 1681 1682 5381 6 1680 1459 1460 1682 1683 1684 6 1680 1681 1683 3774 5383 5381 6 1682 1681 1684 3774 3775 3776 6 1683 1681 1460 1685 1686 3776 6 1684 1460 1686 1687 1203 1202 6 1684 1685 1687 3776 3777 3781 6 1686 1685 1203 1204 1688 3781 6 1687 1204 1205 1689 3781 3782 6 1688 1205 1206 1690 1691 3782 6 1689 1206 1691 1692 1693 1207 6 1689 1690 1692 3782 3783 3784 6 1691 1690 1693 3784 3785 3786 6 1692 1690 1207 1208 1694 3786 6 1693 1208 1209 1695 3786 3416 6 1694 1209 1210 1556 1696 3416 6 1695 1556 1557 1697 3416 3417 6 1696 1557 1559 1698 3417 3418 6 1697 1559 1699 1703 2223 3418 6 1698 1559 1560 1700 1701 1703 6 1699 1560 1701 1702 1708 1709 6 1699 1700 1702 1703 1704 1705 6 1701 1700 1705 1706 1707 1708 6 1699 1701 1704 1698 2223 2224 6 1703 1701 1705 2224 2225 2226 6 1704 1701 1702 1706 2226 2227 6 1705 1702 1707 2227 2228 2229 6 1706 1702 1708 2229 2230 2231 6 1707 1702 1700 1709 1711 2231 6 1708 1700 1560 1561 1710 1711 6 1709 1561 1548 1549 1551 1711 6 1710 1551 1712 2231 1708 1709 6 1711 1551 1552 1713 2232 2231 6 1712 1552 1554 1714 2240 2232 6 1713 1554 1715 2240 2560 2564 6 1714 1554 1555 1716 2564 2565 6 1715 1555 1218 1219 1717 2565 6 1716 1219 1220 1718 2565 2566 6 1717 1220 1221 1719 2569 2566 6 1718 1221 1222 1720 3463 2569 6 1719 1222 1223 1721 3462 3463 6 1720 1223 1224 1722 3469 3462 6 1721 1224 1225 1723 1724 3469 6 1722 1225 1724 1725 1726 1226 6 1722 1723 1725 2172 3467 3469 6 1724 1723 1726 2172 2173 2174 6 1725 1723 1226 1227 1727 2174 6 1726 1227 1228 1728 2174 2175 6 1727 1228 1229 1729 2175 2176 6 1728 1229 1230 1730 1731 2176 6 1729 1230 1731 1732 1733 1231 6 1729 1730 1732 2178 2176 2808 6 1731 1730 1733 3404 2808 3405 6 1732 1730 1231 1232 1734 3405 6 1733 1232 1233 1735 3405 3406 6 1734 1233 1234 1736 3406 3407 6 1735 1234 1235 1737 3407 3408 6 1736 1235 1236 1738 3408 3409 6 1737 1236 1237 1739 3409 3410 6 1738 1237 1238 1740 3410 3411 6 1739 1238 1239 1741 3197 3411 6 1740 1239 1240 1742 3191 3197 6 1741 1240 1241 1743 3191 1744 6 1742 1241 1242 1243 1244 1744 7 1743 1244 1245 1745 3191 1742 3199 6 1744 1245 1246 1746 2893 3199 6 1745 1246 1247 1747 2751 2893 6 1746 1247 1248 1249 1748 2751 6 1747 1249 1749 2233 2751 2752 6 1748 1249 1250 1750 2233 2234 6 1749 1250 1251 1751 2237 2234 6 1750 1251 1252 1752 2247 2237 6 1751 1252 1253 1753 2247 2253 6 1752 1253 1254 1754 2253 2254 6 1753 1254 1255 1755 2254 2255 6 1754 1255 1256 1756 2255 2256 6 1755 1256 1257 1258 1757 2256 6 1756 1258 1758 2256 2257 2258 6 1757 1258 1259 1759 2258 2259 6 1758 1259 1260 1760 2259 2260 6 1759 1260 1261 1761 2260 2261 6 1760 1261 1262 1762 2261 2262 6 1761 1262 1263 1763 2262 2263 6 1762 1263 1264 1764 2263 2264 6 1763 1264 1265 1765 2264 2265 6 1764 1265 1266 1766 2265 2266 6 1765 1266 1267 1767 2266 2267 6 1766 1267 1268 1768 2267 2268 6 1767 1268 1269 1769 2268 2269 6 1768 1269 1270 1770 2269 2270 6 1769 1270 1271 1771 2270 2271 6 1770 1271 1272 1772 2271 2272 6 1771 1272 1273 1773 2272 2273 6 1772 1273 1274 1774 2273 2274 6 1773 1274 1275 1775 2274 2275 6 1774 1275 1276 1776 2275 2276 6 1775 1276 1277 1777 2276 2277 6 1776 1277 1278 1778 2277 2278 6 1777 1278 1279 1779 2278 2279 6 1778 1279 1280 1780 2279 2280 6 1779 1280 1281 1781 2280 2281 6 1780 1281 1282 1782 2281 2282 6 1781 1282 1283 1783 2282 2283 6 1782 1283 1284 1784 2283 2284 6 1783 1284 1285 1785 2284 2285 6 1784 1285 1286 1786 2285 2286 6 1785 1286 1287 1787 2286 2287 6 1786 1287 1288 1788 2287 2288 6 1787 1288 1289 1789 2288 2289 6 1788 1289 1290 1790 2289 2290 6 1789 1290 1291 1791 2290 2291 6 1790 1291 1292 1792 2291 2292 6 1791 1292 1293 1793 2292 2293 6 1792 1293 1294 1794 2293 2294 6 1793 1294 1295 1795 2294 2295 6 1794 1295 1296 1796 2098 2295 6 1795 1296 1297 1797 2098 2099 6 1796 1297 1298 1300 2099 2100 6 1307 1308 1799 2106 2107 2108 6 1798 1308 1309 1800 2108 2109 6 1799 1309 1310 1801 2109 2110 6 1800 1310 1311 1802 2110 2111 6 1801 1311 1312 1803 2111 2112 6 1802 1312 1313 1804 2112 2113 6 1803 1313 1314 1805 2113 2114 6 1804 1314 1315 1806 2114 2115 6 1805 1315 1316 1807 2115 2116 6 1806 1316 1317 1808 2116 2117 6 1807 1317 1318 1809 2117 2118 6 1808 1318 1319 1810 2118 2119 6 1809 1319 1320 1811 2119 2120 6 1810 1320 1321 1812 2120 2121 6 1811 1321 1322 1813 2121 2122 6 1812 1322 1323 1814 2122 2123 6 1813 1323 1324 1815 2123 2124 6 1814 1324 1325 1816 2124 2125 6 1815 1325 1326 1817 2125 2126 6 1816 1326 1327 1818 2126 2127 6 1817 1327 1328 1819 2127 2128 6 1818 1328 1329 1820 2128 2129 6 1819 1329 1330 1821 2129 2130 6 1820 1330 1331 1822 2130 2131 6 1821 1331 1332 1823 2131 2132 6 1822 1332 1333 1824 2132 2133 6 1823 1333 1334 1825 2133 2134 6 1824 1334 1335 1826 2134 2135 6 1825 1335 1336 1337 1827 2135 6 1826 1337 1828 2135 2136 2137 6 1827 1337 1338 1829 2137 2138 6 1828 1338 1339 1830 2138 2139 6 1829 1339 1831 2139 2140 2141 6 1830 1339 1340 1341 1832 2141 6 1831 1341 1342 1833 2141 2142 6 1832 1342 1343 1834 2142 2143 6 1833 1343 1344 1835 2143 2144 6 1834 1344 1345 1836 2144 2145 6 1835 1345 1346 1347 1837 2145 6 1836 1347 1838 2150 2145 2165 6 1837 1347 1348 1839 2165 2166 6 1838 1348 1349 1840 2166 2167 6 1839 1349 1350 1841 2167 2168 6 1840 1350 1351 1842 2171 2168 6 1841 1351 1352 1843 2349 2171 6 1842 1352 1353 1844 2349 2350 6 1843 1353 1354 1845 2350 2351 6 1844 1354 1355 1846 2351 2352 6 1845 1355 1356 1847 2352 2353 6 1846 1356 1357 1848 2353 2354 6 1847 1357 1358 1849 2354 2355 6 1848 1358 1359 1850 2355 2356 6 1849 1359 1360 1851 2356 2357 6 1850 1360 1361 1852 2357 2358 6 1851 1361 1362 1853 2358 2359 6 1852 1362 1363 1854 2359 2360 6 1853 1363 1364 1855 2360 2361 6 1854 1364 1365 1856 1966 2361 6 1855 1365 1366 1857 1966 1967 6 1856 1366 1367 1858 1967 1968 6 1857 1367 1368 1859 1968 1969 6 1858 1368 1369 1860 1969 1970 6 1859 1369 1370 1861 1970 1971 6 1860 1370 1371 1862 1971 1972 6 1861 1371 1372 1863 1972 1973 6 1862 1372 1373 1864 1973 1974 6 1863 1373 1374 1865 1974 1975 6 1864 1374 1375 1866 1975 1976 6 1865 1375 1376 1867 1976 1977 6 1866 1376 1377 1868 1977 1978 6 1867 1377 1378 1869 1978 1979 6 1868 1378 1379 1870 1979 1980 6 1869 1379 1380 1871 1980 1981 6 1870 1380 1381 1872 1981 1982 6 1871 1381 1382 1873 1982 1983 6 1872 1382 1383 1874 1983 1984 6 1873 1383 1384 1875 1984 1985 6 1874 1384 1385 1876 1985 1986 6 1875 1385 1386 1877 1986 1987 6 1876 1386 1387 1878 1987 1988 6 1877 1387 1388 1879 1988 1989 6 1878 1388 1389 1880 1989 1990 6 1879 1389 1390 1881 1990 1991 6 1880 1390 1391 1882 1991 1992 6 1881 1391 1392 1883 1992 1993 6 1882 1392 1393 1884 1993 1994 6 1883 1393 1394 1885 1994 1995 6 1884 1394 1395 1886 1995 1996 6 1885 1395 1396 1887 1996 1997 6 1886 1396 1397 1888 1997 1998 6 1887 1397 1398 1889 1998 1999 6 1888 1398 1399 1890 1999 2000 6 1889 1399 1400 1891 2000 2001 6 1890 1400 1401 1892 2001 2002 6 1891 1401 1402 1893 2002 2003 6 1892 1402 1403 1894 2003 2004 6 1893 1403 1404 1895 2004 2005 6 1894 1404 1405 1896 2005 2006 6 1895 1405 1406 1897 2006 2007 6 1896 1406 1407 1898 2007 2008 6 1897 1407 1408 1899 2008 2009 6 1898 1408 1409 1900 2009 2010 6 1899 1409 1410 1901 2010 2011 6 1900 1410 1411 1902 2011 2012 6 1901 1411 1412 1903 2012 2013 6 1902 1412 1413 1904 2013 2014 6 1903 1413 1414 1905 2014 2015 6 1904 1414 1415 1906 2015 2016 6 1905 1415 1416 1907 2016 2017 6 1906 1416 1417 1908 2017 2018 6 1907 1417 1418 1909 2018 2019 6 1908 1418 1419 1910 2019 2020 6 1909 1419 1420 1911 2020 2021 6 1910 1420 1421 1912 2021 2022 6 1911 1421 1422 1913 2022 2023 6 1912 1422 1423 1914 2023 2024 6 1913 1423 1424 1915 2024 2025 6 1914 1424 1425 1916 2025 2026 6 1915 1425 1426 1917 2026 2027 6 1916 1426 1427 1918 2027 2028 6 1917 1427 1428 1919 2028 2029 6 1918 1428 1429 1920 2029 2030 6 1919 1429 1430 1921 2030 2031 6 1920 1430 1431 1922 2031 2032 6 1921 1431 1432 1923 2032 2033 6 1922 1432 1433 1924 2033 2034 6 1923 1433 1434 1925 2034 2035 6 1924 1434 1435 1926 2035 1927 6 1925 1435 1436 1437 1438 1927 7 1926 1438 1439 1928 2035 1925 2036 6 1927 1439 1440 1929 2036 2037 6 1928 1440 1441 1930 2037 2038 6 1929 1441 1442 1931 2038 2039 6 1930 1442 1443 1932 2039 2040 7 1931 1443 1444 1461 1933 2040 2041 5 1932 1461 1934 2041 2042 6 1933 1461 1462 1935 2042 2043 6 1934 1462 1463 1936 2043 2044 6 1935 1463 1464 1937 2044 2045 6 1936 1464 1465 1466 1938 2045 6 1937 1466 1939 2045 2046 2047 6 1938 1466 1467 1940 2047 2048 6 1939 1467 1468 1469 1941 2048 6 1940 1469 1942 2048 2049 2050 6 1941 1469 1470 1943 2050 2051 6 1942 1470 1471 1944 2051 2052 6 1943 1471 1945 2052 2053 2054 6 1944 1471 1472 1946 2054 1947 6 1945 1472 1473 1490 1491 1947 6 1946 1491 1948 2054 1945 2055 6 1947 1491 1492 1949 1950 2055 6 1948 1492 1950 1951 1495 1493 6 1948 1949 1951 2055 2056 2057 6 1950 1949 1495 1952 2057 2058 6 1951 1495 1496 1530 1953 2058 6 1952 1530 1531 1954 2058 2059 6 1953 1531 1532 1955 2059 2060 6 1954 1532 1534 1956 2060 2061 6 1955 1534 1957 1958 2061 2062 6 1956 1534 1958 1959 1960 1535 6 1956 1957 1959 2062 2063 2064 6 1958 1957 1960 2064 2065 2066 6 1959 1957 1535 1541 1961 2066 6 1960 1541 1962 2066 2067 2068 6 1961 1541 1167 1168 1963 2068 6 1962 1168 1964 1965 2070 2068 6 1963 1168 1965 887 886 1169 6 1963 1964 887 2072 2070 2075 6 1855 1856 1967 2361 2362 2363 6 1966 1856 1857 1968 2363 2364 6 1967 1857 1858 1969 2364 2365 6 1968 1858 1859 1970 2365 2366 6 1969 1859 1860 1971 2366 2367 6 1970 1860 1861 1972 2367 2368 6 1971 1861 1862 1973 2368 2369 6 1972 1862 1863 1974 2369 2370 6 1973 1863 1864 1975 2370 2371 6 1974 1864 1865 1976 2371 2372 6 1975 1865 1866 1977 2372 2373 6 1976 1866 1867 1978 2373 2374 6 1977 1867 1868 1979 2374 2375 6 1978 1868 1869 1980 2375 2376 6 1979 1869 1870 1981 2376 2377 6 1980 1870 1871 1982 2377 2378 6 1981 1871 1872 1983 2378 2379 6 1982 1872 1873 1984 2379 2380 6 1983 1873 1874 1985 2380 2381 6 1984 1874 1875 1986 2381 2382 6 1985 1875 1876 1987 2382 2383 6 1986 1876 1877 1988 2383 2384 6 1987 1877 1878 1989 2384 2385 6 1988 1878 1879 1990 2385 2386 6 1989 1879 1880 1991 2386 2387 6 1990 1880 1881 1992 2387 2388 6 1991 1881 1882 1993 2388 2389 6 1992 1882 1883 1994 2389 2390 6 1993 1883 1884 1995 2390 2391 6 1994 1884 1885 1996 2391 2392 6 1995 1885 1886 1997 2392 2393 6 1996 1886 1887 1998 2393 2394 6 1997 1887 1888 1999 2394 2395 6 1998 1888 1889 2000 2395 2396 6 1999 1889 1890 2001 2396 2397 6 2000 1890 1891 2002 2397 2398 6 2001 1891 1892 2003 2398 2399 6 2002 1892 1893 2004 2399 2400 6 2003 1893 1894 2005 2400 2401 6 2004 1894 1895 2006 2401 2402 6 2005 1895 1896 2007 2402 2403 6 2006 1896 1897 2008 2403 2404 6 2007 1897 1898 2009 2404 2405 6 2008 1898 1899 2010 2405 2406 6 2009 1899 1900 2011 2406 2407 6 2010 1900 1901 2012 2407 2408 6 2011 1901 1902 2013 2408 2409 6 2012 1902 1903 2014 2409 2410 6 2013 1903 1904 2015 2410 2411 6 2014 1904 1905 2016 2411 2412 6 2015 1905 1906 2017 2412 2413 6 2016 1906 1907 2018 2413 2414 6 2017 1907 1908 2019 2414 2415 6 2018 1908 1909 2020 2415 2416 6 2019 1909 1910 2021 2416 2417 6 2020 1910 1911 2022 2417 2418 6 2021 1911 1912 2023 2418 2419 6 2022 1912 1913 2024 2419 2420 6 2023 1913 1914 2025 2420 2421 6 2024 1914 1915 2026 2421 2422 6 2025 1915 1916 2027 2422 2423 6 2026 1916 1917 2028 2423 2424 6 2027 1917 1918 2029 2424 2425 6 2028 1918 1919 2030 2425 2426 6 2029 1919 1920 2031 2426 2427 6 2030 1920 1921 2032 2427 2428 6 2031 1921 1922 2033 2428 2429 6 2032 1922 1923 2034 2429 2430 6 2033 1923 1924 2035 2430 2431 6 2034 1924 1925 1927 2036 2431 5 2035 1927 1928 2037 2431 6 2036 1928 1929 2038 2431 2432 6 2037 1929 1930 2039 2432 2433 6 2038 1930 1931 2040 2433 2434 7 2039 1931 1932 2041 2434 2435 2436 5 2040 1932 1933 2042 2436 7 2041 1933 1934 2043 2436 2437 2438 6 2042 1934 1935 2044 2438 2439 6 2043 1935 1936 2045 2439 2440 6 2044 1936 1937 1938 2046 2440 6 2045 1938 2047 2440 2441 2442 6 2046 1938 1939 2048 2442 2443 6 2047 1939 1940 1941 2049 2443 6 2048 1941 2050 2443 2444 2448 6 2049 1941 1942 2051 2448 2449 6 2050 1942 1943 2052 2449 2450 6 2051 1943 1944 2053 2450 2451 6 2052 1944 2054 2451 2452 2453 6 2053 1944 1945 1947 2055 2453 6 2054 1947 1948 1950 2056 2453 6 2055 1950 2057 2453 2454 2455 6 2056 1950 1951 2058 2455 2456 6 2057 1951 1952 1953 2059 2456 6 2058 1953 1954 2060 2456 2457 6 2059 1954 1955 2061 2457 2458 6 2060 1955 1956 2062 2458 2459 6 2061 1956 1958 2063 2459 2460 6 2062 1958 2064 2460 2461 2462 6 2063 1958 1959 2065 2462 2463 6 2064 1959 2066 2463 2464 2465 6 2065 1959 1960 1961 2067 2465 6 2066 1961 2068 2069 2465 2466 6 2067 1961 1962 2069 2070 1963 6 2067 2068 2070 2071 2466 2469 6 2069 2068 1963 2071 2072 1965 6 2069 2070 2072 2073 2469 2470 6 2071 2070 1965 2073 2074 2075 6 2071 2072 2074 2473 2470 2086 6 2073 2072 2075 2076 2078 2086 6 2074 2072 1965 887 888 2076 6 2075 888 889 2077 2078 2074 6 2076 889 2078 2079 2080 2081 6 2076 2077 2079 2074 2086 2087 6 2078 2077 2080 2096 2087 2082 6 2079 2077 2081 898 901 2082 6 2080 2077 889 890 894 898 6 2080 901 903 2083 2096 2079 6 2082 903 2084 2096 2095 9776 6 2083 903 904 2085 6093 9776 6 2084 904 1565 1567 3766 6093 6 2074 2078 2087 2088 2473 2073 6 2086 2078 2088 2089 2096 2079 6 2086 2087 2089 2090 2091 2473 6 2088 2087 2090 2094 2095 2096 6 2088 2089 2091 2092 2093 2094 6 2088 2090 2092 2489 2472 2473 6 2091 2090 2093 2489 5947 5948 6 2092 2090 2094 3135 5947 3132 6 2093 2090 2089 2095 3131 3132 6 2094 2089 2096 3131 2083 9776 6 2095 2089 2087 2079 2082 2083 6 631 403 633 650 649 404 6 1795 1796 2099 2295 2296 2297 6 2098 1796 1797 2100 2297 2101 5 2099 1797 1300 1301 2101 6 2100 1301 1302 2102 2297 2099 6 2101 1302 1303 2103 2297 2298 6 2102 1303 1304 2104 2298 2299 6 2103 1304 1305 2105 2299 2300 6 2104 1305 1306 2106 2300 2301 7 2105 1306 1307 1798 2107 2301 2302 5 2106 1798 2108 2302 2303 6 2107 1798 1799 2109 2303 2304 6 2108 1799 1800 2110 2304 2305 6 2109 1800 1801 2111 2305 2306 6 2110 1801 1802 2112 2306 2307 6 2111 1802 1803 2113 2307 2308 6 2112 1803 1804 2114 2308 2309 6 2113 1804 1805 2115 2309 2310 6 2114 1805 1806 2116 2310 2311 6 2115 1806 1807 2117 2311 2312 6 2116 1807 1808 2118 2312 2313 6 2117 1808 1809 2119 2313 2314 6 2118 1809 1810 2120 2314 2315 6 2119 1810 1811 2121 2315 2316 6 2120 1811 1812 2122 2316 2317 6 2121 1812 1813 2123 2317 2318 6 2122 1813 1814 2124 2318 2319 6 2123 1814 1815 2125 2319 2320 6 2124 1815 1816 2126 2320 2321 6 2125 1816 1817 2127 2321 2322 6 2126 1817 1818 2128 2322 2323 6 2127 1818 1819 2129 2323 2324 6 2128 1819 1820 2130 2324 2325 6 2129 1820 1821 2131 2325 2326 6 2130 1821 1822 2132 2326 2327 6 2131 1822 1823 2133 2151 2327 6 2132 1823 1824 2134 2151 2152 6 2133 1824 1825 2135 2152 2153 6 2134 1825 1826 1827 2136 2153 6 2135 1827 2137 2153 2154 2155 6 2136 1827 1828 2138 2155 2156 6 2137 1828 1829 2139 2156 2157 6 2138 1829 1830 2140 2157 2158 6 2139 1830 2141 2146 2158 2159 6 2140 1830 1831 1832 2142 2146 6 2141 1832 1833 2143 2146 2147 6 2142 1833 1834 2144 2147 2148 6 2143 1834 1835 2145 2148 2149 6 2144 1835 1836 2149 2150 1837 6 2140 2141 2142 2147 2159 2160 6 2146 2142 2143 2148 2160 2161 6 2147 2143 2144 2149 2161 2162 6 2148 2144 2145 2150 2162 2163 6 2149 2145 1837 2163 2164 2165 6 2132 2133 2152 2327 2328 2329 6 2151 2133 2134 2153 2329 2330 6 2152 2134 2135 2136 2154 2330 6 2153 2136 2155 2330 2331 2332 6 2154 2136 2137 2156 2332 2333 6 2155 2137 2138 2157 2333 2334 6 2156 2138 2139 2158 2334 2335 6 2157 2139 2140 2159 2335 2336 6 2158 2140 2146 2160 2336 2337 6 2159 2146 2147 2161 2337 2338 6 2160 2147 2148 2162 2338 2339 6 2161 2148 2149 2163 2339 2340 6 2162 2149 2150 2164 2340 2341 6 2163 2150 2165 2341 2342 2343 6 2164 2150 1837 1838 2166 2343 6 2165 1838 1839 2167 2343 2344 6 2166 1839 1840 2168 2169 2344 6 2167 1840 2169 2170 2171 1841 6 2167 2168 2170 2344 2345 2346 6 2169 2168 2171 2346 2347 2348 6 2170 2168 1841 2348 2349 1842 6 1724 1725 2173 3468 3467 4747 6 2172 1725 2174 2804 3395 4747 6 2173 1725 1726 1727 2175 2804 6 2174 1727 1728 2176 2177 2804 6 2175 1728 2177 2178 1731 1729 6 2175 2176 2178 2804 2805 2806 6 2177 2176 1731 2806 2807 2808 6 27 28 2180 2181 3851 3852 6 2179 28 29 2181 2182 2503 6 2179 2180 2182 2183 2199 3851 6 2181 2180 2183 2184 2502 2503 6 2181 2182 2184 2185 2198 2199 6 2183 2182 2185 2186 2193 2502 6 2183 2184 2186 2187 2197 2198 6 2185 2184 2187 2188 2192 2193 6 2185 2186 2188 2189 2197 9713 6 2187 2186 2189 2190 2191 2192 7 2187 2188 2190 9709 9708 9712 9713 5 2189 2188 2191 9710 9709 6 2190 2188 2192 2510 2512 9710 6 2191 2188 2186 2193 2510 2506 6 2192 2186 2184 2502 2504 2506 6 415 39 40 2195 9704 6488 6 2194 40 41 2196 6488 9705 7 2195 41 42 9705 43 9771 9773 6 2185 2187 2198 9713 9714 9720 6 2185 2197 2183 2199 2200 9720 6 2183 2198 2200 2201 2181 3851 6 2199 2198 2201 2202 9720 2217 6 2199 2200 2202 2203 3129 3851 6 2201 2200 2203 2204 2217 2208 6 2201 2202 2204 2205 3129 3130 6 2203 2202 2205 2206 2207 2208 6 2203 2204 2206 3130 1525 4250 6 2205 2204 2207 3343 3341 4250 6 2206 2204 2208 2209 3343 3344 6 2207 2204 2209 2210 2217 2202 6 2207 2208 2210 2211 3344 3345 6 2209 2208 2211 2212 2216 2217 6 2209 2210 2212 2213 3348 3345 6 2211 2210 2213 2214 2215 2216 6 2211 2212 2214 6522 6523 3348 6 2213 2212 2215 9716 9719 6522 6 2214 2212 2216 9716 9715 9714 6 2215 2212 2210 2217 9714 9720 6 2216 2210 2208 2202 9720 2200 6 408 59 60 2219 2545 2546 6 2218 60 61 2220 2549 2546 6 2219 61 62 2221 2549 2551 6 2220 62 63 2222 2551 6702 6 2221 63 6701 6700 6702 64 6 1698 1703 2224 3418 3419 3420 6 2223 1703 1704 2225 3420 3421 6 2224 1704 2226 3421 3422 3426 6 2225 1704 1705 2227 3426 3427 6 2226 1705 1706 2228 3427 3428 6 2227 1706 2229 3428 3429 3430 6 2228 1706 1707 2230 2238 3430 6 2229 1707 2231 2232 2238 2239 6 2230 1707 2232 1712 1711 1708 6 2230 2231 1712 2239 2240 1713 6 1748 1749 2234 2235 2242 2752 6 2233 1749 2235 2236 2237 1750 6 2233 2234 2236 2242 2243 2244 6 2235 2234 2237 2244 2245 2246 6 2236 2234 1750 2246 2247 1751 6 2229 2230 2239 3430 3431 3435 6 2238 2230 2232 2240 3435 2561 6 2239 2232 1713 1714 2560 2561 6 1187 1188 1659 1657 3097 1184 6 2233 2235 2243 2752 2753 2754 6 2242 2235 2244 2754 2755 2756 6 2243 2235 2236 2245 2756 2757 6 2244 2236 2246 2757 2758 2759 6 2245 2236 2237 2247 2759 2760 6 2246 2237 1751 1752 2253 2760 6 34 35 2249 3331 3332 3333 6 2248 35 36 2250 3336 3333 6 2249 36 37 416 2251 3336 7 2250 416 2252 6490 6491 9706 3336 5 2251 416 415 6490 9704 6 2247 1752 1753 2254 2760 2761 6 2253 1753 1754 2255 2761 2762 6 2254 1754 1755 2256 2762 2763 6 2255 1755 1756 1757 2257 2763 6 2256 1757 2258 2763 2764 2765 6 2257 1757 1758 2259 2765 2766 6 2258 1758 1759 2260 2766 2767 6 2259 1759 1760 2261 2767 2768 6 2260 1760 1761 2262 2768 2769 6 2261 1761 1762 2263 2571 2769 6 2262 1762 1763 2264 2571 2572 6 2263 1763 1764 2265 2572 2573 6 2264 1764 1765 2266 2573 2574 6 2265 1765 1766 2267 2574 2575 6 2266 1766 1767 2268 2575 2576 6 2267 1767 1768 2269 2576 2577 6 2268 1768 1769 2270 2577 2578 6 2269 1769 1770 2271 2578 2579 6 2270 1770 1771 2272 2579 2580 6 2271 1771 1772 2273 2580 2581 6 2272 1772 1773 2274 2581 2582 6 2273 1773 1774 2275 2582 2583 6 2274 1774 1775 2276 2583 2584 6 2275 1775 1776 2277 2584 2585 6 2276 1776 1777 2278 2585 2586 6 2277 1777 1778 2279 2586 2587 6 2278 1778 1779 2280 2587 2588 6 2279 1779 1780 2281 2588 2589 6 2280 1780 1781 2282 2589 2590 6 2281 1781 1782 2283 2590 2591 6 2282 1782 1783 2284 2591 2592 6 2283 1783 1784 2285 2592 2593 6 2284 1784 1785 2286 2593 2594 6 2285 1785 1786 2287 2594 2595 6 2286 1786 1787 2288 2595 2596 6 2287 1787 1788 2289 2596 2597 6 2288 1788 1789 2290 2597 2598 6 2289 1789 1790 2291 2598 2599 6 2290 1790 1791 2292 2599 2600 6 2291 1791 1792 2293 2600 2601 6 2292 1792 1793 2294 2601 2602 6 2293 1793 1794 2295 2602 2603 6 2294 1794 1795 2098 2296 2603 6 2295 2098 2297 2603 2604 2605 7 2296 2098 2099 2101 2102 2298 2605 6 2297 2102 2103 2299 2605 2606 6 2298 2103 2104 2300 2606 2607 6 2299 2104 2105 2301 2607 2608 6 2300 2105 2106 2302 2608 2609 6 2301 2106 2107 2303 2609 2610 6 2302 2107 2108 2304 2610 2611 6 2303 2108 2109 2305 2611 2612 6 2304 2109 2110 2306 2612 2613 6 2305 2110 2111 2307 2613 2614 6 2306 2111 2112 2308 2614 2615 6 2307 2112 2113 2309 2615 2616 6 2308 2113 2114 2310 2619 2616 6 2309 2114 2115 2311 2619 2620 6 2310 2115 2116 2312 2620 2621 6 2311 2116 2117 2313 2621 2622 6 2312 2117 2118 2314 2622 2623 6 2313 2118 2119 2315 2623 2624 6 2314 2119 2120 2316 2624 2625 6 2315 2120 2121 2317 2625 2626 6 2316 2121 2122 2318 2626 2627 6 2317 2122 2123 2319 2627 2628 6 2318 2123 2124 2320 2628 2629 6 2319 2124 2125 2321 2629 2630 6 2320 2125 2126 2322 2630 2631 6 2321 2126 2127 2323 2631 2632 6 2322 2127 2128 2324 2632 2633 6 2323 2128 2129 2325 2633 2634 6 2324 2129 2130 2326 2634 2635 6 2325 2130 2131 2327 2635 2636 6 2326 2131 2132 2151 2328 2636 6 2327 2151 2329 2636 2637 2638 6 2328 2151 2152 2330 2641 2638 6 2329 2152 2153 2154 2331 2641 6 2330 2154 2332 2642 2641 2643 6 2331 2154 2155 2333 2643 2644 6 2332 2155 2156 2334 2644 2645 6 2333 2156 2157 2335 2645 2646 6 2334 2157 2158 2336 2646 2647 6 2335 2158 2159 2337 2647 2648 6 2336 2159 2160 2338 2648 2649 6 2337 2160 2161 2339 2649 2650 6 2338 2161 2162 2340 2650 2651 6 2339 2162 2163 2341 2651 2652 6 2340 2163 2164 2342 2652 2653 6 2341 2164 2343 2653 2654 2655 6 2342 2164 2165 2166 2344 2655 6 2343 2166 2167 2169 2345 2655 6 2344 2169 2346 2655 2656 2657 6 2345 2169 2170 2347 2657 2658 6 2346 2170 2348 2658 2659 2660 6 2347 2170 2171 2349 2660 2661 6 2348 2171 1842 1843 2350 2661 6 2349 1843 1844 2351 2661 2662 6 2350 1844 1845 2352 2662 2663 6 2351 1845 1846 2353 2663 2664 6 2352 1846 1847 2354 2664 2665 6 2353 1847 1848 2355 2665 2666 6 2354 1848 1849 2356 2666 2667 6 2355 1849 1850 2357 2667 2668 6 2356 1850 1851 2358 2668 2669 6 2357 1851 1852 2359 2669 2670 6 2358 1852 1853 2360 2670 2671 6 2359 1853 1854 2361 2671 2672 6 2360 1854 1855 1966 2362 2672 6 2361 1966 2363 2672 2673 2674 6 2362 1966 1967 2364 2674 2675 6 2363 1967 1968 2365 2675 2676 6 2364 1968 1969 2366 2676 2677 6 2365 1969 1970 2367 2677 2678 6 2366 1970 1971 2368 2678 2679 6 2367 1971 1972 2369 2679 2680 6 2368 1972 1973 2370 2680 2681 6 2369 1973 1974 2371 2681 2682 6 2370 1974 1975 2372 2682 2683 6 2371 1975 1976 2373 2683 2684 6 2372 1976 1977 2374 2684 2685 6 2373 1977 1978 2375 2685 2686 6 2374 1978 1979 2376 2686 2687 6 2375 1979 1980 2377 2687 2688 6 2376 1980 1981 2378 2688 2689 6 2377 1981 1982 2379 2689 2690 6 2378 1982 1983 2380 2690 2691 6 2379 1983 1984 2381 2691 2692 6 2380 1984 1985 2382 2692 2693 6 2381 1985 1986 2383 2693 2694 6 2382 1986 1987 2384 2694 2695 6 2383 1987 1988 2385 2695 2696 6 2384 1988 1989 2386 2696 2697 6 2385 1989 1990 2387 2697 2698 6 2386 1990 1991 2388 2698 2699 6 2387 1991 1992 2389 2699 2700 6 2388 1992 1993 2390 2700 2701 6 2389 1993 1994 2391 2701 2702 6 2390 1994 1995 2392 2702 2703 6 2391 1995 1996 2393 2703 2704 6 2392 1996 1997 2394 2704 2705 6 2393 1997 1998 2395 2705 2706 6 2394 1998 1999 2396 2706 2707 6 2395 1999 2000 2397 2707 2708 6 2396 2000 2001 2398 2708 2709 6 2397 2001 2002 2399 2513 2709 6 2398 2002 2003 2400 2513 2514 6 2399 2003 2004 2401 2514 2515 6 2400 2004 2005 2402 2515 2516 6 2401 2005 2006 2403 2516 2517 6 2402 2006 2007 2404 2517 2518 6 2403 2007 2008 2405 2518 2519 6 2404 2008 2009 2406 2519 2520 6 2405 2009 2010 2407 2520 2521 6 2406 2010 2011 2408 2521 2522 6 2407 2011 2012 2409 2522 2523 6 2408 2012 2013 2410 2523 2524 6 2409 2013 2014 2411 2524 2525 6 2410 2014 2015 2412 2525 2526 6 2411 2015 2016 2413 2526 2527 6 2412 2016 2017 2414 2527 2528 6 2413 2017 2018 2415 2528 2529 6 2414 2018 2019 2416 2529 2530 6 2415 2019 2020 2417 2530 2531 6 2416 2020 2021 2418 2531 2532 6 2417 2021 2022 2419 2532 2533 6 2418 2022 2023 2420 2533 2534 6 2419 2023 2024 2421 2534 2535 6 2420 2024 2025 2422 2535 2536 6 2421 2025 2026 2423 2536 2537 6 2422 2026 2027 2424 2537 2538 6 2423 2027 2028 2425 2538 2539 6 2424 2028 2029 2426 2539 2540 6 2425 2029 2030 2427 2540 2541 6 2426 2030 2031 2428 2541 2542 6 2427 2031 2032 2429 2542 2543 6 2428 2032 2033 2430 2543 2544 6 2429 2033 2034 2431 2544 2432 6 2430 2034 2035 2036 2037 2432 7 2431 2037 2038 2433 2544 2430 2556 6 2432 2038 2039 2434 2556 2557 6 2433 2039 2040 2435 2557 2558 6 2434 2040 2436 2558 2559 2437 5 2435 2040 2041 2042 2437 6 2436 2042 2438 2559 2435 2745 6 2437 2042 2043 2439 2745 2746 7 2438 2043 2044 2440 2746 2747 2748 6 2439 2044 2045 2046 2441 2748 6 2440 2046 2442 2748 2749 2750 6 2441 2046 2047 2443 2750 2445 6 2442 2047 2048 2049 2444 2445 6 2443 2049 2445 2446 2447 2448 6 2443 2444 2446 2750 2442 3060 6 2445 2444 2447 3060 3061 3062 6 2446 2444 2448 3062 3063 3064 6 2447 2444 2049 2050 2449 3064 6 2448 2050 2051 2450 3064 3065 6 2449 2051 2052 2451 3065 3066 6 2450 2052 2053 2452 3066 3067 6 2451 2053 2453 3067 3068 2454 6 2452 2053 2054 2055 2056 2454 6 2453 2056 2455 3068 2452 3074 6 2454 2056 2057 2456 3074 3075 6 2455 2057 2058 2059 2457 3075 6 2456 2059 2060 2458 3075 3076 6 2457 2060 2061 2459 3076 3077 6 2458 2061 2062 2460 3077 3078 6 2459 2062 2063 2461 3078 3079 6 2460 2063 2462 3079 3080 3081 6 2461 2063 2064 2463 3081 3082 6 2462 2064 2065 2464 3082 3083 6 2463 2065 2465 2467 2482 3083 6 2464 2065 2066 2067 2466 2467 6 2465 2067 2069 2467 2468 2469 6 2465 2466 2468 2464 2482 2483 6 2467 2466 2469 2471 2477 2483 6 2468 2466 2069 2071 2470 2471 6 2469 2071 2471 2472 2473 2073 6 2469 2470 2472 2468 2477 2478 6 2471 2470 2473 2489 2478 2091 6 2472 2470 2073 2091 2088 2086 6 1516 1521 914 915 576 1515 6 1578 1587 2476 1574 6361 1573 6 2475 1587 1589 6353 6359 6361 6 2468 2471 2478 2483 2484 2485 6 2477 2471 2485 2488 2489 2472 6 1642 1643 1644 2480 1641 2490 6 2479 1644 2481 2490 2494 2869 6 2480 1644 1645 1650 2494 2495 6 2464 2467 2483 3085 3083 3926 6 2482 2467 2468 2477 2484 3926 6 2483 2477 2485 2486 3926 3150 6 2484 2477 2478 2486 2487 2488 6 2484 2485 2487 3148 3149 3150 6 2486 2485 2488 3148 3967 3161 6 2487 2485 2478 2489 5948 3967 6 2488 2478 2472 2091 2092 5948 6 1641 2479 2480 2867 2868 2869 6 70 71 2492 3436 3437 3441 6 2491 71 72 409 2493 3436 6 2492 409 1606 3515 3436 3516 6 2480 2481 2495 2869 2870 2871 6 2494 2481 1650 1651 2496 2871 6 2495 1651 2497 2871 2872 2882 6 2496 1651 1652 2498 2882 2883 6 2497 1652 2499 2883 4092 4093 6 2498 1652 1653 2500 2809 4093 6 2499 1653 1654 2501 2809 2810 6 2500 1654 1656 2810 2811 2812 6 2184 2182 2503 2193 2504 2505 6 2502 2182 30 2505 29 2180 6 2193 2502 2505 2506 2507 2508 6 2504 2502 2508 31 30 2503 6 2193 2504 2507 2509 2510 2192 6 2506 2504 2508 2509 3330 3880 6 2507 2504 2505 31 3330 32 6 2506 2507 2510 2511 3880 3881 6 2506 2509 2511 2512 2191 2192 6 2510 2509 2512 6499 6498 3881 6 2510 2511 2191 6498 6500 9710 6 2398 2399 2514 2709 2710 2711 6 2513 2399 2400 2515 2711 2712 6 2514 2400 2401 2516 2712 2713 6 2515 2401 2402 2517 2713 2714 6 2516 2402 2403 2518 2714 2715 6 2517 2403 2404 2519 2715 2716 6 2518 2404 2405 2520 2716 2717 6 2519 2405 2406 2521 2717 2718 6 2520 2406 2407 2522 2718 2719 6 2521 2407 2408 2523 2719 2720 6 2522 2408 2409 2524 2720 2721 6 2523 2409 2410 2525 2721 2722 6 2524 2410 2411 2526 2722 2723 6 2525 2411 2412 2527 2723 2724 6 2526 2412 2413 2528 2724 2725 6 2527 2413 2414 2529 2725 2726 6 2528 2414 2415 2530 2726 2727 6 2529 2415 2416 2531 2727 2728 6 2530 2416 2417 2532 2728 2729 6 2531 2417 2418 2533 2729 2730 6 2532 2418 2419 2534 2730 2731 6 2533 2419 2420 2535 2731 2732 6 2534 2420 2421 2536 2732 2733 6 2535 2421 2422 2537 2733 2734 6 2536 2422 2423 2538 2734 2735 6 2537 2423 2424 2539 2735 2736 6 2538 2424 2425 2540 2736 2737 6 2539 2425 2426 2541 2552 2737 6 2540 2426 2427 2542 2552 2553 6 2541 2427 2428 2543 2553 2554 6 2542 2428 2429 2544 2554 2555 6 2543 2429 2430 2432 2555 2556 6 408 2218 2546 2547 2841 2842 6 2545 2218 2547 2548 2549 2219 6 2545 2546 2548 2842 2845 2846 6 2547 2546 2549 2550 2857 2846 6 2548 2546 2219 2220 2550 2551 6 2548 2549 2551 6691 2856 2857 7 2550 2549 2220 2221 6702 6690 6691 6 2540 2541 2553 2737 2738 2739 6 2552 2541 2542 2554 2739 2740 6 2553 2542 2543 2555 2570 2740 6 2554 2543 2544 2556 2570 2557 5 2555 2544 2432 2433 2557 7 2556 2433 2434 2558 2570 2555 2742 5 2557 2434 2435 2559 2742 7 2558 2435 2437 2742 2743 2744 2745 6 2240 1714 2561 2562 2563 2564 6 2240 2560 2562 3435 2239 3446 6 2561 2560 2563 3446 3447 3448 6 2562 2560 2564 3448 3449 2567 6 2563 2560 1714 1715 2565 2567 6 2564 1715 1716 1717 2566 2567 6 2565 1717 2567 2568 2569 1718 6 2565 2566 2568 3449 2563 2564 6 2567 2566 2569 3458 3455 3449 6 2568 2566 1718 3463 3458 1719 6 2554 2555 2557 2740 2741 2742 6 2262 2263 2572 2769 2770 2771 6 2571 2263 2264 2573 2771 2772 6 2572 2264 2265 2574 2772 2773 6 2573 2265 2266 2575 2773 2774 6 2574 2266 2267 2576 2774 2775 6 2575 2267 2268 2577 2775 2776 6 2576 2268 2269 2578 2776 2777 6 2577 2269 2270 2579 2777 2778 6 2578 2270 2271 2580 2778 2779 6 2579 2271 2272 2581 2779 2780 6 2580 2272 2273 2582 2780 2781 6 2581 2273 2274 2583 2781 2782 6 2582 2274 2275 2584 2782 2783 6 2583 2275 2276 2585 2783 2784 6 2584 2276 2277 2586 2784 2785 6 2585 2277 2278 2587 2785 2786 6 2586 2278 2279 2588 2786 2787 6 2587 2279 2280 2589 2787 2788 6 2588 2280 2281 2590 2788 2789 6 2589 2281 2282 2591 2789 2790 6 2590 2282 2283 2592 2790 2791 6 2591 2283 2284 2593 2791 2792 6 2592 2284 2285 2594 2792 2793 6 2593 2285 2286 2595 2793 2794 6 2594 2286 2287 2596 2794 2795 6 2595 2287 2288 2597 2795 2796 6 2596 2288 2289 2598 2796 2797 6 2597 2289 2290 2599 2797 2798 6 2598 2290 2291 2600 2798 2799 6 2599 2291 2292 2601 2799 2800 6 2600 2292 2293 2602 2800 2801 6 2601 2293 2294 2603 2801 2802 6 2602 2294 2295 2296 2604 2802 6 2603 2296 2605 2802 2803 2606 5 2604 2296 2297 2298 2606 7 2605 2298 2299 2607 2803 2604 2826 5 2606 2299 2300 2608 2826 7 2607 2300 2301 2609 2826 2827 2828 6 2608 2301 2302 2610 2828 2829 6 2609 2302 2303 2611 2829 2830 6 2610 2303 2304 2612 2830 2831 6 2611 2304 2305 2613 2831 2832 6 2612 2305 2306 2614 2832 2833 6 2613 2306 2307 2615 2833 2834 6 2614 2307 2308 2616 2617 2834 6 2615 2308 2617 2618 2619 2309 6 2615 2616 2618 2834 2835 2836 6 2617 2616 2619 2836 2837 2838 6 2618 2616 2309 2310 2620 2838 6 2619 2310 2311 2621 2840 2838 6 2620 2311 2312 2622 2959 2840 6 2621 2312 2313 2623 2959 2960 6 2622 2313 2314 2624 2960 2961 6 2623 2314 2315 2625 2961 2962 6 2624 2315 2316 2626 2962 2963 6 2625 2316 2317 2627 2966 2963 6 2626 2317 2318 2628 2966 2967 6 2627 2318 2319 2629 2967 2968 6 2628 2319 2320 2630 2968 2969 6 2629 2320 2321 2631 2969 2970 6 2630 2321 2322 2632 2970 2971 6 2631 2322 2323 2633 2971 2972 6 2632 2323 2324 2634 2972 2973 6 2633 2324 2325 2635 2973 2974 6 2634 2325 2326 2636 2974 2975 6 2635 2326 2327 2328 2637 2975 6 2636 2328 2638 2639 2975 2976 6 2637 2328 2639 2640 2641 2329 6 2637 2638 2640 2976 2977 2978 6 2639 2638 2641 2642 2978 2979 6 2640 2638 2642 2331 2330 2329 6 2640 2641 2331 2643 2979 2980 6 2642 2331 2332 2644 2980 2981 6 2643 2332 2333 2645 2981 2982 6 2644 2333 2334 2646 2982 2983 6 2645 2334 2335 2647 2983 2984 6 2646 2335 2336 2648 2984 2985 6 2647 2336 2337 2649 2985 2986 6 2648 2337 2338 2650 2986 2987 6 2649 2338 2339 2651 2987 2988 6 2650 2339 2340 2652 2988 2989 6 2651 2340 2341 2653 2989 2990 6 2652 2341 2342 2654 2990 2991 6 2653 2342 2655 2991 2992 2656 6 2654 2342 2343 2344 2345 2656 6 2655 2345 2657 2992 2654 2993 6 2656 2345 2346 2658 2993 2994 6 2657 2346 2347 2659 2994 2995 6 2658 2347 2660 2995 2996 2997 6 2659 2347 2348 2661 2997 2998 6 2660 2348 2349 2350 2662 2998 6 2661 2350 2351 2663 2998 2999 6 2662 2351 2352 2664 2999 3000 6 2663 2352 2353 2665 3000 3001 6 2664 2353 2354 2666 3001 3002 6 2665 2354 2355 2667 3002 3565 6 2666 2355 2356 2668 3565 3566 6 2667 2356 2357 2669 3566 3567 6 2668 2357 2358 2670 3567 3568 6 2669 2358 2359 2671 3568 3569 6 2670 2359 2360 2672 3569 3570 6 2671 2360 2361 2362 2673 3570 6 2672 2362 2674 3570 3571 3572 6 2673 2362 2363 2675 3572 3573 6 2674 2363 2364 2676 3391 3573 6 2675 2364 2365 2677 3391 3392 6 2676 2365 2366 2678 3392 3393 6 2677 2366 2367 2679 3393 3394 6 2678 2367 2368 2680 3394 3579 6 2679 2368 2369 2681 3579 3580 6 2680 2369 2370 2682 3580 3581 6 2681 2370 2371 2683 3581 3582 6 2682 2371 2372 2684 3582 3583 6 2683 2372 2373 2685 3583 3584 6 2684 2373 2374 2686 3584 3585 6 2685 2374 2375 2687 3585 3586 6 2686 2375 2376 2688 3586 3587 6 2687 2376 2377 2689 3587 3588 6 2688 2377 2378 2690 3278 3588 6 2689 2378 2379 2691 3278 3279 6 2690 2379 2380 2692 3279 3280 6 2691 2380 2381 2693 3280 3281 6 2692 2381 2382 2694 3281 3282 6 2693 2382 2383 2695 3282 3283 6 2694 2383 2384 2696 3283 3284 6 2695 2384 2385 2697 3284 3285 6 2696 2385 2386 2698 3285 3286 6 2697 2386 2387 2699 3286 3287 6 2698 2387 2388 2700 3287 3288 6 2699 2388 2389 2701 3288 3289 6 2700 2389 2390 2702 3289 3290 6 2701 2390 2391 2703 3003 3290 6 2702 2391 2392 2704 3003 3004 6 2703 2392 2393 2705 3004 3005 6 2704 2393 2394 2706 3005 3006 6 2705 2394 2395 2707 3006 3007 6 2706 2395 2396 2708 3007 3008 6 2707 2396 2397 2709 3008 3009 6 2708 2397 2398 2513 2710 3009 6 2709 2513 2711 3009 3010 3011 6 2710 2513 2514 2712 3011 3012 6 2711 2514 2515 2713 3012 3013 6 2712 2515 2516 2714 3013 3014 6 2713 2516 2517 2715 3014 3015 6 2714 2517 2518 2716 3015 3016 6 2715 2518 2519 2717 3016 3017 6 2716 2519 2520 2718 3017 3018 6 2717 2520 2521 2719 3018 3019 6 2718 2521 2522 2720 3019 3020 6 2719 2522 2523 2721 3020 3021 6 2720 2523 2524 2722 3021 3022 6 2721 2524 2525 2723 3022 3023 6 2722 2525 2526 2724 3023 3024 6 2723 2526 2527 2725 3024 3025 6 2724 2527 2528 2726 3025 3026 6 2725 2528 2529 2727 3026 3027 6 2726 2529 2530 2728 3027 3028 6 2727 2530 2531 2729 3028 3029 6 2728 2531 2532 2730 3029 3030 6 2729 2532 2533 2731 3030 3031 6 2730 2533 2534 2732 3031 3032 6 2731 2534 2535 2733 3032 3033 6 2732 2535 2536 2734 3033 3034 6 2733 2536 2537 2735 3034 3035 6 2734 2537 2538 2736 3035 3036 6 2735 2538 2539 2737 3036 3037 6 2736 2539 2540 2552 2738 3037 6 2737 2552 2739 3037 3038 3039 6 2738 2552 2553 2740 3039 3040 6 2739 2553 2554 2570 2741 3040 6 2740 2570 2742 3040 3041 2743 6 2741 2570 2557 2558 2559 2743 6 2742 2559 2744 3041 2741 3049 5 2743 2559 2745 3049 3050 6 2744 2559 2437 2438 2746 3050 6 2745 2438 2439 2747 3050 3051 6 2746 2439 2748 3051 3052 2749 5 2747 2439 2440 2441 2749 6 2748 2441 2750 3052 2747 3058 7 2749 2441 2442 2445 3058 3059 3060 6 1746 1747 1748 2752 2893 2894 6 2751 1748 2233 2242 2753 2894 6 2752 2242 2754 2894 2895 2896 6 2753 2242 2243 2755 2896 2897 6 2754 2243 2756 2897 2898 2899 6 2755 2243 2244 2757 2899 2900 6 2756 2244 2245 2758 2900 2901 6 2757 2245 2759 2901 2902 2903 6 2758 2245 2246 2760 2903 2904 6 2759 2246 2247 2253 2761 2904 6 2760 2253 2254 2762 2904 2905 6 2761 2254 2255 2763 2905 2906 6 2762 2255 2256 2257 2764 2906 6 2763 2257 2765 2906 2907 2908 6 2764 2257 2258 2766 2908 2909 6 2765 2258 2259 2767 2909 2910 6 2766 2259 2260 2768 2910 2911 6 2767 2260 2261 2769 2911 2912 6 2768 2261 2262 2571 2770 2912 6 2769 2571 2771 2912 2913 2914 6 2770 2571 2572 2772 2914 2915 6 2771 2572 2573 2773 2915 2916 6 2772 2573 2574 2774 2916 2917 6 2773 2574 2575 2775 2917 2918 6 2774 2575 2576 2776 2918 2919 6 2775 2576 2577 2777 2919 2920 6 2776 2577 2578 2778 2920 2921 6 2777 2578 2579 2779 2921 2922 6 2778 2579 2580 2780 2922 2923 6 2779 2580 2581 2781 2923 2924 6 2780 2581 2582 2782 2924 2925 6 2781 2582 2583 2783 2925 2926 6 2782 2583 2584 2784 2926 2927 6 2783 2584 2585 2785 2927 2928 6 2784 2585 2586 2786 2928 2929 6 2785 2586 2587 2787 2929 2930 6 2786 2587 2588 2788 2930 2931 6 2787 2588 2589 2789 2931 2932 6 2788 2589 2590 2790 2932 2933 6 2789 2590 2591 2791 2933 2934 6 2790 2591 2592 2792 2934 2935 6 2791 2592 2593 2793 2935 2936 6 2792 2593 2594 2794 2936 2937 6 2793 2594 2595 2795 2937 2938 6 2794 2595 2596 2796 2938 2939 6 2795 2596 2597 2797 2939 2940 6 2796 2597 2598 2798 2940 2941 6 2797 2598 2599 2799 2941 2942 6 2798 2599 2600 2800 2942 2943 6 2799 2600 2601 2801 2943 2944 6 2800 2601 2602 2802 2944 2824 6 2801 2602 2603 2604 2803 2824 6 2802 2604 2606 2824 2825 2826 6 2173 2174 2175 2177 2805 3395 6 2804 2177 2806 3395 3396 3400 6 2805 2177 2178 2807 3400 3401 6 2806 2178 2808 3401 3402 3403 6 2807 2178 1731 3403 3404 1732 6 2499 2500 2810 4095 4093 4388 6 2809 2500 2501 2811 4388 2813 6 2810 2501 2812 1664 1666 2813 6 2811 2501 1656 1658 1661 1664 6 2811 1666 2814 3139 4388 2810 6 2813 1666 1667 2815 2817 3139 6 2814 1667 2816 2817 2818 2819 6 2815 1667 1668 2819 2820 2821 6 2814 2815 2818 3139 3140 3141 6 2817 2815 2819 3141 3142 3143 6 2818 2815 2816 2820 3143 3144 6 2819 2816 2821 3144 3145 3146 6 2820 2816 1668 2822 2823 3146 6 2821 1668 2823 1672 1671 1669 6 2821 2822 1672 3146 3147 1673 6 2802 2803 2825 2944 2801 2945 6 2824 2803 2826 2945 2946 2827 6 2825 2803 2606 2607 2608 2827 6 2826 2608 2828 2946 2825 2947 5 2827 2608 2609 2829 2947 6 2828 2609 2610 2830 2947 2948 6 2829 2610 2611 2831 2948 2949 6 2830 2611 2612 2832 2949 2950 6 2831 2612 2613 2833 2950 2951 6 2832 2613 2614 2834 2951 2952 7 2833 2614 2615 2617 2835 2952 2953 5 2834 2617 2836 2953 2954 6 2835 2617 2618 2837 2954 2955 6 2836 2618 2838 2839 2955 2956 6 2837 2618 2839 2840 2620 2619 6 2837 2838 2840 2956 2957 2958 6 2839 2838 2620 2958 2959 2621 6 408 2545 2842 2843 9690 429 6 2841 2545 2843 2844 2547 2845 6 2841 2842 2844 3168 9688 9690 6 2843 2842 3168 3165 3162 2845 6 2842 2547 2846 2847 3162 2844 6 2845 2547 2847 2848 2548 2857 6 2845 2846 2848 2849 3162 3163 6 2847 2846 2849 2850 2851 2857 6 2847 2848 2850 2852 2858 3163 6 2849 2848 2851 2852 2853 2854 6 2850 2848 2854 2855 2856 2857 6 2849 2850 2853 2858 2859 2860 5 2852 2850 2854 2860 6676 7 2853 2850 2851 2855 6676 6677 6678 7 2854 2851 2856 6689 6686 6680 6678 6 2855 2851 2857 6691 6689 2550 6 2856 2851 2848 2550 2548 2846 6 2849 2852 2859 3180 3163 6661 7 2858 2852 2860 6661 6674 6666 6662 6 2859 2852 2853 6675 6674 6676 5 1631 1633 1628 1629 1630 6 1628 1633 1636 2863 1627 7215 7 2862 1636 1637 2864 7216 7215 7217 5 2863 1637 1638 2865 7217 7 2864 1638 1639 2866 7217 7218 7219 7 2865 1639 1640 2867 3189 3214 7219 6 2866 1640 1641 2490 2868 3189 6 2867 2490 2869 3189 3190 3181 6 2868 2490 2480 2494 2870 3181 6 2869 2494 2871 2873 2884 3181 6 2870 2494 2495 2496 2872 2873 6 2871 2496 2873 2874 2881 2882 6 2871 2872 2874 2875 2870 2884 6 2873 2872 2875 2876 2880 2881 6 2873 2874 2876 2877 2884 2885 6 2875 2874 2877 2878 2879 2880 6 2875 2876 2878 2885 2886 2887 6 2877 2876 2879 2887 2888 2889 6 2878 2876 2880 2892 2889 7600 6 2879 2876 2874 2881 4086 7600 6 2880 2874 2872 2882 4086 4087 6 2881 2872 2496 2497 2883 4087 6 2882 2497 2498 4087 4088 4092 6 2870 2873 2875 2885 3181 3182 6 2884 2875 2877 2886 3182 3183 6 2885 2877 2887 3183 3184 3185 6 2886 2877 2878 2888 3188 3185 6 2887 2878 2889 2890 3959 3188 6 2888 2878 2890 2891 2892 2879 6 2888 2889 2891 3961 3959 7592 6 2890 2889 2892 7592 7593 7594 6 2891 2889 2879 7600 7597 7594 6 1745 1746 2751 2894 3199 3198 6 2893 2751 2752 2753 2895 3198 6 2894 2753 2896 3198 3200 3201 6 2895 2753 2754 2897 3201 3202 6 2896 2754 2755 2898 3202 3203 6 2897 2755 2899 3203 3204 3205 6 2898 2755 2756 2900 3205 3206 6 2899 2756 2757 2901 3206 3207 6 2900 2757 2758 2902 3207 3208 6 2901 2758 2903 3208 3209 3210 6 2902 2758 2759 2904 3213 3210 6 2903 2759 2760 2761 2905 3213 6 2904 2761 2762 2906 3483 3213 6 2905 2762 2763 2764 2907 3483 6 2906 2764 2908 3482 3212 3483 7 2907 2764 2765 2909 3500 3482 3697 6 2908 2765 2766 2910 3697 3698 6 2909 2766 2767 2911 3698 3699 6 2910 2767 2768 2912 3699 3700 6 2911 2768 2769 2770 2913 3700 6 2912 2770 2914 3700 3701 3702 6 2913 2770 2771 2915 3702 3703 6 2914 2771 2772 2916 3703 3704 6 2915 2772 2773 2917 3704 3705 6 2916 2773 2774 2918 3705 3706 6 2917 2774 2775 2919 3706 3707 6 2918 2775 2776 2920 3707 3708 6 2919 2776 2777 2921 3708 3709 6 2920 2777 2778 2922 3709 3710 6 2921 2778 2779 2923 3710 3711 6 2922 2779 2780 2924 3711 3712 6 2923 2780 2781 2925 3712 3713 6 2924 2781 2782 2926 3713 3714 6 2925 2782 2783 2927 3714 3715 6 2926 2783 2784 2928 3715 3716 6 2927 2784 2785 2929 3716 3717 6 2928 2785 2786 2930 3717 3718 6 2929 2786 2787 2931 3718 3719 6 2930 2787 2788 2932 3719 3720 6 2931 2788 2789 2933 3720 3721 6 2932 2789 2790 2934 3721 3722 6 2933 2790 2791 2935 3722 3723 6 2934 2791 2792 2936 3723 3724 6 2935 2792 2793 2937 3724 3725 6 2936 2793 2794 2938 3725 3726 6 2937 2794 2795 2939 3726 3727 6 2938 2795 2796 2940 3727 3728 6 2939 2796 2797 2941 3728 3729 6 2940 2797 2798 2942 3729 3730 6 2941 2798 2799 2943 3730 3731 6 2942 2799 2800 2944 3731 3732 6 2943 2800 2801 2824 2945 3732 6 2944 2824 2825 2946 3732 3733 6 2945 2825 2827 2947 3733 3734 6 2946 2827 2828 2829 2948 3734 7 2947 2829 2830 2949 3734 3735 3736 6 2948 2830 2831 2950 3242 3736 6 2949 2831 2832 2951 3242 3243 6 2950 2832 2833 2952 3243 3244 6 2951 2833 2834 2953 3244 3245 5 2952 2834 2835 2954 3245 7 2953 2835 2836 2955 3245 3246 3247 6 2954 2836 2837 2956 3247 3248 6 2955 2837 2839 2957 3248 3249 6 2956 2839 2958 3249 3250 3251 6 2957 2839 2840 2959 3251 3252 6 2958 2840 2621 2622 2960 3252 6 2959 2622 2623 2961 3254 3252 6 2960 2623 2624 2962 3254 3255 6 2961 2624 2625 2963 2964 3255 6 2962 2625 2964 2965 2966 2626 6 2962 2963 2965 3255 3256 3257 6 2964 2963 2966 3257 3258 3259 6 2965 2963 2626 2627 2967 3259 6 2966 2627 2628 2968 3259 3260 6 2967 2628 2629 2969 3260 3261 6 2968 2629 2630 2970 3261 3262 6 2969 2630 2631 2971 3262 3263 6 2970 2631 2632 2972 3263 3264 6 2971 2632 2633 2973 3264 3265 6 2972 2633 2634 2974 3265 3266 6 2973 2634 2635 2975 3266 3267 6 2974 2635 2636 2637 2976 3267 6 2975 2637 2639 2977 3267 3268 6 2976 2639 2978 3268 3269 3270 6 2977 2639 2640 2979 3270 3271 6 2978 2640 2642 2980 3271 3272 6 2979 2642 2643 2981 3272 3273 6 2980 2643 2644 2982 3273 3274 6 2981 2644 2645 2983 3274 3275 6 2982 2645 2646 2984 3275 3276 6 2983 2646 2647 2985 3276 3277 6 2984 2647 2648 2986 3277 3824 6 2985 2648 2649 2987 3545 3824 6 2986 2649 2650 2988 3545 3546 6 2987 2650 2651 2989 3546 3547 6 2988 2651 2652 2990 3547 3548 6 2989 2652 2653 2991 3548 3549 6 2990 2653 2654 2992 3549 3550 6 2991 2654 2656 2993 3550 3551 6 2992 2656 2657 2994 3551 3552 6 2993 2657 2658 2995 3552 3553 6 2994 2658 2659 2996 3553 3554 6 2995 2659 2997 3554 3555 3556 6 2996 2659 2660 2998 3556 3557 6 2997 2660 2661 2662 2999 3557 6 2998 2662 2663 3000 3557 3558 6 2999 2663 2664 3001 3558 3559 6 3000 2664 2665 3002 3559 3560 6 3001 2665 2666 3560 3561 3565 6 2702 2703 3004 3290 3291 3292 6 3003 2703 2704 3005 3292 3293 6 3004 2704 2705 3006 3293 3294 6 3005 2705 2706 3007 3294 3295 6 3006 2706 2707 3008 3295 3296 6 3007 2707 2708 3009 3296 3297 6 3008 2708 2709 2710 3010 3297 6 3009 2710 3011 3297 3298 3299 6 3010 2710 2711 3012 3299 3300 6 3011 2711 2712 3013 3300 3301 6 3012 2712 2713 3014 3301 3302 6 3013 2713 2714 3015 3302 3303 6 3014 2714 2715 3016 3303 3304 6 3015 2715 2716 3017 3304 3305 6 3016 2716 2717 3018 3305 3306 6 3017 2717 2718 3019 3306 3307 6 3018 2718 2719 3020 3307 3308 6 3019 2719 2720 3021 3308 3309 6 3020 2720 2721 3022 3309 3310 6 3021 2721 2722 3023 3310 3311 6 3022 2722 2723 3024 3311 3312 6 3023 2723 2724 3025 3312 3313 6 3024 2724 2725 3026 3313 3314 6 3025 2725 2726 3027 3314 3315 6 3026 2726 2727 3028 3315 3316 6 3027 2727 2728 3029 3316 3317 6 3028 2728 2729 3030 3317 3318 6 3029 2729 2730 3031 3318 3319 6 3030 2730 2731 3032 3319 3320 6 3031 2731 2732 3033 3320 3321 6 3032 2732 2733 3034 3321 3322 6 3033 2733 2734 3035 3042 3322 6 3034 2734 2735 3036 3042 3043 6 3035 2735 2736 3037 3043 3044 6 3036 2736 2737 2738 3038 3044 6 3037 2738 3039 3044 3045 3046 6 3038 2738 2739 3040 3046 3047 6 3039 2739 2740 2741 3041 3047 6 3040 2741 2743 3047 3048 3049 6 3034 3035 3043 3322 3323 3324 6 3042 3035 3036 3044 3324 3325 6 3043 3036 3037 3038 3045 3325 6 3044 3038 3046 3325 3326 3327 6 3045 3038 3039 3047 3053 3327 6 3046 3039 3040 3041 3048 3053 6 3047 3041 3049 3053 3054 3055 6 3048 3041 2743 2744 3050 3055 6 3049 2744 2745 2746 3051 3055 6 3050 2746 2747 3052 3055 3056 6 3051 2747 2749 3056 3057 3058 6 3046 3047 3048 3054 3327 3328 6 3053 3048 3055 3328 3329 3056 6 3054 3048 3049 3050 3051 3056 7 3055 3051 3052 3057 3329 3054 3641 5 3056 3052 3058 3641 3642 7 3057 3052 2749 2750 3059 3642 3643 6 3058 2750 3060 3643 3644 3061 5 3059 2750 2445 2446 3061 6 3060 2446 3062 3644 3059 3910 6 3061 2446 2447 3063 3910 3911 6 3062 2447 3064 3069 3911 3912 6 3063 2447 2448 2449 3065 3069 6 3064 2449 2450 3066 3069 3070 6 3065 2450 2451 3067 3070 3071 6 3066 2451 2452 3068 3071 3072 6 3067 2452 2454 3072 3073 3074 6 3063 3064 3065 3070 3912 3913 6 3069 3065 3066 3071 3913 3914 6 3070 3066 3067 3072 3914 3915 6 3071 3067 3068 3073 3915 3916 6 3072 3068 3074 3916 3917 3918 6 3073 3068 2454 2455 3075 3918 6 3074 2455 2456 2457 3076 3918 6 3075 2457 2458 3077 3349 3918 6 3076 2458 2459 3078 3349 3350 6 3077 2459 2460 3079 3107 3350 6 3078 2460 2461 3080 3107 3108 6 3079 2461 3081 3091 3108 3109 6 3080 2461 2462 3082 3091 3092 6 3081 2462 2463 3083 3084 3092 6 3082 2463 3084 3085 2482 2464 6 3082 3083 3085 3092 3112 3359 6 3084 3083 2482 3926 3152 3359 6 16 17 3087 3088 3089 3090 6 3086 17 18 3095 3126 3090 6 16 3086 3089 3098 417 15 6 3088 3086 3090 3098 3103 3104 6 3089 3086 3104 3105 3087 3126 6 3080 3081 3092 3109 3110 3111 6 3091 3081 3082 3084 3111 3112 5 1615 1616 3094 4099 3544 6 3093 1616 1617 4367 4099 1624 6 3087 18 19 3096 3125 3126 6 3095 19 20 3125 3128 414 6 2241 1657 1655 1647 1182 1184 6 3088 3089 417 3099 3102 3103 6 417 3098 418 3100 3101 3102 6 418 3099 3101 3228 3229 3684 6 3100 3099 3102 3226 3228 3498 7 3101 3099 3098 3103 3113 3498 3497 6 3102 3098 3089 3104 3113 3114 6 3103 3089 3090 3105 3106 3114 6 3104 3090 3106 3126 3124 3118 6 3104 3105 3116 3114 3117 3118 6 3078 3079 3108 3350 3351 3352 6 3107 3079 3080 3109 3352 3353 6 3108 3080 3091 3110 3353 3354 6 3109 3091 3111 3354 3355 3356 6 3110 3091 3092 3112 3356 3357 6 3111 3092 3084 3357 3358 3359 5 3102 3103 3114 3115 3497 6 3113 3103 3115 3116 3106 3104 7 3113 3114 3116 3497 3504 3501 3495 6 3115 3114 3106 3117 6712 3504 6 3116 3106 3118 3119 6712 6711 6 3117 3106 3119 3120 3124 3105 6 3117 3118 3120 3121 6711 6713 6 3119 3118 3121 3122 3123 3124 6 3119 3120 3122 3884 3887 6713 6 3121 3120 3123 3127 3883 3884 6 3122 3120 3124 3125 3127 3128 6 3123 3120 3118 3125 3126 3105 6 3123 3124 3126 3128 3095 3096 6 3125 3124 3105 3095 3087 3090 6 3122 3123 3128 3882 3339 3883 6 3127 3123 3125 414 3882 3096 6 2201 2203 3130 3851 3852 9781 6 3129 2203 2205 1525 1526 9781 6 2094 2095 3132 3133 9776 3138 6 2094 3131 3133 3134 3135 2093 6 3132 3131 3134 3136 3137 3138 6 3132 3133 3135 3136 5946 5945 6 3132 3134 5945 5943 5947 2093 6 3134 3133 3137 6090 6091 5946 6 3136 3133 3138 6090 6089 6092 6 3137 3133 6092 6093 9776 3131 6 2813 2814 2817 3140 4388 4386 6 3139 2817 3141 4385 4384 4386 6 3140 2817 2818 3142 4390 4385 6 3141 2818 3143 7767 4390 7768 6 3142 2818 2819 3144 7774 7768 6 3143 2819 2820 3145 7774 7775 6 3144 2820 3146 4231 7775 9791 6 3145 2820 2821 2823 3147 4231 6 3146 2823 1673 1674 3412 4231 6 2486 2487 3149 3156 3157 3161 6 2486 3148 3150 3151 3155 3156 6 2486 3149 3151 3152 3926 2484 6 3150 3149 3152 3153 3154 3155 6 3150 3151 3153 3926 3085 3359 6 3152 3151 3154 3358 3359 3360 6 3153 3151 3155 3360 3361 3362 6 3154 3151 3149 3156 3677 3362 6 3155 3149 3148 3157 3158 3677 6 3156 3148 3158 3159 3160 3161 6 3156 3157 3159 3676 3677 3945 6 3158 3157 3160 3945 3946 3962 6 3159 3157 3161 3962 3963 3964 6 3160 3157 3148 3967 3964 2487 6 2845 2847 3163 3164 3165 2844 6 3162 2847 3164 3180 2858 2849 6 3162 3163 3165 3166 3177 3180 6 3162 3164 3166 3167 3168 2844 6 3165 3164 3167 3177 3174 3171 6 3165 3166 3168 3169 3170 3171 6 3165 3167 3169 2843 2844 9688 6 3168 3167 3170 9687 9686 9688 5 3169 3167 3171 3172 9687 6 3170 3167 3172 3173 3174 3166 6 3170 3171 3173 9691 9687 6653 7 3172 3171 3174 3175 6654 6652 6653 6 3173 3171 3175 3176 3177 3166 5 3173 3174 3176 3450 6654 6 3175 3174 3177 3178 3179 3450 6 3176 3174 3178 3166 3164 3180 6 3176 3177 3179 3180 6660 6661 6 3176 3178 3450 6657 6659 6660 6 3177 3164 3178 3163 2858 6661 6 2869 2870 2884 3182 3190 2868 6 3181 2884 2885 3183 3216 3190 6 3182 2885 2886 3184 3193 3216 6 3183 2886 3185 3186 3192 3193 6 3184 2886 3186 3187 3188 2887 6 3184 3185 3187 3192 3196 7584 6 3186 3185 3188 3958 7586 7584 6 3187 3185 2887 3958 3959 2888 6 2867 2868 3190 2866 3214 3215 6 3189 2868 3181 3215 3216 3182 6 1741 1742 1744 3197 3198 3199 6 3184 3186 3193 3194 3195 3196 6 3184 3192 3194 7222 3216 3183 7 3193 3192 3195 7222 7221 7204 7203 6 3194 3192 3196 7196 7197 7203 6 3195 3192 3186 7583 7196 7584 6 1740 1741 3191 3198 3411 3200 7 3197 3191 3199 2893 2894 2895 3200 5 3198 3191 1744 1745 2893 6 3198 2895 3201 3411 3197 9751 6 3200 2895 2896 3202 3470 9751 6 3201 2896 2897 3203 3470 3471 6 3202 2897 2898 3204 3471 3472 6 3203 2898 3205 3472 3473 3474 6 3204 2898 2899 3206 3474 3475 6 3205 2899 2900 3207 3475 3476 6 3206 2900 2901 3208 3476 3477 6 3207 2901 2902 3209 3477 3478 6 3208 2902 3210 3211 3478 3479 6 3209 2902 3211 3212 3213 2903 6 3209 3210 3212 3479 3480 3481 7 3211 3210 3213 3481 3482 2907 3483 6 3212 3210 2903 3483 2905 2904 6 2866 3189 3215 7220 7219 7221 6 3214 3189 3190 3216 7221 7222 6 3215 3190 3182 7222 3193 3183 6 635 636 3218 4040 3763 3762 6 3217 636 638 3219 3484 4040 6 3218 638 3220 3221 3222 3484 6 3219 638 639 3221 3240 3241 6 3219 3220 3222 3223 3224 3241 6 3219 3221 3223 3484 3485 3486 6 3222 3221 3224 3225 3486 3487 6 3223 3221 3225 3226 3227 3241 6 3223 3224 3226 3493 3487 3494 7 3225 3224 3227 3228 3101 3494 3498 6 3226 3224 3228 3229 3230 3241 5 3226 3227 3101 3100 3229 6 3100 3228 3227 3230 3231 3684 6 3229 3227 3231 3232 3241 3240 6 3229 3230 3232 3233 3234 3684 6 3231 3230 3233 3240 3239 3236 7 3231 3232 3234 11 10 3235 3236 5 3231 3233 11 3684 12 6 10 3233 3236 3237 3238 9 6 3235 3233 3237 643 3239 3232 6 3235 3236 3238 647 644 643 5 3235 3237 9 8 647 6 643 3236 640 639 3240 3232 6 639 3239 3220 3241 3230 3232 6 3220 3240 3221 3224 3227 3230 6 2949 2950 3243 3736 3737 3738 6 3242 2950 2951 3244 3738 3739 6 3243 2951 2952 3245 3739 3740 7 3244 2952 2953 2954 3246 3740 3741 5 3245 2954 3247 3741 3742 6 3246 2954 2955 3248 3742 3743 6 3247 2955 2956 3249 3743 3744 6 3248 2956 2957 3250 3744 3745 6 3249 2957 3251 3745 3746 3747 6 3250 2957 2958 3252 3253 3747 6 3251 2958 3253 3254 2960 2959 6 3251 3252 3254 3747 3748 3749 6 3253 3252 2960 2961 3255 3749 6 3254 2961 2962 2964 3256 3749 6 3255 2964 3257 3749 3750 3751 6 3256 2964 2965 3258 3751 3752 6 3257 2965 3259 3752 3753 3754 6 3258 2965 2966 2967 3260 3754 6 3259 2967 2968 3261 3754 3755 6 3260 2968 2969 3262 3755 3756 6 3261 2969 2970 3263 3756 3757 6 3262 2970 2971 3264 3757 3758 6 3263 2971 2972 3265 3758 3759 7 3264 2972 2973 3266 3759 4054 4051 5 3265 2973 2974 3267 4054 6 3266 2974 2975 2976 3268 4054 7 3267 2976 2977 3269 4054 4053 4055 5 3268 2977 3270 4055 4056 6 3269 2977 2978 3271 4056 4057 6 3270 2978 2979 3272 4057 4058 6 3271 2979 2980 3273 4058 4059 6 3272 2980 2981 3274 4059 4060 6 3273 2981 2982 3275 4060 4061 6 3274 2982 2983 3276 4064 4061 6 3275 2983 2984 3277 4064 4065 6 3276 2984 2985 3826 4065 3824 6 2689 2690 3279 3588 3589 3590 6 3278 2690 2691 3280 3590 3591 6 3279 2691 2692 3281 3591 3592 6 3280 2692 2693 3282 3592 3593 6 3281 2693 2694 3283 3593 3594 6 3282 2694 2695 3284 3594 3595 6 3283 2695 2696 3285 3595 3596 6 3284 2696 2697 3286 3596 3597 6 3285 2697 2698 3287 3597 3598 6 3286 2698 2699 3288 3598 3599 6 3287 2699 2700 3289 3599 3600 6 3288 2700 2701 3290 3600 3601 6 3289 2701 2702 3003 3291 3601 6 3290 3003 3292 3601 3602 3603 6 3291 3003 3004 3293 3603 3604 6 3292 3004 3005 3294 3604 3605 6 3293 3005 3006 3295 3605 3606 6 3294 3006 3007 3296 3606 3607 6 3295 3007 3008 3297 3607 3608 6 3296 3008 3009 3010 3298 3608 6 3297 3010 3299 3608 3609 3610 6 3298 3010 3011 3300 3610 3611 6 3299 3011 3012 3301 3611 3612 6 3300 3012 3013 3302 3612 3613 6 3301 3013 3014 3303 3613 3614 6 3302 3014 3015 3304 3614 3615 6 3303 3015 3016 3305 3615 3616 6 3304 3016 3017 3306 3616 3617 6 3305 3017 3018 3307 3617 3618 6 3306 3018 3019 3308 3618 3619 6 3307 3019 3020 3309 3619 3620 6 3308 3020 3021 3310 3620 3621 6 3309 3021 3022 3311 3621 3622 6 3310 3022 3023 3312 3622 3623 6 3311 3023 3024 3313 3623 3624 6 3312 3024 3025 3314 3624 3625 6 3313 3025 3026 3315 3625 3626 6 3314 3026 3027 3316 3626 3627 6 3315 3027 3028 3317 3627 3628 6 3316 3028 3029 3318 3628 3629 6 3317 3029 3030 3319 3629 3630 6 3318 3030 3031 3320 3630 3631 6 3319 3031 3032 3321 3631 3632 6 3320 3032 3033 3322 3632 3633 6 3321 3033 3034 3042 3323 3633 6 3322 3042 3324 3633 3634 3635 6 3323 3042 3043 3325 3635 3636 6 3324 3043 3044 3045 3326 3636 6 3325 3045 3327 3636 3637 3638 6 3326 3045 3046 3053 3328 3638 6 3327 3053 3054 3329 3638 3639 6 3328 3054 3056 3639 3640 3641 6 2507 2508 32 33 3331 3880 6 3330 33 34 2248 3332 3880 6 3331 2248 3333 3334 3880 3881 6 3332 2248 3334 3335 3336 2249 6 3332 3333 3335 9707 6499 3881 6 3334 3333 3336 9706 6492 9707 6 3335 3333 2249 2250 2251 9706 6 1171 1172 1524 3338 3339 3882 6 3337 1524 3339 3340 3341 4250 6 3337 3338 3340 3882 3127 3883 6 3339 3338 3341 3342 3885 3883 6 3340 3338 3342 3343 2206 4250 6 3340 3341 3343 3861 6717 3885 6 3342 3341 2206 2207 3344 3861 6 3343 2207 2209 3345 3346 3861 6 3344 2209 3346 3347 3348 2211 6 3344 3345 3347 3861 3862 3863 6 3346 3345 3348 6532 3863 6524 6 3347 3345 2211 2213 6523 6524 6 3076 3077 3350 3918 3917 3919 6 3349 3077 3078 3107 3351 3919 6 3350 3107 3352 3919 3920 3921 6 3351 3107 3108 3353 3921 3922 6 3352 3108 3109 3354 3922 3923 6 3353 3109 3110 3355 3923 3924 6 3354 3110 3356 3924 3925 3374 6 3355 3110 3111 3357 3368 3374 6 3356 3111 3112 3358 3367 3368 6 3357 3112 3359 3153 3360 3367 6 3358 3112 3153 3085 3152 3084 6 3358 3153 3154 3361 3363 3367 6 3360 3154 3362 3363 3364 3678 6 3361 3154 3155 3677 3675 3678 6 3360 3361 3364 3365 3366 3367 6 3363 3361 3365 3678 3667 3668 6 3363 3364 3366 3373 3370 3668 6 3363 3365 3367 3368 3369 3370 6 3363 3366 3368 3360 3358 3357 6 3367 3366 3369 3357 3356 3374 6 3368 3366 3370 3371 3374 3375 6 3369 3366 3371 3372 3373 3365 6 3369 3370 3372 3375 3376 3377 6 3371 3370 3373 3377 3378 3379 6 3372 3370 3365 3379 3380 3668 6 3356 3368 3369 3375 3925 3355 7 3374 3369 3371 3376 3943 3925 4342 5 3375 3371 3377 4342 4343 6 3376 3371 3372 3378 4343 4344 6 3377 3372 3379 3645 4347 4344 6 3378 3372 3373 3380 3381 3645 6 3379 3373 3381 3382 3668 3656 6 3379 3380 3382 3383 3384 3645 6 3381 3380 3383 3390 3387 3656 6 3381 3382 3384 3385 3386 3387 6 3381 3383 3385 3645 3646 3647 6 3384 3383 3386 3647 3648 3649 6 3385 3383 3387 3388 3649 3650 6 3386 3383 3388 3389 3390 3382 6 3386 3387 3389 3650 3651 3652 6 3388 3387 3390 3652 3653 3654 6 3389 3387 3382 3654 3655 3656 6 2675 2676 3392 3573 3574 3575 6 3391 2676 2677 3393 3575 3576 6 3392 2677 2678 3394 3576 3577 6 3393 2678 2679 3577 3578 3579 6 2173 2804 2805 3396 3397 4747 6 3395 2805 3397 3398 3399 3400 6 3395 3396 3398 3892 4747 4746 6 3397 3396 3399 3892 3893 3894 6 3398 3396 3400 3894 3895 3896 6 3399 3396 2805 2806 3401 3896 6 3400 2806 2807 3402 3896 3897 6 3401 2807 3403 3897 3898 3899 6 3402 2807 2808 3404 3899 3900 6 3403 2808 1732 3405 3679 3900 6 3404 1732 1733 1734 3406 3679 6 3405 1734 1735 3407 3679 3680 6 3406 1735 1736 3408 3680 3681 6 3407 1736 1737 3409 3683 3681 6 3408 1737 1738 3410 3470 3683 6 3409 1738 1739 3411 9751 3470 6 3410 1739 1740 3197 3200 9751 6 3147 1674 1675 1676 3413 4231 6 3412 1676 1677 3414 9791 4231 6 3413 1677 3415 7778 7776 9791 6 3414 1677 1678 7778 7779 5382 6 1695 1696 3417 3786 1694 3787 6 3416 1696 1697 3418 3787 3789 6 3417 1697 1698 2223 3419 3789 6 3418 2223 3420 3789 3790 3791 6 3419 2223 2224 3421 3791 3792 6 3420 2224 2225 3422 3423 3792 6 3421 2225 3423 3424 3425 3426 6 3421 3422 3424 3794 3792 3795 6 3423 3422 3425 3795 3796 3797 6 3424 3422 3426 3797 3798 3799 6 3425 3422 2225 2226 3427 3799 6 3426 2226 2227 3428 3799 3800 6 3427 2227 2228 3429 3800 3801 6 3428 2228 3430 3801 3802 3432 6 3429 2228 2229 2238 3431 3432 6 3430 2238 3432 3433 3434 3435 6 3430 3431 3433 3442 3802 3429 6 3432 3431 3434 3442 3443 3444 6 3433 3431 3435 3444 3445 3446 6 3434 3431 2238 2239 2561 3446 6 2491 2492 3437 3438 3515 2493 6 2491 3436 3438 3439 3440 3441 6 3437 3436 3439 3513 3514 3515 6 3437 3438 3440 3508 3509 3513 6 3437 3439 3441 3451 3453 3508 6 3437 3440 2491 70 3451 69 6 3432 3433 3443 3802 3803 3804 6 3442 3433 3444 3804 3805 3806 6 3443 3433 3434 3445 3806 3807 6 3444 3434 3446 3807 3808 3447 6 3445 3434 3435 2561 2562 3447 6 3446 2562 3448 3808 3445 4107 6 3447 2562 2563 3449 3454 4107 6 3448 2563 2567 3454 3455 2568 7 3175 3176 3179 6655 6654 6656 6657 6 3441 3440 69 68 3452 3453 6 68 3451 3453 67 3505 3506 6 3452 3451 3440 3506 3507 3508 6 3448 3449 3455 3456 4107 4108 6 3454 3449 3456 3457 3458 2568 6 3454 3455 3457 3464 4110 4108 6 3456 3455 3458 3459 3460 3464 6 3457 3455 3459 3463 2569 2568 6 3457 3458 3460 3461 3462 3463 6 3457 3459 3461 3464 3465 3466 6 3460 3459 3462 3466 3467 3469 6 3461 3459 3463 1721 3469 1720 6 3462 3459 3458 2569 1720 1719 6 3456 3457 3460 3465 4394 4110 6 3464 3460 3466 4404 4394 4745 6 3465 3460 3461 3467 3468 4745 6 3466 3461 3468 2172 1724 3469 6 3466 3467 2172 4745 4746 4747 6 1724 3467 1722 1721 3462 3461 7 3201 3202 3471 9751 3410 3409 3683 6 3470 3202 3203 3472 3681 3683 6 3471 3203 3204 3473 3682 3681 6 3472 3204 3474 3685 3902 3682 6 3473 3204 3205 3475 3685 3686 6 3474 3205 3206 3476 3686 3687 6 3475 3206 3207 3477 3687 3688 6 3476 3207 3208 3478 3688 3689 6 3477 3208 3209 3479 3689 3690 6 3478 3209 3211 3480 3690 3691 6 3479 3211 3481 3499 3694 3691 6 3480 3211 3212 3482 3499 3500 5 3481 3212 2907 3500 2908 5 2907 3212 3213 2905 2906 6 3218 3219 3222 3485 4039 4040 6 3484 3222 3486 3489 3968 4039 6 3485 3222 3223 3487 3488 3489 6 3486 3223 3488 3492 3493 3225 6 3486 3487 3489 3490 3491 3492 6 3486 3488 3490 3485 3968 3969 6 3489 3488 3491 3969 3970 3971 6 3490 3488 3492 3971 9747 6555 6 3491 3488 3487 3493 3496 9747 6 3492 3487 3225 3494 3495 3496 6 3493 3225 3226 3495 3497 3498 6 3493 3494 3496 3497 3501 3115 6 3493 3495 3492 3501 3502 9747 6 3495 3494 3498 3102 3113 3115 5 3497 3494 3226 3101 3102 6 3480 3481 3500 3694 3695 3696 6 3499 3481 3482 2908 3696 3697 6 3496 3495 3502 3503 3504 3115 6 3496 3501 3503 9747 6706 9748 6 3502 3501 3504 6712 6710 9748 5 3503 3501 3115 6712 3116 6 67 3452 3506 6697 6703 66 6 3505 3452 3453 3507 6697 6704 6 3506 3453 3508 3510 4522 6704 6 3507 3453 3440 3439 3509 3510 6 3508 3439 3510 3511 3512 3513 6 3508 3509 3511 3770 3507 4522 6 3510 3509 3512 3770 3771 3772 6 3511 3509 3513 3772 3773 3520 6 3512 3509 3439 3438 3514 3520 6 3513 3438 3515 3520 3521 3517 6 3514 3438 3436 2493 3516 3517 6 3515 2493 3517 3518 1607 1606 6 3515 3516 3518 3521 3514 3522 6 3517 3516 1607 1613 3522 3523 5 1613 1607 1605 1608 1610 6 3513 3514 3521 3773 3512 4531 6 3520 3514 3517 3522 4116 4531 6 3521 3517 3518 3523 3525 4116 6 3522 3518 1613 1614 3524 3525 6 3523 1614 3525 3526 3527 3528 6 3523 3524 3526 3522 4116 4117 6 3525 3524 3527 3529 4117 4118 6 3526 3524 3528 3529 3530 3543 6 3527 3524 1614 3543 3544 1615 6 3526 3527 3530 3531 4118 9786 6 3529 3527 3531 3532 3542 3543 6 3529 3530 3532 3533 9786 9787 6 3531 3530 3533 3534 3541 3542 6 3531 3532 3534 3535 9787 9788 6 3533 3532 3535 3536 3540 3541 6 3533 3534 3536 3537 9788 7178 6 3535 3534 3537 3538 3539 3540 6 3535 3536 3538 7182 7179 7178 6 3537 3536 3539 7182 7183 7184 6 3538 3536 3540 7184 7185 7212 6 3539 3536 3534 3541 7212 4372 6 3540 3534 3532 3542 4372 4097 6 3541 3532 3530 3543 4096 4097 6 3542 3530 3527 3528 3544 4096 6 3543 3528 1615 4099 4096 3093 6 2986 2987 3546 3824 3825 3829 6 3545 2987 2988 3547 3829 3830 6 3546 2988 2989 3548 3830 3831 6 3547 2989 2990 3549 3831 3832 6 3548 2990 2991 3550 3832 3833 6 3549 2991 2992 3551 3809 3833 6 3550 2992 2993 3552 3809 3810 6 3551 2993 2994 3553 3810 3811 6 3552 2994 2995 3554 3811 3812 6 3553 2995 2996 3555 3812 3813 6 3554 2996 3556 3813 3814 3815 6 3555 2996 2997 3557 3815 3816 6 3556 2997 2998 2999 3558 3816 6 3557 2999 3000 3559 3816 3817 6 3558 3000 3001 3560 3817 3818 6 3559 3001 3002 3561 3562 3818 6 3560 3002 3562 3563 3564 3565 6 3560 3561 3563 3818 3819 3820 6 3562 3561 3564 3820 3821 3822 6 3563 3561 3565 3822 3823 3566 6 3564 3561 3002 2666 2667 3566 6 3565 2667 2668 3567 3823 3564 6 3566 2668 2669 3568 3850 3823 6 3567 2669 2670 3569 3879 3850 6 3568 2670 2671 3570 3891 3879 6 3569 2671 2672 2673 3571 3891 6 3570 2673 3572 4237 3891 4257 6 3571 2673 2674 3573 4257 4258 6 3572 2674 2675 3391 3574 4258 6 3573 3391 3575 4258 4259 4263 6 3574 3391 3392 3576 4263 4264 6 3575 3392 3393 3577 4264 4265 6 3576 3393 3394 3578 4265 4266 6 3577 3394 3579 4266 4267 4268 6 3578 3394 2679 2680 3580 4268 6 3579 2680 2681 3581 4141 4268 6 3580 2681 2682 3582 4141 4142 6 3581 2682 2683 3583 4142 4143 6 3582 2683 2684 3584 4143 4144 6 3583 2684 2685 3585 4144 4145 6 3584 2685 2686 3586 4145 4146 6 3585 2686 2687 3587 4146 4147 6 3586 2687 2688 3588 4147 4148 6 3587 2688 2689 3278 3589 4148 6 3588 3278 3590 4148 4149 4150 6 3589 3278 3279 3591 4150 4151 6 3590 3279 3280 3592 4151 4152 6 3591 3280 3281 3593 4152 4153 6 3592 3281 3282 3594 4153 4154 6 3593 3282 3283 3595 4154 4155 6 3594 3283 3284 3596 4155 4156 6 3595 3284 3285 3597 4156 4157 6 3596 3285 3286 3598 4157 4158 6 3597 3286 3287 3599 4158 4159 6 3598 3287 3288 3600 4159 4160 6 3599 3288 3289 3601 4160 4161 6 3600 3289 3290 3291 3602 4161 6 3601 3291 3603 4161 4162 4163 6 3602 3291 3292 3604 4163 4164 6 3603 3292 3293 3605 4164 4165 6 3604 3293 3294 3606 4165 4166 6 3605 3294 3295 3607 4166 4167 6 3606 3295 3296 3608 4167 4168 6 3607 3296 3297 3298 3609 4168 6 3608 3298 3610 4168 4169 4170 6 3609 3298 3299 3611 4170 4171 6 3610 3299 3300 3612 4171 4172 6 3611 3300 3301 3613 4172 4173 6 3612 3301 3302 3614 4173 4174 6 3613 3302 3303 3615 4174 4175 6 3614 3303 3304 3616 4175 4176 6 3615 3304 3305 3617 4176 4177 6 3616 3305 3306 3618 4177 4178 6 3617 3306 3307 3619 4178 4179 6 3618 3307 3308 3620 4179 4180 6 3619 3308 3309 3621 4180 4181 6 3620 3309 3310 3622 4181 4182 6 3621 3310 3311 3623 4182 4183 6 3622 3311 3312 3624 4183 4184 6 3623 3312 3313 3625 4184 4185 6 3624 3313 3314 3626 4185 4186 6 3625 3314 3315 3627 4186 4187 6 3626 3315 3316 3628 4187 4188 6 3627 3316 3317 3629 4188 4189 6 3628 3317 3318 3630 4189 4190 6 3629 3318 3319 3631 4190 4191 6 3630 3319 3320 3632 4191 4192 6 3631 3320 3321 3633 4192 4193 6 3632 3321 3322 3323 3634 4193 6 3633 3323 3635 3903 4193 4194 6 3634 3323 3324 3636 3903 3904 6 3635 3324 3325 3326 3637 3904 6 3636 3326 3638 3904 3905 3906 6 3637 3326 3327 3328 3639 3906 6 3638 3328 3329 3640 3906 3907 6 3639 3329 3641 3907 3908 3642 5 3640 3329 3056 3057 3642 7 3641 3057 3058 3643 3908 3640 3927 6 3642 3058 3059 3644 3909 3927 5 3643 3059 3061 3909 3910 6 3381 3384 3646 3379 3378 4347 6 3645 3384 3647 4347 4348 4349 6 3646 3384 3385 3648 4352 4349 6 3647 3385 3649 3657 4352 4353 6 3648 3385 3386 3650 3657 3658 6 3649 3386 3388 3651 3658 3659 6 3650 3388 3652 3659 3660 3661 6 3651 3388 3389 3653 3661 3662 6 3652 3389 3654 3662 3663 3664 6 3653 3389 3390 3655 3664 3665 6 3654 3390 3656 3665 3666 3667 6 3655 3390 3382 3667 3668 3380 6 3648 3649 3658 4353 4354 4358 6 3657 3649 3650 3659 4371 4358 6 3658 3650 3651 3660 9793 4371 6 3659 3651 3661 4906 4908 9793 6 3660 3651 3652 3662 3669 4906 6 3661 3652 3653 3663 3669 3670 6 3662 3653 3664 3670 3671 3672 6 3663 3653 3654 3665 3672 3673 6 3664 3654 3655 3666 3673 3674 6 3665 3655 3667 3674 3675 3678 6 3666 3655 3656 3668 3364 3678 6 3667 3656 3380 3364 3365 3373 6 3661 3662 3670 4903 4905 4906 6 3669 3662 3663 3671 4902 4903 6 3670 3663 3672 5918 4902 3951 6 3671 3663 3664 3673 3950 3951 6 3672 3664 3665 3674 3944 3950 6 3673 3665 3666 3675 3676 3944 6 3674 3666 3676 3677 3362 3678 6 3674 3675 3677 3158 3944 3945 6 3676 3675 3158 3156 3155 3362 6 3362 3675 3361 3364 3667 3666 6 3404 3405 3406 3680 3900 3901 6 3679 3406 3407 3681 3682 3901 7 3680 3407 3682 3472 3471 3683 3408 6 3680 3681 3472 3901 3902 3473 5 3471 3681 3408 3409 3470 7 418 3100 3229 3231 3234 12 13 7 3473 3474 3686 3902 4665 4664 4688 5 3685 3474 3475 3687 4688 7 3686 3475 3476 3688 4688 4689 4690 6 3687 3476 3477 3689 4690 4691 6 3688 3477 3478 3690 4691 4692 6 3689 3478 3479 3691 3692 4692 6 3690 3479 3692 3693 3694 3480 6 3690 3691 3693 4692 4693 4694 6 3692 3691 3694 4694 4695 4696 6 3693 3691 3480 3499 3695 4696 6 3694 3499 3696 4696 4697 4698 6 3695 3499 3500 3697 4698 4699 6 3696 3500 2908 2909 3698 4699 6 3697 2909 2910 3699 3972 4699 6 3698 2910 2911 3700 3972 3973 6 3699 2911 2912 2913 3701 3973 6 3700 2913 3702 3973 3974 3975 6 3701 2913 2914 3703 3975 3976 6 3702 2914 2915 3704 3976 3977 6 3703 2915 2916 3705 3977 3978 6 3704 2916 2917 3706 3978 3979 6 3705 2917 2918 3707 3979 3980 6 3706 2918 2919 3708 3980 3981 6 3707 2919 2920 3709 3981 3982 6 3708 2920 2921 3710 3982 3983 6 3709 2921 2922 3711 3983 3984 6 3710 2922 2923 3712 3984 3985 6 3711 2923 2924 3713 3985 3986 6 3712 2924 2925 3714 3986 3987 6 3713 2925 2926 3715 3987 3988 6 3714 2926 2927 3716 3988 3989 6 3715 2927 2928 3717 3989 3990 6 3716 2928 2929 3718 3990 3991 6 3717 2929 2930 3719 3991 3992 6 3718 2930 2931 3720 3992 3993 6 3719 2931 2932 3721 3993 3994 6 3720 2932 2933 3722 3994 3995 6 3721 2933 2934 3723 3995 3996 6 3722 2934 2935 3724 3996 3997 6 3723 2935 2936 3725 3997 3998 6 3724 2936 2937 3726 3998 3999 6 3725 2937 2938 3727 3999 4000 6 3726 2938 2939 3728 4000 4001 6 3727 2939 2940 3729 4001 4002 6 3728 2940 2941 3730 4002 4003 6 3729 2941 2942 3731 4003 4004 6 3730 2942 2943 3732 4004 4005 6 3731 2943 2944 2945 3733 4005 6 3732 2945 2946 3734 4005 4006 6 3733 2946 2947 2948 3735 4006 6 3734 2948 3736 4006 4007 3737 5 3735 2948 2949 3242 3737 6 3736 3242 3738 4007 3735 4012 6 3737 3242 3243 3739 4012 4013 6 3738 3243 3244 3740 4013 4014 6 3739 3244 3245 3741 4014 4015 6 3740 3245 3246 3742 4015 4016 6 3741 3246 3247 3743 4016 4017 6 3742 3247 3248 3744 4017 4018 6 3743 3248 3249 3745 4018 4019 6 3744 3249 3250 3746 4019 4020 6 3745 3250 3747 4020 4021 4022 6 3746 3250 3251 3253 3748 4022 6 3747 3253 3749 4022 4023 4024 7 3748 3253 3254 3255 3256 3750 4024 5 3749 3256 3751 4024 4025 6 3750 3256 3257 3752 4025 4026 6 3751 3257 3258 3753 4029 4026 7 3752 3258 3754 4037 4029 4046 3755 5 3753 3258 3259 3260 3755 6 3754 3260 3261 3756 4046 3753 6 3755 3261 3262 3757 4046 4047 6 3756 3262 3263 3758 4047 4048 6 3757 3263 3264 3759 4048 4049 6 3758 3264 3265 4049 4050 4051 6 615 617 3761 3764 3765 3763 6 3760 617 625 627 3762 3763 6 3761 627 3763 3217 635 629 6 3761 3762 3765 3760 4040 3217 6 615 3760 3765 4038 6557 612 6 3764 3760 3763 4038 4039 4040 5 2085 1567 3767 3768 6093 6 3766 1567 3768 3769 1571 1568 6 3766 3767 3769 6092 6093 6094 7 3768 3767 1571 6094 6088 6317 6318 6 3510 3511 3771 4522 4523 4524 6 3770 3511 3772 4524 4525 4528 6 3771 3511 3512 3773 4528 4529 6 3772 3512 3520 4529 4530 4531 6 1682 1683 3775 5391 5385 5383 6 3774 1683 3776 5620 5391 3778 6 3775 1683 1684 1686 3777 3778 6 3776 1686 3778 3779 3780 3781 6 3776 3777 3779 7791 5620 3775 6 3778 3777 3780 7798 7792 7791 6 3779 3777 3781 7798 3783 3782 6 3780 3777 1686 1687 1688 3782 6 3781 1688 1689 1691 3783 3780 6 3782 1691 3784 7798 3780 7799 6 3783 1691 1692 3785 7799 7800 6 3784 1692 3786 3787 3788 7800 6 3785 1692 1693 1694 3416 3787 6 3786 3416 3417 3785 3788 3789 6 3785 3787 3789 7800 7801 3790 6 3788 3787 3417 3418 3419 3790 6 3789 3419 3791 7801 3788 7802 6 3790 3419 3420 3792 3793 7802 6 3791 3420 3793 3794 3423 3421 6 3791 3792 3794 7802 7803 7804 6 3793 3792 3423 3795 7804 7805 6 3794 3423 3424 3796 7809 7805 6 3795 3424 3797 3952 7809 7810 6 3796 3424 3425 3798 3952 3953 6 3797 3425 3799 3953 3954 3955 6 3798 3425 3426 3427 3800 3955 6 3799 3427 3428 3801 3955 3956 6 3800 3428 3429 3802 3956 3957 6 3801 3429 3432 3442 3803 3957 6 3802 3442 3804 3957 4100 4239 6 3803 3442 3443 3805 4100 4101 6 3804 3443 3806 4101 4102 4103 6 3805 3443 3444 3807 4103 4104 6 3806 3444 3445 3808 4104 4105 6 3807 3445 3447 4105 4106 4107 6 3550 3551 3810 3833 3834 3835 6 3809 3551 3552 3811 3835 3836 6 3810 3552 3553 3812 3836 3837 6 3811 3553 3554 3813 3837 3838 6 3812 3554 3555 3814 3838 3839 6 3813 3555 3815 3839 3840 3841 6 3814 3555 3556 3816 3841 3842 6 3815 3556 3557 3558 3817 3842 6 3816 3558 3559 3818 3842 3843 6 3817 3559 3560 3562 3819 3843 6 3818 3562 3820 3843 3844 3845 6 3819 3562 3563 3821 3845 3846 6 3820 3563 3822 3846 3847 3848 6 3821 3563 3564 3823 3848 3849 6 3822 3564 3566 3849 3850 3567 6 2986 3545 3825 3826 3277 2985 6 3824 3545 3826 3827 3828 3829 6 3824 3825 3827 4069 4065 3277 6 3826 3825 3828 4756 4069 4763 6 3827 3825 3829 4763 4764 4765 6 3828 3825 3545 3546 3830 4765 6 3829 3546 3547 3831 4765 4766 6 3830 3547 3548 3832 4766 4767 6 3831 3548 3549 3833 4770 4767 6 3832 3549 3550 3809 3834 4770 6 3833 3809 3835 5016 4770 5024 6 3834 3809 3810 3836 5024 5025 6 3835 3810 3811 3837 5025 5026 6 3836 3811 3812 3838 4405 5026 6 3837 3812 3813 3839 3864 4405 6 3838 3813 3814 3840 3864 3865 6 3839 3814 3841 3865 3866 3867 6 3840 3814 3815 3842 3853 3867 6 3841 3815 3816 3817 3843 3853 6 3842 3817 3818 3819 3844 3853 6 3843 3819 3845 3853 3854 3855 6 3844 3819 3820 3846 3855 3856 6 3845 3820 3821 3847 3856 3857 6 3846 3821 3848 3860 3857 3876 6 3847 3821 3822 3849 3876 3877 6 3848 3822 3823 3850 3877 3878 6 3849 3823 3567 3878 3879 3568 6 2181 2199 2179 3852 2201 3129 6 2179 3851 27 26 3129 9781 6 3841 3842 3843 3844 3854 3867 6 3853 3844 3855 3867 3868 3869 6 3854 3844 3845 3856 3869 3870 6 3855 3845 3846 3857 3858 3870 6 3856 3846 3858 3859 3860 3847 6 3856 3857 3859 3870 3871 3872 6 3858 3857 3860 3872 3873 3874 6 3859 3857 3847 3874 3875 3876 6 3343 3344 3346 3862 6717 3342 6 3861 3346 3863 6716 6715 6717 7 3862 3346 6532 6531 3347 6533 6716 6 3838 3839 3865 4405 4406 4407 6 3864 3839 3840 3866 4407 4408 6 3865 3840 3867 4408 4409 3868 6 3866 3840 3841 3853 3854 3868 6 3867 3854 3869 4409 3866 4420 6 3868 3854 3855 3870 4420 4421 6 3869 3855 3856 3858 3871 4421 6 3870 3858 3872 4421 4422 4423 6 3871 3858 3859 3873 4423 4424 6 3872 3859 3874 4424 4425 4426 6 3873 3859 3860 3875 4426 4427 6 3874 3860 3876 4427 4428 3888 6 3875 3860 3847 3848 3877 3888 6 3876 3848 3849 3878 3888 3889 6 3877 3849 3850 3879 3889 3890 6 3878 3850 3568 3890 3891 3569 6 2507 3330 2509 3881 3331 3332 6 2509 3880 3334 6499 2511 3332 6 3337 3339 3127 1171 414 3128 6 3127 3339 3122 3884 3885 3340 6 3122 3883 3885 3886 3887 3121 6 3884 3883 3886 3342 6717 3340 6 3884 3885 3887 6538 6715 6717 6 3884 3886 3121 6713 6714 6538 6 3876 3877 3889 4428 3875 4251 6 3888 3877 3878 3890 4236 4251 6 3889 3878 3879 3891 4236 4237 6 3890 3879 3569 4237 3571 3570 6 3397 3398 3893 4746 4744 4743 6 3892 3398 3894 4743 4748 4749 6 3893 3398 3399 3895 4752 4749 6 3894 3399 3896 4661 4758 4752 6 3895 3399 3400 3401 3897 4661 6 3896 3401 3402 3898 4661 4662 6 3897 3402 3899 4662 4663 4664 6 3898 3402 3403 3900 4664 4665 6 3899 3403 3404 3679 3901 4665 6 3900 3679 3680 3682 3902 4665 5 3901 3682 3473 4665 3685 6 3634 3635 3904 4194 4195 4196 6 3903 3635 3636 3637 3905 4196 6 3904 3637 3906 4196 4197 4198 6 3905 3637 3638 3639 3907 4198 6 3906 3639 3640 3908 4198 4199 6 3907 3640 3642 3927 4199 4200 5 3643 3644 3910 3927 3928 7 3909 3644 3061 3062 3911 3928 3929 7 3910 3062 3063 3912 3929 3930 3931 6 3911 3063 3069 3913 3931 3932 6 3912 3069 3070 3914 3932 3933 6 3913 3070 3071 3915 3933 3934 6 3914 3071 3072 3916 3934 3935 6 3915 3072 3073 3917 3935 3936 6 3916 3073 3918 3349 3919 3936 6 3917 3073 3074 3075 3076 3349 6 3917 3349 3350 3351 3920 3936 6 3919 3351 3921 3936 3937 3938 6 3920 3351 3352 3922 3938 3939 6 3921 3352 3353 3923 3939 3940 6 3922 3353 3354 3924 3940 3941 6 3923 3354 3355 3925 3941 3942 6 3924 3355 3374 3942 3943 3375 6 3085 2482 2483 2484 3150 3152 6 3908 3642 3643 3909 3928 4200 6 3927 3909 3910 3929 4200 4201 6 3928 3910 3911 3930 4201 4202 6 3929 3911 3931 4202 4203 4204 5 3930 3911 3912 3932 4204 6 3931 3912 3913 3933 4204 4205 6 3932 3913 3914 3934 4205 4206 6 3933 3914 3915 3935 4206 4207 6 3934 3915 3916 3936 4207 3937 6 3935 3916 3917 3919 3920 3937 6 3936 3920 3938 4207 3935 4335 6 3937 3920 3921 3939 4335 4336 6 3938 3921 3922 3940 4336 4337 6 3939 3922 3923 3941 4337 4338 6 3940 3923 3924 3942 4338 4339 6 3941 3924 3925 3943 4339 4340 6 3942 3925 3375 4340 4341 4342 6 3673 3674 3676 3945 3950 3947 6 3944 3676 3158 3159 3946 3947 6 3945 3159 3947 3948 5922 3962 6 3945 3946 3948 3949 3950 3944 6 3947 3946 3949 5920 5921 5922 6 3947 3948 3950 3951 5919 5920 6 3947 3949 3951 3672 3673 3944 6 3950 3949 3672 5918 3671 5919 6 3796 3797 3953 7810 7811 7812 6 3952 3797 3798 3954 7812 7813 6 3953 3798 3955 7813 7814 7815 6 3954 3798 3799 3800 3956 7815 6 3955 3800 3801 3957 4238 7815 6 3956 3801 3802 3803 4238 4239 6 3187 3188 3959 3960 7588 7586 6 3958 3188 3960 3961 2890 2888 6 3958 3959 3961 7588 7589 7590 6 3960 3959 2890 7590 7591 7592 6 3159 3160 3963 5922 3946 5923 6 3962 3160 3964 3965 5923 5924 6 3963 3160 3965 3966 3967 3161 6 3963 3964 3966 5924 5942 5943 6 3965 3964 3967 5943 5948 5947 6 3966 3964 3161 5948 2488 2487 6 3485 3489 3969 6556 4038 4039 6 3968 3489 3490 3970 1597 6556 6 3969 3490 3971 6358 1595 1597 6 3970 3490 3491 6555 6357 6358 6 3698 3699 3973 4699 4700 4701 6 3972 3699 3700 3701 3974 4701 6 3973 3701 3975 4701 4702 4703 6 3974 3701 3702 3976 4703 4704 6 3975 3702 3703 3977 4704 4705 6 3976 3703 3704 3978 4705 4706 6 3977 3704 3705 3979 4706 4707 6 3978 3705 3706 3980 4707 4708 6 3979 3706 3707 3981 4708 4709 6 3980 3707 3708 3982 4709 4710 6 3981 3708 3709 3983 4710 4711 6 3982 3709 3710 3984 4711 4712 6 3983 3710 3711 3985 4712 4713 6 3984 3711 3712 3986 4713 4714 6 3985 3712 3713 3987 4714 4715 6 3986 3713 3714 3988 4715 4716 6 3987 3714 3715 3989 4716 4717 6 3988 3715 3716 3990 4717 4718 6 3989 3716 3717 3991 4718 4719 6 3990 3717 3718 3992 4719 4720 6 3991 3718 3719 3993 4720 4721 6 3992 3719 3720 3994 4439 4721 6 3993 3720 3721 3995 4439 4440 6 3994 3721 3722 3996 4440 4441 6 3995 3722 3723 3997 4441 4442 6 3996 3723 3724 3998 4442 4443 6 3997 3724 3725 3999 4443 4444 6 3998 3725 3726 4000 4444 4445 6 3999 3726 3727 4001 4445 4446 6 4000 3727 3728 4002 4070 4446 6 4001 3728 3729 4003 4008 4070 6 4002 3729 3730 4004 4008 4009 6 4003 3730 3731 4005 4009 4010 6 4004 3731 3732 3733 4006 4010 6 4005 3733 3734 3735 4007 4010 6 4006 3735 3737 4010 4011 4012 6 4002 4003 4009 4070 4071 4072 6 4008 4003 4004 4010 4072 4011 6 4009 4004 4005 4006 4007 4011 6 4010 4007 4012 4072 4009 4073 6 4011 4007 3737 3738 4013 4073 6 4012 3738 3739 4014 4073 4074 7 4013 3739 3740 4015 4074 4075 4076 6 4014 3740 3741 4016 4076 4077 6 4015 3741 3742 4017 4077 4078 6 4016 3742 3743 4018 4078 4079 6 4017 3743 3744 4019 4079 4080 6 4018 3744 3745 4020 4080 4081 6 4019 3745 3746 4021 4081 4082 6 4020 3746 4022 4030 4082 4083 6 4021 3746 3747 3748 4023 4030 6 4022 3748 4024 4030 4031 4032 6 4023 3748 3749 3750 4025 4032 6 4024 3750 3751 4026 4027 4032 6 4025 3751 4027 4028 4029 3752 6 4025 4026 4028 4032 4033 4034 6 4027 4026 4029 4034 4035 4036 6 4028 4026 3752 4036 4037 3753 6 4021 4022 4023 4031 4083 4084 6 4030 4023 4032 4084 4085 4033 6 4031 4023 4024 4025 4027 4033 6 4032 4027 4034 4085 4031 4462 6 4033 4027 4028 4035 4041 4462 6 4034 4028 4036 4041 4042 4043 6 4035 4028 4029 4037 4043 4044 6 4036 4029 3753 4044 4045 4046 6 3764 3765 4039 6556 6557 3968 6 4038 3765 4040 3968 3485 3484 6 4039 3765 3763 3217 3484 3218 6 4034 4035 4042 4462 4463 4464 6 4041 4035 4043 4464 4465 4466 6 4042 4035 4036 4044 4466 4467 6 4043 4036 4037 4045 4467 4468 6 4044 4037 4046 4468 4469 4047 6 4045 4037 3753 3755 3756 4047 6 4046 3756 3757 4048 4469 4045 6 4047 3757 3758 4049 4469 4470 6 4048 3758 3759 4050 4470 4209 6 4049 3759 4051 4052 4208 4209 6 4050 3759 4052 4053 4054 3265 6 4050 4051 4053 4208 4221 4222 6 4052 4051 4054 3268 4055 4222 6 4053 4051 3265 3266 3267 3268 5 4053 3268 3269 4056 4222 7 4055 3269 3270 4057 4222 4223 4224 7 4056 3270 3271 4058 4224 4225 4226 6 4057 3271 3272 4059 4226 4227 6 4058 3272 3273 4060 4227 4228 6 4059 3273 3274 4061 4062 4228 6 4060 3274 4062 4063 4064 3275 6 4060 4061 4063 4230 4228 4502 6 4062 4061 4064 4066 4067 4502 6 4063 4061 3275 3276 4065 4066 6 4064 3276 4066 4069 3826 3277 6 4064 4065 4063 4067 4068 4069 6 4063 4066 4068 4513 4502 4754 6 4067 4066 4069 4754 4755 4756 6 4068 4066 4065 3826 4756 3827 6 4001 4002 4008 4071 4446 4447 6 4070 4008 4072 4447 4448 4449 6 4071 4008 4009 4011 4073 4449 6 4072 4011 4012 4013 4074 4449 6 4073 4013 4014 4075 4449 4450 6 4074 4014 4076 4450 4451 4452 5 4075 4014 4015 4077 4452 6 4076 4015 4016 4078 4452 4453 6 4077 4016 4017 4079 4453 4454 6 4078 4017 4018 4080 4454 4455 6 4079 4018 4019 4081 4455 4456 6 4080 4019 4020 4082 4456 4457 6 4081 4020 4021 4083 4457 4458 6 4082 4021 4030 4084 4458 4459 6 4083 4030 4031 4085 4459 4460 6 4084 4031 4033 4460 4461 4462 6 2880 2881 4087 4089 7599 7600 6 4086 2881 2882 2883 4088 4089 6 4087 2883 4089 4090 4091 4092 7 4087 4088 4090 7598 7599 4086 7751 6 4089 4088 4091 7751 7753 4379 6 4090 4088 4092 4094 4378 4379 6 4091 4088 2883 2498 4093 4094 6 4092 2498 4094 4095 2809 2499 6 4092 4093 4095 4091 4378 4387 6 4094 4093 2809 4387 4386 4388 6 3542 3543 4097 4098 4099 3544 6 3542 4096 4098 4365 4372 3541 6 4097 4096 4099 4365 4366 4367 6 4098 4096 3544 4367 3094 3093 6 3803 3804 4101 4239 4240 4241 6 4100 3804 3805 4102 4241 4242 6 4101 3805 4103 4242 4243 4244 6 4102 3805 3806 4104 4111 4244 6 4103 3806 3807 4105 4111 4112 6 4104 3807 3808 4106 4112 4113 6 4105 3808 4107 4108 4109 4113 6 4106 3808 3447 3448 3454 4108 6 4107 3454 4106 4109 4110 3456 6 4106 4108 4110 4113 4114 4115 6 4109 4108 3456 4115 4394 3464 6 4103 4104 4112 4244 4245 4246 6 4111 4104 4105 4113 4249 4246 6 4112 4105 4106 4109 4114 4249 6 4113 4109 4115 4249 4391 4392 6 4114 4109 4110 4392 4393 4394 7 3522 3525 4117 4530 4531 3521 4119 5 4116 3525 3526 4118 4119 6 4117 3526 4119 4120 3529 9786 7 4117 4118 4120 4121 9784 4530 4116 6 4119 4118 4121 4122 9786 9789 6 4119 4120 4122 4123 4395 9784 6 4121 4120 4123 4124 9789 7172 6 4121 4122 4124 4125 4126 4395 6 4123 4122 4125 7171 4140 7172 6 4123 4124 4126 4127 4128 4140 6 4123 4125 4127 4395 4396 4397 6 4126 4125 4128 4129 4130 4397 6 4127 4125 4129 4136 4139 4140 6 4127 4128 4130 4131 4135 4136 6 4127 4129 4131 4132 4397 4398 6 4130 4129 4132 4133 4134 4135 6 4130 4131 4133 4401 4398 4410 6 4132 4131 4134 4410 4411 4412 6 4133 4131 4135 4412 4413 7164 6 4134 4131 4129 4136 4137 7164 6 4135 4129 4128 4137 4138 4139 6 4135 4136 4138 7163 7161 7164 6 4137 4136 4139 7168 7163 7169 6 4138 4136 4128 4140 7169 7170 6 4139 4128 4125 7170 7171 4124 6 3580 3581 4142 4268 4269 4270 6 4141 3581 3582 4143 4270 4271 6 4142 3582 3583 4144 4271 4272 6 4143 3583 3584 4145 4272 4273 6 4144 3584 3585 4146 4273 4274 6 4145 3585 3586 4147 4274 4275 6 4146 3586 3587 4148 4275 4276 6 4147 3587 3588 3589 4149 4276 6 4148 3589 4150 4276 4277 4278 6 4149 3589 3590 4151 4278 4279 6 4150 3590 3591 4152 4279 4280 6 4151 3591 3592 4153 4280 4281 6 4152 3592 3593 4154 4281 4282 6 4153 3593 3594 4155 4282 4283 6 4154 3594 3595 4156 4283 4284 6 4155 3595 3596 4157 4284 4285 6 4156 3596 3597 4158 4285 4286 6 4157 3597 3598 4159 4286 4287 6 4158 3598 3599 4160 4287 4288 6 4159 3599 3600 4161 4288 4289 6 4160 3600 3601 3602 4162 4289 6 4161 3602 4163 4289 4290 4291 6 4162 3602 3603 4164 4291 4292 6 4163 3603 3604 4165 4292 4293 6 4164 3604 3605 4166 4293 4294 6 4165 3605 3606 4167 4294 4295 6 4166 3606 3607 4168 4295 4296 6 4167 3607 3608 3609 4169 4296 6 4168 3609 4170 4296 4297 4298 6 4169 3609 3610 4171 4298 4299 6 4170 3610 3611 4172 4299 4300 6 4171 3611 3612 4173 4300 4301 6 4172 3612 3613 4174 4301 4302 6 4173 3613 3614 4175 4302 4303 6 4174 3614 3615 4176 4303 4304 6 4175 3615 3616 4177 4304 4305 6 4176 3616 3617 4178 4305 4306 6 4177 3617 3618 4179 4306 4307 6 4178 3618 3619 4180 4307 4308 6 4179 3619 3620 4181 4308 4309 6 4180 3620 3621 4182 4309 4310 6 4181 3621 3622 4183 4310 4311 6 4182 3622 3623 4184 4311 4312 6 4183 3623 3624 4185 4312 4313 6 4184 3624 3625 4186 4313 4314 6 4185 3625 3626 4187 4314 4315 6 4186 3626 3627 4188 4315 4316 6 4187 3627 3628 4189 4316 4317 6 4188 3628 3629 4190 4317 4318 6 4189 3629 3630 4191 4318 4319 6 4190 3630 3631 4192 4319 4320 6 4191 3631 3632 4193 4320 4321 6 4192 3632 3633 3634 4194 4321 6 4193 3634 3903 4195 4321 4322 6 4194 3903 4196 4322 4323 4324 6 4195 3903 3904 3905 4197 4324 6 4196 3905 4198 4324 4325 4326 6 4197 3905 3906 3907 4199 4326 6 4198 3907 3908 4200 4326 4327 6 4199 3908 3927 3928 4201 4327 6 4200 3928 3929 4202 4327 4328 6 4201 3929 3930 4203 4328 4329 6 4202 3930 4204 4329 4330 4331 6 4203 3930 3931 3932 4205 4331 6 4204 3932 3933 4206 4331 4332 6 4205 3933 3934 4207 4332 4333 7 4206 3934 3935 3937 4333 4334 4335 6 4050 4052 4209 4210 4211 4221 6 4050 4208 4210 4470 4049 4477 6 4209 4208 4211 4212 4477 4478 6 4210 4208 4212 4213 4220 4221 6 4210 4211 4213 4214 4478 4479 6 4212 4211 4214 4215 4216 4220 6 4212 4213 4215 4479 4480 4481 6 4214 4213 4216 4217 4481 4482 6 4215 4213 4217 4218 4219 4220 6 4215 4216 4218 4232 4482 4483 6 4217 4216 4219 4232 4233 4234 6 4218 4216 4220 4224 4234 4223 6 4219 4216 4213 4211 4221 4223 6 4220 4211 4208 4052 4222 4223 6 4221 4052 4053 4055 4056 4223 6 4222 4056 4224 4221 4220 4219 6 4223 4056 4057 4225 4234 4219 6 4224 4057 4226 4235 4234 4488 5 4225 4057 4058 4227 4488 7 4226 4058 4059 4228 4229 4487 4488 6 4227 4059 4229 4230 4062 4060 6 4227 4228 4230 4489 4487 4500 6 4229 4228 4062 4500 4501 4502 6 3147 3412 3146 3145 9791 3413 6 4217 4218 4233 4483 4484 4485 6 4232 4218 4234 4235 4485 4486 6 4233 4218 4235 4225 4224 4219 6 4233 4234 4225 4486 4487 4488 6 3889 3890 4237 4251 4252 4256 6 4236 3890 3891 3571 4256 4257 6 3956 3957 4239 7815 7816 4503 6 4238 3957 3803 4100 4240 4503 6 4239 4100 4241 4503 4504 4505 6 4240 4100 4101 4242 4505 4506 6 4241 4101 4102 4243 4416 4506 6 4242 4102 4244 4416 4417 4418 6 4243 4102 4103 4111 4245 4418 6 4244 4111 4246 4247 4418 4419 6 4245 4111 4247 4248 4249 4112 6 4245 4246 4248 4419 7829 7830 6 4247 4246 4249 4391 4739 7830 6 4248 4246 4112 4113 4114 4391 6 3341 3338 1524 1525 2205 2206 6 3889 4236 4252 4253 4428 3888 6 4251 4236 4253 4254 4255 4256 6 4251 4252 4254 4647 4428 6892 6 4253 4252 4255 4729 4730 6892 6 4254 4252 4256 4729 4261 4260 6 4255 4252 4236 4237 4257 4260 6 4256 4237 3571 3572 4258 4260 6 4257 3572 3573 3574 4259 4260 6 4258 3574 4260 4261 4262 4263 6 4258 4259 4261 4256 4257 4255 6 4260 4259 4262 4732 4729 4255 6 4261 4259 4263 6901 4732 6902 6 4262 4259 3574 3575 4264 6902 6 4263 3575 3576 4265 5231 6902 6 4264 3576 3577 4266 5231 5232 6 4265 3577 3578 4267 5232 5233 6 4266 3578 4268 5233 5234 4269 6 4267 3578 3579 3580 4141 4269 6 4268 4141 4270 5234 4267 5451 6 4269 4141 4142 4271 5451 5452 6 4270 4142 4143 4272 5452 5453 6 4271 4143 4144 4273 5453 5454 6 4272 4144 4145 4274 5457 5454 6 4273 4145 4146 4275 5469 5457 6 4274 4146 4147 4276 5469 5470 6 4275 4147 4148 4149 4277 5470 6 4276 4149 4278 5470 5471 5472 6 4277 4149 4150 4279 5472 5473 6 4278 4150 4151 4280 5473 5474 6 4279 4151 4152 4281 5046 5474 6 4280 4152 4153 4282 5046 5047 6 4281 4153 4154 4283 5047 5048 6 4282 4154 4155 4284 5048 5049 6 4283 4155 4156 4285 5049 5050 6 4284 4156 4157 4286 5050 5051 6 4285 4157 4158 4287 5051 5052 6 4286 4158 4159 4288 4923 5052 6 4287 4159 4160 4289 4923 4924 6 4288 4160 4161 4162 4290 4924 6 4289 4162 4291 4924 4925 4926 6 4290 4162 4163 4292 4926 4927 6 4291 4163 4164 4293 4927 4928 6 4292 4164 4165 4294 4928 4929 6 4293 4165 4166 4295 4929 4930 6 4294 4166 4167 4296 4930 4931 6 4295 4167 4168 4169 4297 4931 6 4296 4169 4298 4771 4931 4932 6 4297 4169 4170 4299 4771 4772 6 4298 4170 4171 4300 4772 4773 6 4299 4171 4172 4301 4773 4774 6 4300 4172 4173 4302 4774 4775 6 4301 4173 4174 4303 4775 4776 6 4302 4174 4175 4304 4776 4777 6 4303 4175 4176 4305 4777 4778 6 4304 4176 4177 4306 4778 4779 6 4305 4177 4178 4307 4779 4780 6 4306 4178 4179 4308 4780 4781 6 4307 4179 4180 4309 4781 4782 6 4308 4180 4181 4310 4566 4782 6 4309 4181 4182 4311 4566 4567 6 4310 4182 4183 4312 4567 4568 6 4311 4183 4184 4313 4568 4569 6 4312 4184 4185 4314 4569 4570 6 4313 4185 4186 4315 4570 4571 6 4314 4186 4187 4316 4571 4572 6 4315 4187 4188 4317 4572 4573 6 4316 4188 4189 4318 4573 4574 6 4317 4189 4190 4319 4574 4575 6 4318 4190 4191 4320 4575 4576 6 4319 4191 4192 4321 4576 4577 6 4320 4192 4193 4194 4322 4577 6 4321 4194 4195 4323 4577 4578 6 4322 4195 4324 4578 4579 4580 6 4323 4195 4196 4197 4325 4580 6 4324 4197 4326 4580 4581 4582 6 4325 4197 4198 4199 4327 4582 6 4326 4199 4200 4201 4328 4582 6 4327 4201 4202 4329 4582 4583 6 4328 4202 4203 4330 4583 4584 6 4329 4203 4331 4584 4585 4589 7 4330 4203 4204 4205 4332 4589 4590 6 4331 4205 4206 4333 4590 4591 6 4332 4206 4207 4334 4591 4592 6 4333 4207 4335 4336 4429 4592 5 4334 4207 3937 3938 4336 6 4335 3938 3939 4337 4334 4429 6 4336 3939 3940 4338 4429 4430 6 4337 3940 3941 4339 4430 4431 6 4338 3941 3942 4340 4431 4432 6 4339 3942 3943 4341 4432 4433 6 4340 3943 4342 4433 4434 4435 6 4341 3943 3375 3376 4343 4435 6 4342 3376 3377 4344 4345 4435 6 4343 3377 4345 4346 4347 3378 6 4343 4344 4346 4435 4436 4437 6 4345 4344 4347 4437 4438 4348 6 4346 4344 3378 3645 3646 4348 6 4347 3646 4349 4350 4438 4346 6 4348 3646 4350 4351 4352 3647 6 4348 4349 4351 4601 4438 4602 6 4350 4349 4352 4602 4603 4604 6 4351 4349 3647 3648 4353 4604 6 4352 3648 3657 4354 4355 4604 6 4353 3657 4355 4356 4357 4358 6 4353 4354 4356 4604 4605 4606 6 4355 4354 4357 4361 4362 4606 6 4356 4354 4358 4359 4360 4361 6 4357 4354 4359 4371 3658 3657 6 4357 4358 4360 4368 4369 4371 6 4357 4359 4361 4364 4368 4614 6 4357 4360 4356 4362 4363 4364 6 4356 4361 4363 4606 4607 4608 6 4362 4361 4364 4611 4608 4612 6 4363 4361 4360 4612 4613 4614 6 4097 4098 4366 4372 4373 4374 6 4365 4098 4367 4374 4375 4376 7 4366 4098 4099 3094 4376 1626 1624 6 4360 4359 4369 4370 4614 4615 6 4368 4359 4370 4371 9794 9793 6 4368 4369 9794 4642 4637 4615 6 4369 4359 4358 3658 9793 3659 6 4097 4365 4373 7212 3540 3541 6 4372 4365 4374 7212 7210 7209 6 4373 4365 4366 4375 7209 7213 6 4374 4366 4376 4377 7213 7214 6 4375 4366 4367 4377 1627 1626 5 4375 4376 1627 7214 7215 6 4091 4094 4379 4380 4381 4387 7 4091 4378 4380 7753 4090 7752 7754 6 4379 4378 4381 4382 7754 7755 6 4380 4378 4382 4383 4384 4387 6 4380 4381 4383 7755 7756 7764 6 4382 4381 4384 4385 4389 7764 6 4383 4381 4385 3140 4386 4387 6 4383 4384 3140 4389 4390 3141 6 3140 4384 4387 4095 4388 3139 6 4386 4384 4381 4378 4094 4095 6 4386 4095 2809 2810 2813 3139 6 4383 4385 4390 7764 7765 7766 6 4389 4385 3141 7766 7767 3142 6 4249 4114 4392 4248 4739 4740 6 4391 4114 4115 4393 4402 4740 6 4392 4115 4394 4402 4403 4404 6 4393 4115 4110 3464 4404 3465 5 4121 4123 4126 4396 9784 7 4395 4126 4397 4399 4528 4529 9784 6 4396 4126 4127 4130 4398 4399 6 4397 4130 4399 4400 4401 4132 6 4397 4398 4400 4525 4528 4396 5 4399 4398 4401 4527 4525 7 4400 4398 4132 4410 4534 4527 4535 6 4392 4393 4403 4740 4741 4742 6 4402 4393 4404 4742 4743 4744 6 4403 4393 4394 3465 4744 4745 6 3837 3838 3864 4406 5026 5027 6 4405 3864 4407 5027 5028 5029 6 4406 3864 3865 4408 5029 5030 6 4407 3865 3866 4409 5030 5031 6 4408 3866 3868 4420 5031 5032 6 4401 4132 4133 4411 4535 4536 6 4410 4133 4412 4545 4539 4536 6 4411 4133 4134 4413 4414 4545 6 4412 4134 4414 4415 7164 7165 6 4412 4413 4415 4545 4544 4648 6 4414 4413 4649 4648 7165 7166 6 4242 4243 4417 4506 4507 4508 6 4416 4243 4418 4508 4509 4510 6 4417 4243 4244 4245 4419 4510 6 4418 4245 4247 7828 4510 7829 6 4409 3868 3869 4421 5032 5033 6 4420 3869 3870 3871 4422 5033 6 4421 3871 4423 5033 5034 5035 6 4422 3871 3872 4424 5035 5036 6 4423 3872 3873 4425 4643 5036 6 4424 3873 4426 4643 4644 4645 6 4425 3873 3874 4427 4645 4646 6 4426 3874 3875 4428 4646 4647 6 4427 3875 3888 4647 4253 4251 6 4334 4336 4337 4430 4592 4593 6 4429 4337 4338 4431 4593 4594 6 4430 4338 4339 4432 4594 4595 6 4431 4339 4340 4433 4595 4596 6 4432 4340 4341 4434 4596 4597 6 4433 4341 4435 4597 4598 4436 6 4434 4341 4342 4343 4345 4436 6 4435 4345 4437 4598 4434 4599 6 4436 4345 4346 4438 4599 4600 6 4437 4346 4348 4600 4601 4350 6 3993 3994 4440 4721 4722 4723 6 4439 3994 3995 4441 4723 4724 6 4440 3995 3996 4442 4724 4725 6 4441 3996 3997 4443 4725 4726 6 4442 3997 3998 4444 4726 4727 6 4443 3998 3999 4445 4727 4728 6 4444 3999 4000 4446 4728 4658 6 4445 4000 4001 4070 4447 4658 6 4446 4070 4071 4448 4658 4659 6 4447 4071 4449 4659 4660 4450 6 4448 4071 4072 4073 4074 4450 6 4449 4074 4075 4451 4660 4448 6 4450 4075 4452 4669 4738 4660 6 4451 4075 4076 4077 4453 4669 6 4452 4077 4078 4454 4669 4670 6 4453 4078 4079 4455 4670 4671 6 4454 4079 4080 4456 4671 4672 6 4455 4080 4081 4457 4672 4673 6 4456 4081 4082 4458 4673 4674 6 4457 4082 4083 4459 4674 4675 6 4458 4083 4084 4460 4675 4676 6 4459 4084 4085 4461 4676 4677 6 4460 4085 4462 4677 4678 4679 7 4461 4085 4033 4034 4041 4463 4679 5 4462 4041 4464 4679 4680 6 4463 4041 4042 4465 4471 4680 6 4464 4042 4466 4471 4472 4473 6 4465 4042 4043 4467 4473 4474 6 4466 4043 4044 4468 4474 4475 6 4467 4044 4045 4469 4475 4476 6 4468 4045 4047 4048 4470 4476 6 4469 4048 4049 4209 4476 4477 6 4464 4465 4472 4680 4681 4682 6 4471 4465 4473 4682 4683 4684 6 4472 4465 4466 4474 4684 4685 6 4473 4466 4467 4475 4685 4686 6 4474 4467 4468 4476 4686 4687 6 4475 4468 4469 4470 4477 4687 6 4476 4470 4209 4210 4478 4687 6 4477 4210 4212 4479 4687 5213 6 4478 4212 4214 4480 5213 5214 6 4479 4214 4481 5214 5215 5216 6 4480 4214 4215 4482 4490 5216 6 4481 4215 4217 4483 4490 4491 6 4482 4217 4232 4484 4491 4492 6 4483 4232 4485 4492 4493 4494 6 4484 4232 4233 4486 4494 4495 6 4485 4233 4235 4487 4489 4495 6 4486 4235 4488 4227 4489 4229 5 4487 4235 4227 4226 4225 6 4486 4487 4229 4495 4496 4500 6 4481 4482 4491 4981 4989 5216 6 4490 4482 4483 4492 4981 4982 6 4491 4483 4484 4493 4982 4983 6 4492 4484 4494 4983 4984 4985 6 4493 4484 4485 4495 4985 4497 6 4494 4485 4486 4489 4496 4497 6 4495 4489 4497 4498 4499 4500 6 4495 4496 4498 4985 4494 4986 6 4497 4496 4499 4986 4987 4988 5 4498 4496 4500 4988 4511 7 4499 4496 4489 4229 4230 4501 4511 6 4500 4230 4502 4511 4512 4513 6 4501 4230 4062 4513 4067 4063 6 4239 4240 4504 7816 4238 7817 6 4503 4240 4505 7817 7818 7819 6 4504 4240 4241 4506 7819 7820 6 4505 4241 4242 4416 4507 7820 6 4506 4416 4508 7820 7821 7822 6 4507 4416 4417 4509 7822 7823 6 4508 4417 4510 7823 7824 7825 6 4509 4417 4418 7825 7828 4419 7 4500 4501 4512 4988 4499 5002 4999 6 4511 4501 4513 4754 4759 5002 5 4512 4501 4502 4067 4754 6 426 411 4515 4516 5611 5612 6 4514 411 4516 4517 4521 410 6 4514 4515 4517 4518 5611 5615 6 4516 4515 4518 4519 4520 4521 6 4516 4517 4519 9734 7508 5615 6 4518 4517 4520 5235 9734 9678 6 4519 4517 4521 5235 5236 5237 6 4520 4517 4515 410 5237 421 7 3507 3510 3770 4523 6693 6695 6704 6 4522 3770 4524 6694 6693 4532 6 4523 3770 3771 4525 4526 4532 7 4524 3771 4526 4527 4400 4399 4528 6 4524 4525 4527 4532 4533 4534 5 4526 4525 4400 4534 4401 6 4399 4525 3771 3772 4529 4396 6 4528 3772 3773 4530 4396 9784 6 4529 3773 4531 4116 4119 9784 5 4530 3773 4116 3521 3520 6 4524 4526 4533 5156 4523 6694 6 4532 4526 4534 5156 5157 4666 6 4533 4526 4527 4401 4535 4666 6 4534 4401 4410 4536 4537 4666 6 4535 4410 4537 4538 4539 4411 6 4535 4536 4538 4666 4667 4668 6 4537 4536 4539 4540 4546 4668 6 4538 4536 4540 4541 4545 4411 6 4538 4539 4541 4542 4546 4547 6 4540 4539 4542 4543 4544 4545 6 4540 4541 4543 4550 4547 4551 6 4542 4541 4544 4551 4552 4553 6 4543 4541 4545 4414 4648 4553 6 4544 4541 4539 4411 4412 4414 6 4538 4540 4547 4548 9762 4668 6 4546 4540 4548 4549 4550 4542 6 4546 4547 4549 4557 4560 9762 6 4548 4547 4550 4557 4558 4559 6 4549 4547 4542 4551 6763 4559 6 4550 4542 4543 4552 7144 6763 6 4551 4543 4553 4554 7145 7144 6 4552 4543 4554 4555 4544 4648 6 4552 4553 4555 4556 7145 7146 6 4554 4553 4556 4648 4649 7153 6 4554 4555 7146 7148 7149 7153 6 4548 4549 4558 4560 4561 4562 6 4557 4549 4559 4565 4562 6764 6 4558 4549 6763 6762 6764 4550 7 4548 4557 4561 9762 9761 6675 9792 6 4560 4557 4562 4563 6674 6675 6 4561 4557 4563 4564 4565 4558 6 4561 4562 4564 6665 6666 6674 6 4563 4562 4565 6673 6665 6790 6 4564 4562 4558 6764 6765 6790 6 4309 4310 4567 4782 4783 4784 6 4566 4310 4311 4568 4784 4785 6 4567 4311 4312 4569 4785 4786 6 4568 4312 4313 4570 4786 4787 6 4569 4313 4314 4571 4787 4788 6 4570 4314 4315 4572 4788 4789 6 4571 4315 4316 4573 4789 4790 6 4572 4316 4317 4574 4790 4791 6 4573 4317 4318 4575 4791 4792 6 4574 4318 4319 4576 4792 4793 6 4575 4319 4320 4577 4793 4794 6 4576 4320 4321 4322 4578 4794 6 4577 4322 4323 4579 4794 4795 6 4578 4323 4580 4795 4796 4797 6 4579 4323 4324 4325 4581 4797 6 4580 4325 4582 4797 4798 4583 6 4581 4325 4326 4327 4328 4583 6 4582 4328 4329 4584 4798 4581 7 4583 4329 4330 4585 4586 4804 4798 6 4584 4330 4586 4587 4588 4589 5 4584 4585 4587 4804 4805 6 4586 4585 4588 4805 4806 4807 6 4587 4585 4589 4807 4808 4809 6 4588 4585 4330 4331 4590 4809 5 4589 4331 4332 4591 4809 6 4590 4332 4333 4592 4809 4810 6 4591 4333 4334 4429 4593 4810 6 4592 4429 4430 4594 4810 4811 6 4593 4430 4431 4595 4811 4812 6 4594 4431 4432 4596 4812 4813 6 4595 4432 4433 4597 4813 4814 6 4596 4433 4434 4598 4814 4815 6 4597 4434 4436 4599 4815 4816 6 4598 4436 4437 4600 4816 4817 6 4599 4437 4438 4601 4817 4818 6 4600 4438 4350 4602 4821 4818 6 4601 4350 4351 4603 4821 4822 6 4602 4351 4604 4825 4822 4826 7 4603 4351 4352 4353 4355 4605 4826 5 4604 4355 4606 4826 4827 6 4605 4355 4356 4362 4607 4827 5 4606 4362 4608 4609 4827 6 4607 4362 4609 4610 4611 4363 7 4607 4608 4610 4827 4828 4829 4830 6 4609 4608 4611 4830 4831 4832 6 4610 4608 4363 4612 4832 4834 6 4611 4363 4364 4613 4837 4834 6 4612 4364 4614 4616 4617 4837 6 4613 4364 4360 4368 4615 4616 7 4614 4368 4616 4637 4634 4619 4370 6 4614 4615 4613 4617 4618 4619 6 4613 4616 4618 4837 4622 4838 6 4617 4616 4619 4620 4621 4622 6 4618 4616 4620 4633 4634 4615 6 4618 4619 4621 4628 4629 4633 6 4618 4620 4622 4623 4624 4628 6 4618 4621 4623 4840 4838 4617 6 4622 4621 4624 4625 4840 4841 6 4623 4621 4625 4626 4627 4628 6 4623 4624 4626 4841 4860 4853 6 4625 4624 4627 4860 4861 4862 6 4626 4624 4628 4862 4863 4630 6 4627 4624 4621 4620 4629 4630 6 4628 4620 4630 4631 4632 4633 6 4628 4629 4631 4863 4627 4864 6 4630 4629 4632 4638 4868 4864 6 4631 4629 4633 4638 4639 4635 6 4632 4629 4620 4619 4634 4635 6 4633 4619 4635 4636 4637 4615 6 4633 4634 4636 4639 4632 4640 6 4635 4634 4637 4640 4641 4642 5 4636 4634 4615 4642 4370 6 4631 4632 4639 4868 4912 9760 6 4638 4632 4635 4640 4912 4913 6 4639 4635 4636 4641 4916 4913 6 4640 4636 4642 4910 4916 4909 7 4641 4636 4637 4908 4909 9794 4370 6 4424 4425 4644 5036 5037 5044 6 4643 4425 4645 5045 5044 6889 6 4644 4425 4426 4646 6890 6889 6 4645 4426 4427 4647 6890 6891 6 4646 4427 4428 4253 6891 6892 6 4544 4414 4553 4555 4649 4415 6 4555 4648 4415 7166 7154 7153 6 422 52 53 4651 4652 9684 6 4650 53 4652 4653 4657 54 6 4650 4651 4653 4654 9683 9684 6 4652 4651 4654 4655 4656 4657 6 4652 4653 4655 9682 9680 9683 6 4654 4653 4656 9682 9685 9686 7 4655 4653 4657 5380 9688 9686 9689 6 4656 4653 4651 54 5380 55 6 4446 4447 4659 4728 4445 4736 6 4658 4447 4448 4660 4736 4737 6 4659 4448 4450 4737 4738 4451 6 3895 3896 3897 4662 7841 4758 6 4661 3897 3898 4663 7841 7842 6 4662 3898 4664 7842 4689 4688 6 4663 3898 3899 4665 3685 4688 6 4664 3899 3900 3901 3902 3685 6 4534 4535 4537 4667 5157 4533 6 4666 4537 4668 9750 5157 9761 6 4667 4537 4538 9761 9762 4546 7 4451 4452 4453 4670 4980 4738 5194 6 4669 4453 4454 4671 5194 5195 6 4670 4454 4455 4672 5195 5196 6 4671 4455 4456 4673 5196 5197 6 4672 4456 4457 4674 5197 5198 6 4673 4457 4458 4675 5198 5199 6 4674 4458 4459 4676 5199 5200 6 4675 4459 4460 4677 5200 5201 6 4676 4460 4461 4678 5201 5202 6 4677 4461 4679 5202 5203 5204 6 4678 4461 4462 4463 4680 5204 7 4679 4463 4464 4471 4681 5204 5205 5 4680 4471 4682 5205 5206 7 4681 4471 4472 4683 5206 5207 5208 5 4682 4472 4684 5208 5209 7 4683 4472 4473 4685 5209 5210 5211 6 4684 4473 4474 4686 5211 5212 6 4685 4474 4475 4687 5212 5213 6 4686 4475 4476 4477 4478 5213 6 4664 3685 3686 3687 4689 4663 6 4688 3687 4690 7842 4663 7843 6 4689 3687 3688 4691 7843 7844 6 4690 3688 3689 4692 5158 7844 6 4691 3689 3690 3692 4693 5158 6 4692 3692 4694 5158 5159 5160 6 4693 3692 3693 4695 5160 5161 6 4694 3693 4696 5161 5162 5163 6 4695 3693 3694 3695 4697 5163 6 4696 3695 4698 5163 5164 5165 6 4697 3695 3696 4699 5165 4700 6 4698 3696 3697 3698 3972 4700 6 4699 3972 4701 5165 4698 7854 6 4700 3972 3973 3974 4702 7854 6 4701 3974 4703 7308 7854 7855 6 4702 3974 3975 4704 7308 7309 6 4703 3975 3976 4705 7309 7310 6 4704 3976 3977 4706 7310 7311 6 4705 3977 3978 4707 7311 7312 6 4706 3978 3979 4708 5170 7312 6 4707 3979 3980 4709 5170 5171 6 4708 3980 3981 4710 5171 5172 6 4709 3981 3982 4711 5172 5173 6 4710 3982 3983 4712 5173 5174 6 4711 3983 3984 4713 5174 5175 6 4712 3984 3985 4714 5175 5176 6 4713 3985 3986 4715 5176 5177 6 4714 3986 3987 4716 4965 5177 6 4715 3987 3988 4717 4965 4966 6 4716 3988 3989 4718 4966 4967 6 4717 3989 3990 4719 4967 4968 6 4718 3990 3991 4720 4968 4969 6 4719 3991 3992 4721 4969 4970 6 4720 3992 3993 4439 4722 4970 6 4721 4439 4723 4970 4971 4972 6 4722 4439 4440 4724 4972 4973 6 4723 4440 4441 4725 4973 4974 6 4724 4441 4442 4726 4733 4974 6 4725 4442 4443 4727 4733 4734 6 4726 4443 4444 4728 4734 4735 6 4727 4444 4445 4658 4735 4736 6 4254 4255 4730 4731 4732 4261 6 4254 4729 4731 6892 6893 6894 6 4730 4729 4732 6894 6895 6896 6 4731 4729 4261 6896 6901 4262 6 4725 4726 4734 4974 4975 4976 6 4733 4726 4727 4735 4976 4977 6 4734 4727 4728 4736 4977 4978 6 4735 4728 4658 4659 4737 4978 6 4736 4659 4660 4738 4978 4979 6 4737 4660 4451 4979 4980 4669 6 4248 4391 4740 5003 7830 7831 6 4739 4391 4392 4402 4741 5003 6 4740 4402 4742 4753 5003 5004 6 4741 4402 4403 4743 4753 4748 6 4742 4403 4744 3892 3893 4748 6 4743 4403 4404 4745 4746 3892 6 4744 4404 3465 3466 3468 4746 6 4745 3468 4747 3397 3892 4744 6 4746 3468 2172 2173 3395 3397 6 4743 3893 4749 4750 4753 4742 6 4748 3893 4750 4751 4752 3894 6 4748 4749 4751 5005 4753 7837 6 4750 4749 4752 4757 7837 7838 6 4751 4749 3894 4757 4758 3895 6 4741 4742 4748 5004 5005 4750 7 4513 4067 4068 4755 4512 4759 4760 5 4754 4068 4756 4760 4761 7 4755 4068 4069 3827 4761 4762 4763 6 4751 4752 4758 7838 7839 7840 6 4757 4752 3895 7840 7841 4661 6 4512 4754 4760 5006 5002 5001 5 4759 4754 4755 4761 5006 7 4760 4755 4756 4762 5006 5007 5008 6 4761 4756 4763 5008 5009 5010 6 4762 4756 3827 3828 4764 5010 6 4763 3828 4765 5010 5011 5012 6 4764 3828 3829 3830 4766 5012 6 4765 3830 3831 4767 4768 5012 6 4766 3831 4768 4769 4770 3832 7 4766 4767 4769 5012 5011 5013 5014 6 4768 4767 4770 5014 5015 5016 6 4769 4767 3832 5016 3834 3833 6 4297 4298 4772 4932 4933 4934 6 4771 4298 4299 4773 4934 4935 6 4772 4299 4300 4774 4935 4936 6 4773 4300 4301 4775 4936 4937 6 4774 4301 4302 4776 4937 4938 6 4775 4302 4303 4777 4938 4939 6 4776 4303 4304 4778 4939 4940 6 4777 4304 4305 4779 4940 4941 6 4778 4305 4306 4780 4941 4942 6 4779 4306 4307 4781 4942 4943 6 4780 4307 4308 4782 4943 4944 6 4781 4308 4309 4566 4783 4944 6 4782 4566 4784 4944 4945 4946 6 4783 4566 4567 4785 4946 4947 6 4784 4567 4568 4786 4947 4948 6 4785 4568 4569 4787 4948 4949 6 4786 4569 4570 4788 4949 4950 6 4787 4570 4571 4789 4950 4951 6 4788 4571 4572 4790 4951 4952 6 4789 4572 4573 4791 4952 4953 6 4790 4573 4574 4792 4953 4954 6 4791 4574 4575 4793 4799 4954 6 4792 4575 4576 4794 4799 4800 6 4793 4576 4577 4578 4795 4800 6 4794 4578 4579 4796 4800 4801 6 4795 4579 4797 4801 4802 4803 6 4796 4579 4580 4581 4798 4803 6 4797 4581 4583 4803 4804 4584 6 4792 4793 4800 4954 4955 4956 6 4799 4793 4794 4795 4801 4956 6 4800 4795 4796 4802 4956 4957 6 4801 4796 4803 4957 4958 4959 6 4802 4796 4797 4798 4804 4959 6 4803 4798 4584 4586 4805 4959 6 4804 4586 4587 4806 4918 4959 6 4805 4587 4807 4918 4919 4920 6 4806 4587 4588 4808 4920 4921 6 4807 4588 4809 4921 4922 4810 6 4808 4588 4589 4590 4591 4810 7 4809 4591 4592 4593 4811 4922 4808 5 4810 4593 4594 4812 4922 6 4811 4594 4595 4813 4964 4922 6 4812 4595 4596 4814 5093 4964 6 4813 4596 4597 4815 5093 5094 6 4814 4597 4598 4816 5094 5095 6 4815 4598 4599 4817 5095 5096 6 4816 4599 4600 4818 4819 5096 6 4817 4600 4819 4820 4821 4601 6 4817 4818 4820 5096 5097 5098 6 4819 4818 4821 5098 5099 4823 6 4820 4818 4601 4602 4822 4823 6 4821 4602 4823 4824 4825 4603 6 4821 4822 4824 5099 4820 5100 6 4823 4822 4825 5100 5101 5102 6 4824 4822 4603 4826 5102 5103 6 4825 4603 4604 4605 4827 5103 7 4826 4605 4606 4607 4609 4828 5103 6 4827 4609 4829 5103 5102 5104 6 4828 4609 4830 5104 5105 5106 6 4829 4609 4610 4831 5106 5107 6 4830 4610 4832 4833 5113 5107 5 4831 4610 4611 4833 4834 6 4831 4832 4834 4835 5113 5114 7 4833 4832 4611 4835 4836 4837 4612 6 4833 4834 4836 5114 4845 4844 6 4835 4834 4837 4838 4839 4844 6 4836 4834 4612 4613 4617 4838 6 4836 4837 4839 4840 4622 4617 6 4836 4838 4840 4842 4843 4844 6 4839 4838 4622 4623 4841 4842 6 4840 4623 4842 4625 4852 4853 6 4840 4841 4839 4843 4852 4850 6 4839 4842 4844 4845 4846 4850 5 4839 4843 4845 4835 4836 7 4844 4843 4846 4847 5114 4835 5115 6 4845 4843 4847 4848 4849 4850 6 4845 4846 4848 5117 5115 5118 6 4847 4846 4849 5118 5119 5120 6 4848 4846 4850 4851 5120 5121 6 4849 4846 4851 4852 4842 4843 6 4849 4850 4852 4854 4855 5121 6 4851 4850 4842 4841 4853 4854 6 4852 4841 4854 4857 4860 4625 6 4851 4852 4853 4855 4856 4857 6 4851 4854 4856 5121 5122 5123 6 4855 4854 4857 4858 5123 5124 6 4856 4854 4853 4858 4859 4860 6 4856 4857 4859 5124 5125 5129 6 4858 4857 4860 5129 5130 4861 6 4859 4857 4853 4625 4626 4861 6 4860 4626 4862 5130 4859 5131 6 4861 4626 4627 4863 4865 5131 6 4862 4627 4630 4864 4865 4866 6 4863 4630 4866 4867 4868 4631 6 4862 4863 4866 5131 5132 5136 6 4865 4863 4864 4867 5136 5137 6 4866 4864 4868 4869 4870 5137 6 4867 4864 4631 4638 4869 9760 6 4867 4868 4870 4871 4872 9760 6 4867 4869 4871 5137 5138 5139 6 4870 4869 4872 4873 5150 5139 6 4871 4869 4873 4874 4875 9760 6 4871 4872 4874 5149 5147 5150 6 4873 4872 4875 4876 4877 5149 6 4874 4872 4876 9760 4912 4914 6 4874 4875 4877 4878 4879 4914 6 4874 4876 4878 5155 5149 4882 6 4877 4876 4879 4880 4881 4882 6 4878 4876 4880 4914 4915 9753 7 4878 4879 4881 9753 9754 9756 9757 6 4878 4880 4882 4883 4884 9757 6 4878 4881 4883 5155 4877 5369 6 4882 4881 4884 4885 5369 5370 6 4883 4881 4885 4886 9757 4895 6 4883 4884 4886 4887 4888 5370 6 4885 4884 4887 4894 4891 4895 6 4885 4886 4888 4889 4890 4891 6 4885 4887 4889 5372 5370 5899 6 4888 4887 4890 5898 5896 5899 6 4889 4887 4891 4892 5898 5901 6 4890 4887 4892 4893 4894 4886 6 4890 4891 4893 5901 5902 5903 6 4892 4891 4894 5912 5903 5913 6 4893 4891 4886 4895 4896 5913 7 4894 4886 4896 4897 9757 9756 4884 6 4894 4895 4897 4898 4899 5913 5 4896 4895 4898 9756 9759 6 4896 4897 4899 4900 4901 9759 6 4896 4898 4900 5913 5914 5917 6 4899 4898 4901 4902 5917 5918 6 4900 4898 4902 4903 4904 9759 6 4900 4901 4903 5918 3671 3670 6 4902 4901 4904 4905 3669 3670 6 4903 4901 4905 9754 4911 9759 6 4903 4904 3669 4906 4907 4911 6 3669 4905 4907 4908 3661 3660 6 4906 4905 4908 4909 4910 4911 7 4906 4907 4909 4642 3660 9793 9794 5 4908 4907 4910 4642 4641 6 4909 4907 4911 4917 4916 4641 6 4910 4907 4905 9754 4917 4904 6 4638 4639 4913 4914 9760 4875 6 4912 4639 4914 4915 4916 4640 6 4912 4913 4915 4875 4876 4879 6 4914 4913 4916 4917 9753 4879 6 4915 4913 4917 4910 4641 4640 6 4915 4916 4910 9753 9754 4911 6 4805 4806 4919 4959 4958 4960 6 4918 4806 4920 4960 4961 4962 6 4919 4806 4807 4921 4962 4963 6 4920 4807 4808 4922 4963 4964 6 4921 4808 4810 4964 4812 4811 6 4287 4288 4924 5052 5053 5054 6 4923 4288 4289 4290 4925 5054 6 4924 4290 4926 5054 5055 5056 6 4925 4290 4291 4927 5056 5057 6 4926 4291 4292 4928 5057 5058 6 4927 4292 4293 4929 5058 5059 6 4928 4293 4294 4930 5059 5060 6 4929 4294 4295 4931 5060 5061 6 4930 4295 4296 4297 4932 5061 6 4931 4297 4771 4933 5061 5062 6 4932 4771 4934 5062 5063 5064 6 4933 4771 4772 4935 5064 5065 6 4934 4772 4773 4936 5065 5066 6 4935 4773 4774 4937 5066 5067 6 4936 4774 4775 4938 5067 5068 6 4937 4775 4776 4939 5068 5069 6 4938 4776 4777 4940 5069 5070 6 4939 4777 4778 4941 5070 5071 6 4940 4778 4779 4942 5071 5072 6 4941 4779 4780 4943 5072 5073 6 4942 4780 4781 4944 5073 5074 6 4943 4781 4782 4783 4945 5074 6 4944 4783 4946 5074 5075 5076 6 4945 4783 4784 4947 5076 5077 6 4946 4784 4785 4948 5077 5078 6 4947 4785 4786 4949 5078 5079 6 4948 4786 4787 4950 5079 5080 6 4949 4787 4788 4951 5080 5081 6 4950 4788 4789 4952 5081 5082 6 4951 4789 4790 4953 5082 5083 6 4952 4790 4791 4954 5083 5084 6 4953 4791 4792 4799 4955 5084 6 4954 4799 4956 5084 5085 5086 6 4955 4799 4800 4801 4957 5086 6 4956 4801 4802 4958 5088 5086 6 4957 4802 4959 4918 4960 5088 6 4958 4802 4803 4804 4805 4918 6 4958 4918 4919 4961 5088 5089 6 4960 4919 4962 5089 5090 5091 6 4961 4919 4920 4963 5091 5092 6 4962 4920 4921 4964 5092 5093 6 4963 4921 4922 4812 5093 4813 6 4715 4716 4966 5177 5178 5179 6 4965 4716 4717 4967 5179 5180 6 4966 4717 4718 4968 5180 5181 6 4967 4718 4719 4969 5181 5182 6 4968 4719 4720 4970 5182 5183 6 4969 4720 4721 4722 4971 5183 6 4970 4722 4972 5183 5184 5185 6 4971 4722 4723 4973 5185 5186 6 4972 4723 4724 4974 5186 5187 6 4973 4724 4725 4733 4975 5187 6 4974 4733 4976 5187 5188 5189 6 4975 4733 4734 4977 5189 5190 6 4976 4734 4735 4978 5190 5191 6 4977 4735 4736 4737 4979 5191 6 4978 4737 4738 4980 5191 5192 6 4979 4738 4669 5192 5193 5194 6 4490 4491 4982 4989 4990 4991 6 4981 4491 4492 4983 4991 4992 6 4982 4492 4493 4984 4992 4993 6 4983 4493 4985 4993 4994 4995 6 4984 4493 4494 4497 4986 4995 6 4985 4497 4498 4987 4995 4996 6 4986 4498 4988 4996 4997 4998 6 4987 4498 4499 4511 4998 4999 6 4490 4981 4990 5216 5217 5218 6 4989 4981 4991 5218 5219 5220 6 4990 4981 4982 4992 5220 5221 6 4991 4982 4983 4993 5221 5222 6 4992 4983 4984 4994 5222 5223 6 4993 4984 4995 5223 5224 5225 6 4994 4984 4985 4986 4996 5225 6 4995 4986 4987 4997 5225 5226 6 4996 4987 4998 5226 5227 5228 6 4997 4987 4988 4999 5000 5228 6 4998 4988 5000 5001 5002 4511 6 4998 4999 5001 5228 5229 5230 7 5000 4999 5002 4759 5006 5166 5230 5 5001 4999 4511 4512 4759 6 4739 4740 4741 5004 7831 7834 6 5003 4741 4753 5005 7834 7835 6 5004 4753 4750 7835 7836 7837 7 4759 4760 4761 5007 5021 5001 5166 6 5006 4761 5008 5021 5022 5023 6 5007 4761 4762 5009 5023 5018 6 5008 4762 5010 5011 5017 5018 5 5009 4762 4763 4764 5011 7 5010 4764 5012 4768 5013 5009 5017 5 5011 4764 4765 4766 4768 6 5011 4768 5014 5020 5017 5241 6 5013 4768 4769 5015 5241 5242 6 5014 4769 5016 5242 5243 5024 5 5015 4769 4770 3834 5024 6 5009 5011 5018 5019 5020 5013 7 5009 5017 5019 5023 5008 5238 6833 6 5018 5017 5020 5238 5239 5240 5 5019 5017 5013 5240 5241 5 5006 5007 5022 5166 5167 6 5021 5007 5023 5167 5168 5169 6 5022 5007 5008 5018 5169 6833 7 5016 3834 3835 5025 5243 5015 5244 6 5024 3835 3836 5026 5244 5245 6 5025 3836 3837 4405 5027 5245 6 5026 4405 4406 5028 5245 5246 6 5027 4406 5029 5249 5246 6844 6 5028 4406 4407 5030 6844 6845 6 5029 4407 4408 5031 6845 6846 6 5030 4408 4409 5032 6849 6846 6 5031 4409 4420 5033 6849 6850 6 5032 4420 4421 4422 5034 6850 6 5033 4422 5035 6850 6851 6852 6 5034 4422 4423 5036 6852 5038 6 5035 4423 4424 4643 5037 5038 6 5036 4643 5038 5039 5040 5044 6 5036 5037 5039 6852 5035 6853 6 5038 5037 5040 5041 6856 6853 6 5039 5037 5041 5042 5043 5044 6 5039 5040 5042 6858 6856 6863 6 5041 5040 5043 6878 6879 6863 6 5042 5040 5044 5045 6880 6878 6 5043 5040 5045 4644 4643 5037 6 5043 5044 4644 6880 6881 6889 6 4280 4281 5047 5474 5475 5476 6 5046 4281 4282 5048 5476 5477 6 5047 4282 4283 5049 5477 5478 6 5048 4283 4284 5050 5478 5479 6 5049 4284 4285 5051 5479 5480 6 5050 4285 4286 5052 5480 5481 6 5051 4286 4287 4923 5053 5481 6 5052 4923 5054 5481 5482 5483 6 5053 4923 4924 4925 5055 5483 6 5054 4925 5056 5483 5484 5485 6 5055 4925 4926 5057 5485 5486 6 5056 4926 4927 5058 5486 5487 6 5057 4927 4928 5059 5487 5488 6 5058 4928 4929 5060 5488 5489 6 5059 4929 4930 5061 5489 5490 6 5060 4930 4931 4932 5062 5490 6 5061 4932 4933 5063 5490 5491 6 5062 4933 5064 5250 5491 5492 6 5063 4933 4934 5065 5250 5251 6 5064 4934 4935 5066 5251 5252 6 5065 4935 4936 5067 5252 5253 6 5066 4936 4937 5068 5253 5254 6 5067 4937 4938 5069 5254 5255 6 5068 4938 4939 5070 5255 5256 6 5069 4939 4940 5071 5256 5257 6 5070 4940 4941 5072 5257 5258 6 5071 4941 4942 5073 5258 5259 6 5072 4942 4943 5074 5259 5260 6 5073 4943 4944 4945 5075 5260 6 5074 4945 5076 5260 5261 5262 6 5075 4945 4946 5077 5262 5263 6 5076 4946 4947 5078 5263 5264 6 5077 4947 4948 5079 5264 5265 6 5078 4948 4949 5080 5265 5266 6 5079 4949 4950 5081 5266 5267 6 5080 4950 4951 5082 5267 5268 6 5081 4951 4952 5083 5268 5269 6 5082 4952 4953 5084 5269 5270 6 5083 4953 4954 4955 5085 5270 6 5084 4955 5086 5087 5270 5271 6 5085 4955 4956 5087 5088 4957 6 5085 5086 5088 5271 5272 5089 6 5087 5086 4957 4958 4960 5089 6 5088 4960 4961 5090 5272 5087 6 5089 4961 5091 5272 5273 5274 6 5090 4961 4962 5092 5274 5275 6 5091 4962 4963 5093 5275 5276 7 5092 4963 4964 4813 4814 5094 5276 6 5093 4814 4815 5095 5276 5277 6 5094 4815 4816 5096 5277 5278 6 5095 4816 4817 4819 5097 5278 6 5096 4819 5098 5278 5279 5280 6 5097 4819 4820 5099 5280 5281 6 5098 4820 4823 5100 5281 5282 6 5099 4823 4824 5101 5282 5152 6 5100 4824 5102 5104 5151 5152 6 5101 4824 4825 5103 4828 5104 5 5102 4825 4826 4827 4828 6 5102 4828 4829 5105 5101 5151 7 5104 4829 5106 5154 5151 5287 5288 6 5105 4829 4830 5107 5108 5288 6 5106 4830 5108 5109 5113 4831 6 5106 5107 5109 5110 5288 5289 6 5108 5107 5110 5111 5112 5113 6 5108 5109 5111 5289 5290 5294 6 5110 5109 5112 5294 5295 5116 6 5111 5109 5113 5114 5115 5116 6 5112 5109 5107 4831 4833 5114 6 5113 4833 4835 4845 5115 5112 6 5114 4845 5112 5116 5117 4847 6 5112 5115 5117 5295 5111 5296 6 5116 5115 4847 5118 5299 5296 6 5117 4847 4848 5119 5299 5300 6 5118 4848 5120 5300 5301 5302 5 5119 4848 4849 5121 5302 6 5120 4849 4851 4855 5122 5302 6 5121 4855 5123 5318 5302 5319 6 5122 4855 4856 5124 5321 5319 6 5123 4856 4858 5125 5126 5321 6 5124 4858 5126 5127 5128 5129 6 5124 5125 5127 5322 5321 5323 6 5126 5125 5128 5323 5324 5328 6 5127 5125 5129 5336 5328 5337 6 5128 5125 4858 4859 5130 5337 6 5129 4859 4861 5131 5337 5338 7 5130 4861 4862 4865 5132 5133 5338 6 5131 4865 5133 5134 5135 5136 5 5131 5132 5134 5338 5339 6 5133 5132 5135 5339 5340 5341 6 5134 5132 5136 5346 5344 5341 6 5135 5132 4865 4866 5137 5346 6 5136 4866 4867 4870 5138 5346 6 5137 4870 5139 5140 5344 5346 6 5138 4870 5140 5141 4871 5150 6 5138 5139 5141 5142 5345 5344 6 5140 5139 5142 5143 5144 5150 6 5140 5141 5143 5345 5360 5359 7 5142 5141 5144 5145 5360 5357 5361 6 5143 5141 5145 5146 5147 5150 6 5143 5144 5146 5361 5362 5366 5 5145 5144 5147 5148 5366 6 5146 5144 5148 5149 4873 5150 7 5146 5147 5149 5155 5366 5367 5368 6 5148 5147 4873 5155 4877 4874 6 4873 5147 4871 5139 5141 5144 6 5101 5104 5152 5153 5154 5105 6 5101 5151 5153 5282 5100 5283 6 5152 5151 5154 5283 5284 5285 6 5153 5151 5105 5285 5286 5287 6 5148 5149 4877 4882 5368 5369 7 4532 4533 5157 6682 6683 6684 6694 6 5156 4533 4666 6682 9750 4667 5 4691 4692 4693 5159 7844 7 5158 4693 5160 7844 7845 7846 7847 6 5159 4693 4694 5161 7847 7848 6 5160 4694 4695 5162 7848 7849 6 5161 4695 5163 7849 7850 7851 6 5162 4695 4696 4697 5164 7851 6 5163 4697 5165 7851 7852 7853 6 5164 4697 4698 4700 7853 7854 5 5001 5006 5021 5167 5230 8 5166 5021 5022 5168 5229 5230 6826 6824 6 5167 5022 5169 6826 6827 6830 7 5168 5022 5023 6830 6831 6832 6833 6 4707 4708 5171 7312 7313 7314 6 5170 4708 4709 5172 7314 7315 6 5171 4709 4710 5173 7315 7316 6 5172 4710 4711 5174 7316 7317 6 5173 4711 4712 5175 7317 7318 6 5174 4712 4713 5176 7318 7319 6 5175 4713 4714 5177 7319 7320 6 5176 4714 4715 4965 5178 7320 6 5177 4965 5179 7320 7321 7322 6 5178 4965 4966 5180 7322 7323 6 5179 4966 4967 5181 5411 7323 6 5180 4967 4968 5182 5411 5412 6 5181 4968 4969 5183 5412 5413 6 5182 4969 4970 4971 5184 5413 6 5183 4971 5185 5413 5414 5415 6 5184 4971 4972 5186 5403 5415 6 5185 4972 4973 5187 5403 5404 6 5186 4973 4974 4975 5188 5404 6 5187 4975 5189 5404 5405 5406 6 5188 4975 4976 5190 5406 5407 6 5189 4976 4977 5191 5407 5408 6 5190 4977 4978 4979 5192 5408 6 5191 4979 4980 5193 5408 5409 6 5192 4980 5194 5409 5410 5195 5 5193 4980 4669 4670 5195 6 5194 4670 4671 5196 5410 5193 7 5195 4671 4672 5197 5423 5410 5431 5 5196 4672 4673 5198 5431 7 5197 4673 4674 5199 5431 5432 5433 6 5198 4674 4675 5200 5433 5434 6 5199 4675 4676 5201 5434 5435 6 5200 4676 4677 5202 5435 5436 6 5201 4677 4678 5203 5436 5437 6 5202 4678 5204 5437 5438 5439 6 5203 4678 4679 4680 5205 5439 5 5204 4680 4681 5206 5439 7 5205 4681 4682 5207 5439 5440 5441 6 5206 4682 5208 5441 5442 5443 6 5207 4682 4683 5209 5424 5443 7 5208 4683 4684 5210 5424 5425 5426 5 5209 4684 5211 5426 5427 7 5210 4684 4685 5212 5427 5215 5214 5 5211 4685 4686 5213 5214 6 5212 4686 4687 4478 4479 5214 6 5213 4479 4480 5215 5211 5212 6 5214 4480 5216 5427 5211 5217 6 5215 4480 4481 4490 4989 5217 7 5216 4989 5218 5447 5427 5215 6810 6 5217 4989 4990 5219 6810 6811 6 5218 4990 5220 6811 6812 6813 6 5219 4990 4991 5221 6813 6814 5 5220 4991 4992 5222 6814 7 5221 4992 4993 5223 6814 6815 6816 5 5222 4993 4994 5224 6816 7 5223 4994 5225 6816 6817 6818 6819 6 5224 4994 4995 4996 5226 6819 6 5225 4996 4997 5227 6819 6820 6 5226 4997 5228 6820 6821 6822 6 5227 4997 4998 5000 5229 6822 7 5228 5000 5230 5167 6822 6823 6824 5 5229 5000 5167 5166 5001 6 4264 4265 5232 6902 6903 5458 6 5231 4265 4266 5233 5448 5458 6 5232 4266 4267 5234 5448 5449 6 5233 4267 4269 5449 5450 5451 6 4519 4520 5236 9677 9678 9679 6 5235 4520 5237 9679 9683 9684 6 5236 4520 4521 422 9684 421 6 5018 5019 5239 6832 6833 6834 6 5238 5019 5240 5648 6834 6835 6 5239 5019 5020 5241 5648 5649 7 5240 5020 5013 5014 5242 5649 5650 5 5241 5014 5015 5243 5650 7 5242 5015 5024 5244 5652 5650 5653 6 5243 5024 5025 5245 5653 5247 6 5244 5025 5026 5027 5246 5247 6 5245 5027 5247 5248 5249 5028 6 5245 5246 5248 5653 5244 6840 6 5247 5246 5249 6841 6840 6842 6 5248 5246 5028 6842 6843 6844 6 5063 5064 5251 5492 5493 5494 6 5250 5064 5065 5252 5494 5495 6 5251 5065 5066 5253 5495 5496 6 5252 5066 5067 5254 5496 5497 6 5253 5067 5068 5255 5497 5498 6 5254 5068 5069 5256 5498 5499 6 5255 5069 5070 5257 5499 5500 6 5256 5070 5071 5258 5500 5501 6 5257 5071 5072 5259 5501 5502 6 5258 5072 5073 5260 5502 5503 6 5259 5073 5074 5075 5261 5503 6 5260 5075 5262 5503 5504 5505 6 5261 5075 5076 5263 5505 5506 6 5262 5076 5077 5264 5506 5507 6 5263 5077 5078 5265 5507 5508 6 5264 5078 5079 5266 5508 5509 6 5265 5079 5080 5267 5509 5510 6 5266 5080 5081 5268 5510 5511 6 5267 5081 5082 5269 5511 5512 6 5268 5082 5083 5270 5512 5513 6 5269 5083 5084 5085 5271 5513 6 5270 5085 5087 5272 5513 5514 6 5271 5087 5089 5090 5273 5514 6 5272 5090 5274 5514 5515 5516 6 5273 5090 5091 5275 5519 5516 6 5274 5091 5092 5276 5519 5277 5 5275 5092 5093 5094 5277 6 5276 5094 5095 5278 5519 5275 6 5277 5095 5096 5097 5279 5519 6 5278 5097 5280 5519 5518 5520 6 5279 5097 5098 5281 5520 5377 6 5280 5098 5099 5282 5376 5377 6 5281 5099 5100 5152 5283 5376 6 5282 5152 5153 5284 5379 5376 6 5283 5153 5285 5524 5379 5525 6 5284 5153 5154 5286 5525 5526 6 5285 5154 5287 5526 5527 5291 6 5286 5154 5105 5288 5291 5289 5 5287 5105 5106 5108 5289 6 5288 5108 5110 5290 5291 5287 6 5289 5110 5291 5292 5293 5294 7 5289 5290 5292 5527 5286 5287 5528 6 5291 5290 5293 5528 5529 5533 5 5292 5290 5294 5533 5534 6 5293 5290 5110 5111 5295 5534 6 5294 5111 5116 5296 5297 5534 6 5295 5116 5297 5298 5299 5117 6 5295 5296 5298 5534 5535 5542 6 5297 5296 5299 5542 5543 5544 6 5298 5296 5117 5118 5300 5544 6 5299 5118 5119 5301 5304 5544 6 5300 5119 5302 5303 5304 5305 7 5301 5119 5303 5318 5122 5120 5121 6 5301 5302 5308 5305 5309 5318 6 5300 5301 5305 5306 5543 5544 6 5304 5301 5306 5307 5308 5303 6 5304 5305 5307 5543 5545 5546 6 5306 5305 5308 5311 5312 5546 6 5307 5305 5303 5309 5310 5311 6 5308 5303 5310 5316 5317 5318 6 5308 5309 5311 5314 5315 5316 6 5308 5310 5307 5312 5313 5314 6 5307 5311 5313 5546 5547 5548 6 5312 5311 5314 5548 5549 5550 6 5313 5311 5310 5315 5553 5550 6 5314 5310 5316 5555 5553 5558 6 5315 5310 5309 5317 5558 5559 6 5316 5309 5318 5319 5320 5559 6 5317 5309 5303 5302 5122 5319 6 5318 5122 5317 5320 5321 5123 6 5317 5319 5321 5322 5559 5560 6 5320 5319 5322 5126 5124 5123 6 5320 5321 5126 5323 5560 5561 6 5322 5126 5127 5324 5325 5561 6 5323 5127 5325 5326 5327 5328 6 5323 5324 5326 5561 5562 5563 6 5325 5324 5327 5572 5563 5573 6 5326 5324 5328 5329 5330 5573 6 5327 5324 5329 5336 5128 5127 6 5327 5328 5330 5331 5332 5336 6 5327 5329 5331 5573 5574 5575 6 5330 5329 5332 5333 5575 5576 6 5331 5329 5333 5334 5335 5336 6 5331 5332 5334 5576 5577 5578 6 5333 5332 5335 5578 5340 5339 6 5334 5332 5336 5337 5338 5339 6 5335 5332 5329 5328 5128 5337 6 5336 5128 5129 5130 5335 5338 6 5335 5337 5130 5131 5133 5339 6 5338 5133 5134 5340 5334 5335 6 5339 5134 5341 5342 5578 5334 6 5340 5134 5342 5343 5344 5135 6 5340 5341 5343 5348 5349 5578 6 5342 5341 5344 5345 5347 5348 7 5343 5341 5345 5140 5138 5346 5135 6 5343 5344 5140 5142 5347 5359 5 5138 5344 5135 5136 5137 6 5343 5345 5348 5351 5352 5359 6 5343 5347 5342 5349 5350 5351 6 5342 5348 5350 5578 5577 5579 6 5349 5348 5351 5579 5580 5584 6 5350 5348 5347 5352 5353 5584 6 5351 5347 5353 5354 5355 5359 6 5351 5352 5354 5608 5584 5609 6 5353 5352 5355 5356 5807 5609 6 5354 5352 5356 5357 5359 5360 6 5354 5355 5357 5358 5807 5808 6 5356 5355 5358 5360 5143 5361 7 5356 5357 5808 5809 5810 5363 5361 6 5355 5352 5347 5360 5142 5345 5 5355 5359 5142 5143 5357 6 5357 5143 5145 5362 5363 5358 6 5361 5145 5363 5364 5365 5366 5 5361 5362 5364 5810 5358 6 5363 5362 5365 5810 5811 5402 7 5364 5362 5366 5402 5401 5367 5375 6 5365 5362 5145 5146 5148 5367 6 5366 5148 5368 5374 5365 5375 6 5367 5148 5155 5369 5371 5374 6 5368 5155 4882 4883 5370 5371 6 5369 4883 5371 5372 4888 4885 6 5369 5370 5372 5373 5374 5368 6 5371 5370 5373 4888 5393 5899 6 5371 5372 5374 5375 5392 5393 5 5371 5373 5375 5368 5367 6 5374 5373 5392 5365 5367 5401 6 5281 5282 5377 5378 5379 5283 6 5281 5376 5378 5520 5280 5521 6 5377 5376 5379 5521 5522 5523 6 5378 5376 5283 5523 5524 5284 6 4656 4657 55 9689 430 56 6 1679 1680 1678 5382 5383 1682 6 1678 5381 5383 5384 7779 3415 6 5382 5381 5384 5385 3774 1682 6 5382 5383 5385 5386 7779 7780 6 5384 5383 5386 5387 5391 3774 6 5384 5385 5387 5388 7780 7781 6 5386 5385 5388 5389 5390 5391 6 5386 5387 5389 5616 7781 7782 6 5388 5387 5390 5616 5617 5618 6 5389 5387 5391 5618 5619 5620 6 5390 5387 5385 3774 5620 3775 6 5375 5373 5393 5394 5401 5398 6 5392 5373 5394 5372 5395 5899 6 5392 5393 5395 5396 5397 5398 5 5394 5393 5396 5899 5894 6 5394 5395 5397 5893 5890 5894 6 5394 5396 5398 5399 5889 5890 6 5394 5397 5399 5400 5401 5392 6 5398 5397 5400 5880 5888 5889 7 5398 5399 5401 5402 5887 5881 5880 6 5398 5400 5402 5365 5375 5392 6 5401 5400 5887 5811 5364 5365 6 5185 5186 5404 5415 5416 5417 6 5403 5186 5187 5188 5405 5417 6 5404 5188 5406 5417 5418 5419 6 5405 5188 5189 5407 5419 5420 6 5406 5189 5190 5408 5420 5421 6 5407 5190 5191 5192 5409 5421 6 5408 5192 5193 5410 5421 5422 6 5409 5193 5195 5422 5423 5196 6 5180 5181 5412 7323 7324 7325 6 5411 5181 5182 5413 7325 7326 6 5412 5182 5183 5184 5414 7326 6 5413 5184 5415 7326 7327 7328 6 5414 5184 5185 5403 5416 7328 6 5415 5403 5417 7328 7329 7330 6 5416 5403 5404 5405 5418 7330 6 5417 5405 5419 6791 7330 7331 6 5418 5405 5406 5420 6791 6792 6 5419 5406 5407 5421 5428 6792 6 5420 5407 5408 5409 5422 5428 6 5421 5409 5410 5423 5428 5429 6 5422 5410 5196 5429 5430 5431 6 5208 5209 5425 5443 5444 5445 6 5424 5209 5426 5445 5446 5447 5 5425 5209 5210 5427 5447 6 5426 5210 5211 5215 5447 5217 6 5420 5421 5422 5429 6792 6793 6 5428 5422 5423 5430 6793 6794 6 5429 5423 5431 6794 6795 5432 6 5430 5423 5196 5197 5198 5432 5 5431 5198 5433 6795 5430 6 5432 5198 5199 5434 6795 6796 6 5433 5199 5200 5435 6796 6797 6 5434 5200 5201 5436 6797 6798 6 5435 5201 5202 5437 6798 6799 6 5436 5202 5203 5438 6799 6800 6 5437 5203 5439 6800 6801 6802 7 5438 5203 5204 5205 5206 5440 6802 5 5439 5206 5441 6802 6803 6 5440 5206 5207 5442 6803 6804 6 5441 5207 5443 6804 6805 5444 5 5442 5207 5208 5424 5444 6 5443 5424 5445 6805 5442 6806 6 5444 5424 5425 5446 6806 6807 6 5445 5425 5447 6807 6808 6809 7 5446 5425 5426 5427 5217 6809 6810 6 5232 5233 5449 5458 5459 5460 6 5448 5233 5234 5450 5460 5461 6 5449 5234 5451 5461 5462 5463 6 5450 5234 4269 4270 5452 5463 6 5451 4270 4271 5453 5463 5464 6 5452 4271 4272 5454 5455 5464 6 5453 4272 5455 5456 5457 4273 6 5453 5454 5456 5464 5465 5466 6 5455 5454 5457 5466 5467 5468 6 5456 5454 4273 5468 5469 4274 6 5232 5448 5459 6903 5231 6904 6 5458 5448 5460 6904 6905 6906 6 5459 5448 5449 5461 6906 6907 6 5460 5449 5450 5462 6907 6908 6 5461 5450 5463 6908 6909 6910 6 5462 5450 5451 5452 5464 6910 6 5463 5452 5453 5455 5465 6910 6 5464 5455 5466 6910 6911 6912 6 5465 5455 5456 5467 6912 6913 6 5466 5456 5468 6913 6914 6915 6 5467 5456 5457 5469 6915 6916 6 5468 5457 4274 4275 5470 6916 6 5469 4275 4276 4277 5471 6916 6 5470 4277 5472 6916 6917 6918 6 5471 4277 4278 5473 6918 6919 6 5472 4278 4279 5474 6919 6920 6 5473 4279 4280 5046 5475 6920 6 5474 5046 5476 6920 6921 6922 6 5475 5046 5047 5477 6922 6923 6 5476 5047 5048 5478 6923 6924 6 5477 5048 5049 5479 6924 6925 6 5478 5049 5050 5480 6925 6926 6 5479 5050 5051 5481 5654 6926 6 5480 5051 5052 5053 5482 5654 6 5481 5053 5483 5654 5655 5656 6 5482 5053 5054 5055 5484 5656 6 5483 5055 5485 5656 5657 5658 6 5484 5055 5056 5486 5658 5659 6 5485 5056 5057 5487 5659 5660 6 5486 5057 5058 5488 5660 5661 6 5487 5058 5059 5489 5621 5661 6 5488 5059 5060 5490 5621 5622 6 5489 5060 5061 5062 5491 5622 6 5490 5062 5063 5492 5622 5623 6 5491 5063 5250 5493 5623 5624 6 5492 5250 5494 5624 5625 5626 6 5493 5250 5251 5495 5626 5627 6 5494 5251 5252 5496 5627 5628 6 5495 5252 5253 5497 5628 5629 6 5496 5253 5254 5498 5629 5630 6 5497 5254 5255 5499 5630 5631 6 5498 5255 5256 5500 5631 5632 6 5499 5256 5257 5501 5632 5633 6 5500 5257 5258 5502 5633 5634 6 5501 5258 5259 5503 5634 5635 6 5502 5259 5260 5261 5504 5635 6 5503 5261 5505 5635 5636 5637 6 5504 5261 5262 5506 5637 5638 6 5505 5262 5263 5507 5638 5639 6 5506 5263 5264 5508 5639 5640 6 5507 5264 5265 5509 5640 5641 6 5508 5265 5266 5510 5641 5642 6 5509 5266 5267 5511 5642 5643 6 5510 5267 5268 5512 5643 5644 6 5511 5268 5269 5513 5644 5645 6 5512 5269 5270 5271 5514 5645 6 5513 5271 5272 5273 5515 5645 6 5514 5273 5516 5517 5645 5646 6 5515 5273 5517 5518 5519 5274 6 5515 5516 5518 5646 5647 5520 5 5517 5516 5519 5279 5520 7 5518 5516 5274 5275 5277 5278 5279 7 5518 5279 5280 5377 5521 5647 5517 5 5520 5377 5378 5522 5647 7 5521 5378 5523 5685 5647 5684 5686 6 5522 5378 5379 5524 5687 5686 6 5523 5379 5284 5525 5687 5688 6 5524 5284 5285 5526 5688 5689 6 5525 5285 5286 5527 5689 5690 6 5526 5286 5291 5528 5690 5691 6 5527 5291 5292 5529 5530 5691 6 5528 5292 5530 5531 5532 5533 5 5528 5529 5531 5691 5692 6 5530 5529 5532 5692 5693 5694 7 5531 5529 5533 5694 5695 5538 5536 6 5532 5529 5292 5293 5534 5536 7 5533 5293 5294 5295 5297 5535 5536 6 5534 5297 5536 5537 5541 5542 6 5534 5535 5537 5538 5532 5533 6 5536 5535 5538 5539 5540 5541 6 5536 5537 5539 5695 5532 5696 6 5538 5537 5540 5696 5697 5698 7 5539 5537 5541 5698 5699 5700 9795 5 5540 5537 5535 5542 9795 6 5541 5535 5297 5298 5543 9795 7 5542 5298 5544 5304 5306 5545 9795 5 5543 5298 5304 5300 5299 6 5543 5306 5546 5701 5700 9795 6 5545 5306 5307 5312 5547 5701 6 5546 5312 5548 5701 5702 5703 6 5547 5312 5313 5549 5703 5704 6 5548 5313 5550 5551 5704 5705 6 5549 5313 5551 5552 5553 5314 6 5549 5550 5552 5705 5706 5707 6 5551 5550 5553 5554 5707 5708 6 5552 5550 5314 5554 5555 5315 6 5552 5553 5555 5556 5708 5709 6 5554 5553 5315 5556 5557 5558 6 5554 5555 5557 5709 5710 5711 6 5556 5555 5558 5714 5711 5715 6 5557 5555 5315 5316 5559 5715 6 5558 5316 5317 5320 5560 5715 6 5559 5320 5322 5561 5716 5715 6 5560 5322 5323 5325 5562 5716 6 5561 5325 5563 5564 5717 5716 6 5562 5325 5564 5565 5572 5326 6 5562 5563 5565 5566 5717 5713 6 5564 5563 5566 5567 5571 5572 6 5564 5565 5567 5568 5753 5713 6 5566 5565 5568 5569 5570 5571 6 5566 5567 5569 5752 5753 5754 6 5568 5567 5570 5754 5755 5770 6 5569 5567 5571 5769 5767 5770 6 5570 5567 5565 5572 5769 5771 6 5571 5565 5563 5326 5573 5771 6 5572 5326 5327 5330 5574 5771 6 5573 5330 5575 5771 5772 5773 6 5574 5330 5331 5576 5773 5594 7 5575 5331 5333 5577 5594 5589 5774 6 5576 5333 5578 5349 5579 5774 6 5577 5333 5334 5340 5342 5349 6 5577 5349 5350 5580 5581 5774 6 5579 5350 5581 5582 5583 5584 6 5579 5580 5582 5585 5586 5774 6 5581 5580 5583 5585 5605 5606 6 5582 5580 5584 5606 5607 5608 6 5583 5580 5350 5351 5608 5353 6 5581 5582 5586 5587 5605 5597 6 5581 5585 5587 5588 5589 5774 6 5586 5585 5588 5595 5596 5597 6 5586 5587 5589 5590 5591 5595 6 5586 5588 5590 5594 5576 5774 6 5589 5588 5591 5592 5594 5773 6 5590 5588 5592 5593 5595 5778 6 5590 5591 5593 5773 5772 5775 6 5592 5591 5775 5776 5777 5778 5 5589 5590 5773 5575 5576 6 5591 5588 5587 5596 5778 5779 6 5595 5587 5597 5598 5599 5779 6 5596 5587 5598 5602 5605 5585 6 5596 5597 5599 5600 5601 5602 6 5596 5598 5600 5779 5780 5781 6 5599 5598 5601 5781 5789 5790 6 5600 5598 5602 5603 5790 5791 6 5601 5598 5603 5604 5597 5605 6 5601 5602 5604 5794 5791 5795 6 5603 5602 5795 5796 5606 5605 6 5602 5597 5585 5582 5606 5604 6 5605 5582 5583 5607 5796 5604 6 5606 5583 5608 5610 5798 5796 6 5607 5583 5584 5353 5609 5610 7 5608 5353 5610 5800 5806 5807 5354 5 5608 5609 5607 5800 5798 6 4514 4516 5612 5613 5614 5615 6 4514 5611 5613 427 426 7500 6 5612 5611 5614 7500 7501 7505 6 5613 5611 5615 7505 7506 7507 6 5614 5611 4516 7507 7508 4518 6 5388 5389 5617 7782 7783 7784 6 5616 5389 5618 7784 7785 7786 6 5617 5389 5390 5619 7786 7789 6 5618 5390 5620 7789 7790 7791 6 5619 5390 5391 3775 3778 7791 6 5488 5489 5622 5661 5662 5663 6 5621 5489 5490 5491 5623 5663 6 5622 5491 5492 5624 5663 5664 6 5623 5492 5493 5625 5664 5665 6 5624 5493 5626 5665 5666 5667 6 5625 5493 5494 5627 5667 5668 6 5626 5494 5495 5628 5668 5669 6 5627 5495 5496 5629 5669 5670 6 5628 5496 5497 5630 5670 5671 6 5629 5497 5498 5631 5671 5672 6 5630 5498 5499 5632 5672 5673 6 5631 5499 5500 5633 5673 5674 6 5632 5500 5501 5634 5674 5675 6 5633 5501 5502 5635 5675 5676 6 5634 5502 5503 5504 5636 5676 6 5635 5504 5637 5676 5677 5678 6 5636 5504 5505 5638 5678 5679 6 5637 5505 5506 5639 5679 5680 6 5638 5506 5507 5640 5680 5681 6 5639 5507 5508 5641 5681 5682 6 5640 5508 5509 5642 5682 5683 6 5641 5509 5510 5643 5683 5684 6 5642 5510 5511 5644 5684 5685 6 5643 5511 5512 5645 5685 5646 6 5644 5512 5513 5514 5515 5646 6 5645 5515 5517 5647 5685 5644 6 5646 5517 5520 5685 5522 5521 6 5239 5240 5649 6835 6836 6837 6 5648 5240 5241 5650 5651 6837 6 5649 5241 5651 5652 5243 5242 6 5649 5650 5652 6837 6838 6839 6 5651 5650 5243 5653 6839 6840 5 5652 5243 5244 5247 6840 6 5480 5481 5482 5655 6926 6927 6 5654 5482 5656 6927 6928 6929 6 5655 5482 5483 5484 5657 6929 6 5656 5484 5658 6929 6930 6931 6 5657 5484 5485 5659 5831 6931 6 5658 5485 5486 5660 5831 5832 6 5659 5486 5487 5661 5832 5833 6 5660 5487 5488 5621 5662 5833 6 5661 5621 5663 5833 5834 5835 6 5662 5621 5622 5623 5664 5835 6 5663 5623 5624 5665 5835 5813 6 5664 5624 5625 5666 5812 5813 6 5665 5625 5667 5812 5816 5817 6 5666 5625 5626 5668 5859 5817 6 5667 5626 5627 5669 5859 5860 6 5668 5627 5628 5670 5860 5861 6 5669 5628 5629 5671 5861 5862 6 5670 5629 5630 5672 5862 5863 6 5671 5630 5631 5673 5863 5864 6 5672 5631 5632 5674 5864 5865 6 5673 5632 5633 5675 5865 5866 6 5674 5633 5634 5676 5866 5867 6 5675 5634 5635 5636 5677 5867 6 5676 5636 5678 5867 5868 5693 6 5677 5636 5637 5679 5693 5869 6 5678 5637 5638 5680 5869 5870 6 5679 5638 5639 5681 5870 5871 6 5680 5639 5640 5682 5871 5688 6 5681 5640 5641 5683 5688 5687 6 5682 5641 5642 5684 5686 5687 6 5683 5642 5643 5685 5522 5686 6 5684 5643 5644 5646 5647 5522 5 5684 5522 5683 5687 5523 6 5683 5686 5523 5524 5688 5682 7 5687 5524 5525 5689 5871 5681 5682 5 5688 5525 5526 5690 5871 7 5689 5526 5527 5691 5871 5870 5692 5 5690 5527 5528 5530 5692 7 5691 5530 5531 5693 5870 5690 5869 7 5692 5531 5694 5868 5677 5678 5869 6 5693 5531 5532 5695 9698 5868 6 5694 5532 5538 5696 9699 9698 6 5695 5538 5539 5697 5718 9699 6 5696 5539 5698 5718 5719 5720 6 5697 5539 5540 5699 5720 5721 6 5698 5540 5700 5701 5721 5722 5 5699 5540 5701 5545 9795 7 5699 5700 5545 5546 5547 5702 5722 6 5701 5547 5703 5722 5723 5727 6 5702 5547 5548 5704 5727 5728 6 5703 5548 5549 5705 5728 5729 6 5704 5549 5551 5706 5732 5729 6 5705 5551 5707 5732 5733 5734 6 5706 5551 5552 5708 5737 5734 6 5707 5552 5554 5709 5737 5738 6 5708 5554 5556 5710 5747 5738 6 5709 5556 5711 5712 5747 5748 6 5710 5556 5712 5713 5714 5557 6 5710 5711 5713 5748 5749 5753 7 5712 5711 5714 5717 5564 5753 5566 6 5713 5711 5557 5715 5716 5717 6 5714 5557 5716 5560 5559 5558 6 5714 5715 5717 5562 5561 5560 5 5714 5716 5562 5564 5713 7 5696 5697 5719 9696 5865 9697 9699 6 5718 5697 5720 9696 9695 9700 6 5719 5697 5698 5721 9700 9701 7 5720 5698 5699 5722 5723 5724 9701 5 5721 5699 5701 5702 5723 7 5722 5702 5721 5724 5725 5726 5727 6 5721 5723 5725 6095 9701 9702 6 5724 5723 5726 6095 6096 6097 6 5725 5723 5727 6097 5730 5728 5 5726 5723 5702 5703 5728 6 5727 5703 5704 5729 5730 5726 6 5728 5704 5730 5731 5732 5705 7 5728 5729 5731 6097 5726 6098 6099 6 5730 5729 5732 6099 6100 6101 6 5731 5729 5705 5706 5733 6101 6 5732 5706 5734 5735 6101 6102 6 5733 5706 5735 5736 5737 5707 6 5733 5734 5736 6105 6102 6106 6 5735 5734 5737 6106 6107 5739 6 5736 5734 5707 5708 5738 5739 6 5737 5708 5739 5740 5747 5709 6 5737 5738 5740 5741 6107 5736 6 5739 5738 5741 5742 5746 5747 6 5739 5740 5742 5743 6107 6108 6 5741 5740 5743 5744 5745 5746 6 5741 5742 5744 6111 6108 6112 6 5743 5742 5745 6112 6113 6114 6 5744 5742 5746 5750 6121 6114 6 5745 5742 5740 5747 5748 5750 6 5746 5740 5738 5709 5710 5748 6 5747 5710 5712 5749 5746 5750 6 5748 5712 5750 5751 5752 5753 6 5746 5748 5745 5749 5751 6121 5 5750 5749 5752 6121 5949 6 5751 5749 5753 5568 5754 5949 6 5752 5749 5712 5713 5568 5566 6 5752 5568 5569 5755 5756 5949 6 5754 5569 5756 5757 5758 5770 6 5754 5755 5757 5949 5950 5951 6 5756 5755 5758 5759 5951 5952 6 5757 5755 5759 5760 5761 5770 6 5757 5758 5760 5952 5953 5957 6 5759 5758 5761 5762 5763 5957 6 5760 5758 5762 5766 5767 5770 6 5760 5761 5763 5764 5765 5766 6 5760 5762 5764 5957 5958 5988 6 5763 5762 5765 5989 5988 5990 6 5764 5762 5766 5990 5991 5776 6 5765 5762 5761 5767 5768 5776 6 5766 5761 5768 5769 5570 5770 6 5766 5767 5769 5772 5775 5776 6 5768 5767 5570 5571 5771 5772 6 5570 5767 5569 5761 5755 5758 6 5769 5571 5572 5573 5574 5772 7 5771 5574 5773 5592 5775 5769 5768 6 5772 5574 5575 5594 5590 5592 6 5589 5576 5586 5581 5579 5577 5 5772 5592 5593 5776 5768 7 5775 5593 5777 5991 5765 5768 5766 6 5776 5593 5778 5992 5991 5782 6 5777 5593 5591 5595 5779 5782 6 5778 5595 5596 5599 5780 5782 6 5779 5599 5781 5782 5783 5784 6 5780 5599 5600 5784 5785 5789 6 5779 5780 5783 5992 5777 5778 6 5782 5780 5784 5993 5992 5996 7 5783 5780 5781 5785 5786 5996 5997 6 5784 5781 5786 5787 5788 5789 6 5784 5785 5787 5997 5998 5999 6 5786 5785 5788 6002 5999 6003 6 5787 5785 5789 6009 6003 6199 6 5788 5785 5781 5600 5790 6199 6 5789 5600 5601 5791 5792 6199 6 5790 5601 5792 5793 5794 5603 6 5790 5791 5793 6198 6199 6197 6 5792 5791 5794 6197 6200 6221 6 5793 5791 5603 5795 6221 6219 6 5794 5603 5604 5796 5797 6219 6 5795 5604 5797 5798 5607 5606 6 5795 5796 5798 5799 6218 6219 6 5797 5796 5607 5799 5800 5610 6 5797 5798 5800 5801 5802 6218 7 5799 5798 5610 5609 5801 5805 5806 6 5799 5800 5802 5803 5804 5805 6 5799 5801 5803 6217 6209 6218 6 5802 5801 5804 5823 5824 6217 6 5803 5801 5805 5823 5830 5839 6 5804 5801 5800 5806 5808 5839 5 5805 5800 5609 5807 5808 5 5806 5609 5354 5356 5808 7 5807 5356 5358 5809 5839 5805 5806 6 5808 5358 5810 5838 5839 5886 7 5809 5358 5363 5364 5811 5885 5886 6 5810 5364 5884 5885 5887 5402 6 5665 5666 5813 5814 5815 5816 6 5665 5812 5814 5835 5664 5842 6 5813 5812 5815 5842 5843 5844 6 5814 5812 5816 5819 5820 5844 6 5815 5812 5666 5817 5818 5819 6 5816 5666 5818 5859 5857 5667 6 5816 5817 5819 5822 5857 5854 6 5816 5818 5815 5820 5821 5822 6 5815 5819 5821 5844 5845 5846 6 5820 5819 5822 5852 5849 5846 6 5821 5819 5818 5852 5853 5854 6 5803 5804 5824 5825 5826 5830 5 5803 5823 5825 6216 6217 7 5824 5823 5826 5827 6216 6215 6021 6 5825 5823 5827 5828 5829 5830 6 5825 5826 5828 6019 6020 6021 6 5827 5826 5829 5836 5872 6019 6 5828 5826 5830 5836 5837 5838 6 5829 5826 5823 5804 5838 5839 6 5658 5659 5832 6931 6932 6933 6 5831 5659 5660 5833 5840 6933 6 5832 5660 5661 5662 5834 5840 6 5833 5662 5835 5840 5841 5842 6 5834 5662 5663 5664 5813 5842 6 5828 5829 5837 5872 5873 5883 6 5836 5829 5838 5885 5883 5886 6 5837 5829 5830 5839 5809 5886 6 5838 5830 5809 5808 5805 5804 6 5832 5833 5834 5841 6933 6934 6 5840 5834 5842 6934 6935 5843 6 5841 5834 5835 5813 5814 5843 6 5842 5814 5844 6018 6935 5841 6 5843 5814 5815 5820 5845 6018 6 5844 5820 5846 5847 6018 6940 6 5845 5820 5847 5848 5849 5821 6 5845 5846 5848 6940 6941 6942 6 5847 5846 5849 5850 6945 6942 6 5848 5846 5850 5851 5852 5821 5 5848 5849 5851 6945 6385 6 5850 5849 5852 6103 6104 6385 6 5851 5849 5821 5822 5853 6103 6 5852 5822 5854 5855 6100 6103 6 5853 5822 5855 5856 5857 5818 6 5853 5854 5856 6098 6099 6100 6 5855 5854 5857 5858 6384 6098 6 5856 5854 5858 5859 5817 5818 6 5856 5857 5859 5860 6383 6384 6 5858 5857 5817 5667 5668 5860 6 5859 5668 5669 5861 6383 5858 6 5860 5669 5670 5862 9703 6383 6 5861 5670 5671 5863 9694 9703 6 5862 5671 5672 5864 9694 9695 6 5863 5672 5673 5865 9695 9696 7 5864 5673 5674 5866 9696 5718 9697 5 5865 5674 5675 5867 9697 7 5866 5675 5676 5677 5868 9697 9698 5 5867 5677 5693 5694 9698 5 5693 5678 5679 5870 5692 6 5869 5679 5680 5871 5690 5692 6 5870 5680 5681 5688 5689 5690 6 5828 5836 5873 5874 9736 6019 6 5872 5836 5874 5875 5882 5883 6 5872 5873 5875 5876 9736 6041 6 5874 5873 5876 5877 5878 5882 6 5874 5875 5877 6048 6041 6042 6 5876 5875 5878 5879 6049 6048 6 5877 5875 5879 5880 5881 5882 6 5877 5878 5880 6049 6050 5888 6 5879 5878 5881 5400 5399 5888 6 5880 5878 5882 5884 5887 5400 6 5881 5878 5875 5873 5883 5884 6 5882 5873 5836 5884 5885 5837 6 5882 5883 5885 5811 5881 5887 6 5884 5883 5837 5811 5810 5886 5 5810 5885 5837 5838 5809 5 5881 5884 5811 5402 5400 6 5880 5399 5889 6053 6050 5879 6 5888 5399 5397 5890 5891 6053 6 5889 5397 5891 5892 5893 5396 6 5889 5890 5892 6056 6053 6057 6 5891 5890 5893 6057 6058 6059 6 5892 5890 5396 5894 5895 6059 6 5893 5396 5895 5896 5899 5395 6 5893 5894 5896 5897 6059 6061 6 5895 5894 5897 5898 4889 5899 6 5895 5896 5898 5900 6061 6062 6 5897 5896 4889 4890 5900 5901 7 4889 5896 5894 5395 5393 5372 4888 6 5897 5898 5901 6065 6062 6066 6 5900 5898 4890 4892 5902 6066 6 5901 4892 5903 5904 5905 6066 6 5902 4892 5904 5911 5912 4893 6 5902 5903 5905 5906 5907 5911 6 5902 5904 5906 6066 6070 6067 7 5905 5904 5907 5908 6075 6072 6070 6 5906 5904 5908 5909 5910 5911 5 5906 5907 5909 5934 6075 7 5908 5907 5910 5932 5929 5933 5934 6 5909 5907 5911 5932 9752 5915 6 5910 5907 5904 5903 5912 5915 6 5911 5903 4893 5913 5914 5915 6 5912 4893 4894 4896 4899 5914 6 5913 4899 5912 5915 5916 5917 6 5912 5914 5916 5911 9752 5910 6 5915 5914 5917 9752 9755 9758 6 5916 5914 4899 4900 5918 9758 7 5917 4900 4902 3671 3951 5919 9758 6 5918 3951 3949 5920 9755 9758 5 5919 3949 3948 5921 9755 6 5920 3948 5922 5930 5931 9755 6 5921 3948 3946 3962 5923 5930 6 5922 3962 3963 5924 5925 5930 6 5923 3963 3965 5925 5926 5942 6 5923 5924 5926 5927 5929 5930 6 5925 5924 5927 5928 5941 5942 5 5925 5926 5928 5929 5933 7 5927 5926 5935 5933 5936 5940 5941 7 5925 5927 5930 5931 5932 5909 5933 6 5925 5929 5931 5923 5922 5921 6 5930 5929 5921 5932 9752 9755 5 5931 5929 5909 5910 9752 6 5909 5929 5934 5935 5928 5927 6 5909 5933 5935 6074 6075 5908 6 5934 5933 5928 5936 5937 6074 6 5935 5928 5937 5938 5939 5940 5 5935 5936 5938 6074 6076 6 5937 5936 5939 6076 6077 6086 6 5938 5936 5940 6087 6086 6091 7 5939 5936 5928 5941 5944 6091 5946 5 5940 5928 5926 5942 5944 6 5941 5926 5924 3965 5943 5944 7 5942 3965 3966 5944 5945 3135 5947 6 5942 5943 5941 5940 5945 5946 5 5944 5943 5946 3134 3135 6 5944 5945 3134 6091 5940 3136 6 3135 5943 2093 2092 5948 3966 6 2092 5947 3966 3967 2488 2489 6 5754 5756 5950 5752 5751 6121 6 5949 5756 5951 6166 6120 6121 6 5950 5756 5757 5952 6166 6164 6 5951 5757 5759 5953 5954 6164 6 5952 5759 5954 5955 5956 5957 6 5952 5953 5955 6162 6161 6164 6 5954 5953 5956 5960 5967 6162 6 5955 5953 5957 5958 5959 5960 6 5956 5953 5759 5760 5763 5958 6 5957 5763 5956 5959 5963 5988 6 5956 5958 5960 5961 5962 5963 6 5956 5959 5961 5964 5967 5955 6 5960 5959 5962 5964 5965 5982 6 5961 5959 5963 5983 5982 5984 6 5962 5959 5958 5987 5984 5988 6 5960 5961 5965 5966 5967 5968 6 5964 5961 5966 5982 5980 5971 6 5964 5965 5968 5969 5970 5971 6 5960 5964 5955 5968 6163 6162 7 5967 5964 5966 5969 6156 6157 6163 6 5968 5966 5970 6447 6445 6156 6 5969 5966 5971 5972 6447 6448 6 5970 5966 5972 5973 5965 5980 6 5970 5971 5973 5974 5975 6448 6 5972 5971 5974 5978 5979 5980 6 5972 5973 5975 5976 5977 5978 6 5972 5974 5976 6448 6449 6450 6 5975 5974 5977 6450 6608 6609 6 5976 5974 5978 6609 6612 6613 6 5977 5974 5973 5979 6613 6614 6 5978 5973 5980 5981 6640 6614 6 5979 5973 5981 5982 5965 5971 6 5979 5980 5982 5983 6640 6641 6 5981 5980 5983 5962 5961 5965 6 5981 5982 5962 5984 5985 6641 6 5983 5962 5985 5986 5987 5963 6 5983 5984 5986 6643 6641 6168 6 5985 5984 5987 5994 6167 6168 6 5986 5984 5963 5988 5989 5994 6 5987 5963 5958 5989 5764 5763 6 5987 5988 5764 5990 5993 5994 6 5989 5764 5765 5991 5992 5993 5 5990 5765 5992 5777 5776 6 5990 5991 5777 5993 5783 5782 7 5990 5992 5783 5989 5994 5995 5996 6 5989 5993 5995 5986 5987 6167 6 5994 5993 5996 5997 5998 6167 5 5995 5993 5783 5784 5997 5 5995 5996 5998 5784 5786 7 5995 5997 5786 5999 6000 6169 6167 6 5998 5786 6000 6001 6002 5787 5 5998 5999 6001 6169 6170 6 6000 5999 6002 6170 6171 6005 6 6001 5999 5787 6003 6004 6005 6 6002 5787 6004 6008 6009 5788 6 6002 6003 6005 6006 6007 6008 6 6002 6004 6006 6171 6001 6172 6 6005 6004 6007 6010 6172 6173 6 6006 6004 6008 6010 6011 6015 6 6007 6004 6003 6009 6017 6015 6 6008 6003 5788 6198 6017 6199 6 6006 6007 6011 6012 6179 6173 6 6010 6007 6012 6013 6014 6015 6 6010 6011 6013 6180 6179 6186 6 6012 6011 6014 6190 6187 6186 6 6013 6011 6015 6016 6190 6191 6 6014 6011 6016 6017 6008 6007 6 6014 6015 6017 6191 6194 6195 6 6016 6015 6008 6198 6195 6009 6 5843 5844 5845 6937 6935 6940 6 5827 5828 6020 9736 6038 5872 6 5827 6019 6021 6022 6023 6038 6 5827 6020 6022 6215 5825 6222 6 6021 6020 6023 6024 6025 6222 6 6022 6020 6024 6037 6028 6038 6 6022 6023 6025 6026 6027 6028 6 6022 6024 6026 6222 6225 6223 6 6025 6024 6027 6225 6226 6032 6 6026 6024 6028 6029 6031 6032 6 6027 6024 6029 6030 6037 6023 6 6027 6028 6030 6031 6033 6034 6 6029 6028 6034 6035 6036 6037 6 6027 6029 6032 6033 6247 6239 6 6027 6031 6226 6026 6227 6239 6 6031 6029 6034 6247 6246 6248 6 6033 6029 6030 6035 6248 6249 6 6034 6030 6036 6249 6263 6264 6 6035 6030 6037 6039 6040 6264 6 6036 6030 6028 6023 6038 6039 6 6037 6023 6039 9736 6019 6020 6 6037 6038 6036 6040 6041 9736 7 6036 6039 6041 6042 6043 6265 6264 6 6040 6039 6042 9736 5874 5876 6 6040 6041 6043 6044 6048 5876 5 6040 6042 6044 6045 6265 6 6043 6042 6045 6046 6047 6048 7 6043 6044 6046 6262 6265 6261 6266 6 6045 6044 6047 6269 6266 6280 6 6046 6044 6048 6049 6051 6280 6 6047 6044 6042 6049 5877 5876 6 6047 6048 5877 5879 6050 6051 6 6049 5879 6051 6052 6053 5888 6 6049 6050 6052 6054 6280 6047 6 6051 6050 6053 6054 6055 6056 6 6052 6050 5888 5889 6056 5891 7 6051 6052 6055 6279 6280 6278 6281 6 6054 6052 6056 6283 6281 6284 6 6055 6052 6053 5891 6057 6284 6 6056 5891 5892 6058 6060 6284 6 6057 5892 6059 6060 6287 6288 6 6058 5892 5893 5895 6061 6288 6 6057 6058 6284 6285 6286 6287 6 6059 5895 5897 6062 6063 6288 6 6061 5897 6063 6064 6065 5900 7 6061 6062 6064 6288 6291 6289 6292 5 6063 6062 6065 6292 6068 6 6064 6062 5900 6066 6067 6068 6 6065 5900 5901 5902 5905 6067 6 6065 6066 6068 6069 6070 5905 7 6065 6067 6069 6292 6064 6293 6294 5 6068 6067 6070 6071 6294 6 6069 6067 5905 6071 6072 5906 7 6069 6070 6072 6073 6296 6294 6297 6 6071 6070 6073 6074 6075 5906 6 6071 6072 6074 6297 6078 6076 7 6073 6072 6075 5934 5935 5937 6076 5 6074 6072 5934 5908 5906 6 6074 5937 5938 6077 6078 6073 6 6076 5938 6078 6079 6086 6083 6 6076 6077 6079 6080 6297 6073 6 6078 6077 6080 6081 6082 6083 6 6078 6079 6081 6297 6298 6301 6 6080 6079 6082 6301 6302 6314 6 6081 6079 6083 6084 6313 6314 6 6082 6079 6084 6085 6086 6077 7 6082 6083 6085 6088 6313 6315 6318 6 6084 6083 6086 6087 6088 6089 6 6085 6083 6087 5939 5938 6077 6 6085 6086 5939 6089 6090 6091 6 6084 6085 6089 6094 3769 6318 7 6088 6085 6087 6090 3137 6092 6094 5 6089 6087 6091 3136 3137 6 6090 6087 5939 5940 5946 3136 6 6089 3137 3138 6093 3768 6094 7 6092 3138 3768 3766 2085 2084 9776 5 6092 3768 3769 6088 6089 6 5724 5725 6096 6383 9702 9703 6 6095 5725 6097 6098 6383 6384 5 6096 5725 5726 5730 6098 7 6096 6097 5730 6099 6384 5856 5855 5 6098 5730 5731 6100 5855 7 6099 5731 6101 6102 6103 5855 5853 5 6100 5731 5732 5733 6102 7 6101 5733 6100 6103 6104 6105 5735 6 6100 6102 6104 5853 5852 5851 6 6103 6102 6105 5851 6385 6386 5 6104 6102 5735 6106 6386 7 6105 5735 5736 6107 6386 6387 6109 6 6106 5736 5739 5741 6108 6109 6 6107 5741 6109 6110 6111 5743 6 6107 6108 6110 6387 6106 6388 6 6109 6108 6111 6388 6389 6390 6 6110 6108 5743 6112 6393 6390 6 6111 5743 5744 6113 6115 6393 6 6112 5744 6114 6115 6116 6117 6 6113 5744 6120 6117 6121 5745 6 6112 6113 6116 6393 9737 9738 6 6115 6113 6117 6118 6122 9738 6 6116 6113 6118 6119 6120 6114 6 6116 6117 6119 6122 6123 6165 5 6118 6117 6120 6166 6165 6 6119 6117 6114 6121 6166 5950 7 6120 6114 5745 5750 5751 5949 5950 6 6116 6118 6123 6124 6131 9738 6 6122 6118 6124 6125 6165 6160 6 6122 6123 6125 6126 6127 6131 6 6124 6123 6126 6152 6160 6158 6 6124 6125 6127 6128 6151 6152 6 6124 6126 6128 6129 6130 6131 6 6127 6126 6129 6150 6149 6151 6 6127 6128 6130 6150 6137 6134 6 6127 6129 6131 6132 6133 6134 6 6127 6130 6132 9738 6122 6124 6 6131 6130 6133 6398 9737 9738 6 6132 6130 6134 6135 6397 6398 6 6133 6130 6135 6136 6137 6129 6 6133 6134 6136 6397 6399 6400 6 6135 6134 6137 6138 6400 6401 6 6136 6134 6138 6139 6150 6129 6 6136 6137 6139 6140 6401 6402 6 6138 6137 6140 6141 6148 6150 6 6138 6139 6141 6142 6402 6403 6 6140 6139 6142 6143 6144 6148 6 6140 6141 6143 6403 6404 6405 6 6142 6141 6144 6145 6405 6436 6 6143 6141 6145 6146 6147 6148 6 6143 6144 6146 6437 6436 6438 6 6145 6144 6147 6438 6439 6440 6 6146 6144 6148 6149 6440 6441 6 6147 6144 6141 6139 6149 6150 6 6147 6148 6150 6128 6151 6441 6 6149 6148 6139 6137 6129 6128 6 6149 6128 6126 6152 6153 6441 6 6151 6126 6125 6153 6154 6158 6 6151 6152 6154 6155 6441 6442 6 6153 6152 6155 6156 6157 6158 6 6153 6154 6156 6444 6442 6445 6 6155 6154 6157 5969 6445 5968 6 6156 6154 6158 6159 5968 6163 6 6157 6154 6152 6159 6160 6125 6 6157 6158 6160 6161 6162 6163 6 6159 6158 6125 6161 6123 6165 6 6159 6160 6162 5954 6164 6165 6 6159 6161 6163 5967 5955 5954 5 6159 6162 5967 6157 5968 6 5954 6161 6165 6166 5951 5952 7 6164 6161 6166 6119 6118 6123 6160 6 6164 6165 6119 6120 5950 5951 6 5994 5995 5986 6168 6169 5998 6 5986 6167 6169 6643 5985 9783 6 6168 6167 5998 6000 6170 9783 7 6169 6000 6001 6171 6789 9783 9782 7 6170 6001 6005 6172 6788 6786 6789 6 6171 6005 6006 6173 6174 6788 6 6172 6006 6174 6175 6010 6179 6 6172 6173 6175 6176 6784 6788 6 6174 6173 6176 6177 6178 6179 6 6174 6175 6177 6782 6781 6784 6 6176 6175 6178 9796 6782 9797 6 6177 6175 6179 6180 6181 9796 6 6178 6175 6180 6012 6010 6173 6 6178 6179 6181 6182 6186 6012 6 6178 6180 6182 6183 9796 9799 6 6181 6180 6183 6184 6185 6186 6 6181 6182 6184 6362 6645 9799 6 6183 6182 6185 6362 6363 6367 6 6184 6182 6186 6187 6188 6367 6 6185 6182 6180 6187 6012 6013 6 6185 6186 6188 6189 6190 6013 6 6185 6187 6189 6367 6368 6369 6 6188 6187 6190 6369 6372 6192 6 6189 6187 6013 6014 6191 6192 6 6190 6014 6016 6192 6193 6194 6 6190 6191 6193 6372 6189 6373 6 6192 6191 6194 6382 6373 6203 6 6193 6191 6016 6195 6196 6203 6 6194 6016 6196 6197 6198 6017 6 6194 6195 6197 6200 6201 6203 6 6196 6195 6198 5792 5793 6200 6 6197 6195 6017 6009 6199 5792 6 6198 6009 5792 5790 5789 5788 6 6197 5793 6196 6201 6202 6221 6 6196 6200 6202 6203 6204 6205 6 6201 6200 6205 6206 6220 6221 6 6196 6201 6204 6382 6193 6194 6 6203 6201 6205 6382 6459 6381 6 6204 6201 6202 6206 6207 6459 6 6205 6202 6207 6208 6209 6220 6 6205 6206 6208 6210 6211 6459 6 6207 6206 6209 6210 6214 6217 6 6208 6206 5802 6217 6218 6220 6 6207 6208 6211 6212 6213 6214 6 6207 6210 6212 6456 6458 6459 7 6211 6210 6213 6223 6224 6454 6456 5 6212 6210 6214 6215 6223 6 6213 6210 6208 6215 6216 6217 7 6213 6214 6216 5825 6021 6222 6223 5 6215 6214 6217 5824 5825 7 6216 6214 5824 5803 5802 6209 6208 6 5802 6209 5799 5797 6219 6220 6 5797 6218 6220 6221 5794 5795 6 6219 6218 6209 6206 6202 6221 6 6219 6220 6202 6200 5793 5794 5 6215 6021 6022 6025 6223 7 6215 6222 6213 6212 6224 6225 6025 7 6212 6223 6225 6454 6231 6226 6228 5 6224 6223 6025 6026 6226 6 6225 6026 6032 6227 6228 6224 6 6226 6032 6228 6229 6238 6239 6 6226 6227 6229 6230 6231 6224 6 6228 6227 6230 6237 6234 6238 6 6228 6229 6231 6232 6233 6234 6 6228 6230 6232 6454 6224 6455 6 6231 6230 6233 6455 6460 6461 6 6232 6230 6234 6235 6461 6462 6 6233 6230 6235 6236 6237 6229 6 6233 6234 6236 6462 6463 6471 6 6235 6234 6237 6473 6471 6476 6 6236 6234 6229 6238 6476 6241 6 6237 6229 6227 6239 6240 6241 6 6238 6227 6240 6247 6031 6032 6 6238 6239 6241 6242 6243 6247 6 6238 6240 6242 6476 6237 6477 6 6241 6240 6243 6244 6477 6479 6 6242 6240 6244 6245 6246 6247 6 6242 6243 6245 6481 6479 6482 6 6244 6243 6246 6482 6253 6251 6 6245 6243 6247 6033 6248 6251 6 6246 6243 6240 6239 6031 6033 6 6246 6033 6034 6249 6250 6251 6 6248 6034 6035 6250 6263 6255 6 6248 6249 6251 6252 6254 6255 6 6248 6250 6252 6253 6245 6246 6 6251 6250 6253 6254 6484 6485 6 6251 6252 6482 6245 6483 6484 6 6252 6250 6255 6256 6257 6485 6 6254 6250 6256 6263 6260 6249 6 6254 6255 6257 6258 6259 6260 6 6254 6256 6258 6485 6493 6494 6 6257 6256 6259 6494 6495 6496 7 6258 6256 6260 6261 6496 6273 6267 6 6259 6256 6261 6262 6263 6255 6 6259 6260 6262 6045 6266 6267 6 6261 6260 6263 6264 6265 6045 6 6262 6260 6264 6255 6249 6035 6 6262 6263 6265 6035 6040 6036 5 6262 6264 6045 6043 6040 6 6045 6261 6267 6268 6269 6046 6 6261 6266 6268 6272 6273 6259 6 6267 6266 6269 6270 6271 6272 6 6268 6266 6046 6270 6279 6280 6 6268 6269 6271 6277 6278 6279 6 6268 6270 6272 6275 6276 6277 6 6268 6271 6267 6273 6274 6275 6 6267 6272 6274 6496 6259 6497 6 6273 6272 6275 6500 6497 6501 6 6274 6272 6271 6276 6501 6502 6 6275 6271 6277 6502 6503 6504 6 6276 6271 6270 6278 6504 6505 7 6277 6270 6279 6054 6281 6282 6505 5 6278 6270 6269 6280 6054 6 6279 6269 6046 6054 6051 6047 5 6278 6054 6282 6283 6055 6 6278 6281 6283 6506 6505 6507 6 6282 6281 6055 6284 6507 6285 6 6283 6055 6056 6057 6060 6285 6 6284 6060 6286 6507 6283 6508 7 6285 6060 6287 6508 6328 6511 6290 6 6286 6060 6058 6288 6289 6290 6 6287 6058 6059 6061 6063 6289 5 6287 6288 6290 6291 6063 5 6287 6289 6291 6328 6286 7 6290 6289 6063 6292 6326 6327 6328 6 6291 6063 6064 6068 6293 6326 6 6292 6068 6294 6295 6325 6326 6 6293 6068 6069 6295 6296 6071 6 6293 6294 6296 6299 6324 6325 6 6295 6294 6071 6297 6298 6299 6 6296 6071 6073 6078 6080 6298 6 6297 6080 6296 6299 6300 6301 5 6296 6298 6300 6324 6295 6 6299 6298 6301 6303 6323 6324 6 6300 6298 6080 6081 6302 6303 6 6301 6081 6303 6304 6308 6314 6 6301 6302 6304 6305 6323 6300 6 6303 6302 6305 6306 6307 6308 6 6303 6304 6306 6323 6337 6338 6 6305 6304 6307 6338 6341 6342 6 6306 6304 6308 6309 6342 6343 6 6307 6304 6302 6309 6310 6314 6 6307 6308 6310 6311 6343 6346 6 6309 6308 6311 6312 6313 6314 6 6309 6310 6312 6321 6322 6346 6 6311 6310 6313 6315 6316 6321 6 6312 6310 6314 6082 6084 6315 6 6313 6310 6082 6081 6302 6308 6 6313 6084 6312 6316 6317 6318 6 6312 6315 6317 6319 6320 6321 6 6316 6315 6318 3769 1571 6319 5 6317 6315 3769 6084 6088 5 6317 1571 1572 6320 6316 7 6319 1572 1573 6316 6321 6322 6360 5 6316 6320 6322 6312 6311 7 6321 6320 6311 6347 6346 6348 6360 6 6303 6305 6300 6324 6335 6337 7 6300 6323 6299 6295 6325 6336 6335 6 6295 6324 6293 6326 6336 6331 6 6293 6325 6292 6291 6327 6331 6 6291 6326 6328 6329 6330 6331 6 6291 6327 6329 6511 6286 6290 6 6328 6327 6330 6510 6511 6519 7 6329 6327 6331 6332 6333 6519 6518 6 6330 6327 6332 6336 6325 6326 6 6330 6331 6333 6334 6335 6336 5 6330 6332 6334 6518 6520 6 6333 6332 6335 6520 6528 6529 7 6334 6332 6336 6324 6323 6337 6529 5 6335 6332 6331 6325 6324 6 6335 6323 6305 6338 6339 6529 6 6337 6305 6306 6339 6340 6341 6 6337 6338 6340 6530 6527 6529 5 6339 6338 6341 6545 6530 6 6340 6338 6306 6342 6546 6545 6 6341 6306 6307 6343 6344 6546 6 6342 6307 6344 6345 6346 6309 6 6342 6343 6345 6546 6543 6547 6 6344 6343 6346 6347 6549 6547 6 6345 6343 6347 6322 6311 6309 6 6345 6346 6322 6348 6349 6549 6 6347 6322 6349 6350 6359 6360 6 6347 6348 6350 6351 6550 6549 6 6349 6348 6351 6352 6353 6359 6 6349 6350 6352 6552 6550 6553 6 6351 6350 6353 6354 6355 6553 6 6352 6350 6354 1589 2476 6359 7 6352 6353 6355 6356 1594 1590 1589 6 6352 6354 6356 6357 6553 6554 5 6355 6354 6357 6358 1594 6 6355 6356 6358 6554 6555 3971 6 6357 6356 1594 3971 3970 1595 6 2476 6353 6350 6348 6360 6361 6 6359 6348 6361 1573 6320 6322 5 6359 6360 1573 2475 2476 6 6183 6184 6363 6364 6644 6645 6 6362 6184 6364 6365 6366 6367 6 6362 6363 6365 6644 6648 6649 6 6364 6363 6366 9727 9673 6649 6 6365 6363 6367 9727 9728 6368 6 6366 6363 6184 6185 6188 6368 6 6367 6188 6369 6370 9728 6366 6 6368 6188 6189 6370 6371 6372 6 6368 6369 6371 9728 9729 9730 6 6370 6369 6372 6374 6375 9730 6 6371 6369 6189 6192 6373 6374 6 6372 6192 6374 6382 6380 6193 6 6372 6373 6371 6375 6376 6380 6 6371 6374 6376 6377 6467 9730 6 6375 6374 6377 6378 6379 6380 5 6375 6376 6378 9693 6467 7 6377 6376 6379 6457 6455 6460 9693 6 6378 6376 6380 6381 6457 6458 6 6379 6376 6381 6382 6373 6374 6 6379 6380 6382 6459 6458 6204 6 6381 6380 6373 6193 6203 6204 7 6095 6096 6384 9703 5861 5860 5858 5 6383 6096 6098 5856 5858 6 5851 6104 6386 6945 5850 6946 7 6385 6104 6105 6106 6387 6946 6947 5 6386 6106 6109 6388 6947 6 6387 6109 6110 6389 6947 6948 6 6388 6110 6390 6391 6948 6949 6 6389 6110 6391 6392 6393 6111 6 6389 6390 6392 6394 6395 6949 6 6391 6390 6393 6394 9737 6398 6 6392 6390 6111 6112 6115 9737 6 6391 6392 6395 6396 6397 6398 6 6391 6394 6396 6949 6950 6951 6 6395 6394 6397 6951 6952 6399 6 6396 6394 6398 6133 6135 6399 6 6397 6394 6133 6132 9737 6392 6 6397 6135 6400 6952 6396 6953 6 6399 6135 6136 6401 6953 6954 6 6400 6136 6138 6402 6954 6960 6 6401 6138 6140 6403 6960 6410 6 6402 6140 6142 6404 6408 6410 6 6403 6142 6405 6406 6407 6408 6 6404 6142 6143 6406 6436 6434 6 6404 6405 6407 6431 6429 6434 6 6404 6406 6408 6409 6428 6429 6 6404 6407 6409 6403 6410 6411 6 6408 6407 6411 6412 6413 6428 6 6403 6408 6411 6959 6960 6402 6 6410 6408 6409 6412 6959 6961 6 6411 6409 6413 6414 6963 6961 6 6412 6409 6414 6415 6427 6428 6 6412 6413 6415 6416 6963 6964 6 6414 6413 6416 6417 6418 6427 6 6414 6415 6417 6558 6559 6964 6 6416 6415 6418 6419 6558 6565 6 6417 6415 6419 6420 6427 6424 6 6417 6418 6420 6421 6573 6565 6 6419 6418 6421 6422 6423 6424 6 6419 6420 6422 6573 6572 6574 6 6421 6420 6423 6580 6577 6574 6 6422 6420 6424 6425 6580 6581 6 6423 6420 6425 6426 6427 6418 6 6423 6424 6426 6584 6581 6430 6 6425 6424 6427 6428 6429 6430 6 6426 6424 6418 6415 6413 6428 6 6427 6413 6409 6407 6426 6429 6 6426 6428 6407 6430 6431 6406 6 6426 6429 6431 6432 6584 6425 6 6430 6429 6406 6432 6433 6434 6 6430 6431 6433 6584 6585 6586 6 6432 6431 6434 6435 6589 6586 6 6433 6431 6435 6436 6405 6406 6 6433 6434 6436 6437 6589 6590 6 6435 6434 6405 6437 6145 6143 6 6435 6436 6145 6438 6590 6591 6 6437 6145 6146 6439 6591 6592 6 6438 6146 6440 6595 6592 6443 6 6439 6146 6147 6441 6442 6443 6 6440 6147 6149 6151 6153 6442 6 6441 6153 6440 6443 6444 6155 6 6440 6442 6444 6595 6439 6453 6 6443 6442 6155 6445 6446 6453 6 6444 6155 6446 6447 5969 6156 6 6444 6445 6447 6449 6452 6453 6 6446 6445 5969 5970 6448 6449 5 6447 5970 5972 5975 6449 7 6448 5975 6447 6450 6451 6452 6446 7 6449 5975 5976 6451 6607 6598 6608 6 6449 6450 6452 6596 6597 6598 5 6449 6451 6446 6453 6596 6 6446 6452 6595 6443 6444 6596 5 6212 6224 6231 6455 6456 7 6454 6231 6456 6457 6378 6232 6460 6 6454 6455 6457 6458 6211 6212 5 6456 6455 6378 6379 6458 6 6457 6379 6456 6211 6459 6381 6 6211 6458 6207 6381 6204 6205 5 6455 6232 6461 9693 6378 6 6460 6232 6233 6462 6465 9693 6 6461 6233 6235 6463 6464 6465 6 6462 6235 6464 6469 6470 6471 6 6462 6463 6465 6466 6468 6469 6 6462 6464 6461 6466 6467 9693 6 6465 6464 6467 6468 9731 9732 7 6465 6466 9693 6377 6375 9730 9731 6 6466 6464 6469 7509 7510 9732 7 6468 6464 6463 6470 7507 7509 7506 6 6469 6463 6471 6472 7506 7505 6 6470 6463 6235 6472 6473 6236 6 6470 6471 6473 6474 7504 7505 6 6472 6471 6236 6474 6475 6476 7 6472 6473 6475 7503 7504 9692 9780 6 6474 6473 6476 6477 6478 9692 6 6475 6473 6236 6237 6241 6477 6 6476 6241 6242 6475 6478 6479 7 6475 6477 6479 6480 9692 9778 9779 6 6478 6477 6242 6480 6481 6244 6 6478 6479 6481 6487 9705 9778 6 6480 6479 6244 6482 6486 6487 6 6481 6244 6245 6253 6483 6486 5 6482 6253 6484 6486 6489 7 6483 6253 6252 6485 6489 6490 6491 7 6484 6252 6254 6257 6491 6492 6493 6 6482 6483 6481 6487 6488 6489 5 6481 6486 6488 9705 6480 7 6487 6486 6489 9704 2194 2195 9705 6 6488 6486 6483 6484 6490 9704 6 6489 6484 6491 2251 2252 9704 6 6490 6484 6485 6492 2251 9706 6 6491 6485 6493 9706 3335 9707 5 6492 6485 6257 6494 9707 6 6493 6257 6258 6495 9707 6499 6 6494 6258 6496 6497 6498 6499 5 6495 6258 6259 6273 6497 6 6496 6273 6495 6498 6500 6274 6 6495 6497 6499 2511 2512 6500 7 6495 6498 2511 3334 9707 3881 6494 6 2512 6498 6497 6274 6501 9710 6 6500 6274 6275 6502 9709 9710 6 6501 6275 6276 6503 9708 9709 6 6502 6276 6504 6512 9708 9711 6 6503 6276 6277 6505 6506 6512 5 6504 6277 6506 6282 6278 7 6504 6505 6282 6507 6512 6513 6509 6 6506 6282 6283 6285 6508 6509 6 6507 6285 6286 6509 6510 6511 6 6507 6508 6510 6513 6506 6514 7 6509 6508 6511 6329 6514 6515 6519 5 6510 6508 6329 6328 6286 6 6503 6504 6506 6513 9711 9717 5 6512 6506 6509 6514 9717 7 6513 6509 6510 6515 6516 9717 9718 6 6514 6510 6516 6517 6518 6519 6 6514 6515 6517 9718 9719 6522 6 6516 6515 6518 6520 6521 6522 6 6517 6515 6519 6330 6333 6520 5 6518 6515 6510 6329 6330 7 6518 6333 6334 6517 6521 6525 6528 6 6517 6520 6522 6523 6524 6525 7 6517 6521 6523 2214 9719 6516 2213 5 6522 6521 6524 2213 3348 7 6523 6521 6525 6526 3348 3347 6532 6 6524 6521 6520 6526 6527 6528 6 6524 6525 6527 6530 6531 6532 6 6526 6525 6528 6530 6339 6529 5 6527 6525 6520 6334 6529 6 6528 6334 6335 6339 6527 6337 7 6526 6527 6531 6340 6545 6339 6534 6 6526 6530 6532 3863 6533 6534 5 6526 6531 3863 3347 6524 6 3863 6531 6534 6535 6536 6716 6 6533 6531 6535 6544 6545 6530 6 6533 6534 6536 6537 6544 6541 6 6533 6535 6537 6538 6715 6716 6 6536 6535 6538 6539 6540 6541 7 6536 6537 6539 6714 3887 3886 6715 6 6538 6537 6540 6714 6718 6719 6 6539 6537 6541 6542 6719 6708 6 6540 6537 6542 6543 6544 6535 6 6540 6541 6543 6547 6548 6708 6 6542 6541 6544 6546 6344 6547 6 6543 6541 6535 6534 6545 6546 6 6544 6534 6546 6341 6340 6530 6 6544 6545 6543 6341 6342 6344 6 6543 6344 6542 6548 6549 6345 6 6542 6547 6549 6550 6551 6708 6 6548 6547 6345 6347 6550 6349 6 6548 6549 6551 6552 6351 6349 6 6548 6550 6552 6705 6707 6708 6 6551 6550 6351 6553 6554 6705 5 6552 6351 6352 6355 6554 6 6553 6355 6357 6555 6552 6705 7 6554 6357 3971 6705 6706 9747 3491 6 3969 1597 1598 6557 4038 3968 6 6556 1598 4038 3764 612 611 6 6416 6417 6559 6560 6564 6565 6 6416 6558 6560 6561 6964 6965 6 6559 6558 6561 6562 6563 6564 6 6559 6560 6562 6965 6966 6967 6 6561 6560 6563 6985 6983 6967 6 6562 6560 6564 6985 6986 6567 6 6563 6560 6558 6565 6566 6567 6 6564 6558 6417 6566 6573 6419 6 6564 6565 6567 6568 6569 6573 6 6564 6566 6568 6986 6563 6987 6 6567 6566 6569 6570 6990 6987 6 6568 6566 6570 6571 6572 6573 6 6568 6569 6571 6997 6990 6998 6 6570 6569 6572 6575 7001 6998 6 6571 6569 6573 6421 6574 6575 6 6572 6569 6566 6565 6419 6421 6 6572 6421 6575 6576 6577 6422 6 6572 6574 6576 7003 7001 6571 6 6575 6574 6577 6578 7003 7004 6 6576 6574 6578 6579 6580 6422 6 6576 6577 6579 7004 7005 7006 6 6578 6577 6580 7006 7007 6582 6 6579 6577 6422 6423 6581 6582 6 6580 6423 6582 6583 6584 6425 6 6580 6581 6583 7007 6579 7008 6 6582 6581 6584 6720 7008 6585 6 6583 6581 6425 6430 6432 6585 6 6584 6432 6586 6587 6720 6583 6 6585 6432 6587 6588 6589 6433 6 6585 6586 6588 6720 6721 6728 6 6587 6586 6589 6728 6729 6730 6 6588 6586 6433 6435 6590 6730 6 6589 6435 6437 6591 6730 6731 6 6590 6437 6438 6592 6593 6731 6 6591 6438 6593 6594 6595 6439 6 6591 6592 6594 6731 6732 6733 7 6593 6592 6595 6600 6733 6597 6596 6 6594 6592 6439 6443 6453 6596 6 6595 6453 6452 6451 6597 6594 6 6596 6451 6598 6599 6600 6594 6 6597 6451 6599 6606 6607 6450 6 6597 6598 6600 6601 6602 6606 5 6597 6599 6601 6733 6594 6 6600 6599 6602 6603 6734 6733 6 6601 6599 6603 6604 6605 6606 7 6601 6602 6604 6734 6735 6736 6737 5 6603 6602 6605 6737 6738 7 6604 6602 6606 6738 6739 6748 6745 6 6605 6602 6599 6598 6607 6748 6 6606 6598 6450 6608 6747 6748 6 6607 6450 5976 6609 6610 6747 6 6608 5976 5977 6610 6611 6612 6 6608 6609 6611 6747 6746 6749 6 6610 6609 6612 6619 6620 6749 6 6611 6609 5977 6613 6616 6619 6 6612 5977 5978 6614 6615 6616 6 6613 5978 6615 6639 6640 5979 6 6613 6614 6616 6617 6638 6639 6 6613 6615 6617 6618 6619 6612 6 6616 6615 6618 6636 6637 6638 6 6616 6617 6619 6621 6622 6636 6 6616 6618 6612 6611 6620 6621 6 6611 6619 6621 6750 6749 6626 6 6620 6619 6618 6622 6623 6626 6 6621 6618 6623 6624 6635 6636 6 6621 6622 6624 6625 6626 6627 6 6623 6622 6625 6633 6634 6635 6 6623 6624 6627 6628 6632 6633 6 6621 6623 6627 6750 6620 6751 6 6626 6623 6625 6628 6629 6751 6 6627 6625 6629 6630 6631 6632 6 6627 6628 6630 6756 6753 6751 6 6629 6628 6631 6756 6757 6758 6 6630 6628 6632 6758 6766 6767 6 6631 6628 6625 6633 6767 6768 6 6632 6625 6624 6634 6768 6769 6 6633 6624 6635 6769 6770 6771 6 6634 6624 6622 6636 9785 6771 6 6635 6622 6618 6617 6637 9785 6 6636 6617 6638 6785 6783 9785 6 6637 6617 6615 6639 9777 6785 6 6638 6615 6614 6640 9777 6642 6 6639 6614 5979 5981 6641 6642 6 6640 5981 5983 6642 6643 5985 7 6640 6641 6643 9777 6639 6787 9782 6 6642 6641 5985 6168 9782 9783 6 6362 6364 6645 6646 6647 6648 6 6362 6644 6183 6646 9724 9799 6 6645 6644 6647 9723 9724 6655 6 6646 6644 6648 6652 6654 6655 6 6647 6644 6364 6649 6650 6652 6 6648 6364 6650 6651 9673 6365 6 6648 6649 6651 6652 6653 9670 6 6650 6649 9670 9671 9672 9673 6 6648 6650 6653 6647 6654 3173 6 6652 6650 9670 9691 3172 3173 6 6647 6652 3173 6655 3450 3175 6 6647 6654 3450 6656 9723 6646 6 6655 3450 6657 6658 9721 9723 6 6656 3450 6658 3179 6659 6667 6 6656 6657 6667 6668 6669 9721 6 6657 3179 6660 6663 6664 6667 6 6659 3179 3178 6661 6662 6663 6 6660 3178 3180 2858 2859 6662 5 6660 6661 6663 6666 2859 6 6660 6662 6659 6664 6665 6666 6 6659 6663 6665 6667 6668 6672 7 6664 6663 6666 6672 6673 4564 4563 6 6665 6663 6662 4563 6674 2859 5 6659 6664 6668 6658 6657 7 6667 6664 6658 6669 6670 6671 6672 6 6658 6668 6670 6774 6775 9721 6 6669 6668 6671 6773 6772 6774 6 6670 6668 6672 6673 6790 6773 5 6671 6668 6664 6665 6673 5 6672 6665 4564 6671 6790 6 4563 6666 4561 6675 2860 2859 6 4561 6674 2860 6676 4560 9792 6 6675 2860 2853 2854 6677 9792 6 6676 2854 6678 6679 6681 9792 5 6677 2854 6679 6680 2855 6 6677 6678 6680 6681 6682 6683 6 6679 6678 6685 6683 6686 2855 6 6677 6679 6682 9750 9761 9792 6 6681 6679 6683 5156 5157 9750 6 6682 6679 5156 6684 6685 6680 6 5156 6683 6685 6692 6693 6694 6 6684 6683 6680 6686 6687 6692 6 6685 6680 6687 6688 6689 2855 6 6685 6686 6688 6692 6696 6699 6 6687 6686 6689 6690 6699 6700 6 6688 6686 6690 6691 2856 2855 6 6688 6689 6691 6700 6702 2551 5 6690 6689 2856 2550 2551 6 6685 6687 6684 6693 6695 6696 6 6684 6692 6694 4523 4522 6695 5 6684 6693 4523 4532 5156 6 4522 6693 6692 6696 6697 6704 6 6695 6692 6687 6697 6698 6699 7 6695 6696 6698 6703 3505 3506 6704 6 6697 6696 6699 6700 6701 6703 5 6698 6696 6687 6688 6700 7 6699 6688 6690 6698 6701 2222 6702 6 6698 6700 2222 64 65 6703 5 2222 6700 6690 2551 2221 6 6698 6701 65 66 6697 3505 5 6697 3506 3507 4522 6695 7 6552 6554 6555 6706 6551 6707 9749 6 6705 6555 9747 3502 9748 9749 6 6551 6705 6708 6709 6710 9749 7 6551 6707 6709 6719 6540 6548 6542 6 6708 6707 6710 6711 6718 6719 7 6709 6707 6711 6712 3503 9748 9749 7 6709 6710 6712 3117 3119 6713 6718 6 6711 6710 3503 3504 3116 3117 6 6711 3119 3121 3887 6714 6718 5 6713 3887 6538 6539 6718 6 6538 3886 6536 6716 3862 6717 5 6536 6715 6533 3863 3862 6 3862 6715 3861 3342 3885 3886 6 6714 6539 6713 6711 6709 6719 5 6718 6539 6540 6709 6708 6 6585 6587 6721 6722 7008 6583 6 6720 6587 6722 6723 6727 6728 6 6720 6721 6723 6724 7009 7008 6 6722 6721 6724 6725 6726 6727 6 6722 6723 6725 7009 7010 7011 6 6724 6723 6726 7022 7011 7023 6 6725 6723 6727 7023 7026 7027 6 6726 6723 6721 6728 7027 7030 6 6727 6721 6587 6588 6729 7030 6 6728 6588 6730 7030 7031 7032 6 6729 6588 6589 6590 6731 7032 6 6730 6590 6591 6593 6732 7032 6 6731 6593 6733 6734 7032 7033 6 6732 6593 6734 6601 6600 6594 6 6732 6733 6601 6603 6735 7033 6 6734 6603 6736 7033 7034 7035 6 6735 6603 6737 6740 7035 7036 5 6736 6603 6604 6738 6740 7 6737 6604 6605 6739 6740 6741 6742 6 6738 6605 6742 6743 6744 6745 6 6736 6737 6738 6741 7036 7037 6 6740 6738 6742 7037 7038 7039 6 6741 6738 6739 6743 7039 7040 7 6742 6739 6744 7040 7041 6754 7042 5 6743 6739 6745 6746 7042 6 6744 6739 6746 6747 6748 6605 7 6744 6745 6747 6610 6749 6750 7042 6 6746 6745 6748 6607 6608 6610 5 6747 6745 6607 6605 6606 5 6746 6610 6750 6620 6611 7 6746 6749 6620 6626 6751 6752 7042 6 6750 6626 6752 6753 6629 6627 5 6750 6751 6753 6754 7042 6 6752 6751 6754 6755 6756 6629 7 6752 6753 6755 7041 6743 7042 7141 5 6754 6753 6756 7141 6759 6 6755 6753 6629 6630 6757 6759 6 6756 6630 6758 6759 6760 6761 6 6757 6630 6631 6761 6762 6766 6 6756 6757 6760 7141 6755 7142 6 6759 6757 6761 7142 7143 7144 6 6760 6757 6758 6762 6763 7144 6 6761 6758 6763 4559 6764 6766 6 6761 6762 4559 4551 7144 4550 6 4559 6762 4558 4565 6765 6766 5 4565 6764 6766 6790 6767 6 6765 6764 6762 6758 6631 6767 6 6766 6631 6632 6768 6790 6765 6 6767 6632 6633 6769 6773 6790 6 6768 6633 6634 6770 6772 6773 6 6769 6634 6771 6772 6777 6778 6 6770 6634 6778 6779 6635 9785 6 6769 6770 6773 6670 6774 6777 6 6769 6772 6670 6671 6790 6768 6 6670 6772 6669 6775 6776 6777 6 6669 6774 6776 9721 9722 9798 7 6775 6774 6777 6778 6780 9797 9798 5 6776 6774 6772 6770 6778 6 6777 6770 6771 6779 6780 6776 6 6778 6771 6780 6781 6783 9785 6 6778 6779 6781 6782 6776 9797 6 6780 6779 6782 6176 6783 6784 5 6780 6781 6176 6177 9797 6 6781 6779 6784 6785 6637 9785 7 6781 6783 6176 6174 6785 6786 6788 7 6784 6783 6786 6787 9777 6638 6637 6 6784 6785 6787 6788 6171 6789 6 6786 6785 9777 6642 9782 6789 5 6784 6786 6171 6172 6174 5 6171 6786 6170 6787 9782 8 6671 6673 6773 4564 4565 6765 6768 6767 6 5418 5419 6792 7331 7332 7333 6 6791 5419 5420 5428 6793 7333 6 6792 5428 5429 6794 7333 7334 6 6793 5429 5430 6795 7334 7335 6 6794 5430 5432 5433 6796 7335 6 6795 5433 5434 6797 7335 7336 6 6796 5434 5435 6798 7336 7337 6 6797 5435 5436 6799 7337 7338 6 6798 5436 5437 6800 7338 7339 6 6799 5437 5438 6801 7339 7340 6 6800 5438 6802 7340 7341 7342 6 6801 5438 5439 5440 6803 7342 6 6802 5440 5441 6804 7342 7343 6 6803 5441 5442 6805 7343 7344 6 6804 5442 5444 6806 7344 7345 6 6805 5444 5445 6807 7345 7346 6 6806 5445 5446 6808 7346 7347 6 6807 5446 6809 7347 7348 7349 6 6808 5446 5447 6810 7349 6811 5 6809 5447 5217 5218 6811 6 6810 5218 5219 6812 7349 6809 5 6811 5219 6813 7349 7350 6 6812 5219 5220 6814 7350 7351 7 6813 5220 5221 5222 6815 7351 7352 5 6814 5222 6816 7352 7353 7 6815 5222 5223 5224 6817 7353 7354 5 6816 5224 6818 7354 7355 6 6817 5224 6819 7355 7356 7357 6 6818 5224 5225 5226 6820 7357 5 6819 5226 5227 6821 7357 6 6820 5227 6822 7357 7358 7359 7 6821 5227 5228 5229 6823 7359 7360 5 6822 5229 6824 6825 7360 5 6823 5229 6825 6826 5167 7 6823 6824 6826 6827 6828 7362 7360 5 6825 6824 5167 5168 6827 6 6826 5168 6825 6828 6829 6830 6 6825 6827 6829 7362 7363 7364 6 6828 6827 6830 7364 7365 7366 6 6829 6827 5168 5169 6831 7366 7 6830 5169 6832 7366 7367 7368 6834 5 6831 5169 6833 5238 6834 5 6832 5169 5238 5018 5023 6 6832 5238 5239 6835 7368 6831 6 6834 5239 5648 6836 7375 7368 7 6835 5648 6837 7375 7374 7376 7377 6 6836 5648 5649 5651 6838 7377 6 6837 5651 6839 7377 7378 7379 6 6838 5651 5652 6840 6841 7379 6 6839 5652 5653 5247 6841 5248 6 6839 6840 5248 6842 7379 7380 6 6841 5248 5249 6843 7380 7381 6 6842 5249 6844 7381 7382 7383 6 6843 5249 5028 5029 6845 7383 6 6844 5029 5030 6846 6847 7383 6 6845 5030 6847 6848 6849 5031 6 6845 6846 6848 7384 7383 7385 6 6847 6846 6849 7385 7386 7387 6 6848 6846 5031 5032 6850 7387 6 6849 5032 5033 5034 6851 7387 6 6850 5034 6852 7387 7388 6854 6 6851 5034 5035 5038 6853 6854 6 6852 5038 6854 6855 6856 5039 6 6852 6853 6855 7388 6851 7389 6 6854 6853 6856 6857 6859 7389 6 6855 6853 5039 6857 6858 5041 6 6855 6856 6858 6859 6860 6861 6 6857 6856 5041 6861 6862 6863 6 6855 6857 6860 7389 7390 7397 6 6859 6857 6861 7397 7398 7399 6 6860 6857 6858 6862 7399 7400 6 6861 6858 6863 6864 6865 7400 6 6862 6858 6864 5042 6879 5041 6 6862 6863 6865 6866 6879 6873 6 6862 6864 6866 6867 7400 7401 6 6865 6864 6867 6868 6872 6873 6 6865 6866 6868 6869 7401 7402 6 6867 6866 6869 6870 6871 6872 6 6867 6868 6870 7405 7402 7406 6 6869 6868 6871 7412 7406 7413 6 6870 6868 6872 7419 7416 7413 6 6871 6868 6866 6873 6874 7419 6 6872 6866 6874 6875 6864 6879 6 6872 6873 6875 6876 7419 7418 6 6874 6873 6876 6877 6878 6879 6 6874 6875 6877 6883 6884 7418 6 6876 6875 6878 6880 6882 6883 6 6877 6875 6879 6880 5043 5042 6 6878 6875 5042 6863 6864 6873 6 6877 6878 5043 5045 6881 6882 6 6880 5045 6882 6887 6888 6889 6 6880 6881 6877 6883 6886 6887 6 6877 6882 6876 6884 6885 6886 6 6876 6883 6885 7418 7420 7426 6 6884 6883 6886 7426 7427 7428 6 6885 6883 6882 6887 7428 7429 6 6886 6882 6881 6888 7429 7430 6 6887 6881 6889 6890 7430 7433 6 6888 6881 5045 6890 4645 4644 6 6888 6889 4645 4646 6891 7433 6 6890 4646 4647 6892 7433 6893 6 6891 4647 4253 4254 4730 6893 6 6892 4730 6894 7433 6891 7432 6 6893 4730 4731 6895 6897 7432 6 6894 4731 6896 6897 6898 6899 6 6895 4731 4732 6899 6900 6901 6 6894 6895 6898 7432 7431 7434 6 6897 6895 6899 7434 7435 7436 6 6898 6895 6896 6900 7436 7437 6 6899 6896 6901 7437 6904 6903 6 6900 6896 4732 4262 6902 6903 6 6901 4262 4263 4264 5231 6903 6 6902 5231 5458 6904 6900 6901 6 6903 5458 5459 6905 7437 6900 6 6904 5459 6906 7437 7438 7439 6 6905 5459 5460 6907 7439 7440 6 6906 5460 5461 6908 7262 7440 6 6907 5461 5462 6909 7262 7263 6 6908 5462 6910 7263 7264 6911 6 6909 5462 5463 5464 5465 6911 6 6910 5465 6912 7264 6909 7265 6 6911 5465 5466 6913 7265 7266 6 6912 5466 5467 6914 7266 7267 6 6913 5467 6915 7267 7268 7269 6 6914 5467 5468 6916 6917 7269 6 6915 5468 5469 5470 5471 6917 6 6915 6916 5471 6918 7269 7270 6 6917 5471 5472 6919 7270 7271 6 6918 5472 5473 6920 7271 7272 6 6919 5473 5474 5475 6921 7272 6 6920 5475 6922 7274 7272 7275 6 6921 5475 5476 6923 7275 7276 6 6922 5476 5477 6924 7276 7277 6 6923 5477 5478 6925 7277 7278 6 6924 5478 5479 6926 7278 7279 6 6925 5479 5480 5654 6927 7279 6 6926 5654 5655 6928 7281 7279 6 6927 5655 6929 7281 7282 7283 6 6928 5655 5656 5657 6930 7283 6 6929 5657 6931 7283 7284 7285 6 6930 5657 5658 5831 6932 7285 6 6931 5831 6933 7285 7286 7287 6 6932 5831 5832 5840 6934 7287 6 6933 5840 5841 6935 6936 7287 6 6934 5841 5843 6936 6937 6018 6 6934 6935 6937 6938 7287 7288 6 6936 6935 6018 6938 6939 6940 6 6936 6937 6939 7288 7289 7290 6 6938 6937 6940 7290 7291 6941 6 6939 6937 6018 5845 5847 6941 6 6940 5847 6942 6943 7291 6939 6 6941 5847 6943 6944 6945 5848 6 6941 6942 6944 7291 7292 7293 6 6943 6942 6945 7293 7294 7295 7 6944 6942 5848 5850 6385 6946 7295 6 6945 6385 6386 6947 7295 7296 6 6946 6386 6387 6388 6948 7296 6 6947 6388 6389 6949 7296 7297 7 6948 6389 6391 6395 6950 7297 7298 6 6949 6395 6951 7298 7300 7301 6 6950 6395 6396 6952 7043 7301 6 6951 6396 6399 6953 7043 7044 6 6952 6399 6400 6954 6955 7044 6 6953 6400 6401 6955 6956 6960 6 6953 6954 6956 6957 7044 7045 6 6955 6954 6957 6958 6959 6960 6 6955 6956 6958 7045 7048 7049 6 6957 6956 6959 6961 6962 7049 6 6958 6956 6960 6410 6411 6961 6 6959 6956 6954 6401 6402 6410 6 6959 6411 6958 6962 6963 6412 6 6958 6961 6963 7051 7049 7052 6 6962 6961 6412 6414 6964 7052 6 6963 6414 6416 6559 6965 7052 6 6964 6559 6561 6966 7052 6971 6 6965 6561 6967 6968 6970 6971 6 6966 6561 6968 6969 6562 6983 6 6966 6967 6969 6970 6974 6975 6 6968 6967 6981 6975 6982 6983 6 6966 6968 6971 6972 6973 6974 6 6966 6970 6972 7052 6965 7051 6 6971 6970 6973 7051 7050 7053 6 6972 6970 6974 7062 7053 7063 6 6973 6970 6968 6975 6976 7063 6 6974 6968 6976 6977 6981 6969 6 6974 6975 6977 6978 7063 7064 6 6976 6975 6978 6979 6980 6981 6 6976 6977 6979 7064 7065 7066 6 6978 6977 6980 7066 7067 7071 6 6979 6977 6981 7071 7072 7073 6 6980 6977 6975 6969 6982 7073 6 6981 6969 6983 6984 7073 7074 6 6982 6969 6984 6985 6562 6967 6 6982 6983 6985 7074 7075 7076 6 6984 6983 6562 6563 6986 7076 6 6985 6563 6567 6987 6988 7076 6 6986 6567 6988 6989 6990 6568 6 6986 6987 6989 6991 7076 7077 6 6988 6987 6990 6991 6992 6996 6 6989 6987 6996 6997 6570 6568 6 6988 6989 6992 6993 7077 7078 6 6991 6989 6993 6994 6995 6996 6 6991 6992 6994 7078 7081 7082 6 6993 6992 6995 7082 7085 7086 6 6994 6992 6996 7086 7087 7088 6 6995 6992 6989 6990 6997 7088 6 6996 6990 6570 6998 6999 7088 6 6997 6570 6999 7000 7001 6571 6 6997 6998 7000 7088 7089 7092 6 6999 6998 7001 7002 7092 7093 6 7000 6998 7002 7003 6575 6571 6 7000 7001 7003 7093 7094 7095 6 7002 7001 6575 6576 7004 7095 6 7003 6576 6578 7005 7095 7096 6 7004 6578 7006 7096 7097 7098 6 7005 6578 6579 7007 7012 7098 6 7006 6579 6582 7008 7009 7012 6 7007 6582 7009 6722 6720 6583 6 7007 7008 6722 6724 7010 7012 6 7009 6724 7011 7012 7013 7014 6 7010 6724 7022 7020 7014 6725 6 7009 7010 7007 7006 7013 7098 6 7012 7010 7014 7015 7098 7099 6 7013 7010 7015 7016 7020 7011 6 7013 7014 7016 7017 7099 7100 6 7015 7014 7017 7018 7019 7020 6 7015 7016 7018 7107 7100 7113 6 7017 7016 7019 7114 7113 7115 6 7018 7016 7020 7021 7115 7116 6 7019 7016 7014 7021 7022 7011 6 7019 7020 7022 7024 7116 7117 6 7021 7020 7011 6725 7023 7024 6 7022 6725 6726 7024 7025 7026 6 7021 7022 7023 7025 7117 7118 6 7024 7023 7026 7118 7119 7120 6 7025 7023 6726 7027 7028 7120 6 7026 6726 6727 7028 7029 7030 6 7026 7027 7029 7122 7120 7123 6 7028 7027 7030 7123 7034 7031 6 7029 7027 6727 6728 6729 7031 6 7030 6729 7032 7034 7029 7033 6 7031 6729 6730 6731 6732 7033 6 7032 6732 6734 6735 7034 7031 6 7033 6735 7035 7123 7029 7031 5 7034 6735 6736 7036 7123 6 7035 6736 6740 7037 7123 7122 7 7036 6740 6741 7038 7122 7124 7125 6 7037 6741 7039 7135 7125 7136 6 7038 6741 6742 7040 7136 7137 6 7039 6742 6743 7041 7137 7138 5 7040 6743 6754 7141 7138 6 6754 6743 6744 6746 6750 6752 6 6951 6952 7044 7301 7302 7046 6 7043 6952 6953 6955 7045 7046 6 7044 6955 6957 7046 7047 7048 6 7044 7045 7047 7302 7043 7303 6 7046 7045 7048 7303 7056 7054 6 7047 7045 6957 7049 7050 7054 6 7048 6957 7050 7051 6962 6958 6 7048 7049 7051 6972 7053 7054 6 7050 7049 6962 7052 6971 6972 6 7051 6962 6963 6964 6965 6971 6 7050 6972 7054 7055 7062 6973 6 7050 7053 7055 7056 7047 7048 6 7054 7053 7056 7057 7058 7062 6 7054 7055 7057 7303 7047 7304 6 7056 7055 7058 7059 7307 7304 6 7057 7055 7059 7060 7061 7062 6 7057 7058 7060 7307 7476 7477 6 7059 7058 7061 7477 7478 7479 6 7060 7058 7062 7063 7064 7479 6 7061 7058 7055 7053 6973 7063 6 7062 6973 6974 6976 7061 7064 6 7061 7063 6976 6978 7065 7479 6 7064 6978 7066 7479 7480 7481 6 7065 6978 6979 7067 7068 7481 6 7066 6979 7068 7069 7070 7071 6 7066 7067 7069 7483 7481 7462 6 7068 7067 7070 7462 7484 7485 6 7069 7067 7071 7485 7486 7487 6 7070 7067 6979 6980 7072 7487 6 7071 6980 7073 7487 7488 7492 6 7072 6980 6981 6982 7074 7492 6 7073 6982 6984 7075 7493 7492 6 7074 6984 7076 7493 7079 7077 6 7075 6984 6985 6986 6988 7077 6 7076 6988 6991 7078 7079 7075 6 7077 6991 6993 7079 7080 7081 6 7077 7078 7080 7691 7493 7075 6 7079 7078 7081 7223 7224 7691 6 7080 7078 6993 7082 7083 7223 6 7081 6993 6994 7083 7084 7085 6 7081 7082 7084 7226 7223 7227 6 7083 7082 7085 7227 7228 7229 6 7084 7082 6994 7086 7232 7229 6 7085 6994 6995 7087 7232 7233 6 7086 6995 7088 7089 7090 7233 6 7087 6995 6996 6997 6999 7089 6 7088 6999 7087 7090 7091 7092 6 7087 7089 7091 7233 7234 7235 6 7090 7089 7092 7235 7236 7237 6 7091 7089 6999 7000 7093 7237 6 7092 7000 7002 7094 7237 7238 6 7093 7002 7095 7238 7239 7103 6 7094 7002 7003 7004 7096 7103 6 7095 7004 7005 7097 7102 7103 6 7096 7005 7098 7099 7101 7102 6 7097 7005 7006 7012 7013 7099 6 7098 7013 7015 7100 7101 7097 6 7099 7015 7101 7106 7107 7017 6 7099 7100 7097 7102 7105 7106 6 7097 7101 7096 7103 7104 7105 6 7096 7102 7104 7239 7094 7095 6 7103 7102 7105 7241 7239 7242 6 7104 7102 7101 7106 7242 7243 6 7105 7101 7100 7107 7108 7243 6 7106 7100 7017 7108 7109 7113 6 7106 7107 7109 7110 7243 7244 6 7108 7107 7110 7111 7112 7113 6 7108 7109 7111 7247 7244 7248 6 7110 7109 7112 7248 7249 7250 6 7111 7109 7113 7114 7250 7251 6 7112 7109 7114 7018 7017 7107 6 7112 7113 7018 7115 7251 7254 6 7114 7018 7019 7116 7254 7255 6 7115 7019 7021 7117 7258 7255 6 7116 7021 7024 7118 7258 7259 6 7117 7024 7025 7119 7259 7128 6 7118 7025 7120 7121 7127 7128 6 7119 7025 7121 7122 7028 7026 6 7119 7120 7122 7124 7126 7127 7 7121 7120 7028 7123 7036 7037 7124 6 7122 7028 7029 7034 7035 7036 5 7122 7037 7125 7126 7121 5 7124 7037 7126 7135 7038 7 7124 7125 7121 7127 7130 7131 7135 6 7121 7126 7119 7128 7129 7130 6 7119 7127 7129 7261 7259 7118 6 7128 7127 7130 7261 7532 7530 6 7129 7127 7126 7131 7132 7532 6 7130 7126 7132 7133 7134 7135 6 7130 7131 7133 7532 7531 7533 6 7132 7131 7134 7533 7534 7535 6 7133 7131 7135 7535 7536 7136 6 7134 7131 7126 7125 7038 7136 6 7135 7038 7039 7137 7536 7134 6 7136 7039 7040 7138 7139 7536 6 7137 7040 7139 7140 7141 7041 6 7137 7138 7140 7148 7150 7536 6 7139 7138 7141 7142 7147 7148 7 7140 7138 7041 6754 6755 6759 7142 6 7140 7141 6759 6760 7143 7147 6 7142 6760 7144 7145 7146 7147 7 7143 6760 7145 4552 4551 6763 6761 5 7143 7144 4552 4554 7146 6 7145 4554 4556 7143 7147 7148 5 7143 7146 7148 7140 7142 7 7147 7146 4556 7140 7139 7149 7150 6 7148 4556 7150 7151 7152 7153 6 7148 7149 7139 7151 7536 7535 6 7150 7149 7152 7535 7534 7537 6 7151 7149 7153 7154 7155 7537 6 7152 7149 7154 4649 4555 4556 6 7152 7153 7155 7156 7166 4649 6 7152 7154 7156 7157 7537 7538 6 7155 7154 7157 7158 7159 7166 6 7155 7156 7158 7538 7539 7554 6 7157 7156 7159 7160 7554 7555 6 7158 7156 7160 7161 7162 7166 6 7158 7159 7161 7163 7167 7555 6 7160 7159 7162 7163 4137 7164 5 7161 7159 7164 7165 7166 6 7160 7161 4137 7167 7168 4138 7 4137 7161 7162 7165 4413 4134 4135 5 7164 7162 4413 4415 7166 7 4415 7165 7162 7159 7156 7154 4649 6 7160 7163 7168 7555 7556 7560 7 7167 7163 4138 7169 7560 7561 7562 5 7168 4138 4139 7170 7562 7 7169 4139 4140 7171 7562 7563 7564 6 7170 4140 4124 7172 7173 7564 6 7171 4124 7173 7174 4122 9789 6 7171 7172 7174 7175 7176 7564 6 7173 7172 7175 9788 9787 9789 6 7173 7174 7176 7177 7178 9788 7 7173 7175 7177 7564 7563 7568 7569 6 7176 7175 7178 7179 7180 7569 6 7177 7175 7179 9788 3535 3537 6 7177 7178 7180 7181 7182 3537 6 7177 7179 7181 7570 7569 7571 6 7180 7179 7182 7571 7572 7573 6 7181 7179 3537 3538 7183 7573 6 7182 3538 7184 7575 7573 7187 6 7183 3538 3539 7185 7186 7187 6 7184 3539 7186 7211 7210 7212 6 7184 7185 7187 7188 7211 7192 6 7184 7186 7188 7189 7575 7183 6 7187 7186 7189 7190 7191 7192 6 7187 7188 7190 7575 7576 7579 6 7189 7188 7191 7193 7579 7580 6 7190 7188 7192 7193 7194 7198 6 7191 7188 7198 7199 7211 7186 6 7190 7191 7194 7195 7580 7581 6 7193 7191 7195 7196 7197 7198 6 7193 7194 7196 7581 7582 7583 6 7195 7194 7197 7583 3196 3195 6 7196 7194 7198 3195 7200 7203 6 7197 7194 7191 7192 7199 7200 6 7198 7192 7200 7201 7211 7208 6 7198 7199 7201 7202 7203 7197 6 7200 7199 7202 7206 7207 7208 6 7200 7201 7203 7204 7205 7206 6 7200 7202 7204 3194 3195 7197 6 7203 7202 7205 7220 7221 3194 6 7204 7202 7206 9745 7218 7220 6 7205 7202 7201 7207 9745 9746 6 7206 7201 7208 7209 9746 7213 6 7207 7201 7209 7210 7211 7199 6 7207 7208 7210 4373 4374 7213 6 7209 7208 7211 7185 7212 4373 6 7210 7208 7199 7192 7186 7185 6 7210 7185 3539 3540 4372 4373 6 7209 4374 4375 7214 9746 7207 6 7213 4375 4377 7215 7216 9746 6 7214 4377 7216 2863 1627 2862 6 7214 7215 2863 7217 9745 9746 6 7216 2863 2864 2865 7218 9745 6 7217 2865 7219 7220 7205 9745 5 7218 2865 7220 3214 2866 6 7218 7219 3214 7221 7205 7204 6 7220 3214 3215 7222 3194 7204 5 7221 3215 3216 3193 3194 6 7080 7081 7224 7225 7226 7083 6 7080 7223 7225 7691 7690 7692 6 7224 7223 7226 7692 7693 7674 6 7225 7223 7083 7227 7674 7694 6 7226 7083 7084 7228 7694 7695 6 7227 7084 7229 7230 7695 7696 6 7228 7084 7230 7231 7232 7085 6 7228 7229 7231 7696 7697 7701 6 7230 7229 7232 7701 7702 7703 6 7231 7229 7085 7086 7233 7703 6 7232 7086 7087 7090 7234 7703 6 7233 7090 7235 7718 7704 7703 6 7234 7090 7091 7236 7718 7717 6 7235 7091 7237 7717 7719 7720 6 7236 7091 7092 7093 7238 7720 6 7237 7093 7094 7239 7240 7720 6 7238 7094 7103 7240 7241 7104 6 7238 7239 7241 7720 7721 7722 6 7240 7239 7104 7242 7722 7725 6 7241 7104 7105 7243 7245 7725 6 7242 7105 7106 7108 7244 7245 6 7243 7108 7245 7246 7247 7110 6 7243 7244 7246 7728 7725 7242 6 7245 7244 7247 7964 7728 7965 6 7246 7244 7110 7248 7965 7966 6 7247 7110 7111 7249 7966 7967 6 7248 7111 7250 7511 7967 7968 6 7249 7111 7112 7251 7252 7511 6 7250 7112 7114 7252 7253 7254 6 7250 7251 7253 7511 7512 7516 6 7252 7251 7254 7256 9775 7516 6 7253 7251 7114 7115 7255 7256 6 7254 7115 7256 7257 7258 7116 6 7254 7255 7257 7523 7253 9775 6 7256 7255 7258 7260 7524 7523 6 7257 7255 7116 7117 7259 7260 6 7258 7117 7118 7260 7261 7128 6 7258 7259 7261 7529 7524 7257 6 7260 7259 7128 7129 7530 7529 6 6907 6908 7263 7440 7442 7443 6 7262 6908 6909 7264 7443 7444 6 7263 6909 6911 7265 7444 7445 6 7264 6911 6912 7266 7445 7446 6 7265 6912 6913 7267 7449 7446 6 7266 6913 6914 7268 7449 7450 6 7267 6914 7269 7450 7451 7452 6 7268 6914 6915 6917 7270 7452 6 7269 6917 6918 7271 7452 7453 6 7270 6918 6919 7272 7273 7453 6 7271 6919 7273 7274 6921 6920 6 7271 7272 7274 7453 7454 7455 6 7273 7272 6921 7275 7455 7456 6 7274 6921 6922 7276 7456 7457 6 7275 6922 6923 7277 7457 7458 6 7276 6923 6924 7278 7458 7459 6 7277 6924 6925 7279 7280 7459 6 7278 6925 7280 7281 6927 6926 6 7278 7279 7281 7459 7460 7464 6 7280 7279 6927 6928 7282 7464 6 7281 6928 7283 7464 7465 7466 6 7282 6928 6929 6930 7284 7466 6 7283 6930 7285 7466 7467 7468 6 7284 6930 6931 6932 7286 7468 6 7285 6932 7287 7468 7469 7288 6 7286 6932 6933 6934 6936 7288 6 7287 6936 6938 7289 7469 7286 6 7288 6938 7290 7469 7470 7471 6 7289 6938 6939 7291 7471 7472 6 7290 6939 6941 6943 7292 7472 6 7291 6943 7293 7472 7473 7474 6 7292 6943 6944 7294 7474 7299 6 7293 6944 7295 7297 7298 7299 6 7294 6944 6945 6946 7296 7297 5 7295 6946 6947 6948 7297 6 7296 6948 6949 7295 7294 7298 6 7294 7297 6949 6950 7299 7300 5 7294 7298 7300 7474 7293 7 7299 7298 6950 7301 7474 7305 7302 5 7300 6950 6951 7043 7302 6 7301 7043 7046 7303 7305 7300 6 7302 7046 7047 7056 7304 7305 6 7303 7056 7305 7306 7307 7057 6 7303 7304 7306 7474 7300 7302 6 7305 7304 7307 7474 7473 7475 6 7306 7304 7057 7059 7475 7476 5 4702 4703 7309 7855 7856 6 7308 4703 4704 7310 7856 7857 6 7309 4704 4705 7311 7857 7858 6 7310 4705 4706 7312 7858 7859 6 7311 4706 4707 5170 7313 7859 6 7312 5170 7314 7859 7860 7861 6 7313 5170 5171 7315 7861 7862 6 7314 5171 5172 7316 7862 7863 6 7315 5172 5173 7317 7863 7864 6 7316 5173 5174 7318 7864 7865 6 7317 5174 5175 7319 7865 7866 6 7318 5175 5176 7320 7866 7867 6 7319 5176 5177 5178 7321 7867 6 7320 5178 7322 7867 7868 7869 6 7321 5178 5179 7323 7869 7870 6 7322 5179 5180 5411 7324 7870 6 7323 5411 7325 7870 7871 7872 6 7324 5411 5412 7326 7872 7873 6 7325 5412 5413 5414 7327 7873 6 7326 5414 7328 7873 7874 7875 6 7327 5414 5415 5416 7329 7875 6 7328 5416 7330 7875 7876 7877 6 7329 5416 5417 5418 7331 7877 6 7330 5418 6791 7332 7877 7878 6 7331 6791 7333 7878 7879 7880 6 7332 6791 6792 6793 7334 7880 6 7333 6793 6794 7335 7880 7881 6 7334 6794 6795 6796 7336 7881 6 7335 6796 6797 7337 7881 7882 6 7336 6797 6798 7338 7882 7883 6 7337 6798 6799 7339 7883 7884 6 7338 6799 6800 7340 7884 7885 6 7339 6800 6801 7341 7885 7886 6 7340 6801 7342 7886 7887 7888 6 7341 6801 6802 6803 7343 7888 6 7342 6803 6804 7344 7888 7889 6 7343 6804 6805 7345 7889 7890 6 7344 6805 6806 7346 7890 7891 6 7345 6806 6807 7347 7891 7892 6 7346 6807 6808 7348 7892 7893 6 7347 6808 7349 7893 7894 7895 7 7348 6808 6809 6811 6812 7350 7895 6 7349 6812 6813 7351 7895 7896 6 7350 6813 6814 7352 7896 7897 5 7351 6814 6815 7353 7897 7 7352 6815 6816 7354 7897 7898 7899 5 7353 6816 6817 7355 7899 7 7354 6817 6818 7356 7899 7900 7901 6 7355 6818 7357 7901 7902 7903 7 7356 6818 6819 6820 6821 7358 7903 6 7357 6821 7359 7903 7904 7905 6 7358 6821 6822 7360 7361 7905 6 7359 6822 6823 7361 7362 6825 6 7359 7360 7362 7905 7906 7907 6 7361 7360 6825 6828 7363 7907 6 7362 6828 7364 7907 7908 7909 5 7363 6828 6829 7365 7909 7 7364 6829 7366 7369 7371 7909 7910 6 7365 6829 6830 6831 7367 7369 6 7366 6831 7368 7369 7370 7375 5 7367 6831 7375 6835 6834 6 7366 7367 7370 7365 7371 7372 6 7369 7367 7372 7373 7374 7375 6 7365 7369 7372 7910 7911 7912 6 7371 7369 7370 7373 7912 7913 6 7372 7370 7374 7913 7914 7915 6 7373 7370 7375 6836 7376 7915 6 7374 7370 7367 7368 6835 6836 6 7374 6836 7377 7915 7916 7917 6 7376 6836 6837 6838 7378 7917 5 7377 6838 7379 7601 7917 6 7378 6838 6839 6841 7380 7601 6 7379 6841 6842 7381 7601 7602 6 7380 6842 6843 7382 7605 7602 6 7381 6843 7383 7384 7605 7606 6 7382 6843 7384 6847 6845 6844 6 7382 7383 6847 7385 7606 7607 6 7384 6847 6848 7386 7607 7392 6 7385 6848 7387 7388 7391 7392 6 7386 6848 6849 6850 6851 7388 6 7387 6851 6854 7389 7391 7386 6 7388 6854 6855 6859 7390 7391 6 7389 6859 7391 7396 7393 7397 6 7389 7390 7388 7386 7392 7393 6 7386 7391 7393 7394 7607 7385 6 7392 7391 7394 7395 7396 7390 6 7392 7393 7395 7607 7608 7611 6 7394 7393 7396 7611 7612 7622 6 7395 7393 7390 7397 7622 7623 6 7396 7390 6859 6860 7398 7623 5 7397 6860 7399 7623 7624 6 7398 6860 6861 7400 7624 7625 7 7399 6861 6862 6865 7401 7625 7626 6 7400 6865 6867 7402 7403 7626 6 7401 6867 7403 7404 7405 6869 6 7401 7402 7404 7626 7627 7628 6 7403 7402 7405 7408 7628 7629 6 7404 7402 6869 7406 7407 7408 6 7405 6869 7407 7411 7412 6870 6 7405 7406 7408 7409 7410 7411 6 7405 7407 7404 7409 7632 7629 6 7408 7407 7410 7632 7633 7634 6 7409 7407 7411 7634 7635 7642 6 7410 7407 7406 7412 7642 7643 6 7411 7406 6870 7413 7414 7643 6 7412 6870 7414 7415 7416 6871 6 7412 7413 7415 7643 7644 7645 6 7414 7413 7416 7417 7645 7646 6 7415 7413 7417 7418 7419 6871 6 7415 7416 7418 7420 7421 7646 7 7417 7416 7419 6874 6876 6884 7420 5 7418 7416 6871 6872 6874 6 7418 6884 7417 7421 7422 7426 6 7417 7420 7422 7423 7646 7647 6 7421 7420 7423 7424 7425 7426 6 7421 7422 7424 7647 7648 7649 6 7423 7422 7425 7649 7650 7651 6 7424 7422 7426 7651 7652 7427 6 7425 7422 7420 6884 6885 7427 6 7426 6885 7428 7652 7425 7653 6 7427 6885 6886 7429 7653 7654 6 7428 6886 6887 7430 7431 7654 6 7429 6887 6888 7431 7432 7433 6 7429 7430 7432 6897 7434 7654 6 7431 7430 7433 6893 6894 6897 6 7432 7430 6888 6890 6891 6893 6 7431 6897 6898 7435 7655 7654 6 7434 6898 7436 7655 7656 7660 6 7435 6898 6899 7437 7660 7438 6 7436 6899 6900 6904 6905 7438 6 7437 6905 7439 7660 7436 7661 6 7438 6905 6906 7440 7441 7661 6 7439 6906 6907 7262 7441 7442 6 7439 7440 7442 7661 7662 7663 6 7441 7440 7262 7443 7663 7664 6 7442 7262 7263 7444 7664 7665 6 7443 7263 7264 7445 7665 7666 6 7444 7264 7265 7446 7447 7666 6 7445 7265 7447 7448 7449 7266 6 7445 7446 7448 7668 7666 7671 6 7447 7446 7449 7671 7676 7673 6 7448 7446 7266 7267 7450 7676 6 7449 7267 7268 7451 7676 7677 6 7450 7268 7452 7677 7678 7682 6 7451 7268 7269 7270 7453 7682 6 7452 7270 7271 7273 7454 7682 6 7453 7273 7455 7682 7681 7683 6 7454 7273 7274 7456 7686 7683 6 7455 7274 7275 7457 7686 7687 6 7456 7275 7276 7458 7687 7688 6 7457 7276 7277 7459 7688 7461 6 7458 7277 7278 7280 7460 7461 6 7459 7280 7461 7462 7463 7464 6 7459 7460 7462 7688 7458 7484 7 7461 7460 7463 7483 7068 7069 7484 6 7462 7460 7464 7483 7482 7465 6 7463 7460 7280 7281 7282 7465 6 7464 7282 7466 7482 7463 7494 6 7465 7282 7283 7284 7467 7494 6 7466 7284 7468 7494 7495 7496 6 7467 7284 7285 7286 7469 7496 6 7468 7286 7288 7289 7470 7496 6 7469 7289 7471 7496 7497 7498 6 7470 7289 7290 7472 7498 7475 6 7471 7290 7291 7292 7473 7475 5 7472 7292 7474 7306 7475 7 7473 7292 7293 7299 7300 7305 7306 7 7473 7306 7307 7476 7498 7471 7472 5 7475 7307 7059 7477 7498 6 7476 7059 7060 7478 7497 7498 7 7477 7060 7479 7480 7497 7495 7499 6 7478 7060 7061 7064 7065 7480 6 7478 7479 7065 7481 7482 7499 6 7480 7065 7482 7483 7068 7066 7 7480 7481 7483 7463 7465 7494 7499 5 7482 7481 7068 7462 7463 5 7462 7069 7485 7688 7461 6 7484 7069 7070 7486 7687 7688 6 7485 7070 7487 7686 7687 7685 7 7486 7070 7071 7072 7488 7489 7685 6 7487 7072 7489 7490 7491 7492 5 7487 7488 7490 7685 7684 6 7489 7488 7491 7684 7689 7690 6 7490 7488 7492 7493 7690 7691 6 7491 7488 7493 7074 7073 7072 6 7491 7492 7074 7075 7691 7079 6 7482 7465 7466 7467 7495 7499 6 7494 7467 7496 7497 7478 7499 6 7495 7467 7468 7469 7470 7497 6 7496 7470 7498 7477 7478 7495 6 7497 7470 7471 7477 7476 7475 5 7495 7478 7480 7482 7494 6 427 5612 5613 7501 7502 9768 6 7500 5613 7502 7503 7504 7505 6 7500 7501 7503 9768 9769 9770 6 7502 7501 7504 6474 9770 9780 5 7503 7501 6474 6472 7505 7 6472 7504 7501 5613 5614 7506 6470 5 7505 5614 7507 6469 6470 6 7506 5614 5615 7508 7509 6469 6 7507 5615 7509 7510 9734 4518 5 7507 7508 7510 6469 6468 6 7509 7508 6468 9732 9733 9734 6 7249 7250 7252 7512 7513 7968 6 7511 7252 7513 7514 7515 7516 6 7511 7512 7514 7968 7969 7970 6 7513 7512 7515 7970 7971 7972 6 7514 7512 7516 7517 7518 7972 6 7515 7512 7252 7517 9775 7253 6 7515 7516 7518 7519 7520 9775 6 7515 7517 7519 7972 7973 7977 6 7518 7517 7520 7521 7977 7978 6 7519 7517 7521 7522 7523 9775 6 7519 7520 7522 7989 7978 7526 6 7521 7520 7523 7524 7525 7526 6 7522 7520 7524 7256 7257 9775 6 7522 7523 7525 7260 7529 7257 6 7522 7524 7526 7527 7528 7529 6 7522 7525 7527 7989 7521 7990 6 7526 7525 7528 7990 7546 7545 6 7527 7525 7529 7530 7531 7545 6 7528 7525 7530 7261 7260 7524 6 7528 7529 7261 7531 7532 7129 7 7528 7530 7532 7132 7533 7543 7545 5 7531 7530 7129 7130 7132 6 7531 7132 7133 7534 7544 7543 6 7533 7133 7535 7151 7537 7544 6 7534 7133 7134 7536 7150 7151 6 7535 7134 7136 7137 7139 7150 6 7534 7151 7152 7155 7538 7544 6 7537 7155 7157 7539 7540 7544 6 7538 7157 7540 7541 7553 7554 6 7538 7539 7541 7542 7543 7544 6 7540 7539 7542 7547 7553 7550 6 7540 7541 7543 7545 7546 7547 6 7540 7542 7544 7533 7531 7545 6 7540 7543 7533 7534 7537 7538 6 7531 7543 7542 7546 7527 7528 6 7545 7542 7547 7548 7990 7527 6 7546 7542 7541 7548 7549 7550 6 7546 7547 7549 7990 7989 7991 6 7548 7547 7550 7551 7991 7992 6 7549 7547 7551 7552 7553 7541 6 7549 7550 7552 7992 7994 7995 7 7551 7550 7553 7557 7556 7558 7995 6 7552 7550 7541 7539 7554 7557 6 7553 7539 7157 7158 7555 7557 6 7554 7158 7160 7167 7556 7557 7 7555 7167 7557 7552 7558 7559 7560 5 7555 7556 7554 7553 7552 5 7552 7556 7559 7995 7996 7 7558 7556 7560 7996 7999 7566 7561 5 7559 7556 7167 7168 7561 6 7560 7168 7562 7565 7566 7559 6 7561 7168 7169 7170 7563 7565 6 7562 7170 7564 7176 7565 7568 5 7563 7170 7171 7173 7176 6 7562 7563 7561 7566 7567 7568 6 7561 7565 7567 7999 7559 8000 6 7566 7565 7568 7569 7570 8000 5 7567 7565 7563 7176 7569 6 7568 7176 7567 7570 7180 7177 6 7567 7569 7180 7571 8000 8001 6 7570 7180 7181 7572 8001 8002 6 7571 7181 7573 7574 8002 8003 6 7572 7181 7574 7575 7183 7182 6 7572 7573 7575 7576 7577 8003 6 7574 7573 7183 7187 7189 7576 6 7575 7189 7574 7577 7578 7579 6 7574 7576 7578 8003 8004 8005 6 7577 7576 7579 8005 8006 8007 6 7578 7576 7189 7190 7580 8007 6 7579 7190 7193 7581 8007 8008 6 7580 7193 7195 7582 8008 8009 6 7581 7195 7583 7585 8012 8009 6 7582 7195 7196 3196 7584 7585 6 7583 3196 3186 7585 7586 3187 6 7583 7584 7586 7587 7582 8012 6 7585 7584 7587 7588 3958 3187 6 7585 7586 7588 7729 8013 8012 6 7587 7586 3958 3960 7589 7729 6 7588 3960 7590 7729 7730 7731 6 7589 3960 3961 7591 7731 7732 6 7590 3961 7592 7738 7732 7739 6 7591 3961 2890 2891 7593 7739 6 7592 2891 7594 7595 7739 7740 6 7593 2891 7595 7596 7597 2892 6 7593 7594 7596 7740 7741 7745 6 7595 7594 7597 7598 7745 7746 6 7596 7594 7598 7599 7600 2892 6 7596 7597 7599 4089 7746 7751 5 7598 7597 7600 4089 4086 6 7599 7597 4086 2880 2879 2892 7 7378 7379 7380 7602 7603 7917 7918 6 7601 7380 7603 7604 7605 7381 6 7601 7602 7604 7926 7920 7918 5 7603 7602 7605 7926 7927 7 7604 7602 7381 7382 7606 7609 7927 6 7605 7382 7384 7607 7608 7609 6 7606 7384 7385 7392 7394 7608 6 7607 7394 7606 7609 7610 7611 6 7606 7608 7610 7929 7927 7605 6 7609 7608 7611 7613 7616 7929 6 7610 7608 7394 7395 7612 7613 6 7611 7395 7613 7614 7621 7622 6 7611 7612 7614 7615 7616 7610 6 7613 7612 7615 7619 7620 7621 6 7613 7614 7616 7617 7618 7619 6 7613 7615 7617 8157 7929 7610 6 7616 7615 7618 8155 8157 8156 6 7617 7615 7619 8156 8158 8159 6 7618 7615 7614 7620 8159 8160 6 7619 7614 7621 8160 8161 8162 6 7620 7614 7612 7622 8162 8163 6 7621 7612 7395 7396 7623 8163 6 7622 7396 7397 7398 7624 8163 6 7623 7398 7399 7625 8163 8164 6 7624 7399 7400 7626 8164 7627 5 7625 7400 7401 7403 7627 6 7626 7403 7628 8164 7625 8165 6 7627 7403 7404 7629 7630 8165 6 7628 7404 7630 7631 7632 7408 6 7628 7629 7631 8165 8166 8167 6 7630 7629 7632 8170 8167 8171 6 7631 7629 7408 7409 7633 8171 6 7632 7409 7634 8173 8171 8174 6 7633 7409 7410 7635 7636 8174 6 7634 7410 7636 7637 7641 7642 6 7634 7635 7637 7638 8174 8175 6 7636 7635 7638 7639 7640 7641 6 7636 7637 7639 8175 8176 8177 6 7638 7637 7640 8177 8178 8179 6 7639 7637 7641 8179 8180 8181 6 7640 7637 7635 7642 8181 8182 6 7641 7635 7410 7411 7643 8182 6 7642 7411 7412 7414 7644 8182 6 7643 7414 7645 8183 8182 8184 6 7644 7414 7415 7646 8184 8185 6 7645 7415 7417 7421 7647 8185 6 7646 7421 7423 7648 8185 8186 6 7647 7423 7649 8186 8187 8188 6 7648 7423 7424 7650 8188 8189 6 7649 7424 7651 8189 8190 8191 6 7650 7424 7425 7652 8191 8192 6 7651 7425 7427 7653 8192 7657 6 7652 7427 7428 7654 7655 7657 6 7653 7428 7429 7655 7434 7431 6 7653 7654 7434 7435 7656 7657 6 7655 7435 7657 7658 7659 7660 6 7655 7656 7658 8192 7652 7653 6 7657 7656 7659 8192 8193 8194 6 7658 7656 7660 8194 7662 7661 6 7659 7656 7435 7436 7438 7661 6 7660 7438 7439 7441 7662 7659 6 7661 7441 7663 8194 7659 8195 6 7662 7441 7442 7664 8208 8195 6 7663 7442 7443 7665 8208 8207 6 7664 7443 7444 7666 7667 8207 6 7665 7444 7667 7668 7447 7445 6 7665 7666 7668 7669 8206 8207 6 7667 7666 7447 7669 7670 7671 6 7667 7668 7670 7698 8206 9790 6 7669 7668 7671 7672 7695 9790 6 7670 7668 7447 7448 7672 7673 6 7670 7671 7673 7674 7695 7694 6 7672 7671 7674 7675 7676 7448 7 7672 7673 7675 7693 7225 7226 7694 6 7674 7673 7676 7677 7679 7693 6 7675 7673 7448 7449 7450 7677 6 7676 7450 7451 7678 7679 7675 6 7677 7451 7679 7680 7681 7682 7 7677 7678 7680 7675 7693 7692 7689 5 7679 7678 7681 7689 7684 6 7680 7678 7682 7454 7683 7684 6 7681 7678 7451 7452 7453 7454 6 7681 7454 7684 7685 7686 7455 7 7681 7683 7685 7489 7490 7689 7680 6 7684 7683 7686 7486 7487 7489 6 7685 7683 7455 7456 7687 7486 6 7686 7456 7457 7486 7485 7688 6 7485 7687 7457 7458 7461 7484 6 7684 7490 7690 7692 7679 7680 6 7689 7490 7491 7691 7224 7692 6 7690 7491 7493 7079 7080 7224 6 7690 7224 7225 7693 7679 7689 5 7692 7225 7674 7675 7679 5 7674 7226 7227 7695 7672 7 7694 7227 7228 7696 7670 7672 9790 6 7695 7228 7230 7697 7698 9790 6 7696 7230 7698 7699 7700 7701 6 7696 7697 7699 8206 7669 9790 6 7698 7697 7700 8205 8203 8206 6 7699 7697 7701 8318 8205 7707 6 7700 7697 7230 7231 7702 7707 6 7701 7231 7703 7704 7705 7707 6 7702 7231 7704 7234 7233 7232 6 7702 7703 7705 7706 7718 7234 6 7702 7704 7706 7707 7708 7709 6 7705 7704 7709 7710 7711 7718 6 7702 7705 7708 8318 7700 7701 6 7707 7705 7709 8318 8481 8317 6 7708 7705 7706 7710 8481 8482 6 7709 7706 7711 7712 7713 8482 6 7710 7706 7712 7716 7717 7718 6 7710 7711 7713 7714 7715 7716 6 7710 7712 7714 8482 8483 8484 6 7713 7712 7715 8484 9765 8486 6 7714 7712 7716 9765 7723 9767 6 7715 7712 7711 7717 9767 7719 6 7716 7711 7718 7235 7236 7719 6 7717 7711 7706 7704 7234 7235 6 7717 7236 7720 9767 7716 7721 6 7719 7236 7237 7238 7240 7721 6 7720 7240 7722 7723 9767 7719 6 7721 7240 7241 7723 7724 7725 7 7721 7722 7724 7726 9765 7715 9767 6 7723 7722 7725 7726 7727 7728 6 7724 7722 7728 7245 7242 7241 6 7723 7724 7727 7962 9765 9764 6 7726 7724 7728 7962 7963 7964 6 7727 7724 7725 7245 7964 7246 6 7587 7588 7589 7730 8013 8014 6 7729 7589 7731 8014 8015 7734 6 7730 7589 7590 7732 7733 7734 6 7731 7590 7733 7737 7738 7591 6 7731 7732 7734 7735 7736 7737 6 7731 7733 7735 8015 7730 8016 6 7734 7733 7736 8016 8017 8018 6 7735 7733 7737 8018 8019 8020 6 7736 7733 7732 7738 8020 8021 6 7737 7732 7591 7739 9766 8021 6 7738 7591 7592 7593 7740 9766 6 7739 7593 7595 7741 7742 9766 6 7740 7595 7742 7743 7744 7745 6 7740 7741 7743 8025 8023 9766 6 7742 7741 7744 8025 8026 8027 6 7743 7741 7745 7747 7748 8027 6 7744 7741 7595 7596 7746 7747 6 7745 7596 7598 7747 7750 7751 6 7745 7746 7744 7748 7749 7750 6 7744 7747 7749 8027 8031 8032 6 7748 7747 7750 8032 8036 7759 6 7749 7747 7746 7751 7752 7759 7 7750 7746 7598 4089 4090 7752 7753 7 7750 7751 7753 4379 7754 7758 7759 4 7752 7751 4090 4379 5 7752 4379 4380 7755 7758 6 7754 4380 4382 7756 7757 7758 6 7755 4382 7757 7762 7763 7764 6 7755 7756 7758 7760 7761 7762 6 7755 7757 7754 7752 7759 7760 6 7752 7758 7760 8036 7749 7750 5 7759 7758 7757 7761 8036 7 7760 7757 7762 8036 8640 8635 8035 7 7761 7757 7756 7763 8852 8639 8640 6 7762 7756 7764 7765 8852 8853 6 7763 7756 4382 4383 4389 7765 6 7763 7764 4389 7766 8319 8853 6 7765 4389 4390 7767 8319 8320 6 7766 4390 3142 7768 7769 8320 6 7767 3142 7769 7770 7774 3143 6 7767 7768 7770 7771 8322 8320 6 7769 7768 7771 7772 7773 7774 6 7769 7770 7772 8322 8323 8324 6 7771 7770 7773 8324 8325 7777 6 7772 7770 7774 7775 7776 7777 6 7773 7770 7768 3143 3144 7775 6 7774 3144 7773 7776 3145 9791 6 7773 7775 7777 7778 3414 9791 6 7773 7776 7778 8325 7772 8326 6 7777 7776 3414 3415 7779 8326 6 7778 3415 5382 5384 7780 8326 6 7779 5384 5386 7781 8326 8327 6 7780 5386 5388 7782 8329 8327 6 7781 5388 5616 7783 8329 8330 6 7782 5616 7784 8330 8331 8332 6 7783 5616 5617 7785 8037 8332 6 7784 5617 7786 7787 8037 8038 6 7785 5617 5618 7787 7788 7789 6 7785 7786 7788 8038 8039 8040 6 7787 7786 7789 8045 8040 7794 6 7788 7786 5618 5619 7790 7794 6 7789 5619 7791 7792 7793 7794 6 7790 5619 7792 3779 3778 5620 6 7790 7791 7793 7797 7798 3779 6 7790 7792 7794 7795 7796 7797 6 7790 7793 7795 8045 7788 7789 6 7794 7793 7796 8045 8046 8047 6 7795 7793 7797 8048 8047 8049 6 7796 7793 7792 7798 8049 7799 6 7797 7792 3779 3780 3783 7799 6 7798 3783 3784 7800 8049 7797 6 7799 3784 3785 3788 7801 8049 6 7800 3788 3790 7802 8048 8049 6 7801 3790 3791 3793 7803 8048 6 7802 3793 7804 7806 8047 8048 6 7803 3793 3794 7805 7806 7807 6 7804 3794 7807 7808 7809 3795 6 7803 7804 7807 8046 8047 8343 6 7806 7804 7805 7808 8344 8343 6 7807 7805 7809 8344 8345 7930 6 7808 7805 3795 3796 7810 7930 6 7809 3796 3952 7811 7930 7931 6 7810 3952 7812 7931 7932 7936 6 7811 3952 3953 7813 7936 7937 6 7812 3953 3954 7814 7937 7938 6 7813 3954 7815 7938 7939 7816 6 7814 3954 3955 3956 4238 7816 6 7815 4238 4503 7817 7939 7814 6 7816 4503 4504 7818 7939 7940 6 7817 4504 7819 7940 7941 7942 6 7818 4504 4505 7820 7942 7943 6 7819 4505 4506 4507 7821 7943 6 7820 4507 7822 7943 7944 7945 6 7821 4507 4508 7823 7945 7946 6 7822 4508 4509 7824 7946 7947 6 7823 4509 7825 7826 7947 7948 6 7824 4509 4510 7826 7827 7828 6 7824 7825 7827 7948 7949 7950 6 7826 7825 7828 7950 7951 7952 6 7827 7825 4510 4419 7829 7952 6 7828 4419 4247 7830 7952 7832 6 7829 4247 4248 4739 7831 7832 6 7830 4739 5003 7832 7833 7834 6 7830 7831 7833 7952 7829 7953 6 7832 7831 7834 7953 7954 7955 6 7833 7831 5003 5004 7835 7955 6 7834 5004 5005 7836 7955 7956 6 7835 5005 7837 7956 7957 7958 6 7836 5005 4750 4751 7838 7958 6 7837 4751 4757 7839 7958 7959 6 7838 4757 7840 7959 7960 7846 6 7839 4757 4758 7841 7846 7961 6 7840 4758 4661 4662 7842 7961 6 7841 4662 4663 4689 7843 7961 6 7842 4689 4690 7844 7961 7845 6 7843 4690 4691 5158 5159 7845 5 7844 5159 7846 7961 7843 7 7845 5159 7847 7960 7839 7840 7961 6 7846 5159 5160 7848 8082 7960 6 7847 5160 5161 7849 8082 8083 6 7848 5161 5162 7850 8083 8084 6 7849 5162 7851 8084 8085 8086 6 7850 5162 5163 5164 7852 8086 6 7851 5164 7853 8086 8087 8088 6 7852 5164 5165 7854 8088 8089 7 7853 5165 4700 4701 4702 7855 8089 5 7854 4702 7308 7856 8089 7 7855 7308 7309 7857 8089 8090 8091 7 7856 7309 7310 7858 8091 8092 8093 6 7857 7310 7311 7859 8093 8094 6 7858 7311 7312 7313 7860 8094 6 7859 7313 7861 8094 8095 8096 6 7860 7313 7314 7862 8096 8097 6 7861 7314 7315 7863 8097 8098 6 7862 7315 7316 7864 8098 8099 6 7863 7316 7317 7865 8099 8100 6 7864 7317 7318 7866 8100 8101 6 7865 7318 7319 7867 8101 8102 6 7866 7319 7320 7321 7868 8102 6 7867 7321 7869 8102 8103 8104 6 7868 7321 7322 7870 8104 8105 6 7869 7322 7323 7324 7871 8105 6 7870 7324 7872 8105 8106 8107 6 7871 7324 7325 7873 8107 8108 6 7872 7325 7326 7327 7874 8108 6 7873 7327 7875 8108 8109 8110 6 7874 7327 7328 7329 7876 8110 6 7875 7329 7877 8110 8111 8112 6 7876 7329 7330 7331 7878 8112 6 7877 7331 7332 7879 8112 8113 6 7878 7332 7880 8113 8114 8115 6 7879 7332 7333 7334 7881 8115 6 7880 7334 7335 7336 7882 8115 6 7881 7336 7337 7883 8115 8116 7 7882 7337 7338 7884 8116 8117 8118 6 7883 7338 7339 7885 8118 8119 6 7884 7339 7340 7886 8119 8120 6 7885 7340 7341 7887 8120 8121 6 7886 7341 7888 8121 8122 8123 6 7887 7341 7342 7343 7889 8123 6 7888 7343 7344 7890 8123 8124 6 7889 7344 7345 7891 8124 8125 6 7890 7345 7346 7892 8125 8126 6 7891 7346 7347 7893 8126 8127 6 7892 7347 7348 7894 8127 8128 6 7893 7348 7895 8128 8129 8130 6 7894 7348 7349 7350 7896 8130 6 7895 7350 7351 7897 8130 8131 7 7896 7351 7352 7353 7898 8131 8132 5 7897 7353 7899 8132 8133 7 7898 7353 7354 7355 7900 8133 8134 6 7899 7355 7901 8134 8135 8136 5 7900 7355 7356 7902 8136 7 7901 7356 7903 8136 8137 8138 7904 5 7902 7356 7357 7358 7904 6 7903 7358 7905 8138 7902 8139 6 7904 7358 7359 7361 7906 8139 6 7905 7361 7907 8139 8140 8141 6 7906 7361 7362 7363 7908 8141 6 7907 7363 7909 8141 8142 8143 6 7908 7363 7364 7365 7910 8143 6 7909 7365 7371 7911 8143 8144 6 7910 7371 7912 8144 8145 8146 5 7911 7371 7372 7913 8146 7 7912 7372 7373 7914 8146 8147 8148 6 7913 7373 7915 8148 8149 8150 6 7914 7373 7374 7376 7916 8150 6 7915 7376 7917 7918 7919 8150 6 7916 7376 7377 7378 7601 7918 6 7917 7601 7916 7919 7920 7603 6 7916 7918 7920 7921 7922 8150 6 7919 7918 7921 7925 7926 7603 6 7919 7920 7922 7923 7924 7925 6 7919 7921 7923 8150 8151 8149 6 7922 7921 7924 8151 8152 8153 6 7923 7921 7925 8153 8154 8155 6 7924 7921 7920 7926 8155 7928 6 7925 7920 7603 7604 7927 7928 6 7926 7604 7928 7929 7609 7605 6 7926 7927 7929 8155 7925 8157 6 7928 7927 7609 8157 7616 7610 6 7809 7810 7931 8050 8345 7808 6 7930 7810 7811 7932 7933 8050 6 7931 7811 7933 7934 7935 7936 6 7931 7932 7934 8050 8051 8052 6 7933 7932 7935 8052 8053 8057 6 7934 7932 7936 8059 8057 8060 6 7935 7932 7811 7812 7937 8060 6 7936 7812 7813 7938 8060 8061 6 7937 7813 7814 7939 8061 8062 6 7938 7814 7816 7817 7940 8062 6 7939 7817 7818 7941 8062 8063 6 7940 7818 7942 8063 8064 8065 6 7941 7818 7819 7943 8065 8066 6 7942 7819 7820 7821 7944 8066 6 7943 7821 7945 8066 8067 8068 6 7944 7821 7822 7946 8068 8069 6 7945 7822 7823 7947 8069 8070 6 7946 7823 7824 7948 8070 8071 6 7947 7824 7826 7949 8071 8072 6 7948 7826 7950 8072 8073 8074 6 7949 7826 7827 7951 8074 8075 6 7950 7827 7952 8075 8076 7953 6 7951 7827 7828 7829 7832 7953 6 7952 7832 7833 7954 8076 7951 6 7953 7833 7955 8076 8077 8078 6 7954 7833 7834 7835 7956 8078 6 7955 7835 7836 7957 8078 8079 6 7956 7836 7958 8079 8080 8081 6 7957 7836 7837 7838 7959 8081 6 7958 7838 7839 7960 8081 8082 5 7959 7839 7846 8082 7847 6 7846 7840 7841 7842 7843 7845 6 7726 7727 7963 8466 8468 9764 6 7962 7727 7964 8466 8487 8488 6 7963 7727 7728 7246 7965 8488 6 7964 7246 7247 7966 8488 8489 6 7965 7247 7248 7967 8489 8490 6 7966 7248 7249 7968 8490 8491 6 7967 7249 7511 7513 7969 8491 6 7968 7513 7970 8493 8491 8494 6 7969 7513 7514 7971 8494 8495 6 7970 7514 7972 8495 8496 7974 6 7971 7514 7515 7518 7973 7974 6 7972 7518 7974 7975 7976 7977 6 7972 7973 7975 8496 7971 8497 6 7974 7973 7976 8500 8497 7981 6 7975 7973 7977 7979 7980 7981 6 7976 7973 7518 7519 7978 7979 6 7977 7519 7979 7988 7989 7521 6 7977 7978 7976 7980 7987 7988 6 7976 7979 7981 7982 7986 7987 6 7976 7980 7982 7983 8500 7975 6 7981 7980 7983 7984 7985 7986 6 7981 7982 7984 8500 8501 8502 6 7983 7982 7985 8502 8503 8504 6 7984 7982 7986 8504 8505 8506 6 7985 7982 7980 7987 8506 7993 7 7986 7980 7979 7988 7991 7992 7993 5 7987 7979 7978 7989 7991 7 7988 7978 7521 7526 7990 7548 7991 5 7989 7526 7527 7546 7548 6 7989 7548 7549 7992 7987 7988 6 7991 7549 7551 7987 7993 7994 6 7987 7992 7994 8506 7986 8507 6 7993 7992 7551 8507 7997 7995 6 7551 7552 7558 7996 7997 7994 6 7995 7558 7559 7997 7998 7999 6 7995 7996 7998 8507 7994 8508 6 7997 7996 7999 8508 8509 8510 6 7998 7996 7559 7566 8000 8510 6 7999 7566 7567 7570 8001 8510 7 8000 7570 7571 8002 8510 8522 8511 6 8001 7571 7572 8003 8522 8523 7 8002 7572 7574 7577 8004 8520 8523 7 8003 7577 8005 8519 8517 8520 8541 5 8004 7577 7578 8006 8541 6 8005 7578 8007 8610 8540 8541 6 8006 7578 7579 7580 8008 8610 6 8007 7580 7581 8009 8010 8610 6 8008 7581 8010 8011 8012 7582 8 8008 8009 8011 8609 8537 8538 8540 8610 5 8010 8009 8012 8013 8609 6 8011 8009 8013 7587 7582 7585 7 8011 8012 7587 7729 8014 8608 8609 6 8013 7729 7730 8015 8607 8608 6 8014 7730 7734 8016 8611 8607 6 8015 7734 7735 8017 8611 8612 6 8016 7735 8018 8612 8613 8614 6 8017 7735 7736 8019 8614 8615 6 8018 7736 8020 8615 8618 8619 6 8019 7736 7737 8021 8022 8619 6 8020 7737 8022 8023 9766 7738 6 8020 8021 8023 8024 8619 8620 6 8022 8021 8024 8025 7742 9766 6 8022 8023 8025 8620 8621 8028 6 8024 8023 7742 7743 8026 8028 6 8025 7743 8027 8028 8029 8030 6 8026 7743 7744 7748 8030 8031 6 8025 8026 8029 8621 8024 8622 6 8028 8026 8030 8628 8622 8629 6 8029 8026 8027 8031 8033 8629 6 8030 8027 7748 8032 8033 8034 6 8031 7748 7749 8034 8035 8036 6 8030 8031 8034 8629 8630 8631 6 8033 8031 8032 8035 8631 8632 6 8034 8032 8036 7761 8635 8632 6 8035 8032 7749 7759 7760 7761 6 7784 7785 8038 8332 8333 8334 6 8037 7785 7787 8039 8041 8334 6 8038 7787 8040 8041 8042 8043 6 8039 7787 8043 8044 8045 7788 6 8038 8039 8042 8334 8335 8336 6 8041 8039 8043 8336 8337 8341 6 8042 8039 8040 8044 8341 8342 6 8043 8040 8045 8342 8343 8046 6 8044 8040 7788 7794 7795 8046 6 8045 7795 8047 7806 8343 8044 6 8046 7795 7806 7803 8048 7796 6 7803 8047 7796 7802 7801 8049 6 7801 8048 7796 7797 7799 7800 6 7930 7931 7933 8051 8345 8346 6 8050 7933 8052 8346 8347 8348 6 8051 7933 7934 8053 8054 8348 6 8052 7934 8054 8055 8056 8057 6 8052 8053 8055 8348 8349 8350 6 8054 8053 8056 8350 8351 8352 6 8055 8053 8057 8058 8352 8353 6 8056 8053 8058 8059 7935 7934 6 8056 8057 8059 8353 8354 8355 6 8058 8057 7935 8060 8355 8356 6 8059 7935 7936 7937 8061 8356 6 8060 7937 7938 8062 8356 8358 6 8061 7938 7939 7940 8063 8358 6 8062 7940 7941 8064 8359 8358 6 8063 7941 8065 8359 8360 8361 6 8064 7941 7942 8066 8361 8362 6 8065 7942 7943 7944 8067 8362 6 8066 7944 8068 8362 8363 8364 6 8067 7944 7945 8069 8364 8365 6 8068 7945 7946 8070 8365 8366 6 8069 7946 7947 8071 8366 8367 6 8070 7947 7948 8072 8367 8368 6 8071 7948 7949 8073 8368 8369 6 8072 7949 8074 8369 8370 8371 6 8073 7949 7950 8075 8371 8372 6 8074 7950 7951 8076 8372 8373 6 8075 7951 7953 7954 8077 8373 6 8076 7954 8078 8375 8373 8376 6 8077 7954 7955 7956 8079 8376 6 8078 7956 7957 8080 8376 8377 6 8079 7957 8081 8209 8377 8378 6 8080 7957 7958 7959 8082 8209 7 8081 7959 7960 7847 7848 8083 8209 6 8082 7848 7849 8084 8209 8210 6 8083 7849 7850 8085 8210 8211 6 8084 7850 8086 8211 8212 8213 6 8085 7850 7851 7852 8087 8213 6 8086 7852 8088 8213 8214 8215 6 8087 7852 7853 8089 8215 8090 6 8088 7853 7854 7855 7856 8090 5 8089 7856 8091 8215 8088 7 8090 7856 7857 8092 8215 8216 8217 5 8091 7857 8093 8217 8218 6 8092 7857 7858 8094 8218 8219 6 8093 7858 7859 7860 8095 8219 6 8094 7860 8096 8219 8220 8221 6 8095 7860 7861 8097 8221 8222 6 8096 7861 7862 8098 8222 8223 6 8097 7862 7863 8099 8223 8224 6 8098 7863 7864 8100 8224 8225 6 8099 7864 7865 8101 8225 8226 6 8100 7865 7866 8102 8226 8227 6 8101 7866 7867 7868 8103 8227 6 8102 7868 8104 8227 8228 8229 6 8103 7868 7869 8105 8229 8230 6 8104 7869 7870 7871 8106 8230 6 8105 7871 8107 8230 8231 8232 6 8106 7871 7872 8108 8232 8233 6 8107 7872 7873 7874 8109 8233 6 8108 7874 8110 8233 8234 8235 6 8109 7874 7875 7876 8111 8235 6 8110 7876 8112 8235 8236 8237 6 8111 7876 7877 7878 8113 8237 6 8112 7878 7879 8114 8237 8238 6 8113 7879 8115 8238 8239 8116 6 8114 7879 7880 7881 7882 8116 6 8115 7882 7883 8117 8239 8114 6 8116 7883 8118 8239 8240 8241 5 8117 7883 7884 8119 8241 6 8118 7884 7885 8120 8241 8242 6 8119 7885 7886 8121 8242 8243 6 8120 7886 7887 8122 8243 8244 6 8121 7887 8123 8244 8245 8246 6 8122 7887 7888 7889 8124 8246 6 8123 7889 7890 8125 8246 8247 6 8124 7890 7891 8126 8247 8248 6 8125 7891 7892 8127 8248 8249 6 8126 7892 7893 8128 8249 8250 6 8127 7893 7894 8129 8250 8251 6 8128 7894 8130 8251 8252 8253 6 8129 7894 7895 7896 8131 8253 6 8130 7896 7897 8132 8253 8254 5 8131 7897 7898 8133 8254 7 8132 7898 7899 8134 8254 8255 8256 5 8133 7899 7900 8135 8256 7 8134 7900 8136 8256 8257 8258 8259 6 8135 7900 7901 7902 8137 8259 6 8136 7902 8138 8259 8260 8261 6 8137 7902 7904 8139 8261 8262 6 8138 7904 7905 7906 8140 8262 6 8139 7906 8141 8262 8263 8264 6 8140 7906 7907 7908 8142 8264 6 8141 7908 8143 8264 8265 8266 6 8142 7908 7909 7910 8144 8266 6 8143 7910 7911 8145 8266 8267 6 8144 7911 8146 8267 8268 8269 6 8145 7911 7912 7913 8147 8269 6 8146 7913 8148 8269 8270 8271 6 8147 7913 7914 8149 8151 8271 5 8148 7914 8150 8151 7922 6 8149 7914 7915 7916 7919 7922 7 8148 8149 7922 7923 8152 8271 8272 5 8151 7923 8153 8272 8273 7 8152 7923 7924 8154 8273 8274 8275 6 8153 7924 8155 8156 8275 8276 7 8154 7924 8156 7925 7928 8157 7617 6 8154 8155 7617 7618 8158 8276 5 8155 7928 7929 7616 7617 6 8156 7618 8159 8276 8277 8278 6 8158 7618 7619 8160 8278 8279 7 8159 7619 7620 8161 8279 8280 8281 5 8160 7620 8162 8281 8282 7 8161 7620 7621 8163 8282 8283 8164 6 8162 7621 7622 7623 7624 8164 7 8163 7624 7625 7627 8165 8283 8162 6 8164 7627 7628 7630 8166 8283 6 8165 7630 8167 8168 8283 8282 6 8166 7630 8168 8169 8170 7631 6 8166 8167 8169 8282 8284 8285 6 8168 8167 8170 8285 8286 8287 6 8169 8167 7631 8171 8172 8287 6 8170 7631 8172 8173 7633 7632 6 8170 8171 8173 8287 8288 8289 6 8172 8171 7633 8174 8289 8290 6 8173 7633 7634 7636 8175 8290 6 8174 7636 7638 8176 8290 8291 6 8175 7638 8177 8291 8292 8293 6 8176 7638 7639 8178 8293 8294 6 8177 7639 8179 8294 8295 8296 6 8178 7639 7640 8180 8296 8297 6 8179 7640 8181 8307 8297 8308 6 8180 7640 7641 8182 8183 8308 6 8181 7641 8183 7644 7643 7642 6 8181 8182 7644 8184 8308 8309 6 8183 7644 7645 8185 8309 8310 7 8184 7645 7646 7647 8186 8310 8311 6 8185 7647 7648 8187 8311 8312 6 8186 7648 8188 8312 8313 8314 6 8187 7648 7649 8189 8314 8315 6 8188 7649 7650 8190 8315 8200 6 8189 7650 8191 8197 8199 8200 6 8190 7650 7651 8192 8197 8193 6 8191 7651 7652 7657 7658 8193 6 8192 7658 8194 8196 8197 8191 6 8193 7658 7659 7662 8195 8196 6 8194 7662 8196 8208 8204 7663 6 8194 8195 8193 8197 8198 8204 6 8193 8196 8198 8199 8190 8191 6 8197 8196 8199 8202 8203 8204 6 8197 8198 8190 8200 8201 8202 6 8190 8199 8201 8315 8189 8316 6 8200 8199 8202 8316 8317 8318 6 8201 8199 8198 8203 8205 8318 6 8202 8198 8204 8205 7699 8206 7 8203 8198 8206 8207 8208 8195 8196 5 8202 8203 7699 8318 7700 7 7699 8203 8204 7698 7669 7667 8207 6 7667 8206 8204 8208 7664 7665 5 8207 8204 8195 7663 7664 6 8080 8081 8082 8083 8210 8378 5 8209 8083 8084 8211 8378 6 8210 8084 8085 8212 8378 8379 6 8211 8085 8213 8379 8380 8381 6 8212 8085 8086 8087 8214 8381 6 8213 8087 8215 8381 8382 8216 6 8214 8087 8088 8090 8091 8216 6 8215 8091 8217 8382 8214 8383 6 8216 8091 8092 8218 8383 8384 6 8217 8092 8093 8219 8384 8385 6 8218 8093 8094 8095 8220 8385 5 8219 8095 8221 8385 8386 6 8220 8095 8096 8222 8386 8387 6 8221 8096 8097 8223 8387 8388 6 8222 8097 8098 8224 8388 8389 6 8223 8098 8099 8225 8389 8390 6 8224 8099 8100 8226 8390 8391 6 8225 8100 8101 8227 8391 8392 6 8226 8101 8102 8103 8228 8392 6 8227 8103 8229 8392 8393 8394 6 8228 8103 8104 8230 8394 8395 6 8229 8104 8105 8106 8231 8395 6 8230 8106 8232 8395 8396 8397 6 8231 8106 8107 8233 8397 8398 6 8232 8107 8108 8109 8234 8398 6 8233 8109 8235 8398 8399 8400 6 8234 8109 8110 8111 8236 8400 6 8235 8111 8237 8400 8401 8402 6 8236 8111 8112 8113 8238 8402 6 8237 8113 8114 8239 8402 8403 6 8238 8114 8116 8117 8240 8403 6 8239 8117 8241 8403 8404 8405 6 8240 8117 8118 8119 8242 8405 6 8241 8119 8120 8243 8405 8406 6 8242 8120 8121 8244 8406 8407 6 8243 8121 8122 8245 8407 8408 6 8244 8122 8246 8408 8409 8410 6 8245 8122 8123 8124 8247 8410 6 8246 8124 8125 8248 8410 8411 6 8247 8125 8126 8249 8411 8412 6 8248 8126 8127 8250 8412 8413 6 8249 8127 8128 8251 8413 8414 6 8250 8128 8129 8252 8414 8415 6 8251 8129 8253 8415 8416 8417 6 8252 8129 8130 8131 8254 8417 7 8253 8131 8132 8133 8255 8417 8418 5 8254 8133 8256 8418 8419 7 8255 8133 8134 8135 8257 8419 8420 5 8256 8135 8258 8420 8421 6 8257 8135 8259 8421 8422 8260 5 8258 8135 8136 8137 8260 6 8259 8137 8261 8422 8258 8423 6 8260 8137 8138 8262 8423 8424 6 8261 8138 8139 8140 8263 8424 6 8262 8140 8264 8424 8425 8426 6 8263 8140 8141 8142 8265 8426 6 8264 8142 8266 8426 8427 8428 7 8265 8142 8143 8144 8267 8428 8429 6 8266 8144 8145 8268 8429 8430 6 8267 8145 8269 8430 8431 8432 6 8268 8145 8146 8147 8270 8432 6 8269 8147 8271 8432 8433 8434 6 8270 8147 8148 8151 8272 8434 5 8271 8151 8152 8273 8434 7 8272 8152 8153 8274 8434 8435 8436 6 8273 8153 8275 8436 8437 8438 6 8274 8153 8154 8276 8438 8277 5 8275 8154 8156 8158 8277 6 8276 8158 8278 8438 8275 8439 6 8277 8158 8159 8279 8439 8440 7 8278 8159 8160 8280 8440 8441 8445 6 8279 8160 8281 8445 8446 8284 5 8280 8160 8161 8282 8284 7 8281 8161 8162 8283 8166 8168 8284 5 8282 8162 8164 8165 8166 6 8282 8168 8285 8446 8280 8281 6 8284 8168 8169 8286 8446 8447 6 8285 8169 8287 8447 8449 8450 6 8286 8169 8170 8172 8288 8450 6 8287 8172 8289 8450 8451 8452 6 8288 8172 8173 8290 8452 8453 6 8289 8173 8174 8175 8291 8453 6 8290 8175 8176 8292 8453 8454 6 8291 8176 8293 8454 8455 8456 6 8292 8176 8177 8294 8456 8457 6 8293 8177 8178 8295 8457 8458 6 8294 8178 8296 8461 8458 8299 6 8295 8178 8179 8297 8298 8299 6 8296 8179 8298 8307 8305 8180 6 8296 8297 8299 8300 8301 8305 6 8296 8298 8300 8461 8295 8462 6 8299 8298 8301 8302 8462 8463 6 8300 8298 8302 8303 8304 8305 6 8300 8301 8303 8463 8464 8465 6 8302 8301 8304 8465 8466 8467 6 8303 8301 8305 8306 8470 8467 6 8304 8301 8298 8306 8307 8297 6 8304 8305 8307 8470 8471 8472 6 8306 8305 8297 8180 8308 8472 6 8307 8180 8181 8183 8309 8472 6 8308 8183 8184 8310 8472 8473 6 8309 8184 8185 8311 8473 8474 5 8310 8185 8186 8312 8474 6 8311 8186 8187 8313 8474 8475 6 8312 8187 8314 8478 8475 8479 6 8313 8187 8188 8315 8479 8480 6 8314 8188 8189 8200 8316 8480 5 8315 8200 8201 8317 8480 6 8316 8201 8318 8480 8481 7708 7 8317 8201 8202 8205 7700 7707 7708 6 7765 7766 8320 8321 8853 8854 6 8319 7766 7767 8321 8322 7769 7 8319 8320 8322 8854 8855 8856 8323 5 8321 8320 7769 7771 8323 6 8322 7771 8324 8856 8321 8857 6 8323 7771 7772 8325 8857 8328 6 8324 7772 7777 8326 8327 8328 6 8325 7777 7778 7779 7780 8327 6 8326 7780 8325 8328 8329 7781 6 8325 8327 8329 8857 8324 8858 6 8328 8327 7781 7782 8330 8858 6 8329 7782 7783 8331 8858 8859 6 8330 7783 8332 8865 8862 8859 6 8331 7783 7784 8037 8333 8865 6 8332 8037 8334 8866 8865 8867 6 8333 8037 8038 8041 8335 8867 6 8334 8041 8336 8867 8868 8869 6 8335 8041 8042 8337 8338 8869 6 8336 8042 8338 8339 8340 8341 6 8336 8337 8339 8869 8870 8874 6 8338 8337 8340 8874 8875 8347 6 8339 8337 8341 8347 8346 8876 6 8340 8337 8042 8043 8342 8876 6 8341 8043 8044 8343 8344 8876 6 8342 8044 8344 7807 7806 8046 6 8342 8343 7807 7808 8345 8876 6 8344 7808 7930 8050 8346 8876 6 8345 8050 8051 8347 8340 8876 6 8346 8051 8348 8875 8339 8340 6 8347 8051 8052 8054 8349 8875 6 8348 8054 8350 8902 8875 8901 6 8349 8054 8055 8351 8901 8903 6 8350 8055 8352 8903 8904 8905 6 8351 8055 8056 8353 8905 8906 6 8352 8056 8058 8354 8906 8907 6 8353 8058 8355 8907 8908 8909 6 8354 8058 8059 8356 8357 8909 6 8355 8059 8060 8061 8357 8358 6 8355 8356 8358 8359 8909 8910 6 8357 8356 8061 8062 8359 8063 6 8357 8358 8063 8064 8360 8910 6 8359 8064 8361 8912 8910 8913 6 8360 8064 8065 8362 8913 8914 6 8361 8065 8066 8067 8363 8914 6 8362 8067 8364 8916 8914 8917 6 8363 8067 8068 8365 8917 8918 6 8364 8068 8069 8366 8918 8919 6 8365 8069 8070 8367 8919 8920 6 8366 8070 8071 8368 8920 8921 6 8367 8071 8072 8369 8921 8922 6 8368 8072 8073 8370 8922 8923 6 8369 8073 8371 8923 8924 8925 6 8370 8073 8074 8372 8925 8926 6 8371 8074 8075 8373 8374 8926 6 8372 8075 8076 8374 8375 8077 6 8372 8373 8375 8926 8927 8928 6 8374 8373 8077 8376 8928 8929 6 8375 8077 8078 8079 8377 8929 6 8376 8079 8080 8378 8929 8379 6 8377 8080 8209 8210 8211 8379 7 8378 8211 8212 8380 8929 8377 8930 5 8379 8212 8381 8930 8931 7 8380 8212 8213 8214 8382 8743 8931 6 8381 8214 8216 8383 8641 8743 6 8382 8216 8217 8384 8641 8642 6 8383 8217 8218 8385 8642 8643 6 8384 8218 8219 8220 8386 8643 7 8385 8220 8221 8387 8643 8644 8645 6 8386 8221 8222 8388 8645 8646 6 8387 8222 8223 8389 8646 8647 6 8388 8223 8224 8390 8647 8648 7 8389 8224 8225 8391 8648 8649 8650 6 8390 8225 8226 8392 8650 8651 6 8391 8226 8227 8228 8393 8651 6 8392 8228 8394 8651 8652 8653 6 8393 8228 8229 8395 8653 8654 6 8394 8229 8230 8231 8396 8654 5 8395 8231 8397 8654 8655 6 8396 8231 8232 8398 8655 8656 7 8397 8232 8233 8234 8399 8656 8657 5 8398 8234 8400 8657 8658 7 8399 8234 8235 8236 8401 8658 8659 5 8400 8236 8402 8659 8660 6 8401 8236 8237 8238 8403 8660 6 8402 8238 8239 8240 8404 8660 6 8403 8240 8405 8660 8661 8662 6 8404 8240 8241 8242 8406 8662 6 8405 8242 8243 8407 8662 8663 7 8406 8243 8244 8408 8663 8664 8665 6 8407 8244 8245 8409 8665 8666 6 8408 8245 8410 8666 8667 8668 6 8409 8245 8246 8247 8411 8668 6 8410 8247 8248 8412 8668 8669 6 8411 8248 8249 8413 8669 8670 6 8412 8249 8250 8414 8670 8671 6 8413 8250 8251 8415 8671 8672 6 8414 8251 8252 8416 8672 8673 6 8415 8252 8417 8673 8674 8675 6 8416 8252 8253 8254 8418 8675 6 8417 8254 8255 8419 8675 8676 6 8418 8255 8256 8420 8676 8677 6 8419 8256 8257 8421 8677 8678 6 8420 8257 8258 8422 8678 8679 6 8421 8258 8260 8423 8679 8680 7 8422 8260 8261 8424 8680 8681 8682 6 8423 8261 8262 8263 8425 8682 6 8424 8263 8426 8682 8683 8687 6 8425 8263 8264 8265 8427 8687 6 8426 8265 8428 8687 8688 8689 6 8427 8265 8266 8429 8689 8690 5 8428 8266 8267 8430 8690 6 8429 8267 8268 8431 8542 8690 6 8430 8268 8432 8542 8543 8544 6 8431 8268 8269 8270 8433 8544 6 8432 8270 8434 8544 8545 8546 7 8433 8270 8271 8272 8273 8435 8546 6 8434 8273 8436 8546 8547 8548 6 8435 8273 8274 8437 8548 8549 6 8436 8274 8438 8549 8550 8439 5 8437 8274 8275 8277 8439 7 8438 8277 8278 8440 8550 8437 8551 6 8439 8278 8279 8441 8442 8551 6 8440 8279 8442 8443 8444 8445 6 8440 8441 8443 8551 8552 8553 6 8442 8441 8444 8553 8554 8555 7 8443 8441 8445 8446 8447 8448 8555 5 8444 8441 8279 8280 8446 6 8445 8280 8284 8285 8447 8444 6 8446 8285 8286 8444 8448 8449 5 8444 8447 8449 8555 8556 6 8448 8447 8286 8450 8556 8557 7 8449 8286 8287 8288 8451 8557 8558 6 8450 8288 8452 8558 8559 8560 6 8451 8288 8289 8453 8560 8561 6 8452 8289 8290 8291 8454 8561 6 8453 8291 8292 8455 8561 8562 6 8454 8292 8456 8562 8563 8564 6 8455 8292 8293 8457 8564 8565 6 8456 8293 8294 8458 8459 8565 6 8457 8294 8459 8460 8461 8295 6 8457 8458 8460 8565 8566 8567 6 8459 8458 8461 8567 8568 8569 6 8460 8458 8295 8299 8462 8569 6 8461 8299 8300 8463 8569 8570 6 8462 8300 8302 8464 8570 8571 6 8463 8302 8465 8571 8572 8573 6 8464 8302 8303 8466 8573 8487 7 8465 8303 8467 8468 7962 7963 8487 6 8466 8303 8468 8469 8470 8304 6 8466 8467 8469 7962 9763 9764 7 8468 8467 8470 9094 8485 9763 8486 6 8469 8467 8304 8306 8471 9094 6 8470 8306 8472 8476 9094 8473 6 8471 8306 8307 8308 8309 8473 6 8472 8309 8310 8474 8476 8471 6 8473 8310 8311 8312 8475 8476 6 8474 8312 8476 8477 8478 8313 7 8474 8475 8477 8485 9094 8471 8473 6 8476 8475 8478 8483 8484 8485 6 8477 8475 8313 8479 8483 8482 6 8478 8313 8314 8480 8482 8481 6 8479 8314 8315 8316 8317 8481 6 8480 8317 7708 7709 8482 8479 7 8481 7709 7710 7713 8483 8478 8479 5 8482 7713 8484 8477 8478 6 8483 7713 7714 8477 8485 8486 6 8477 8484 8486 8469 9094 8476 6 8485 8484 9765 9763 8469 7714 5 8466 7963 8488 8573 8465 7 8487 7963 7964 7965 8489 8573 8574 5 8488 7965 7966 8490 8574 7 8489 7966 7967 8491 8492 8574 8575 6 8490 7967 8492 8493 7969 7968 5 8490 8491 8493 8575 8576 6 8492 8491 7969 8494 8576 8577 6 8493 7969 7970 8495 8577 8578 6 8494 7970 7971 8496 8578 8579 6 8495 7971 7974 8497 8498 8579 6 8496 7974 8498 8499 8500 7975 6 8496 8497 8499 8579 8580 8581 6 8498 8497 8500 8581 8582 8501 6 8499 8497 7975 7981 7983 8501 6 8500 7983 8502 8582 8499 8583 6 8501 7983 7984 8503 8586 8583 6 8502 7984 8504 8527 8586 8526 6 8503 7984 7985 8505 8526 8588 6 8504 7985 8506 8588 8513 8589 6 8505 7985 7986 7993 8507 8589 6 8506 7993 7994 7997 8508 8589 6 8507 7997 7998 8509 8513 8589 6 8508 7998 8510 8511 8512 8513 6 8509 7998 7999 8000 8001 8511 6 8509 8510 8512 8521 8522 8001 6 8509 8511 8513 8514 8515 8521 7 8509 8512 8514 8588 8505 8589 8508 6 8513 8512 8515 8516 8526 8588 6 8514 8512 8516 8517 8520 8521 6 8514 8515 8517 8518 8524 8526 6 8516 8515 8518 8519 8004 8520 6 8516 8517 8519 8524 8525 8531 6 8518 8517 8004 8541 8539 8531 6 8004 8517 8003 8515 8521 8523 6 8520 8515 8512 8511 8522 8523 5 8521 8511 8001 8002 8523 5 8522 8002 8521 8520 8003 6 8516 8518 8525 8526 8527 8528 6 8524 8518 8528 8529 8530 8531 7 8516 8524 8527 8503 8504 8588 8514 5 8526 8524 8528 8586 8503 6 8527 8524 8525 8529 8587 8586 6 8528 8525 8530 8602 8587 8603 6 8529 8525 8531 8532 8533 8603 6 8530 8525 8532 8519 8539 8518 6 8530 8531 8533 8534 8538 8539 6 8530 8532 8534 8535 8603 8604 6 8533 8532 8535 8536 8537 8538 6 8533 8534 8536 8604 8605 8606 6 8535 8534 8537 8606 8607 8608 6 8536 8534 8538 8608 8609 8010 6 8537 8534 8532 8539 8540 8010 6 8538 8532 8540 8541 8519 8531 6 8538 8539 8541 8010 8610 8006 6 8540 8539 8519 8006 8005 8004 6 8430 8431 8543 8690 8691 8692 6 8542 8431 8544 8692 8693 8694 6 8543 8431 8432 8433 8545 8694 6 8544 8433 8546 8694 8695 8547 5 8545 8433 8434 8435 8547 6 8546 8435 8548 8695 8545 8696 6 8547 8435 8436 8549 8696 8697 6 8548 8436 8437 8550 8697 8698 6 8549 8437 8439 8551 8698 8552 5 8550 8439 8440 8442 8552 7 8551 8442 8553 8698 8550 8699 8700 6 8552 8442 8443 8554 8700 8701 6 8553 8443 8555 8701 8702 8703 6 8554 8443 8444 8448 8556 8703 6 8555 8448 8449 8557 8703 8704 6 8556 8449 8450 8558 8704 8705 6 8557 8450 8451 8559 8705 8706 6 8558 8451 8560 8706 8707 8708 5 8559 8451 8452 8561 8708 6 8560 8452 8453 8454 8562 8708 6 8561 8454 8455 8563 8708 8709 6 8562 8455 8564 8709 8710 8711 6 8563 8455 8456 8565 8711 8712 7 8564 8456 8457 8459 8566 8712 8713 5 8565 8459 8567 8713 8714 6 8566 8459 8460 8568 8714 8715 6 8567 8460 8569 8715 8716 8717 6 8568 8460 8461 8462 8570 8717 7 8569 8462 8463 8571 8590 8592 8717 5 8570 8463 8464 8572 8590 7 8571 8464 8573 8574 8575 8576 8590 6 8572 8464 8465 8487 8488 8574 6 8573 8488 8489 8490 8575 8572 5 8574 8490 8492 8576 8572 7 8575 8492 8493 8577 8572 8590 8591 6 8576 8493 8494 8578 8594 8591 6 8577 8494 8495 8579 8594 8595 6 8578 8495 8496 8498 8580 8595 6 8579 8498 8581 8595 8596 8597 6 8580 8498 8499 8582 8597 8598 6 8581 8499 8501 8583 8584 8598 6 8582 8501 8584 8585 8586 8502 6 8582 8583 8585 8598 8599 8600 6 8584 8583 8586 8587 8600 8601 7 8585 8583 8587 8528 8527 8503 8502 6 8585 8586 8528 8601 8602 8529 5 8526 8504 8505 8513 8514 5 8513 8505 8506 8508 8507 6 8572 8576 8591 8571 8570 8592 6 8590 8576 8592 8593 8594 8577 5 8570 8590 8591 8593 8717 7 8592 8591 8594 8717 8716 8718 8719 6 8593 8591 8577 8578 8595 8719 7 8594 8578 8579 8580 8596 8719 8720 6 8595 8580 8597 8720 8721 8722 6 8596 8580 8581 8598 8722 8723 6 8597 8581 8582 8584 8599 8723 6 8598 8584 8600 8723 8724 8725 6 8599 8584 8585 8601 8725 8726 6 8600 8585 8587 8602 8726 8727 5 8601 8587 8529 8603 8727 6 8602 8529 8530 8533 8604 8727 6 8603 8533 8535 8605 8727 8728 6 8604 8535 8606 8728 8731 8732 6 8605 8535 8536 8607 8611 8732 6 8606 8536 8608 8611 8015 8014 6 8607 8536 8537 8609 8014 8013 5 8608 8537 8010 8013 8011 5 8010 8540 8008 8007 8006 6 8606 8607 8015 8016 8612 8732 6 8611 8016 8017 8613 8732 8733 6 8612 8017 8614 8733 8734 8735 6 8613 8017 8018 8615 8616 8735 6 8614 8018 8019 8616 8617 8618 6 8614 8615 8617 8735 8736 8737 6 8616 8615 8618 8737 8738 8739 6 8617 8615 8019 8619 8739 8742 6 8618 8019 8020 8022 8620 8742 6 8619 8022 8024 8621 8624 8742 6 8620 8024 8028 8622 8623 8624 6 8621 8028 8623 8627 8628 8029 6 8621 8622 8624 8625 8626 8627 6 8621 8623 8625 8741 8742 8620 6 8624 8623 8626 8837 8741 8838 6 8625 8623 8627 8838 8839 8840 6 8626 8623 8622 8628 8840 8841 6 8627 8622 8029 8629 8841 8842 6 8628 8029 8030 8033 8630 8842 6 8629 8033 8631 8842 8843 8844 6 8630 8033 8034 8632 8633 8844 6 8631 8034 8633 8634 8635 8035 6 8631 8632 8634 8844 8845 8846 6 8633 8632 8635 8636 8637 8846 6 8634 8632 8636 8640 7761 8035 6 8634 8635 8637 8638 8639 8640 6 8634 8636 8638 8846 8848 8849 6 8637 8636 8639 8849 8850 8851 6 8638 8636 8640 8851 8852 7762 5 8639 8636 8635 7761 7762 6 8382 8383 8642 8743 8744 8745 6 8641 8383 8384 8643 8745 8746 6 8642 8384 8385 8386 8644 8746 6 8643 8386 8645 8746 8747 8748 6 8644 8386 8387 8646 8748 8749 6 8645 8387 8388 8647 8749 8750 6 8646 8388 8389 8648 8750 8751 6 8647 8389 8390 8649 8751 8752 6 8648 8390 8650 8752 8753 8754 5 8649 8390 8391 8651 8754 6 8650 8391 8392 8393 8652 8754 6 8651 8393 8653 8754 8755 8756 6 8652 8393 8394 8654 8756 8757 6 8653 8394 8395 8396 8655 8757 6 8654 8396 8397 8656 8757 8758 7 8655 8397 8398 8657 8758 8759 8760 5 8656 8398 8399 8658 8760 7 8657 8399 8400 8659 8760 8761 8762 5 8658 8400 8401 8660 8762 8 8659 8401 8402 8403 8404 8661 8762 8763 5 8660 8404 8662 8763 8764 6 8661 8404 8405 8406 8663 8764 6 8662 8406 8407 8664 8764 8765 6 8663 8407 8665 8765 8766 8767 5 8664 8407 8408 8666 8767 6 8665 8408 8409 8667 8767 8768 6 8666 8409 8668 8768 8769 8770 6 8667 8409 8410 8411 8669 8770 6 8668 8411 8412 8670 8770 8771 6 8669 8412 8413 8671 8771 8772 6 8670 8413 8414 8672 8772 8773 6 8671 8414 8415 8673 8773 8774 6 8672 8415 8416 8674 8774 8775 6 8673 8416 8675 8775 8776 8777 6 8674 8416 8417 8418 8676 8777 6 8675 8418 8419 8677 8777 8778 6 8676 8419 8420 8678 8778 8779 6 8677 8420 8421 8679 8779 8780 6 8678 8421 8422 8680 8780 8781 6 8679 8422 8423 8681 8781 8782 6 8680 8423 8682 8782 8783 8684 6 8681 8423 8424 8425 8683 8684 6 8682 8425 8684 8685 8686 8687 5 8682 8683 8685 8783 8681 6 8684 8683 8686 8783 8784 8785 6 8685 8683 8687 8785 8786 8787 7 8686 8683 8425 8426 8427 8688 8787 5 8687 8427 8689 8787 8788 6 8688 8427 8428 8690 8788 8789 7 8689 8428 8429 8430 8542 8691 8789 6 8690 8542 8692 8789 8790 8791 5 8691 8542 8543 8693 8791 7 8692 8543 8694 8791 8792 8793 8794 6 8693 8543 8544 8545 8695 8794 6 8694 8545 8547 8696 8794 8795 7 8695 8547 8548 8697 8795 8796 8797 6 8696 8548 8549 8698 8797 8798 6 8697 8549 8550 8552 8699 8798 6 8698 8552 8700 8798 8799 8800 6 8699 8552 8553 8701 8800 8803 6 8700 8553 8554 8702 8803 8804 6 8701 8554 8703 8804 8805 8806 6 8702 8554 8555 8556 8704 8806 6 8703 8556 8557 8705 8806 8807 6 8704 8557 8558 8706 8807 8808 6 8705 8558 8559 8707 8808 8809 6 8706 8559 8708 8809 8810 8811 7 8707 8559 8560 8561 8562 8709 8811 5 8708 8562 8563 8710 8811 7 8709 8563 8711 8811 8812 8813 8814 6 8710 8563 8564 8712 8814 8815 6 8711 8564 8565 8713 8815 8816 5 8712 8565 8566 8714 8816 7 8713 8566 8567 8715 8816 8817 8818 6 8714 8567 8568 8716 8818 8819 6 8715 8568 8717 8593 8718 8819 6 8716 8568 8569 8570 8592 8593 6 8716 8593 8719 8819 8820 8720 5 8718 8593 8594 8595 8720 6 8719 8595 8596 8721 8820 8718 6 8720 8596 8722 8820 8821 8822 5 8721 8596 8597 8723 8822 6 8722 8597 8598 8599 8724 8822 6 8723 8599 8725 8822 8823 8824 6 8724 8599 8600 8726 8824 8825 6 8725 8600 8601 8727 8825 8729 7 8726 8601 8602 8603 8604 8728 8729 6 8727 8604 8605 8729 8730 8731 5 8727 8728 8730 8825 8726 6 8729 8728 8731 8825 8827 8828 6 8730 8728 8605 8732 8828 8829 7 8731 8605 8606 8611 8612 8733 8829 6 8732 8612 8613 8734 8830 8829 6 8733 8613 8735 8830 8831 8736 5 8734 8613 8614 8616 8736 6 8735 8616 8737 8831 8734 8832 6 8736 8616 8617 8738 8832 8833 6 8737 8617 8739 8740 8833 8834 6 8738 8617 8618 8740 8741 8742 6 8738 8739 8741 8834 8835 8836 7 8740 8739 8742 8624 8836 8837 8625 6 8741 8739 8624 8620 8619 8618 6 8381 8382 8641 8744 8931 8932 5 8743 8641 8745 8932 8933 6 8744 8641 8642 8746 8933 8934 6 8745 8642 8643 8644 8747 8934 6 8746 8644 8748 8934 8935 8936 6 8747 8644 8645 8749 8936 8937 6 8748 8645 8646 8750 8937 8938 6 8749 8646 8647 8751 8938 8939 6 8750 8647 8648 8752 8939 8940 6 8751 8648 8649 8753 8940 8941 6 8752 8649 8754 8941 8942 8943 7 8753 8649 8650 8651 8652 8755 8943 5 8754 8652 8756 8943 8944 6 8755 8652 8653 8757 8944 8945 6 8756 8653 8654 8655 8758 8945 7 8757 8655 8656 8759 8945 8946 8947 5 8758 8656 8760 8947 8948 6 8759 8656 8657 8658 8761 8948 6 8760 8658 8762 8948 8949 8950 6 8761 8658 8659 8660 8763 8950 5 8762 8660 8661 8764 8950 7 8763 8661 8662 8663 8765 8950 8951 6 8764 8663 8664 8766 8951 8952 6 8765 8664 8767 8952 8953 8954 6 8766 8664 8665 8666 8768 8954 6 8767 8666 8667 8769 8954 8955 6 8768 8667 8770 8955 8956 8957 6 8769 8667 8668 8669 8771 8957 6 8770 8669 8670 8772 8957 8958 6 8771 8670 8671 8773 8958 8959 6 8772 8671 8672 8774 8959 8960 6 8773 8672 8673 8775 8960 8961 6 8774 8673 8674 8776 8961 8962 6 8775 8674 8777 8962 8963 8964 6 8776 8674 8675 8676 8778 8964 6 8777 8676 8677 8779 8964 8965 6 8778 8677 8678 8780 8965 8966 6 8779 8678 8679 8781 8966 8967 6 8780 8679 8680 8782 8967 8968 6 8781 8680 8681 8783 8968 8969 6 8782 8681 8684 8685 8784 8969 6 8783 8685 8785 8969 8970 8971 6 8784 8685 8686 8786 8971 8972 6 8785 8686 8787 8972 8973 8974 6 8786 8686 8687 8688 8788 8974 6 8787 8688 8689 8789 8974 8975 6 8788 8689 8690 8691 8790 8975 6 8789 8691 8791 8975 8976 8977 6 8790 8691 8692 8693 8792 8977 6 8791 8693 8793 8977 8978 8979 6 8792 8693 8794 8979 8980 8795 5 8793 8693 8694 8695 8795 6 8794 8695 8696 8796 8980 8793 6 8795 8696 8797 8980 8981 8982 6 8796 8696 8697 8798 8982 8799 5 8797 8697 8698 8699 8799 6 8798 8699 8800 8801 8982 8797 6 8799 8699 8700 8801 8802 8803 6 8799 8800 8802 8982 8983 8984 6 8801 8800 8803 8984 8985 8986 6 8802 8800 8700 8701 8804 8986 6 8803 8701 8702 8805 8986 8987 6 8804 8702 8806 8987 8988 8989 6 8805 8702 8703 8704 8807 8989 6 8806 8704 8705 8808 8989 8990 7 8807 8705 8706 8809 8992 8990 8993 5 8808 8706 8707 8810 8993 6 8809 8707 8811 8993 8994 8812 6 8810 8707 8708 8709 8710 8812 6 8811 8710 8813 8994 8810 8995 6 8812 8710 8814 8995 8996 8997 6 8813 8710 8711 8815 8997 8998 5 8814 8711 8712 8816 8998 7 8815 8712 8713 8714 8817 8998 8999 6 8816 8714 8818 8999 9000 9001 6 8817 8714 8715 8819 9001 9002 6 8818 8715 8716 8718 8820 9002 6 8819 8718 8720 8721 8821 9002 6 8820 8721 8822 9002 9003 8823 6 8821 8721 8722 8723 8724 8823 6 8822 8724 8824 9003 8821 9004 6 8823 8724 8725 8825 8826 9004 7 8824 8725 8726 8729 8730 8826 8827 6 8824 8825 8827 9004 9005 9006 6 8826 8825 8730 8828 9012 9006 6 8827 8730 8731 8829 8830 9012 5 8828 8731 8830 8733 8732 7 8828 8829 8733 8734 8831 9011 9012 6 8830 8734 8736 8832 9013 9011 7 8831 8736 8737 8833 9013 9014 9015 6 8832 8737 8738 8834 9015 9016 6 8833 8738 8740 8835 9016 9017 6 8834 8740 8836 9017 9018 9019 6 8835 8740 8741 8837 9019 9020 5 8836 8741 8625 8838 9020 6 8837 8625 8626 8839 9020 9021 6 8838 8626 8840 9021 9022 9023 6 8839 8626 8627 8841 9023 9024 6 8840 8627 8628 8842 9024 9025 6 8841 8628 8629 8630 8843 9025 6 8842 8630 8844 9025 9026 9030 6 8843 8630 8631 8633 8845 9030 6 8844 8633 8846 8847 9031 9030 6 8845 8633 8634 8637 8847 8848 6 8845 8846 8848 9031 9032 9033 6 8847 8846 8637 8849 9042 9033 6 8848 8637 8638 8850 9043 9042 6 8849 8638 8851 9043 9044 9045 6 8850 8638 8639 8852 9045 9048 6 8851 8639 7762 7763 8853 9048 6 8852 7763 7765 8319 8854 9048 6 8853 8319 8321 8855 9047 9048 6 8854 8321 8856 9047 9049 9050 5 8855 8321 8323 8857 9050 7 8856 8323 8324 8328 8858 9050 8860 6 8857 8328 8329 8330 8859 8860 6 8858 8330 8860 8861 8862 8331 6 8858 8859 8861 9050 8857 9051 6 8860 8859 8862 8863 9051 9052 6 8861 8859 8863 8864 8865 8331 6 8861 8862 8864 8877 9058 9052 6 8863 8862 8865 8866 8877 8878 6 8864 8862 8866 8333 8332 8331 6 8864 8865 8333 8867 8878 8879 6 8866 8333 8334 8335 8868 8879 6 8867 8335 8869 8879 8880 8871 6 8868 8335 8336 8338 8870 8871 6 8869 8338 8871 8872 8873 8874 6 8869 8870 8872 8894 8880 8868 6 8871 8870 8873 8896 8894 8897 6 8872 8870 8874 8897 8898 8902 6 8873 8870 8338 8339 8875 8902 6 8874 8339 8347 8902 8349 8348 6 8346 8340 8341 8342 8344 8345 5 8863 8864 8878 9058 8882 6 8877 8864 8866 8879 8881 8882 6 8878 8866 8867 8868 8880 8881 6 8879 8868 8881 8893 8894 8871 6 8879 8880 8878 8882 8883 8893 6 8878 8881 8883 8884 9058 8877 6 8882 8881 8884 8885 8892 8893 6 8882 8883 8885 8886 8887 9058 6 8884 8883 8886 8890 8891 8892 6 8884 8885 8887 8888 8889 8890 6 8884 8886 8888 9058 9057 9059 6 8887 8886 8889 9059 9060 9061 6 8888 8886 8890 9061 9062 9063 6 8889 8886 8885 8891 9063 9064 6 8890 8885 8892 9064 9065 9066 6 8891 8885 8883 8893 9066 8895 6 8892 8883 8881 8880 8894 8895 6 8893 8880 8895 8896 8872 8871 6 8893 8894 8896 9066 8892 9067 6 8895 8894 8872 8897 9067 9068 6 8896 8872 8873 8898 8899 9068 6 8897 8873 8899 8900 8901 8902 6 8897 8898 8900 9068 9069 9070 6 8899 8898 8901 9070 9071 8903 6 8900 8898 8902 8349 8350 8903 6 8901 8898 8873 8874 8875 8349 6 8901 8350 8351 8904 9071 8900 6 8903 8351 8905 9071 9072 9073 6 8904 8351 8352 8906 9073 9074 6 8905 8352 8353 8907 9074 9075 6 8906 8353 8354 8908 9075 9076 6 8907 8354 8909 9076 9077 8911 6 8908 8354 8355 8357 8910 8911 6 8909 8357 8911 8912 8360 8359 6 8909 8910 8912 9077 8908 9078 6 8911 8910 8360 8913 9078 9079 6 8912 8360 8361 8914 8915 9079 6 8913 8361 8362 8915 8916 8363 6 8913 8914 8916 9079 9080 9081 6 8915 8914 8363 8917 9081 9082 6 8916 8363 8364 8918 9082 9083 6 8917 8364 8365 8919 9083 9084 6 8918 8365 8366 8920 9093 9084 6 8919 8366 8367 8921 9093 9100 6 8920 8367 8368 8922 9100 9101 6 8921 8368 8369 8923 9101 9102 6 8922 8369 8370 8924 9102 9103 6 8923 8370 8925 9103 9104 9105 6 8924 8370 8371 8926 9105 9106 6 8925 8371 8372 8374 8927 9106 6 8926 8374 8928 9106 9107 8931 6 8927 8374 8375 8929 8931 8930 6 8928 8375 8376 8377 8379 8930 5 8929 8379 8380 8931 8928 8 8930 8380 8381 8743 8932 9107 8927 8928 5 8931 8743 8744 8933 9107 8 8932 8744 8745 8934 9107 9106 9105 9108 6 8933 8745 8746 8747 8935 9108 6 8934 8747 8936 9108 9109 9110 6 8935 8747 8748 8937 9110 9111 6 8936 8748 8749 8938 9111 9112 6 8937 8749 8750 8939 9112 9113 6 8938 8750 8751 8940 9113 9114 6 8939 8751 8752 8941 9114 9115 6 8940 8752 8753 8942 9115 9116 6 8941 8753 8943 9116 9117 8944 5 8942 8753 8754 8755 8944 7 8943 8755 8756 8945 9117 8942 9118 7 8944 8756 8757 8758 8946 9118 9119 5 8945 8758 8947 9119 9120 6 8946 8758 8759 8948 9120 9121 7 8947 8759 8760 8761 8949 9121 9122 6 8948 8761 8950 9122 9123 8951 6 8949 8761 8762 8763 8764 8951 6 8950 8764 8765 8952 9123 8949 6 8951 8765 8766 8953 9123 9124 6 8952 8766 8954 9124 9125 9126 6 8953 8766 8767 8768 8955 9126 6 8954 8768 8769 8956 9126 9127 6 8955 8769 8957 9127 9128 9129 6 8956 8769 8770 8771 8958 9129 6 8957 8771 8772 8959 9129 9130 6 8958 8772 8773 8960 9130 9131 6 8959 8773 8774 8961 9131 9132 6 8960 8774 8775 8962 9132 9133 6 8961 8775 8776 8963 9133 9134 6 8962 8776 8964 9134 9135 9136 6 8963 8776 8777 8778 8965 9136 6 8964 8778 8779 8966 9136 9137 6 8965 8779 8780 8967 9137 9138 6 8966 8780 8781 8968 9138 9139 6 8967 8781 8782 8969 9139 9140 7 8968 8782 8783 8784 8970 9140 9141 5 8969 8784 8971 9141 9142 7 8970 8784 8785 8972 9142 9143 9144 6 8971 8785 8786 8973 9144 9145 6 8972 8786 8974 9145 9146 9147 6 8973 8786 8787 8788 8975 9147 6 8974 8788 8789 8790 8976 9147 6 8975 8790 8977 9147 9148 9149 6 8976 8790 8791 8792 8978 9149 6 8977 8792 8979 9149 9150 9151 6 8978 8792 8793 8980 9151 9152 6 8979 8793 8795 8796 8981 9152 6 8980 8796 8982 9152 9153 8983 6 8981 8796 8797 8799 8801 8983 6 8982 8801 8984 9153 8981 9154 6 8983 8801 8802 8985 9154 9155 6 8984 8802 8986 9155 9156 9157 7 8985 8802 8803 8804 8987 9157 9158 5 8986 8804 8805 8988 9158 7 8987 8805 8989 8990 8991 9158 9159 5 8988 8805 8806 8807 8990 6 8989 8807 8988 8991 8992 8808 6 8988 8990 8992 9159 9160 9161 6 8991 8990 8808 8993 9164 9161 6 8992 8808 8809 8810 8994 9164 6 8993 8810 8812 8995 9164 9165 7 8994 8812 8813 8996 9165 9167 9168 5 8995 8813 8997 9168 9169 6 8996 8813 8814 8998 9169 9170 7 8997 8814 8815 8816 8999 9170 9171 5 8998 8816 8817 9000 9171 6 8999 8817 9001 9171 9172 9173 6 9000 8817 8818 9002 9173 9003 6 9001 8818 8819 8820 8821 9003 6 9002 8821 8823 9004 9173 9001 6 9003 8823 8824 8826 9005 9173 6 9004 8826 9006 9007 9008 9173 6 9005 8826 9007 9011 9012 8827 6 9005 9006 9008 9009 9010 9011 6 9005 9007 9009 9173 9172 9174 5 9008 9007 9010 9174 9177 6 9009 9007 9011 9013 9177 9014 7 9010 9007 9006 9012 9013 8831 8830 5 9011 9006 8830 8828 8827 5 9010 9011 8831 8832 9014 6 9013 8832 9015 9177 9010 9178 6 9014 8832 8833 9016 9181 9178 5 9015 8833 8834 9017 9181 7 9016 8834 8835 9018 9181 9182 9188 6 9017 8835 9019 9188 9189 9190 6 9018 8835 8836 9020 9190 9191 6 9019 8836 8837 8838 9021 9191 6 9020 8838 8839 9022 9191 9192 6 9021 8839 9023 9192 9195 9196 6 9022 8839 8840 9024 9196 9197 6 9023 8840 8841 9025 9197 9027 6 9024 8841 8842 8843 9026 9027 6 9025 8843 9027 9028 9029 9030 6 9025 9026 9028 9197 9024 9198 6 9027 9026 9029 9198 9199 9203 5 9028 9026 9030 9031 9203 6 9029 9026 8843 9031 8845 8844 7 9029 9030 8845 8847 9032 9203 9204 6 9031 8847 9033 9034 9204 9205 6 9032 8847 9034 9035 9042 8848 6 9032 9033 9035 9036 9037 9205 6 9034 9033 9036 9040 9041 9042 6 9034 9035 9037 9038 9039 9040 6 9034 9036 9038 9205 9206 9207 6 9037 9036 9039 9207 9208 9209 6 9038 9036 9040 9209 9062 9061 6 9039 9036 9035 9041 9061 9060 6 9040 9035 9042 9043 9060 9210 6 9041 9035 9033 8848 9043 8849 6 9041 9042 8849 8850 9044 9210 7 9043 8850 9045 9046 9055 9056 9210 6 9044 8850 8851 9046 9047 9048 6 9044 9045 9047 9053 9055 9049 6 9046 9045 9048 8854 8855 9049 6 9047 9045 8851 8854 8853 8852 6 9047 8855 9050 9051 9053 9046 6 9049 8855 8856 8857 8860 9051 6 9050 8860 8861 9052 9053 9049 6 9051 8861 9053 9054 9058 8863 6 9051 9052 9054 9055 9046 9049 6 9053 9052 9055 9056 9057 9058 5 9053 9054 9046 9044 9056 6 9044 9055 9054 9057 9059 9210 5 9056 9054 9058 8887 9059 8 9057 9054 9052 8863 8877 8882 8884 8887 6 9057 8887 8888 9060 9210 9056 6 9059 8888 9061 9040 9041 9210 6 9060 8888 8889 9062 9039 9040 6 9061 8889 9063 9209 9039 9211 6 9062 8889 8890 9064 9211 9212 6 9063 8890 8891 9065 9212 9213 6 9064 8891 9066 9213 9214 9215 6 9065 8891 8892 8895 9067 9215 6 9066 8895 8896 9068 9215 9216 6 9067 8896 8897 8899 9069 9216 6 9068 8899 9070 9216 9217 9218 6 9069 8899 8900 9071 9218 9219 7 9070 8900 8903 8904 9072 9219 9220 5 9071 8904 9073 9220 9221 7 9072 8904 8905 9074 9221 9222 9223 6 9073 8905 8906 9075 9223 9225 6 9074 8906 8907 9076 9225 9226 5 9075 8907 8908 9077 9226 7 9076 8908 8911 9078 9226 9227 9228 5 9077 8911 8912 9079 9228 6 9078 8912 8913 8915 9080 9228 6 9079 8915 9081 9228 9229 9230 6 9080 8915 8916 9082 9230 9231 6 9081 8916 8917 9083 9231 9232 6 9082 8917 8918 9084 9085 9232 6 9083 8918 9085 9086 9093 8919 6 9083 9084 9086 9087 9232 9233 6 9085 9084 9087 9088 9092 9093 6 9085 9086 9088 9089 9233 9234 6 9087 9086 9089 9090 9091 9092 6 9087 9088 9090 9095 9234 9235 6 9089 9088 9091 9095 9096 9097 6 9090 9088 9092 9097 9098 9099 6 9091 9088 9086 9093 9099 9100 6 9092 9086 9084 8919 8920 9100 5 8469 8470 8485 8476 8471 6 9089 9090 9096 9235 9236 9237 6 9095 9090 9097 9237 9238 9239 6 9096 9090 9091 9098 9239 9240 6 9097 9091 9099 9240 9241 9242 6 9098 9091 9092 9100 9242 9101 6 9099 9092 9093 8920 8921 9101 6 9100 8921 8922 9102 9242 9099 6 9101 8922 8923 9103 9242 9243 6 9102 8923 8924 9104 9243 9244 6 9103 8924 9105 9109 9244 9108 6 9104 8924 8925 9106 8933 9108 6 9105 8925 8926 8927 9107 8933 5 9106 8927 8931 8932 8933 6 9105 8933 8934 8935 9109 9104 5 9108 8935 9110 9244 9104 7 9109 8935 8936 9111 9245 9244 9348 6 9110 8936 8937 9112 9350 9348 5 9111 8937 8938 9113 9350 6 9112 8938 8939 9114 9350 9351 6 9113 8939 8940 9115 9351 9352 6 9114 8940 8941 9116 9352 9353 6 9115 8941 8942 9117 9246 9353 6 9116 8942 8944 9118 9246 9247 6 9117 8944 8945 9119 9247 9248 5 9118 8945 8946 9120 9248 7 9119 8946 8947 9121 9248 9249 9250 6 9120 8947 8948 9122 9250 9251 5 9121 8948 8949 9123 9251 6 9122 8949 8951 8952 9124 9251 6 9123 8952 8953 9125 9251 9252 6 9124 8953 9126 9252 9253 9254 6 9125 8953 8954 8955 9127 9254 6 9126 8955 8956 9128 9254 9255 6 9127 8956 9129 9255 9256 9257 6 9128 8956 8957 8958 9130 9257 6 9129 8958 8959 9131 9257 9258 6 9130 8959 8960 9132 9258 9259 6 9131 8960 8961 9133 9259 9260 6 9132 8961 8962 9134 9260 9261 6 9133 8962 8963 9135 9261 9262 6 9134 8963 9136 9262 9263 9264 6 9135 8963 8964 8965 9137 9264 6 9136 8965 8966 9138 9264 9265 6 9137 8966 8967 9139 9265 9266 6 9138 8967 8968 9140 9266 9267 6 9139 8968 8969 9141 9267 9268 5 9140 8969 8970 9142 9268 7 9141 8970 8971 9143 9268 9269 9270 6 9142 8971 9144 9270 9271 9272 5 9143 8971 8972 9145 9272 6 9144 8972 8973 9146 9272 9273 6 9145 8973 9147 9273 9274 9148 6 9146 8973 8974 8975 8976 9148 6 9147 8976 9149 9274 9146 9275 6 9148 8976 8977 8978 9150 9275 6 9149 8978 9151 9275 9276 9277 6 9150 8978 8979 9152 9277 9278 7 9151 8979 8980 8981 9153 9278 9279 6 9152 8981 8983 9154 9279 9280 6 9153 8983 8984 9155 9280 9281 6 9154 8984 8985 9156 9281 9282 6 9155 8985 9157 9282 9283 9284 6 9156 8985 8986 9158 9284 9285 6 9157 8986 8987 8988 9159 9285 6 9158 8988 8991 9160 9285 9286 6 9159 8991 9161 9162 9286 9287 6 9160 8991 9162 9163 9164 8992 6 9160 9161 9163 9287 9288 9289 6 9162 9161 9164 9165 9166 9289 6 9163 9161 8992 8993 8994 9165 6 9164 8994 8995 9163 9166 9167 6 9163 9165 9167 9289 9290 9186 6 9166 9165 8995 9168 9186 9185 6 9167 8995 8996 9169 9185 9184 7 9168 8996 8997 9170 9184 9179 9176 6 9169 8997 8998 9171 9176 9175 6 9170 8998 8999 9000 9172 9175 6 9171 9000 9173 9008 9174 9175 7 9172 9000 9001 9003 9004 9005 9008 6 9172 9008 9009 9175 9176 9177 5 9172 9174 9176 9170 9171 6 9175 9174 9177 9179 9169 9170 7 9176 9174 9009 9010 9014 9178 9179 6 9177 9014 9179 9180 9181 9015 6 9177 9178 9180 9184 9169 9176 6 9179 9178 9181 9182 9183 9184 6 9180 9178 9015 9016 9017 9182 6 9181 9017 9180 9183 9187 9188 6 9180 9182 9184 9185 9186 9187 6 9180 9183 9185 9168 9169 9179 5 9184 9183 9186 9167 9168 6 9185 9183 9187 9290 9166 9167 6 9186 9183 9182 9188 9290 9291 6 9187 9182 9017 9018 9189 9291 5 9188 9018 9190 9291 9292 6 9189 9018 9019 9191 9292 9193 6 9190 9019 9020 9021 9192 9193 6 9191 9021 9022 9193 9194 9195 6 9191 9192 9194 9292 9190 9293 6 9193 9192 9195 9293 9294 9295 6 9194 9192 9022 9196 9295 9296 6 9195 9022 9023 9197 9302 9296 7 9196 9023 9024 9027 9198 9302 9303 6 9197 9027 9028 9199 9200 9303 6 9198 9028 9200 9201 9202 9203 6 9198 9199 9201 9303 9301 9304 6 9200 9199 9202 9304 9305 9306 6 9201 9199 9203 9306 9307 9204 6 9202 9199 9028 9029 9031 9204 7 9203 9031 9032 9205 9307 9202 9206 5 9204 9032 9034 9037 9206 6 9205 9037 9207 9307 9204 9308 6 9206 9037 9038 9208 9308 9309 6 9207 9038 9209 9309 9310 9314 6 9208 9038 9039 9062 9211 9314 6 9060 9041 9043 9059 9056 9044 6 9209 9062 9063 9212 9314 9315 6 9211 9063 9064 9213 9315 9316 6 9212 9064 9065 9214 9319 9316 6 9213 9065 9215 9319 9320 9321 6 9214 9065 9066 9067 9216 9321 6 9215 9067 9068 9069 9217 9321 7 9216 9069 9218 9321 9320 9322 9323 5 9217 9069 9070 9219 9323 7 9218 9070 9071 9220 9323 9324 9325 5 9219 9071 9072 9221 9325 7 9220 9072 9073 9222 9325 9326 9327 6 9221 9073 9223 9224 9327 9328 5 9222 9073 9074 9224 9225 6 9222 9223 9225 9328 9329 9330 6 9224 9223 9074 9075 9226 9330 7 9225 9075 9076 9077 9227 9330 9331 6 9226 9077 9228 9331 9332 9229 6 9227 9077 9078 9079 9080 9229 7 9228 9080 9230 9332 9227 9333 9334 6 9229 9080 9081 9231 9334 9335 6 9230 9081 9082 9232 9335 9336 7 9231 9082 9083 9085 9233 9336 9337 5 9232 9085 9087 9234 9337 7 9233 9087 9089 9235 9337 9338 9339 5 9234 9089 9095 9236 9339 7 9235 9095 9237 9339 9340 9341 9342 6 9236 9095 9096 9238 9342 9343 6 9237 9096 9239 9343 9344 9345 6 9238 9096 9097 9240 9345 9346 6 9239 9097 9098 9241 9346 9347 6 9240 9098 9242 9347 9245 9243 6 9241 9098 9099 9101 9102 9243 6 9242 9102 9103 9244 9245 9241 6 9243 9103 9245 9110 9109 9104 6 9243 9244 9110 9347 9241 9348 6 9116 9117 9247 9353 9354 9355 6 9246 9117 9118 9248 9355 9356 6 9247 9118 9119 9120 9249 9356 6 9248 9120 9250 9356 9357 9358 6 9249 9120 9121 9251 9358 9252 6 9250 9121 9122 9123 9124 9252 7 9251 9124 9125 9253 9358 9250 9359 5 9252 9125 9254 9359 9360 7 9253 9125 9126 9127 9255 9360 9361 6 9254 9127 9128 9256 9361 9362 6 9255 9128 9257 9362 9363 9364 6 9256 9128 9129 9130 9258 9364 7 9257 9130 9131 9259 9364 9365 9366 6 9258 9131 9132 9260 9366 9367 6 9259 9132 9133 9261 9367 9368 6 9260 9133 9134 9262 9368 9369 6 9261 9134 9135 9263 9369 9370 6 9262 9135 9264 9370 9371 9372 6 9263 9135 9136 9137 9265 9372 6 9264 9137 9138 9266 9372 9373 6 9265 9138 9139 9267 9373 9374 6 9266 9139 9140 9268 9374 9375 7 9267 9140 9141 9142 9269 9375 9376 5 9268 9142 9270 9376 9377 6 9269 9142 9143 9271 9377 9381 6 9270 9143 9272 9381 9382 9383 6 9271 9143 9144 9145 9273 9383 6 9272 9145 9146 9274 9383 9384 6 9273 9146 9148 9275 9384 9385 7 9274 9148 9149 9150 9276 9385 9386 5 9275 9150 9277 9386 9388 6 9276 9150 9151 9278 9388 9389 6 9277 9151 9152 9279 9389 9390 6 9278 9152 9153 9280 9390 9391 5 9279 9153 9154 9281 9391 6 9280 9154 9155 9282 9393 9391 6 9281 9155 9156 9283 9393 9394 6 9282 9156 9284 9394 9395 9396 6 9283 9156 9157 9285 9396 9397 6 9284 9157 9158 9159 9286 9397 6 9285 9159 9160 9287 9397 9398 5 9286 9160 9162 9288 9398 7 9287 9162 9289 9398 9399 9400 9401 6 9288 9162 9163 9166 9290 9401 7 9289 9166 9186 9187 9291 9402 9401 6 9290 9187 9188 9189 9292 9402 7 9291 9189 9190 9193 9293 9402 9400 6 9292 9193 9194 9294 9400 9403 6 9293 9194 9295 9403 9404 9405 6 9294 9194 9195 9296 9297 9405 6 9295 9195 9297 9298 9302 9196 6 9295 9296 9298 9299 9405 9406 6 9297 9296 9299 9300 9301 9302 6 9297 9298 9300 9409 9406 9410 6 9299 9298 9301 9410 9411 9412 7 9300 9298 9302 9303 9200 9304 9412 6 9301 9298 9296 9196 9197 9303 5 9302 9197 9198 9200 9301 5 9301 9200 9201 9305 9412 7 9304 9201 9306 9412 9413 9414 9418 5 9305 9201 9202 9307 9418 6 9306 9202 9204 9206 9308 9418 6 9307 9206 9207 9309 9417 9418 6 9308 9207 9208 9310 9311 9417 6 9309 9208 9311 9312 9313 9314 6 9309 9310 9312 9416 9417 9419 6 9311 9310 9313 9419 9420 9424 7 9312 9310 9314 9424 9425 9317 9315 6 9313 9310 9208 9209 9211 9315 6 9314 9211 9212 9316 9317 9313 6 9315 9212 9317 9318 9319 9213 6 9315 9316 9318 9425 9313 9426 6 9317 9316 9319 9426 9427 9428 6 9318 9316 9213 9214 9320 9428 6 9319 9214 9321 9217 9322 9428 5 9320 9214 9215 9216 9217 6 9320 9217 9323 9428 9429 9430 6 9322 9217 9218 9219 9324 9430 6 9323 9219 9325 9430 9431 9432 6 9324 9219 9220 9221 9326 9432 6 9325 9221 9327 9432 9433 9434 6 9326 9221 9222 9328 9434 9435 5 9327 9222 9224 9329 9435 7 9328 9224 9330 9435 9436 9437 9438 6 9329 9224 9225 9226 9331 9438 6 9330 9226 9227 9332 9438 9439 6 9331 9227 9229 9333 9442 9439 6 9332 9229 9334 9442 9443 9446 5 9333 9229 9230 9335 9446 6 9334 9230 9231 9336 9446 9447 6 9335 9231 9232 9337 9447 9448 6 9336 9232 9233 9234 9338 9448 6 9337 9234 9339 9448 9449 9450 6 9338 9234 9235 9236 9340 9450 6 9339 9236 9341 9450 9451 9452 6 9340 9236 9342 9452 9453 9454 6 9341 9236 9237 9343 9454 9455 5 9342 9237 9238 9344 9455 7 9343 9238 9345 9455 9456 9457 9458 6 9344 9238 9239 9346 9458 9349 5 9345 9239 9240 9347 9349 6 9346 9240 9241 9245 9348 9349 6 9347 9245 9349 9350 9111 9110 7 9347 9348 9350 9458 9345 9346 9351 6 9349 9348 9111 9112 9113 9351 7 9350 9113 9114 9352 9458 9349 9459 6 9351 9114 9115 9353 9459 9460 6 9352 9115 9116 9246 9354 9460 6 9353 9246 9355 9460 9461 9462 6 9354 9246 9247 9356 9462 9463 6 9355 9247 9248 9249 9357 9463 6 9356 9249 9358 9463 9464 9465 6 9357 9249 9250 9252 9359 9465 5 9358 9252 9253 9360 9465 7 9359 9253 9254 9361 9465 9466 9467 5 9360 9254 9255 9362 9467 6 9361 9255 9256 9363 9467 9468 6 9362 9256 9364 9468 9469 9470 6 9363 9256 9257 9258 9365 9470 6 9364 9258 9366 9470 9471 9472 5 9365 9258 9259 9367 9472 6 9366 9259 9260 9368 9472 9473 6 9367 9260 9261 9369 9473 9474 6 9368 9261 9262 9370 9474 9475 6 9369 9262 9263 9371 9475 9476 6 9370 9263 9372 9476 9477 9478 6 9371 9263 9264 9265 9373 9478 6 9372 9265 9266 9374 9478 9479 6 9373 9266 9267 9375 9479 9480 6 9374 9267 9268 9376 9480 9481 6 9375 9268 9269 9377 9378 9481 7 9376 9269 9270 9378 9379 9380 9381 5 9376 9377 9379 9481 9482 6 9378 9377 9380 9482 9483 9484 6 9379 9377 9381 9484 9485 9382 5 9380 9377 9270 9271 9382 6 9381 9271 9383 9485 9380 9486 7 9382 9271 9272 9273 9384 9486 9487 6 9383 9273 9274 9385 9487 9488 6 9384 9274 9275 9386 9387 9488 5 9385 9275 9276 9387 9388 6 9385 9386 9388 9488 9489 9490 7 9387 9386 9276 9277 9389 9490 9491 6 9388 9277 9278 9390 9491 9492 6 9389 9278 9279 9391 9392 9492 6 9390 9279 9392 9393 9281 9280 6 9390 9391 9393 9492 9493 9494 6 9392 9391 9281 9282 9394 9494 6 9393 9282 9283 9395 9494 9495 6 9394 9283 9396 9495 9496 9497 6 9395 9283 9284 9397 9498 9497 6 9396 9284 9285 9286 9398 9498 6 9397 9286 9287 9288 9399 9498 6 9398 9288 9400 9498 9404 9403 7 9399 9288 9401 9402 9292 9293 9403 5 9400 9288 9402 9290 9289 5 9400 9401 9290 9291 9292 5 9400 9293 9294 9404 9399 6 9403 9294 9405 9498 9399 9407 6 9404 9294 9295 9297 9406 9407 6 9405 9297 9407 9408 9409 9299 6 9405 9406 9408 9497 9498 9404 6 9407 9406 9409 9496 9497 9499 6 9408 9406 9299 9410 9499 9500 6 9409 9299 9300 9411 9500 9501 6 9410 9300 9412 9501 9502 9413 6 9411 9300 9301 9304 9305 9413 6 9412 9305 9414 9415 9502 9411 6 9413 9305 9415 9416 9417 9418 6 9413 9414 9416 9502 9503 9504 6 9415 9414 9417 9311 9419 9504 6 9416 9414 9418 9308 9309 9311 6 9417 9414 9308 9307 9306 9305 6 9416 9311 9312 9420 9421 9504 6 9419 9312 9421 9422 9423 9424 6 9419 9420 9422 9504 9505 9506 6 9421 9420 9423 9506 9507 9508 6 9422 9420 9424 9511 9508 9512 6 9423 9420 9312 9313 9425 9512 5 9424 9313 9317 9426 9512 6 9425 9317 9318 9427 9512 9513 6 9426 9318 9428 9513 9514 9429 6 9427 9318 9319 9320 9322 9429 6 9428 9322 9430 9517 9514 9427 6 9429 9322 9323 9324 9431 9517 6 9430 9324 9432 9524 9517 9525 6 9431 9324 9325 9326 9433 9525 6 9432 9326 9434 9525 9526 9527 6 9433 9326 9327 9435 9527 9528 6 9434 9327 9328 9329 9436 9528 6 9435 9329 9437 9528 9530 9531 6 9436 9329 9438 9531 9532 9440 6 9437 9329 9330 9331 9439 9440 6 9438 9331 9440 9441 9442 9332 5 9438 9439 9441 9532 9437 7 9440 9439 9442 9443 9444 9532 9533 5 9441 9439 9332 9333 9443 6 9442 9333 9441 9444 9445 9446 5 9441 9443 9445 9533 9534 6 9444 9443 9446 9534 9535 9536 7 9445 9443 9333 9334 9335 9447 9536 6 9446 9335 9336 9448 9536 9537 6 9447 9336 9337 9338 9449 9537 6 9448 9338 9450 9537 9538 9451 5 9449 9338 9339 9340 9451 7 9450 9340 9452 9538 9449 9539 9540 6 9451 9340 9341 9453 9540 9541 6 9452 9341 9454 9541 9542 9543 6 9453 9341 9342 9455 9543 9544 6 9454 9342 9343 9344 9456 9544 6 9455 9344 9457 9544 9545 9461 6 9456 9344 9458 9461 9460 9459 6 9457 9344 9345 9349 9351 9459 5 9458 9351 9352 9460 9457 6 9459 9352 9353 9354 9461 9457 6 9460 9354 9462 9545 9456 9457 5 9461 9354 9355 9463 9545 7 9462 9355 9356 9357 9464 9545 9546 6 9463 9357 9465 9546 9547 9548 7 9464 9357 9358 9359 9360 9466 9548 6 9465 9360 9467 9548 9549 9550 6 9466 9360 9361 9362 9468 9550 6 9467 9362 9363 9469 9550 9551 6 9468 9363 9470 9551 9552 9553 6 9469 9363 9364 9365 9471 9553 6 9470 9365 9472 9553 9554 9555 6 9471 9365 9366 9367 9473 9555 6 9472 9367 9368 9474 9555 9556 6 9473 9368 9369 9475 9556 9557 6 9474 9369 9370 9476 9557 9558 6 9475 9370 9371 9477 9558 9559 6 9476 9371 9478 9559 9560 9561 6 9477 9371 9372 9373 9479 9561 6 9478 9373 9374 9480 9561 9562 6 9479 9374 9375 9481 9562 9563 6 9480 9375 9376 9378 9482 9563 6 9481 9378 9379 9483 9563 9564 6 9482 9379 9484 9564 9565 9566 6 9483 9379 9380 9485 9566 9567 6 9484 9380 9382 9486 9567 9568 6 9485 9382 9383 9487 9568 9569 6 9486 9383 9384 9488 9569 9570 6 9487 9384 9385 9387 9489 9570 6 9488 9387 9490 9570 9571 9572 6 9489 9387 9388 9491 9572 9573 6 9490 9388 9389 9492 9573 9574 6 9491 9389 9390 9392 9493 9574 6 9492 9392 9494 9574 9575 9576 6 9493 9392 9393 9394 9495 9576 6 9494 9394 9395 9496 9576 9577 6 9495 9395 9497 9408 9499 9577 6 9496 9395 9408 9407 9498 9396 7 9407 9497 9396 9397 9398 9399 9404 5 9496 9408 9409 9500 9577 7 9499 9409 9410 9501 9577 9578 9579 6 9500 9410 9411 9502 9579 9580 6 9501 9411 9413 9415 9503 9580 6 9502 9415 9504 9580 9581 9582 7 9503 9415 9416 9419 9421 9505 9582 5 9504 9421 9506 9582 9583 6 9505 9421 9422 9507 9583 9584 6 9506 9422 9508 9509 9584 9585 6 9507 9422 9509 9510 9511 9423 6 9507 9508 9510 9585 9586 9587 6 9509 9508 9511 9518 9587 9521 6 9510 9508 9423 9512 9518 9519 7 9511 9423 9424 9425 9426 9513 9519 6 9512 9426 9427 9514 9515 9519 6 9513 9427 9515 9516 9517 9429 6 9513 9514 9516 9519 9518 9520 6 9515 9514 9517 9523 9520 9524 6 9516 9514 9429 9430 9524 9431 6 9510 9511 9519 9515 9520 9521 5 9518 9511 9512 9513 9515 6 9518 9515 9521 9522 9523 9516 6 9518 9520 9522 9587 9510 9588 6 9521 9520 9523 9588 9589 9590 6 9522 9520 9516 9524 9590 9591 6 9523 9516 9517 9431 9525 9591 7 9524 9431 9432 9433 9526 9591 9592 5 9525 9433 9527 9592 9593 6 9526 9433 9434 9528 9529 9593 6 9527 9434 9435 9436 9529 9530 6 9527 9528 9530 9593 9594 9595 6 9529 9528 9436 9531 9595 9596 6 9530 9436 9437 9532 9596 9597 7 9531 9437 9440 9441 9533 9597 9598 5 9532 9441 9444 9534 9598 7 9533 9444 9445 9535 9598 9599 9600 6 9534 9445 9536 9600 9601 9602 7 9535 9445 9446 9447 9537 9602 9603 6 9536 9447 9448 9449 9538 9603 6 9537 9449 9451 9539 9603 9604 6 9538 9451 9540 9604 9605 9606 6 9539 9451 9452 9541 9606 9607 5 9540 9452 9453 9542 9607 7 9541 9453 9543 9607 9608 9609 9610 5 9542 9453 9454 9544 9610 7 9543 9454 9455 9456 9545 9610 9546 6 9544 9456 9461 9462 9463 9546 6 9545 9463 9464 9547 9610 9544 6 9546 9464 9548 9610 9609 9549 5 9547 9464 9465 9466 9549 6 9548 9466 9550 9609 9547 9611 6 9549 9466 9467 9468 9551 9611 6 9550 9468 9469 9552 9611 9612 6 9551 9469 9553 9612 9613 9614 6 9552 9469 9470 9471 9554 9614 6 9553 9471 9555 9614 9615 9616 6 9554 9471 9472 9473 9556 9616 6 9555 9473 9474 9557 9616 9617 6 9556 9474 9475 9558 9617 9618 6 9557 9475 9476 9559 9618 9619 6 9558 9476 9477 9560 9619 9620 6 9559 9477 9561 9620 9621 9622 6 9560 9477 9478 9479 9562 9622 6 9561 9479 9480 9563 9622 9623 6 9562 9480 9481 9482 9564 9623 6 9563 9482 9483 9565 9623 9624 6 9564 9483 9566 9624 9625 9626 6 9565 9483 9484 9567 9626 9627 6 9566 9484 9485 9568 9627 9628 7 9567 9485 9486 9569 9628 9629 9630 6 9568 9486 9487 9570 9630 9631 6 9569 9487 9488 9489 9571 9631 6 9570 9489 9572 9631 9632 9633 6 9571 9489 9490 9573 9633 9634 6 9572 9490 9491 9574 9634 9635 6 9573 9491 9492 9493 9575 9635 6 9574 9493 9576 9635 9636 9578 6 9575 9493 9494 9495 9577 9578 6 9576 9495 9496 9499 9500 9578 6 9577 9500 9579 9636 9575 9576 6 9578 9500 9501 9580 9636 9581 5 9579 9501 9502 9503 9581 6 9580 9503 9582 9636 9579 9637 6 9581 9503 9504 9505 9583 9637 6 9582 9505 9506 9584 9637 9638 6 9583 9506 9507 9585 9638 9633 6 9584 9507 9509 9586 9633 9632 6 9585 9509 9587 9632 9639 9629 6 9586 9509 9510 9521 9588 9629 6 9587 9521 9522 9589 9629 9628 6 9588 9522 9590 9628 9627 9640 6 9589 9522 9523 9591 9640 9641 6 9590 9523 9524 9525 9592 9641 6 9591 9525 9526 9593 9641 9642 7 9592 9526 9527 9529 9594 9642 9643 5 9593 9529 9595 9643 9644 6 9594 9529 9530 9596 9644 9645 6 9595 9530 9531 9597 9645 9646 6 9596 9531 9532 9598 9646 9647 6 9597 9532 9533 9534 9599 9647 5 9598 9534 9600 9647 9648 7 9599 9534 9535 9601 9648 9649 9650 5 9600 9535 9602 9650 9651 6 9601 9535 9536 9603 9651 9604 5 9602 9536 9537 9538 9604 6 9603 9538 9539 9605 9651 9602 6 9604 9539 9606 9651 9652 9653 6 9605 9539 9540 9607 9653 9613 6 9606 9540 9541 9542 9608 9613 6 9607 9542 9609 9613 9612 9611 6 9608 9542 9610 9547 9549 9611 6 9609 9542 9543 9544 9546 9547 6 9609 9549 9550 9551 9612 9608 5 9611 9551 9552 9613 9608 7 9612 9552 9614 9653 9606 9607 9608 6 9613 9552 9553 9554 9615 9653 6 9614 9554 9616 9653 9652 9654 6 9615 9554 9555 9556 9617 9654 6 9616 9556 9557 9618 9654 9655 6 9617 9557 9558 9619 9655 9656 6 9618 9558 9559 9620 9656 9657 6 9619 9559 9560 9621 9657 9658 6 9620 9560 9622 9658 9659 9660 6 9621 9560 9561 9562 9623 9660 6 9622 9562 9563 9564 9624 9660 7 9623 9564 9565 9625 9660 9661 9662 5 9624 9565 9626 9662 9663 7 9625 9565 9566 9627 9663 9664 9640 6 9626 9566 9567 9628 9589 9640 6 9627 9567 9568 9629 9588 9589 7 9628 9568 9630 9639 9586 9587 9588 5 9629 9568 9569 9631 9639 6 9630 9569 9570 9571 9632 9639 6 9631 9571 9633 9585 9586 9639 7 9632 9571 9572 9634 9638 9584 9585 6 9633 9572 9573 9635 9637 9638 6 9634 9573 9574 9575 9636 9637 6 9635 9575 9578 9579 9581 9637 7 9636 9581 9582 9583 9638 9635 9634 5 9637 9583 9584 9633 9634 5 9632 9586 9629 9630 9631 6 9627 9589 9590 9641 9664 9626 6 9640 9590 9591 9592 9642 9664 6 9641 9592 9593 9643 9664 9663 6 9642 9593 9594 9644 9663 9662 7 9643 9594 9595 9645 9662 9661 9665 7 9644 9595 9596 9646 9665 9659 9666 6 9645 9596 9597 9647 9666 9667 6 9646 9597 9598 9599 9648 9667 6 9647 9599 9600 9649 9667 9668 6 9648 9600 9650 9668 9656 9655 6 9649 9600 9601 9651 9655 9669 7 9650 9601 9602 9604 9605 9652 9669 6 9651 9605 9653 9615 9654 9669 6 9652 9605 9606 9613 9614 9615 6 9652 9615 9616 9617 9655 9669 7 9654 9617 9618 9656 9649 9650 9669 6 9655 9618 9619 9657 9668 9649 5 9656 9619 9620 9658 9668 6 9657 9620 9621 9659 9668 9666 6 9658 9621 9660 9665 9645 9666 7 9659 9621 9622 9623 9624 9661 9665 5 9660 9624 9662 9644 9665 6 9661 9624 9625 9663 9643 9644 6 9662 9625 9626 9664 9642 9643 5 9663 9626 9640 9641 9642 5 9661 9644 9645 9659 9660 6 9659 9645 9646 9667 9668 9658 5 9666 9646 9647 9648 9668 7 9667 9648 9649 9656 9657 9658 9666 5 9655 9650 9651 9652 9654 6 6653 6650 6651 9671 9691 9681 6 9670 6651 9672 9676 9680 9681 6 9671 6651 9673 9674 9675 9676 6 9672 6651 9674 6649 9727 6365 6 9672 9673 9675 9725 9726 9727 6 9672 9674 9676 9677 9678 9725 6 9672 9675 9677 9679 9680 9671 5 9676 9675 9678 5235 9679 7 9677 9675 5235 9734 4519 9725 9733 6 9677 5235 5236 9676 9680 9683 7 9676 9679 9671 9681 9682 4654 9683 6 9671 9680 9682 9691 9670 9685 5 9681 9680 4654 4655 9685 6 4654 9680 9679 5236 4652 9684 6 4652 9683 4650 422 5237 5236 6 9682 4655 9686 9687 9691 9681 6 9685 4655 9687 3169 9688 4656 6 9685 9686 3169 3170 9691 3172 7 3169 9686 4656 9689 3168 2843 9690 5 9688 4656 5380 430 9690 6 2843 9688 9689 430 2841 429 6 9685 9687 3172 6653 9670 9681 6 6475 6478 6474 9779 9774 9780 6 6460 6461 6465 6467 6377 6378 6 5862 5863 9695 9702 9703 9700 6 9694 5863 5864 9696 5719 9700 5 9695 5864 5865 5718 5719 6 5718 5865 5866 5867 9698 9699 6 9697 5867 9699 5695 5694 5868 5 9697 9698 5695 5696 5718 6 9695 5719 5720 9701 9702 9694 5 9700 5720 5721 5724 9702 6 9701 5724 6095 9703 9694 9700 6 9702 6095 6383 9694 5862 5861 6 6490 2252 415 2194 6488 6489 7 6488 2195 6487 6480 2196 9773 9778 5 2251 6491 3336 6492 3335 6 3335 6492 3334 6499 6493 6494 6 6502 6503 9709 2189 9711 9712 6 6502 9708 2189 6501 9710 2190 6 6501 9709 6500 2190 2191 2512 7 9708 6503 6512 9712 9715 9716 9717 5 9708 9711 2189 9713 9715 6 2189 9712 2187 2197 9714 9715 6 2197 9713 9715 2215 2216 9720 6 9714 9713 9712 9711 9716 2215 7 9715 9711 9717 9718 9719 2214 2215 6 9716 9711 6512 6513 6514 9718 5 9717 6514 6516 9719 9716 5 9718 6516 9716 2214 6522 6 9714 2216 2217 2200 2198 2197 6 6669 6775 9722 9723 6656 6658 5 9721 6775 9723 9724 9798 6 9721 9722 9724 6646 6656 6655 6 9723 9722 6646 6645 9799 9798 6 9675 9674 9726 9678 9733 9735 6 9725 9674 9727 9729 9735 9728 6 9726 9674 9673 6365 6366 9728 6 9727 6366 6368 6370 9729 9726 6 9728 6370 9730 9731 9735 9726 6 9729 6370 6371 6375 6467 9731 6 9730 6467 6466 9732 9735 9729 6 9731 6466 6468 7510 9733 9735 6 9732 7510 9734 9735 9678 9725 6 9733 7510 7508 4518 4519 9678 6 9732 9733 9731 9729 9726 9725 6 6041 6039 6038 6019 5872 5874 6 6132 6398 6392 6393 6115 9738 6 9737 6115 6116 6132 6131 6122 6 569 571 9740 9744 568 9743 6 9739 571 573 9741 9742 9743 6 9740 573 916 917 9742 918 6 9740 9741 918 9743 921 919 6 9740 9742 921 563 9744 9739 6 9743 563 564 567 568 9739 6 7205 7206 9746 7218 7217 7216 6 9745 7206 7207 7213 7216 7214 6 3491 3492 3496 3502 6706 6555 5 6706 3502 9749 3503 6710 5 6706 9748 6710 6707 6705 5 6682 5157 4667 6681 9761 5 3201 3470 3410 3200 3411 6 5932 5910 5915 5916 9755 5931 5 4915 4917 9754 4880 4879 7 9753 4917 4911 4880 9756 4904 9759 7 9752 5916 5931 5921 5920 5919 9758 6 4880 9754 9757 4895 4897 9759 5 4880 9756 4895 4884 4881 5 5919 9755 5918 5916 5917 6 9754 4904 4901 4898 4897 9756 6 4638 4912 4875 4872 4869 4868 7 6681 9750 4667 4668 9762 4560 9792 5 9761 4668 4546 4548 4560 5 8468 8469 9764 9765 8486 5 8468 9763 9765 7726 7962 7 9764 9763 8486 7714 7715 7723 7726 6 8023 8021 7738 7739 7740 7742 5 7723 7715 7716 7719 7721 6 427 7500 7502 9769 46 45 6 9768 7502 9770 9772 44 45 7 9769 7502 7503 9771 9772 9774 9780 7 2196 43 1 9772 9770 9773 9774 5 9771 1 9770 9769 44 6 2196 9771 9774 9705 9778 9779 6 9773 9771 9770 9779 9692 9780 6 7253 7256 7523 7520 7517 7516 6 2095 2083 2084 6093 3138 3131 5 6638 6639 6642 6787 6785 5 9705 9773 9779 6478 6480 5 9778 9773 9774 9692 6478 5 9692 9774 6474 9770 7503 6 3852 3129 26 25 1526 3130 6 6787 6642 6643 9783 6789 6170 5 9782 6643 6168 6169 6170 6 4396 4529 4395 4121 4119 4530 6 6637 6783 6779 6636 6635 6771 6 4118 3529 3531 9787 9789 4120 6 9786 3531 3533 9788 7174 9789 6 9787 3533 3535 7178 7175 7174 6 9787 7174 9786 4120 4122 7172 5 7670 7695 7696 7698 7669 6 7775 3145 4231 3413 3414 7776 6 4560 6675 6676 6677 6681 9761 6 3659 3660 4908 9794 4369 4371 5 9793 4908 4642 4370 4369 6 5543 5545 5700 5540 5541 5542 6 6177 6178 9797 9798 6181 9799 6 6782 6177 9796 9798 6776 6780 7 9797 9796 6776 9799 9724 9722 6775 6 9796 6181 6183 6645 9724 9798 scotchpy/scotchpy/data/bump_b100000.grf000066400000000000000000014767761505500072100201130ustar00rootroot000000000000000 9800 57978 100000 000 3 100413 100407 100006 4 109771 100043 109772 100044 4 100076 101474 101475 100077 3 101242 100147 100148 3 100693 100206 100207 3 100521 100348 100349 4 100007 100412 100413 100000 4 100006 100412 100008 100647 4 100009 103238 100647 100007 4 103235 103238 100008 100010 4 100011 103233 103235 100009 4 103234 103233 100010 100012 4 103684 103234 100011 100013 4 100014 100418 103684 100012 4 100015 100417 100418 100013 4 100014 100417 100016 103088 4 100017 103086 103088 100015 4 100016 103086 103087 100018 4 103087 100017 103095 100019 4 103095 100018 103096 100020 4 100021 100414 103096 100019 4 100020 100414 101171 100022 4 101171 100021 101172 100023 4 101172 100022 101173 100024 4 101173 100023 101526 100025 4 101526 100024 100026 109781 4 100027 103852 109781 100025 4 100028 102179 103852 100026 4 100027 102179 102180 100029 4 102180 100028 100030 102503 4 100031 102505 102503 100029 4 102508 102505 100030 100032 4 103330 102508 100033 100031 4 103330 100032 103331 100034 4 100035 102248 103331 100033 4 100034 102248 102249 100036 4 102249 100035 102250 100037 4 100038 100416 102250 100036 4 100039 100415 100416 100037 4 100038 100415 102194 100040 4 102194 100039 102195 100041 4 102195 100040 102196 100042 3 102196 100041 100043 4 100042 102196 109771 100001 4 109769 109772 100001 100045 4 100046 109768 109769 100044 4 100047 100427 109768 100045 4 100048 100426 100427 100046 4 100047 100426 100049 100411 4 100050 100410 100411 100048 4 100049 100410 100051 100421 4 100050 100421 100422 100052 4 100422 100051 104650 100053 4 104650 100052 104651 100054 4 104657 104651 100053 100055 4 105380 104657 100054 100056 4 100057 100430 105380 100055 4 100056 100430 100429 100058 4 100059 100408 100429 100057 4 100058 100408 102218 100060 4 102218 100059 102219 100061 4 102219 100060 102220 100062 4 102220 100061 102221 100063 4 102221 100062 102222 100064 4 106701 102222 100063 100065 4 106701 100064 106703 100066 4 106703 100065 103505 100067 4 100068 103452 103505 100066 4 100069 103451 103452 100067 4 103441 103451 100068 100070 4 100071 102491 103441 100069 4 100070 102491 102492 100072 4 100073 100409 102492 100071 4 100072 100409 100074 100428 4 100073 100428 100075 101603 4 100074 101603 101604 100076 4 100002 101474 101604 100075 4 101475 100002 101476 100078 4 101476 100077 101477 100079 4 101477 100078 101478 100080 4 101478 100079 101479 100081 4 101479 100080 101480 100082 4 101480 100081 101481 100083 4 101481 100082 101482 100084 4 101482 100083 101483 100085 4 100086 101160 101483 100084 4 100085 101160 101161 100087 4 101161 100086 101162 100088 4 101162 100087 101163 100089 4 101163 100088 101186 100090 4 101186 100089 101185 100091 4 101185 100090 101187 100092 4 101187 100091 101188 100093 4 101188 100092 101189 100094 4 101189 100093 101190 100095 4 101190 100094 101191 100096 4 101191 100095 101192 100097 4 101192 100096 101193 100098 4 101193 100097 101194 100099 4 101194 100098 101195 100100 4 101195 100099 101196 100101 4 101196 100100 101197 100102 4 101197 100101 101198 100103 4 101198 100102 101199 100104 4 101199 100103 101200 100105 4 101200 100104 101201 100106 4 101201 100105 101202 100107 4 101202 100106 101203 100108 4 101203 100107 101204 100109 4 101204 100108 101205 100110 4 101205 100109 101206 100111 4 101206 100110 101207 100112 4 101207 100111 101208 100113 4 101208 100112 101209 100114 4 101209 100113 101210 100115 4 101210 100114 101211 100116 4 101211 100115 101212 100117 4 101212 100116 101213 100118 4 101213 100117 101214 100119 4 101214 100118 101215 100120 4 101215 100119 101216 100121 4 101216 100120 101217 100122 4 101217 100121 101218 100123 4 101218 100122 101219 100124 4 101219 100123 101220 100125 4 101220 100124 101221 100126 4 101221 100125 101222 100127 4 101222 100126 101223 100128 4 101223 100127 101224 100129 4 101224 100128 101225 100130 4 101225 100129 101226 100131 4 101226 100130 101227 100132 4 101227 100131 101228 100133 4 101228 100132 101229 100134 4 101229 100133 101230 100135 4 101230 100134 101231 100136 4 101231 100135 101232 100137 4 101232 100136 101233 100138 4 101233 100137 101234 100139 4 101234 100138 101235 100140 4 101235 100139 101236 100141 4 101236 100140 101237 100142 4 101237 100141 101238 100143 4 101238 100142 101239 100144 4 101239 100143 101240 100145 4 101240 100144 101241 100146 4 101241 100145 101242 100147 3 101242 100146 100003 4 101242 100003 101243 100149 4 101243 100148 101244 100150 4 101244 100149 101245 100151 4 101245 100150 101246 100152 4 101246 100151 101247 100153 4 101247 100152 101248 100154 4 100155 100923 101248 100153 4 100154 100923 100924 100156 4 100924 100155 100925 100157 4 100925 100156 100926 100158 4 100926 100157 100927 100159 4 100927 100158 100928 100160 4 100928 100159 100929 100161 4 100929 100160 100930 100162 4 100930 100161 100931 100163 4 100164 100651 100931 100162 4 100163 100651 100652 100165 4 100652 100164 100653 100166 4 100653 100165 100654 100167 4 100654 100166 100655 100168 4 100655 100167 100656 100169 4 100656 100168 100657 100170 4 100657 100169 100658 100171 4 100658 100170 100659 100172 4 100659 100171 100660 100173 4 100660 100172 100661 100174 4 100661 100173 100662 100175 4 100662 100174 100663 100176 4 100663 100175 100664 100177 4 100664 100176 100665 100178 4 100665 100177 100666 100179 4 100666 100178 100667 100180 4 100667 100179 100668 100181 4 100668 100180 100669 100182 4 100669 100181 100670 100183 4 100670 100182 100671 100184 4 100671 100183 100672 100185 4 100672 100184 100673 100186 4 100673 100185 100674 100187 4 100674 100186 100675 100188 4 100675 100187 100676 100189 4 100676 100188 100677 100190 4 100677 100189 100678 100191 4 100678 100190 100679 100192 4 100679 100191 100680 100193 4 100680 100192 100681 100194 4 100681 100193 100682 100195 4 100682 100194 100683 100196 4 100683 100195 100684 100197 4 100684 100196 100685 100198 4 100685 100197 100686 100199 4 100686 100198 100687 100200 4 100687 100199 100688 100201 4 100688 100200 100689 100202 4 100689 100201 100690 100203 4 100690 100202 100691 100204 4 100691 100203 100692 100205 3 100692 100204 100206 4 100692 100205 100693 100004 3 100693 100004 100208 4 100693 100207 100694 100209 4 100694 100208 100695 100210 4 100695 100209 100696 100211 4 100696 100210 100697 100212 4 100697 100211 100698 100213 4 100698 100212 100699 100214 4 100699 100213 100700 100215 4 100700 100214 100701 100216 4 100701 100215 100702 100217 4 100702 100216 100703 100218 4 100703 100217 100704 100219 4 100704 100218 100705 100220 4 100705 100219 100706 100221 4 100706 100220 100707 100222 4 100707 100221 100708 100223 4 100708 100222 100709 100224 4 100709 100223 100710 100225 4 100710 100224 100711 100226 4 100711 100225 100712 100227 4 100712 100226 100713 100228 4 100713 100227 100714 100229 4 100714 100228 100715 100230 4 100715 100229 100716 100231 4 100716 100230 100717 100232 4 100717 100231 100718 100233 4 100718 100232 100719 100234 4 100719 100233 100720 100235 4 100720 100234 100721 100236 4 100721 100235 100722 100237 4 100722 100236 100723 100238 4 100723 100237 100724 100239 4 100724 100238 100725 100240 4 100725 100239 100726 100241 4 100726 100240 100727 100242 4 100727 100241 100728 100243 4 100728 100242 100729 100244 4 100729 100243 100730 100245 4 100730 100244 100731 100246 4 100731 100245 100732 100247 4 100732 100246 100733 100248 4 100733 100247 100734 100249 4 100734 100248 100735 100250 4 100735 100249 100736 100251 4 100736 100250 100737 100252 4 100737 100251 100738 100253 4 100738 100252 100739 100254 4 100739 100253 100740 100255 4 100740 100254 100741 100256 4 100741 100255 100742 100257 4 100258 100431 100742 100256 4 100257 100431 100432 100259 4 100432 100258 100433 100260 4 100433 100259 100434 100261 4 100434 100260 100435 100262 4 100435 100261 100436 100263 4 100436 100262 100437 100264 4 100437 100263 100438 100265 4 100438 100264 100439 100266 4 100439 100265 100440 100267 4 100440 100266 100441 100268 4 100441 100267 100442 100269 4 100442 100268 100443 100270 4 100443 100269 100444 100271 4 100444 100270 100445 100272 4 100445 100271 100446 100273 4 100446 100272 100447 100274 4 100447 100273 100448 100275 4 100448 100274 100449 100276 4 100449 100275 100450 100277 4 100450 100276 100451 100278 4 100451 100277 100452 100279 4 100452 100278 100453 100280 4 100453 100279 100454 100281 4 100454 100280 100455 100282 4 100455 100281 100456 100283 4 100456 100282 100457 100284 4 100457 100283 100458 100285 4 100458 100284 100459 100286 4 100459 100285 100460 100287 4 100460 100286 100461 100288 4 100461 100287 100462 100289 4 100462 100288 100463 100290 4 100463 100289 100464 100291 4 100464 100290 100465 100292 4 100465 100291 100466 100293 4 100466 100292 100467 100294 4 100467 100293 100468 100295 4 100468 100294 100469 100296 4 100469 100295 100470 100297 4 100470 100296 100471 100298 4 100471 100297 100472 100299 4 100472 100298 100473 100300 4 100473 100299 100474 100301 4 100474 100300 100475 100302 4 100475 100301 100476 100303 4 100476 100302 100477 100304 4 100477 100303 100478 100305 4 100478 100304 100479 100306 4 100479 100305 100480 100307 4 100480 100306 100481 100308 4 100481 100307 100482 100309 4 100482 100308 100483 100310 4 100483 100309 100484 100311 4 100484 100310 100485 100312 4 100485 100311 100486 100313 4 100486 100312 100487 100314 4 100487 100313 100488 100315 4 100488 100314 100489 100316 4 100489 100315 100490 100317 4 100490 100316 100491 100318 4 100491 100317 100492 100319 4 100492 100318 100493 100320 4 100493 100319 100494 100321 4 100494 100320 100495 100322 4 100495 100321 100496 100323 4 100496 100322 100497 100324 4 100497 100323 100498 100325 4 100498 100324 100499 100326 4 100499 100325 100500 100327 4 100500 100326 100501 100328 4 100501 100327 100502 100329 4 100502 100328 100503 100330 4 100503 100329 100504 100331 4 100504 100330 100505 100332 4 100505 100331 100506 100333 4 100506 100332 100507 100334 4 100507 100333 100508 100335 4 100508 100334 100509 100336 4 100509 100335 100510 100337 4 100510 100336 100511 100338 4 100511 100337 100512 100339 4 100512 100338 100513 100340 4 100513 100339 100514 100341 4 100514 100340 100515 100342 4 100515 100341 100516 100343 4 100516 100342 100517 100344 4 100517 100343 100518 100345 4 100518 100344 100519 100346 4 100519 100345 100520 100347 4 100520 100346 100521 100348 3 100521 100347 100005 4 100521 100005 100522 100350 4 100522 100349 100523 100351 4 100523 100350 100524 100352 4 100524 100351 100525 100353 4 100525 100352 100526 100354 4 100526 100353 100527 100355 4 100527 100354 100528 100356 4 100528 100355 100529 100357 4 100529 100356 100530 100358 4 100530 100357 100531 100359 4 100531 100358 100532 100360 4 100532 100359 100533 100361 4 100533 100360 100534 100362 4 100534 100361 100535 100363 4 100535 100362 100536 100364 4 100536 100363 100537 100365 4 100537 100364 100538 100366 4 100538 100365 100539 100367 4 100539 100366 100540 100368 4 100540 100367 100541 100369 4 100541 100368 100542 100370 4 100542 100369 100543 100371 4 100543 100370 100544 100372 4 100544 100371 100545 100373 4 100545 100372 100546 100374 4 100546 100373 100547 100375 4 100550 100547 100374 100376 4 100550 100375 100551 100377 4 100551 100376 100552 100378 4 100552 100377 100553 100379 4 100556 100553 100378 100380 4 100566 100556 100379 100381 4 100566 100380 100567 100382 4 100567 100381 100568 100383 4 100568 100382 100569 100384 4 100569 100383 100570 100385 4 100425 100570 100386 100384 4 100387 100423 100425 100385 4 100386 100423 100424 100388 4 100579 100424 100389 100387 4 100584 100579 100388 100390 4 100584 100389 100585 100391 4 100585 100390 100586 100392 4 100586 100391 100420 100393 4 100394 100419 100420 100392 4 100393 100419 100594 100395 4 100396 100596 100594 100394 4 100622 100596 100395 100397 4 100622 100396 100623 100398 4 100623 100397 100624 100399 4 100398 100624 100626 100400 4 100626 100399 100628 100401 4 100630 100628 100402 100400 4 100630 100401 100631 100403 4 100402 100631 102097 100404 4 100405 100649 102097 100403 4 100648 100649 100404 100406 4 100648 100405 100413 100407 3 100413 100406 100000 6 100058 100059 100429 102218 102545 102841 6 100072 100073 102492 102493 101606 100428 6 100049 100050 100411 104521 104515 100421 6 100049 100410 100048 100426 104514 104515 6 100006 100007 100413 100647 100646 100648 6 100006 100412 100648 100406 100407 100000 6 100020 100021 101171 103882 103128 103096 6 100038 100039 100416 102194 102252 109704 6 100038 100415 100037 102250 102251 102252 6 100014 100015 100418 103088 103098 103099 6 100014 100417 100013 103099 103100 103684 6 100393 100394 100420 100593 100588 100594 6 100393 100419 100586 100392 100587 100588 6 100050 100051 100422 105237 104521 100410 6 100421 100051 100052 104650 109684 105237 6 100386 100387 100424 100425 100577 100575 6 100423 100387 100577 100578 100579 100388 6 100386 100423 100572 100570 100385 100575 6 100047 100048 100427 100411 104514 105612 6 100047 100426 100046 105612 107500 109768 6 100073 100074 101603 101605 101606 100409 6 100058 100408 100430 100057 102841 109690 6 100056 100057 100429 109689 105380 109690 6 100257 100258 100432 100742 100743 100744 6 100431 100258 100259 100433 100744 100745 6 100432 100259 100260 100434 100745 100746 6 100433 100260 100261 100435 100746 100747 6 100434 100261 100262 100436 100747 100748 6 100435 100262 100263 100437 100748 100749 6 100436 100263 100264 100438 100749 100750 6 100437 100264 100265 100439 100750 100751 6 100438 100265 100266 100440 100751 100752 6 100439 100266 100267 100441 100752 100753 6 100440 100267 100268 100442 100753 100754 6 100441 100268 100269 100443 100754 100755 6 100442 100269 100270 100444 100755 100756 6 100443 100270 100271 100445 100756 100757 6 100444 100271 100272 100446 100757 100758 6 100445 100272 100273 100447 100758 100759 6 100446 100273 100274 100448 100759 100760 6 100447 100274 100275 100449 100760 100761 6 100448 100275 100276 100450 100761 100762 6 100449 100276 100277 100451 100762 100763 6 100450 100277 100278 100452 100763 100764 6 100451 100278 100279 100453 100764 100765 6 100452 100279 100280 100454 100765 100766 6 100453 100280 100281 100455 100766 100767 6 100454 100281 100282 100456 100767 100768 6 100455 100282 100283 100457 100768 100769 6 100456 100283 100284 100458 100769 100770 6 100457 100284 100285 100459 100770 100771 6 100458 100285 100286 100460 100771 100772 6 100459 100286 100287 100461 100772 100773 6 100460 100287 100288 100462 100773 100774 6 100461 100288 100289 100463 100774 100775 6 100462 100289 100290 100464 100775 100776 6 100463 100290 100291 100465 100776 100777 6 100464 100291 100292 100466 100777 100778 6 100465 100292 100293 100467 100778 100779 6 100466 100293 100294 100468 100779 100780 6 100467 100294 100295 100469 100780 100781 6 100468 100295 100296 100470 100781 100782 6 100469 100296 100297 100471 100782 100783 6 100470 100297 100298 100472 100783 100784 6 100471 100298 100299 100473 100784 100785 6 100472 100299 100300 100474 100785 100786 6 100473 100300 100301 100475 100786 100787 6 100474 100301 100302 100476 100787 100788 6 100475 100302 100303 100477 100788 100789 6 100476 100303 100304 100478 100789 100790 6 100477 100304 100305 100479 100790 100791 6 100478 100305 100306 100480 100791 100792 6 100479 100306 100307 100481 100792 100793 6 100480 100307 100308 100482 100793 100794 6 100481 100308 100309 100483 100794 100795 6 100482 100309 100310 100484 100795 100796 6 100483 100310 100311 100485 100796 100797 6 100484 100311 100312 100486 100797 100798 6 100485 100312 100313 100487 100798 100799 6 100486 100313 100314 100488 100799 100800 6 100487 100314 100315 100489 100800 100801 6 100488 100315 100316 100490 100801 100802 6 100489 100316 100317 100491 100802 100803 6 100490 100317 100318 100492 100803 100804 6 100491 100318 100319 100493 100804 100805 6 100492 100319 100320 100494 100805 100806 6 100493 100320 100321 100495 100806 100807 6 100494 100321 100322 100496 100807 100808 6 100495 100322 100323 100497 100808 100809 6 100496 100323 100324 100498 100809 100810 6 100497 100324 100325 100499 100810 100811 6 100498 100325 100326 100500 100811 100812 6 100499 100326 100327 100501 100812 100813 6 100500 100327 100328 100502 100813 100814 6 100501 100328 100329 100503 100814 100815 6 100502 100329 100330 100504 100815 100816 6 100503 100330 100331 100505 100816 100817 6 100504 100331 100332 100506 100817 100818 6 100505 100332 100333 100507 100818 100819 6 100506 100333 100334 100508 100819 100820 6 100507 100334 100335 100509 100820 100821 6 100508 100335 100336 100510 100821 100822 6 100509 100336 100337 100511 100822 100823 6 100510 100337 100338 100512 100823 100824 6 100511 100338 100339 100513 100824 100825 6 100512 100339 100340 100514 100825 100826 6 100513 100340 100341 100515 100826 100827 6 100514 100341 100342 100516 100827 100828 6 100515 100342 100343 100517 100828 100829 6 100516 100343 100344 100518 100829 100830 6 100517 100344 100345 100519 100830 100831 6 100518 100345 100346 100520 100831 100832 6 100519 100346 100347 100521 100832 100833 7 100520 100347 100348 100005 100349 100522 100833 6 100521 100349 100350 100523 100833 100834 5 100522 100350 100351 100524 100834 6 100523 100351 100352 100525 100834 100835 6 100524 100352 100353 100526 100835 100836 6 100525 100353 100354 100527 100836 100837 6 100526 100354 100355 100528 100837 100838 6 100527 100355 100356 100529 100838 100839 6 100528 100356 100357 100530 100839 100840 6 100529 100357 100358 100531 100840 100841 6 100530 100358 100359 100532 100841 100842 6 100531 100359 100360 100533 100842 100843 6 100532 100360 100361 100534 100843 100844 6 100533 100361 100362 100535 100844 100845 6 100534 100362 100363 100536 100845 100846 6 100535 100363 100364 100537 100846 100847 6 100536 100364 100365 100538 100847 100848 6 100537 100365 100366 100539 100848 100849 6 100538 100366 100367 100540 100849 100850 6 100539 100367 100368 100541 100853 100850 6 100540 100368 100369 100542 100855 100853 6 100541 100369 100370 100543 100855 100856 6 100542 100370 100371 100544 100856 100857 6 100543 100371 100372 100545 100857 100858 6 100544 100372 100373 100546 100858 100859 6 100545 100373 100374 100547 100548 100859 6 100546 100374 100548 100549 100550 100375 6 100546 100547 100549 100859 100860 100861 6 100548 100547 100550 100861 100862 100863 6 100549 100547 100375 100376 100551 100863 6 100550 100376 100377 100552 100863 100864 6 100551 100377 100378 100553 100554 100864 6 100552 100378 100554 100555 100556 100379 6 100552 100553 100555 100557 100864 100865 6 100554 100553 100556 100557 100558 100565 6 100555 100553 100379 100565 100566 100380 6 100554 100555 100558 100559 100865 100866 6 100557 100555 100559 100560 100561 100565 6 100557 100558 100560 100866 100867 100868 6 100559 100558 100561 100562 100922 100868 6 100560 100558 100562 100563 100564 100565 6 100560 100561 100563 100921 100920 100922 6 100562 100561 100564 109743 100921 109744 6 100563 100561 100565 100566 109744 100567 6 100564 100561 100558 100555 100556 100566 6 100565 100556 100380 100381 100567 100564 6 100566 100381 100382 100568 109744 100564 6 100567 100382 100383 100569 109744 109739 6 100568 100383 100384 100570 100571 109739 6 100569 100384 100571 100572 100425 100385 6 100569 100570 100572 100573 109739 109740 6 100571 100570 100425 100573 100574 100575 6 100571 100572 100574 109740 109741 100916 6 100573 100572 100575 100576 100916 100915 6 100574 100572 100425 100576 100577 100423 6 100574 100575 100577 100915 102474 101515 6 100576 100575 100423 100424 100578 101515 6 100577 100424 100579 100580 100581 101515 6 100578 100424 100388 100580 100584 100389 6 100578 100579 100581 100582 100583 100584 6 100578 100580 100582 101515 101516 101517 6 100581 100580 100583 101517 101508 101506 6 100582 100580 100584 100585 100589 101506 6 100583 100580 100579 100389 100390 100585 6 100584 100390 100391 100586 100589 100583 6 100585 100391 100392 100420 100587 100589 6 100586 100420 100588 100589 100590 100591 6 100587 100420 100591 100592 100593 100419 6 100586 100587 100590 100585 100583 101506 6 100589 100587 100591 101506 101507 101514 6 100590 100587 100588 100592 100599 101514 6 100591 100588 100593 100597 100598 100599 6 100592 100588 100419 100594 100595 100597 6 100593 100419 100394 100595 100596 100395 6 100593 100594 100596 100597 100621 100606 6 100595 100594 100621 100622 100396 100395 6 100593 100595 100592 100598 100605 100606 6 100592 100597 100599 100600 100604 100605 6 100592 100598 100600 100601 101514 100591 6 100599 100598 100601 100602 100603 100604 6 100599 100600 100602 101513 101514 101539 6 100601 100600 100603 101539 101540 101583 6 100602 100600 100604 101602 101583 100608 6 100603 100600 100598 100605 100607 100608 6 100604 100598 100597 100606 100607 100614 6 100605 100597 100621 100620 100595 100614 6 100604 100605 100608 100609 100610 100614 6 100604 100607 100609 101602 100603 101600 6 100608 100607 100610 100611 101599 101600 6 100609 100607 100611 100612 100613 100614 6 100609 100610 100612 106557 101598 101599 6 100611 100610 100613 100615 103764 106557 6 100612 100610 100614 100615 100616 100620 6 100613 100610 100620 100606 100605 100607 6 100612 100613 100616 100617 103760 103764 6 100615 100613 100617 100618 100619 100620 6 100615 100616 100618 103760 103761 100625 6 100617 100616 100619 100623 100624 100625 6 100618 100616 100620 100621 100623 100622 6 100619 100616 100613 100614 100621 100606 6 100619 100620 100606 100595 100596 100622 6 100621 100596 100396 100397 100623 100619 6 100622 100397 100398 100624 100618 100619 6 100623 100398 100618 100625 100626 100399 6 100618 100624 100626 100627 103761 100617 6 100625 100624 100627 100628 100399 100400 6 100625 100626 100628 100629 103761 103762 6 100627 100626 100629 100630 100401 100400 6 100627 100628 100630 100635 103762 100632 6 100629 100628 100401 100402 100631 100632 6 100630 100402 100632 100633 100403 102097 6 100630 100631 100633 100634 100635 100629 6 100632 100631 100634 102097 100650 100641 6 100632 100633 100635 100636 100637 100641 6 100632 100634 100636 103217 103762 100629 6 100635 100634 100637 100638 103217 103218 6 100636 100634 100638 100639 100640 100641 6 100636 100637 100639 103218 103219 103220 6 100638 100637 100640 103220 103239 103240 6 100639 100637 100641 100642 100643 103239 6 100640 100637 100642 100633 100650 100634 6 100640 100641 100643 100644 100645 100650 6 100640 100642 100644 103237 103236 103239 6 100643 100642 100645 100646 100647 103237 6 100644 100642 100646 100648 100649 100650 5 100644 100645 100647 100412 100648 7 100644 100646 100412 100008 103238 103237 100007 7 100412 100646 100645 100649 100405 100406 100413 6 100648 100645 100650 100405 100404 102097 6 100649 100645 100633 102097 100641 100642 6 100163 100164 100652 100931 100932 100933 6 100651 100164 100165 100653 100933 100934 6 100652 100165 100166 100654 100934 100935 6 100653 100166 100167 100655 100935 100936 6 100654 100167 100168 100656 100936 100937 6 100655 100168 100169 100657 100937 100938 6 100656 100169 100170 100658 100938 100939 6 100657 100170 100171 100659 100939 100940 6 100658 100171 100172 100660 100940 100941 6 100659 100172 100173 100661 100941 100942 6 100660 100173 100174 100662 100942 100943 6 100661 100174 100175 100663 100943 100944 6 100662 100175 100176 100664 100944 100945 6 100663 100176 100177 100665 100945 100946 6 100664 100177 100178 100666 100946 100947 6 100665 100178 100179 100667 100947 100948 6 100666 100179 100180 100668 100948 100949 6 100667 100180 100181 100669 100949 100950 6 100668 100181 100182 100670 100950 100951 6 100669 100182 100183 100671 100951 100952 6 100670 100183 100184 100672 100952 100953 6 100671 100184 100185 100673 100953 100954 6 100672 100185 100186 100674 100954 100955 6 100673 100186 100187 100675 100955 100956 6 100674 100187 100188 100676 100956 100957 6 100675 100188 100189 100677 100957 100958 6 100676 100189 100190 100678 100958 100959 6 100677 100190 100191 100679 100959 100960 6 100678 100191 100192 100680 100960 100961 6 100679 100192 100193 100681 100961 100962 6 100680 100193 100194 100682 100962 100963 6 100681 100194 100195 100683 100963 100964 6 100682 100195 100196 100684 100964 100965 6 100683 100196 100197 100685 100965 100966 6 100684 100197 100198 100686 100966 100967 6 100685 100198 100199 100687 100967 100968 6 100686 100199 100200 100688 100968 100969 6 100687 100200 100201 100689 100969 100970 6 100688 100201 100202 100690 100970 100971 6 100689 100202 100203 100691 100971 100972 6 100690 100203 100204 100692 100972 100973 7 100691 100204 100205 100206 100693 100973 100694 6 100692 100206 100004 100207 100208 100694 7 100693 100208 100209 100695 100973 100692 100974 6 100694 100209 100210 100696 100974 100975 6 100695 100210 100211 100697 100975 100976 6 100696 100211 100212 100698 100976 100977 6 100697 100212 100213 100699 100977 100978 6 100698 100213 100214 100700 100978 100979 6 100699 100214 100215 100701 100979 100980 6 100700 100215 100216 100702 100980 100981 6 100701 100216 100217 100703 100981 100982 6 100702 100217 100218 100704 100982 100983 6 100703 100218 100219 100705 100983 100984 6 100704 100219 100220 100706 100984 100985 6 100705 100220 100221 100707 100985 100986 6 100706 100221 100222 100708 100986 100987 6 100707 100222 100223 100709 100987 100988 6 100708 100223 100224 100710 100988 100989 6 100709 100224 100225 100711 100989 100990 6 100710 100225 100226 100712 100990 100991 6 100711 100226 100227 100713 100991 100992 6 100712 100227 100228 100714 100992 100993 6 100713 100228 100229 100715 100993 100994 6 100714 100229 100230 100716 100994 100995 6 100715 100230 100231 100717 100995 100996 6 100716 100231 100232 100718 100996 100997 6 100717 100232 100233 100719 100997 100998 6 100718 100233 100234 100720 100998 100999 6 100719 100234 100235 100721 100999 101000 6 100720 100235 100236 100722 101000 101001 6 100721 100236 100237 100723 101001 101002 6 100722 100237 100238 100724 101002 101003 6 100723 100238 100239 100725 101003 101004 6 100724 100239 100240 100726 101004 101005 6 100725 100240 100241 100727 101005 101006 6 100726 100241 100242 100728 101006 101007 6 100727 100242 100243 100729 101007 101008 6 100728 100243 100244 100730 101008 101009 6 100729 100244 100245 100731 101009 101010 6 100730 100245 100246 100732 101010 101011 6 100731 100246 100247 100733 101011 101012 6 100732 100247 100248 100734 101012 101013 6 100733 100248 100249 100735 101016 101013 6 100734 100249 100250 100736 101016 101017 6 100735 100250 100251 100737 101017 101018 6 100736 100251 100252 100738 101018 101019 6 100737 100252 100253 100739 101019 101020 6 100738 100253 100254 100740 101020 101021 6 100739 100254 100255 100741 101021 101022 6 100740 100255 100256 100742 101022 101023 6 100741 100256 100257 100431 100743 101023 6 100742 100431 100744 101023 101024 101025 6 100743 100431 100432 100745 101025 101026 6 100744 100432 100433 100746 101026 101027 6 100745 100433 100434 100747 101027 101028 6 100746 100434 100435 100748 101028 101029 6 100747 100435 100436 100749 101029 101030 6 100748 100436 100437 100750 101030 101031 6 100749 100437 100438 100751 101031 101032 6 100750 100438 100439 100752 101032 101033 6 100751 100439 100440 100753 101033 101034 6 100752 100440 100441 100754 101034 101035 6 100753 100441 100442 100755 101035 101036 6 100754 100442 100443 100756 101036 101037 6 100755 100443 100444 100757 101037 101038 6 100756 100444 100445 100758 101038 101039 6 100757 100445 100446 100759 101039 101040 6 100758 100446 100447 100760 101040 101041 6 100759 100447 100448 100761 101041 101042 6 100760 100448 100449 100762 101042 101043 6 100761 100449 100450 100763 101043 101044 6 100762 100450 100451 100764 101044 101045 6 100763 100451 100452 100765 101045 101046 6 100764 100452 100453 100766 101046 101047 6 100765 100453 100454 100767 101047 101048 6 100766 100454 100455 100768 101048 101049 6 100767 100455 100456 100769 101049 101050 6 100768 100456 100457 100770 101050 101051 6 100769 100457 100458 100771 101051 101052 6 100770 100458 100459 100772 101052 101053 6 100771 100459 100460 100773 101053 101054 6 100772 100460 100461 100774 101054 101055 6 100773 100461 100462 100775 101055 101056 6 100774 100462 100463 100776 101056 101057 6 100775 100463 100464 100777 101057 101058 6 100776 100464 100465 100778 101058 101059 6 100777 100465 100466 100779 101059 101060 6 100778 100466 100467 100780 101060 101061 6 100779 100467 100468 100781 101061 101062 6 100780 100468 100469 100782 101062 101063 6 100781 100469 100470 100783 101063 101064 6 100782 100470 100471 100784 101064 101065 6 100783 100471 100472 100785 101065 101066 6 100784 100472 100473 100786 101066 101067 6 100785 100473 100474 100787 101067 101068 6 100786 100474 100475 100788 101068 101069 6 100787 100475 100476 100789 101069 101070 6 100788 100476 100477 100790 101070 101071 6 100789 100477 100478 100791 101071 101072 6 100790 100478 100479 100792 101072 101073 6 100791 100479 100480 100793 101073 101074 6 100792 100480 100481 100794 101074 101075 6 100793 100481 100482 100795 101075 101076 6 100794 100482 100483 100796 101076 101077 6 100795 100483 100484 100797 101077 101078 6 100796 100484 100485 100798 101078 101079 6 100797 100485 100486 100799 101079 101080 6 100798 100486 100487 100800 101080 101081 6 100799 100487 100488 100801 101081 101082 6 100800 100488 100489 100802 101082 101083 6 100801 100489 100490 100803 101083 101084 6 100802 100490 100491 100804 101084 101085 6 100803 100491 100492 100805 101085 101086 6 100804 100492 100493 100806 101086 101087 6 100805 100493 100494 100807 101087 101088 6 100806 100494 100495 100808 101088 101089 6 100807 100495 100496 100809 101089 101090 6 100808 100496 100497 100810 101090 101091 6 100809 100497 100498 100811 101091 101092 6 100810 100498 100499 100812 101092 101093 6 100811 100499 100500 100813 101093 101094 6 100812 100500 100501 100814 101094 101095 6 100813 100501 100502 100815 101095 101096 6 100814 100502 100503 100816 101096 101097 6 100815 100503 100504 100817 101097 101098 6 100816 100504 100505 100818 101098 101099 6 100817 100505 100506 100819 101099 101100 6 100818 100506 100507 100820 101100 101101 6 100819 100507 100508 100821 101101 101102 6 100820 100508 100509 100822 101102 101103 6 100821 100509 100510 100823 101103 101104 6 100822 100510 100511 100824 101104 101105 6 100823 100511 100512 100825 101105 101106 6 100824 100512 100513 100826 101106 101107 6 100825 100513 100514 100827 101107 101108 6 100826 100514 100515 100828 101108 101109 6 100827 100515 100516 100829 101109 101110 6 100828 100516 100517 100830 101110 101111 6 100829 100517 100518 100831 101111 101112 6 100830 100518 100519 100832 101112 101113 6 100831 100519 100520 100833 101113 101114 6 100832 100520 100521 100522 100834 101114 6 100833 100522 100523 100524 100835 101114 7 100834 100524 100525 100836 101114 101115 101116 6 100835 100525 100526 100837 101116 101117 6 100836 100526 100527 100838 101117 101118 6 100837 100527 100528 100839 101118 101119 6 100838 100528 100529 100840 101119 101120 6 100839 100529 100530 100841 101120 101121 6 100840 100530 100531 100842 101121 101122 6 100841 100531 100532 100843 101122 101123 6 100842 100532 100533 100844 101123 101124 6 100843 100533 100534 100845 101124 101125 6 100844 100534 100535 100846 101125 101126 6 100845 100535 100536 100847 101126 101127 6 100846 100536 100537 100848 101127 101128 6 100847 100537 100538 100849 101128 101129 6 100848 100538 100539 100850 100851 101129 6 100849 100539 100851 100852 100853 100540 6 100849 100850 100852 101129 101130 101131 6 100851 100850 100853 100854 101131 101132 6 100852 100850 100854 100855 100541 100540 6 100852 100853 100855 101132 101133 101134 6 100854 100853 100541 100542 100856 101134 6 100855 100542 100543 100857 101134 101135 6 100856 100543 100544 100858 101135 101136 6 100857 100544 100545 100859 101136 101137 6 100858 100545 100546 100548 100860 101137 6 100859 100548 100861 101137 101138 101139 6 100860 100548 100549 100862 101139 101140 6 100861 100549 100863 101140 101141 101142 6 100862 100549 100550 100551 100864 101142 6 100863 100551 100552 100554 100865 101142 6 100864 100554 100557 100866 101142 101143 6 100865 100557 100559 100867 101143 101144 6 100866 100559 100868 100869 101144 101145 6 100867 100559 100869 100870 100922 100560 6 100867 100868 100870 100871 101145 101146 6 100869 100868 100871 100872 100873 100922 6 100869 100870 100872 101146 101147 101148 6 100871 100870 100873 100874 101151 101148 6 100872 100870 100874 100875 100922 100920 6 100872 100873 100875 100876 101170 101151 6 100874 100873 100876 100877 100919 100920 6 100874 100875 100877 100878 100879 101170 6 100876 100875 100878 100918 100882 100919 6 100876 100877 100879 100880 100881 100882 6 100876 100878 100880 100884 100886 101170 6 100879 100878 100881 100884 100885 100891 6 100880 100878 100882 100883 100891 100892 6 100881 100878 100883 100917 100918 100877 6 100881 100882 100912 100892 100913 100917 6 100879 100880 100885 100886 100887 100888 6 100884 100880 100888 100889 100890 100891 6 100879 100884 100887 101964 101169 101170 6 100886 100884 100888 101965 101964 102075 6 100887 100884 100885 100889 102075 102076 6 100888 100885 100890 102076 102077 102081 6 100889 100885 100891 100893 100894 102081 6 100890 100885 100880 100881 100892 100893 6 100891 100881 100893 100896 100912 100883 6 100891 100892 100890 100894 100895 100896 6 100890 100893 100895 100897 100898 102081 6 100894 100893 100896 100897 100909 100910 6 100895 100893 100892 100910 100911 100912 6 100894 100895 100898 100899 100900 100909 6 100894 100897 100899 100901 102081 102080 6 100898 100897 100900 100901 100902 100906 6 100899 100897 100906 100907 100908 100909 6 100898 100899 100902 100903 102080 102082 6 100901 100899 100903 100904 100905 100906 6 100901 100902 100904 102082 102083 102084 6 100903 100902 100905 102084 102085 101565 6 100904 100902 100906 101563 101564 101565 6 100905 100902 100899 100900 100907 101563 6 100906 100900 100908 101543 101563 101536 6 100907 100900 100909 101522 101523 101536 6 100908 100900 100897 100895 100910 101522 6 100909 100895 100896 100911 101520 101522 6 100910 100896 100912 101521 101520 100914 6 100911 100896 100892 100883 100913 100914 6 100912 100883 100914 100915 100916 100917 6 100912 100913 100915 102474 101521 100911 6 100914 100913 100916 100574 100576 102474 6 100915 100913 100917 109741 100573 100574 6 100916 100913 100883 100882 100918 109741 6 100917 100882 100877 100919 109742 109741 6 100918 100877 100875 100920 100921 109742 6 100919 100875 100921 100562 100922 100873 6 100919 100920 100562 109743 109742 100563 6 100562 100920 100873 100870 100868 100560 6 100154 100155 100924 101248 101249 101250 6 100923 100155 100156 100925 101250 101251 6 100924 100156 100157 100926 101251 101252 6 100925 100157 100158 100927 101252 101253 6 100926 100158 100159 100928 101253 101254 6 100927 100159 100160 100929 101254 101255 6 100928 100160 100161 100930 101255 101256 6 100929 100161 100162 100931 101256 101257 6 100930 100162 100163 100651 100932 101257 6 100931 100651 100933 101257 101258 101259 6 100932 100651 100652 100934 101259 101260 6 100933 100652 100653 100935 101260 101261 6 100934 100653 100654 100936 101261 101262 6 100935 100654 100655 100937 101262 101263 6 100936 100655 100656 100938 101263 101264 6 100937 100656 100657 100939 101264 101265 6 100938 100657 100658 100940 101265 101266 6 100939 100658 100659 100941 101266 101267 6 100940 100659 100660 100942 101267 101268 6 100941 100660 100661 100943 101268 101269 6 100942 100661 100662 100944 101269 101270 6 100943 100662 100663 100945 101270 101271 6 100944 100663 100664 100946 101271 101272 6 100945 100664 100665 100947 101272 101273 6 100946 100665 100666 100948 101273 101274 6 100947 100666 100667 100949 101274 101275 6 100948 100667 100668 100950 101275 101276 6 100949 100668 100669 100951 101276 101277 6 100950 100669 100670 100952 101277 101278 6 100951 100670 100671 100953 101278 101279 6 100952 100671 100672 100954 101279 101280 6 100953 100672 100673 100955 101280 101281 6 100954 100673 100674 100956 101281 101282 6 100955 100674 100675 100957 101282 101283 6 100956 100675 100676 100958 101283 101284 6 100957 100676 100677 100959 101284 101285 6 100958 100677 100678 100960 101285 101286 6 100959 100678 100679 100961 101286 101287 6 100960 100679 100680 100962 101287 101288 6 100961 100680 100681 100963 101288 101289 6 100962 100681 100682 100964 101289 101290 6 100963 100682 100683 100965 101290 101291 6 100964 100683 100684 100966 101291 101292 6 100965 100684 100685 100967 101292 101293 6 100966 100685 100686 100968 101293 101294 6 100967 100686 100687 100969 101294 101295 6 100968 100687 100688 100970 101295 101296 6 100969 100688 100689 100971 101296 101297 6 100970 100689 100690 100972 101297 101298 6 100971 100690 100691 100973 101298 101299 6 100972 100691 100692 100694 100974 101299 5 100973 100694 100695 100975 101299 6 100974 100695 100696 100976 101299 101300 6 100975 100696 100697 100977 101300 101301 6 100976 100697 100698 100978 101301 101302 6 100977 100698 100699 100979 101302 101303 6 100978 100699 100700 100980 101303 101304 6 100979 100700 100701 100981 101304 101305 6 100980 100701 100702 100982 101305 101306 6 100981 100702 100703 100983 101306 101307 6 100982 100703 100704 100984 101307 101308 6 100983 100704 100705 100985 101308 101309 6 100984 100705 100706 100986 101309 101310 6 100985 100706 100707 100987 101310 101311 6 100986 100707 100708 100988 101311 101312 6 100987 100708 100709 100989 101312 101313 6 100988 100709 100710 100990 101313 101314 6 100989 100710 100711 100991 101314 101315 6 100990 100711 100712 100992 101315 101316 6 100991 100712 100713 100993 101316 101317 6 100992 100713 100714 100994 101317 101318 6 100993 100714 100715 100995 101318 101319 6 100994 100715 100716 100996 101319 101320 6 100995 100716 100717 100997 101320 101321 6 100996 100717 100718 100998 101321 101322 6 100997 100718 100719 100999 101322 101323 6 100998 100719 100720 101000 101323 101324 6 100999 100720 100721 101001 101324 101325 6 101000 100721 100722 101002 101325 101326 6 101001 100722 100723 101003 101326 101327 6 101002 100723 100724 101004 101327 101328 6 101003 100724 100725 101005 101328 101329 6 101004 100725 100726 101006 101329 101330 6 101005 100726 100727 101007 101330 101331 6 101006 100727 100728 101008 101331 101332 6 101007 100728 100729 101009 101332 101333 6 101008 100729 100730 101010 101333 101334 6 101009 100730 100731 101011 101334 101335 6 101010 100731 100732 101012 101335 101336 6 101011 100732 100733 101013 101014 101336 6 101012 100733 101014 101015 101016 100734 6 101012 101013 101015 101336 101337 101338 6 101014 101013 101016 101338 101339 101340 6 101015 101013 100734 100735 101017 101340 6 101016 100735 100736 101018 101340 101341 6 101017 100736 100737 101019 101341 101342 6 101018 100737 100738 101020 101342 101343 6 101019 100738 100739 101021 101343 101344 6 101020 100739 100740 101022 101344 101345 6 101021 100740 100741 101023 101345 101346 6 101022 100741 100742 100743 101024 101346 6 101023 100743 101025 101346 101347 101348 6 101024 100743 100744 101026 101348 101349 6 101025 100744 100745 101027 101349 101350 6 101026 100745 100746 101028 101350 101351 6 101027 100746 100747 101029 101351 101352 6 101028 100747 100748 101030 101352 101353 6 101029 100748 100749 101031 101353 101354 6 101030 100749 100750 101032 101354 101355 6 101031 100750 100751 101033 101355 101356 6 101032 100751 100752 101034 101356 101357 6 101033 100752 100753 101035 101357 101358 6 101034 100753 100754 101036 101358 101359 6 101035 100754 100755 101037 101359 101360 6 101036 100755 100756 101038 101360 101361 6 101037 100756 100757 101039 101361 101362 6 101038 100757 100758 101040 101362 101363 6 101039 100758 100759 101041 101363 101364 6 101040 100759 100760 101042 101364 101365 6 101041 100760 100761 101043 101365 101366 6 101042 100761 100762 101044 101366 101367 6 101043 100762 100763 101045 101367 101368 6 101044 100763 100764 101046 101368 101369 6 101045 100764 100765 101047 101369 101370 6 101046 100765 100766 101048 101370 101371 6 101047 100766 100767 101049 101371 101372 6 101048 100767 100768 101050 101372 101373 6 101049 100768 100769 101051 101373 101374 6 101050 100769 100770 101052 101374 101375 6 101051 100770 100771 101053 101375 101376 6 101052 100771 100772 101054 101376 101377 6 101053 100772 100773 101055 101377 101378 6 101054 100773 100774 101056 101378 101379 6 101055 100774 100775 101057 101379 101380 6 101056 100775 100776 101058 101380 101381 6 101057 100776 100777 101059 101381 101382 6 101058 100777 100778 101060 101382 101383 6 101059 100778 100779 101061 101383 101384 6 101060 100779 100780 101062 101384 101385 6 101061 100780 100781 101063 101385 101386 6 101062 100781 100782 101064 101386 101387 6 101063 100782 100783 101065 101387 101388 6 101064 100783 100784 101066 101388 101389 6 101065 100784 100785 101067 101389 101390 6 101066 100785 100786 101068 101390 101391 6 101067 100786 100787 101069 101391 101392 6 101068 100787 100788 101070 101392 101393 6 101069 100788 100789 101071 101393 101394 6 101070 100789 100790 101072 101394 101395 6 101071 100790 100791 101073 101395 101396 6 101072 100791 100792 101074 101396 101397 6 101073 100792 100793 101075 101397 101398 6 101074 100793 100794 101076 101398 101399 6 101075 100794 100795 101077 101399 101400 6 101076 100795 100796 101078 101400 101401 6 101077 100796 100797 101079 101401 101402 6 101078 100797 100798 101080 101402 101403 6 101079 100798 100799 101081 101403 101404 6 101080 100799 100800 101082 101404 101405 6 101081 100800 100801 101083 101405 101406 6 101082 100801 100802 101084 101406 101407 6 101083 100802 100803 101085 101407 101408 6 101084 100803 100804 101086 101408 101409 6 101085 100804 100805 101087 101409 101410 6 101086 100805 100806 101088 101410 101411 6 101087 100806 100807 101089 101411 101412 6 101088 100807 100808 101090 101412 101413 6 101089 100808 100809 101091 101413 101414 6 101090 100809 100810 101092 101414 101415 6 101091 100810 100811 101093 101415 101416 6 101092 100811 100812 101094 101416 101417 6 101093 100812 100813 101095 101417 101418 6 101094 100813 100814 101096 101418 101419 6 101095 100814 100815 101097 101419 101420 6 101096 100815 100816 101098 101420 101421 6 101097 100816 100817 101099 101421 101422 6 101098 100817 100818 101100 101422 101423 6 101099 100818 100819 101101 101423 101424 6 101100 100819 100820 101102 101424 101425 6 101101 100820 100821 101103 101425 101426 6 101102 100821 100822 101104 101426 101427 6 101103 100822 100823 101105 101427 101428 6 101104 100823 100824 101106 101428 101429 6 101105 100824 100825 101107 101429 101430 6 101106 100825 100826 101108 101430 101431 6 101107 100826 100827 101109 101431 101432 6 101108 100827 100828 101110 101432 101433 6 101109 100828 100829 101111 101433 101434 6 101110 100829 100830 101112 101434 101435 6 101111 100830 100831 101113 101435 101436 6 101112 100831 100832 101114 101436 101115 6 101113 100832 100833 100834 100835 101115 6 101114 100835 101116 101436 101113 101437 5 101115 100835 100836 101117 101437 6 101116 100836 100837 101118 101437 101438 6 101117 100837 100838 101119 101438 101439 6 101118 100838 100839 101120 101439 101440 6 101119 100839 100840 101121 101440 101441 6 101120 100840 100841 101122 101441 101442 6 101121 100841 100842 101123 101442 101443 6 101122 100842 100843 101124 101443 101444 6 101123 100843 100844 101125 101444 101445 6 101124 100844 100845 101126 101445 101446 6 101125 100845 100846 101127 101446 101447 6 101126 100846 100847 101128 101447 101448 6 101127 100847 100848 101129 101448 101449 6 101128 100848 100849 100851 101130 101449 6 101129 100851 101131 101449 101450 101451 6 101130 100851 100852 101132 101451 101452 6 101131 100852 100854 101133 101452 101453 6 101132 100854 101134 101456 101453 101152 6 101133 100854 100855 100856 101135 101152 6 101134 100856 100857 101136 101152 101153 6 101135 100857 100858 101137 101153 101154 6 101136 100858 100859 100860 101138 101154 6 101137 100860 101139 101154 101155 101156 6 101138 100860 100861 101140 101156 101157 6 101139 100861 100862 101141 101157 101158 6 101140 100862 101142 101158 101159 101143 6 101141 100862 100863 100864 100865 101143 6 101142 100865 100866 101144 101159 101141 6 101143 100866 100867 101145 101498 101159 6 101144 100867 100869 101146 101498 101499 6 101145 100869 100871 101147 101164 101499 6 101146 100871 101148 101149 101164 101165 6 101147 100871 101149 101150 101151 100872 6 101147 101148 101150 101165 101166 101167 6 101149 101148 101151 101167 101168 101169 6 101150 101148 100872 101169 101170 100874 6 101134 101135 101153 101473 101456 101133 6 101152 101135 101136 101154 101473 101490 6 101153 101136 101137 101138 101155 101490 6 101154 101138 101156 101490 101491 101492 6 101155 101138 101139 101157 101492 101493 6 101156 101139 101140 101158 101493 101494 6 101157 101140 101141 101159 101497 101494 6 101158 101141 101143 101144 101498 101497 6 100085 100086 101161 101483 101484 101488 6 101160 100086 100087 101162 101174 101488 6 101161 100087 100088 101163 101174 101175 6 101162 100088 100089 101175 101177 101186 6 101146 101147 101165 101499 101527 101528 6 101164 101147 101149 101166 101528 101533 6 101165 101149 101167 101535 101533 101541 6 101166 101149 101150 101168 101541 101962 6 101167 101150 101169 101962 101963 101964 6 101168 101150 101151 101170 100886 101964 6 101169 101151 100874 100886 100879 100876 6 100414 100021 100022 101172 103337 103882 6 101171 100022 100023 101173 101524 103337 6 101172 100023 100024 101524 101525 101526 6 101161 101162 101175 101176 101488 101489 6 101174 101162 101176 101163 101177 101178 6 101174 101175 101489 101642 101643 101178 6 101175 101163 101178 101179 101186 101183 6 101175 101177 101179 101180 101643 101176 6 101178 101177 101180 101181 101182 101183 6 101178 101179 101181 101643 101644 101645 6 101180 101179 101182 101645 101646 101647 6 101181 101179 101183 101184 103097 101647 6 101182 101179 101184 101185 101186 101177 6 101182 101183 101185 103097 102241 101187 6 101184 101183 101186 100090 100091 101187 6 101185 101183 101177 101163 100089 100090 6 101185 100091 100092 101188 102241 101184 6 101187 100092 100093 101189 102241 101659 6 101188 100093 100094 101190 101660 101659 6 101189 100094 100095 101191 101662 101660 6 101190 100095 100096 101192 101670 101662 6 101191 100096 100097 101193 101670 101671 6 101192 100097 100098 101194 101671 101672 6 101193 100098 100099 101195 101672 101673 6 101194 100099 100100 101196 101673 101674 6 101195 100100 100101 101197 101674 101675 6 101196 100101 100102 101198 101500 101675 6 101197 100102 100103 101199 101457 101500 6 101198 100103 100104 101200 101457 101458 6 101199 100104 100105 101201 101458 101459 6 101200 100105 100106 101202 101459 101460 6 101201 100106 100107 101203 101460 101685 6 101202 100107 100108 101204 101687 101685 6 101203 100108 100109 101205 101687 101688 6 101204 100109 100110 101206 101688 101689 6 101205 100110 100111 101207 101689 101690 6 101206 100111 100112 101208 101693 101690 6 101207 100112 100113 101209 101693 101694 6 101208 100113 100114 101210 101694 101695 6 101209 100114 100115 101211 101556 101695 6 101210 100115 100116 101212 101546 101556 6 101211 100116 100117 101213 101546 101547 6 101212 100117 100118 101214 101547 101548 6 101213 100118 100119 101215 101548 101549 6 101214 100119 100120 101216 101549 101550 6 101215 100120 100121 101217 101553 101550 6 101216 100121 100122 101218 101555 101553 6 101217 100122 100123 101219 101716 101555 6 101218 100123 100124 101220 101716 101717 6 101219 100124 100125 101221 101717 101718 6 101220 100125 100126 101222 101718 101719 6 101221 100126 100127 101223 101719 101720 6 101222 100127 100128 101224 101720 101721 6 101223 100128 100129 101225 101721 101722 6 101224 100129 100130 101226 101722 101723 6 101225 100130 100131 101227 101726 101723 6 101226 100131 100132 101228 101726 101727 6 101227 100132 100133 101229 101727 101728 6 101228 100133 100134 101230 101728 101729 6 101229 100134 100135 101231 101729 101730 6 101230 100135 100136 101232 101733 101730 6 101231 100136 100137 101233 101733 101734 6 101232 100137 100138 101234 101734 101735 6 101233 100138 100139 101235 101735 101736 6 101234 100139 100140 101236 101736 101737 6 101235 100140 100141 101237 101737 101738 6 101236 100141 100142 101238 101738 101739 6 101237 100142 100143 101239 101739 101740 6 101238 100143 100144 101240 101740 101741 6 101239 100144 100145 101241 101741 101742 6 101240 100145 100146 101242 101742 101743 7 101241 100146 100147 100003 100148 101243 101743 5 101242 100148 100149 101244 101743 6 101243 100149 100150 101245 101743 101744 6 101244 100150 100151 101246 101744 101745 6 101245 100151 100152 101247 101745 101746 6 101246 100152 100153 101248 101746 101747 6 101247 100153 100154 100923 101249 101747 6 101248 100923 101250 101747 101748 101749 6 101249 100923 100924 101251 101749 101750 6 101250 100924 100925 101252 101750 101751 6 101251 100925 100926 101253 101751 101752 6 101252 100926 100927 101254 101752 101753 6 101253 100927 100928 101255 101753 101754 6 101254 100928 100929 101256 101754 101755 6 101255 100929 100930 101257 101755 101756 6 101256 100930 100931 100932 101258 101756 6 101257 100932 101259 101756 101757 101758 6 101258 100932 100933 101260 101758 101759 6 101259 100933 100934 101261 101759 101760 6 101260 100934 100935 101262 101760 101761 6 101261 100935 100936 101263 101761 101762 6 101262 100936 100937 101264 101762 101763 6 101263 100937 100938 101265 101763 101764 6 101264 100938 100939 101266 101764 101765 6 101265 100939 100940 101267 101765 101766 6 101266 100940 100941 101268 101766 101767 6 101267 100941 100942 101269 101767 101768 6 101268 100942 100943 101270 101768 101769 6 101269 100943 100944 101271 101769 101770 6 101270 100944 100945 101272 101770 101771 6 101271 100945 100946 101273 101771 101772 6 101272 100946 100947 101274 101772 101773 6 101273 100947 100948 101275 101773 101774 6 101274 100948 100949 101276 101774 101775 6 101275 100949 100950 101277 101775 101776 6 101276 100950 100951 101278 101776 101777 6 101277 100951 100952 101279 101777 101778 6 101278 100952 100953 101280 101778 101779 6 101279 100953 100954 101281 101779 101780 6 101280 100954 100955 101282 101780 101781 6 101281 100955 100956 101283 101781 101782 6 101282 100956 100957 101284 101782 101783 6 101283 100957 100958 101285 101783 101784 6 101284 100958 100959 101286 101784 101785 6 101285 100959 100960 101287 101785 101786 6 101286 100960 100961 101288 101786 101787 6 101287 100961 100962 101289 101787 101788 6 101288 100962 100963 101290 101788 101789 6 101289 100963 100964 101291 101789 101790 6 101290 100964 100965 101292 101790 101791 6 101291 100965 100966 101293 101791 101792 6 101292 100966 100967 101294 101792 101793 6 101293 100967 100968 101295 101793 101794 6 101294 100968 100969 101296 101794 101795 6 101295 100969 100970 101297 101795 101796 6 101296 100970 100971 101298 101796 101797 6 101297 100971 100972 101299 101797 101300 6 101298 100972 100973 100974 100975 101300 7 101299 100975 100976 101301 101797 101298 102100 6 101300 100976 100977 101302 102100 102101 6 101301 100977 100978 101303 102101 102102 6 101302 100978 100979 101304 102102 102103 6 101303 100979 100980 101305 102103 102104 6 101304 100980 100981 101306 102104 102105 6 101305 100981 100982 101307 102105 102106 6 101306 100982 100983 101308 101798 102106 6 101307 100983 100984 101309 101798 101799 6 101308 100984 100985 101310 101799 101800 6 101309 100985 100986 101311 101800 101801 6 101310 100986 100987 101312 101801 101802 6 101311 100987 100988 101313 101802 101803 6 101312 100988 100989 101314 101803 101804 6 101313 100989 100990 101315 101804 101805 6 101314 100990 100991 101316 101805 101806 6 101315 100991 100992 101317 101806 101807 6 101316 100992 100993 101318 101807 101808 6 101317 100993 100994 101319 101808 101809 6 101318 100994 100995 101320 101809 101810 6 101319 100995 100996 101321 101810 101811 6 101320 100996 100997 101322 101811 101812 6 101321 100997 100998 101323 101812 101813 6 101322 100998 100999 101324 101813 101814 6 101323 100999 101000 101325 101814 101815 6 101324 101000 101001 101326 101815 101816 6 101325 101001 101002 101327 101816 101817 6 101326 101002 101003 101328 101817 101818 6 101327 101003 101004 101329 101818 101819 6 101328 101004 101005 101330 101819 101820 6 101329 101005 101006 101331 101820 101821 6 101330 101006 101007 101332 101821 101822 6 101331 101007 101008 101333 101822 101823 6 101332 101008 101009 101334 101823 101824 6 101333 101009 101010 101335 101824 101825 6 101334 101010 101011 101336 101825 101826 6 101335 101011 101012 101014 101337 101826 6 101336 101014 101338 101826 101827 101828 6 101337 101014 101015 101339 101828 101829 6 101338 101015 101340 101829 101830 101831 6 101339 101015 101016 101017 101341 101831 6 101340 101017 101018 101342 101831 101832 6 101341 101018 101019 101343 101832 101833 6 101342 101019 101020 101344 101833 101834 6 101343 101020 101021 101345 101834 101835 6 101344 101021 101022 101346 101835 101836 6 101345 101022 101023 101024 101347 101836 6 101346 101024 101348 101836 101837 101838 6 101347 101024 101025 101349 101838 101839 6 101348 101025 101026 101350 101839 101840 6 101349 101026 101027 101351 101840 101841 6 101350 101027 101028 101352 101841 101842 6 101351 101028 101029 101353 101842 101843 6 101352 101029 101030 101354 101843 101844 6 101353 101030 101031 101355 101844 101845 6 101354 101031 101032 101356 101845 101846 6 101355 101032 101033 101357 101846 101847 6 101356 101033 101034 101358 101847 101848 6 101357 101034 101035 101359 101848 101849 6 101358 101035 101036 101360 101849 101850 6 101359 101036 101037 101361 101850 101851 6 101360 101037 101038 101362 101851 101852 6 101361 101038 101039 101363 101852 101853 6 101362 101039 101040 101364 101853 101854 6 101363 101040 101041 101365 101854 101855 6 101364 101041 101042 101366 101855 101856 6 101365 101042 101043 101367 101856 101857 6 101366 101043 101044 101368 101857 101858 6 101367 101044 101045 101369 101858 101859 6 101368 101045 101046 101370 101859 101860 6 101369 101046 101047 101371 101860 101861 6 101370 101047 101048 101372 101861 101862 6 101371 101048 101049 101373 101862 101863 6 101372 101049 101050 101374 101863 101864 6 101373 101050 101051 101375 101864 101865 6 101374 101051 101052 101376 101865 101866 6 101375 101052 101053 101377 101866 101867 6 101376 101053 101054 101378 101867 101868 6 101377 101054 101055 101379 101868 101869 6 101378 101055 101056 101380 101869 101870 6 101379 101056 101057 101381 101870 101871 6 101380 101057 101058 101382 101871 101872 6 101381 101058 101059 101383 101872 101873 6 101382 101059 101060 101384 101873 101874 6 101383 101060 101061 101385 101874 101875 6 101384 101061 101062 101386 101875 101876 6 101385 101062 101063 101387 101876 101877 6 101386 101063 101064 101388 101877 101878 6 101387 101064 101065 101389 101878 101879 6 101388 101065 101066 101390 101879 101880 6 101389 101066 101067 101391 101880 101881 6 101390 101067 101068 101392 101881 101882 6 101391 101068 101069 101393 101882 101883 6 101392 101069 101070 101394 101883 101884 6 101393 101070 101071 101395 101884 101885 6 101394 101071 101072 101396 101885 101886 6 101395 101072 101073 101397 101886 101887 6 101396 101073 101074 101398 101887 101888 6 101397 101074 101075 101399 101888 101889 6 101398 101075 101076 101400 101889 101890 6 101399 101076 101077 101401 101890 101891 6 101400 101077 101078 101402 101891 101892 6 101401 101078 101079 101403 101892 101893 6 101402 101079 101080 101404 101893 101894 6 101403 101080 101081 101405 101894 101895 6 101404 101081 101082 101406 101895 101896 6 101405 101082 101083 101407 101896 101897 6 101406 101083 101084 101408 101897 101898 6 101407 101084 101085 101409 101898 101899 6 101408 101085 101086 101410 101899 101900 6 101409 101086 101087 101411 101900 101901 6 101410 101087 101088 101412 101901 101902 6 101411 101088 101089 101413 101902 101903 6 101412 101089 101090 101414 101903 101904 6 101413 101090 101091 101415 101904 101905 6 101414 101091 101092 101416 101905 101906 6 101415 101092 101093 101417 101906 101907 6 101416 101093 101094 101418 101907 101908 6 101417 101094 101095 101419 101908 101909 6 101418 101095 101096 101420 101909 101910 6 101419 101096 101097 101421 101910 101911 6 101420 101097 101098 101422 101911 101912 6 101421 101098 101099 101423 101912 101913 6 101422 101099 101100 101424 101913 101914 6 101423 101100 101101 101425 101914 101915 6 101424 101101 101102 101426 101915 101916 6 101425 101102 101103 101427 101916 101917 6 101426 101103 101104 101428 101917 101918 6 101427 101104 101105 101429 101918 101919 6 101428 101105 101106 101430 101919 101920 6 101429 101106 101107 101431 101920 101921 6 101430 101107 101108 101432 101921 101922 6 101431 101108 101109 101433 101922 101923 6 101432 101109 101110 101434 101923 101924 6 101433 101110 101111 101435 101924 101925 6 101434 101111 101112 101436 101925 101926 6 101435 101112 101113 101115 101437 101926 6 101436 101115 101116 101117 101438 101926 6 101437 101117 101118 101439 101926 101927 6 101438 101118 101119 101440 101927 101928 6 101439 101119 101120 101441 101928 101929 6 101440 101120 101121 101442 101929 101930 6 101441 101121 101122 101443 101930 101931 6 101442 101122 101123 101444 101931 101932 6 101443 101123 101124 101445 101461 101932 6 101444 101124 101125 101446 101461 101462 6 101445 101125 101126 101447 101462 101463 6 101446 101126 101127 101448 101463 101464 6 101447 101127 101128 101449 101464 101465 6 101448 101128 101129 101130 101450 101465 6 101449 101130 101451 101465 101466 101467 6 101450 101130 101131 101452 101467 101468 6 101451 101131 101132 101453 101454 101468 6 101452 101132 101454 101455 101456 101133 6 101452 101453 101455 101468 101469 101470 6 101454 101453 101456 101470 101471 101472 6 101455 101453 101133 101472 101473 101152 6 101198 101199 101458 101500 101501 101679 6 101457 101199 101200 101459 101679 101680 6 101458 101200 101201 101460 101680 101681 6 101459 101201 101202 101681 101684 101685 6 101444 101445 101462 101932 101933 101934 6 101461 101445 101446 101463 101934 101935 6 101462 101446 101447 101464 101935 101936 6 101463 101447 101448 101465 101936 101937 6 101464 101448 101449 101450 101466 101937 6 101465 101450 101467 101937 101938 101939 6 101466 101450 101451 101468 101939 101940 6 101467 101451 101452 101454 101469 101940 6 101468 101454 101470 101940 101941 101942 6 101469 101454 101455 101471 101942 101943 6 101470 101455 101472 101943 101944 101945 6 101471 101455 101456 101473 101945 101946 6 101472 101456 101152 101153 101490 101946 7 100076 100002 101475 101608 101604 101609 101618 6 101474 100002 100077 101476 101620 101618 6 101475 100077 100078 101477 101620 101621 6 101476 100078 100079 101478 101621 101622 6 101477 100079 100080 101479 101630 101622 6 101478 100080 100081 101480 101630 101631 6 101479 100081 100082 101481 101631 101632 6 101480 100082 100083 101482 101635 101632 6 101481 100083 100084 101483 101485 101635 6 101482 100084 100085 101160 101484 101485 6 101483 101160 101485 101486 101487 101488 6 101483 101484 101486 101502 101635 101482 6 101485 101484 101487 101502 101503 101504 6 101486 101484 101488 101504 101505 101489 6 101487 101484 101160 101161 101174 101489 6 101488 101174 101176 101505 101487 101642 6 101473 101153 101154 101155 101491 101946 6 101490 101155 101492 101946 101947 101948 6 101491 101155 101156 101493 101948 101949 6 101492 101156 101157 101494 101495 101949 6 101493 101157 101495 101496 101497 101158 6 101493 101494 101496 101951 101949 101952 6 101495 101494 101497 101952 101530 101529 6 101496 101494 101158 101159 101498 101529 6 101144 101145 101499 101159 101497 101529 6 101498 101145 101146 101164 101527 101529 6 101197 101198 101457 101501 101675 101676 6 101500 101457 101676 101677 101678 101679 6 101485 101486 101503 101637 101634 101635 6 101502 101486 101504 101637 101638 101639 6 101503 101486 101487 101505 101639 101640 6 101504 101487 101489 101640 101641 101642 6 100583 100589 100590 101507 101508 100582 6 101506 100590 101508 101509 101513 101514 6 101506 101507 101509 101510 101517 100582 6 101508 101507 101510 101511 101512 101513 6 101508 101509 101511 101517 101518 101519 6 101510 101509 101512 101523 101519 101537 6 101511 101509 101513 101537 101538 101539 6 101512 101509 101507 101514 100601 101539 6 101513 101507 100601 100599 100591 100590 6 100577 100578 100581 101516 102474 100576 6 101515 100581 101517 101518 101521 102474 6 101516 100581 100582 101508 101510 101518 6 101517 101510 101519 101520 101521 101516 6 101518 101510 101520 101522 101523 101511 6 101518 101519 101521 100911 100910 101522 6 101518 101520 100911 101516 102474 100914 6 100910 101520 101519 101523 100908 100909 6 101522 101519 101511 100908 101536 101537 6 101172 101173 101525 103337 103338 104250 6 101524 101173 101526 103130 102205 104250 6 101525 101173 100024 100025 103130 109781 6 101499 101164 101528 101529 101530 101531 6 101527 101164 101165 101531 101532 101533 6 101497 101498 101499 101527 101530 101496 6 101529 101527 101531 101952 101496 101953 6 101530 101527 101528 101532 101953 101954 6 101531 101528 101533 101534 101954 101955 6 101532 101528 101534 101535 101166 101165 6 101532 101533 101535 101955 101956 101957 6 101534 101533 101166 101541 101960 101957 6 100908 101523 101537 101542 101543 100907 6 101536 101523 101511 101512 101538 101542 6 101537 101512 101539 101540 101545 101542 6 101538 101512 101513 100601 100602 101540 6 101539 100602 101538 101582 101545 101583 6 101535 101166 101167 101960 101961 101962 6 101536 101537 101543 101544 101545 101538 6 101536 101542 101544 101562 101563 100907 6 101543 101542 101545 101562 101580 101577 6 101544 101542 101538 101582 101580 101540 6 101211 101212 101547 101556 101557 101558 6 101546 101212 101213 101548 101561 101558 6 101547 101213 101214 101549 101710 101561 6 101548 101214 101215 101550 101551 101710 6 101549 101215 101551 101552 101553 101216 6 101549 101550 101552 101710 101711 101712 6 101551 101550 101553 101554 101712 101713 6 101552 101550 101554 101555 101217 101216 6 101552 101553 101555 101713 101714 101715 6 101554 101553 101217 101715 101716 101218 6 101210 101211 101546 101557 101695 101696 6 101556 101546 101558 101559 101696 101697 6 101557 101546 101559 101560 101561 101547 6 101557 101558 101560 101697 101698 101699 6 101559 101558 101561 101699 101700 101709 6 101560 101558 101547 101709 101710 101548 6 101543 101544 101563 101564 101576 101577 6 101543 101562 101564 100905 100907 100906 6 101563 101562 100905 101565 101566 101576 6 100905 101564 101566 101567 102085 100904 6 101565 101564 101567 101568 101569 101576 6 101565 101566 101568 102085 103766 103767 6 101567 101566 101569 101570 101571 103767 6 101568 101566 101570 101574 101575 101576 6 101568 101569 101571 101572 101573 101574 7 101568 101570 101572 103769 103767 106317 106319 5 101571 101570 101573 106319 106320 7 101572 101570 101574 106320 106361 106360 102475 6 101573 101570 101569 101575 101578 102475 6 101574 101569 101576 101577 101578 101579 6 101575 101569 101566 101564 101562 101577 6 101576 101562 101575 101579 101580 101544 6 101574 101575 101579 101586 101587 102475 6 101578 101575 101577 101580 101581 101586 6 101579 101577 101544 101581 101582 101545 6 101579 101580 101582 101584 101585 101586 6 101581 101580 101545 101540 101583 101584 6 101582 101540 101584 101602 100603 100602 6 101582 101583 101581 101585 101601 101602 6 101581 101584 101586 101591 101588 101601 6 101581 101585 101579 101578 101587 101588 6 101578 101586 101588 101589 102475 102476 6 101587 101586 101589 101590 101591 101585 6 101587 101588 101590 106354 106353 102476 6 101589 101588 101591 101592 101594 106354 6 101590 101588 101585 101592 101593 101601 6 101590 101591 101593 101594 101595 101596 6 101592 101591 101599 101596 101600 101601 6 101590 101592 101595 106358 106356 106354 6 101594 101592 101596 101597 103970 106358 6 101595 101592 101597 101598 101599 101593 6 101595 101596 101598 103970 103969 106556 6 101597 101596 101599 106556 106557 100611 6 101598 101596 101593 101600 100611 100609 6 101599 101593 101601 101602 100608 100609 6 101600 101593 101591 101585 101584 101602 6 101600 101601 101584 101583 100603 100608 6 100074 100075 101604 100428 101605 101608 5 101603 100075 100076 101608 101474 6 100428 101603 101606 101607 101608 103519 6 100428 101605 101607 102493 100409 103516 6 101606 101605 103518 103516 101613 103519 7 101605 101603 101604 101474 101609 101610 103519 5 101608 101474 101610 101611 101618 6 101608 101609 101611 101612 101613 103519 6 101610 101609 101612 101616 101617 101618 6 101610 101611 101613 101614 101615 101616 7 101610 101612 101614 103518 101607 103519 103523 6 101613 101612 101615 103523 103524 103528 6 101614 101612 101616 103093 103544 103528 6 101615 101612 101611 101617 103093 103094 6 101616 101611 101618 101619 103094 101624 7 101617 101611 101619 101620 101475 101609 101474 6 101617 101618 101620 101621 101623 101624 5 101619 101618 101475 101476 101621 6 101620 101476 101477 101622 101623 101619 6 101621 101477 101623 101629 101630 101478 6 101621 101622 101619 101624 101625 101629 7 101619 101623 101625 101626 101617 103094 104367 6 101624 101623 101626 101627 101628 101629 5 101624 101625 101627 104376 104367 7 101626 101625 101628 104377 104376 102862 107215 6 101627 101625 101629 102861 101633 102862 6 101628 101625 101623 101622 101630 102861 6 101629 101622 101478 101479 101631 102861 6 101630 101479 101480 101632 101633 102861 6 101631 101480 101633 101634 101635 101481 7 101631 101632 101634 101636 102861 101628 102862 6 101633 101632 101635 101636 101637 101502 6 101634 101632 101481 101502 101485 101482 5 101633 101634 101637 102862 102863 7 101636 101634 101502 101503 101638 102863 102864 5 101637 101503 101639 102864 102865 6 101638 101503 101504 101640 102865 102866 6 101639 101504 101505 101641 102866 102867 6 101640 101505 101642 102479 102490 102867 6 101641 101505 101489 101176 101643 102479 6 101642 101176 101178 101180 101644 102479 6 101643 101180 101645 102479 102480 102481 6 101644 101180 101181 101646 102481 101650 6 101645 101181 101647 101648 101649 101650 6 101646 101181 101648 101655 103097 101182 6 101646 101647 101649 101653 101654 101655 6 101646 101648 101650 101651 101652 101653 6 101646 101649 101651 102481 101645 102495 6 101650 101649 101652 102495 102496 102497 6 101651 101649 101653 102497 102498 102499 6 101652 101649 101648 101654 102499 102500 6 101653 101648 101655 101656 102500 102501 6 101654 101648 101647 101656 101657 103097 6 101654 101655 101657 101658 102501 102812 6 101656 101655 101658 101659 102241 103097 6 101656 101657 101659 101660 101661 102812 6 101658 101657 101660 101189 101188 102241 6 101658 101659 101661 101662 101190 101189 6 101658 101660 101662 101663 101664 102812 6 101661 101660 101663 101670 101191 101190 6 101661 101662 101664 101665 101669 101670 6 101661 101663 101665 101666 102812 102811 6 101664 101663 101666 101667 101668 101669 6 101664 101665 101667 102811 102813 102814 6 101666 101665 101668 102814 102815 102816 6 101667 101665 101669 102816 102821 102822 6 101668 101665 101663 101670 101671 102822 6 101669 101663 101662 101191 101192 101671 6 101670 101192 101193 101672 102822 101669 6 101671 101193 101194 101673 102823 102822 6 101672 101194 101195 101674 103147 102823 6 101673 101195 101196 101675 103147 103412 6 101674 101196 101197 101500 101676 103412 6 101675 101500 101501 101677 103412 103413 6 101676 101501 101678 103413 103414 103415 6 101677 101501 101679 103415 105381 105382 6 101678 101501 101457 101458 101680 105381 6 101679 101458 101459 101681 101682 105381 6 101680 101459 101460 101682 101683 101684 6 101680 101681 101683 103774 105383 105381 6 101682 101681 101684 103774 103775 103776 6 101683 101681 101460 101685 101686 103776 6 101684 101460 101686 101687 101203 101202 6 101684 101685 101687 103776 103777 103781 6 101686 101685 101203 101204 101688 103781 6 101687 101204 101205 101689 103781 103782 6 101688 101205 101206 101690 101691 103782 6 101689 101206 101691 101692 101693 101207 6 101689 101690 101692 103782 103783 103784 6 101691 101690 101693 103784 103785 103786 6 101692 101690 101207 101208 101694 103786 6 101693 101208 101209 101695 103786 103416 6 101694 101209 101210 101556 101696 103416 6 101695 101556 101557 101697 103416 103417 6 101696 101557 101559 101698 103417 103418 6 101697 101559 101699 101703 102223 103418 6 101698 101559 101560 101700 101701 101703 6 101699 101560 101701 101702 101708 101709 6 101699 101700 101702 101703 101704 101705 6 101701 101700 101705 101706 101707 101708 6 101699 101701 101704 101698 102223 102224 6 101703 101701 101705 102224 102225 102226 6 101704 101701 101702 101706 102226 102227 6 101705 101702 101707 102227 102228 102229 6 101706 101702 101708 102229 102230 102231 6 101707 101702 101700 101709 101711 102231 6 101708 101700 101560 101561 101710 101711 6 101709 101561 101548 101549 101551 101711 6 101710 101551 101712 102231 101708 101709 6 101711 101551 101552 101713 102232 102231 6 101712 101552 101554 101714 102240 102232 6 101713 101554 101715 102240 102560 102564 6 101714 101554 101555 101716 102564 102565 6 101715 101555 101218 101219 101717 102565 6 101716 101219 101220 101718 102565 102566 6 101717 101220 101221 101719 102569 102566 6 101718 101221 101222 101720 103463 102569 6 101719 101222 101223 101721 103462 103463 6 101720 101223 101224 101722 103469 103462 6 101721 101224 101225 101723 101724 103469 6 101722 101225 101724 101725 101726 101226 6 101722 101723 101725 102172 103467 103469 6 101724 101723 101726 102172 102173 102174 6 101725 101723 101226 101227 101727 102174 6 101726 101227 101228 101728 102174 102175 6 101727 101228 101229 101729 102175 102176 6 101728 101229 101230 101730 101731 102176 6 101729 101230 101731 101732 101733 101231 6 101729 101730 101732 102178 102176 102808 6 101731 101730 101733 103404 102808 103405 6 101732 101730 101231 101232 101734 103405 6 101733 101232 101233 101735 103405 103406 6 101734 101233 101234 101736 103406 103407 6 101735 101234 101235 101737 103407 103408 6 101736 101235 101236 101738 103408 103409 6 101737 101236 101237 101739 103409 103410 6 101738 101237 101238 101740 103410 103411 6 101739 101238 101239 101741 103197 103411 6 101740 101239 101240 101742 103191 103197 6 101741 101240 101241 101743 103191 101744 6 101742 101241 101242 101243 101244 101744 7 101743 101244 101245 101745 103191 101742 103199 6 101744 101245 101246 101746 102893 103199 6 101745 101246 101247 101747 102751 102893 6 101746 101247 101248 101249 101748 102751 6 101747 101249 101749 102233 102751 102752 6 101748 101249 101250 101750 102233 102234 6 101749 101250 101251 101751 102237 102234 6 101750 101251 101252 101752 102247 102237 6 101751 101252 101253 101753 102247 102253 6 101752 101253 101254 101754 102253 102254 6 101753 101254 101255 101755 102254 102255 6 101754 101255 101256 101756 102255 102256 6 101755 101256 101257 101258 101757 102256 6 101756 101258 101758 102256 102257 102258 6 101757 101258 101259 101759 102258 102259 6 101758 101259 101260 101760 102259 102260 6 101759 101260 101261 101761 102260 102261 6 101760 101261 101262 101762 102261 102262 6 101761 101262 101263 101763 102262 102263 6 101762 101263 101264 101764 102263 102264 6 101763 101264 101265 101765 102264 102265 6 101764 101265 101266 101766 102265 102266 6 101765 101266 101267 101767 102266 102267 6 101766 101267 101268 101768 102267 102268 6 101767 101268 101269 101769 102268 102269 6 101768 101269 101270 101770 102269 102270 6 101769 101270 101271 101771 102270 102271 6 101770 101271 101272 101772 102271 102272 6 101771 101272 101273 101773 102272 102273 6 101772 101273 101274 101774 102273 102274 6 101773 101274 101275 101775 102274 102275 6 101774 101275 101276 101776 102275 102276 6 101775 101276 101277 101777 102276 102277 6 101776 101277 101278 101778 102277 102278 6 101777 101278 101279 101779 102278 102279 6 101778 101279 101280 101780 102279 102280 6 101779 101280 101281 101781 102280 102281 6 101780 101281 101282 101782 102281 102282 6 101781 101282 101283 101783 102282 102283 6 101782 101283 101284 101784 102283 102284 6 101783 101284 101285 101785 102284 102285 6 101784 101285 101286 101786 102285 102286 6 101785 101286 101287 101787 102286 102287 6 101786 101287 101288 101788 102287 102288 6 101787 101288 101289 101789 102288 102289 6 101788 101289 101290 101790 102289 102290 6 101789 101290 101291 101791 102290 102291 6 101790 101291 101292 101792 102291 102292 6 101791 101292 101293 101793 102292 102293 6 101792 101293 101294 101794 102293 102294 6 101793 101294 101295 101795 102294 102295 6 101794 101295 101296 101796 102098 102295 6 101795 101296 101297 101797 102098 102099 6 101796 101297 101298 101300 102099 102100 6 101307 101308 101799 102106 102107 102108 6 101798 101308 101309 101800 102108 102109 6 101799 101309 101310 101801 102109 102110 6 101800 101310 101311 101802 102110 102111 6 101801 101311 101312 101803 102111 102112 6 101802 101312 101313 101804 102112 102113 6 101803 101313 101314 101805 102113 102114 6 101804 101314 101315 101806 102114 102115 6 101805 101315 101316 101807 102115 102116 6 101806 101316 101317 101808 102116 102117 6 101807 101317 101318 101809 102117 102118 6 101808 101318 101319 101810 102118 102119 6 101809 101319 101320 101811 102119 102120 6 101810 101320 101321 101812 102120 102121 6 101811 101321 101322 101813 102121 102122 6 101812 101322 101323 101814 102122 102123 6 101813 101323 101324 101815 102123 102124 6 101814 101324 101325 101816 102124 102125 6 101815 101325 101326 101817 102125 102126 6 101816 101326 101327 101818 102126 102127 6 101817 101327 101328 101819 102127 102128 6 101818 101328 101329 101820 102128 102129 6 101819 101329 101330 101821 102129 102130 6 101820 101330 101331 101822 102130 102131 6 101821 101331 101332 101823 102131 102132 6 101822 101332 101333 101824 102132 102133 6 101823 101333 101334 101825 102133 102134 6 101824 101334 101335 101826 102134 102135 6 101825 101335 101336 101337 101827 102135 6 101826 101337 101828 102135 102136 102137 6 101827 101337 101338 101829 102137 102138 6 101828 101338 101339 101830 102138 102139 6 101829 101339 101831 102139 102140 102141 6 101830 101339 101340 101341 101832 102141 6 101831 101341 101342 101833 102141 102142 6 101832 101342 101343 101834 102142 102143 6 101833 101343 101344 101835 102143 102144 6 101834 101344 101345 101836 102144 102145 6 101835 101345 101346 101347 101837 102145 6 101836 101347 101838 102150 102145 102165 6 101837 101347 101348 101839 102165 102166 6 101838 101348 101349 101840 102166 102167 6 101839 101349 101350 101841 102167 102168 6 101840 101350 101351 101842 102171 102168 6 101841 101351 101352 101843 102349 102171 6 101842 101352 101353 101844 102349 102350 6 101843 101353 101354 101845 102350 102351 6 101844 101354 101355 101846 102351 102352 6 101845 101355 101356 101847 102352 102353 6 101846 101356 101357 101848 102353 102354 6 101847 101357 101358 101849 102354 102355 6 101848 101358 101359 101850 102355 102356 6 101849 101359 101360 101851 102356 102357 6 101850 101360 101361 101852 102357 102358 6 101851 101361 101362 101853 102358 102359 6 101852 101362 101363 101854 102359 102360 6 101853 101363 101364 101855 102360 102361 6 101854 101364 101365 101856 101966 102361 6 101855 101365 101366 101857 101966 101967 6 101856 101366 101367 101858 101967 101968 6 101857 101367 101368 101859 101968 101969 6 101858 101368 101369 101860 101969 101970 6 101859 101369 101370 101861 101970 101971 6 101860 101370 101371 101862 101971 101972 6 101861 101371 101372 101863 101972 101973 6 101862 101372 101373 101864 101973 101974 6 101863 101373 101374 101865 101974 101975 6 101864 101374 101375 101866 101975 101976 6 101865 101375 101376 101867 101976 101977 6 101866 101376 101377 101868 101977 101978 6 101867 101377 101378 101869 101978 101979 6 101868 101378 101379 101870 101979 101980 6 101869 101379 101380 101871 101980 101981 6 101870 101380 101381 101872 101981 101982 6 101871 101381 101382 101873 101982 101983 6 101872 101382 101383 101874 101983 101984 6 101873 101383 101384 101875 101984 101985 6 101874 101384 101385 101876 101985 101986 6 101875 101385 101386 101877 101986 101987 6 101876 101386 101387 101878 101987 101988 6 101877 101387 101388 101879 101988 101989 6 101878 101388 101389 101880 101989 101990 6 101879 101389 101390 101881 101990 101991 6 101880 101390 101391 101882 101991 101992 6 101881 101391 101392 101883 101992 101993 6 101882 101392 101393 101884 101993 101994 6 101883 101393 101394 101885 101994 101995 6 101884 101394 101395 101886 101995 101996 6 101885 101395 101396 101887 101996 101997 6 101886 101396 101397 101888 101997 101998 6 101887 101397 101398 101889 101998 101999 6 101888 101398 101399 101890 101999 102000 6 101889 101399 101400 101891 102000 102001 6 101890 101400 101401 101892 102001 102002 6 101891 101401 101402 101893 102002 102003 6 101892 101402 101403 101894 102003 102004 6 101893 101403 101404 101895 102004 102005 6 101894 101404 101405 101896 102005 102006 6 101895 101405 101406 101897 102006 102007 6 101896 101406 101407 101898 102007 102008 6 101897 101407 101408 101899 102008 102009 6 101898 101408 101409 101900 102009 102010 6 101899 101409 101410 101901 102010 102011 6 101900 101410 101411 101902 102011 102012 6 101901 101411 101412 101903 102012 102013 6 101902 101412 101413 101904 102013 102014 6 101903 101413 101414 101905 102014 102015 6 101904 101414 101415 101906 102015 102016 6 101905 101415 101416 101907 102016 102017 6 101906 101416 101417 101908 102017 102018 6 101907 101417 101418 101909 102018 102019 6 101908 101418 101419 101910 102019 102020 6 101909 101419 101420 101911 102020 102021 6 101910 101420 101421 101912 102021 102022 6 101911 101421 101422 101913 102022 102023 6 101912 101422 101423 101914 102023 102024 6 101913 101423 101424 101915 102024 102025 6 101914 101424 101425 101916 102025 102026 6 101915 101425 101426 101917 102026 102027 6 101916 101426 101427 101918 102027 102028 6 101917 101427 101428 101919 102028 102029 6 101918 101428 101429 101920 102029 102030 6 101919 101429 101430 101921 102030 102031 6 101920 101430 101431 101922 102031 102032 6 101921 101431 101432 101923 102032 102033 6 101922 101432 101433 101924 102033 102034 6 101923 101433 101434 101925 102034 102035 6 101924 101434 101435 101926 102035 101927 6 101925 101435 101436 101437 101438 101927 7 101926 101438 101439 101928 102035 101925 102036 6 101927 101439 101440 101929 102036 102037 6 101928 101440 101441 101930 102037 102038 6 101929 101441 101442 101931 102038 102039 6 101930 101442 101443 101932 102039 102040 7 101931 101443 101444 101461 101933 102040 102041 5 101932 101461 101934 102041 102042 6 101933 101461 101462 101935 102042 102043 6 101934 101462 101463 101936 102043 102044 6 101935 101463 101464 101937 102044 102045 6 101936 101464 101465 101466 101938 102045 6 101937 101466 101939 102045 102046 102047 6 101938 101466 101467 101940 102047 102048 6 101939 101467 101468 101469 101941 102048 6 101940 101469 101942 102048 102049 102050 6 101941 101469 101470 101943 102050 102051 6 101942 101470 101471 101944 102051 102052 6 101943 101471 101945 102052 102053 102054 6 101944 101471 101472 101946 102054 101947 6 101945 101472 101473 101490 101491 101947 6 101946 101491 101948 102054 101945 102055 6 101947 101491 101492 101949 101950 102055 6 101948 101492 101950 101951 101495 101493 6 101948 101949 101951 102055 102056 102057 6 101950 101949 101495 101952 102057 102058 6 101951 101495 101496 101530 101953 102058 6 101952 101530 101531 101954 102058 102059 6 101953 101531 101532 101955 102059 102060 6 101954 101532 101534 101956 102060 102061 6 101955 101534 101957 101958 102061 102062 6 101956 101534 101958 101959 101960 101535 6 101956 101957 101959 102062 102063 102064 6 101958 101957 101960 102064 102065 102066 6 101959 101957 101535 101541 101961 102066 6 101960 101541 101962 102066 102067 102068 6 101961 101541 101167 101168 101963 102068 6 101962 101168 101964 101965 102070 102068 6 101963 101168 101965 100887 100886 101169 6 101963 101964 100887 102072 102070 102075 6 101855 101856 101967 102361 102362 102363 6 101966 101856 101857 101968 102363 102364 6 101967 101857 101858 101969 102364 102365 6 101968 101858 101859 101970 102365 102366 6 101969 101859 101860 101971 102366 102367 6 101970 101860 101861 101972 102367 102368 6 101971 101861 101862 101973 102368 102369 6 101972 101862 101863 101974 102369 102370 6 101973 101863 101864 101975 102370 102371 6 101974 101864 101865 101976 102371 102372 6 101975 101865 101866 101977 102372 102373 6 101976 101866 101867 101978 102373 102374 6 101977 101867 101868 101979 102374 102375 6 101978 101868 101869 101980 102375 102376 6 101979 101869 101870 101981 102376 102377 6 101980 101870 101871 101982 102377 102378 6 101981 101871 101872 101983 102378 102379 6 101982 101872 101873 101984 102379 102380 6 101983 101873 101874 101985 102380 102381 6 101984 101874 101875 101986 102381 102382 6 101985 101875 101876 101987 102382 102383 6 101986 101876 101877 101988 102383 102384 6 101987 101877 101878 101989 102384 102385 6 101988 101878 101879 101990 102385 102386 6 101989 101879 101880 101991 102386 102387 6 101990 101880 101881 101992 102387 102388 6 101991 101881 101882 101993 102388 102389 6 101992 101882 101883 101994 102389 102390 6 101993 101883 101884 101995 102390 102391 6 101994 101884 101885 101996 102391 102392 6 101995 101885 101886 101997 102392 102393 6 101996 101886 101887 101998 102393 102394 6 101997 101887 101888 101999 102394 102395 6 101998 101888 101889 102000 102395 102396 6 101999 101889 101890 102001 102396 102397 6 102000 101890 101891 102002 102397 102398 6 102001 101891 101892 102003 102398 102399 6 102002 101892 101893 102004 102399 102400 6 102003 101893 101894 102005 102400 102401 6 102004 101894 101895 102006 102401 102402 6 102005 101895 101896 102007 102402 102403 6 102006 101896 101897 102008 102403 102404 6 102007 101897 101898 102009 102404 102405 6 102008 101898 101899 102010 102405 102406 6 102009 101899 101900 102011 102406 102407 6 102010 101900 101901 102012 102407 102408 6 102011 101901 101902 102013 102408 102409 6 102012 101902 101903 102014 102409 102410 6 102013 101903 101904 102015 102410 102411 6 102014 101904 101905 102016 102411 102412 6 102015 101905 101906 102017 102412 102413 6 102016 101906 101907 102018 102413 102414 6 102017 101907 101908 102019 102414 102415 6 102018 101908 101909 102020 102415 102416 6 102019 101909 101910 102021 102416 102417 6 102020 101910 101911 102022 102417 102418 6 102021 101911 101912 102023 102418 102419 6 102022 101912 101913 102024 102419 102420 6 102023 101913 101914 102025 102420 102421 6 102024 101914 101915 102026 102421 102422 6 102025 101915 101916 102027 102422 102423 6 102026 101916 101917 102028 102423 102424 6 102027 101917 101918 102029 102424 102425 6 102028 101918 101919 102030 102425 102426 6 102029 101919 101920 102031 102426 102427 6 102030 101920 101921 102032 102427 102428 6 102031 101921 101922 102033 102428 102429 6 102032 101922 101923 102034 102429 102430 6 102033 101923 101924 102035 102430 102431 6 102034 101924 101925 101927 102036 102431 5 102035 101927 101928 102037 102431 6 102036 101928 101929 102038 102431 102432 6 102037 101929 101930 102039 102432 102433 6 102038 101930 101931 102040 102433 102434 7 102039 101931 101932 102041 102434 102435 102436 5 102040 101932 101933 102042 102436 7 102041 101933 101934 102043 102436 102437 102438 6 102042 101934 101935 102044 102438 102439 6 102043 101935 101936 102045 102439 102440 6 102044 101936 101937 101938 102046 102440 6 102045 101938 102047 102440 102441 102442 6 102046 101938 101939 102048 102442 102443 6 102047 101939 101940 101941 102049 102443 6 102048 101941 102050 102443 102444 102448 6 102049 101941 101942 102051 102448 102449 6 102050 101942 101943 102052 102449 102450 6 102051 101943 101944 102053 102450 102451 6 102052 101944 102054 102451 102452 102453 6 102053 101944 101945 101947 102055 102453 6 102054 101947 101948 101950 102056 102453 6 102055 101950 102057 102453 102454 102455 6 102056 101950 101951 102058 102455 102456 6 102057 101951 101952 101953 102059 102456 6 102058 101953 101954 102060 102456 102457 6 102059 101954 101955 102061 102457 102458 6 102060 101955 101956 102062 102458 102459 6 102061 101956 101958 102063 102459 102460 6 102062 101958 102064 102460 102461 102462 6 102063 101958 101959 102065 102462 102463 6 102064 101959 102066 102463 102464 102465 6 102065 101959 101960 101961 102067 102465 6 102066 101961 102068 102069 102465 102466 6 102067 101961 101962 102069 102070 101963 6 102067 102068 102070 102071 102466 102469 6 102069 102068 101963 102071 102072 101965 6 102069 102070 102072 102073 102469 102470 6 102071 102070 101965 102073 102074 102075 6 102071 102072 102074 102473 102470 102086 6 102073 102072 102075 102076 102078 102086 6 102074 102072 101965 100887 100888 102076 6 102075 100888 100889 102077 102078 102074 6 102076 100889 102078 102079 102080 102081 6 102076 102077 102079 102074 102086 102087 6 102078 102077 102080 102096 102087 102082 6 102079 102077 102081 100898 100901 102082 6 102080 102077 100889 100890 100894 100898 6 102080 100901 100903 102083 102096 102079 6 102082 100903 102084 102096 102095 109776 6 102083 100903 100904 102085 106093 109776 6 102084 100904 101565 101567 103766 106093 6 102074 102078 102087 102088 102473 102073 6 102086 102078 102088 102089 102096 102079 6 102086 102087 102089 102090 102091 102473 6 102088 102087 102090 102094 102095 102096 6 102088 102089 102091 102092 102093 102094 6 102088 102090 102092 102489 102472 102473 6 102091 102090 102093 102489 105947 105948 6 102092 102090 102094 103135 105947 103132 6 102093 102090 102089 102095 103131 103132 6 102094 102089 102096 103131 102083 109776 6 102095 102089 102087 102079 102082 102083 6 100631 100403 100633 100650 100649 100404 6 101795 101796 102099 102295 102296 102297 6 102098 101796 101797 102100 102297 102101 5 102099 101797 101300 101301 102101 6 102100 101301 101302 102102 102297 102099 6 102101 101302 101303 102103 102297 102298 6 102102 101303 101304 102104 102298 102299 6 102103 101304 101305 102105 102299 102300 6 102104 101305 101306 102106 102300 102301 7 102105 101306 101307 101798 102107 102301 102302 5 102106 101798 102108 102302 102303 6 102107 101798 101799 102109 102303 102304 6 102108 101799 101800 102110 102304 102305 6 102109 101800 101801 102111 102305 102306 6 102110 101801 101802 102112 102306 102307 6 102111 101802 101803 102113 102307 102308 6 102112 101803 101804 102114 102308 102309 6 102113 101804 101805 102115 102309 102310 6 102114 101805 101806 102116 102310 102311 6 102115 101806 101807 102117 102311 102312 6 102116 101807 101808 102118 102312 102313 6 102117 101808 101809 102119 102313 102314 6 102118 101809 101810 102120 102314 102315 6 102119 101810 101811 102121 102315 102316 6 102120 101811 101812 102122 102316 102317 6 102121 101812 101813 102123 102317 102318 6 102122 101813 101814 102124 102318 102319 6 102123 101814 101815 102125 102319 102320 6 102124 101815 101816 102126 102320 102321 6 102125 101816 101817 102127 102321 102322 6 102126 101817 101818 102128 102322 102323 6 102127 101818 101819 102129 102323 102324 6 102128 101819 101820 102130 102324 102325 6 102129 101820 101821 102131 102325 102326 6 102130 101821 101822 102132 102326 102327 6 102131 101822 101823 102133 102151 102327 6 102132 101823 101824 102134 102151 102152 6 102133 101824 101825 102135 102152 102153 6 102134 101825 101826 101827 102136 102153 6 102135 101827 102137 102153 102154 102155 6 102136 101827 101828 102138 102155 102156 6 102137 101828 101829 102139 102156 102157 6 102138 101829 101830 102140 102157 102158 6 102139 101830 102141 102146 102158 102159 6 102140 101830 101831 101832 102142 102146 6 102141 101832 101833 102143 102146 102147 6 102142 101833 101834 102144 102147 102148 6 102143 101834 101835 102145 102148 102149 6 102144 101835 101836 102149 102150 101837 6 102140 102141 102142 102147 102159 102160 6 102146 102142 102143 102148 102160 102161 6 102147 102143 102144 102149 102161 102162 6 102148 102144 102145 102150 102162 102163 6 102149 102145 101837 102163 102164 102165 6 102132 102133 102152 102327 102328 102329 6 102151 102133 102134 102153 102329 102330 6 102152 102134 102135 102136 102154 102330 6 102153 102136 102155 102330 102331 102332 6 102154 102136 102137 102156 102332 102333 6 102155 102137 102138 102157 102333 102334 6 102156 102138 102139 102158 102334 102335 6 102157 102139 102140 102159 102335 102336 6 102158 102140 102146 102160 102336 102337 6 102159 102146 102147 102161 102337 102338 6 102160 102147 102148 102162 102338 102339 6 102161 102148 102149 102163 102339 102340 6 102162 102149 102150 102164 102340 102341 6 102163 102150 102165 102341 102342 102343 6 102164 102150 101837 101838 102166 102343 6 102165 101838 101839 102167 102343 102344 6 102166 101839 101840 102168 102169 102344 6 102167 101840 102169 102170 102171 101841 6 102167 102168 102170 102344 102345 102346 6 102169 102168 102171 102346 102347 102348 6 102170 102168 101841 102348 102349 101842 6 101724 101725 102173 103468 103467 104747 6 102172 101725 102174 102804 103395 104747 6 102173 101725 101726 101727 102175 102804 6 102174 101727 101728 102176 102177 102804 6 102175 101728 102177 102178 101731 101729 6 102175 102176 102178 102804 102805 102806 6 102177 102176 101731 102806 102807 102808 6 100027 100028 102180 102181 103851 103852 6 102179 100028 100029 102181 102182 102503 6 102179 102180 102182 102183 102199 103851 6 102181 102180 102183 102184 102502 102503 6 102181 102182 102184 102185 102198 102199 6 102183 102182 102185 102186 102193 102502 6 102183 102184 102186 102187 102197 102198 6 102185 102184 102187 102188 102192 102193 6 102185 102186 102188 102189 102197 109713 6 102187 102186 102189 102190 102191 102192 7 102187 102188 102190 109709 109708 109712 109713 5 102189 102188 102191 109710 109709 6 102190 102188 102192 102510 102512 109710 6 102191 102188 102186 102193 102510 102506 6 102192 102186 102184 102502 102504 102506 6 100415 100039 100040 102195 109704 106488 6 102194 100040 100041 102196 106488 109705 7 102195 100041 100042 109705 100043 109771 109773 6 102185 102187 102198 109713 109714 109720 6 102185 102197 102183 102199 102200 109720 6 102183 102198 102200 102201 102181 103851 6 102199 102198 102201 102202 109720 102217 6 102199 102200 102202 102203 103129 103851 6 102201 102200 102203 102204 102217 102208 6 102201 102202 102204 102205 103129 103130 6 102203 102202 102205 102206 102207 102208 6 102203 102204 102206 103130 101525 104250 6 102205 102204 102207 103343 103341 104250 6 102206 102204 102208 102209 103343 103344 6 102207 102204 102209 102210 102217 102202 6 102207 102208 102210 102211 103344 103345 6 102209 102208 102211 102212 102216 102217 6 102209 102210 102212 102213 103348 103345 6 102211 102210 102213 102214 102215 102216 6 102211 102212 102214 106522 106523 103348 6 102213 102212 102215 109716 109719 106522 6 102214 102212 102216 109716 109715 109714 6 102215 102212 102210 102217 109714 109720 6 102216 102210 102208 102202 109720 102200 6 100408 100059 100060 102219 102545 102546 6 102218 100060 100061 102220 102549 102546 6 102219 100061 100062 102221 102549 102551 6 102220 100062 100063 102222 102551 106702 6 102221 100063 106701 106700 106702 100064 6 101698 101703 102224 103418 103419 103420 6 102223 101703 101704 102225 103420 103421 6 102224 101704 102226 103421 103422 103426 6 102225 101704 101705 102227 103426 103427 6 102226 101705 101706 102228 103427 103428 6 102227 101706 102229 103428 103429 103430 6 102228 101706 101707 102230 102238 103430 6 102229 101707 102231 102232 102238 102239 6 102230 101707 102232 101712 101711 101708 6 102230 102231 101712 102239 102240 101713 6 101748 101749 102234 102235 102242 102752 6 102233 101749 102235 102236 102237 101750 6 102233 102234 102236 102242 102243 102244 6 102235 102234 102237 102244 102245 102246 6 102236 102234 101750 102246 102247 101751 6 102229 102230 102239 103430 103431 103435 6 102238 102230 102232 102240 103435 102561 6 102239 102232 101713 101714 102560 102561 6 101187 101188 101659 101657 103097 101184 6 102233 102235 102243 102752 102753 102754 6 102242 102235 102244 102754 102755 102756 6 102243 102235 102236 102245 102756 102757 6 102244 102236 102246 102757 102758 102759 6 102245 102236 102237 102247 102759 102760 6 102246 102237 101751 101752 102253 102760 6 100034 100035 102249 103331 103332 103333 6 102248 100035 100036 102250 103336 103333 6 102249 100036 100037 100416 102251 103336 7 102250 100416 102252 106490 106491 109706 103336 5 102251 100416 100415 106490 109704 6 102247 101752 101753 102254 102760 102761 6 102253 101753 101754 102255 102761 102762 6 102254 101754 101755 102256 102762 102763 6 102255 101755 101756 101757 102257 102763 6 102256 101757 102258 102763 102764 102765 6 102257 101757 101758 102259 102765 102766 6 102258 101758 101759 102260 102766 102767 6 102259 101759 101760 102261 102767 102768 6 102260 101760 101761 102262 102768 102769 6 102261 101761 101762 102263 102571 102769 6 102262 101762 101763 102264 102571 102572 6 102263 101763 101764 102265 102572 102573 6 102264 101764 101765 102266 102573 102574 6 102265 101765 101766 102267 102574 102575 6 102266 101766 101767 102268 102575 102576 6 102267 101767 101768 102269 102576 102577 6 102268 101768 101769 102270 102577 102578 6 102269 101769 101770 102271 102578 102579 6 102270 101770 101771 102272 102579 102580 6 102271 101771 101772 102273 102580 102581 6 102272 101772 101773 102274 102581 102582 6 102273 101773 101774 102275 102582 102583 6 102274 101774 101775 102276 102583 102584 6 102275 101775 101776 102277 102584 102585 6 102276 101776 101777 102278 102585 102586 6 102277 101777 101778 102279 102586 102587 6 102278 101778 101779 102280 102587 102588 6 102279 101779 101780 102281 102588 102589 6 102280 101780 101781 102282 102589 102590 6 102281 101781 101782 102283 102590 102591 6 102282 101782 101783 102284 102591 102592 6 102283 101783 101784 102285 102592 102593 6 102284 101784 101785 102286 102593 102594 6 102285 101785 101786 102287 102594 102595 6 102286 101786 101787 102288 102595 102596 6 102287 101787 101788 102289 102596 102597 6 102288 101788 101789 102290 102597 102598 6 102289 101789 101790 102291 102598 102599 6 102290 101790 101791 102292 102599 102600 6 102291 101791 101792 102293 102600 102601 6 102292 101792 101793 102294 102601 102602 6 102293 101793 101794 102295 102602 102603 6 102294 101794 101795 102098 102296 102603 6 102295 102098 102297 102603 102604 102605 7 102296 102098 102099 102101 102102 102298 102605 6 102297 102102 102103 102299 102605 102606 6 102298 102103 102104 102300 102606 102607 6 102299 102104 102105 102301 102607 102608 6 102300 102105 102106 102302 102608 102609 6 102301 102106 102107 102303 102609 102610 6 102302 102107 102108 102304 102610 102611 6 102303 102108 102109 102305 102611 102612 6 102304 102109 102110 102306 102612 102613 6 102305 102110 102111 102307 102613 102614 6 102306 102111 102112 102308 102614 102615 6 102307 102112 102113 102309 102615 102616 6 102308 102113 102114 102310 102619 102616 6 102309 102114 102115 102311 102619 102620 6 102310 102115 102116 102312 102620 102621 6 102311 102116 102117 102313 102621 102622 6 102312 102117 102118 102314 102622 102623 6 102313 102118 102119 102315 102623 102624 6 102314 102119 102120 102316 102624 102625 6 102315 102120 102121 102317 102625 102626 6 102316 102121 102122 102318 102626 102627 6 102317 102122 102123 102319 102627 102628 6 102318 102123 102124 102320 102628 102629 6 102319 102124 102125 102321 102629 102630 6 102320 102125 102126 102322 102630 102631 6 102321 102126 102127 102323 102631 102632 6 102322 102127 102128 102324 102632 102633 6 102323 102128 102129 102325 102633 102634 6 102324 102129 102130 102326 102634 102635 6 102325 102130 102131 102327 102635 102636 6 102326 102131 102132 102151 102328 102636 6 102327 102151 102329 102636 102637 102638 6 102328 102151 102152 102330 102641 102638 6 102329 102152 102153 102154 102331 102641 6 102330 102154 102332 102642 102641 102643 6 102331 102154 102155 102333 102643 102644 6 102332 102155 102156 102334 102644 102645 6 102333 102156 102157 102335 102645 102646 6 102334 102157 102158 102336 102646 102647 6 102335 102158 102159 102337 102647 102648 6 102336 102159 102160 102338 102648 102649 6 102337 102160 102161 102339 102649 102650 6 102338 102161 102162 102340 102650 102651 6 102339 102162 102163 102341 102651 102652 6 102340 102163 102164 102342 102652 102653 6 102341 102164 102343 102653 102654 102655 6 102342 102164 102165 102166 102344 102655 6 102343 102166 102167 102169 102345 102655 6 102344 102169 102346 102655 102656 102657 6 102345 102169 102170 102347 102657 102658 6 102346 102170 102348 102658 102659 102660 6 102347 102170 102171 102349 102660 102661 6 102348 102171 101842 101843 102350 102661 6 102349 101843 101844 102351 102661 102662 6 102350 101844 101845 102352 102662 102663 6 102351 101845 101846 102353 102663 102664 6 102352 101846 101847 102354 102664 102665 6 102353 101847 101848 102355 102665 102666 6 102354 101848 101849 102356 102666 102667 6 102355 101849 101850 102357 102667 102668 6 102356 101850 101851 102358 102668 102669 6 102357 101851 101852 102359 102669 102670 6 102358 101852 101853 102360 102670 102671 6 102359 101853 101854 102361 102671 102672 6 102360 101854 101855 101966 102362 102672 6 102361 101966 102363 102672 102673 102674 6 102362 101966 101967 102364 102674 102675 6 102363 101967 101968 102365 102675 102676 6 102364 101968 101969 102366 102676 102677 6 102365 101969 101970 102367 102677 102678 6 102366 101970 101971 102368 102678 102679 6 102367 101971 101972 102369 102679 102680 6 102368 101972 101973 102370 102680 102681 6 102369 101973 101974 102371 102681 102682 6 102370 101974 101975 102372 102682 102683 6 102371 101975 101976 102373 102683 102684 6 102372 101976 101977 102374 102684 102685 6 102373 101977 101978 102375 102685 102686 6 102374 101978 101979 102376 102686 102687 6 102375 101979 101980 102377 102687 102688 6 102376 101980 101981 102378 102688 102689 6 102377 101981 101982 102379 102689 102690 6 102378 101982 101983 102380 102690 102691 6 102379 101983 101984 102381 102691 102692 6 102380 101984 101985 102382 102692 102693 6 102381 101985 101986 102383 102693 102694 6 102382 101986 101987 102384 102694 102695 6 102383 101987 101988 102385 102695 102696 6 102384 101988 101989 102386 102696 102697 6 102385 101989 101990 102387 102697 102698 6 102386 101990 101991 102388 102698 102699 6 102387 101991 101992 102389 102699 102700 6 102388 101992 101993 102390 102700 102701 6 102389 101993 101994 102391 102701 102702 6 102390 101994 101995 102392 102702 102703 6 102391 101995 101996 102393 102703 102704 6 102392 101996 101997 102394 102704 102705 6 102393 101997 101998 102395 102705 102706 6 102394 101998 101999 102396 102706 102707 6 102395 101999 102000 102397 102707 102708 6 102396 102000 102001 102398 102708 102709 6 102397 102001 102002 102399 102513 102709 6 102398 102002 102003 102400 102513 102514 6 102399 102003 102004 102401 102514 102515 6 102400 102004 102005 102402 102515 102516 6 102401 102005 102006 102403 102516 102517 6 102402 102006 102007 102404 102517 102518 6 102403 102007 102008 102405 102518 102519 6 102404 102008 102009 102406 102519 102520 6 102405 102009 102010 102407 102520 102521 6 102406 102010 102011 102408 102521 102522 6 102407 102011 102012 102409 102522 102523 6 102408 102012 102013 102410 102523 102524 6 102409 102013 102014 102411 102524 102525 6 102410 102014 102015 102412 102525 102526 6 102411 102015 102016 102413 102526 102527 6 102412 102016 102017 102414 102527 102528 6 102413 102017 102018 102415 102528 102529 6 102414 102018 102019 102416 102529 102530 6 102415 102019 102020 102417 102530 102531 6 102416 102020 102021 102418 102531 102532 6 102417 102021 102022 102419 102532 102533 6 102418 102022 102023 102420 102533 102534 6 102419 102023 102024 102421 102534 102535 6 102420 102024 102025 102422 102535 102536 6 102421 102025 102026 102423 102536 102537 6 102422 102026 102027 102424 102537 102538 6 102423 102027 102028 102425 102538 102539 6 102424 102028 102029 102426 102539 102540 6 102425 102029 102030 102427 102540 102541 6 102426 102030 102031 102428 102541 102542 6 102427 102031 102032 102429 102542 102543 6 102428 102032 102033 102430 102543 102544 6 102429 102033 102034 102431 102544 102432 6 102430 102034 102035 102036 102037 102432 7 102431 102037 102038 102433 102544 102430 102556 6 102432 102038 102039 102434 102556 102557 6 102433 102039 102040 102435 102557 102558 6 102434 102040 102436 102558 102559 102437 5 102435 102040 102041 102042 102437 6 102436 102042 102438 102559 102435 102745 6 102437 102042 102043 102439 102745 102746 7 102438 102043 102044 102440 102746 102747 102748 6 102439 102044 102045 102046 102441 102748 6 102440 102046 102442 102748 102749 102750 6 102441 102046 102047 102443 102750 102445 6 102442 102047 102048 102049 102444 102445 6 102443 102049 102445 102446 102447 102448 6 102443 102444 102446 102750 102442 103060 6 102445 102444 102447 103060 103061 103062 6 102446 102444 102448 103062 103063 103064 6 102447 102444 102049 102050 102449 103064 6 102448 102050 102051 102450 103064 103065 6 102449 102051 102052 102451 103065 103066 6 102450 102052 102053 102452 103066 103067 6 102451 102053 102453 103067 103068 102454 6 102452 102053 102054 102055 102056 102454 6 102453 102056 102455 103068 102452 103074 6 102454 102056 102057 102456 103074 103075 6 102455 102057 102058 102059 102457 103075 6 102456 102059 102060 102458 103075 103076 6 102457 102060 102061 102459 103076 103077 6 102458 102061 102062 102460 103077 103078 6 102459 102062 102063 102461 103078 103079 6 102460 102063 102462 103079 103080 103081 6 102461 102063 102064 102463 103081 103082 6 102462 102064 102065 102464 103082 103083 6 102463 102065 102465 102467 102482 103083 6 102464 102065 102066 102067 102466 102467 6 102465 102067 102069 102467 102468 102469 6 102465 102466 102468 102464 102482 102483 6 102467 102466 102469 102471 102477 102483 6 102468 102466 102069 102071 102470 102471 6 102469 102071 102471 102472 102473 102073 6 102469 102470 102472 102468 102477 102478 6 102471 102470 102473 102489 102478 102091 6 102472 102470 102073 102091 102088 102086 6 101516 101521 100914 100915 100576 101515 6 101578 101587 102476 101574 106361 101573 6 102475 101587 101589 106353 106359 106361 6 102468 102471 102478 102483 102484 102485 6 102477 102471 102485 102488 102489 102472 6 101642 101643 101644 102480 101641 102490 6 102479 101644 102481 102490 102494 102869 6 102480 101644 101645 101650 102494 102495 6 102464 102467 102483 103085 103083 103926 6 102482 102467 102468 102477 102484 103926 6 102483 102477 102485 102486 103926 103150 6 102484 102477 102478 102486 102487 102488 6 102484 102485 102487 103148 103149 103150 6 102486 102485 102488 103148 103967 103161 6 102487 102485 102478 102489 105948 103967 6 102488 102478 102472 102091 102092 105948 6 101641 102479 102480 102867 102868 102869 6 100070 100071 102492 103436 103437 103441 6 102491 100071 100072 100409 102493 103436 6 102492 100409 101606 103515 103436 103516 6 102480 102481 102495 102869 102870 102871 6 102494 102481 101650 101651 102496 102871 6 102495 101651 102497 102871 102872 102882 6 102496 101651 101652 102498 102882 102883 6 102497 101652 102499 102883 104092 104093 6 102498 101652 101653 102500 102809 104093 6 102499 101653 101654 102501 102809 102810 6 102500 101654 101656 102810 102811 102812 6 102184 102182 102503 102193 102504 102505 6 102502 102182 100030 102505 100029 102180 6 102193 102502 102505 102506 102507 102508 6 102504 102502 102508 100031 100030 102503 6 102193 102504 102507 102509 102510 102192 6 102506 102504 102508 102509 103330 103880 6 102507 102504 102505 100031 103330 100032 6 102506 102507 102510 102511 103880 103881 6 102506 102509 102511 102512 102191 102192 6 102510 102509 102512 106499 106498 103881 6 102510 102511 102191 106498 106500 109710 6 102398 102399 102514 102709 102710 102711 6 102513 102399 102400 102515 102711 102712 6 102514 102400 102401 102516 102712 102713 6 102515 102401 102402 102517 102713 102714 6 102516 102402 102403 102518 102714 102715 6 102517 102403 102404 102519 102715 102716 6 102518 102404 102405 102520 102716 102717 6 102519 102405 102406 102521 102717 102718 6 102520 102406 102407 102522 102718 102719 6 102521 102407 102408 102523 102719 102720 6 102522 102408 102409 102524 102720 102721 6 102523 102409 102410 102525 102721 102722 6 102524 102410 102411 102526 102722 102723 6 102525 102411 102412 102527 102723 102724 6 102526 102412 102413 102528 102724 102725 6 102527 102413 102414 102529 102725 102726 6 102528 102414 102415 102530 102726 102727 6 102529 102415 102416 102531 102727 102728 6 102530 102416 102417 102532 102728 102729 6 102531 102417 102418 102533 102729 102730 6 102532 102418 102419 102534 102730 102731 6 102533 102419 102420 102535 102731 102732 6 102534 102420 102421 102536 102732 102733 6 102535 102421 102422 102537 102733 102734 6 102536 102422 102423 102538 102734 102735 6 102537 102423 102424 102539 102735 102736 6 102538 102424 102425 102540 102736 102737 6 102539 102425 102426 102541 102552 102737 6 102540 102426 102427 102542 102552 102553 6 102541 102427 102428 102543 102553 102554 6 102542 102428 102429 102544 102554 102555 6 102543 102429 102430 102432 102555 102556 6 100408 102218 102546 102547 102841 102842 6 102545 102218 102547 102548 102549 102219 6 102545 102546 102548 102842 102845 102846 6 102547 102546 102549 102550 102857 102846 6 102548 102546 102219 102220 102550 102551 6 102548 102549 102551 106691 102856 102857 7 102550 102549 102220 102221 106702 106690 106691 6 102540 102541 102553 102737 102738 102739 6 102552 102541 102542 102554 102739 102740 6 102553 102542 102543 102555 102570 102740 6 102554 102543 102544 102556 102570 102557 5 102555 102544 102432 102433 102557 7 102556 102433 102434 102558 102570 102555 102742 5 102557 102434 102435 102559 102742 7 102558 102435 102437 102742 102743 102744 102745 6 102240 101714 102561 102562 102563 102564 6 102240 102560 102562 103435 102239 103446 6 102561 102560 102563 103446 103447 103448 6 102562 102560 102564 103448 103449 102567 6 102563 102560 101714 101715 102565 102567 6 102564 101715 101716 101717 102566 102567 6 102565 101717 102567 102568 102569 101718 6 102565 102566 102568 103449 102563 102564 6 102567 102566 102569 103458 103455 103449 6 102568 102566 101718 103463 103458 101719 6 102554 102555 102557 102740 102741 102742 6 102262 102263 102572 102769 102770 102771 6 102571 102263 102264 102573 102771 102772 6 102572 102264 102265 102574 102772 102773 6 102573 102265 102266 102575 102773 102774 6 102574 102266 102267 102576 102774 102775 6 102575 102267 102268 102577 102775 102776 6 102576 102268 102269 102578 102776 102777 6 102577 102269 102270 102579 102777 102778 6 102578 102270 102271 102580 102778 102779 6 102579 102271 102272 102581 102779 102780 6 102580 102272 102273 102582 102780 102781 6 102581 102273 102274 102583 102781 102782 6 102582 102274 102275 102584 102782 102783 6 102583 102275 102276 102585 102783 102784 6 102584 102276 102277 102586 102784 102785 6 102585 102277 102278 102587 102785 102786 6 102586 102278 102279 102588 102786 102787 6 102587 102279 102280 102589 102787 102788 6 102588 102280 102281 102590 102788 102789 6 102589 102281 102282 102591 102789 102790 6 102590 102282 102283 102592 102790 102791 6 102591 102283 102284 102593 102791 102792 6 102592 102284 102285 102594 102792 102793 6 102593 102285 102286 102595 102793 102794 6 102594 102286 102287 102596 102794 102795 6 102595 102287 102288 102597 102795 102796 6 102596 102288 102289 102598 102796 102797 6 102597 102289 102290 102599 102797 102798 6 102598 102290 102291 102600 102798 102799 6 102599 102291 102292 102601 102799 102800 6 102600 102292 102293 102602 102800 102801 6 102601 102293 102294 102603 102801 102802 6 102602 102294 102295 102296 102604 102802 6 102603 102296 102605 102802 102803 102606 5 102604 102296 102297 102298 102606 7 102605 102298 102299 102607 102803 102604 102826 5 102606 102299 102300 102608 102826 7 102607 102300 102301 102609 102826 102827 102828 6 102608 102301 102302 102610 102828 102829 6 102609 102302 102303 102611 102829 102830 6 102610 102303 102304 102612 102830 102831 6 102611 102304 102305 102613 102831 102832 6 102612 102305 102306 102614 102832 102833 6 102613 102306 102307 102615 102833 102834 6 102614 102307 102308 102616 102617 102834 6 102615 102308 102617 102618 102619 102309 6 102615 102616 102618 102834 102835 102836 6 102617 102616 102619 102836 102837 102838 6 102618 102616 102309 102310 102620 102838 6 102619 102310 102311 102621 102840 102838 6 102620 102311 102312 102622 102959 102840 6 102621 102312 102313 102623 102959 102960 6 102622 102313 102314 102624 102960 102961 6 102623 102314 102315 102625 102961 102962 6 102624 102315 102316 102626 102962 102963 6 102625 102316 102317 102627 102966 102963 6 102626 102317 102318 102628 102966 102967 6 102627 102318 102319 102629 102967 102968 6 102628 102319 102320 102630 102968 102969 6 102629 102320 102321 102631 102969 102970 6 102630 102321 102322 102632 102970 102971 6 102631 102322 102323 102633 102971 102972 6 102632 102323 102324 102634 102972 102973 6 102633 102324 102325 102635 102973 102974 6 102634 102325 102326 102636 102974 102975 6 102635 102326 102327 102328 102637 102975 6 102636 102328 102638 102639 102975 102976 6 102637 102328 102639 102640 102641 102329 6 102637 102638 102640 102976 102977 102978 6 102639 102638 102641 102642 102978 102979 6 102640 102638 102642 102331 102330 102329 6 102640 102641 102331 102643 102979 102980 6 102642 102331 102332 102644 102980 102981 6 102643 102332 102333 102645 102981 102982 6 102644 102333 102334 102646 102982 102983 6 102645 102334 102335 102647 102983 102984 6 102646 102335 102336 102648 102984 102985 6 102647 102336 102337 102649 102985 102986 6 102648 102337 102338 102650 102986 102987 6 102649 102338 102339 102651 102987 102988 6 102650 102339 102340 102652 102988 102989 6 102651 102340 102341 102653 102989 102990 6 102652 102341 102342 102654 102990 102991 6 102653 102342 102655 102991 102992 102656 6 102654 102342 102343 102344 102345 102656 6 102655 102345 102657 102992 102654 102993 6 102656 102345 102346 102658 102993 102994 6 102657 102346 102347 102659 102994 102995 6 102658 102347 102660 102995 102996 102997 6 102659 102347 102348 102661 102997 102998 6 102660 102348 102349 102350 102662 102998 6 102661 102350 102351 102663 102998 102999 6 102662 102351 102352 102664 102999 103000 6 102663 102352 102353 102665 103000 103001 6 102664 102353 102354 102666 103001 103002 6 102665 102354 102355 102667 103002 103565 6 102666 102355 102356 102668 103565 103566 6 102667 102356 102357 102669 103566 103567 6 102668 102357 102358 102670 103567 103568 6 102669 102358 102359 102671 103568 103569 6 102670 102359 102360 102672 103569 103570 6 102671 102360 102361 102362 102673 103570 6 102672 102362 102674 103570 103571 103572 6 102673 102362 102363 102675 103572 103573 6 102674 102363 102364 102676 103391 103573 6 102675 102364 102365 102677 103391 103392 6 102676 102365 102366 102678 103392 103393 6 102677 102366 102367 102679 103393 103394 6 102678 102367 102368 102680 103394 103579 6 102679 102368 102369 102681 103579 103580 6 102680 102369 102370 102682 103580 103581 6 102681 102370 102371 102683 103581 103582 6 102682 102371 102372 102684 103582 103583 6 102683 102372 102373 102685 103583 103584 6 102684 102373 102374 102686 103584 103585 6 102685 102374 102375 102687 103585 103586 6 102686 102375 102376 102688 103586 103587 6 102687 102376 102377 102689 103587 103588 6 102688 102377 102378 102690 103278 103588 6 102689 102378 102379 102691 103278 103279 6 102690 102379 102380 102692 103279 103280 6 102691 102380 102381 102693 103280 103281 6 102692 102381 102382 102694 103281 103282 6 102693 102382 102383 102695 103282 103283 6 102694 102383 102384 102696 103283 103284 6 102695 102384 102385 102697 103284 103285 6 102696 102385 102386 102698 103285 103286 6 102697 102386 102387 102699 103286 103287 6 102698 102387 102388 102700 103287 103288 6 102699 102388 102389 102701 103288 103289 6 102700 102389 102390 102702 103289 103290 6 102701 102390 102391 102703 103003 103290 6 102702 102391 102392 102704 103003 103004 6 102703 102392 102393 102705 103004 103005 6 102704 102393 102394 102706 103005 103006 6 102705 102394 102395 102707 103006 103007 6 102706 102395 102396 102708 103007 103008 6 102707 102396 102397 102709 103008 103009 6 102708 102397 102398 102513 102710 103009 6 102709 102513 102711 103009 103010 103011 6 102710 102513 102514 102712 103011 103012 6 102711 102514 102515 102713 103012 103013 6 102712 102515 102516 102714 103013 103014 6 102713 102516 102517 102715 103014 103015 6 102714 102517 102518 102716 103015 103016 6 102715 102518 102519 102717 103016 103017 6 102716 102519 102520 102718 103017 103018 6 102717 102520 102521 102719 103018 103019 6 102718 102521 102522 102720 103019 103020 6 102719 102522 102523 102721 103020 103021 6 102720 102523 102524 102722 103021 103022 6 102721 102524 102525 102723 103022 103023 6 102722 102525 102526 102724 103023 103024 6 102723 102526 102527 102725 103024 103025 6 102724 102527 102528 102726 103025 103026 6 102725 102528 102529 102727 103026 103027 6 102726 102529 102530 102728 103027 103028 6 102727 102530 102531 102729 103028 103029 6 102728 102531 102532 102730 103029 103030 6 102729 102532 102533 102731 103030 103031 6 102730 102533 102534 102732 103031 103032 6 102731 102534 102535 102733 103032 103033 6 102732 102535 102536 102734 103033 103034 6 102733 102536 102537 102735 103034 103035 6 102734 102537 102538 102736 103035 103036 6 102735 102538 102539 102737 103036 103037 6 102736 102539 102540 102552 102738 103037 6 102737 102552 102739 103037 103038 103039 6 102738 102552 102553 102740 103039 103040 6 102739 102553 102554 102570 102741 103040 6 102740 102570 102742 103040 103041 102743 6 102741 102570 102557 102558 102559 102743 6 102742 102559 102744 103041 102741 103049 5 102743 102559 102745 103049 103050 6 102744 102559 102437 102438 102746 103050 6 102745 102438 102439 102747 103050 103051 6 102746 102439 102748 103051 103052 102749 5 102747 102439 102440 102441 102749 6 102748 102441 102750 103052 102747 103058 7 102749 102441 102442 102445 103058 103059 103060 6 101746 101747 101748 102752 102893 102894 6 102751 101748 102233 102242 102753 102894 6 102752 102242 102754 102894 102895 102896 6 102753 102242 102243 102755 102896 102897 6 102754 102243 102756 102897 102898 102899 6 102755 102243 102244 102757 102899 102900 6 102756 102244 102245 102758 102900 102901 6 102757 102245 102759 102901 102902 102903 6 102758 102245 102246 102760 102903 102904 6 102759 102246 102247 102253 102761 102904 6 102760 102253 102254 102762 102904 102905 6 102761 102254 102255 102763 102905 102906 6 102762 102255 102256 102257 102764 102906 6 102763 102257 102765 102906 102907 102908 6 102764 102257 102258 102766 102908 102909 6 102765 102258 102259 102767 102909 102910 6 102766 102259 102260 102768 102910 102911 6 102767 102260 102261 102769 102911 102912 6 102768 102261 102262 102571 102770 102912 6 102769 102571 102771 102912 102913 102914 6 102770 102571 102572 102772 102914 102915 6 102771 102572 102573 102773 102915 102916 6 102772 102573 102574 102774 102916 102917 6 102773 102574 102575 102775 102917 102918 6 102774 102575 102576 102776 102918 102919 6 102775 102576 102577 102777 102919 102920 6 102776 102577 102578 102778 102920 102921 6 102777 102578 102579 102779 102921 102922 6 102778 102579 102580 102780 102922 102923 6 102779 102580 102581 102781 102923 102924 6 102780 102581 102582 102782 102924 102925 6 102781 102582 102583 102783 102925 102926 6 102782 102583 102584 102784 102926 102927 6 102783 102584 102585 102785 102927 102928 6 102784 102585 102586 102786 102928 102929 6 102785 102586 102587 102787 102929 102930 6 102786 102587 102588 102788 102930 102931 6 102787 102588 102589 102789 102931 102932 6 102788 102589 102590 102790 102932 102933 6 102789 102590 102591 102791 102933 102934 6 102790 102591 102592 102792 102934 102935 6 102791 102592 102593 102793 102935 102936 6 102792 102593 102594 102794 102936 102937 6 102793 102594 102595 102795 102937 102938 6 102794 102595 102596 102796 102938 102939 6 102795 102596 102597 102797 102939 102940 6 102796 102597 102598 102798 102940 102941 6 102797 102598 102599 102799 102941 102942 6 102798 102599 102600 102800 102942 102943 6 102799 102600 102601 102801 102943 102944 6 102800 102601 102602 102802 102944 102824 6 102801 102602 102603 102604 102803 102824 6 102802 102604 102606 102824 102825 102826 6 102173 102174 102175 102177 102805 103395 6 102804 102177 102806 103395 103396 103400 6 102805 102177 102178 102807 103400 103401 6 102806 102178 102808 103401 103402 103403 6 102807 102178 101731 103403 103404 101732 6 102499 102500 102810 104095 104093 104388 6 102809 102500 102501 102811 104388 102813 6 102810 102501 102812 101664 101666 102813 6 102811 102501 101656 101658 101661 101664 6 102811 101666 102814 103139 104388 102810 6 102813 101666 101667 102815 102817 103139 6 102814 101667 102816 102817 102818 102819 6 102815 101667 101668 102819 102820 102821 6 102814 102815 102818 103139 103140 103141 6 102817 102815 102819 103141 103142 103143 6 102818 102815 102816 102820 103143 103144 6 102819 102816 102821 103144 103145 103146 6 102820 102816 101668 102822 102823 103146 6 102821 101668 102823 101672 101671 101669 6 102821 102822 101672 103146 103147 101673 6 102802 102803 102825 102944 102801 102945 6 102824 102803 102826 102945 102946 102827 6 102825 102803 102606 102607 102608 102827 6 102826 102608 102828 102946 102825 102947 5 102827 102608 102609 102829 102947 6 102828 102609 102610 102830 102947 102948 6 102829 102610 102611 102831 102948 102949 6 102830 102611 102612 102832 102949 102950 6 102831 102612 102613 102833 102950 102951 6 102832 102613 102614 102834 102951 102952 7 102833 102614 102615 102617 102835 102952 102953 5 102834 102617 102836 102953 102954 6 102835 102617 102618 102837 102954 102955 6 102836 102618 102838 102839 102955 102956 6 102837 102618 102839 102840 102620 102619 6 102837 102838 102840 102956 102957 102958 6 102839 102838 102620 102958 102959 102621 6 100408 102545 102842 102843 109690 100429 6 102841 102545 102843 102844 102547 102845 6 102841 102842 102844 103168 109688 109690 6 102843 102842 103168 103165 103162 102845 6 102842 102547 102846 102847 103162 102844 6 102845 102547 102847 102848 102548 102857 6 102845 102846 102848 102849 103162 103163 6 102847 102846 102849 102850 102851 102857 6 102847 102848 102850 102852 102858 103163 6 102849 102848 102851 102852 102853 102854 6 102850 102848 102854 102855 102856 102857 6 102849 102850 102853 102858 102859 102860 5 102852 102850 102854 102860 106676 7 102853 102850 102851 102855 106676 106677 106678 7 102854 102851 102856 106689 106686 106680 106678 6 102855 102851 102857 106691 106689 102550 6 102856 102851 102848 102550 102548 102846 6 102849 102852 102859 103180 103163 106661 7 102858 102852 102860 106661 106674 106666 106662 6 102859 102852 102853 106675 106674 106676 5 101631 101633 101628 101629 101630 6 101628 101633 101636 102863 101627 107215 7 102862 101636 101637 102864 107216 107215 107217 5 102863 101637 101638 102865 107217 7 102864 101638 101639 102866 107217 107218 107219 7 102865 101639 101640 102867 103189 103214 107219 6 102866 101640 101641 102490 102868 103189 6 102867 102490 102869 103189 103190 103181 6 102868 102490 102480 102494 102870 103181 6 102869 102494 102871 102873 102884 103181 6 102870 102494 102495 102496 102872 102873 6 102871 102496 102873 102874 102881 102882 6 102871 102872 102874 102875 102870 102884 6 102873 102872 102875 102876 102880 102881 6 102873 102874 102876 102877 102884 102885 6 102875 102874 102877 102878 102879 102880 6 102875 102876 102878 102885 102886 102887 6 102877 102876 102879 102887 102888 102889 6 102878 102876 102880 102892 102889 107600 6 102879 102876 102874 102881 104086 107600 6 102880 102874 102872 102882 104086 104087 6 102881 102872 102496 102497 102883 104087 6 102882 102497 102498 104087 104088 104092 6 102870 102873 102875 102885 103181 103182 6 102884 102875 102877 102886 103182 103183 6 102885 102877 102887 103183 103184 103185 6 102886 102877 102878 102888 103188 103185 6 102887 102878 102889 102890 103959 103188 6 102888 102878 102890 102891 102892 102879 6 102888 102889 102891 103961 103959 107592 6 102890 102889 102892 107592 107593 107594 6 102891 102889 102879 107600 107597 107594 6 101745 101746 102751 102894 103199 103198 6 102893 102751 102752 102753 102895 103198 6 102894 102753 102896 103198 103200 103201 6 102895 102753 102754 102897 103201 103202 6 102896 102754 102755 102898 103202 103203 6 102897 102755 102899 103203 103204 103205 6 102898 102755 102756 102900 103205 103206 6 102899 102756 102757 102901 103206 103207 6 102900 102757 102758 102902 103207 103208 6 102901 102758 102903 103208 103209 103210 6 102902 102758 102759 102904 103213 103210 6 102903 102759 102760 102761 102905 103213 6 102904 102761 102762 102906 103483 103213 6 102905 102762 102763 102764 102907 103483 6 102906 102764 102908 103482 103212 103483 7 102907 102764 102765 102909 103500 103482 103697 6 102908 102765 102766 102910 103697 103698 6 102909 102766 102767 102911 103698 103699 6 102910 102767 102768 102912 103699 103700 6 102911 102768 102769 102770 102913 103700 6 102912 102770 102914 103700 103701 103702 6 102913 102770 102771 102915 103702 103703 6 102914 102771 102772 102916 103703 103704 6 102915 102772 102773 102917 103704 103705 6 102916 102773 102774 102918 103705 103706 6 102917 102774 102775 102919 103706 103707 6 102918 102775 102776 102920 103707 103708 6 102919 102776 102777 102921 103708 103709 6 102920 102777 102778 102922 103709 103710 6 102921 102778 102779 102923 103710 103711 6 102922 102779 102780 102924 103711 103712 6 102923 102780 102781 102925 103712 103713 6 102924 102781 102782 102926 103713 103714 6 102925 102782 102783 102927 103714 103715 6 102926 102783 102784 102928 103715 103716 6 102927 102784 102785 102929 103716 103717 6 102928 102785 102786 102930 103717 103718 6 102929 102786 102787 102931 103718 103719 6 102930 102787 102788 102932 103719 103720 6 102931 102788 102789 102933 103720 103721 6 102932 102789 102790 102934 103721 103722 6 102933 102790 102791 102935 103722 103723 6 102934 102791 102792 102936 103723 103724 6 102935 102792 102793 102937 103724 103725 6 102936 102793 102794 102938 103725 103726 6 102937 102794 102795 102939 103726 103727 6 102938 102795 102796 102940 103727 103728 6 102939 102796 102797 102941 103728 103729 6 102940 102797 102798 102942 103729 103730 6 102941 102798 102799 102943 103730 103731 6 102942 102799 102800 102944 103731 103732 6 102943 102800 102801 102824 102945 103732 6 102944 102824 102825 102946 103732 103733 6 102945 102825 102827 102947 103733 103734 6 102946 102827 102828 102829 102948 103734 7 102947 102829 102830 102949 103734 103735 103736 6 102948 102830 102831 102950 103242 103736 6 102949 102831 102832 102951 103242 103243 6 102950 102832 102833 102952 103243 103244 6 102951 102833 102834 102953 103244 103245 5 102952 102834 102835 102954 103245 7 102953 102835 102836 102955 103245 103246 103247 6 102954 102836 102837 102956 103247 103248 6 102955 102837 102839 102957 103248 103249 6 102956 102839 102958 103249 103250 103251 6 102957 102839 102840 102959 103251 103252 6 102958 102840 102621 102622 102960 103252 6 102959 102622 102623 102961 103254 103252 6 102960 102623 102624 102962 103254 103255 6 102961 102624 102625 102963 102964 103255 6 102962 102625 102964 102965 102966 102626 6 102962 102963 102965 103255 103256 103257 6 102964 102963 102966 103257 103258 103259 6 102965 102963 102626 102627 102967 103259 6 102966 102627 102628 102968 103259 103260 6 102967 102628 102629 102969 103260 103261 6 102968 102629 102630 102970 103261 103262 6 102969 102630 102631 102971 103262 103263 6 102970 102631 102632 102972 103263 103264 6 102971 102632 102633 102973 103264 103265 6 102972 102633 102634 102974 103265 103266 6 102973 102634 102635 102975 103266 103267 6 102974 102635 102636 102637 102976 103267 6 102975 102637 102639 102977 103267 103268 6 102976 102639 102978 103268 103269 103270 6 102977 102639 102640 102979 103270 103271 6 102978 102640 102642 102980 103271 103272 6 102979 102642 102643 102981 103272 103273 6 102980 102643 102644 102982 103273 103274 6 102981 102644 102645 102983 103274 103275 6 102982 102645 102646 102984 103275 103276 6 102983 102646 102647 102985 103276 103277 6 102984 102647 102648 102986 103277 103824 6 102985 102648 102649 102987 103545 103824 6 102986 102649 102650 102988 103545 103546 6 102987 102650 102651 102989 103546 103547 6 102988 102651 102652 102990 103547 103548 6 102989 102652 102653 102991 103548 103549 6 102990 102653 102654 102992 103549 103550 6 102991 102654 102656 102993 103550 103551 6 102992 102656 102657 102994 103551 103552 6 102993 102657 102658 102995 103552 103553 6 102994 102658 102659 102996 103553 103554 6 102995 102659 102997 103554 103555 103556 6 102996 102659 102660 102998 103556 103557 6 102997 102660 102661 102662 102999 103557 6 102998 102662 102663 103000 103557 103558 6 102999 102663 102664 103001 103558 103559 6 103000 102664 102665 103002 103559 103560 6 103001 102665 102666 103560 103561 103565 6 102702 102703 103004 103290 103291 103292 6 103003 102703 102704 103005 103292 103293 6 103004 102704 102705 103006 103293 103294 6 103005 102705 102706 103007 103294 103295 6 103006 102706 102707 103008 103295 103296 6 103007 102707 102708 103009 103296 103297 6 103008 102708 102709 102710 103010 103297 6 103009 102710 103011 103297 103298 103299 6 103010 102710 102711 103012 103299 103300 6 103011 102711 102712 103013 103300 103301 6 103012 102712 102713 103014 103301 103302 6 103013 102713 102714 103015 103302 103303 6 103014 102714 102715 103016 103303 103304 6 103015 102715 102716 103017 103304 103305 6 103016 102716 102717 103018 103305 103306 6 103017 102717 102718 103019 103306 103307 6 103018 102718 102719 103020 103307 103308 6 103019 102719 102720 103021 103308 103309 6 103020 102720 102721 103022 103309 103310 6 103021 102721 102722 103023 103310 103311 6 103022 102722 102723 103024 103311 103312 6 103023 102723 102724 103025 103312 103313 6 103024 102724 102725 103026 103313 103314 6 103025 102725 102726 103027 103314 103315 6 103026 102726 102727 103028 103315 103316 6 103027 102727 102728 103029 103316 103317 6 103028 102728 102729 103030 103317 103318 6 103029 102729 102730 103031 103318 103319 6 103030 102730 102731 103032 103319 103320 6 103031 102731 102732 103033 103320 103321 6 103032 102732 102733 103034 103321 103322 6 103033 102733 102734 103035 103042 103322 6 103034 102734 102735 103036 103042 103043 6 103035 102735 102736 103037 103043 103044 6 103036 102736 102737 102738 103038 103044 6 103037 102738 103039 103044 103045 103046 6 103038 102738 102739 103040 103046 103047 6 103039 102739 102740 102741 103041 103047 6 103040 102741 102743 103047 103048 103049 6 103034 103035 103043 103322 103323 103324 6 103042 103035 103036 103044 103324 103325 6 103043 103036 103037 103038 103045 103325 6 103044 103038 103046 103325 103326 103327 6 103045 103038 103039 103047 103053 103327 6 103046 103039 103040 103041 103048 103053 6 103047 103041 103049 103053 103054 103055 6 103048 103041 102743 102744 103050 103055 6 103049 102744 102745 102746 103051 103055 6 103050 102746 102747 103052 103055 103056 6 103051 102747 102749 103056 103057 103058 6 103046 103047 103048 103054 103327 103328 6 103053 103048 103055 103328 103329 103056 6 103054 103048 103049 103050 103051 103056 7 103055 103051 103052 103057 103329 103054 103641 5 103056 103052 103058 103641 103642 7 103057 103052 102749 102750 103059 103642 103643 6 103058 102750 103060 103643 103644 103061 5 103059 102750 102445 102446 103061 6 103060 102446 103062 103644 103059 103910 6 103061 102446 102447 103063 103910 103911 6 103062 102447 103064 103069 103911 103912 6 103063 102447 102448 102449 103065 103069 6 103064 102449 102450 103066 103069 103070 6 103065 102450 102451 103067 103070 103071 6 103066 102451 102452 103068 103071 103072 6 103067 102452 102454 103072 103073 103074 6 103063 103064 103065 103070 103912 103913 6 103069 103065 103066 103071 103913 103914 6 103070 103066 103067 103072 103914 103915 6 103071 103067 103068 103073 103915 103916 6 103072 103068 103074 103916 103917 103918 6 103073 103068 102454 102455 103075 103918 6 103074 102455 102456 102457 103076 103918 6 103075 102457 102458 103077 103349 103918 6 103076 102458 102459 103078 103349 103350 6 103077 102459 102460 103079 103107 103350 6 103078 102460 102461 103080 103107 103108 6 103079 102461 103081 103091 103108 103109 6 103080 102461 102462 103082 103091 103092 6 103081 102462 102463 103083 103084 103092 6 103082 102463 103084 103085 102482 102464 6 103082 103083 103085 103092 103112 103359 6 103084 103083 102482 103926 103152 103359 6 100016 100017 103087 103088 103089 103090 6 103086 100017 100018 103095 103126 103090 6 100016 103086 103089 103098 100417 100015 6 103088 103086 103090 103098 103103 103104 6 103089 103086 103104 103105 103087 103126 6 103080 103081 103092 103109 103110 103111 6 103091 103081 103082 103084 103111 103112 5 101615 101616 103094 104099 103544 6 103093 101616 101617 104367 104099 101624 6 103087 100018 100019 103096 103125 103126 6 103095 100019 100020 103125 103128 100414 6 102241 101657 101655 101647 101182 101184 6 103088 103089 100417 103099 103102 103103 6 100417 103098 100418 103100 103101 103102 6 100418 103099 103101 103228 103229 103684 6 103100 103099 103102 103226 103228 103498 7 103101 103099 103098 103103 103113 103498 103497 6 103102 103098 103089 103104 103113 103114 6 103103 103089 103090 103105 103106 103114 6 103104 103090 103106 103126 103124 103118 6 103104 103105 103116 103114 103117 103118 6 103078 103079 103108 103350 103351 103352 6 103107 103079 103080 103109 103352 103353 6 103108 103080 103091 103110 103353 103354 6 103109 103091 103111 103354 103355 103356 6 103110 103091 103092 103112 103356 103357 6 103111 103092 103084 103357 103358 103359 5 103102 103103 103114 103115 103497 6 103113 103103 103115 103116 103106 103104 7 103113 103114 103116 103497 103504 103501 103495 6 103115 103114 103106 103117 106712 103504 6 103116 103106 103118 103119 106712 106711 6 103117 103106 103119 103120 103124 103105 6 103117 103118 103120 103121 106711 106713 6 103119 103118 103121 103122 103123 103124 6 103119 103120 103122 103884 103887 106713 6 103121 103120 103123 103127 103883 103884 6 103122 103120 103124 103125 103127 103128 6 103123 103120 103118 103125 103126 103105 6 103123 103124 103126 103128 103095 103096 6 103125 103124 103105 103095 103087 103090 6 103122 103123 103128 103882 103339 103883 6 103127 103123 103125 100414 103882 103096 6 102201 102203 103130 103851 103852 109781 6 103129 102203 102205 101525 101526 109781 6 102094 102095 103132 103133 109776 103138 6 102094 103131 103133 103134 103135 102093 6 103132 103131 103134 103136 103137 103138 6 103132 103133 103135 103136 105946 105945 6 103132 103134 105945 105943 105947 102093 6 103134 103133 103137 106090 106091 105946 6 103136 103133 103138 106090 106089 106092 6 103137 103133 106092 106093 109776 103131 6 102813 102814 102817 103140 104388 104386 6 103139 102817 103141 104385 104384 104386 6 103140 102817 102818 103142 104390 104385 6 103141 102818 103143 107767 104390 107768 6 103142 102818 102819 103144 107774 107768 6 103143 102819 102820 103145 107774 107775 6 103144 102820 103146 104231 107775 109791 6 103145 102820 102821 102823 103147 104231 6 103146 102823 101673 101674 103412 104231 6 102486 102487 103149 103156 103157 103161 6 102486 103148 103150 103151 103155 103156 6 102486 103149 103151 103152 103926 102484 6 103150 103149 103152 103153 103154 103155 6 103150 103151 103153 103926 103085 103359 6 103152 103151 103154 103358 103359 103360 6 103153 103151 103155 103360 103361 103362 6 103154 103151 103149 103156 103677 103362 6 103155 103149 103148 103157 103158 103677 6 103156 103148 103158 103159 103160 103161 6 103156 103157 103159 103676 103677 103945 6 103158 103157 103160 103945 103946 103962 6 103159 103157 103161 103962 103963 103964 6 103160 103157 103148 103967 103964 102487 6 102845 102847 103163 103164 103165 102844 6 103162 102847 103164 103180 102858 102849 6 103162 103163 103165 103166 103177 103180 6 103162 103164 103166 103167 103168 102844 6 103165 103164 103167 103177 103174 103171 6 103165 103166 103168 103169 103170 103171 6 103165 103167 103169 102843 102844 109688 6 103168 103167 103170 109687 109686 109688 5 103169 103167 103171 103172 109687 6 103170 103167 103172 103173 103174 103166 6 103170 103171 103173 109691 109687 106653 7 103172 103171 103174 103175 106654 106652 106653 6 103173 103171 103175 103176 103177 103166 5 103173 103174 103176 103450 106654 6 103175 103174 103177 103178 103179 103450 6 103176 103174 103178 103166 103164 103180 6 103176 103177 103179 103180 106660 106661 6 103176 103178 103450 106657 106659 106660 6 103177 103164 103178 103163 102858 106661 6 102869 102870 102884 103182 103190 102868 6 103181 102884 102885 103183 103216 103190 6 103182 102885 102886 103184 103193 103216 6 103183 102886 103185 103186 103192 103193 6 103184 102886 103186 103187 103188 102887 6 103184 103185 103187 103192 103196 107584 6 103186 103185 103188 103958 107586 107584 6 103187 103185 102887 103958 103959 102888 6 102867 102868 103190 102866 103214 103215 6 103189 102868 103181 103215 103216 103182 6 101741 101742 101744 103197 103198 103199 6 103184 103186 103193 103194 103195 103196 6 103184 103192 103194 107222 103216 103183 7 103193 103192 103195 107222 107221 107204 107203 6 103194 103192 103196 107196 107197 107203 6 103195 103192 103186 107583 107196 107584 6 101740 101741 103191 103198 103411 103200 7 103197 103191 103199 102893 102894 102895 103200 5 103198 103191 101744 101745 102893 6 103198 102895 103201 103411 103197 109751 6 103200 102895 102896 103202 103470 109751 6 103201 102896 102897 103203 103470 103471 6 103202 102897 102898 103204 103471 103472 6 103203 102898 103205 103472 103473 103474 6 103204 102898 102899 103206 103474 103475 6 103205 102899 102900 103207 103475 103476 6 103206 102900 102901 103208 103476 103477 6 103207 102901 102902 103209 103477 103478 6 103208 102902 103210 103211 103478 103479 6 103209 102902 103211 103212 103213 102903 6 103209 103210 103212 103479 103480 103481 7 103211 103210 103213 103481 103482 102907 103483 6 103212 103210 102903 103483 102905 102904 6 102866 103189 103215 107220 107219 107221 6 103214 103189 103190 103216 107221 107222 6 103215 103190 103182 107222 103193 103183 6 100635 100636 103218 104040 103763 103762 6 103217 100636 100638 103219 103484 104040 6 103218 100638 103220 103221 103222 103484 6 103219 100638 100639 103221 103240 103241 6 103219 103220 103222 103223 103224 103241 6 103219 103221 103223 103484 103485 103486 6 103222 103221 103224 103225 103486 103487 6 103223 103221 103225 103226 103227 103241 6 103223 103224 103226 103493 103487 103494 7 103225 103224 103227 103228 103101 103494 103498 6 103226 103224 103228 103229 103230 103241 5 103226 103227 103101 103100 103229 6 103100 103228 103227 103230 103231 103684 6 103229 103227 103231 103232 103241 103240 6 103229 103230 103232 103233 103234 103684 6 103231 103230 103233 103240 103239 103236 7 103231 103232 103234 100011 100010 103235 103236 5 103231 103233 100011 103684 100012 6 100010 103233 103236 103237 103238 100009 6 103235 103233 103237 100643 103239 103232 6 103235 103236 103238 100647 100644 100643 5 103235 103237 100009 100008 100647 6 100643 103236 100640 100639 103240 103232 6 100639 103239 103220 103241 103230 103232 6 103220 103240 103221 103224 103227 103230 6 102949 102950 103243 103736 103737 103738 6 103242 102950 102951 103244 103738 103739 6 103243 102951 102952 103245 103739 103740 7 103244 102952 102953 102954 103246 103740 103741 5 103245 102954 103247 103741 103742 6 103246 102954 102955 103248 103742 103743 6 103247 102955 102956 103249 103743 103744 6 103248 102956 102957 103250 103744 103745 6 103249 102957 103251 103745 103746 103747 6 103250 102957 102958 103252 103253 103747 6 103251 102958 103253 103254 102960 102959 6 103251 103252 103254 103747 103748 103749 6 103253 103252 102960 102961 103255 103749 6 103254 102961 102962 102964 103256 103749 6 103255 102964 103257 103749 103750 103751 6 103256 102964 102965 103258 103751 103752 6 103257 102965 103259 103752 103753 103754 6 103258 102965 102966 102967 103260 103754 6 103259 102967 102968 103261 103754 103755 6 103260 102968 102969 103262 103755 103756 6 103261 102969 102970 103263 103756 103757 6 103262 102970 102971 103264 103757 103758 6 103263 102971 102972 103265 103758 103759 7 103264 102972 102973 103266 103759 104054 104051 5 103265 102973 102974 103267 104054 6 103266 102974 102975 102976 103268 104054 7 103267 102976 102977 103269 104054 104053 104055 5 103268 102977 103270 104055 104056 6 103269 102977 102978 103271 104056 104057 6 103270 102978 102979 103272 104057 104058 6 103271 102979 102980 103273 104058 104059 6 103272 102980 102981 103274 104059 104060 6 103273 102981 102982 103275 104060 104061 6 103274 102982 102983 103276 104064 104061 6 103275 102983 102984 103277 104064 104065 6 103276 102984 102985 103826 104065 103824 6 102689 102690 103279 103588 103589 103590 6 103278 102690 102691 103280 103590 103591 6 103279 102691 102692 103281 103591 103592 6 103280 102692 102693 103282 103592 103593 6 103281 102693 102694 103283 103593 103594 6 103282 102694 102695 103284 103594 103595 6 103283 102695 102696 103285 103595 103596 6 103284 102696 102697 103286 103596 103597 6 103285 102697 102698 103287 103597 103598 6 103286 102698 102699 103288 103598 103599 6 103287 102699 102700 103289 103599 103600 6 103288 102700 102701 103290 103600 103601 6 103289 102701 102702 103003 103291 103601 6 103290 103003 103292 103601 103602 103603 6 103291 103003 103004 103293 103603 103604 6 103292 103004 103005 103294 103604 103605 6 103293 103005 103006 103295 103605 103606 6 103294 103006 103007 103296 103606 103607 6 103295 103007 103008 103297 103607 103608 6 103296 103008 103009 103010 103298 103608 6 103297 103010 103299 103608 103609 103610 6 103298 103010 103011 103300 103610 103611 6 103299 103011 103012 103301 103611 103612 6 103300 103012 103013 103302 103612 103613 6 103301 103013 103014 103303 103613 103614 6 103302 103014 103015 103304 103614 103615 6 103303 103015 103016 103305 103615 103616 6 103304 103016 103017 103306 103616 103617 6 103305 103017 103018 103307 103617 103618 6 103306 103018 103019 103308 103618 103619 6 103307 103019 103020 103309 103619 103620 6 103308 103020 103021 103310 103620 103621 6 103309 103021 103022 103311 103621 103622 6 103310 103022 103023 103312 103622 103623 6 103311 103023 103024 103313 103623 103624 6 103312 103024 103025 103314 103624 103625 6 103313 103025 103026 103315 103625 103626 6 103314 103026 103027 103316 103626 103627 6 103315 103027 103028 103317 103627 103628 6 103316 103028 103029 103318 103628 103629 6 103317 103029 103030 103319 103629 103630 6 103318 103030 103031 103320 103630 103631 6 103319 103031 103032 103321 103631 103632 6 103320 103032 103033 103322 103632 103633 6 103321 103033 103034 103042 103323 103633 6 103322 103042 103324 103633 103634 103635 6 103323 103042 103043 103325 103635 103636 6 103324 103043 103044 103045 103326 103636 6 103325 103045 103327 103636 103637 103638 6 103326 103045 103046 103053 103328 103638 6 103327 103053 103054 103329 103638 103639 6 103328 103054 103056 103639 103640 103641 6 102507 102508 100032 100033 103331 103880 6 103330 100033 100034 102248 103332 103880 6 103331 102248 103333 103334 103880 103881 6 103332 102248 103334 103335 103336 102249 6 103332 103333 103335 109707 106499 103881 6 103334 103333 103336 109706 106492 109707 6 103335 103333 102249 102250 102251 109706 6 101171 101172 101524 103338 103339 103882 6 103337 101524 103339 103340 103341 104250 6 103337 103338 103340 103882 103127 103883 6 103339 103338 103341 103342 103885 103883 6 103340 103338 103342 103343 102206 104250 6 103340 103341 103343 103861 106717 103885 6 103342 103341 102206 102207 103344 103861 6 103343 102207 102209 103345 103346 103861 6 103344 102209 103346 103347 103348 102211 6 103344 103345 103347 103861 103862 103863 6 103346 103345 103348 106532 103863 106524 6 103347 103345 102211 102213 106523 106524 6 103076 103077 103350 103918 103917 103919 6 103349 103077 103078 103107 103351 103919 6 103350 103107 103352 103919 103920 103921 6 103351 103107 103108 103353 103921 103922 6 103352 103108 103109 103354 103922 103923 6 103353 103109 103110 103355 103923 103924 6 103354 103110 103356 103924 103925 103374 6 103355 103110 103111 103357 103368 103374 6 103356 103111 103112 103358 103367 103368 6 103357 103112 103359 103153 103360 103367 6 103358 103112 103153 103085 103152 103084 6 103358 103153 103154 103361 103363 103367 6 103360 103154 103362 103363 103364 103678 6 103361 103154 103155 103677 103675 103678 6 103360 103361 103364 103365 103366 103367 6 103363 103361 103365 103678 103667 103668 6 103363 103364 103366 103373 103370 103668 6 103363 103365 103367 103368 103369 103370 6 103363 103366 103368 103360 103358 103357 6 103367 103366 103369 103357 103356 103374 6 103368 103366 103370 103371 103374 103375 6 103369 103366 103371 103372 103373 103365 6 103369 103370 103372 103375 103376 103377 6 103371 103370 103373 103377 103378 103379 6 103372 103370 103365 103379 103380 103668 6 103356 103368 103369 103375 103925 103355 7 103374 103369 103371 103376 103943 103925 104342 5 103375 103371 103377 104342 104343 6 103376 103371 103372 103378 104343 104344 6 103377 103372 103379 103645 104347 104344 6 103378 103372 103373 103380 103381 103645 6 103379 103373 103381 103382 103668 103656 6 103379 103380 103382 103383 103384 103645 6 103381 103380 103383 103390 103387 103656 6 103381 103382 103384 103385 103386 103387 6 103381 103383 103385 103645 103646 103647 6 103384 103383 103386 103647 103648 103649 6 103385 103383 103387 103388 103649 103650 6 103386 103383 103388 103389 103390 103382 6 103386 103387 103389 103650 103651 103652 6 103388 103387 103390 103652 103653 103654 6 103389 103387 103382 103654 103655 103656 6 102675 102676 103392 103573 103574 103575 6 103391 102676 102677 103393 103575 103576 6 103392 102677 102678 103394 103576 103577 6 103393 102678 102679 103577 103578 103579 6 102173 102804 102805 103396 103397 104747 6 103395 102805 103397 103398 103399 103400 6 103395 103396 103398 103892 104747 104746 6 103397 103396 103399 103892 103893 103894 6 103398 103396 103400 103894 103895 103896 6 103399 103396 102805 102806 103401 103896 6 103400 102806 102807 103402 103896 103897 6 103401 102807 103403 103897 103898 103899 6 103402 102807 102808 103404 103899 103900 6 103403 102808 101732 103405 103679 103900 6 103404 101732 101733 101734 103406 103679 6 103405 101734 101735 103407 103679 103680 6 103406 101735 101736 103408 103680 103681 6 103407 101736 101737 103409 103683 103681 6 103408 101737 101738 103410 103470 103683 6 103409 101738 101739 103411 109751 103470 6 103410 101739 101740 103197 103200 109751 6 103147 101674 101675 101676 103413 104231 6 103412 101676 101677 103414 109791 104231 6 103413 101677 103415 107778 107776 109791 6 103414 101677 101678 107778 107779 105382 6 101695 101696 103417 103786 101694 103787 6 103416 101696 101697 103418 103787 103789 6 103417 101697 101698 102223 103419 103789 6 103418 102223 103420 103789 103790 103791 6 103419 102223 102224 103421 103791 103792 6 103420 102224 102225 103422 103423 103792 6 103421 102225 103423 103424 103425 103426 6 103421 103422 103424 103794 103792 103795 6 103423 103422 103425 103795 103796 103797 6 103424 103422 103426 103797 103798 103799 6 103425 103422 102225 102226 103427 103799 6 103426 102226 102227 103428 103799 103800 6 103427 102227 102228 103429 103800 103801 6 103428 102228 103430 103801 103802 103432 6 103429 102228 102229 102238 103431 103432 6 103430 102238 103432 103433 103434 103435 6 103430 103431 103433 103442 103802 103429 6 103432 103431 103434 103442 103443 103444 6 103433 103431 103435 103444 103445 103446 6 103434 103431 102238 102239 102561 103446 6 102491 102492 103437 103438 103515 102493 6 102491 103436 103438 103439 103440 103441 6 103437 103436 103439 103513 103514 103515 6 103437 103438 103440 103508 103509 103513 6 103437 103439 103441 103451 103453 103508 6 103437 103440 102491 100070 103451 100069 6 103432 103433 103443 103802 103803 103804 6 103442 103433 103444 103804 103805 103806 6 103443 103433 103434 103445 103806 103807 6 103444 103434 103446 103807 103808 103447 6 103445 103434 103435 102561 102562 103447 6 103446 102562 103448 103808 103445 104107 6 103447 102562 102563 103449 103454 104107 6 103448 102563 102567 103454 103455 102568 7 103175 103176 103179 106655 106654 106656 106657 6 103441 103440 100069 100068 103452 103453 6 100068 103451 103453 100067 103505 103506 6 103452 103451 103440 103506 103507 103508 6 103448 103449 103455 103456 104107 104108 6 103454 103449 103456 103457 103458 102568 6 103454 103455 103457 103464 104110 104108 6 103456 103455 103458 103459 103460 103464 6 103457 103455 103459 103463 102569 102568 6 103457 103458 103460 103461 103462 103463 6 103457 103459 103461 103464 103465 103466 6 103460 103459 103462 103466 103467 103469 6 103461 103459 103463 101721 103469 101720 6 103462 103459 103458 102569 101720 101719 6 103456 103457 103460 103465 104394 104110 6 103464 103460 103466 104404 104394 104745 6 103465 103460 103461 103467 103468 104745 6 103466 103461 103468 102172 101724 103469 6 103466 103467 102172 104745 104746 104747 6 101724 103467 101722 101721 103462 103461 7 103201 103202 103471 109751 103410 103409 103683 6 103470 103202 103203 103472 103681 103683 6 103471 103203 103204 103473 103682 103681 6 103472 103204 103474 103685 103902 103682 6 103473 103204 103205 103475 103685 103686 6 103474 103205 103206 103476 103686 103687 6 103475 103206 103207 103477 103687 103688 6 103476 103207 103208 103478 103688 103689 6 103477 103208 103209 103479 103689 103690 6 103478 103209 103211 103480 103690 103691 6 103479 103211 103481 103499 103694 103691 6 103480 103211 103212 103482 103499 103500 5 103481 103212 102907 103500 102908 5 102907 103212 103213 102905 102906 6 103218 103219 103222 103485 104039 104040 6 103484 103222 103486 103489 103968 104039 6 103485 103222 103223 103487 103488 103489 6 103486 103223 103488 103492 103493 103225 6 103486 103487 103489 103490 103491 103492 6 103486 103488 103490 103485 103968 103969 6 103489 103488 103491 103969 103970 103971 6 103490 103488 103492 103971 109747 106555 6 103491 103488 103487 103493 103496 109747 6 103492 103487 103225 103494 103495 103496 6 103493 103225 103226 103495 103497 103498 6 103493 103494 103496 103497 103501 103115 6 103493 103495 103492 103501 103502 109747 6 103495 103494 103498 103102 103113 103115 5 103497 103494 103226 103101 103102 6 103480 103481 103500 103694 103695 103696 6 103499 103481 103482 102908 103696 103697 6 103496 103495 103502 103503 103504 103115 6 103496 103501 103503 109747 106706 109748 6 103502 103501 103504 106712 106710 109748 5 103503 103501 103115 106712 103116 6 100067 103452 103506 106697 106703 100066 6 103505 103452 103453 103507 106697 106704 6 103506 103453 103508 103510 104522 106704 6 103507 103453 103440 103439 103509 103510 6 103508 103439 103510 103511 103512 103513 6 103508 103509 103511 103770 103507 104522 6 103510 103509 103512 103770 103771 103772 6 103511 103509 103513 103772 103773 103520 6 103512 103509 103439 103438 103514 103520 6 103513 103438 103515 103520 103521 103517 6 103514 103438 103436 102493 103516 103517 6 103515 102493 103517 103518 101607 101606 6 103515 103516 103518 103521 103514 103522 6 103517 103516 101607 101613 103522 103523 5 101613 101607 101605 101608 101610 6 103513 103514 103521 103773 103512 104531 6 103520 103514 103517 103522 104116 104531 6 103521 103517 103518 103523 103525 104116 6 103522 103518 101613 101614 103524 103525 6 103523 101614 103525 103526 103527 103528 6 103523 103524 103526 103522 104116 104117 6 103525 103524 103527 103529 104117 104118 6 103526 103524 103528 103529 103530 103543 6 103527 103524 101614 103543 103544 101615 6 103526 103527 103530 103531 104118 109786 6 103529 103527 103531 103532 103542 103543 6 103529 103530 103532 103533 109786 109787 6 103531 103530 103533 103534 103541 103542 6 103531 103532 103534 103535 109787 109788 6 103533 103532 103535 103536 103540 103541 6 103533 103534 103536 103537 109788 107178 6 103535 103534 103537 103538 103539 103540 6 103535 103536 103538 107182 107179 107178 6 103537 103536 103539 107182 107183 107184 6 103538 103536 103540 107184 107185 107212 6 103539 103536 103534 103541 107212 104372 6 103540 103534 103532 103542 104372 104097 6 103541 103532 103530 103543 104096 104097 6 103542 103530 103527 103528 103544 104096 6 103543 103528 101615 104099 104096 103093 6 102986 102987 103546 103824 103825 103829 6 103545 102987 102988 103547 103829 103830 6 103546 102988 102989 103548 103830 103831 6 103547 102989 102990 103549 103831 103832 6 103548 102990 102991 103550 103832 103833 6 103549 102991 102992 103551 103809 103833 6 103550 102992 102993 103552 103809 103810 6 103551 102993 102994 103553 103810 103811 6 103552 102994 102995 103554 103811 103812 6 103553 102995 102996 103555 103812 103813 6 103554 102996 103556 103813 103814 103815 6 103555 102996 102997 103557 103815 103816 6 103556 102997 102998 102999 103558 103816 6 103557 102999 103000 103559 103816 103817 6 103558 103000 103001 103560 103817 103818 6 103559 103001 103002 103561 103562 103818 6 103560 103002 103562 103563 103564 103565 6 103560 103561 103563 103818 103819 103820 6 103562 103561 103564 103820 103821 103822 6 103563 103561 103565 103822 103823 103566 6 103564 103561 103002 102666 102667 103566 6 103565 102667 102668 103567 103823 103564 6 103566 102668 102669 103568 103850 103823 6 103567 102669 102670 103569 103879 103850 6 103568 102670 102671 103570 103891 103879 6 103569 102671 102672 102673 103571 103891 6 103570 102673 103572 104237 103891 104257 6 103571 102673 102674 103573 104257 104258 6 103572 102674 102675 103391 103574 104258 6 103573 103391 103575 104258 104259 104263 6 103574 103391 103392 103576 104263 104264 6 103575 103392 103393 103577 104264 104265 6 103576 103393 103394 103578 104265 104266 6 103577 103394 103579 104266 104267 104268 6 103578 103394 102679 102680 103580 104268 6 103579 102680 102681 103581 104141 104268 6 103580 102681 102682 103582 104141 104142 6 103581 102682 102683 103583 104142 104143 6 103582 102683 102684 103584 104143 104144 6 103583 102684 102685 103585 104144 104145 6 103584 102685 102686 103586 104145 104146 6 103585 102686 102687 103587 104146 104147 6 103586 102687 102688 103588 104147 104148 6 103587 102688 102689 103278 103589 104148 6 103588 103278 103590 104148 104149 104150 6 103589 103278 103279 103591 104150 104151 6 103590 103279 103280 103592 104151 104152 6 103591 103280 103281 103593 104152 104153 6 103592 103281 103282 103594 104153 104154 6 103593 103282 103283 103595 104154 104155 6 103594 103283 103284 103596 104155 104156 6 103595 103284 103285 103597 104156 104157 6 103596 103285 103286 103598 104157 104158 6 103597 103286 103287 103599 104158 104159 6 103598 103287 103288 103600 104159 104160 6 103599 103288 103289 103601 104160 104161 6 103600 103289 103290 103291 103602 104161 6 103601 103291 103603 104161 104162 104163 6 103602 103291 103292 103604 104163 104164 6 103603 103292 103293 103605 104164 104165 6 103604 103293 103294 103606 104165 104166 6 103605 103294 103295 103607 104166 104167 6 103606 103295 103296 103608 104167 104168 6 103607 103296 103297 103298 103609 104168 6 103608 103298 103610 104168 104169 104170 6 103609 103298 103299 103611 104170 104171 6 103610 103299 103300 103612 104171 104172 6 103611 103300 103301 103613 104172 104173 6 103612 103301 103302 103614 104173 104174 6 103613 103302 103303 103615 104174 104175 6 103614 103303 103304 103616 104175 104176 6 103615 103304 103305 103617 104176 104177 6 103616 103305 103306 103618 104177 104178 6 103617 103306 103307 103619 104178 104179 6 103618 103307 103308 103620 104179 104180 6 103619 103308 103309 103621 104180 104181 6 103620 103309 103310 103622 104181 104182 6 103621 103310 103311 103623 104182 104183 6 103622 103311 103312 103624 104183 104184 6 103623 103312 103313 103625 104184 104185 6 103624 103313 103314 103626 104185 104186 6 103625 103314 103315 103627 104186 104187 6 103626 103315 103316 103628 104187 104188 6 103627 103316 103317 103629 104188 104189 6 103628 103317 103318 103630 104189 104190 6 103629 103318 103319 103631 104190 104191 6 103630 103319 103320 103632 104191 104192 6 103631 103320 103321 103633 104192 104193 6 103632 103321 103322 103323 103634 104193 6 103633 103323 103635 103903 104193 104194 6 103634 103323 103324 103636 103903 103904 6 103635 103324 103325 103326 103637 103904 6 103636 103326 103638 103904 103905 103906 6 103637 103326 103327 103328 103639 103906 6 103638 103328 103329 103640 103906 103907 6 103639 103329 103641 103907 103908 103642 5 103640 103329 103056 103057 103642 7 103641 103057 103058 103643 103908 103640 103927 6 103642 103058 103059 103644 103909 103927 5 103643 103059 103061 103909 103910 6 103381 103384 103646 103379 103378 104347 6 103645 103384 103647 104347 104348 104349 6 103646 103384 103385 103648 104352 104349 6 103647 103385 103649 103657 104352 104353 6 103648 103385 103386 103650 103657 103658 6 103649 103386 103388 103651 103658 103659 6 103650 103388 103652 103659 103660 103661 6 103651 103388 103389 103653 103661 103662 6 103652 103389 103654 103662 103663 103664 6 103653 103389 103390 103655 103664 103665 6 103654 103390 103656 103665 103666 103667 6 103655 103390 103382 103667 103668 103380 6 103648 103649 103658 104353 104354 104358 6 103657 103649 103650 103659 104371 104358 6 103658 103650 103651 103660 109793 104371 6 103659 103651 103661 104906 104908 109793 6 103660 103651 103652 103662 103669 104906 6 103661 103652 103653 103663 103669 103670 6 103662 103653 103664 103670 103671 103672 6 103663 103653 103654 103665 103672 103673 6 103664 103654 103655 103666 103673 103674 6 103665 103655 103667 103674 103675 103678 6 103666 103655 103656 103668 103364 103678 6 103667 103656 103380 103364 103365 103373 6 103661 103662 103670 104903 104905 104906 6 103669 103662 103663 103671 104902 104903 6 103670 103663 103672 105918 104902 103951 6 103671 103663 103664 103673 103950 103951 6 103672 103664 103665 103674 103944 103950 6 103673 103665 103666 103675 103676 103944 6 103674 103666 103676 103677 103362 103678 6 103674 103675 103677 103158 103944 103945 6 103676 103675 103158 103156 103155 103362 6 103362 103675 103361 103364 103667 103666 6 103404 103405 103406 103680 103900 103901 6 103679 103406 103407 103681 103682 103901 7 103680 103407 103682 103472 103471 103683 103408 6 103680 103681 103472 103901 103902 103473 5 103471 103681 103408 103409 103470 7 100418 103100 103229 103231 103234 100012 100013 7 103473 103474 103686 103902 104665 104664 104688 5 103685 103474 103475 103687 104688 7 103686 103475 103476 103688 104688 104689 104690 6 103687 103476 103477 103689 104690 104691 6 103688 103477 103478 103690 104691 104692 6 103689 103478 103479 103691 103692 104692 6 103690 103479 103692 103693 103694 103480 6 103690 103691 103693 104692 104693 104694 6 103692 103691 103694 104694 104695 104696 6 103693 103691 103480 103499 103695 104696 6 103694 103499 103696 104696 104697 104698 6 103695 103499 103500 103697 104698 104699 6 103696 103500 102908 102909 103698 104699 6 103697 102909 102910 103699 103972 104699 6 103698 102910 102911 103700 103972 103973 6 103699 102911 102912 102913 103701 103973 6 103700 102913 103702 103973 103974 103975 6 103701 102913 102914 103703 103975 103976 6 103702 102914 102915 103704 103976 103977 6 103703 102915 102916 103705 103977 103978 6 103704 102916 102917 103706 103978 103979 6 103705 102917 102918 103707 103979 103980 6 103706 102918 102919 103708 103980 103981 6 103707 102919 102920 103709 103981 103982 6 103708 102920 102921 103710 103982 103983 6 103709 102921 102922 103711 103983 103984 6 103710 102922 102923 103712 103984 103985 6 103711 102923 102924 103713 103985 103986 6 103712 102924 102925 103714 103986 103987 6 103713 102925 102926 103715 103987 103988 6 103714 102926 102927 103716 103988 103989 6 103715 102927 102928 103717 103989 103990 6 103716 102928 102929 103718 103990 103991 6 103717 102929 102930 103719 103991 103992 6 103718 102930 102931 103720 103992 103993 6 103719 102931 102932 103721 103993 103994 6 103720 102932 102933 103722 103994 103995 6 103721 102933 102934 103723 103995 103996 6 103722 102934 102935 103724 103996 103997 6 103723 102935 102936 103725 103997 103998 6 103724 102936 102937 103726 103998 103999 6 103725 102937 102938 103727 103999 104000 6 103726 102938 102939 103728 104000 104001 6 103727 102939 102940 103729 104001 104002 6 103728 102940 102941 103730 104002 104003 6 103729 102941 102942 103731 104003 104004 6 103730 102942 102943 103732 104004 104005 6 103731 102943 102944 102945 103733 104005 6 103732 102945 102946 103734 104005 104006 6 103733 102946 102947 102948 103735 104006 6 103734 102948 103736 104006 104007 103737 5 103735 102948 102949 103242 103737 6 103736 103242 103738 104007 103735 104012 6 103737 103242 103243 103739 104012 104013 6 103738 103243 103244 103740 104013 104014 6 103739 103244 103245 103741 104014 104015 6 103740 103245 103246 103742 104015 104016 6 103741 103246 103247 103743 104016 104017 6 103742 103247 103248 103744 104017 104018 6 103743 103248 103249 103745 104018 104019 6 103744 103249 103250 103746 104019 104020 6 103745 103250 103747 104020 104021 104022 6 103746 103250 103251 103253 103748 104022 6 103747 103253 103749 104022 104023 104024 7 103748 103253 103254 103255 103256 103750 104024 5 103749 103256 103751 104024 104025 6 103750 103256 103257 103752 104025 104026 6 103751 103257 103258 103753 104029 104026 7 103752 103258 103754 104037 104029 104046 103755 5 103753 103258 103259 103260 103755 6 103754 103260 103261 103756 104046 103753 6 103755 103261 103262 103757 104046 104047 6 103756 103262 103263 103758 104047 104048 6 103757 103263 103264 103759 104048 104049 6 103758 103264 103265 104049 104050 104051 6 100615 100617 103761 103764 103765 103763 6 103760 100617 100625 100627 103762 103763 6 103761 100627 103763 103217 100635 100629 6 103761 103762 103765 103760 104040 103217 6 100615 103760 103765 104038 106557 100612 6 103764 103760 103763 104038 104039 104040 5 102085 101567 103767 103768 106093 6 103766 101567 103768 103769 101571 101568 6 103766 103767 103769 106092 106093 106094 7 103768 103767 101571 106094 106088 106317 106318 6 103510 103511 103771 104522 104523 104524 6 103770 103511 103772 104524 104525 104528 6 103771 103511 103512 103773 104528 104529 6 103772 103512 103520 104529 104530 104531 6 101682 101683 103775 105391 105385 105383 6 103774 101683 103776 105620 105391 103778 6 103775 101683 101684 101686 103777 103778 6 103776 101686 103778 103779 103780 103781 6 103776 103777 103779 107791 105620 103775 6 103778 103777 103780 107798 107792 107791 6 103779 103777 103781 107798 103783 103782 6 103780 103777 101686 101687 101688 103782 6 103781 101688 101689 101691 103783 103780 6 103782 101691 103784 107798 103780 107799 6 103783 101691 101692 103785 107799 107800 6 103784 101692 103786 103787 103788 107800 6 103785 101692 101693 101694 103416 103787 6 103786 103416 103417 103785 103788 103789 6 103785 103787 103789 107800 107801 103790 6 103788 103787 103417 103418 103419 103790 6 103789 103419 103791 107801 103788 107802 6 103790 103419 103420 103792 103793 107802 6 103791 103420 103793 103794 103423 103421 6 103791 103792 103794 107802 107803 107804 6 103793 103792 103423 103795 107804 107805 6 103794 103423 103424 103796 107809 107805 6 103795 103424 103797 103952 107809 107810 6 103796 103424 103425 103798 103952 103953 6 103797 103425 103799 103953 103954 103955 6 103798 103425 103426 103427 103800 103955 6 103799 103427 103428 103801 103955 103956 6 103800 103428 103429 103802 103956 103957 6 103801 103429 103432 103442 103803 103957 6 103802 103442 103804 103957 104100 104239 6 103803 103442 103443 103805 104100 104101 6 103804 103443 103806 104101 104102 104103 6 103805 103443 103444 103807 104103 104104 6 103806 103444 103445 103808 104104 104105 6 103807 103445 103447 104105 104106 104107 6 103550 103551 103810 103833 103834 103835 6 103809 103551 103552 103811 103835 103836 6 103810 103552 103553 103812 103836 103837 6 103811 103553 103554 103813 103837 103838 6 103812 103554 103555 103814 103838 103839 6 103813 103555 103815 103839 103840 103841 6 103814 103555 103556 103816 103841 103842 6 103815 103556 103557 103558 103817 103842 6 103816 103558 103559 103818 103842 103843 6 103817 103559 103560 103562 103819 103843 6 103818 103562 103820 103843 103844 103845 6 103819 103562 103563 103821 103845 103846 6 103820 103563 103822 103846 103847 103848 6 103821 103563 103564 103823 103848 103849 6 103822 103564 103566 103849 103850 103567 6 102986 103545 103825 103826 103277 102985 6 103824 103545 103826 103827 103828 103829 6 103824 103825 103827 104069 104065 103277 6 103826 103825 103828 104756 104069 104763 6 103827 103825 103829 104763 104764 104765 6 103828 103825 103545 103546 103830 104765 6 103829 103546 103547 103831 104765 104766 6 103830 103547 103548 103832 104766 104767 6 103831 103548 103549 103833 104770 104767 6 103832 103549 103550 103809 103834 104770 6 103833 103809 103835 105016 104770 105024 6 103834 103809 103810 103836 105024 105025 6 103835 103810 103811 103837 105025 105026 6 103836 103811 103812 103838 104405 105026 6 103837 103812 103813 103839 103864 104405 6 103838 103813 103814 103840 103864 103865 6 103839 103814 103841 103865 103866 103867 6 103840 103814 103815 103842 103853 103867 6 103841 103815 103816 103817 103843 103853 6 103842 103817 103818 103819 103844 103853 6 103843 103819 103845 103853 103854 103855 6 103844 103819 103820 103846 103855 103856 6 103845 103820 103821 103847 103856 103857 6 103846 103821 103848 103860 103857 103876 6 103847 103821 103822 103849 103876 103877 6 103848 103822 103823 103850 103877 103878 6 103849 103823 103567 103878 103879 103568 6 102181 102199 102179 103852 102201 103129 6 102179 103851 100027 100026 103129 109781 6 103841 103842 103843 103844 103854 103867 6 103853 103844 103855 103867 103868 103869 6 103854 103844 103845 103856 103869 103870 6 103855 103845 103846 103857 103858 103870 6 103856 103846 103858 103859 103860 103847 6 103856 103857 103859 103870 103871 103872 6 103858 103857 103860 103872 103873 103874 6 103859 103857 103847 103874 103875 103876 6 103343 103344 103346 103862 106717 103342 6 103861 103346 103863 106716 106715 106717 7 103862 103346 106532 106531 103347 106533 106716 6 103838 103839 103865 104405 104406 104407 6 103864 103839 103840 103866 104407 104408 6 103865 103840 103867 104408 104409 103868 6 103866 103840 103841 103853 103854 103868 6 103867 103854 103869 104409 103866 104420 6 103868 103854 103855 103870 104420 104421 6 103869 103855 103856 103858 103871 104421 6 103870 103858 103872 104421 104422 104423 6 103871 103858 103859 103873 104423 104424 6 103872 103859 103874 104424 104425 104426 6 103873 103859 103860 103875 104426 104427 6 103874 103860 103876 104427 104428 103888 6 103875 103860 103847 103848 103877 103888 6 103876 103848 103849 103878 103888 103889 6 103877 103849 103850 103879 103889 103890 6 103878 103850 103568 103890 103891 103569 6 102507 103330 102509 103881 103331 103332 6 102509 103880 103334 106499 102511 103332 6 103337 103339 103127 101171 100414 103128 6 103127 103339 103122 103884 103885 103340 6 103122 103883 103885 103886 103887 103121 6 103884 103883 103886 103342 106717 103340 6 103884 103885 103887 106538 106715 106717 6 103884 103886 103121 106713 106714 106538 6 103876 103877 103889 104428 103875 104251 6 103888 103877 103878 103890 104236 104251 6 103889 103878 103879 103891 104236 104237 6 103890 103879 103569 104237 103571 103570 6 103397 103398 103893 104746 104744 104743 6 103892 103398 103894 104743 104748 104749 6 103893 103398 103399 103895 104752 104749 6 103894 103399 103896 104661 104758 104752 6 103895 103399 103400 103401 103897 104661 6 103896 103401 103402 103898 104661 104662 6 103897 103402 103899 104662 104663 104664 6 103898 103402 103403 103900 104664 104665 6 103899 103403 103404 103679 103901 104665 6 103900 103679 103680 103682 103902 104665 5 103901 103682 103473 104665 103685 6 103634 103635 103904 104194 104195 104196 6 103903 103635 103636 103637 103905 104196 6 103904 103637 103906 104196 104197 104198 6 103905 103637 103638 103639 103907 104198 6 103906 103639 103640 103908 104198 104199 6 103907 103640 103642 103927 104199 104200 5 103643 103644 103910 103927 103928 7 103909 103644 103061 103062 103911 103928 103929 7 103910 103062 103063 103912 103929 103930 103931 6 103911 103063 103069 103913 103931 103932 6 103912 103069 103070 103914 103932 103933 6 103913 103070 103071 103915 103933 103934 6 103914 103071 103072 103916 103934 103935 6 103915 103072 103073 103917 103935 103936 6 103916 103073 103918 103349 103919 103936 6 103917 103073 103074 103075 103076 103349 6 103917 103349 103350 103351 103920 103936 6 103919 103351 103921 103936 103937 103938 6 103920 103351 103352 103922 103938 103939 6 103921 103352 103353 103923 103939 103940 6 103922 103353 103354 103924 103940 103941 6 103923 103354 103355 103925 103941 103942 6 103924 103355 103374 103942 103943 103375 6 103085 102482 102483 102484 103150 103152 6 103908 103642 103643 103909 103928 104200 6 103927 103909 103910 103929 104200 104201 6 103928 103910 103911 103930 104201 104202 6 103929 103911 103931 104202 104203 104204 5 103930 103911 103912 103932 104204 6 103931 103912 103913 103933 104204 104205 6 103932 103913 103914 103934 104205 104206 6 103933 103914 103915 103935 104206 104207 6 103934 103915 103916 103936 104207 103937 6 103935 103916 103917 103919 103920 103937 6 103936 103920 103938 104207 103935 104335 6 103937 103920 103921 103939 104335 104336 6 103938 103921 103922 103940 104336 104337 6 103939 103922 103923 103941 104337 104338 6 103940 103923 103924 103942 104338 104339 6 103941 103924 103925 103943 104339 104340 6 103942 103925 103375 104340 104341 104342 6 103673 103674 103676 103945 103950 103947 6 103944 103676 103158 103159 103946 103947 6 103945 103159 103947 103948 105922 103962 6 103945 103946 103948 103949 103950 103944 6 103947 103946 103949 105920 105921 105922 6 103947 103948 103950 103951 105919 105920 6 103947 103949 103951 103672 103673 103944 6 103950 103949 103672 105918 103671 105919 6 103796 103797 103953 107810 107811 107812 6 103952 103797 103798 103954 107812 107813 6 103953 103798 103955 107813 107814 107815 6 103954 103798 103799 103800 103956 107815 6 103955 103800 103801 103957 104238 107815 6 103956 103801 103802 103803 104238 104239 6 103187 103188 103959 103960 107588 107586 6 103958 103188 103960 103961 102890 102888 6 103958 103959 103961 107588 107589 107590 6 103960 103959 102890 107590 107591 107592 6 103159 103160 103963 105922 103946 105923 6 103962 103160 103964 103965 105923 105924 6 103963 103160 103965 103966 103967 103161 6 103963 103964 103966 105924 105942 105943 6 103965 103964 103967 105943 105948 105947 6 103966 103964 103161 105948 102488 102487 6 103485 103489 103969 106556 104038 104039 6 103968 103489 103490 103970 101597 106556 6 103969 103490 103971 106358 101595 101597 6 103970 103490 103491 106555 106357 106358 6 103698 103699 103973 104699 104700 104701 6 103972 103699 103700 103701 103974 104701 6 103973 103701 103975 104701 104702 104703 6 103974 103701 103702 103976 104703 104704 6 103975 103702 103703 103977 104704 104705 6 103976 103703 103704 103978 104705 104706 6 103977 103704 103705 103979 104706 104707 6 103978 103705 103706 103980 104707 104708 6 103979 103706 103707 103981 104708 104709 6 103980 103707 103708 103982 104709 104710 6 103981 103708 103709 103983 104710 104711 6 103982 103709 103710 103984 104711 104712 6 103983 103710 103711 103985 104712 104713 6 103984 103711 103712 103986 104713 104714 6 103985 103712 103713 103987 104714 104715 6 103986 103713 103714 103988 104715 104716 6 103987 103714 103715 103989 104716 104717 6 103988 103715 103716 103990 104717 104718 6 103989 103716 103717 103991 104718 104719 6 103990 103717 103718 103992 104719 104720 6 103991 103718 103719 103993 104720 104721 6 103992 103719 103720 103994 104439 104721 6 103993 103720 103721 103995 104439 104440 6 103994 103721 103722 103996 104440 104441 6 103995 103722 103723 103997 104441 104442 6 103996 103723 103724 103998 104442 104443 6 103997 103724 103725 103999 104443 104444 6 103998 103725 103726 104000 104444 104445 6 103999 103726 103727 104001 104445 104446 6 104000 103727 103728 104002 104070 104446 6 104001 103728 103729 104003 104008 104070 6 104002 103729 103730 104004 104008 104009 6 104003 103730 103731 104005 104009 104010 6 104004 103731 103732 103733 104006 104010 6 104005 103733 103734 103735 104007 104010 6 104006 103735 103737 104010 104011 104012 6 104002 104003 104009 104070 104071 104072 6 104008 104003 104004 104010 104072 104011 6 104009 104004 104005 104006 104007 104011 6 104010 104007 104012 104072 104009 104073 6 104011 104007 103737 103738 104013 104073 6 104012 103738 103739 104014 104073 104074 7 104013 103739 103740 104015 104074 104075 104076 6 104014 103740 103741 104016 104076 104077 6 104015 103741 103742 104017 104077 104078 6 104016 103742 103743 104018 104078 104079 6 104017 103743 103744 104019 104079 104080 6 104018 103744 103745 104020 104080 104081 6 104019 103745 103746 104021 104081 104082 6 104020 103746 104022 104030 104082 104083 6 104021 103746 103747 103748 104023 104030 6 104022 103748 104024 104030 104031 104032 6 104023 103748 103749 103750 104025 104032 6 104024 103750 103751 104026 104027 104032 6 104025 103751 104027 104028 104029 103752 6 104025 104026 104028 104032 104033 104034 6 104027 104026 104029 104034 104035 104036 6 104028 104026 103752 104036 104037 103753 6 104021 104022 104023 104031 104083 104084 6 104030 104023 104032 104084 104085 104033 6 104031 104023 104024 104025 104027 104033 6 104032 104027 104034 104085 104031 104462 6 104033 104027 104028 104035 104041 104462 6 104034 104028 104036 104041 104042 104043 6 104035 104028 104029 104037 104043 104044 6 104036 104029 103753 104044 104045 104046 6 103764 103765 104039 106556 106557 103968 6 104038 103765 104040 103968 103485 103484 6 104039 103765 103763 103217 103484 103218 6 104034 104035 104042 104462 104463 104464 6 104041 104035 104043 104464 104465 104466 6 104042 104035 104036 104044 104466 104467 6 104043 104036 104037 104045 104467 104468 6 104044 104037 104046 104468 104469 104047 6 104045 104037 103753 103755 103756 104047 6 104046 103756 103757 104048 104469 104045 6 104047 103757 103758 104049 104469 104470 6 104048 103758 103759 104050 104470 104209 6 104049 103759 104051 104052 104208 104209 6 104050 103759 104052 104053 104054 103265 6 104050 104051 104053 104208 104221 104222 6 104052 104051 104054 103268 104055 104222 6 104053 104051 103265 103266 103267 103268 5 104053 103268 103269 104056 104222 7 104055 103269 103270 104057 104222 104223 104224 7 104056 103270 103271 104058 104224 104225 104226 6 104057 103271 103272 104059 104226 104227 6 104058 103272 103273 104060 104227 104228 6 104059 103273 103274 104061 104062 104228 6 104060 103274 104062 104063 104064 103275 6 104060 104061 104063 104230 104228 104502 6 104062 104061 104064 104066 104067 104502 6 104063 104061 103275 103276 104065 104066 6 104064 103276 104066 104069 103826 103277 6 104064 104065 104063 104067 104068 104069 6 104063 104066 104068 104513 104502 104754 6 104067 104066 104069 104754 104755 104756 6 104068 104066 104065 103826 104756 103827 6 104001 104002 104008 104071 104446 104447 6 104070 104008 104072 104447 104448 104449 6 104071 104008 104009 104011 104073 104449 6 104072 104011 104012 104013 104074 104449 6 104073 104013 104014 104075 104449 104450 6 104074 104014 104076 104450 104451 104452 5 104075 104014 104015 104077 104452 6 104076 104015 104016 104078 104452 104453 6 104077 104016 104017 104079 104453 104454 6 104078 104017 104018 104080 104454 104455 6 104079 104018 104019 104081 104455 104456 6 104080 104019 104020 104082 104456 104457 6 104081 104020 104021 104083 104457 104458 6 104082 104021 104030 104084 104458 104459 6 104083 104030 104031 104085 104459 104460 6 104084 104031 104033 104460 104461 104462 6 102880 102881 104087 104089 107599 107600 6 104086 102881 102882 102883 104088 104089 6 104087 102883 104089 104090 104091 104092 7 104087 104088 104090 107598 107599 104086 107751 6 104089 104088 104091 107751 107753 104379 6 104090 104088 104092 104094 104378 104379 6 104091 104088 102883 102498 104093 104094 6 104092 102498 104094 104095 102809 102499 6 104092 104093 104095 104091 104378 104387 6 104094 104093 102809 104387 104386 104388 6 103542 103543 104097 104098 104099 103544 6 103542 104096 104098 104365 104372 103541 6 104097 104096 104099 104365 104366 104367 6 104098 104096 103544 104367 103094 103093 6 103803 103804 104101 104239 104240 104241 6 104100 103804 103805 104102 104241 104242 6 104101 103805 104103 104242 104243 104244 6 104102 103805 103806 104104 104111 104244 6 104103 103806 103807 104105 104111 104112 6 104104 103807 103808 104106 104112 104113 6 104105 103808 104107 104108 104109 104113 6 104106 103808 103447 103448 103454 104108 6 104107 103454 104106 104109 104110 103456 6 104106 104108 104110 104113 104114 104115 6 104109 104108 103456 104115 104394 103464 6 104103 104104 104112 104244 104245 104246 6 104111 104104 104105 104113 104249 104246 6 104112 104105 104106 104109 104114 104249 6 104113 104109 104115 104249 104391 104392 6 104114 104109 104110 104392 104393 104394 7 103522 103525 104117 104530 104531 103521 104119 5 104116 103525 103526 104118 104119 6 104117 103526 104119 104120 103529 109786 7 104117 104118 104120 104121 109784 104530 104116 6 104119 104118 104121 104122 109786 109789 6 104119 104120 104122 104123 104395 109784 6 104121 104120 104123 104124 109789 107172 6 104121 104122 104124 104125 104126 104395 6 104123 104122 104125 107171 104140 107172 6 104123 104124 104126 104127 104128 104140 6 104123 104125 104127 104395 104396 104397 6 104126 104125 104128 104129 104130 104397 6 104127 104125 104129 104136 104139 104140 6 104127 104128 104130 104131 104135 104136 6 104127 104129 104131 104132 104397 104398 6 104130 104129 104132 104133 104134 104135 6 104130 104131 104133 104401 104398 104410 6 104132 104131 104134 104410 104411 104412 6 104133 104131 104135 104412 104413 107164 6 104134 104131 104129 104136 104137 107164 6 104135 104129 104128 104137 104138 104139 6 104135 104136 104138 107163 107161 107164 6 104137 104136 104139 107168 107163 107169 6 104138 104136 104128 104140 107169 107170 6 104139 104128 104125 107170 107171 104124 6 103580 103581 104142 104268 104269 104270 6 104141 103581 103582 104143 104270 104271 6 104142 103582 103583 104144 104271 104272 6 104143 103583 103584 104145 104272 104273 6 104144 103584 103585 104146 104273 104274 6 104145 103585 103586 104147 104274 104275 6 104146 103586 103587 104148 104275 104276 6 104147 103587 103588 103589 104149 104276 6 104148 103589 104150 104276 104277 104278 6 104149 103589 103590 104151 104278 104279 6 104150 103590 103591 104152 104279 104280 6 104151 103591 103592 104153 104280 104281 6 104152 103592 103593 104154 104281 104282 6 104153 103593 103594 104155 104282 104283 6 104154 103594 103595 104156 104283 104284 6 104155 103595 103596 104157 104284 104285 6 104156 103596 103597 104158 104285 104286 6 104157 103597 103598 104159 104286 104287 6 104158 103598 103599 104160 104287 104288 6 104159 103599 103600 104161 104288 104289 6 104160 103600 103601 103602 104162 104289 6 104161 103602 104163 104289 104290 104291 6 104162 103602 103603 104164 104291 104292 6 104163 103603 103604 104165 104292 104293 6 104164 103604 103605 104166 104293 104294 6 104165 103605 103606 104167 104294 104295 6 104166 103606 103607 104168 104295 104296 6 104167 103607 103608 103609 104169 104296 6 104168 103609 104170 104296 104297 104298 6 104169 103609 103610 104171 104298 104299 6 104170 103610 103611 104172 104299 104300 6 104171 103611 103612 104173 104300 104301 6 104172 103612 103613 104174 104301 104302 6 104173 103613 103614 104175 104302 104303 6 104174 103614 103615 104176 104303 104304 6 104175 103615 103616 104177 104304 104305 6 104176 103616 103617 104178 104305 104306 6 104177 103617 103618 104179 104306 104307 6 104178 103618 103619 104180 104307 104308 6 104179 103619 103620 104181 104308 104309 6 104180 103620 103621 104182 104309 104310 6 104181 103621 103622 104183 104310 104311 6 104182 103622 103623 104184 104311 104312 6 104183 103623 103624 104185 104312 104313 6 104184 103624 103625 104186 104313 104314 6 104185 103625 103626 104187 104314 104315 6 104186 103626 103627 104188 104315 104316 6 104187 103627 103628 104189 104316 104317 6 104188 103628 103629 104190 104317 104318 6 104189 103629 103630 104191 104318 104319 6 104190 103630 103631 104192 104319 104320 6 104191 103631 103632 104193 104320 104321 6 104192 103632 103633 103634 104194 104321 6 104193 103634 103903 104195 104321 104322 6 104194 103903 104196 104322 104323 104324 6 104195 103903 103904 103905 104197 104324 6 104196 103905 104198 104324 104325 104326 6 104197 103905 103906 103907 104199 104326 6 104198 103907 103908 104200 104326 104327 6 104199 103908 103927 103928 104201 104327 6 104200 103928 103929 104202 104327 104328 6 104201 103929 103930 104203 104328 104329 6 104202 103930 104204 104329 104330 104331 6 104203 103930 103931 103932 104205 104331 6 104204 103932 103933 104206 104331 104332 6 104205 103933 103934 104207 104332 104333 7 104206 103934 103935 103937 104333 104334 104335 6 104050 104052 104209 104210 104211 104221 6 104050 104208 104210 104470 104049 104477 6 104209 104208 104211 104212 104477 104478 6 104210 104208 104212 104213 104220 104221 6 104210 104211 104213 104214 104478 104479 6 104212 104211 104214 104215 104216 104220 6 104212 104213 104215 104479 104480 104481 6 104214 104213 104216 104217 104481 104482 6 104215 104213 104217 104218 104219 104220 6 104215 104216 104218 104232 104482 104483 6 104217 104216 104219 104232 104233 104234 6 104218 104216 104220 104224 104234 104223 6 104219 104216 104213 104211 104221 104223 6 104220 104211 104208 104052 104222 104223 6 104221 104052 104053 104055 104056 104223 6 104222 104056 104224 104221 104220 104219 6 104223 104056 104057 104225 104234 104219 6 104224 104057 104226 104235 104234 104488 5 104225 104057 104058 104227 104488 7 104226 104058 104059 104228 104229 104487 104488 6 104227 104059 104229 104230 104062 104060 6 104227 104228 104230 104489 104487 104500 6 104229 104228 104062 104500 104501 104502 6 103147 103412 103146 103145 109791 103413 6 104217 104218 104233 104483 104484 104485 6 104232 104218 104234 104235 104485 104486 6 104233 104218 104235 104225 104224 104219 6 104233 104234 104225 104486 104487 104488 6 103889 103890 104237 104251 104252 104256 6 104236 103890 103891 103571 104256 104257 6 103956 103957 104239 107815 107816 104503 6 104238 103957 103803 104100 104240 104503 6 104239 104100 104241 104503 104504 104505 6 104240 104100 104101 104242 104505 104506 6 104241 104101 104102 104243 104416 104506 6 104242 104102 104244 104416 104417 104418 6 104243 104102 104103 104111 104245 104418 6 104244 104111 104246 104247 104418 104419 6 104245 104111 104247 104248 104249 104112 6 104245 104246 104248 104419 107829 107830 6 104247 104246 104249 104391 104739 107830 6 104248 104246 104112 104113 104114 104391 6 103341 103338 101524 101525 102205 102206 6 103889 104236 104252 104253 104428 103888 6 104251 104236 104253 104254 104255 104256 6 104251 104252 104254 104647 104428 106892 6 104253 104252 104255 104729 104730 106892 6 104254 104252 104256 104729 104261 104260 6 104255 104252 104236 104237 104257 104260 6 104256 104237 103571 103572 104258 104260 6 104257 103572 103573 103574 104259 104260 6 104258 103574 104260 104261 104262 104263 6 104258 104259 104261 104256 104257 104255 6 104260 104259 104262 104732 104729 104255 6 104261 104259 104263 106901 104732 106902 6 104262 104259 103574 103575 104264 106902 6 104263 103575 103576 104265 105231 106902 6 104264 103576 103577 104266 105231 105232 6 104265 103577 103578 104267 105232 105233 6 104266 103578 104268 105233 105234 104269 6 104267 103578 103579 103580 104141 104269 6 104268 104141 104270 105234 104267 105451 6 104269 104141 104142 104271 105451 105452 6 104270 104142 104143 104272 105452 105453 6 104271 104143 104144 104273 105453 105454 6 104272 104144 104145 104274 105457 105454 6 104273 104145 104146 104275 105469 105457 6 104274 104146 104147 104276 105469 105470 6 104275 104147 104148 104149 104277 105470 6 104276 104149 104278 105470 105471 105472 6 104277 104149 104150 104279 105472 105473 6 104278 104150 104151 104280 105473 105474 6 104279 104151 104152 104281 105046 105474 6 104280 104152 104153 104282 105046 105047 6 104281 104153 104154 104283 105047 105048 6 104282 104154 104155 104284 105048 105049 6 104283 104155 104156 104285 105049 105050 6 104284 104156 104157 104286 105050 105051 6 104285 104157 104158 104287 105051 105052 6 104286 104158 104159 104288 104923 105052 6 104287 104159 104160 104289 104923 104924 6 104288 104160 104161 104162 104290 104924 6 104289 104162 104291 104924 104925 104926 6 104290 104162 104163 104292 104926 104927 6 104291 104163 104164 104293 104927 104928 6 104292 104164 104165 104294 104928 104929 6 104293 104165 104166 104295 104929 104930 6 104294 104166 104167 104296 104930 104931 6 104295 104167 104168 104169 104297 104931 6 104296 104169 104298 104771 104931 104932 6 104297 104169 104170 104299 104771 104772 6 104298 104170 104171 104300 104772 104773 6 104299 104171 104172 104301 104773 104774 6 104300 104172 104173 104302 104774 104775 6 104301 104173 104174 104303 104775 104776 6 104302 104174 104175 104304 104776 104777 6 104303 104175 104176 104305 104777 104778 6 104304 104176 104177 104306 104778 104779 6 104305 104177 104178 104307 104779 104780 6 104306 104178 104179 104308 104780 104781 6 104307 104179 104180 104309 104781 104782 6 104308 104180 104181 104310 104566 104782 6 104309 104181 104182 104311 104566 104567 6 104310 104182 104183 104312 104567 104568 6 104311 104183 104184 104313 104568 104569 6 104312 104184 104185 104314 104569 104570 6 104313 104185 104186 104315 104570 104571 6 104314 104186 104187 104316 104571 104572 6 104315 104187 104188 104317 104572 104573 6 104316 104188 104189 104318 104573 104574 6 104317 104189 104190 104319 104574 104575 6 104318 104190 104191 104320 104575 104576 6 104319 104191 104192 104321 104576 104577 6 104320 104192 104193 104194 104322 104577 6 104321 104194 104195 104323 104577 104578 6 104322 104195 104324 104578 104579 104580 6 104323 104195 104196 104197 104325 104580 6 104324 104197 104326 104580 104581 104582 6 104325 104197 104198 104199 104327 104582 6 104326 104199 104200 104201 104328 104582 6 104327 104201 104202 104329 104582 104583 6 104328 104202 104203 104330 104583 104584 6 104329 104203 104331 104584 104585 104589 7 104330 104203 104204 104205 104332 104589 104590 6 104331 104205 104206 104333 104590 104591 6 104332 104206 104207 104334 104591 104592 6 104333 104207 104335 104336 104429 104592 5 104334 104207 103937 103938 104336 6 104335 103938 103939 104337 104334 104429 6 104336 103939 103940 104338 104429 104430 6 104337 103940 103941 104339 104430 104431 6 104338 103941 103942 104340 104431 104432 6 104339 103942 103943 104341 104432 104433 6 104340 103943 104342 104433 104434 104435 6 104341 103943 103375 103376 104343 104435 6 104342 103376 103377 104344 104345 104435 6 104343 103377 104345 104346 104347 103378 6 104343 104344 104346 104435 104436 104437 6 104345 104344 104347 104437 104438 104348 6 104346 104344 103378 103645 103646 104348 6 104347 103646 104349 104350 104438 104346 6 104348 103646 104350 104351 104352 103647 6 104348 104349 104351 104601 104438 104602 6 104350 104349 104352 104602 104603 104604 6 104351 104349 103647 103648 104353 104604 6 104352 103648 103657 104354 104355 104604 6 104353 103657 104355 104356 104357 104358 6 104353 104354 104356 104604 104605 104606 6 104355 104354 104357 104361 104362 104606 6 104356 104354 104358 104359 104360 104361 6 104357 104354 104359 104371 103658 103657 6 104357 104358 104360 104368 104369 104371 6 104357 104359 104361 104364 104368 104614 6 104357 104360 104356 104362 104363 104364 6 104356 104361 104363 104606 104607 104608 6 104362 104361 104364 104611 104608 104612 6 104363 104361 104360 104612 104613 104614 6 104097 104098 104366 104372 104373 104374 6 104365 104098 104367 104374 104375 104376 7 104366 104098 104099 103094 104376 101626 101624 6 104360 104359 104369 104370 104614 104615 6 104368 104359 104370 104371 109794 109793 6 104368 104369 109794 104642 104637 104615 6 104369 104359 104358 103658 109793 103659 6 104097 104365 104373 107212 103540 103541 6 104372 104365 104374 107212 107210 107209 6 104373 104365 104366 104375 107209 107213 6 104374 104366 104376 104377 107213 107214 6 104375 104366 104367 104377 101627 101626 5 104375 104376 101627 107214 107215 6 104091 104094 104379 104380 104381 104387 7 104091 104378 104380 107753 104090 107752 107754 6 104379 104378 104381 104382 107754 107755 6 104380 104378 104382 104383 104384 104387 6 104380 104381 104383 107755 107756 107764 6 104382 104381 104384 104385 104389 107764 6 104383 104381 104385 103140 104386 104387 6 104383 104384 103140 104389 104390 103141 6 103140 104384 104387 104095 104388 103139 6 104386 104384 104381 104378 104094 104095 6 104386 104095 102809 102810 102813 103139 6 104383 104385 104390 107764 107765 107766 6 104389 104385 103141 107766 107767 103142 6 104249 104114 104392 104248 104739 104740 6 104391 104114 104115 104393 104402 104740 6 104392 104115 104394 104402 104403 104404 6 104393 104115 104110 103464 104404 103465 5 104121 104123 104126 104396 109784 7 104395 104126 104397 104399 104528 104529 109784 6 104396 104126 104127 104130 104398 104399 6 104397 104130 104399 104400 104401 104132 6 104397 104398 104400 104525 104528 104396 5 104399 104398 104401 104527 104525 7 104400 104398 104132 104410 104534 104527 104535 6 104392 104393 104403 104740 104741 104742 6 104402 104393 104404 104742 104743 104744 6 104403 104393 104394 103465 104744 104745 6 103837 103838 103864 104406 105026 105027 6 104405 103864 104407 105027 105028 105029 6 104406 103864 103865 104408 105029 105030 6 104407 103865 103866 104409 105030 105031 6 104408 103866 103868 104420 105031 105032 6 104401 104132 104133 104411 104535 104536 6 104410 104133 104412 104545 104539 104536 6 104411 104133 104134 104413 104414 104545 6 104412 104134 104414 104415 107164 107165 6 104412 104413 104415 104545 104544 104648 6 104414 104413 104649 104648 107165 107166 6 104242 104243 104417 104506 104507 104508 6 104416 104243 104418 104508 104509 104510 6 104417 104243 104244 104245 104419 104510 6 104418 104245 104247 107828 104510 107829 6 104409 103868 103869 104421 105032 105033 6 104420 103869 103870 103871 104422 105033 6 104421 103871 104423 105033 105034 105035 6 104422 103871 103872 104424 105035 105036 6 104423 103872 103873 104425 104643 105036 6 104424 103873 104426 104643 104644 104645 6 104425 103873 103874 104427 104645 104646 6 104426 103874 103875 104428 104646 104647 6 104427 103875 103888 104647 104253 104251 6 104334 104336 104337 104430 104592 104593 6 104429 104337 104338 104431 104593 104594 6 104430 104338 104339 104432 104594 104595 6 104431 104339 104340 104433 104595 104596 6 104432 104340 104341 104434 104596 104597 6 104433 104341 104435 104597 104598 104436 6 104434 104341 104342 104343 104345 104436 6 104435 104345 104437 104598 104434 104599 6 104436 104345 104346 104438 104599 104600 6 104437 104346 104348 104600 104601 104350 6 103993 103994 104440 104721 104722 104723 6 104439 103994 103995 104441 104723 104724 6 104440 103995 103996 104442 104724 104725 6 104441 103996 103997 104443 104725 104726 6 104442 103997 103998 104444 104726 104727 6 104443 103998 103999 104445 104727 104728 6 104444 103999 104000 104446 104728 104658 6 104445 104000 104001 104070 104447 104658 6 104446 104070 104071 104448 104658 104659 6 104447 104071 104449 104659 104660 104450 6 104448 104071 104072 104073 104074 104450 6 104449 104074 104075 104451 104660 104448 6 104450 104075 104452 104669 104738 104660 6 104451 104075 104076 104077 104453 104669 6 104452 104077 104078 104454 104669 104670 6 104453 104078 104079 104455 104670 104671 6 104454 104079 104080 104456 104671 104672 6 104455 104080 104081 104457 104672 104673 6 104456 104081 104082 104458 104673 104674 6 104457 104082 104083 104459 104674 104675 6 104458 104083 104084 104460 104675 104676 6 104459 104084 104085 104461 104676 104677 6 104460 104085 104462 104677 104678 104679 7 104461 104085 104033 104034 104041 104463 104679 5 104462 104041 104464 104679 104680 6 104463 104041 104042 104465 104471 104680 6 104464 104042 104466 104471 104472 104473 6 104465 104042 104043 104467 104473 104474 6 104466 104043 104044 104468 104474 104475 6 104467 104044 104045 104469 104475 104476 6 104468 104045 104047 104048 104470 104476 6 104469 104048 104049 104209 104476 104477 6 104464 104465 104472 104680 104681 104682 6 104471 104465 104473 104682 104683 104684 6 104472 104465 104466 104474 104684 104685 6 104473 104466 104467 104475 104685 104686 6 104474 104467 104468 104476 104686 104687 6 104475 104468 104469 104470 104477 104687 6 104476 104470 104209 104210 104478 104687 6 104477 104210 104212 104479 104687 105213 6 104478 104212 104214 104480 105213 105214 6 104479 104214 104481 105214 105215 105216 6 104480 104214 104215 104482 104490 105216 6 104481 104215 104217 104483 104490 104491 6 104482 104217 104232 104484 104491 104492 6 104483 104232 104485 104492 104493 104494 6 104484 104232 104233 104486 104494 104495 6 104485 104233 104235 104487 104489 104495 6 104486 104235 104488 104227 104489 104229 5 104487 104235 104227 104226 104225 6 104486 104487 104229 104495 104496 104500 6 104481 104482 104491 104981 104989 105216 6 104490 104482 104483 104492 104981 104982 6 104491 104483 104484 104493 104982 104983 6 104492 104484 104494 104983 104984 104985 6 104493 104484 104485 104495 104985 104497 6 104494 104485 104486 104489 104496 104497 6 104495 104489 104497 104498 104499 104500 6 104495 104496 104498 104985 104494 104986 6 104497 104496 104499 104986 104987 104988 5 104498 104496 104500 104988 104511 7 104499 104496 104489 104229 104230 104501 104511 6 104500 104230 104502 104511 104512 104513 6 104501 104230 104062 104513 104067 104063 6 104239 104240 104504 107816 104238 107817 6 104503 104240 104505 107817 107818 107819 6 104504 104240 104241 104506 107819 107820 6 104505 104241 104242 104416 104507 107820 6 104506 104416 104508 107820 107821 107822 6 104507 104416 104417 104509 107822 107823 6 104508 104417 104510 107823 107824 107825 6 104509 104417 104418 107825 107828 104419 7 104500 104501 104512 104988 104499 105002 104999 6 104511 104501 104513 104754 104759 105002 5 104512 104501 104502 104067 104754 6 100426 100411 104515 104516 105611 105612 6 104514 100411 104516 104517 104521 100410 6 104514 104515 104517 104518 105611 105615 6 104516 104515 104518 104519 104520 104521 6 104516 104517 104519 109734 107508 105615 6 104518 104517 104520 105235 109734 109678 6 104519 104517 104521 105235 105236 105237 6 104520 104517 104515 100410 105237 100421 7 103507 103510 103770 104523 106693 106695 106704 6 104522 103770 104524 106694 106693 104532 6 104523 103770 103771 104525 104526 104532 7 104524 103771 104526 104527 104400 104399 104528 6 104524 104525 104527 104532 104533 104534 5 104526 104525 104400 104534 104401 6 104399 104525 103771 103772 104529 104396 6 104528 103772 103773 104530 104396 109784 6 104529 103773 104531 104116 104119 109784 5 104530 103773 104116 103521 103520 6 104524 104526 104533 105156 104523 106694 6 104532 104526 104534 105156 105157 104666 6 104533 104526 104527 104401 104535 104666 6 104534 104401 104410 104536 104537 104666 6 104535 104410 104537 104538 104539 104411 6 104535 104536 104538 104666 104667 104668 6 104537 104536 104539 104540 104546 104668 6 104538 104536 104540 104541 104545 104411 6 104538 104539 104541 104542 104546 104547 6 104540 104539 104542 104543 104544 104545 6 104540 104541 104543 104550 104547 104551 6 104542 104541 104544 104551 104552 104553 6 104543 104541 104545 104414 104648 104553 6 104544 104541 104539 104411 104412 104414 6 104538 104540 104547 104548 109762 104668 6 104546 104540 104548 104549 104550 104542 6 104546 104547 104549 104557 104560 109762 6 104548 104547 104550 104557 104558 104559 6 104549 104547 104542 104551 106763 104559 6 104550 104542 104543 104552 107144 106763 6 104551 104543 104553 104554 107145 107144 6 104552 104543 104554 104555 104544 104648 6 104552 104553 104555 104556 107145 107146 6 104554 104553 104556 104648 104649 107153 6 104554 104555 107146 107148 107149 107153 6 104548 104549 104558 104560 104561 104562 6 104557 104549 104559 104565 104562 106764 6 104558 104549 106763 106762 106764 104550 7 104548 104557 104561 109762 109761 106675 109792 6 104560 104557 104562 104563 106674 106675 6 104561 104557 104563 104564 104565 104558 6 104561 104562 104564 106665 106666 106674 6 104563 104562 104565 106673 106665 106790 6 104564 104562 104558 106764 106765 106790 6 104309 104310 104567 104782 104783 104784 6 104566 104310 104311 104568 104784 104785 6 104567 104311 104312 104569 104785 104786 6 104568 104312 104313 104570 104786 104787 6 104569 104313 104314 104571 104787 104788 6 104570 104314 104315 104572 104788 104789 6 104571 104315 104316 104573 104789 104790 6 104572 104316 104317 104574 104790 104791 6 104573 104317 104318 104575 104791 104792 6 104574 104318 104319 104576 104792 104793 6 104575 104319 104320 104577 104793 104794 6 104576 104320 104321 104322 104578 104794 6 104577 104322 104323 104579 104794 104795 6 104578 104323 104580 104795 104796 104797 6 104579 104323 104324 104325 104581 104797 6 104580 104325 104582 104797 104798 104583 6 104581 104325 104326 104327 104328 104583 6 104582 104328 104329 104584 104798 104581 7 104583 104329 104330 104585 104586 104804 104798 6 104584 104330 104586 104587 104588 104589 5 104584 104585 104587 104804 104805 6 104586 104585 104588 104805 104806 104807 6 104587 104585 104589 104807 104808 104809 6 104588 104585 104330 104331 104590 104809 5 104589 104331 104332 104591 104809 6 104590 104332 104333 104592 104809 104810 6 104591 104333 104334 104429 104593 104810 6 104592 104429 104430 104594 104810 104811 6 104593 104430 104431 104595 104811 104812 6 104594 104431 104432 104596 104812 104813 6 104595 104432 104433 104597 104813 104814 6 104596 104433 104434 104598 104814 104815 6 104597 104434 104436 104599 104815 104816 6 104598 104436 104437 104600 104816 104817 6 104599 104437 104438 104601 104817 104818 6 104600 104438 104350 104602 104821 104818 6 104601 104350 104351 104603 104821 104822 6 104602 104351 104604 104825 104822 104826 7 104603 104351 104352 104353 104355 104605 104826 5 104604 104355 104606 104826 104827 6 104605 104355 104356 104362 104607 104827 5 104606 104362 104608 104609 104827 6 104607 104362 104609 104610 104611 104363 7 104607 104608 104610 104827 104828 104829 104830 6 104609 104608 104611 104830 104831 104832 6 104610 104608 104363 104612 104832 104834 6 104611 104363 104364 104613 104837 104834 6 104612 104364 104614 104616 104617 104837 6 104613 104364 104360 104368 104615 104616 7 104614 104368 104616 104637 104634 104619 104370 6 104614 104615 104613 104617 104618 104619 6 104613 104616 104618 104837 104622 104838 6 104617 104616 104619 104620 104621 104622 6 104618 104616 104620 104633 104634 104615 6 104618 104619 104621 104628 104629 104633 6 104618 104620 104622 104623 104624 104628 6 104618 104621 104623 104840 104838 104617 6 104622 104621 104624 104625 104840 104841 6 104623 104621 104625 104626 104627 104628 6 104623 104624 104626 104841 104860 104853 6 104625 104624 104627 104860 104861 104862 6 104626 104624 104628 104862 104863 104630 6 104627 104624 104621 104620 104629 104630 6 104628 104620 104630 104631 104632 104633 6 104628 104629 104631 104863 104627 104864 6 104630 104629 104632 104638 104868 104864 6 104631 104629 104633 104638 104639 104635 6 104632 104629 104620 104619 104634 104635 6 104633 104619 104635 104636 104637 104615 6 104633 104634 104636 104639 104632 104640 6 104635 104634 104637 104640 104641 104642 5 104636 104634 104615 104642 104370 6 104631 104632 104639 104868 104912 109760 6 104638 104632 104635 104640 104912 104913 6 104639 104635 104636 104641 104916 104913 6 104640 104636 104642 104910 104916 104909 7 104641 104636 104637 104908 104909 109794 104370 6 104424 104425 104644 105036 105037 105044 6 104643 104425 104645 105045 105044 106889 6 104644 104425 104426 104646 106890 106889 6 104645 104426 104427 104647 106890 106891 6 104646 104427 104428 104253 106891 106892 6 104544 104414 104553 104555 104649 104415 6 104555 104648 104415 107166 107154 107153 6 100422 100052 100053 104651 104652 109684 6 104650 100053 104652 104653 104657 100054 6 104650 104651 104653 104654 109683 109684 6 104652 104651 104654 104655 104656 104657 6 104652 104653 104655 109682 109680 109683 6 104654 104653 104656 109682 109685 109686 7 104655 104653 104657 105380 109688 109686 109689 6 104656 104653 104651 100054 105380 100055 6 104446 104447 104659 104728 104445 104736 6 104658 104447 104448 104660 104736 104737 6 104659 104448 104450 104737 104738 104451 6 103895 103896 103897 104662 107841 104758 6 104661 103897 103898 104663 107841 107842 6 104662 103898 104664 107842 104689 104688 6 104663 103898 103899 104665 103685 104688 6 104664 103899 103900 103901 103902 103685 6 104534 104535 104537 104667 105157 104533 6 104666 104537 104668 109750 105157 109761 6 104667 104537 104538 109761 109762 104546 7 104451 104452 104453 104670 104980 104738 105194 6 104669 104453 104454 104671 105194 105195 6 104670 104454 104455 104672 105195 105196 6 104671 104455 104456 104673 105196 105197 6 104672 104456 104457 104674 105197 105198 6 104673 104457 104458 104675 105198 105199 6 104674 104458 104459 104676 105199 105200 6 104675 104459 104460 104677 105200 105201 6 104676 104460 104461 104678 105201 105202 6 104677 104461 104679 105202 105203 105204 6 104678 104461 104462 104463 104680 105204 7 104679 104463 104464 104471 104681 105204 105205 5 104680 104471 104682 105205 105206 7 104681 104471 104472 104683 105206 105207 105208 5 104682 104472 104684 105208 105209 7 104683 104472 104473 104685 105209 105210 105211 6 104684 104473 104474 104686 105211 105212 6 104685 104474 104475 104687 105212 105213 6 104686 104475 104476 104477 104478 105213 6 104664 103685 103686 103687 104689 104663 6 104688 103687 104690 107842 104663 107843 6 104689 103687 103688 104691 107843 107844 6 104690 103688 103689 104692 105158 107844 6 104691 103689 103690 103692 104693 105158 6 104692 103692 104694 105158 105159 105160 6 104693 103692 103693 104695 105160 105161 6 104694 103693 104696 105161 105162 105163 6 104695 103693 103694 103695 104697 105163 6 104696 103695 104698 105163 105164 105165 6 104697 103695 103696 104699 105165 104700 6 104698 103696 103697 103698 103972 104700 6 104699 103972 104701 105165 104698 107854 6 104700 103972 103973 103974 104702 107854 6 104701 103974 104703 107308 107854 107855 6 104702 103974 103975 104704 107308 107309 6 104703 103975 103976 104705 107309 107310 6 104704 103976 103977 104706 107310 107311 6 104705 103977 103978 104707 107311 107312 6 104706 103978 103979 104708 105170 107312 6 104707 103979 103980 104709 105170 105171 6 104708 103980 103981 104710 105171 105172 6 104709 103981 103982 104711 105172 105173 6 104710 103982 103983 104712 105173 105174 6 104711 103983 103984 104713 105174 105175 6 104712 103984 103985 104714 105175 105176 6 104713 103985 103986 104715 105176 105177 6 104714 103986 103987 104716 104965 105177 6 104715 103987 103988 104717 104965 104966 6 104716 103988 103989 104718 104966 104967 6 104717 103989 103990 104719 104967 104968 6 104718 103990 103991 104720 104968 104969 6 104719 103991 103992 104721 104969 104970 6 104720 103992 103993 104439 104722 104970 6 104721 104439 104723 104970 104971 104972 6 104722 104439 104440 104724 104972 104973 6 104723 104440 104441 104725 104973 104974 6 104724 104441 104442 104726 104733 104974 6 104725 104442 104443 104727 104733 104734 6 104726 104443 104444 104728 104734 104735 6 104727 104444 104445 104658 104735 104736 6 104254 104255 104730 104731 104732 104261 6 104254 104729 104731 106892 106893 106894 6 104730 104729 104732 106894 106895 106896 6 104731 104729 104261 106896 106901 104262 6 104725 104726 104734 104974 104975 104976 6 104733 104726 104727 104735 104976 104977 6 104734 104727 104728 104736 104977 104978 6 104735 104728 104658 104659 104737 104978 6 104736 104659 104660 104738 104978 104979 6 104737 104660 104451 104979 104980 104669 6 104248 104391 104740 105003 107830 107831 6 104739 104391 104392 104402 104741 105003 6 104740 104402 104742 104753 105003 105004 6 104741 104402 104403 104743 104753 104748 6 104742 104403 104744 103892 103893 104748 6 104743 104403 104404 104745 104746 103892 6 104744 104404 103465 103466 103468 104746 6 104745 103468 104747 103397 103892 104744 6 104746 103468 102172 102173 103395 103397 6 104743 103893 104749 104750 104753 104742 6 104748 103893 104750 104751 104752 103894 6 104748 104749 104751 105005 104753 107837 6 104750 104749 104752 104757 107837 107838 6 104751 104749 103894 104757 104758 103895 6 104741 104742 104748 105004 105005 104750 7 104513 104067 104068 104755 104512 104759 104760 5 104754 104068 104756 104760 104761 7 104755 104068 104069 103827 104761 104762 104763 6 104751 104752 104758 107838 107839 107840 6 104757 104752 103895 107840 107841 104661 6 104512 104754 104760 105006 105002 105001 5 104759 104754 104755 104761 105006 7 104760 104755 104756 104762 105006 105007 105008 6 104761 104756 104763 105008 105009 105010 6 104762 104756 103827 103828 104764 105010 6 104763 103828 104765 105010 105011 105012 6 104764 103828 103829 103830 104766 105012 6 104765 103830 103831 104767 104768 105012 6 104766 103831 104768 104769 104770 103832 7 104766 104767 104769 105012 105011 105013 105014 6 104768 104767 104770 105014 105015 105016 6 104769 104767 103832 105016 103834 103833 6 104297 104298 104772 104932 104933 104934 6 104771 104298 104299 104773 104934 104935 6 104772 104299 104300 104774 104935 104936 6 104773 104300 104301 104775 104936 104937 6 104774 104301 104302 104776 104937 104938 6 104775 104302 104303 104777 104938 104939 6 104776 104303 104304 104778 104939 104940 6 104777 104304 104305 104779 104940 104941 6 104778 104305 104306 104780 104941 104942 6 104779 104306 104307 104781 104942 104943 6 104780 104307 104308 104782 104943 104944 6 104781 104308 104309 104566 104783 104944 6 104782 104566 104784 104944 104945 104946 6 104783 104566 104567 104785 104946 104947 6 104784 104567 104568 104786 104947 104948 6 104785 104568 104569 104787 104948 104949 6 104786 104569 104570 104788 104949 104950 6 104787 104570 104571 104789 104950 104951 6 104788 104571 104572 104790 104951 104952 6 104789 104572 104573 104791 104952 104953 6 104790 104573 104574 104792 104953 104954 6 104791 104574 104575 104793 104799 104954 6 104792 104575 104576 104794 104799 104800 6 104793 104576 104577 104578 104795 104800 6 104794 104578 104579 104796 104800 104801 6 104795 104579 104797 104801 104802 104803 6 104796 104579 104580 104581 104798 104803 6 104797 104581 104583 104803 104804 104584 6 104792 104793 104800 104954 104955 104956 6 104799 104793 104794 104795 104801 104956 6 104800 104795 104796 104802 104956 104957 6 104801 104796 104803 104957 104958 104959 6 104802 104796 104797 104798 104804 104959 6 104803 104798 104584 104586 104805 104959 6 104804 104586 104587 104806 104918 104959 6 104805 104587 104807 104918 104919 104920 6 104806 104587 104588 104808 104920 104921 6 104807 104588 104809 104921 104922 104810 6 104808 104588 104589 104590 104591 104810 7 104809 104591 104592 104593 104811 104922 104808 5 104810 104593 104594 104812 104922 6 104811 104594 104595 104813 104964 104922 6 104812 104595 104596 104814 105093 104964 6 104813 104596 104597 104815 105093 105094 6 104814 104597 104598 104816 105094 105095 6 104815 104598 104599 104817 105095 105096 6 104816 104599 104600 104818 104819 105096 6 104817 104600 104819 104820 104821 104601 6 104817 104818 104820 105096 105097 105098 6 104819 104818 104821 105098 105099 104823 6 104820 104818 104601 104602 104822 104823 6 104821 104602 104823 104824 104825 104603 6 104821 104822 104824 105099 104820 105100 6 104823 104822 104825 105100 105101 105102 6 104824 104822 104603 104826 105102 105103 6 104825 104603 104604 104605 104827 105103 7 104826 104605 104606 104607 104609 104828 105103 6 104827 104609 104829 105103 105102 105104 6 104828 104609 104830 105104 105105 105106 6 104829 104609 104610 104831 105106 105107 6 104830 104610 104832 104833 105113 105107 5 104831 104610 104611 104833 104834 6 104831 104832 104834 104835 105113 105114 7 104833 104832 104611 104835 104836 104837 104612 6 104833 104834 104836 105114 104845 104844 6 104835 104834 104837 104838 104839 104844 6 104836 104834 104612 104613 104617 104838 6 104836 104837 104839 104840 104622 104617 6 104836 104838 104840 104842 104843 104844 6 104839 104838 104622 104623 104841 104842 6 104840 104623 104842 104625 104852 104853 6 104840 104841 104839 104843 104852 104850 6 104839 104842 104844 104845 104846 104850 5 104839 104843 104845 104835 104836 7 104844 104843 104846 104847 105114 104835 105115 6 104845 104843 104847 104848 104849 104850 6 104845 104846 104848 105117 105115 105118 6 104847 104846 104849 105118 105119 105120 6 104848 104846 104850 104851 105120 105121 6 104849 104846 104851 104852 104842 104843 6 104849 104850 104852 104854 104855 105121 6 104851 104850 104842 104841 104853 104854 6 104852 104841 104854 104857 104860 104625 6 104851 104852 104853 104855 104856 104857 6 104851 104854 104856 105121 105122 105123 6 104855 104854 104857 104858 105123 105124 6 104856 104854 104853 104858 104859 104860 6 104856 104857 104859 105124 105125 105129 6 104858 104857 104860 105129 105130 104861 6 104859 104857 104853 104625 104626 104861 6 104860 104626 104862 105130 104859 105131 6 104861 104626 104627 104863 104865 105131 6 104862 104627 104630 104864 104865 104866 6 104863 104630 104866 104867 104868 104631 6 104862 104863 104866 105131 105132 105136 6 104865 104863 104864 104867 105136 105137 6 104866 104864 104868 104869 104870 105137 6 104867 104864 104631 104638 104869 109760 6 104867 104868 104870 104871 104872 109760 6 104867 104869 104871 105137 105138 105139 6 104870 104869 104872 104873 105150 105139 6 104871 104869 104873 104874 104875 109760 6 104871 104872 104874 105149 105147 105150 6 104873 104872 104875 104876 104877 105149 6 104874 104872 104876 109760 104912 104914 6 104874 104875 104877 104878 104879 104914 6 104874 104876 104878 105155 105149 104882 6 104877 104876 104879 104880 104881 104882 6 104878 104876 104880 104914 104915 109753 7 104878 104879 104881 109753 109754 109756 109757 6 104878 104880 104882 104883 104884 109757 6 104878 104881 104883 105155 104877 105369 6 104882 104881 104884 104885 105369 105370 6 104883 104881 104885 104886 109757 104895 6 104883 104884 104886 104887 104888 105370 6 104885 104884 104887 104894 104891 104895 6 104885 104886 104888 104889 104890 104891 6 104885 104887 104889 105372 105370 105899 6 104888 104887 104890 105898 105896 105899 6 104889 104887 104891 104892 105898 105901 6 104890 104887 104892 104893 104894 104886 6 104890 104891 104893 105901 105902 105903 6 104892 104891 104894 105912 105903 105913 6 104893 104891 104886 104895 104896 105913 7 104894 104886 104896 104897 109757 109756 104884 6 104894 104895 104897 104898 104899 105913 5 104896 104895 104898 109756 109759 6 104896 104897 104899 104900 104901 109759 6 104896 104898 104900 105913 105914 105917 6 104899 104898 104901 104902 105917 105918 6 104900 104898 104902 104903 104904 109759 6 104900 104901 104903 105918 103671 103670 6 104902 104901 104904 104905 103669 103670 6 104903 104901 104905 109754 104911 109759 6 104903 104904 103669 104906 104907 104911 6 103669 104905 104907 104908 103661 103660 6 104906 104905 104908 104909 104910 104911 7 104906 104907 104909 104642 103660 109793 109794 5 104908 104907 104910 104642 104641 6 104909 104907 104911 104917 104916 104641 6 104910 104907 104905 109754 104917 104904 6 104638 104639 104913 104914 109760 104875 6 104912 104639 104914 104915 104916 104640 6 104912 104913 104915 104875 104876 104879 6 104914 104913 104916 104917 109753 104879 6 104915 104913 104917 104910 104641 104640 6 104915 104916 104910 109753 109754 104911 6 104805 104806 104919 104959 104958 104960 6 104918 104806 104920 104960 104961 104962 6 104919 104806 104807 104921 104962 104963 6 104920 104807 104808 104922 104963 104964 6 104921 104808 104810 104964 104812 104811 6 104287 104288 104924 105052 105053 105054 6 104923 104288 104289 104290 104925 105054 6 104924 104290 104926 105054 105055 105056 6 104925 104290 104291 104927 105056 105057 6 104926 104291 104292 104928 105057 105058 6 104927 104292 104293 104929 105058 105059 6 104928 104293 104294 104930 105059 105060 6 104929 104294 104295 104931 105060 105061 6 104930 104295 104296 104297 104932 105061 6 104931 104297 104771 104933 105061 105062 6 104932 104771 104934 105062 105063 105064 6 104933 104771 104772 104935 105064 105065 6 104934 104772 104773 104936 105065 105066 6 104935 104773 104774 104937 105066 105067 6 104936 104774 104775 104938 105067 105068 6 104937 104775 104776 104939 105068 105069 6 104938 104776 104777 104940 105069 105070 6 104939 104777 104778 104941 105070 105071 6 104940 104778 104779 104942 105071 105072 6 104941 104779 104780 104943 105072 105073 6 104942 104780 104781 104944 105073 105074 6 104943 104781 104782 104783 104945 105074 6 104944 104783 104946 105074 105075 105076 6 104945 104783 104784 104947 105076 105077 6 104946 104784 104785 104948 105077 105078 6 104947 104785 104786 104949 105078 105079 6 104948 104786 104787 104950 105079 105080 6 104949 104787 104788 104951 105080 105081 6 104950 104788 104789 104952 105081 105082 6 104951 104789 104790 104953 105082 105083 6 104952 104790 104791 104954 105083 105084 6 104953 104791 104792 104799 104955 105084 6 104954 104799 104956 105084 105085 105086 6 104955 104799 104800 104801 104957 105086 6 104956 104801 104802 104958 105088 105086 6 104957 104802 104959 104918 104960 105088 6 104958 104802 104803 104804 104805 104918 6 104958 104918 104919 104961 105088 105089 6 104960 104919 104962 105089 105090 105091 6 104961 104919 104920 104963 105091 105092 6 104962 104920 104921 104964 105092 105093 6 104963 104921 104922 104812 105093 104813 6 104715 104716 104966 105177 105178 105179 6 104965 104716 104717 104967 105179 105180 6 104966 104717 104718 104968 105180 105181 6 104967 104718 104719 104969 105181 105182 6 104968 104719 104720 104970 105182 105183 6 104969 104720 104721 104722 104971 105183 6 104970 104722 104972 105183 105184 105185 6 104971 104722 104723 104973 105185 105186 6 104972 104723 104724 104974 105186 105187 6 104973 104724 104725 104733 104975 105187 6 104974 104733 104976 105187 105188 105189 6 104975 104733 104734 104977 105189 105190 6 104976 104734 104735 104978 105190 105191 6 104977 104735 104736 104737 104979 105191 6 104978 104737 104738 104980 105191 105192 6 104979 104738 104669 105192 105193 105194 6 104490 104491 104982 104989 104990 104991 6 104981 104491 104492 104983 104991 104992 6 104982 104492 104493 104984 104992 104993 6 104983 104493 104985 104993 104994 104995 6 104984 104493 104494 104497 104986 104995 6 104985 104497 104498 104987 104995 104996 6 104986 104498 104988 104996 104997 104998 6 104987 104498 104499 104511 104998 104999 6 104490 104981 104990 105216 105217 105218 6 104989 104981 104991 105218 105219 105220 6 104990 104981 104982 104992 105220 105221 6 104991 104982 104983 104993 105221 105222 6 104992 104983 104984 104994 105222 105223 6 104993 104984 104995 105223 105224 105225 6 104994 104984 104985 104986 104996 105225 6 104995 104986 104987 104997 105225 105226 6 104996 104987 104998 105226 105227 105228 6 104997 104987 104988 104999 105000 105228 6 104998 104988 105000 105001 105002 104511 6 104998 104999 105001 105228 105229 105230 7 105000 104999 105002 104759 105006 105166 105230 5 105001 104999 104511 104512 104759 6 104739 104740 104741 105004 107831 107834 6 105003 104741 104753 105005 107834 107835 6 105004 104753 104750 107835 107836 107837 7 104759 104760 104761 105007 105021 105001 105166 6 105006 104761 105008 105021 105022 105023 6 105007 104761 104762 105009 105023 105018 6 105008 104762 105010 105011 105017 105018 5 105009 104762 104763 104764 105011 7 105010 104764 105012 104768 105013 105009 105017 5 105011 104764 104765 104766 104768 6 105011 104768 105014 105020 105017 105241 6 105013 104768 104769 105015 105241 105242 6 105014 104769 105016 105242 105243 105024 5 105015 104769 104770 103834 105024 6 105009 105011 105018 105019 105020 105013 7 105009 105017 105019 105023 105008 105238 106833 6 105018 105017 105020 105238 105239 105240 5 105019 105017 105013 105240 105241 5 105006 105007 105022 105166 105167 6 105021 105007 105023 105167 105168 105169 6 105022 105007 105008 105018 105169 106833 7 105016 103834 103835 105025 105243 105015 105244 6 105024 103835 103836 105026 105244 105245 6 105025 103836 103837 104405 105027 105245 6 105026 104405 104406 105028 105245 105246 6 105027 104406 105029 105249 105246 106844 6 105028 104406 104407 105030 106844 106845 6 105029 104407 104408 105031 106845 106846 6 105030 104408 104409 105032 106849 106846 6 105031 104409 104420 105033 106849 106850 6 105032 104420 104421 104422 105034 106850 6 105033 104422 105035 106850 106851 106852 6 105034 104422 104423 105036 106852 105038 6 105035 104423 104424 104643 105037 105038 6 105036 104643 105038 105039 105040 105044 6 105036 105037 105039 106852 105035 106853 6 105038 105037 105040 105041 106856 106853 6 105039 105037 105041 105042 105043 105044 6 105039 105040 105042 106858 106856 106863 6 105041 105040 105043 106878 106879 106863 6 105042 105040 105044 105045 106880 106878 6 105043 105040 105045 104644 104643 105037 6 105043 105044 104644 106880 106881 106889 6 104280 104281 105047 105474 105475 105476 6 105046 104281 104282 105048 105476 105477 6 105047 104282 104283 105049 105477 105478 6 105048 104283 104284 105050 105478 105479 6 105049 104284 104285 105051 105479 105480 6 105050 104285 104286 105052 105480 105481 6 105051 104286 104287 104923 105053 105481 6 105052 104923 105054 105481 105482 105483 6 105053 104923 104924 104925 105055 105483 6 105054 104925 105056 105483 105484 105485 6 105055 104925 104926 105057 105485 105486 6 105056 104926 104927 105058 105486 105487 6 105057 104927 104928 105059 105487 105488 6 105058 104928 104929 105060 105488 105489 6 105059 104929 104930 105061 105489 105490 6 105060 104930 104931 104932 105062 105490 6 105061 104932 104933 105063 105490 105491 6 105062 104933 105064 105250 105491 105492 6 105063 104933 104934 105065 105250 105251 6 105064 104934 104935 105066 105251 105252 6 105065 104935 104936 105067 105252 105253 6 105066 104936 104937 105068 105253 105254 6 105067 104937 104938 105069 105254 105255 6 105068 104938 104939 105070 105255 105256 6 105069 104939 104940 105071 105256 105257 6 105070 104940 104941 105072 105257 105258 6 105071 104941 104942 105073 105258 105259 6 105072 104942 104943 105074 105259 105260 6 105073 104943 104944 104945 105075 105260 6 105074 104945 105076 105260 105261 105262 6 105075 104945 104946 105077 105262 105263 6 105076 104946 104947 105078 105263 105264 6 105077 104947 104948 105079 105264 105265 6 105078 104948 104949 105080 105265 105266 6 105079 104949 104950 105081 105266 105267 6 105080 104950 104951 105082 105267 105268 6 105081 104951 104952 105083 105268 105269 6 105082 104952 104953 105084 105269 105270 6 105083 104953 104954 104955 105085 105270 6 105084 104955 105086 105087 105270 105271 6 105085 104955 104956 105087 105088 104957 6 105085 105086 105088 105271 105272 105089 6 105087 105086 104957 104958 104960 105089 6 105088 104960 104961 105090 105272 105087 6 105089 104961 105091 105272 105273 105274 6 105090 104961 104962 105092 105274 105275 6 105091 104962 104963 105093 105275 105276 7 105092 104963 104964 104813 104814 105094 105276 6 105093 104814 104815 105095 105276 105277 6 105094 104815 104816 105096 105277 105278 6 105095 104816 104817 104819 105097 105278 6 105096 104819 105098 105278 105279 105280 6 105097 104819 104820 105099 105280 105281 6 105098 104820 104823 105100 105281 105282 6 105099 104823 104824 105101 105282 105152 6 105100 104824 105102 105104 105151 105152 6 105101 104824 104825 105103 104828 105104 5 105102 104825 104826 104827 104828 6 105102 104828 104829 105105 105101 105151 7 105104 104829 105106 105154 105151 105287 105288 6 105105 104829 104830 105107 105108 105288 6 105106 104830 105108 105109 105113 104831 6 105106 105107 105109 105110 105288 105289 6 105108 105107 105110 105111 105112 105113 6 105108 105109 105111 105289 105290 105294 6 105110 105109 105112 105294 105295 105116 6 105111 105109 105113 105114 105115 105116 6 105112 105109 105107 104831 104833 105114 6 105113 104833 104835 104845 105115 105112 6 105114 104845 105112 105116 105117 104847 6 105112 105115 105117 105295 105111 105296 6 105116 105115 104847 105118 105299 105296 6 105117 104847 104848 105119 105299 105300 6 105118 104848 105120 105300 105301 105302 5 105119 104848 104849 105121 105302 6 105120 104849 104851 104855 105122 105302 6 105121 104855 105123 105318 105302 105319 6 105122 104855 104856 105124 105321 105319 6 105123 104856 104858 105125 105126 105321 6 105124 104858 105126 105127 105128 105129 6 105124 105125 105127 105322 105321 105323 6 105126 105125 105128 105323 105324 105328 6 105127 105125 105129 105336 105328 105337 6 105128 105125 104858 104859 105130 105337 6 105129 104859 104861 105131 105337 105338 7 105130 104861 104862 104865 105132 105133 105338 6 105131 104865 105133 105134 105135 105136 5 105131 105132 105134 105338 105339 6 105133 105132 105135 105339 105340 105341 6 105134 105132 105136 105346 105344 105341 6 105135 105132 104865 104866 105137 105346 6 105136 104866 104867 104870 105138 105346 6 105137 104870 105139 105140 105344 105346 6 105138 104870 105140 105141 104871 105150 6 105138 105139 105141 105142 105345 105344 6 105140 105139 105142 105143 105144 105150 6 105140 105141 105143 105345 105360 105359 7 105142 105141 105144 105145 105360 105357 105361 6 105143 105141 105145 105146 105147 105150 6 105143 105144 105146 105361 105362 105366 5 105145 105144 105147 105148 105366 6 105146 105144 105148 105149 104873 105150 7 105146 105147 105149 105155 105366 105367 105368 6 105148 105147 104873 105155 104877 104874 6 104873 105147 104871 105139 105141 105144 6 105101 105104 105152 105153 105154 105105 6 105101 105151 105153 105282 105100 105283 6 105152 105151 105154 105283 105284 105285 6 105153 105151 105105 105285 105286 105287 6 105148 105149 104877 104882 105368 105369 7 104532 104533 105157 106682 106683 106684 106694 6 105156 104533 104666 106682 109750 104667 5 104691 104692 104693 105159 107844 7 105158 104693 105160 107844 107845 107846 107847 6 105159 104693 104694 105161 107847 107848 6 105160 104694 104695 105162 107848 107849 6 105161 104695 105163 107849 107850 107851 6 105162 104695 104696 104697 105164 107851 6 105163 104697 105165 107851 107852 107853 6 105164 104697 104698 104700 107853 107854 5 105001 105006 105021 105167 105230 8 105166 105021 105022 105168 105229 105230 106826 106824 6 105167 105022 105169 106826 106827 106830 7 105168 105022 105023 106830 106831 106832 106833 6 104707 104708 105171 107312 107313 107314 6 105170 104708 104709 105172 107314 107315 6 105171 104709 104710 105173 107315 107316 6 105172 104710 104711 105174 107316 107317 6 105173 104711 104712 105175 107317 107318 6 105174 104712 104713 105176 107318 107319 6 105175 104713 104714 105177 107319 107320 6 105176 104714 104715 104965 105178 107320 6 105177 104965 105179 107320 107321 107322 6 105178 104965 104966 105180 107322 107323 6 105179 104966 104967 105181 105411 107323 6 105180 104967 104968 105182 105411 105412 6 105181 104968 104969 105183 105412 105413 6 105182 104969 104970 104971 105184 105413 6 105183 104971 105185 105413 105414 105415 6 105184 104971 104972 105186 105403 105415 6 105185 104972 104973 105187 105403 105404 6 105186 104973 104974 104975 105188 105404 6 105187 104975 105189 105404 105405 105406 6 105188 104975 104976 105190 105406 105407 6 105189 104976 104977 105191 105407 105408 6 105190 104977 104978 104979 105192 105408 6 105191 104979 104980 105193 105408 105409 6 105192 104980 105194 105409 105410 105195 5 105193 104980 104669 104670 105195 6 105194 104670 104671 105196 105410 105193 7 105195 104671 104672 105197 105423 105410 105431 5 105196 104672 104673 105198 105431 7 105197 104673 104674 105199 105431 105432 105433 6 105198 104674 104675 105200 105433 105434 6 105199 104675 104676 105201 105434 105435 6 105200 104676 104677 105202 105435 105436 6 105201 104677 104678 105203 105436 105437 6 105202 104678 105204 105437 105438 105439 6 105203 104678 104679 104680 105205 105439 5 105204 104680 104681 105206 105439 7 105205 104681 104682 105207 105439 105440 105441 6 105206 104682 105208 105441 105442 105443 6 105207 104682 104683 105209 105424 105443 7 105208 104683 104684 105210 105424 105425 105426 5 105209 104684 105211 105426 105427 7 105210 104684 104685 105212 105427 105215 105214 5 105211 104685 104686 105213 105214 6 105212 104686 104687 104478 104479 105214 6 105213 104479 104480 105215 105211 105212 6 105214 104480 105216 105427 105211 105217 6 105215 104480 104481 104490 104989 105217 7 105216 104989 105218 105447 105427 105215 106810 6 105217 104989 104990 105219 106810 106811 6 105218 104990 105220 106811 106812 106813 6 105219 104990 104991 105221 106813 106814 5 105220 104991 104992 105222 106814 7 105221 104992 104993 105223 106814 106815 106816 5 105222 104993 104994 105224 106816 7 105223 104994 105225 106816 106817 106818 106819 6 105224 104994 104995 104996 105226 106819 6 105225 104996 104997 105227 106819 106820 6 105226 104997 105228 106820 106821 106822 6 105227 104997 104998 105000 105229 106822 7 105228 105000 105230 105167 106822 106823 106824 5 105229 105000 105167 105166 105001 6 104264 104265 105232 106902 106903 105458 6 105231 104265 104266 105233 105448 105458 6 105232 104266 104267 105234 105448 105449 6 105233 104267 104269 105449 105450 105451 6 104519 104520 105236 109677 109678 109679 6 105235 104520 105237 109679 109683 109684 6 105236 104520 104521 100422 109684 100421 6 105018 105019 105239 106832 106833 106834 6 105238 105019 105240 105648 106834 106835 6 105239 105019 105020 105241 105648 105649 7 105240 105020 105013 105014 105242 105649 105650 5 105241 105014 105015 105243 105650 7 105242 105015 105024 105244 105652 105650 105653 6 105243 105024 105025 105245 105653 105247 6 105244 105025 105026 105027 105246 105247 6 105245 105027 105247 105248 105249 105028 6 105245 105246 105248 105653 105244 106840 6 105247 105246 105249 106841 106840 106842 6 105248 105246 105028 106842 106843 106844 6 105063 105064 105251 105492 105493 105494 6 105250 105064 105065 105252 105494 105495 6 105251 105065 105066 105253 105495 105496 6 105252 105066 105067 105254 105496 105497 6 105253 105067 105068 105255 105497 105498 6 105254 105068 105069 105256 105498 105499 6 105255 105069 105070 105257 105499 105500 6 105256 105070 105071 105258 105500 105501 6 105257 105071 105072 105259 105501 105502 6 105258 105072 105073 105260 105502 105503 6 105259 105073 105074 105075 105261 105503 6 105260 105075 105262 105503 105504 105505 6 105261 105075 105076 105263 105505 105506 6 105262 105076 105077 105264 105506 105507 6 105263 105077 105078 105265 105507 105508 6 105264 105078 105079 105266 105508 105509 6 105265 105079 105080 105267 105509 105510 6 105266 105080 105081 105268 105510 105511 6 105267 105081 105082 105269 105511 105512 6 105268 105082 105083 105270 105512 105513 6 105269 105083 105084 105085 105271 105513 6 105270 105085 105087 105272 105513 105514 6 105271 105087 105089 105090 105273 105514 6 105272 105090 105274 105514 105515 105516 6 105273 105090 105091 105275 105519 105516 6 105274 105091 105092 105276 105519 105277 5 105275 105092 105093 105094 105277 6 105276 105094 105095 105278 105519 105275 6 105277 105095 105096 105097 105279 105519 6 105278 105097 105280 105519 105518 105520 6 105279 105097 105098 105281 105520 105377 6 105280 105098 105099 105282 105376 105377 6 105281 105099 105100 105152 105283 105376 6 105282 105152 105153 105284 105379 105376 6 105283 105153 105285 105524 105379 105525 6 105284 105153 105154 105286 105525 105526 6 105285 105154 105287 105526 105527 105291 6 105286 105154 105105 105288 105291 105289 5 105287 105105 105106 105108 105289 6 105288 105108 105110 105290 105291 105287 6 105289 105110 105291 105292 105293 105294 7 105289 105290 105292 105527 105286 105287 105528 6 105291 105290 105293 105528 105529 105533 5 105292 105290 105294 105533 105534 6 105293 105290 105110 105111 105295 105534 6 105294 105111 105116 105296 105297 105534 6 105295 105116 105297 105298 105299 105117 6 105295 105296 105298 105534 105535 105542 6 105297 105296 105299 105542 105543 105544 6 105298 105296 105117 105118 105300 105544 6 105299 105118 105119 105301 105304 105544 6 105300 105119 105302 105303 105304 105305 7 105301 105119 105303 105318 105122 105120 105121 6 105301 105302 105308 105305 105309 105318 6 105300 105301 105305 105306 105543 105544 6 105304 105301 105306 105307 105308 105303 6 105304 105305 105307 105543 105545 105546 6 105306 105305 105308 105311 105312 105546 6 105307 105305 105303 105309 105310 105311 6 105308 105303 105310 105316 105317 105318 6 105308 105309 105311 105314 105315 105316 6 105308 105310 105307 105312 105313 105314 6 105307 105311 105313 105546 105547 105548 6 105312 105311 105314 105548 105549 105550 6 105313 105311 105310 105315 105553 105550 6 105314 105310 105316 105555 105553 105558 6 105315 105310 105309 105317 105558 105559 6 105316 105309 105318 105319 105320 105559 6 105317 105309 105303 105302 105122 105319 6 105318 105122 105317 105320 105321 105123 6 105317 105319 105321 105322 105559 105560 6 105320 105319 105322 105126 105124 105123 6 105320 105321 105126 105323 105560 105561 6 105322 105126 105127 105324 105325 105561 6 105323 105127 105325 105326 105327 105328 6 105323 105324 105326 105561 105562 105563 6 105325 105324 105327 105572 105563 105573 6 105326 105324 105328 105329 105330 105573 6 105327 105324 105329 105336 105128 105127 6 105327 105328 105330 105331 105332 105336 6 105327 105329 105331 105573 105574 105575 6 105330 105329 105332 105333 105575 105576 6 105331 105329 105333 105334 105335 105336 6 105331 105332 105334 105576 105577 105578 6 105333 105332 105335 105578 105340 105339 6 105334 105332 105336 105337 105338 105339 6 105335 105332 105329 105328 105128 105337 6 105336 105128 105129 105130 105335 105338 6 105335 105337 105130 105131 105133 105339 6 105338 105133 105134 105340 105334 105335 6 105339 105134 105341 105342 105578 105334 6 105340 105134 105342 105343 105344 105135 6 105340 105341 105343 105348 105349 105578 6 105342 105341 105344 105345 105347 105348 7 105343 105341 105345 105140 105138 105346 105135 6 105343 105344 105140 105142 105347 105359 5 105138 105344 105135 105136 105137 6 105343 105345 105348 105351 105352 105359 6 105343 105347 105342 105349 105350 105351 6 105342 105348 105350 105578 105577 105579 6 105349 105348 105351 105579 105580 105584 6 105350 105348 105347 105352 105353 105584 6 105351 105347 105353 105354 105355 105359 6 105351 105352 105354 105608 105584 105609 6 105353 105352 105355 105356 105807 105609 6 105354 105352 105356 105357 105359 105360 6 105354 105355 105357 105358 105807 105808 6 105356 105355 105358 105360 105143 105361 7 105356 105357 105808 105809 105810 105363 105361 6 105355 105352 105347 105360 105142 105345 5 105355 105359 105142 105143 105357 6 105357 105143 105145 105362 105363 105358 6 105361 105145 105363 105364 105365 105366 5 105361 105362 105364 105810 105358 6 105363 105362 105365 105810 105811 105402 7 105364 105362 105366 105402 105401 105367 105375 6 105365 105362 105145 105146 105148 105367 6 105366 105148 105368 105374 105365 105375 6 105367 105148 105155 105369 105371 105374 6 105368 105155 104882 104883 105370 105371 6 105369 104883 105371 105372 104888 104885 6 105369 105370 105372 105373 105374 105368 6 105371 105370 105373 104888 105393 105899 6 105371 105372 105374 105375 105392 105393 5 105371 105373 105375 105368 105367 6 105374 105373 105392 105365 105367 105401 6 105281 105282 105377 105378 105379 105283 6 105281 105376 105378 105520 105280 105521 6 105377 105376 105379 105521 105522 105523 6 105378 105376 105283 105523 105524 105284 6 104656 104657 100055 109689 100430 100056 6 101679 101680 101678 105382 105383 101682 6 101678 105381 105383 105384 107779 103415 6 105382 105381 105384 105385 103774 101682 6 105382 105383 105385 105386 107779 107780 6 105384 105383 105386 105387 105391 103774 6 105384 105385 105387 105388 107780 107781 6 105386 105385 105388 105389 105390 105391 6 105386 105387 105389 105616 107781 107782 6 105388 105387 105390 105616 105617 105618 6 105389 105387 105391 105618 105619 105620 6 105390 105387 105385 103774 105620 103775 6 105375 105373 105393 105394 105401 105398 6 105392 105373 105394 105372 105395 105899 6 105392 105393 105395 105396 105397 105398 5 105394 105393 105396 105899 105894 6 105394 105395 105397 105893 105890 105894 6 105394 105396 105398 105399 105889 105890 6 105394 105397 105399 105400 105401 105392 6 105398 105397 105400 105880 105888 105889 7 105398 105399 105401 105402 105887 105881 105880 6 105398 105400 105402 105365 105375 105392 6 105401 105400 105887 105811 105364 105365 6 105185 105186 105404 105415 105416 105417 6 105403 105186 105187 105188 105405 105417 6 105404 105188 105406 105417 105418 105419 6 105405 105188 105189 105407 105419 105420 6 105406 105189 105190 105408 105420 105421 6 105407 105190 105191 105192 105409 105421 6 105408 105192 105193 105410 105421 105422 6 105409 105193 105195 105422 105423 105196 6 105180 105181 105412 107323 107324 107325 6 105411 105181 105182 105413 107325 107326 6 105412 105182 105183 105184 105414 107326 6 105413 105184 105415 107326 107327 107328 6 105414 105184 105185 105403 105416 107328 6 105415 105403 105417 107328 107329 107330 6 105416 105403 105404 105405 105418 107330 6 105417 105405 105419 106791 107330 107331 6 105418 105405 105406 105420 106791 106792 6 105419 105406 105407 105421 105428 106792 6 105420 105407 105408 105409 105422 105428 6 105421 105409 105410 105423 105428 105429 6 105422 105410 105196 105429 105430 105431 6 105208 105209 105425 105443 105444 105445 6 105424 105209 105426 105445 105446 105447 5 105425 105209 105210 105427 105447 6 105426 105210 105211 105215 105447 105217 6 105420 105421 105422 105429 106792 106793 6 105428 105422 105423 105430 106793 106794 6 105429 105423 105431 106794 106795 105432 6 105430 105423 105196 105197 105198 105432 5 105431 105198 105433 106795 105430 6 105432 105198 105199 105434 106795 106796 6 105433 105199 105200 105435 106796 106797 6 105434 105200 105201 105436 106797 106798 6 105435 105201 105202 105437 106798 106799 6 105436 105202 105203 105438 106799 106800 6 105437 105203 105439 106800 106801 106802 7 105438 105203 105204 105205 105206 105440 106802 5 105439 105206 105441 106802 106803 6 105440 105206 105207 105442 106803 106804 6 105441 105207 105443 106804 106805 105444 5 105442 105207 105208 105424 105444 6 105443 105424 105445 106805 105442 106806 6 105444 105424 105425 105446 106806 106807 6 105445 105425 105447 106807 106808 106809 7 105446 105425 105426 105427 105217 106809 106810 6 105232 105233 105449 105458 105459 105460 6 105448 105233 105234 105450 105460 105461 6 105449 105234 105451 105461 105462 105463 6 105450 105234 104269 104270 105452 105463 6 105451 104270 104271 105453 105463 105464 6 105452 104271 104272 105454 105455 105464 6 105453 104272 105455 105456 105457 104273 6 105453 105454 105456 105464 105465 105466 6 105455 105454 105457 105466 105467 105468 6 105456 105454 104273 105468 105469 104274 6 105232 105448 105459 106903 105231 106904 6 105458 105448 105460 106904 106905 106906 6 105459 105448 105449 105461 106906 106907 6 105460 105449 105450 105462 106907 106908 6 105461 105450 105463 106908 106909 106910 6 105462 105450 105451 105452 105464 106910 6 105463 105452 105453 105455 105465 106910 6 105464 105455 105466 106910 106911 106912 6 105465 105455 105456 105467 106912 106913 6 105466 105456 105468 106913 106914 106915 6 105467 105456 105457 105469 106915 106916 6 105468 105457 104274 104275 105470 106916 6 105469 104275 104276 104277 105471 106916 6 105470 104277 105472 106916 106917 106918 6 105471 104277 104278 105473 106918 106919 6 105472 104278 104279 105474 106919 106920 6 105473 104279 104280 105046 105475 106920 6 105474 105046 105476 106920 106921 106922 6 105475 105046 105047 105477 106922 106923 6 105476 105047 105048 105478 106923 106924 6 105477 105048 105049 105479 106924 106925 6 105478 105049 105050 105480 106925 106926 6 105479 105050 105051 105481 105654 106926 6 105480 105051 105052 105053 105482 105654 6 105481 105053 105483 105654 105655 105656 6 105482 105053 105054 105055 105484 105656 6 105483 105055 105485 105656 105657 105658 6 105484 105055 105056 105486 105658 105659 6 105485 105056 105057 105487 105659 105660 6 105486 105057 105058 105488 105660 105661 6 105487 105058 105059 105489 105621 105661 6 105488 105059 105060 105490 105621 105622 6 105489 105060 105061 105062 105491 105622 6 105490 105062 105063 105492 105622 105623 6 105491 105063 105250 105493 105623 105624 6 105492 105250 105494 105624 105625 105626 6 105493 105250 105251 105495 105626 105627 6 105494 105251 105252 105496 105627 105628 6 105495 105252 105253 105497 105628 105629 6 105496 105253 105254 105498 105629 105630 6 105497 105254 105255 105499 105630 105631 6 105498 105255 105256 105500 105631 105632 6 105499 105256 105257 105501 105632 105633 6 105500 105257 105258 105502 105633 105634 6 105501 105258 105259 105503 105634 105635 6 105502 105259 105260 105261 105504 105635 6 105503 105261 105505 105635 105636 105637 6 105504 105261 105262 105506 105637 105638 6 105505 105262 105263 105507 105638 105639 6 105506 105263 105264 105508 105639 105640 6 105507 105264 105265 105509 105640 105641 6 105508 105265 105266 105510 105641 105642 6 105509 105266 105267 105511 105642 105643 6 105510 105267 105268 105512 105643 105644 6 105511 105268 105269 105513 105644 105645 6 105512 105269 105270 105271 105514 105645 6 105513 105271 105272 105273 105515 105645 6 105514 105273 105516 105517 105645 105646 6 105515 105273 105517 105518 105519 105274 6 105515 105516 105518 105646 105647 105520 5 105517 105516 105519 105279 105520 7 105518 105516 105274 105275 105277 105278 105279 7 105518 105279 105280 105377 105521 105647 105517 5 105520 105377 105378 105522 105647 7 105521 105378 105523 105685 105647 105684 105686 6 105522 105378 105379 105524 105687 105686 6 105523 105379 105284 105525 105687 105688 6 105524 105284 105285 105526 105688 105689 6 105525 105285 105286 105527 105689 105690 6 105526 105286 105291 105528 105690 105691 6 105527 105291 105292 105529 105530 105691 6 105528 105292 105530 105531 105532 105533 5 105528 105529 105531 105691 105692 6 105530 105529 105532 105692 105693 105694 7 105531 105529 105533 105694 105695 105538 105536 6 105532 105529 105292 105293 105534 105536 7 105533 105293 105294 105295 105297 105535 105536 6 105534 105297 105536 105537 105541 105542 6 105534 105535 105537 105538 105532 105533 6 105536 105535 105538 105539 105540 105541 6 105536 105537 105539 105695 105532 105696 6 105538 105537 105540 105696 105697 105698 7 105539 105537 105541 105698 105699 105700 109795 5 105540 105537 105535 105542 109795 6 105541 105535 105297 105298 105543 109795 7 105542 105298 105544 105304 105306 105545 109795 5 105543 105298 105304 105300 105299 6 105543 105306 105546 105701 105700 109795 6 105545 105306 105307 105312 105547 105701 6 105546 105312 105548 105701 105702 105703 6 105547 105312 105313 105549 105703 105704 6 105548 105313 105550 105551 105704 105705 6 105549 105313 105551 105552 105553 105314 6 105549 105550 105552 105705 105706 105707 6 105551 105550 105553 105554 105707 105708 6 105552 105550 105314 105554 105555 105315 6 105552 105553 105555 105556 105708 105709 6 105554 105553 105315 105556 105557 105558 6 105554 105555 105557 105709 105710 105711 6 105556 105555 105558 105714 105711 105715 6 105557 105555 105315 105316 105559 105715 6 105558 105316 105317 105320 105560 105715 6 105559 105320 105322 105561 105716 105715 6 105560 105322 105323 105325 105562 105716 6 105561 105325 105563 105564 105717 105716 6 105562 105325 105564 105565 105572 105326 6 105562 105563 105565 105566 105717 105713 6 105564 105563 105566 105567 105571 105572 6 105564 105565 105567 105568 105753 105713 6 105566 105565 105568 105569 105570 105571 6 105566 105567 105569 105752 105753 105754 6 105568 105567 105570 105754 105755 105770 6 105569 105567 105571 105769 105767 105770 6 105570 105567 105565 105572 105769 105771 6 105571 105565 105563 105326 105573 105771 6 105572 105326 105327 105330 105574 105771 6 105573 105330 105575 105771 105772 105773 6 105574 105330 105331 105576 105773 105594 7 105575 105331 105333 105577 105594 105589 105774 6 105576 105333 105578 105349 105579 105774 6 105577 105333 105334 105340 105342 105349 6 105577 105349 105350 105580 105581 105774 6 105579 105350 105581 105582 105583 105584 6 105579 105580 105582 105585 105586 105774 6 105581 105580 105583 105585 105605 105606 6 105582 105580 105584 105606 105607 105608 6 105583 105580 105350 105351 105608 105353 6 105581 105582 105586 105587 105605 105597 6 105581 105585 105587 105588 105589 105774 6 105586 105585 105588 105595 105596 105597 6 105586 105587 105589 105590 105591 105595 6 105586 105588 105590 105594 105576 105774 6 105589 105588 105591 105592 105594 105773 6 105590 105588 105592 105593 105595 105778 6 105590 105591 105593 105773 105772 105775 6 105592 105591 105775 105776 105777 105778 5 105589 105590 105773 105575 105576 6 105591 105588 105587 105596 105778 105779 6 105595 105587 105597 105598 105599 105779 6 105596 105587 105598 105602 105605 105585 6 105596 105597 105599 105600 105601 105602 6 105596 105598 105600 105779 105780 105781 6 105599 105598 105601 105781 105789 105790 6 105600 105598 105602 105603 105790 105791 6 105601 105598 105603 105604 105597 105605 6 105601 105602 105604 105794 105791 105795 6 105603 105602 105795 105796 105606 105605 6 105602 105597 105585 105582 105606 105604 6 105605 105582 105583 105607 105796 105604 6 105606 105583 105608 105610 105798 105796 6 105607 105583 105584 105353 105609 105610 7 105608 105353 105610 105800 105806 105807 105354 5 105608 105609 105607 105800 105798 6 104514 104516 105612 105613 105614 105615 6 104514 105611 105613 100427 100426 107500 6 105612 105611 105614 107500 107501 107505 6 105613 105611 105615 107505 107506 107507 6 105614 105611 104516 107507 107508 104518 6 105388 105389 105617 107782 107783 107784 6 105616 105389 105618 107784 107785 107786 6 105617 105389 105390 105619 107786 107789 6 105618 105390 105620 107789 107790 107791 6 105619 105390 105391 103775 103778 107791 6 105488 105489 105622 105661 105662 105663 6 105621 105489 105490 105491 105623 105663 6 105622 105491 105492 105624 105663 105664 6 105623 105492 105493 105625 105664 105665 6 105624 105493 105626 105665 105666 105667 6 105625 105493 105494 105627 105667 105668 6 105626 105494 105495 105628 105668 105669 6 105627 105495 105496 105629 105669 105670 6 105628 105496 105497 105630 105670 105671 6 105629 105497 105498 105631 105671 105672 6 105630 105498 105499 105632 105672 105673 6 105631 105499 105500 105633 105673 105674 6 105632 105500 105501 105634 105674 105675 6 105633 105501 105502 105635 105675 105676 6 105634 105502 105503 105504 105636 105676 6 105635 105504 105637 105676 105677 105678 6 105636 105504 105505 105638 105678 105679 6 105637 105505 105506 105639 105679 105680 6 105638 105506 105507 105640 105680 105681 6 105639 105507 105508 105641 105681 105682 6 105640 105508 105509 105642 105682 105683 6 105641 105509 105510 105643 105683 105684 6 105642 105510 105511 105644 105684 105685 6 105643 105511 105512 105645 105685 105646 6 105644 105512 105513 105514 105515 105646 6 105645 105515 105517 105647 105685 105644 6 105646 105517 105520 105685 105522 105521 6 105239 105240 105649 106835 106836 106837 6 105648 105240 105241 105650 105651 106837 6 105649 105241 105651 105652 105243 105242 6 105649 105650 105652 106837 106838 106839 6 105651 105650 105243 105653 106839 106840 5 105652 105243 105244 105247 106840 6 105480 105481 105482 105655 106926 106927 6 105654 105482 105656 106927 106928 106929 6 105655 105482 105483 105484 105657 106929 6 105656 105484 105658 106929 106930 106931 6 105657 105484 105485 105659 105831 106931 6 105658 105485 105486 105660 105831 105832 6 105659 105486 105487 105661 105832 105833 6 105660 105487 105488 105621 105662 105833 6 105661 105621 105663 105833 105834 105835 6 105662 105621 105622 105623 105664 105835 6 105663 105623 105624 105665 105835 105813 6 105664 105624 105625 105666 105812 105813 6 105665 105625 105667 105812 105816 105817 6 105666 105625 105626 105668 105859 105817 6 105667 105626 105627 105669 105859 105860 6 105668 105627 105628 105670 105860 105861 6 105669 105628 105629 105671 105861 105862 6 105670 105629 105630 105672 105862 105863 6 105671 105630 105631 105673 105863 105864 6 105672 105631 105632 105674 105864 105865 6 105673 105632 105633 105675 105865 105866 6 105674 105633 105634 105676 105866 105867 6 105675 105634 105635 105636 105677 105867 6 105676 105636 105678 105867 105868 105693 6 105677 105636 105637 105679 105693 105869 6 105678 105637 105638 105680 105869 105870 6 105679 105638 105639 105681 105870 105871 6 105680 105639 105640 105682 105871 105688 6 105681 105640 105641 105683 105688 105687 6 105682 105641 105642 105684 105686 105687 6 105683 105642 105643 105685 105522 105686 6 105684 105643 105644 105646 105647 105522 5 105684 105522 105683 105687 105523 6 105683 105686 105523 105524 105688 105682 7 105687 105524 105525 105689 105871 105681 105682 5 105688 105525 105526 105690 105871 7 105689 105526 105527 105691 105871 105870 105692 5 105690 105527 105528 105530 105692 7 105691 105530 105531 105693 105870 105690 105869 7 105692 105531 105694 105868 105677 105678 105869 6 105693 105531 105532 105695 109698 105868 6 105694 105532 105538 105696 109699 109698 6 105695 105538 105539 105697 105718 109699 6 105696 105539 105698 105718 105719 105720 6 105697 105539 105540 105699 105720 105721 6 105698 105540 105700 105701 105721 105722 5 105699 105540 105701 105545 109795 7 105699 105700 105545 105546 105547 105702 105722 6 105701 105547 105703 105722 105723 105727 6 105702 105547 105548 105704 105727 105728 6 105703 105548 105549 105705 105728 105729 6 105704 105549 105551 105706 105732 105729 6 105705 105551 105707 105732 105733 105734 6 105706 105551 105552 105708 105737 105734 6 105707 105552 105554 105709 105737 105738 6 105708 105554 105556 105710 105747 105738 6 105709 105556 105711 105712 105747 105748 6 105710 105556 105712 105713 105714 105557 6 105710 105711 105713 105748 105749 105753 7 105712 105711 105714 105717 105564 105753 105566 6 105713 105711 105557 105715 105716 105717 6 105714 105557 105716 105560 105559 105558 6 105714 105715 105717 105562 105561 105560 5 105714 105716 105562 105564 105713 7 105696 105697 105719 109696 105865 109697 109699 6 105718 105697 105720 109696 109695 109700 6 105719 105697 105698 105721 109700 109701 7 105720 105698 105699 105722 105723 105724 109701 5 105721 105699 105701 105702 105723 7 105722 105702 105721 105724 105725 105726 105727 6 105721 105723 105725 106095 109701 109702 6 105724 105723 105726 106095 106096 106097 6 105725 105723 105727 106097 105730 105728 5 105726 105723 105702 105703 105728 6 105727 105703 105704 105729 105730 105726 6 105728 105704 105730 105731 105732 105705 7 105728 105729 105731 106097 105726 106098 106099 6 105730 105729 105732 106099 106100 106101 6 105731 105729 105705 105706 105733 106101 6 105732 105706 105734 105735 106101 106102 6 105733 105706 105735 105736 105737 105707 6 105733 105734 105736 106105 106102 106106 6 105735 105734 105737 106106 106107 105739 6 105736 105734 105707 105708 105738 105739 6 105737 105708 105739 105740 105747 105709 6 105737 105738 105740 105741 106107 105736 6 105739 105738 105741 105742 105746 105747 6 105739 105740 105742 105743 106107 106108 6 105741 105740 105743 105744 105745 105746 6 105741 105742 105744 106111 106108 106112 6 105743 105742 105745 106112 106113 106114 6 105744 105742 105746 105750 106121 106114 6 105745 105742 105740 105747 105748 105750 6 105746 105740 105738 105709 105710 105748 6 105747 105710 105712 105749 105746 105750 6 105748 105712 105750 105751 105752 105753 6 105746 105748 105745 105749 105751 106121 5 105750 105749 105752 106121 105949 6 105751 105749 105753 105568 105754 105949 6 105752 105749 105712 105713 105568 105566 6 105752 105568 105569 105755 105756 105949 6 105754 105569 105756 105757 105758 105770 6 105754 105755 105757 105949 105950 105951 6 105756 105755 105758 105759 105951 105952 6 105757 105755 105759 105760 105761 105770 6 105757 105758 105760 105952 105953 105957 6 105759 105758 105761 105762 105763 105957 6 105760 105758 105762 105766 105767 105770 6 105760 105761 105763 105764 105765 105766 6 105760 105762 105764 105957 105958 105988 6 105763 105762 105765 105989 105988 105990 6 105764 105762 105766 105990 105991 105776 6 105765 105762 105761 105767 105768 105776 6 105766 105761 105768 105769 105570 105770 6 105766 105767 105769 105772 105775 105776 6 105768 105767 105570 105571 105771 105772 6 105570 105767 105569 105761 105755 105758 6 105769 105571 105572 105573 105574 105772 7 105771 105574 105773 105592 105775 105769 105768 6 105772 105574 105575 105594 105590 105592 6 105589 105576 105586 105581 105579 105577 5 105772 105592 105593 105776 105768 7 105775 105593 105777 105991 105765 105768 105766 6 105776 105593 105778 105992 105991 105782 6 105777 105593 105591 105595 105779 105782 6 105778 105595 105596 105599 105780 105782 6 105779 105599 105781 105782 105783 105784 6 105780 105599 105600 105784 105785 105789 6 105779 105780 105783 105992 105777 105778 6 105782 105780 105784 105993 105992 105996 7 105783 105780 105781 105785 105786 105996 105997 6 105784 105781 105786 105787 105788 105789 6 105784 105785 105787 105997 105998 105999 6 105786 105785 105788 106002 105999 106003 6 105787 105785 105789 106009 106003 106199 6 105788 105785 105781 105600 105790 106199 6 105789 105600 105601 105791 105792 106199 6 105790 105601 105792 105793 105794 105603 6 105790 105791 105793 106198 106199 106197 6 105792 105791 105794 106197 106200 106221 6 105793 105791 105603 105795 106221 106219 6 105794 105603 105604 105796 105797 106219 6 105795 105604 105797 105798 105607 105606 6 105795 105796 105798 105799 106218 106219 6 105797 105796 105607 105799 105800 105610 6 105797 105798 105800 105801 105802 106218 7 105799 105798 105610 105609 105801 105805 105806 6 105799 105800 105802 105803 105804 105805 6 105799 105801 105803 106217 106209 106218 6 105802 105801 105804 105823 105824 106217 6 105803 105801 105805 105823 105830 105839 6 105804 105801 105800 105806 105808 105839 5 105805 105800 105609 105807 105808 5 105806 105609 105354 105356 105808 7 105807 105356 105358 105809 105839 105805 105806 6 105808 105358 105810 105838 105839 105886 7 105809 105358 105363 105364 105811 105885 105886 6 105810 105364 105884 105885 105887 105402 6 105665 105666 105813 105814 105815 105816 6 105665 105812 105814 105835 105664 105842 6 105813 105812 105815 105842 105843 105844 6 105814 105812 105816 105819 105820 105844 6 105815 105812 105666 105817 105818 105819 6 105816 105666 105818 105859 105857 105667 6 105816 105817 105819 105822 105857 105854 6 105816 105818 105815 105820 105821 105822 6 105815 105819 105821 105844 105845 105846 6 105820 105819 105822 105852 105849 105846 6 105821 105819 105818 105852 105853 105854 6 105803 105804 105824 105825 105826 105830 5 105803 105823 105825 106216 106217 7 105824 105823 105826 105827 106216 106215 106021 6 105825 105823 105827 105828 105829 105830 6 105825 105826 105828 106019 106020 106021 6 105827 105826 105829 105836 105872 106019 6 105828 105826 105830 105836 105837 105838 6 105829 105826 105823 105804 105838 105839 6 105658 105659 105832 106931 106932 106933 6 105831 105659 105660 105833 105840 106933 6 105832 105660 105661 105662 105834 105840 6 105833 105662 105835 105840 105841 105842 6 105834 105662 105663 105664 105813 105842 6 105828 105829 105837 105872 105873 105883 6 105836 105829 105838 105885 105883 105886 6 105837 105829 105830 105839 105809 105886 6 105838 105830 105809 105808 105805 105804 6 105832 105833 105834 105841 106933 106934 6 105840 105834 105842 106934 106935 105843 6 105841 105834 105835 105813 105814 105843 6 105842 105814 105844 106018 106935 105841 6 105843 105814 105815 105820 105845 106018 6 105844 105820 105846 105847 106018 106940 6 105845 105820 105847 105848 105849 105821 6 105845 105846 105848 106940 106941 106942 6 105847 105846 105849 105850 106945 106942 6 105848 105846 105850 105851 105852 105821 5 105848 105849 105851 106945 106385 6 105850 105849 105852 106103 106104 106385 6 105851 105849 105821 105822 105853 106103 6 105852 105822 105854 105855 106100 106103 6 105853 105822 105855 105856 105857 105818 6 105853 105854 105856 106098 106099 106100 6 105855 105854 105857 105858 106384 106098 6 105856 105854 105858 105859 105817 105818 6 105856 105857 105859 105860 106383 106384 6 105858 105857 105817 105667 105668 105860 6 105859 105668 105669 105861 106383 105858 6 105860 105669 105670 105862 109703 106383 6 105861 105670 105671 105863 109694 109703 6 105862 105671 105672 105864 109694 109695 6 105863 105672 105673 105865 109695 109696 7 105864 105673 105674 105866 109696 105718 109697 5 105865 105674 105675 105867 109697 7 105866 105675 105676 105677 105868 109697 109698 5 105867 105677 105693 105694 109698 5 105693 105678 105679 105870 105692 6 105869 105679 105680 105871 105690 105692 6 105870 105680 105681 105688 105689 105690 6 105828 105836 105873 105874 109736 106019 6 105872 105836 105874 105875 105882 105883 6 105872 105873 105875 105876 109736 106041 6 105874 105873 105876 105877 105878 105882 6 105874 105875 105877 106048 106041 106042 6 105876 105875 105878 105879 106049 106048 6 105877 105875 105879 105880 105881 105882 6 105877 105878 105880 106049 106050 105888 6 105879 105878 105881 105400 105399 105888 6 105880 105878 105882 105884 105887 105400 6 105881 105878 105875 105873 105883 105884 6 105882 105873 105836 105884 105885 105837 6 105882 105883 105885 105811 105881 105887 6 105884 105883 105837 105811 105810 105886 5 105810 105885 105837 105838 105809 5 105881 105884 105811 105402 105400 6 105880 105399 105889 106053 106050 105879 6 105888 105399 105397 105890 105891 106053 6 105889 105397 105891 105892 105893 105396 6 105889 105890 105892 106056 106053 106057 6 105891 105890 105893 106057 106058 106059 6 105892 105890 105396 105894 105895 106059 6 105893 105396 105895 105896 105899 105395 6 105893 105894 105896 105897 106059 106061 6 105895 105894 105897 105898 104889 105899 6 105895 105896 105898 105900 106061 106062 6 105897 105896 104889 104890 105900 105901 7 104889 105896 105894 105395 105393 105372 104888 6 105897 105898 105901 106065 106062 106066 6 105900 105898 104890 104892 105902 106066 6 105901 104892 105903 105904 105905 106066 6 105902 104892 105904 105911 105912 104893 6 105902 105903 105905 105906 105907 105911 6 105902 105904 105906 106066 106070 106067 7 105905 105904 105907 105908 106075 106072 106070 6 105906 105904 105908 105909 105910 105911 5 105906 105907 105909 105934 106075 7 105908 105907 105910 105932 105929 105933 105934 6 105909 105907 105911 105932 109752 105915 6 105910 105907 105904 105903 105912 105915 6 105911 105903 104893 105913 105914 105915 6 105912 104893 104894 104896 104899 105914 6 105913 104899 105912 105915 105916 105917 6 105912 105914 105916 105911 109752 105910 6 105915 105914 105917 109752 109755 109758 6 105916 105914 104899 104900 105918 109758 7 105917 104900 104902 103671 103951 105919 109758 6 105918 103951 103949 105920 109755 109758 5 105919 103949 103948 105921 109755 6 105920 103948 105922 105930 105931 109755 6 105921 103948 103946 103962 105923 105930 6 105922 103962 103963 105924 105925 105930 6 105923 103963 103965 105925 105926 105942 6 105923 105924 105926 105927 105929 105930 6 105925 105924 105927 105928 105941 105942 5 105925 105926 105928 105929 105933 7 105927 105926 105935 105933 105936 105940 105941 7 105925 105927 105930 105931 105932 105909 105933 6 105925 105929 105931 105923 105922 105921 6 105930 105929 105921 105932 109752 109755 5 105931 105929 105909 105910 109752 6 105909 105929 105934 105935 105928 105927 6 105909 105933 105935 106074 106075 105908 6 105934 105933 105928 105936 105937 106074 6 105935 105928 105937 105938 105939 105940 5 105935 105936 105938 106074 106076 6 105937 105936 105939 106076 106077 106086 6 105938 105936 105940 106087 106086 106091 7 105939 105936 105928 105941 105944 106091 105946 5 105940 105928 105926 105942 105944 6 105941 105926 105924 103965 105943 105944 7 105942 103965 103966 105944 105945 103135 105947 6 105942 105943 105941 105940 105945 105946 5 105944 105943 105946 103134 103135 6 105944 105945 103134 106091 105940 103136 6 103135 105943 102093 102092 105948 103966 6 102092 105947 103966 103967 102488 102489 6 105754 105756 105950 105752 105751 106121 6 105949 105756 105951 106166 106120 106121 6 105950 105756 105757 105952 106166 106164 6 105951 105757 105759 105953 105954 106164 6 105952 105759 105954 105955 105956 105957 6 105952 105953 105955 106162 106161 106164 6 105954 105953 105956 105960 105967 106162 6 105955 105953 105957 105958 105959 105960 6 105956 105953 105759 105760 105763 105958 6 105957 105763 105956 105959 105963 105988 6 105956 105958 105960 105961 105962 105963 6 105956 105959 105961 105964 105967 105955 6 105960 105959 105962 105964 105965 105982 6 105961 105959 105963 105983 105982 105984 6 105962 105959 105958 105987 105984 105988 6 105960 105961 105965 105966 105967 105968 6 105964 105961 105966 105982 105980 105971 6 105964 105965 105968 105969 105970 105971 6 105960 105964 105955 105968 106163 106162 7 105967 105964 105966 105969 106156 106157 106163 6 105968 105966 105970 106447 106445 106156 6 105969 105966 105971 105972 106447 106448 6 105970 105966 105972 105973 105965 105980 6 105970 105971 105973 105974 105975 106448 6 105972 105971 105974 105978 105979 105980 6 105972 105973 105975 105976 105977 105978 6 105972 105974 105976 106448 106449 106450 6 105975 105974 105977 106450 106608 106609 6 105976 105974 105978 106609 106612 106613 6 105977 105974 105973 105979 106613 106614 6 105978 105973 105980 105981 106640 106614 6 105979 105973 105981 105982 105965 105971 6 105979 105980 105982 105983 106640 106641 6 105981 105980 105983 105962 105961 105965 6 105981 105982 105962 105984 105985 106641 6 105983 105962 105985 105986 105987 105963 6 105983 105984 105986 106643 106641 106168 6 105985 105984 105987 105994 106167 106168 6 105986 105984 105963 105988 105989 105994 6 105987 105963 105958 105989 105764 105763 6 105987 105988 105764 105990 105993 105994 6 105989 105764 105765 105991 105992 105993 5 105990 105765 105992 105777 105776 6 105990 105991 105777 105993 105783 105782 7 105990 105992 105783 105989 105994 105995 105996 6 105989 105993 105995 105986 105987 106167 6 105994 105993 105996 105997 105998 106167 5 105995 105993 105783 105784 105997 5 105995 105996 105998 105784 105786 7 105995 105997 105786 105999 106000 106169 106167 6 105998 105786 106000 106001 106002 105787 5 105998 105999 106001 106169 106170 6 106000 105999 106002 106170 106171 106005 6 106001 105999 105787 106003 106004 106005 6 106002 105787 106004 106008 106009 105788 6 106002 106003 106005 106006 106007 106008 6 106002 106004 106006 106171 106001 106172 6 106005 106004 106007 106010 106172 106173 6 106006 106004 106008 106010 106011 106015 6 106007 106004 106003 106009 106017 106015 6 106008 106003 105788 106198 106017 106199 6 106006 106007 106011 106012 106179 106173 6 106010 106007 106012 106013 106014 106015 6 106010 106011 106013 106180 106179 106186 6 106012 106011 106014 106190 106187 106186 6 106013 106011 106015 106016 106190 106191 6 106014 106011 106016 106017 106008 106007 6 106014 106015 106017 106191 106194 106195 6 106016 106015 106008 106198 106195 106009 6 105843 105844 105845 106937 106935 106940 6 105827 105828 106020 109736 106038 105872 6 105827 106019 106021 106022 106023 106038 6 105827 106020 106022 106215 105825 106222 6 106021 106020 106023 106024 106025 106222 6 106022 106020 106024 106037 106028 106038 6 106022 106023 106025 106026 106027 106028 6 106022 106024 106026 106222 106225 106223 6 106025 106024 106027 106225 106226 106032 6 106026 106024 106028 106029 106031 106032 6 106027 106024 106029 106030 106037 106023 6 106027 106028 106030 106031 106033 106034 6 106029 106028 106034 106035 106036 106037 6 106027 106029 106032 106033 106247 106239 6 106027 106031 106226 106026 106227 106239 6 106031 106029 106034 106247 106246 106248 6 106033 106029 106030 106035 106248 106249 6 106034 106030 106036 106249 106263 106264 6 106035 106030 106037 106039 106040 106264 6 106036 106030 106028 106023 106038 106039 6 106037 106023 106039 109736 106019 106020 6 106037 106038 106036 106040 106041 109736 7 106036 106039 106041 106042 106043 106265 106264 6 106040 106039 106042 109736 105874 105876 6 106040 106041 106043 106044 106048 105876 5 106040 106042 106044 106045 106265 6 106043 106042 106045 106046 106047 106048 7 106043 106044 106046 106262 106265 106261 106266 6 106045 106044 106047 106269 106266 106280 6 106046 106044 106048 106049 106051 106280 6 106047 106044 106042 106049 105877 105876 6 106047 106048 105877 105879 106050 106051 6 106049 105879 106051 106052 106053 105888 6 106049 106050 106052 106054 106280 106047 6 106051 106050 106053 106054 106055 106056 6 106052 106050 105888 105889 106056 105891 7 106051 106052 106055 106279 106280 106278 106281 6 106054 106052 106056 106283 106281 106284 6 106055 106052 106053 105891 106057 106284 6 106056 105891 105892 106058 106060 106284 6 106057 105892 106059 106060 106287 106288 6 106058 105892 105893 105895 106061 106288 6 106057 106058 106284 106285 106286 106287 6 106059 105895 105897 106062 106063 106288 6 106061 105897 106063 106064 106065 105900 7 106061 106062 106064 106288 106291 106289 106292 5 106063 106062 106065 106292 106068 6 106064 106062 105900 106066 106067 106068 6 106065 105900 105901 105902 105905 106067 6 106065 106066 106068 106069 106070 105905 7 106065 106067 106069 106292 106064 106293 106294 5 106068 106067 106070 106071 106294 6 106069 106067 105905 106071 106072 105906 7 106069 106070 106072 106073 106296 106294 106297 6 106071 106070 106073 106074 106075 105906 6 106071 106072 106074 106297 106078 106076 7 106073 106072 106075 105934 105935 105937 106076 5 106074 106072 105934 105908 105906 6 106074 105937 105938 106077 106078 106073 6 106076 105938 106078 106079 106086 106083 6 106076 106077 106079 106080 106297 106073 6 106078 106077 106080 106081 106082 106083 6 106078 106079 106081 106297 106298 106301 6 106080 106079 106082 106301 106302 106314 6 106081 106079 106083 106084 106313 106314 6 106082 106079 106084 106085 106086 106077 7 106082 106083 106085 106088 106313 106315 106318 6 106084 106083 106086 106087 106088 106089 6 106085 106083 106087 105939 105938 106077 6 106085 106086 105939 106089 106090 106091 6 106084 106085 106089 106094 103769 106318 7 106088 106085 106087 106090 103137 106092 106094 5 106089 106087 106091 103136 103137 6 106090 106087 105939 105940 105946 103136 6 106089 103137 103138 106093 103768 106094 7 106092 103138 103768 103766 102085 102084 109776 5 106092 103768 103769 106088 106089 6 105724 105725 106096 106383 109702 109703 6 106095 105725 106097 106098 106383 106384 5 106096 105725 105726 105730 106098 7 106096 106097 105730 106099 106384 105856 105855 5 106098 105730 105731 106100 105855 7 106099 105731 106101 106102 106103 105855 105853 5 106100 105731 105732 105733 106102 7 106101 105733 106100 106103 106104 106105 105735 6 106100 106102 106104 105853 105852 105851 6 106103 106102 106105 105851 106385 106386 5 106104 106102 105735 106106 106386 7 106105 105735 105736 106107 106386 106387 106109 6 106106 105736 105739 105741 106108 106109 6 106107 105741 106109 106110 106111 105743 6 106107 106108 106110 106387 106106 106388 6 106109 106108 106111 106388 106389 106390 6 106110 106108 105743 106112 106393 106390 6 106111 105743 105744 106113 106115 106393 6 106112 105744 106114 106115 106116 106117 6 106113 105744 106120 106117 106121 105745 6 106112 106113 106116 106393 109737 109738 6 106115 106113 106117 106118 106122 109738 6 106116 106113 106118 106119 106120 106114 6 106116 106117 106119 106122 106123 106165 5 106118 106117 106120 106166 106165 6 106119 106117 106114 106121 106166 105950 7 106120 106114 105745 105750 105751 105949 105950 6 106116 106118 106123 106124 106131 109738 6 106122 106118 106124 106125 106165 106160 6 106122 106123 106125 106126 106127 106131 6 106124 106123 106126 106152 106160 106158 6 106124 106125 106127 106128 106151 106152 6 106124 106126 106128 106129 106130 106131 6 106127 106126 106129 106150 106149 106151 6 106127 106128 106130 106150 106137 106134 6 106127 106129 106131 106132 106133 106134 6 106127 106130 106132 109738 106122 106124 6 106131 106130 106133 106398 109737 109738 6 106132 106130 106134 106135 106397 106398 6 106133 106130 106135 106136 106137 106129 6 106133 106134 106136 106397 106399 106400 6 106135 106134 106137 106138 106400 106401 6 106136 106134 106138 106139 106150 106129 6 106136 106137 106139 106140 106401 106402 6 106138 106137 106140 106141 106148 106150 6 106138 106139 106141 106142 106402 106403 6 106140 106139 106142 106143 106144 106148 6 106140 106141 106143 106403 106404 106405 6 106142 106141 106144 106145 106405 106436 6 106143 106141 106145 106146 106147 106148 6 106143 106144 106146 106437 106436 106438 6 106145 106144 106147 106438 106439 106440 6 106146 106144 106148 106149 106440 106441 6 106147 106144 106141 106139 106149 106150 6 106147 106148 106150 106128 106151 106441 6 106149 106148 106139 106137 106129 106128 6 106149 106128 106126 106152 106153 106441 6 106151 106126 106125 106153 106154 106158 6 106151 106152 106154 106155 106441 106442 6 106153 106152 106155 106156 106157 106158 6 106153 106154 106156 106444 106442 106445 6 106155 106154 106157 105969 106445 105968 6 106156 106154 106158 106159 105968 106163 6 106157 106154 106152 106159 106160 106125 6 106157 106158 106160 106161 106162 106163 6 106159 106158 106125 106161 106123 106165 6 106159 106160 106162 105954 106164 106165 6 106159 106161 106163 105967 105955 105954 5 106159 106162 105967 106157 105968 6 105954 106161 106165 106166 105951 105952 7 106164 106161 106166 106119 106118 106123 106160 6 106164 106165 106119 106120 105950 105951 6 105994 105995 105986 106168 106169 105998 6 105986 106167 106169 106643 105985 109783 6 106168 106167 105998 106000 106170 109783 7 106169 106000 106001 106171 106789 109783 109782 7 106170 106001 106005 106172 106788 106786 106789 6 106171 106005 106006 106173 106174 106788 6 106172 106006 106174 106175 106010 106179 6 106172 106173 106175 106176 106784 106788 6 106174 106173 106176 106177 106178 106179 6 106174 106175 106177 106782 106781 106784 6 106176 106175 106178 109796 106782 109797 6 106177 106175 106179 106180 106181 109796 6 106178 106175 106180 106012 106010 106173 6 106178 106179 106181 106182 106186 106012 6 106178 106180 106182 106183 109796 109799 6 106181 106180 106183 106184 106185 106186 6 106181 106182 106184 106362 106645 109799 6 106183 106182 106185 106362 106363 106367 6 106184 106182 106186 106187 106188 106367 6 106185 106182 106180 106187 106012 106013 6 106185 106186 106188 106189 106190 106013 6 106185 106187 106189 106367 106368 106369 6 106188 106187 106190 106369 106372 106192 6 106189 106187 106013 106014 106191 106192 6 106190 106014 106016 106192 106193 106194 6 106190 106191 106193 106372 106189 106373 6 106192 106191 106194 106382 106373 106203 6 106193 106191 106016 106195 106196 106203 6 106194 106016 106196 106197 106198 106017 6 106194 106195 106197 106200 106201 106203 6 106196 106195 106198 105792 105793 106200 6 106197 106195 106017 106009 106199 105792 6 106198 106009 105792 105790 105789 105788 6 106197 105793 106196 106201 106202 106221 6 106196 106200 106202 106203 106204 106205 6 106201 106200 106205 106206 106220 106221 6 106196 106201 106204 106382 106193 106194 6 106203 106201 106205 106382 106459 106381 6 106204 106201 106202 106206 106207 106459 6 106205 106202 106207 106208 106209 106220 6 106205 106206 106208 106210 106211 106459 6 106207 106206 106209 106210 106214 106217 6 106208 106206 105802 106217 106218 106220 6 106207 106208 106211 106212 106213 106214 6 106207 106210 106212 106456 106458 106459 7 106211 106210 106213 106223 106224 106454 106456 5 106212 106210 106214 106215 106223 6 106213 106210 106208 106215 106216 106217 7 106213 106214 106216 105825 106021 106222 106223 5 106215 106214 106217 105824 105825 7 106216 106214 105824 105803 105802 106209 106208 6 105802 106209 105799 105797 106219 106220 6 105797 106218 106220 106221 105794 105795 6 106219 106218 106209 106206 106202 106221 6 106219 106220 106202 106200 105793 105794 5 106215 106021 106022 106025 106223 7 106215 106222 106213 106212 106224 106225 106025 7 106212 106223 106225 106454 106231 106226 106228 5 106224 106223 106025 106026 106226 6 106225 106026 106032 106227 106228 106224 6 106226 106032 106228 106229 106238 106239 6 106226 106227 106229 106230 106231 106224 6 106228 106227 106230 106237 106234 106238 6 106228 106229 106231 106232 106233 106234 6 106228 106230 106232 106454 106224 106455 6 106231 106230 106233 106455 106460 106461 6 106232 106230 106234 106235 106461 106462 6 106233 106230 106235 106236 106237 106229 6 106233 106234 106236 106462 106463 106471 6 106235 106234 106237 106473 106471 106476 6 106236 106234 106229 106238 106476 106241 6 106237 106229 106227 106239 106240 106241 6 106238 106227 106240 106247 106031 106032 6 106238 106239 106241 106242 106243 106247 6 106238 106240 106242 106476 106237 106477 6 106241 106240 106243 106244 106477 106479 6 106242 106240 106244 106245 106246 106247 6 106242 106243 106245 106481 106479 106482 6 106244 106243 106246 106482 106253 106251 6 106245 106243 106247 106033 106248 106251 6 106246 106243 106240 106239 106031 106033 6 106246 106033 106034 106249 106250 106251 6 106248 106034 106035 106250 106263 106255 6 106248 106249 106251 106252 106254 106255 6 106248 106250 106252 106253 106245 106246 6 106251 106250 106253 106254 106484 106485 6 106251 106252 106482 106245 106483 106484 6 106252 106250 106255 106256 106257 106485 6 106254 106250 106256 106263 106260 106249 6 106254 106255 106257 106258 106259 106260 6 106254 106256 106258 106485 106493 106494 6 106257 106256 106259 106494 106495 106496 7 106258 106256 106260 106261 106496 106273 106267 6 106259 106256 106261 106262 106263 106255 6 106259 106260 106262 106045 106266 106267 6 106261 106260 106263 106264 106265 106045 6 106262 106260 106264 106255 106249 106035 6 106262 106263 106265 106035 106040 106036 5 106262 106264 106045 106043 106040 6 106045 106261 106267 106268 106269 106046 6 106261 106266 106268 106272 106273 106259 6 106267 106266 106269 106270 106271 106272 6 106268 106266 106046 106270 106279 106280 6 106268 106269 106271 106277 106278 106279 6 106268 106270 106272 106275 106276 106277 6 106268 106271 106267 106273 106274 106275 6 106267 106272 106274 106496 106259 106497 6 106273 106272 106275 106500 106497 106501 6 106274 106272 106271 106276 106501 106502 6 106275 106271 106277 106502 106503 106504 6 106276 106271 106270 106278 106504 106505 7 106277 106270 106279 106054 106281 106282 106505 5 106278 106270 106269 106280 106054 6 106279 106269 106046 106054 106051 106047 5 106278 106054 106282 106283 106055 6 106278 106281 106283 106506 106505 106507 6 106282 106281 106055 106284 106507 106285 6 106283 106055 106056 106057 106060 106285 6 106284 106060 106286 106507 106283 106508 7 106285 106060 106287 106508 106328 106511 106290 6 106286 106060 106058 106288 106289 106290 6 106287 106058 106059 106061 106063 106289 5 106287 106288 106290 106291 106063 5 106287 106289 106291 106328 106286 7 106290 106289 106063 106292 106326 106327 106328 6 106291 106063 106064 106068 106293 106326 6 106292 106068 106294 106295 106325 106326 6 106293 106068 106069 106295 106296 106071 6 106293 106294 106296 106299 106324 106325 6 106295 106294 106071 106297 106298 106299 6 106296 106071 106073 106078 106080 106298 6 106297 106080 106296 106299 106300 106301 5 106296 106298 106300 106324 106295 6 106299 106298 106301 106303 106323 106324 6 106300 106298 106080 106081 106302 106303 6 106301 106081 106303 106304 106308 106314 6 106301 106302 106304 106305 106323 106300 6 106303 106302 106305 106306 106307 106308 6 106303 106304 106306 106323 106337 106338 6 106305 106304 106307 106338 106341 106342 6 106306 106304 106308 106309 106342 106343 6 106307 106304 106302 106309 106310 106314 6 106307 106308 106310 106311 106343 106346 6 106309 106308 106311 106312 106313 106314 6 106309 106310 106312 106321 106322 106346 6 106311 106310 106313 106315 106316 106321 6 106312 106310 106314 106082 106084 106315 6 106313 106310 106082 106081 106302 106308 6 106313 106084 106312 106316 106317 106318 6 106312 106315 106317 106319 106320 106321 6 106316 106315 106318 103769 101571 106319 5 106317 106315 103769 106084 106088 5 106317 101571 101572 106320 106316 7 106319 101572 101573 106316 106321 106322 106360 5 106316 106320 106322 106312 106311 7 106321 106320 106311 106347 106346 106348 106360 6 106303 106305 106300 106324 106335 106337 7 106300 106323 106299 106295 106325 106336 106335 6 106295 106324 106293 106326 106336 106331 6 106293 106325 106292 106291 106327 106331 6 106291 106326 106328 106329 106330 106331 6 106291 106327 106329 106511 106286 106290 6 106328 106327 106330 106510 106511 106519 7 106329 106327 106331 106332 106333 106519 106518 6 106330 106327 106332 106336 106325 106326 6 106330 106331 106333 106334 106335 106336 5 106330 106332 106334 106518 106520 6 106333 106332 106335 106520 106528 106529 7 106334 106332 106336 106324 106323 106337 106529 5 106335 106332 106331 106325 106324 6 106335 106323 106305 106338 106339 106529 6 106337 106305 106306 106339 106340 106341 6 106337 106338 106340 106530 106527 106529 5 106339 106338 106341 106545 106530 6 106340 106338 106306 106342 106546 106545 6 106341 106306 106307 106343 106344 106546 6 106342 106307 106344 106345 106346 106309 6 106342 106343 106345 106546 106543 106547 6 106344 106343 106346 106347 106549 106547 6 106345 106343 106347 106322 106311 106309 6 106345 106346 106322 106348 106349 106549 6 106347 106322 106349 106350 106359 106360 6 106347 106348 106350 106351 106550 106549 6 106349 106348 106351 106352 106353 106359 6 106349 106350 106352 106552 106550 106553 6 106351 106350 106353 106354 106355 106553 6 106352 106350 106354 101589 102476 106359 7 106352 106353 106355 106356 101594 101590 101589 6 106352 106354 106356 106357 106553 106554 5 106355 106354 106357 106358 101594 6 106355 106356 106358 106554 106555 103971 6 106357 106356 101594 103971 103970 101595 6 102476 106353 106350 106348 106360 106361 6 106359 106348 106361 101573 106320 106322 5 106359 106360 101573 102475 102476 6 106183 106184 106363 106364 106644 106645 6 106362 106184 106364 106365 106366 106367 6 106362 106363 106365 106644 106648 106649 6 106364 106363 106366 109727 109673 106649 6 106365 106363 106367 109727 109728 106368 6 106366 106363 106184 106185 106188 106368 6 106367 106188 106369 106370 109728 106366 6 106368 106188 106189 106370 106371 106372 6 106368 106369 106371 109728 109729 109730 6 106370 106369 106372 106374 106375 109730 6 106371 106369 106189 106192 106373 106374 6 106372 106192 106374 106382 106380 106193 6 106372 106373 106371 106375 106376 106380 6 106371 106374 106376 106377 106467 109730 6 106375 106374 106377 106378 106379 106380 5 106375 106376 106378 109693 106467 7 106377 106376 106379 106457 106455 106460 109693 6 106378 106376 106380 106381 106457 106458 6 106379 106376 106381 106382 106373 106374 6 106379 106380 106382 106459 106458 106204 6 106381 106380 106373 106193 106203 106204 7 106095 106096 106384 109703 105861 105860 105858 5 106383 106096 106098 105856 105858 6 105851 106104 106386 106945 105850 106946 7 106385 106104 106105 106106 106387 106946 106947 5 106386 106106 106109 106388 106947 6 106387 106109 106110 106389 106947 106948 6 106388 106110 106390 106391 106948 106949 6 106389 106110 106391 106392 106393 106111 6 106389 106390 106392 106394 106395 106949 6 106391 106390 106393 106394 109737 106398 6 106392 106390 106111 106112 106115 109737 6 106391 106392 106395 106396 106397 106398 6 106391 106394 106396 106949 106950 106951 6 106395 106394 106397 106951 106952 106399 6 106396 106394 106398 106133 106135 106399 6 106397 106394 106133 106132 109737 106392 6 106397 106135 106400 106952 106396 106953 6 106399 106135 106136 106401 106953 106954 6 106400 106136 106138 106402 106954 106960 6 106401 106138 106140 106403 106960 106410 6 106402 106140 106142 106404 106408 106410 6 106403 106142 106405 106406 106407 106408 6 106404 106142 106143 106406 106436 106434 6 106404 106405 106407 106431 106429 106434 6 106404 106406 106408 106409 106428 106429 6 106404 106407 106409 106403 106410 106411 6 106408 106407 106411 106412 106413 106428 6 106403 106408 106411 106959 106960 106402 6 106410 106408 106409 106412 106959 106961 6 106411 106409 106413 106414 106963 106961 6 106412 106409 106414 106415 106427 106428 6 106412 106413 106415 106416 106963 106964 6 106414 106413 106416 106417 106418 106427 6 106414 106415 106417 106558 106559 106964 6 106416 106415 106418 106419 106558 106565 6 106417 106415 106419 106420 106427 106424 6 106417 106418 106420 106421 106573 106565 6 106419 106418 106421 106422 106423 106424 6 106419 106420 106422 106573 106572 106574 6 106421 106420 106423 106580 106577 106574 6 106422 106420 106424 106425 106580 106581 6 106423 106420 106425 106426 106427 106418 6 106423 106424 106426 106584 106581 106430 6 106425 106424 106427 106428 106429 106430 6 106426 106424 106418 106415 106413 106428 6 106427 106413 106409 106407 106426 106429 6 106426 106428 106407 106430 106431 106406 6 106426 106429 106431 106432 106584 106425 6 106430 106429 106406 106432 106433 106434 6 106430 106431 106433 106584 106585 106586 6 106432 106431 106434 106435 106589 106586 6 106433 106431 106435 106436 106405 106406 6 106433 106434 106436 106437 106589 106590 6 106435 106434 106405 106437 106145 106143 6 106435 106436 106145 106438 106590 106591 6 106437 106145 106146 106439 106591 106592 6 106438 106146 106440 106595 106592 106443 6 106439 106146 106147 106441 106442 106443 6 106440 106147 106149 106151 106153 106442 6 106441 106153 106440 106443 106444 106155 6 106440 106442 106444 106595 106439 106453 6 106443 106442 106155 106445 106446 106453 6 106444 106155 106446 106447 105969 106156 6 106444 106445 106447 106449 106452 106453 6 106446 106445 105969 105970 106448 106449 5 106447 105970 105972 105975 106449 7 106448 105975 106447 106450 106451 106452 106446 7 106449 105975 105976 106451 106607 106598 106608 6 106449 106450 106452 106596 106597 106598 5 106449 106451 106446 106453 106596 6 106446 106452 106595 106443 106444 106596 5 106212 106224 106231 106455 106456 7 106454 106231 106456 106457 106378 106232 106460 6 106454 106455 106457 106458 106211 106212 5 106456 106455 106378 106379 106458 6 106457 106379 106456 106211 106459 106381 6 106211 106458 106207 106381 106204 106205 5 106455 106232 106461 109693 106378 6 106460 106232 106233 106462 106465 109693 6 106461 106233 106235 106463 106464 106465 6 106462 106235 106464 106469 106470 106471 6 106462 106463 106465 106466 106468 106469 6 106462 106464 106461 106466 106467 109693 6 106465 106464 106467 106468 109731 109732 7 106465 106466 109693 106377 106375 109730 109731 6 106466 106464 106469 107509 107510 109732 7 106468 106464 106463 106470 107507 107509 107506 6 106469 106463 106471 106472 107506 107505 6 106470 106463 106235 106472 106473 106236 6 106470 106471 106473 106474 107504 107505 6 106472 106471 106236 106474 106475 106476 7 106472 106473 106475 107503 107504 109692 109780 6 106474 106473 106476 106477 106478 109692 6 106475 106473 106236 106237 106241 106477 6 106476 106241 106242 106475 106478 106479 7 106475 106477 106479 106480 109692 109778 109779 6 106478 106477 106242 106480 106481 106244 6 106478 106479 106481 106487 109705 109778 6 106480 106479 106244 106482 106486 106487 6 106481 106244 106245 106253 106483 106486 5 106482 106253 106484 106486 106489 7 106483 106253 106252 106485 106489 106490 106491 7 106484 106252 106254 106257 106491 106492 106493 6 106482 106483 106481 106487 106488 106489 5 106481 106486 106488 109705 106480 7 106487 106486 106489 109704 102194 102195 109705 6 106488 106486 106483 106484 106490 109704 6 106489 106484 106491 102251 102252 109704 6 106490 106484 106485 106492 102251 109706 6 106491 106485 106493 109706 103335 109707 5 106492 106485 106257 106494 109707 6 106493 106257 106258 106495 109707 106499 6 106494 106258 106496 106497 106498 106499 5 106495 106258 106259 106273 106497 6 106496 106273 106495 106498 106500 106274 6 106495 106497 106499 102511 102512 106500 7 106495 106498 102511 103334 109707 103881 106494 6 102512 106498 106497 106274 106501 109710 6 106500 106274 106275 106502 109709 109710 6 106501 106275 106276 106503 109708 109709 6 106502 106276 106504 106512 109708 109711 6 106503 106276 106277 106505 106506 106512 5 106504 106277 106506 106282 106278 7 106504 106505 106282 106507 106512 106513 106509 6 106506 106282 106283 106285 106508 106509 6 106507 106285 106286 106509 106510 106511 6 106507 106508 106510 106513 106506 106514 7 106509 106508 106511 106329 106514 106515 106519 5 106510 106508 106329 106328 106286 6 106503 106504 106506 106513 109711 109717 5 106512 106506 106509 106514 109717 7 106513 106509 106510 106515 106516 109717 109718 6 106514 106510 106516 106517 106518 106519 6 106514 106515 106517 109718 109719 106522 6 106516 106515 106518 106520 106521 106522 6 106517 106515 106519 106330 106333 106520 5 106518 106515 106510 106329 106330 7 106518 106333 106334 106517 106521 106525 106528 6 106517 106520 106522 106523 106524 106525 7 106517 106521 106523 102214 109719 106516 102213 5 106522 106521 106524 102213 103348 7 106523 106521 106525 106526 103348 103347 106532 6 106524 106521 106520 106526 106527 106528 6 106524 106525 106527 106530 106531 106532 6 106526 106525 106528 106530 106339 106529 5 106527 106525 106520 106334 106529 6 106528 106334 106335 106339 106527 106337 7 106526 106527 106531 106340 106545 106339 106534 6 106526 106530 106532 103863 106533 106534 5 106526 106531 103863 103347 106524 6 103863 106531 106534 106535 106536 106716 6 106533 106531 106535 106544 106545 106530 6 106533 106534 106536 106537 106544 106541 6 106533 106535 106537 106538 106715 106716 6 106536 106535 106538 106539 106540 106541 7 106536 106537 106539 106714 103887 103886 106715 6 106538 106537 106540 106714 106718 106719 6 106539 106537 106541 106542 106719 106708 6 106540 106537 106542 106543 106544 106535 6 106540 106541 106543 106547 106548 106708 6 106542 106541 106544 106546 106344 106547 6 106543 106541 106535 106534 106545 106546 6 106544 106534 106546 106341 106340 106530 6 106544 106545 106543 106341 106342 106344 6 106543 106344 106542 106548 106549 106345 6 106542 106547 106549 106550 106551 106708 6 106548 106547 106345 106347 106550 106349 6 106548 106549 106551 106552 106351 106349 6 106548 106550 106552 106705 106707 106708 6 106551 106550 106351 106553 106554 106705 5 106552 106351 106352 106355 106554 6 106553 106355 106357 106555 106552 106705 7 106554 106357 103971 106705 106706 109747 103491 6 103969 101597 101598 106557 104038 103968 6 106556 101598 104038 103764 100612 100611 6 106416 106417 106559 106560 106564 106565 6 106416 106558 106560 106561 106964 106965 6 106559 106558 106561 106562 106563 106564 6 106559 106560 106562 106965 106966 106967 6 106561 106560 106563 106985 106983 106967 6 106562 106560 106564 106985 106986 106567 6 106563 106560 106558 106565 106566 106567 6 106564 106558 106417 106566 106573 106419 6 106564 106565 106567 106568 106569 106573 6 106564 106566 106568 106986 106563 106987 6 106567 106566 106569 106570 106990 106987 6 106568 106566 106570 106571 106572 106573 6 106568 106569 106571 106997 106990 106998 6 106570 106569 106572 106575 107001 106998 6 106571 106569 106573 106421 106574 106575 6 106572 106569 106566 106565 106419 106421 6 106572 106421 106575 106576 106577 106422 6 106572 106574 106576 107003 107001 106571 6 106575 106574 106577 106578 107003 107004 6 106576 106574 106578 106579 106580 106422 6 106576 106577 106579 107004 107005 107006 6 106578 106577 106580 107006 107007 106582 6 106579 106577 106422 106423 106581 106582 6 106580 106423 106582 106583 106584 106425 6 106580 106581 106583 107007 106579 107008 6 106582 106581 106584 106720 107008 106585 6 106583 106581 106425 106430 106432 106585 6 106584 106432 106586 106587 106720 106583 6 106585 106432 106587 106588 106589 106433 6 106585 106586 106588 106720 106721 106728 6 106587 106586 106589 106728 106729 106730 6 106588 106586 106433 106435 106590 106730 6 106589 106435 106437 106591 106730 106731 6 106590 106437 106438 106592 106593 106731 6 106591 106438 106593 106594 106595 106439 6 106591 106592 106594 106731 106732 106733 7 106593 106592 106595 106600 106733 106597 106596 6 106594 106592 106439 106443 106453 106596 6 106595 106453 106452 106451 106597 106594 6 106596 106451 106598 106599 106600 106594 6 106597 106451 106599 106606 106607 106450 6 106597 106598 106600 106601 106602 106606 5 106597 106599 106601 106733 106594 6 106600 106599 106602 106603 106734 106733 6 106601 106599 106603 106604 106605 106606 7 106601 106602 106604 106734 106735 106736 106737 5 106603 106602 106605 106737 106738 7 106604 106602 106606 106738 106739 106748 106745 6 106605 106602 106599 106598 106607 106748 6 106606 106598 106450 106608 106747 106748 6 106607 106450 105976 106609 106610 106747 6 106608 105976 105977 106610 106611 106612 6 106608 106609 106611 106747 106746 106749 6 106610 106609 106612 106619 106620 106749 6 106611 106609 105977 106613 106616 106619 6 106612 105977 105978 106614 106615 106616 6 106613 105978 106615 106639 106640 105979 6 106613 106614 106616 106617 106638 106639 6 106613 106615 106617 106618 106619 106612 6 106616 106615 106618 106636 106637 106638 6 106616 106617 106619 106621 106622 106636 6 106616 106618 106612 106611 106620 106621 6 106611 106619 106621 106750 106749 106626 6 106620 106619 106618 106622 106623 106626 6 106621 106618 106623 106624 106635 106636 6 106621 106622 106624 106625 106626 106627 6 106623 106622 106625 106633 106634 106635 6 106623 106624 106627 106628 106632 106633 6 106621 106623 106627 106750 106620 106751 6 106626 106623 106625 106628 106629 106751 6 106627 106625 106629 106630 106631 106632 6 106627 106628 106630 106756 106753 106751 6 106629 106628 106631 106756 106757 106758 6 106630 106628 106632 106758 106766 106767 6 106631 106628 106625 106633 106767 106768 6 106632 106625 106624 106634 106768 106769 6 106633 106624 106635 106769 106770 106771 6 106634 106624 106622 106636 109785 106771 6 106635 106622 106618 106617 106637 109785 6 106636 106617 106638 106785 106783 109785 6 106637 106617 106615 106639 109777 106785 6 106638 106615 106614 106640 109777 106642 6 106639 106614 105979 105981 106641 106642 6 106640 105981 105983 106642 106643 105985 7 106640 106641 106643 109777 106639 106787 109782 6 106642 106641 105985 106168 109782 109783 6 106362 106364 106645 106646 106647 106648 6 106362 106644 106183 106646 109724 109799 6 106645 106644 106647 109723 109724 106655 6 106646 106644 106648 106652 106654 106655 6 106647 106644 106364 106649 106650 106652 6 106648 106364 106650 106651 109673 106365 6 106648 106649 106651 106652 106653 109670 6 106650 106649 109670 109671 109672 109673 6 106648 106650 106653 106647 106654 103173 6 106652 106650 109670 109691 103172 103173 6 106647 106652 103173 106655 103450 103175 6 106647 106654 103450 106656 109723 106646 6 106655 103450 106657 106658 109721 109723 6 106656 103450 106658 103179 106659 106667 6 106656 106657 106667 106668 106669 109721 6 106657 103179 106660 106663 106664 106667 6 106659 103179 103178 106661 106662 106663 6 106660 103178 103180 102858 102859 106662 5 106660 106661 106663 106666 102859 6 106660 106662 106659 106664 106665 106666 6 106659 106663 106665 106667 106668 106672 7 106664 106663 106666 106672 106673 104564 104563 6 106665 106663 106662 104563 106674 102859 5 106659 106664 106668 106658 106657 7 106667 106664 106658 106669 106670 106671 106672 6 106658 106668 106670 106774 106775 109721 6 106669 106668 106671 106773 106772 106774 6 106670 106668 106672 106673 106790 106773 5 106671 106668 106664 106665 106673 5 106672 106665 104564 106671 106790 6 104563 106666 104561 106675 102860 102859 6 104561 106674 102860 106676 104560 109792 6 106675 102860 102853 102854 106677 109792 6 106676 102854 106678 106679 106681 109792 5 106677 102854 106679 106680 102855 6 106677 106678 106680 106681 106682 106683 6 106679 106678 106685 106683 106686 102855 6 106677 106679 106682 109750 109761 109792 6 106681 106679 106683 105156 105157 109750 6 106682 106679 105156 106684 106685 106680 6 105156 106683 106685 106692 106693 106694 6 106684 106683 106680 106686 106687 106692 6 106685 106680 106687 106688 106689 102855 6 106685 106686 106688 106692 106696 106699 6 106687 106686 106689 106690 106699 106700 6 106688 106686 106690 106691 102856 102855 6 106688 106689 106691 106700 106702 102551 5 106690 106689 102856 102550 102551 6 106685 106687 106684 106693 106695 106696 6 106684 106692 106694 104523 104522 106695 5 106684 106693 104523 104532 105156 6 104522 106693 106692 106696 106697 106704 6 106695 106692 106687 106697 106698 106699 7 106695 106696 106698 106703 103505 103506 106704 6 106697 106696 106699 106700 106701 106703 5 106698 106696 106687 106688 106700 7 106699 106688 106690 106698 106701 102222 106702 6 106698 106700 102222 100064 100065 106703 5 102222 106700 106690 102551 102221 6 106698 106701 100065 100066 106697 103505 5 106697 103506 103507 104522 106695 7 106552 106554 106555 106706 106551 106707 109749 6 106705 106555 109747 103502 109748 109749 6 106551 106705 106708 106709 106710 109749 7 106551 106707 106709 106719 106540 106548 106542 6 106708 106707 106710 106711 106718 106719 7 106709 106707 106711 106712 103503 109748 109749 7 106709 106710 106712 103117 103119 106713 106718 6 106711 106710 103503 103504 103116 103117 6 106711 103119 103121 103887 106714 106718 5 106713 103887 106538 106539 106718 6 106538 103886 106536 106716 103862 106717 5 106536 106715 106533 103863 103862 6 103862 106715 103861 103342 103885 103886 6 106714 106539 106713 106711 106709 106719 5 106718 106539 106540 106709 106708 6 106585 106587 106721 106722 107008 106583 6 106720 106587 106722 106723 106727 106728 6 106720 106721 106723 106724 107009 107008 6 106722 106721 106724 106725 106726 106727 6 106722 106723 106725 107009 107010 107011 6 106724 106723 106726 107022 107011 107023 6 106725 106723 106727 107023 107026 107027 6 106726 106723 106721 106728 107027 107030 6 106727 106721 106587 106588 106729 107030 6 106728 106588 106730 107030 107031 107032 6 106729 106588 106589 106590 106731 107032 6 106730 106590 106591 106593 106732 107032 6 106731 106593 106733 106734 107032 107033 6 106732 106593 106734 106601 106600 106594 6 106732 106733 106601 106603 106735 107033 6 106734 106603 106736 107033 107034 107035 6 106735 106603 106737 106740 107035 107036 5 106736 106603 106604 106738 106740 7 106737 106604 106605 106739 106740 106741 106742 6 106738 106605 106742 106743 106744 106745 6 106736 106737 106738 106741 107036 107037 6 106740 106738 106742 107037 107038 107039 6 106741 106738 106739 106743 107039 107040 7 106742 106739 106744 107040 107041 106754 107042 5 106743 106739 106745 106746 107042 6 106744 106739 106746 106747 106748 106605 7 106744 106745 106747 106610 106749 106750 107042 6 106746 106745 106748 106607 106608 106610 5 106747 106745 106607 106605 106606 5 106746 106610 106750 106620 106611 7 106746 106749 106620 106626 106751 106752 107042 6 106750 106626 106752 106753 106629 106627 5 106750 106751 106753 106754 107042 6 106752 106751 106754 106755 106756 106629 7 106752 106753 106755 107041 106743 107042 107141 5 106754 106753 106756 107141 106759 6 106755 106753 106629 106630 106757 106759 6 106756 106630 106758 106759 106760 106761 6 106757 106630 106631 106761 106762 106766 6 106756 106757 106760 107141 106755 107142 6 106759 106757 106761 107142 107143 107144 6 106760 106757 106758 106762 106763 107144 6 106761 106758 106763 104559 106764 106766 6 106761 106762 104559 104551 107144 104550 6 104559 106762 104558 104565 106765 106766 5 104565 106764 106766 106790 106767 6 106765 106764 106762 106758 106631 106767 6 106766 106631 106632 106768 106790 106765 6 106767 106632 106633 106769 106773 106790 6 106768 106633 106634 106770 106772 106773 6 106769 106634 106771 106772 106777 106778 6 106770 106634 106778 106779 106635 109785 6 106769 106770 106773 106670 106774 106777 6 106769 106772 106670 106671 106790 106768 6 106670 106772 106669 106775 106776 106777 6 106669 106774 106776 109721 109722 109798 7 106775 106774 106777 106778 106780 109797 109798 5 106776 106774 106772 106770 106778 6 106777 106770 106771 106779 106780 106776 6 106778 106771 106780 106781 106783 109785 6 106778 106779 106781 106782 106776 109797 6 106780 106779 106782 106176 106783 106784 5 106780 106781 106176 106177 109797 6 106781 106779 106784 106785 106637 109785 7 106781 106783 106176 106174 106785 106786 106788 7 106784 106783 106786 106787 109777 106638 106637 6 106784 106785 106787 106788 106171 106789 6 106786 106785 109777 106642 109782 106789 5 106784 106786 106171 106172 106174 5 106171 106786 106170 106787 109782 8 106671 106673 106773 104564 104565 106765 106768 106767 6 105418 105419 106792 107331 107332 107333 6 106791 105419 105420 105428 106793 107333 6 106792 105428 105429 106794 107333 107334 6 106793 105429 105430 106795 107334 107335 6 106794 105430 105432 105433 106796 107335 6 106795 105433 105434 106797 107335 107336 6 106796 105434 105435 106798 107336 107337 6 106797 105435 105436 106799 107337 107338 6 106798 105436 105437 106800 107338 107339 6 106799 105437 105438 106801 107339 107340 6 106800 105438 106802 107340 107341 107342 6 106801 105438 105439 105440 106803 107342 6 106802 105440 105441 106804 107342 107343 6 106803 105441 105442 106805 107343 107344 6 106804 105442 105444 106806 107344 107345 6 106805 105444 105445 106807 107345 107346 6 106806 105445 105446 106808 107346 107347 6 106807 105446 106809 107347 107348 107349 6 106808 105446 105447 106810 107349 106811 5 106809 105447 105217 105218 106811 6 106810 105218 105219 106812 107349 106809 5 106811 105219 106813 107349 107350 6 106812 105219 105220 106814 107350 107351 7 106813 105220 105221 105222 106815 107351 107352 5 106814 105222 106816 107352 107353 7 106815 105222 105223 105224 106817 107353 107354 5 106816 105224 106818 107354 107355 6 106817 105224 106819 107355 107356 107357 6 106818 105224 105225 105226 106820 107357 5 106819 105226 105227 106821 107357 6 106820 105227 106822 107357 107358 107359 7 106821 105227 105228 105229 106823 107359 107360 5 106822 105229 106824 106825 107360 5 106823 105229 106825 106826 105167 7 106823 106824 106826 106827 106828 107362 107360 5 106825 106824 105167 105168 106827 6 106826 105168 106825 106828 106829 106830 6 106825 106827 106829 107362 107363 107364 6 106828 106827 106830 107364 107365 107366 6 106829 106827 105168 105169 106831 107366 7 106830 105169 106832 107366 107367 107368 106834 5 106831 105169 106833 105238 106834 5 106832 105169 105238 105018 105023 6 106832 105238 105239 106835 107368 106831 6 106834 105239 105648 106836 107375 107368 7 106835 105648 106837 107375 107374 107376 107377 6 106836 105648 105649 105651 106838 107377 6 106837 105651 106839 107377 107378 107379 6 106838 105651 105652 106840 106841 107379 6 106839 105652 105653 105247 106841 105248 6 106839 106840 105248 106842 107379 107380 6 106841 105248 105249 106843 107380 107381 6 106842 105249 106844 107381 107382 107383 6 106843 105249 105028 105029 106845 107383 6 106844 105029 105030 106846 106847 107383 6 106845 105030 106847 106848 106849 105031 6 106845 106846 106848 107384 107383 107385 6 106847 106846 106849 107385 107386 107387 6 106848 106846 105031 105032 106850 107387 6 106849 105032 105033 105034 106851 107387 6 106850 105034 106852 107387 107388 106854 6 106851 105034 105035 105038 106853 106854 6 106852 105038 106854 106855 106856 105039 6 106852 106853 106855 107388 106851 107389 6 106854 106853 106856 106857 106859 107389 6 106855 106853 105039 106857 106858 105041 6 106855 106856 106858 106859 106860 106861 6 106857 106856 105041 106861 106862 106863 6 106855 106857 106860 107389 107390 107397 6 106859 106857 106861 107397 107398 107399 6 106860 106857 106858 106862 107399 107400 6 106861 106858 106863 106864 106865 107400 6 106862 106858 106864 105042 106879 105041 6 106862 106863 106865 106866 106879 106873 6 106862 106864 106866 106867 107400 107401 6 106865 106864 106867 106868 106872 106873 6 106865 106866 106868 106869 107401 107402 6 106867 106866 106869 106870 106871 106872 6 106867 106868 106870 107405 107402 107406 6 106869 106868 106871 107412 107406 107413 6 106870 106868 106872 107419 107416 107413 6 106871 106868 106866 106873 106874 107419 6 106872 106866 106874 106875 106864 106879 6 106872 106873 106875 106876 107419 107418 6 106874 106873 106876 106877 106878 106879 6 106874 106875 106877 106883 106884 107418 6 106876 106875 106878 106880 106882 106883 6 106877 106875 106879 106880 105043 105042 6 106878 106875 105042 106863 106864 106873 6 106877 106878 105043 105045 106881 106882 6 106880 105045 106882 106887 106888 106889 6 106880 106881 106877 106883 106886 106887 6 106877 106882 106876 106884 106885 106886 6 106876 106883 106885 107418 107420 107426 6 106884 106883 106886 107426 107427 107428 6 106885 106883 106882 106887 107428 107429 6 106886 106882 106881 106888 107429 107430 6 106887 106881 106889 106890 107430 107433 6 106888 106881 105045 106890 104645 104644 6 106888 106889 104645 104646 106891 107433 6 106890 104646 104647 106892 107433 106893 6 106891 104647 104253 104254 104730 106893 6 106892 104730 106894 107433 106891 107432 6 106893 104730 104731 106895 106897 107432 6 106894 104731 106896 106897 106898 106899 6 106895 104731 104732 106899 106900 106901 6 106894 106895 106898 107432 107431 107434 6 106897 106895 106899 107434 107435 107436 6 106898 106895 106896 106900 107436 107437 6 106899 106896 106901 107437 106904 106903 6 106900 106896 104732 104262 106902 106903 6 106901 104262 104263 104264 105231 106903 6 106902 105231 105458 106904 106900 106901 6 106903 105458 105459 106905 107437 106900 6 106904 105459 106906 107437 107438 107439 6 106905 105459 105460 106907 107439 107440 6 106906 105460 105461 106908 107262 107440 6 106907 105461 105462 106909 107262 107263 6 106908 105462 106910 107263 107264 106911 6 106909 105462 105463 105464 105465 106911 6 106910 105465 106912 107264 106909 107265 6 106911 105465 105466 106913 107265 107266 6 106912 105466 105467 106914 107266 107267 6 106913 105467 106915 107267 107268 107269 6 106914 105467 105468 106916 106917 107269 6 106915 105468 105469 105470 105471 106917 6 106915 106916 105471 106918 107269 107270 6 106917 105471 105472 106919 107270 107271 6 106918 105472 105473 106920 107271 107272 6 106919 105473 105474 105475 106921 107272 6 106920 105475 106922 107274 107272 107275 6 106921 105475 105476 106923 107275 107276 6 106922 105476 105477 106924 107276 107277 6 106923 105477 105478 106925 107277 107278 6 106924 105478 105479 106926 107278 107279 6 106925 105479 105480 105654 106927 107279 6 106926 105654 105655 106928 107281 107279 6 106927 105655 106929 107281 107282 107283 6 106928 105655 105656 105657 106930 107283 6 106929 105657 106931 107283 107284 107285 6 106930 105657 105658 105831 106932 107285 6 106931 105831 106933 107285 107286 107287 6 106932 105831 105832 105840 106934 107287 6 106933 105840 105841 106935 106936 107287 6 106934 105841 105843 106936 106937 106018 6 106934 106935 106937 106938 107287 107288 6 106936 106935 106018 106938 106939 106940 6 106936 106937 106939 107288 107289 107290 6 106938 106937 106940 107290 107291 106941 6 106939 106937 106018 105845 105847 106941 6 106940 105847 106942 106943 107291 106939 6 106941 105847 106943 106944 106945 105848 6 106941 106942 106944 107291 107292 107293 6 106943 106942 106945 107293 107294 107295 7 106944 106942 105848 105850 106385 106946 107295 6 106945 106385 106386 106947 107295 107296 6 106946 106386 106387 106388 106948 107296 6 106947 106388 106389 106949 107296 107297 7 106948 106389 106391 106395 106950 107297 107298 6 106949 106395 106951 107298 107300 107301 6 106950 106395 106396 106952 107043 107301 6 106951 106396 106399 106953 107043 107044 6 106952 106399 106400 106954 106955 107044 6 106953 106400 106401 106955 106956 106960 6 106953 106954 106956 106957 107044 107045 6 106955 106954 106957 106958 106959 106960 6 106955 106956 106958 107045 107048 107049 6 106957 106956 106959 106961 106962 107049 6 106958 106956 106960 106410 106411 106961 6 106959 106956 106954 106401 106402 106410 6 106959 106411 106958 106962 106963 106412 6 106958 106961 106963 107051 107049 107052 6 106962 106961 106412 106414 106964 107052 6 106963 106414 106416 106559 106965 107052 6 106964 106559 106561 106966 107052 106971 6 106965 106561 106967 106968 106970 106971 6 106966 106561 106968 106969 106562 106983 6 106966 106967 106969 106970 106974 106975 6 106968 106967 106981 106975 106982 106983 6 106966 106968 106971 106972 106973 106974 6 106966 106970 106972 107052 106965 107051 6 106971 106970 106973 107051 107050 107053 6 106972 106970 106974 107062 107053 107063 6 106973 106970 106968 106975 106976 107063 6 106974 106968 106976 106977 106981 106969 6 106974 106975 106977 106978 107063 107064 6 106976 106975 106978 106979 106980 106981 6 106976 106977 106979 107064 107065 107066 6 106978 106977 106980 107066 107067 107071 6 106979 106977 106981 107071 107072 107073 6 106980 106977 106975 106969 106982 107073 6 106981 106969 106983 106984 107073 107074 6 106982 106969 106984 106985 106562 106967 6 106982 106983 106985 107074 107075 107076 6 106984 106983 106562 106563 106986 107076 6 106985 106563 106567 106987 106988 107076 6 106986 106567 106988 106989 106990 106568 6 106986 106987 106989 106991 107076 107077 6 106988 106987 106990 106991 106992 106996 6 106989 106987 106996 106997 106570 106568 6 106988 106989 106992 106993 107077 107078 6 106991 106989 106993 106994 106995 106996 6 106991 106992 106994 107078 107081 107082 6 106993 106992 106995 107082 107085 107086 6 106994 106992 106996 107086 107087 107088 6 106995 106992 106989 106990 106997 107088 6 106996 106990 106570 106998 106999 107088 6 106997 106570 106999 107000 107001 106571 6 106997 106998 107000 107088 107089 107092 6 106999 106998 107001 107002 107092 107093 6 107000 106998 107002 107003 106575 106571 6 107000 107001 107003 107093 107094 107095 6 107002 107001 106575 106576 107004 107095 6 107003 106576 106578 107005 107095 107096 6 107004 106578 107006 107096 107097 107098 6 107005 106578 106579 107007 107012 107098 6 107006 106579 106582 107008 107009 107012 6 107007 106582 107009 106722 106720 106583 6 107007 107008 106722 106724 107010 107012 6 107009 106724 107011 107012 107013 107014 6 107010 106724 107022 107020 107014 106725 6 107009 107010 107007 107006 107013 107098 6 107012 107010 107014 107015 107098 107099 6 107013 107010 107015 107016 107020 107011 6 107013 107014 107016 107017 107099 107100 6 107015 107014 107017 107018 107019 107020 6 107015 107016 107018 107107 107100 107113 6 107017 107016 107019 107114 107113 107115 6 107018 107016 107020 107021 107115 107116 6 107019 107016 107014 107021 107022 107011 6 107019 107020 107022 107024 107116 107117 6 107021 107020 107011 106725 107023 107024 6 107022 106725 106726 107024 107025 107026 6 107021 107022 107023 107025 107117 107118 6 107024 107023 107026 107118 107119 107120 6 107025 107023 106726 107027 107028 107120 6 107026 106726 106727 107028 107029 107030 6 107026 107027 107029 107122 107120 107123 6 107028 107027 107030 107123 107034 107031 6 107029 107027 106727 106728 106729 107031 6 107030 106729 107032 107034 107029 107033 6 107031 106729 106730 106731 106732 107033 6 107032 106732 106734 106735 107034 107031 6 107033 106735 107035 107123 107029 107031 5 107034 106735 106736 107036 107123 6 107035 106736 106740 107037 107123 107122 7 107036 106740 106741 107038 107122 107124 107125 6 107037 106741 107039 107135 107125 107136 6 107038 106741 106742 107040 107136 107137 6 107039 106742 106743 107041 107137 107138 5 107040 106743 106754 107141 107138 6 106754 106743 106744 106746 106750 106752 6 106951 106952 107044 107301 107302 107046 6 107043 106952 106953 106955 107045 107046 6 107044 106955 106957 107046 107047 107048 6 107044 107045 107047 107302 107043 107303 6 107046 107045 107048 107303 107056 107054 6 107047 107045 106957 107049 107050 107054 6 107048 106957 107050 107051 106962 106958 6 107048 107049 107051 106972 107053 107054 6 107050 107049 106962 107052 106971 106972 6 107051 106962 106963 106964 106965 106971 6 107050 106972 107054 107055 107062 106973 6 107050 107053 107055 107056 107047 107048 6 107054 107053 107056 107057 107058 107062 6 107054 107055 107057 107303 107047 107304 6 107056 107055 107058 107059 107307 107304 6 107057 107055 107059 107060 107061 107062 6 107057 107058 107060 107307 107476 107477 6 107059 107058 107061 107477 107478 107479 6 107060 107058 107062 107063 107064 107479 6 107061 107058 107055 107053 106973 107063 6 107062 106973 106974 106976 107061 107064 6 107061 107063 106976 106978 107065 107479 6 107064 106978 107066 107479 107480 107481 6 107065 106978 106979 107067 107068 107481 6 107066 106979 107068 107069 107070 107071 6 107066 107067 107069 107483 107481 107462 6 107068 107067 107070 107462 107484 107485 6 107069 107067 107071 107485 107486 107487 6 107070 107067 106979 106980 107072 107487 6 107071 106980 107073 107487 107488 107492 6 107072 106980 106981 106982 107074 107492 6 107073 106982 106984 107075 107493 107492 6 107074 106984 107076 107493 107079 107077 6 107075 106984 106985 106986 106988 107077 6 107076 106988 106991 107078 107079 107075 6 107077 106991 106993 107079 107080 107081 6 107077 107078 107080 107691 107493 107075 6 107079 107078 107081 107223 107224 107691 6 107080 107078 106993 107082 107083 107223 6 107081 106993 106994 107083 107084 107085 6 107081 107082 107084 107226 107223 107227 6 107083 107082 107085 107227 107228 107229 6 107084 107082 106994 107086 107232 107229 6 107085 106994 106995 107087 107232 107233 6 107086 106995 107088 107089 107090 107233 6 107087 106995 106996 106997 106999 107089 6 107088 106999 107087 107090 107091 107092 6 107087 107089 107091 107233 107234 107235 6 107090 107089 107092 107235 107236 107237 6 107091 107089 106999 107000 107093 107237 6 107092 107000 107002 107094 107237 107238 6 107093 107002 107095 107238 107239 107103 6 107094 107002 107003 107004 107096 107103 6 107095 107004 107005 107097 107102 107103 6 107096 107005 107098 107099 107101 107102 6 107097 107005 107006 107012 107013 107099 6 107098 107013 107015 107100 107101 107097 6 107099 107015 107101 107106 107107 107017 6 107099 107100 107097 107102 107105 107106 6 107097 107101 107096 107103 107104 107105 6 107096 107102 107104 107239 107094 107095 6 107103 107102 107105 107241 107239 107242 6 107104 107102 107101 107106 107242 107243 6 107105 107101 107100 107107 107108 107243 6 107106 107100 107017 107108 107109 107113 6 107106 107107 107109 107110 107243 107244 6 107108 107107 107110 107111 107112 107113 6 107108 107109 107111 107247 107244 107248 6 107110 107109 107112 107248 107249 107250 6 107111 107109 107113 107114 107250 107251 6 107112 107109 107114 107018 107017 107107 6 107112 107113 107018 107115 107251 107254 6 107114 107018 107019 107116 107254 107255 6 107115 107019 107021 107117 107258 107255 6 107116 107021 107024 107118 107258 107259 6 107117 107024 107025 107119 107259 107128 6 107118 107025 107120 107121 107127 107128 6 107119 107025 107121 107122 107028 107026 6 107119 107120 107122 107124 107126 107127 7 107121 107120 107028 107123 107036 107037 107124 6 107122 107028 107029 107034 107035 107036 5 107122 107037 107125 107126 107121 5 107124 107037 107126 107135 107038 7 107124 107125 107121 107127 107130 107131 107135 6 107121 107126 107119 107128 107129 107130 6 107119 107127 107129 107261 107259 107118 6 107128 107127 107130 107261 107532 107530 6 107129 107127 107126 107131 107132 107532 6 107130 107126 107132 107133 107134 107135 6 107130 107131 107133 107532 107531 107533 6 107132 107131 107134 107533 107534 107535 6 107133 107131 107135 107535 107536 107136 6 107134 107131 107126 107125 107038 107136 6 107135 107038 107039 107137 107536 107134 6 107136 107039 107040 107138 107139 107536 6 107137 107040 107139 107140 107141 107041 6 107137 107138 107140 107148 107150 107536 6 107139 107138 107141 107142 107147 107148 7 107140 107138 107041 106754 106755 106759 107142 6 107140 107141 106759 106760 107143 107147 6 107142 106760 107144 107145 107146 107147 7 107143 106760 107145 104552 104551 106763 106761 5 107143 107144 104552 104554 107146 6 107145 104554 104556 107143 107147 107148 5 107143 107146 107148 107140 107142 7 107147 107146 104556 107140 107139 107149 107150 6 107148 104556 107150 107151 107152 107153 6 107148 107149 107139 107151 107536 107535 6 107150 107149 107152 107535 107534 107537 6 107151 107149 107153 107154 107155 107537 6 107152 107149 107154 104649 104555 104556 6 107152 107153 107155 107156 107166 104649 6 107152 107154 107156 107157 107537 107538 6 107155 107154 107157 107158 107159 107166 6 107155 107156 107158 107538 107539 107554 6 107157 107156 107159 107160 107554 107555 6 107158 107156 107160 107161 107162 107166 6 107158 107159 107161 107163 107167 107555 6 107160 107159 107162 107163 104137 107164 5 107161 107159 107164 107165 107166 6 107160 107161 104137 107167 107168 104138 7 104137 107161 107162 107165 104413 104134 104135 5 107164 107162 104413 104415 107166 7 104415 107165 107162 107159 107156 107154 104649 6 107160 107163 107168 107555 107556 107560 7 107167 107163 104138 107169 107560 107561 107562 5 107168 104138 104139 107170 107562 7 107169 104139 104140 107171 107562 107563 107564 6 107170 104140 104124 107172 107173 107564 6 107171 104124 107173 107174 104122 109789 6 107171 107172 107174 107175 107176 107564 6 107173 107172 107175 109788 109787 109789 6 107173 107174 107176 107177 107178 109788 7 107173 107175 107177 107564 107563 107568 107569 6 107176 107175 107178 107179 107180 107569 6 107177 107175 107179 109788 103535 103537 6 107177 107178 107180 107181 107182 103537 6 107177 107179 107181 107570 107569 107571 6 107180 107179 107182 107571 107572 107573 6 107181 107179 103537 103538 107183 107573 6 107182 103538 107184 107575 107573 107187 6 107183 103538 103539 107185 107186 107187 6 107184 103539 107186 107211 107210 107212 6 107184 107185 107187 107188 107211 107192 6 107184 107186 107188 107189 107575 107183 6 107187 107186 107189 107190 107191 107192 6 107187 107188 107190 107575 107576 107579 6 107189 107188 107191 107193 107579 107580 6 107190 107188 107192 107193 107194 107198 6 107191 107188 107198 107199 107211 107186 6 107190 107191 107194 107195 107580 107581 6 107193 107191 107195 107196 107197 107198 6 107193 107194 107196 107581 107582 107583 6 107195 107194 107197 107583 103196 103195 6 107196 107194 107198 103195 107200 107203 6 107197 107194 107191 107192 107199 107200 6 107198 107192 107200 107201 107211 107208 6 107198 107199 107201 107202 107203 107197 6 107200 107199 107202 107206 107207 107208 6 107200 107201 107203 107204 107205 107206 6 107200 107202 107204 103194 103195 107197 6 107203 107202 107205 107220 107221 103194 6 107204 107202 107206 109745 107218 107220 6 107205 107202 107201 107207 109745 109746 6 107206 107201 107208 107209 109746 107213 6 107207 107201 107209 107210 107211 107199 6 107207 107208 107210 104373 104374 107213 6 107209 107208 107211 107185 107212 104373 6 107210 107208 107199 107192 107186 107185 6 107210 107185 103539 103540 104372 104373 6 107209 104374 104375 107214 109746 107207 6 107213 104375 104377 107215 107216 109746 6 107214 104377 107216 102863 101627 102862 6 107214 107215 102863 107217 109745 109746 6 107216 102863 102864 102865 107218 109745 6 107217 102865 107219 107220 107205 109745 5 107218 102865 107220 103214 102866 6 107218 107219 103214 107221 107205 107204 6 107220 103214 103215 107222 103194 107204 5 107221 103215 103216 103193 103194 6 107080 107081 107224 107225 107226 107083 6 107080 107223 107225 107691 107690 107692 6 107224 107223 107226 107692 107693 107674 6 107225 107223 107083 107227 107674 107694 6 107226 107083 107084 107228 107694 107695 6 107227 107084 107229 107230 107695 107696 6 107228 107084 107230 107231 107232 107085 6 107228 107229 107231 107696 107697 107701 6 107230 107229 107232 107701 107702 107703 6 107231 107229 107085 107086 107233 107703 6 107232 107086 107087 107090 107234 107703 6 107233 107090 107235 107718 107704 107703 6 107234 107090 107091 107236 107718 107717 6 107235 107091 107237 107717 107719 107720 6 107236 107091 107092 107093 107238 107720 6 107237 107093 107094 107239 107240 107720 6 107238 107094 107103 107240 107241 107104 6 107238 107239 107241 107720 107721 107722 6 107240 107239 107104 107242 107722 107725 6 107241 107104 107105 107243 107245 107725 6 107242 107105 107106 107108 107244 107245 6 107243 107108 107245 107246 107247 107110 6 107243 107244 107246 107728 107725 107242 6 107245 107244 107247 107964 107728 107965 6 107246 107244 107110 107248 107965 107966 6 107247 107110 107111 107249 107966 107967 6 107248 107111 107250 107511 107967 107968 6 107249 107111 107112 107251 107252 107511 6 107250 107112 107114 107252 107253 107254 6 107250 107251 107253 107511 107512 107516 6 107252 107251 107254 107256 109775 107516 6 107253 107251 107114 107115 107255 107256 6 107254 107115 107256 107257 107258 107116 6 107254 107255 107257 107523 107253 109775 6 107256 107255 107258 107260 107524 107523 6 107257 107255 107116 107117 107259 107260 6 107258 107117 107118 107260 107261 107128 6 107258 107259 107261 107529 107524 107257 6 107260 107259 107128 107129 107530 107529 6 106907 106908 107263 107440 107442 107443 6 107262 106908 106909 107264 107443 107444 6 107263 106909 106911 107265 107444 107445 6 107264 106911 106912 107266 107445 107446 6 107265 106912 106913 107267 107449 107446 6 107266 106913 106914 107268 107449 107450 6 107267 106914 107269 107450 107451 107452 6 107268 106914 106915 106917 107270 107452 6 107269 106917 106918 107271 107452 107453 6 107270 106918 106919 107272 107273 107453 6 107271 106919 107273 107274 106921 106920 6 107271 107272 107274 107453 107454 107455 6 107273 107272 106921 107275 107455 107456 6 107274 106921 106922 107276 107456 107457 6 107275 106922 106923 107277 107457 107458 6 107276 106923 106924 107278 107458 107459 6 107277 106924 106925 107279 107280 107459 6 107278 106925 107280 107281 106927 106926 6 107278 107279 107281 107459 107460 107464 6 107280 107279 106927 106928 107282 107464 6 107281 106928 107283 107464 107465 107466 6 107282 106928 106929 106930 107284 107466 6 107283 106930 107285 107466 107467 107468 6 107284 106930 106931 106932 107286 107468 6 107285 106932 107287 107468 107469 107288 6 107286 106932 106933 106934 106936 107288 6 107287 106936 106938 107289 107469 107286 6 107288 106938 107290 107469 107470 107471 6 107289 106938 106939 107291 107471 107472 6 107290 106939 106941 106943 107292 107472 6 107291 106943 107293 107472 107473 107474 6 107292 106943 106944 107294 107474 107299 6 107293 106944 107295 107297 107298 107299 6 107294 106944 106945 106946 107296 107297 5 107295 106946 106947 106948 107297 6 107296 106948 106949 107295 107294 107298 6 107294 107297 106949 106950 107299 107300 5 107294 107298 107300 107474 107293 7 107299 107298 106950 107301 107474 107305 107302 5 107300 106950 106951 107043 107302 6 107301 107043 107046 107303 107305 107300 6 107302 107046 107047 107056 107304 107305 6 107303 107056 107305 107306 107307 107057 6 107303 107304 107306 107474 107300 107302 6 107305 107304 107307 107474 107473 107475 6 107306 107304 107057 107059 107475 107476 5 104702 104703 107309 107855 107856 6 107308 104703 104704 107310 107856 107857 6 107309 104704 104705 107311 107857 107858 6 107310 104705 104706 107312 107858 107859 6 107311 104706 104707 105170 107313 107859 6 107312 105170 107314 107859 107860 107861 6 107313 105170 105171 107315 107861 107862 6 107314 105171 105172 107316 107862 107863 6 107315 105172 105173 107317 107863 107864 6 107316 105173 105174 107318 107864 107865 6 107317 105174 105175 107319 107865 107866 6 107318 105175 105176 107320 107866 107867 6 107319 105176 105177 105178 107321 107867 6 107320 105178 107322 107867 107868 107869 6 107321 105178 105179 107323 107869 107870 6 107322 105179 105180 105411 107324 107870 6 107323 105411 107325 107870 107871 107872 6 107324 105411 105412 107326 107872 107873 6 107325 105412 105413 105414 107327 107873 6 107326 105414 107328 107873 107874 107875 6 107327 105414 105415 105416 107329 107875 6 107328 105416 107330 107875 107876 107877 6 107329 105416 105417 105418 107331 107877 6 107330 105418 106791 107332 107877 107878 6 107331 106791 107333 107878 107879 107880 6 107332 106791 106792 106793 107334 107880 6 107333 106793 106794 107335 107880 107881 6 107334 106794 106795 106796 107336 107881 6 107335 106796 106797 107337 107881 107882 6 107336 106797 106798 107338 107882 107883 6 107337 106798 106799 107339 107883 107884 6 107338 106799 106800 107340 107884 107885 6 107339 106800 106801 107341 107885 107886 6 107340 106801 107342 107886 107887 107888 6 107341 106801 106802 106803 107343 107888 6 107342 106803 106804 107344 107888 107889 6 107343 106804 106805 107345 107889 107890 6 107344 106805 106806 107346 107890 107891 6 107345 106806 106807 107347 107891 107892 6 107346 106807 106808 107348 107892 107893 6 107347 106808 107349 107893 107894 107895 7 107348 106808 106809 106811 106812 107350 107895 6 107349 106812 106813 107351 107895 107896 6 107350 106813 106814 107352 107896 107897 5 107351 106814 106815 107353 107897 7 107352 106815 106816 107354 107897 107898 107899 5 107353 106816 106817 107355 107899 7 107354 106817 106818 107356 107899 107900 107901 6 107355 106818 107357 107901 107902 107903 7 107356 106818 106819 106820 106821 107358 107903 6 107357 106821 107359 107903 107904 107905 6 107358 106821 106822 107360 107361 107905 6 107359 106822 106823 107361 107362 106825 6 107359 107360 107362 107905 107906 107907 6 107361 107360 106825 106828 107363 107907 6 107362 106828 107364 107907 107908 107909 5 107363 106828 106829 107365 107909 7 107364 106829 107366 107369 107371 107909 107910 6 107365 106829 106830 106831 107367 107369 6 107366 106831 107368 107369 107370 107375 5 107367 106831 107375 106835 106834 6 107366 107367 107370 107365 107371 107372 6 107369 107367 107372 107373 107374 107375 6 107365 107369 107372 107910 107911 107912 6 107371 107369 107370 107373 107912 107913 6 107372 107370 107374 107913 107914 107915 6 107373 107370 107375 106836 107376 107915 6 107374 107370 107367 107368 106835 106836 6 107374 106836 107377 107915 107916 107917 6 107376 106836 106837 106838 107378 107917 5 107377 106838 107379 107601 107917 6 107378 106838 106839 106841 107380 107601 6 107379 106841 106842 107381 107601 107602 6 107380 106842 106843 107382 107605 107602 6 107381 106843 107383 107384 107605 107606 6 107382 106843 107384 106847 106845 106844 6 107382 107383 106847 107385 107606 107607 6 107384 106847 106848 107386 107607 107392 6 107385 106848 107387 107388 107391 107392 6 107386 106848 106849 106850 106851 107388 6 107387 106851 106854 107389 107391 107386 6 107388 106854 106855 106859 107390 107391 6 107389 106859 107391 107396 107393 107397 6 107389 107390 107388 107386 107392 107393 6 107386 107391 107393 107394 107607 107385 6 107392 107391 107394 107395 107396 107390 6 107392 107393 107395 107607 107608 107611 6 107394 107393 107396 107611 107612 107622 6 107395 107393 107390 107397 107622 107623 6 107396 107390 106859 106860 107398 107623 5 107397 106860 107399 107623 107624 6 107398 106860 106861 107400 107624 107625 7 107399 106861 106862 106865 107401 107625 107626 6 107400 106865 106867 107402 107403 107626 6 107401 106867 107403 107404 107405 106869 6 107401 107402 107404 107626 107627 107628 6 107403 107402 107405 107408 107628 107629 6 107404 107402 106869 107406 107407 107408 6 107405 106869 107407 107411 107412 106870 6 107405 107406 107408 107409 107410 107411 6 107405 107407 107404 107409 107632 107629 6 107408 107407 107410 107632 107633 107634 6 107409 107407 107411 107634 107635 107642 6 107410 107407 107406 107412 107642 107643 6 107411 107406 106870 107413 107414 107643 6 107412 106870 107414 107415 107416 106871 6 107412 107413 107415 107643 107644 107645 6 107414 107413 107416 107417 107645 107646 6 107415 107413 107417 107418 107419 106871 6 107415 107416 107418 107420 107421 107646 7 107417 107416 107419 106874 106876 106884 107420 5 107418 107416 106871 106872 106874 6 107418 106884 107417 107421 107422 107426 6 107417 107420 107422 107423 107646 107647 6 107421 107420 107423 107424 107425 107426 6 107421 107422 107424 107647 107648 107649 6 107423 107422 107425 107649 107650 107651 6 107424 107422 107426 107651 107652 107427 6 107425 107422 107420 106884 106885 107427 6 107426 106885 107428 107652 107425 107653 6 107427 106885 106886 107429 107653 107654 6 107428 106886 106887 107430 107431 107654 6 107429 106887 106888 107431 107432 107433 6 107429 107430 107432 106897 107434 107654 6 107431 107430 107433 106893 106894 106897 6 107432 107430 106888 106890 106891 106893 6 107431 106897 106898 107435 107655 107654 6 107434 106898 107436 107655 107656 107660 6 107435 106898 106899 107437 107660 107438 6 107436 106899 106900 106904 106905 107438 6 107437 106905 107439 107660 107436 107661 6 107438 106905 106906 107440 107441 107661 6 107439 106906 106907 107262 107441 107442 6 107439 107440 107442 107661 107662 107663 6 107441 107440 107262 107443 107663 107664 6 107442 107262 107263 107444 107664 107665 6 107443 107263 107264 107445 107665 107666 6 107444 107264 107265 107446 107447 107666 6 107445 107265 107447 107448 107449 107266 6 107445 107446 107448 107668 107666 107671 6 107447 107446 107449 107671 107676 107673 6 107448 107446 107266 107267 107450 107676 6 107449 107267 107268 107451 107676 107677 6 107450 107268 107452 107677 107678 107682 6 107451 107268 107269 107270 107453 107682 6 107452 107270 107271 107273 107454 107682 6 107453 107273 107455 107682 107681 107683 6 107454 107273 107274 107456 107686 107683 6 107455 107274 107275 107457 107686 107687 6 107456 107275 107276 107458 107687 107688 6 107457 107276 107277 107459 107688 107461 6 107458 107277 107278 107280 107460 107461 6 107459 107280 107461 107462 107463 107464 6 107459 107460 107462 107688 107458 107484 7 107461 107460 107463 107483 107068 107069 107484 6 107462 107460 107464 107483 107482 107465 6 107463 107460 107280 107281 107282 107465 6 107464 107282 107466 107482 107463 107494 6 107465 107282 107283 107284 107467 107494 6 107466 107284 107468 107494 107495 107496 6 107467 107284 107285 107286 107469 107496 6 107468 107286 107288 107289 107470 107496 6 107469 107289 107471 107496 107497 107498 6 107470 107289 107290 107472 107498 107475 6 107471 107290 107291 107292 107473 107475 5 107472 107292 107474 107306 107475 7 107473 107292 107293 107299 107300 107305 107306 7 107473 107306 107307 107476 107498 107471 107472 5 107475 107307 107059 107477 107498 6 107476 107059 107060 107478 107497 107498 7 107477 107060 107479 107480 107497 107495 107499 6 107478 107060 107061 107064 107065 107480 6 107478 107479 107065 107481 107482 107499 6 107480 107065 107482 107483 107068 107066 7 107480 107481 107483 107463 107465 107494 107499 5 107482 107481 107068 107462 107463 5 107462 107069 107485 107688 107461 6 107484 107069 107070 107486 107687 107688 6 107485 107070 107487 107686 107687 107685 7 107486 107070 107071 107072 107488 107489 107685 6 107487 107072 107489 107490 107491 107492 5 107487 107488 107490 107685 107684 6 107489 107488 107491 107684 107689 107690 6 107490 107488 107492 107493 107690 107691 6 107491 107488 107493 107074 107073 107072 6 107491 107492 107074 107075 107691 107079 6 107482 107465 107466 107467 107495 107499 6 107494 107467 107496 107497 107478 107499 6 107495 107467 107468 107469 107470 107497 6 107496 107470 107498 107477 107478 107495 6 107497 107470 107471 107477 107476 107475 5 107495 107478 107480 107482 107494 6 100427 105612 105613 107501 107502 109768 6 107500 105613 107502 107503 107504 107505 6 107500 107501 107503 109768 109769 109770 6 107502 107501 107504 106474 109770 109780 5 107503 107501 106474 106472 107505 7 106472 107504 107501 105613 105614 107506 106470 5 107505 105614 107507 106469 106470 6 107506 105614 105615 107508 107509 106469 6 107507 105615 107509 107510 109734 104518 5 107507 107508 107510 106469 106468 6 107509 107508 106468 109732 109733 109734 6 107249 107250 107252 107512 107513 107968 6 107511 107252 107513 107514 107515 107516 6 107511 107512 107514 107968 107969 107970 6 107513 107512 107515 107970 107971 107972 6 107514 107512 107516 107517 107518 107972 6 107515 107512 107252 107517 109775 107253 6 107515 107516 107518 107519 107520 109775 6 107515 107517 107519 107972 107973 107977 6 107518 107517 107520 107521 107977 107978 6 107519 107517 107521 107522 107523 109775 6 107519 107520 107522 107989 107978 107526 6 107521 107520 107523 107524 107525 107526 6 107522 107520 107524 107256 107257 109775 6 107522 107523 107525 107260 107529 107257 6 107522 107524 107526 107527 107528 107529 6 107522 107525 107527 107989 107521 107990 6 107526 107525 107528 107990 107546 107545 6 107527 107525 107529 107530 107531 107545 6 107528 107525 107530 107261 107260 107524 6 107528 107529 107261 107531 107532 107129 7 107528 107530 107532 107132 107533 107543 107545 5 107531 107530 107129 107130 107132 6 107531 107132 107133 107534 107544 107543 6 107533 107133 107535 107151 107537 107544 6 107534 107133 107134 107536 107150 107151 6 107535 107134 107136 107137 107139 107150 6 107534 107151 107152 107155 107538 107544 6 107537 107155 107157 107539 107540 107544 6 107538 107157 107540 107541 107553 107554 6 107538 107539 107541 107542 107543 107544 6 107540 107539 107542 107547 107553 107550 6 107540 107541 107543 107545 107546 107547 6 107540 107542 107544 107533 107531 107545 6 107540 107543 107533 107534 107537 107538 6 107531 107543 107542 107546 107527 107528 6 107545 107542 107547 107548 107990 107527 6 107546 107542 107541 107548 107549 107550 6 107546 107547 107549 107990 107989 107991 6 107548 107547 107550 107551 107991 107992 6 107549 107547 107551 107552 107553 107541 6 107549 107550 107552 107992 107994 107995 7 107551 107550 107553 107557 107556 107558 107995 6 107552 107550 107541 107539 107554 107557 6 107553 107539 107157 107158 107555 107557 6 107554 107158 107160 107167 107556 107557 7 107555 107167 107557 107552 107558 107559 107560 5 107555 107556 107554 107553 107552 5 107552 107556 107559 107995 107996 7 107558 107556 107560 107996 107999 107566 107561 5 107559 107556 107167 107168 107561 6 107560 107168 107562 107565 107566 107559 6 107561 107168 107169 107170 107563 107565 6 107562 107170 107564 107176 107565 107568 5 107563 107170 107171 107173 107176 6 107562 107563 107561 107566 107567 107568 6 107561 107565 107567 107999 107559 108000 6 107566 107565 107568 107569 107570 108000 5 107567 107565 107563 107176 107569 6 107568 107176 107567 107570 107180 107177 6 107567 107569 107180 107571 108000 108001 6 107570 107180 107181 107572 108001 108002 6 107571 107181 107573 107574 108002 108003 6 107572 107181 107574 107575 107183 107182 6 107572 107573 107575 107576 107577 108003 6 107574 107573 107183 107187 107189 107576 6 107575 107189 107574 107577 107578 107579 6 107574 107576 107578 108003 108004 108005 6 107577 107576 107579 108005 108006 108007 6 107578 107576 107189 107190 107580 108007 6 107579 107190 107193 107581 108007 108008 6 107580 107193 107195 107582 108008 108009 6 107581 107195 107583 107585 108012 108009 6 107582 107195 107196 103196 107584 107585 6 107583 103196 103186 107585 107586 103187 6 107583 107584 107586 107587 107582 108012 6 107585 107584 107587 107588 103958 103187 6 107585 107586 107588 107729 108013 108012 6 107587 107586 103958 103960 107589 107729 6 107588 103960 107590 107729 107730 107731 6 107589 103960 103961 107591 107731 107732 6 107590 103961 107592 107738 107732 107739 6 107591 103961 102890 102891 107593 107739 6 107592 102891 107594 107595 107739 107740 6 107593 102891 107595 107596 107597 102892 6 107593 107594 107596 107740 107741 107745 6 107595 107594 107597 107598 107745 107746 6 107596 107594 107598 107599 107600 102892 6 107596 107597 107599 104089 107746 107751 5 107598 107597 107600 104089 104086 6 107599 107597 104086 102880 102879 102892 7 107378 107379 107380 107602 107603 107917 107918 6 107601 107380 107603 107604 107605 107381 6 107601 107602 107604 107926 107920 107918 5 107603 107602 107605 107926 107927 7 107604 107602 107381 107382 107606 107609 107927 6 107605 107382 107384 107607 107608 107609 6 107606 107384 107385 107392 107394 107608 6 107607 107394 107606 107609 107610 107611 6 107606 107608 107610 107929 107927 107605 6 107609 107608 107611 107613 107616 107929 6 107610 107608 107394 107395 107612 107613 6 107611 107395 107613 107614 107621 107622 6 107611 107612 107614 107615 107616 107610 6 107613 107612 107615 107619 107620 107621 6 107613 107614 107616 107617 107618 107619 6 107613 107615 107617 108157 107929 107610 6 107616 107615 107618 108155 108157 108156 6 107617 107615 107619 108156 108158 108159 6 107618 107615 107614 107620 108159 108160 6 107619 107614 107621 108160 108161 108162 6 107620 107614 107612 107622 108162 108163 6 107621 107612 107395 107396 107623 108163 6 107622 107396 107397 107398 107624 108163 6 107623 107398 107399 107625 108163 108164 6 107624 107399 107400 107626 108164 107627 5 107625 107400 107401 107403 107627 6 107626 107403 107628 108164 107625 108165 6 107627 107403 107404 107629 107630 108165 6 107628 107404 107630 107631 107632 107408 6 107628 107629 107631 108165 108166 108167 6 107630 107629 107632 108170 108167 108171 6 107631 107629 107408 107409 107633 108171 6 107632 107409 107634 108173 108171 108174 6 107633 107409 107410 107635 107636 108174 6 107634 107410 107636 107637 107641 107642 6 107634 107635 107637 107638 108174 108175 6 107636 107635 107638 107639 107640 107641 6 107636 107637 107639 108175 108176 108177 6 107638 107637 107640 108177 108178 108179 6 107639 107637 107641 108179 108180 108181 6 107640 107637 107635 107642 108181 108182 6 107641 107635 107410 107411 107643 108182 6 107642 107411 107412 107414 107644 108182 6 107643 107414 107645 108183 108182 108184 6 107644 107414 107415 107646 108184 108185 6 107645 107415 107417 107421 107647 108185 6 107646 107421 107423 107648 108185 108186 6 107647 107423 107649 108186 108187 108188 6 107648 107423 107424 107650 108188 108189 6 107649 107424 107651 108189 108190 108191 6 107650 107424 107425 107652 108191 108192 6 107651 107425 107427 107653 108192 107657 6 107652 107427 107428 107654 107655 107657 6 107653 107428 107429 107655 107434 107431 6 107653 107654 107434 107435 107656 107657 6 107655 107435 107657 107658 107659 107660 6 107655 107656 107658 108192 107652 107653 6 107657 107656 107659 108192 108193 108194 6 107658 107656 107660 108194 107662 107661 6 107659 107656 107435 107436 107438 107661 6 107660 107438 107439 107441 107662 107659 6 107661 107441 107663 108194 107659 108195 6 107662 107441 107442 107664 108208 108195 6 107663 107442 107443 107665 108208 108207 6 107664 107443 107444 107666 107667 108207 6 107665 107444 107667 107668 107447 107445 6 107665 107666 107668 107669 108206 108207 6 107667 107666 107447 107669 107670 107671 6 107667 107668 107670 107698 108206 109790 6 107669 107668 107671 107672 107695 109790 6 107670 107668 107447 107448 107672 107673 6 107670 107671 107673 107674 107695 107694 6 107672 107671 107674 107675 107676 107448 7 107672 107673 107675 107693 107225 107226 107694 6 107674 107673 107676 107677 107679 107693 6 107675 107673 107448 107449 107450 107677 6 107676 107450 107451 107678 107679 107675 6 107677 107451 107679 107680 107681 107682 7 107677 107678 107680 107675 107693 107692 107689 5 107679 107678 107681 107689 107684 6 107680 107678 107682 107454 107683 107684 6 107681 107678 107451 107452 107453 107454 6 107681 107454 107684 107685 107686 107455 7 107681 107683 107685 107489 107490 107689 107680 6 107684 107683 107686 107486 107487 107489 6 107685 107683 107455 107456 107687 107486 6 107686 107456 107457 107486 107485 107688 6 107485 107687 107457 107458 107461 107484 6 107684 107490 107690 107692 107679 107680 6 107689 107490 107491 107691 107224 107692 6 107690 107491 107493 107079 107080 107224 6 107690 107224 107225 107693 107679 107689 5 107692 107225 107674 107675 107679 5 107674 107226 107227 107695 107672 7 107694 107227 107228 107696 107670 107672 109790 6 107695 107228 107230 107697 107698 109790 6 107696 107230 107698 107699 107700 107701 6 107696 107697 107699 108206 107669 109790 6 107698 107697 107700 108205 108203 108206 6 107699 107697 107701 108318 108205 107707 6 107700 107697 107230 107231 107702 107707 6 107701 107231 107703 107704 107705 107707 6 107702 107231 107704 107234 107233 107232 6 107702 107703 107705 107706 107718 107234 6 107702 107704 107706 107707 107708 107709 6 107705 107704 107709 107710 107711 107718 6 107702 107705 107708 108318 107700 107701 6 107707 107705 107709 108318 108481 108317 6 107708 107705 107706 107710 108481 108482 6 107709 107706 107711 107712 107713 108482 6 107710 107706 107712 107716 107717 107718 6 107710 107711 107713 107714 107715 107716 6 107710 107712 107714 108482 108483 108484 6 107713 107712 107715 108484 109765 108486 6 107714 107712 107716 109765 107723 109767 6 107715 107712 107711 107717 109767 107719 6 107716 107711 107718 107235 107236 107719 6 107717 107711 107706 107704 107234 107235 6 107717 107236 107720 109767 107716 107721 6 107719 107236 107237 107238 107240 107721 6 107720 107240 107722 107723 109767 107719 6 107721 107240 107241 107723 107724 107725 7 107721 107722 107724 107726 109765 107715 109767 6 107723 107722 107725 107726 107727 107728 6 107724 107722 107728 107245 107242 107241 6 107723 107724 107727 107962 109765 109764 6 107726 107724 107728 107962 107963 107964 6 107727 107724 107725 107245 107964 107246 6 107587 107588 107589 107730 108013 108014 6 107729 107589 107731 108014 108015 107734 6 107730 107589 107590 107732 107733 107734 6 107731 107590 107733 107737 107738 107591 6 107731 107732 107734 107735 107736 107737 6 107731 107733 107735 108015 107730 108016 6 107734 107733 107736 108016 108017 108018 6 107735 107733 107737 108018 108019 108020 6 107736 107733 107732 107738 108020 108021 6 107737 107732 107591 107739 109766 108021 6 107738 107591 107592 107593 107740 109766 6 107739 107593 107595 107741 107742 109766 6 107740 107595 107742 107743 107744 107745 6 107740 107741 107743 108025 108023 109766 6 107742 107741 107744 108025 108026 108027 6 107743 107741 107745 107747 107748 108027 6 107744 107741 107595 107596 107746 107747 6 107745 107596 107598 107747 107750 107751 6 107745 107746 107744 107748 107749 107750 6 107744 107747 107749 108027 108031 108032 6 107748 107747 107750 108032 108036 107759 6 107749 107747 107746 107751 107752 107759 7 107750 107746 107598 104089 104090 107752 107753 7 107750 107751 107753 104379 107754 107758 107759 4 107752 107751 104090 104379 5 107752 104379 104380 107755 107758 6 107754 104380 104382 107756 107757 107758 6 107755 104382 107757 107762 107763 107764 6 107755 107756 107758 107760 107761 107762 6 107755 107757 107754 107752 107759 107760 6 107752 107758 107760 108036 107749 107750 5 107759 107758 107757 107761 108036 7 107760 107757 107762 108036 108640 108635 108035 7 107761 107757 107756 107763 108852 108639 108640 6 107762 107756 107764 107765 108852 108853 6 107763 107756 104382 104383 104389 107765 6 107763 107764 104389 107766 108319 108853 6 107765 104389 104390 107767 108319 108320 6 107766 104390 103142 107768 107769 108320 6 107767 103142 107769 107770 107774 103143 6 107767 107768 107770 107771 108322 108320 6 107769 107768 107771 107772 107773 107774 6 107769 107770 107772 108322 108323 108324 6 107771 107770 107773 108324 108325 107777 6 107772 107770 107774 107775 107776 107777 6 107773 107770 107768 103143 103144 107775 6 107774 103144 107773 107776 103145 109791 6 107773 107775 107777 107778 103414 109791 6 107773 107776 107778 108325 107772 108326 6 107777 107776 103414 103415 107779 108326 6 107778 103415 105382 105384 107780 108326 6 107779 105384 105386 107781 108326 108327 6 107780 105386 105388 107782 108329 108327 6 107781 105388 105616 107783 108329 108330 6 107782 105616 107784 108330 108331 108332 6 107783 105616 105617 107785 108037 108332 6 107784 105617 107786 107787 108037 108038 6 107785 105617 105618 107787 107788 107789 6 107785 107786 107788 108038 108039 108040 6 107787 107786 107789 108045 108040 107794 6 107788 107786 105618 105619 107790 107794 6 107789 105619 107791 107792 107793 107794 6 107790 105619 107792 103779 103778 105620 6 107790 107791 107793 107797 107798 103779 6 107790 107792 107794 107795 107796 107797 6 107790 107793 107795 108045 107788 107789 6 107794 107793 107796 108045 108046 108047 6 107795 107793 107797 108048 108047 108049 6 107796 107793 107792 107798 108049 107799 6 107797 107792 103779 103780 103783 107799 6 107798 103783 103784 107800 108049 107797 6 107799 103784 103785 103788 107801 108049 6 107800 103788 103790 107802 108048 108049 6 107801 103790 103791 103793 107803 108048 6 107802 103793 107804 107806 108047 108048 6 107803 103793 103794 107805 107806 107807 6 107804 103794 107807 107808 107809 103795 6 107803 107804 107807 108046 108047 108343 6 107806 107804 107805 107808 108344 108343 6 107807 107805 107809 108344 108345 107930 6 107808 107805 103795 103796 107810 107930 6 107809 103796 103952 107811 107930 107931 6 107810 103952 107812 107931 107932 107936 6 107811 103952 103953 107813 107936 107937 6 107812 103953 103954 107814 107937 107938 6 107813 103954 107815 107938 107939 107816 6 107814 103954 103955 103956 104238 107816 6 107815 104238 104503 107817 107939 107814 6 107816 104503 104504 107818 107939 107940 6 107817 104504 107819 107940 107941 107942 6 107818 104504 104505 107820 107942 107943 6 107819 104505 104506 104507 107821 107943 6 107820 104507 107822 107943 107944 107945 6 107821 104507 104508 107823 107945 107946 6 107822 104508 104509 107824 107946 107947 6 107823 104509 107825 107826 107947 107948 6 107824 104509 104510 107826 107827 107828 6 107824 107825 107827 107948 107949 107950 6 107826 107825 107828 107950 107951 107952 6 107827 107825 104510 104419 107829 107952 6 107828 104419 104247 107830 107952 107832 6 107829 104247 104248 104739 107831 107832 6 107830 104739 105003 107832 107833 107834 6 107830 107831 107833 107952 107829 107953 6 107832 107831 107834 107953 107954 107955 6 107833 107831 105003 105004 107835 107955 6 107834 105004 105005 107836 107955 107956 6 107835 105005 107837 107956 107957 107958 6 107836 105005 104750 104751 107838 107958 6 107837 104751 104757 107839 107958 107959 6 107838 104757 107840 107959 107960 107846 6 107839 104757 104758 107841 107846 107961 6 107840 104758 104661 104662 107842 107961 6 107841 104662 104663 104689 107843 107961 6 107842 104689 104690 107844 107961 107845 6 107843 104690 104691 105158 105159 107845 5 107844 105159 107846 107961 107843 7 107845 105159 107847 107960 107839 107840 107961 6 107846 105159 105160 107848 108082 107960 6 107847 105160 105161 107849 108082 108083 6 107848 105161 105162 107850 108083 108084 6 107849 105162 107851 108084 108085 108086 6 107850 105162 105163 105164 107852 108086 6 107851 105164 107853 108086 108087 108088 6 107852 105164 105165 107854 108088 108089 7 107853 105165 104700 104701 104702 107855 108089 5 107854 104702 107308 107856 108089 7 107855 107308 107309 107857 108089 108090 108091 7 107856 107309 107310 107858 108091 108092 108093 6 107857 107310 107311 107859 108093 108094 6 107858 107311 107312 107313 107860 108094 6 107859 107313 107861 108094 108095 108096 6 107860 107313 107314 107862 108096 108097 6 107861 107314 107315 107863 108097 108098 6 107862 107315 107316 107864 108098 108099 6 107863 107316 107317 107865 108099 108100 6 107864 107317 107318 107866 108100 108101 6 107865 107318 107319 107867 108101 108102 6 107866 107319 107320 107321 107868 108102 6 107867 107321 107869 108102 108103 108104 6 107868 107321 107322 107870 108104 108105 6 107869 107322 107323 107324 107871 108105 6 107870 107324 107872 108105 108106 108107 6 107871 107324 107325 107873 108107 108108 6 107872 107325 107326 107327 107874 108108 6 107873 107327 107875 108108 108109 108110 6 107874 107327 107328 107329 107876 108110 6 107875 107329 107877 108110 108111 108112 6 107876 107329 107330 107331 107878 108112 6 107877 107331 107332 107879 108112 108113 6 107878 107332 107880 108113 108114 108115 6 107879 107332 107333 107334 107881 108115 6 107880 107334 107335 107336 107882 108115 6 107881 107336 107337 107883 108115 108116 7 107882 107337 107338 107884 108116 108117 108118 6 107883 107338 107339 107885 108118 108119 6 107884 107339 107340 107886 108119 108120 6 107885 107340 107341 107887 108120 108121 6 107886 107341 107888 108121 108122 108123 6 107887 107341 107342 107343 107889 108123 6 107888 107343 107344 107890 108123 108124 6 107889 107344 107345 107891 108124 108125 6 107890 107345 107346 107892 108125 108126 6 107891 107346 107347 107893 108126 108127 6 107892 107347 107348 107894 108127 108128 6 107893 107348 107895 108128 108129 108130 6 107894 107348 107349 107350 107896 108130 6 107895 107350 107351 107897 108130 108131 7 107896 107351 107352 107353 107898 108131 108132 5 107897 107353 107899 108132 108133 7 107898 107353 107354 107355 107900 108133 108134 6 107899 107355 107901 108134 108135 108136 5 107900 107355 107356 107902 108136 7 107901 107356 107903 108136 108137 108138 107904 5 107902 107356 107357 107358 107904 6 107903 107358 107905 108138 107902 108139 6 107904 107358 107359 107361 107906 108139 6 107905 107361 107907 108139 108140 108141 6 107906 107361 107362 107363 107908 108141 6 107907 107363 107909 108141 108142 108143 6 107908 107363 107364 107365 107910 108143 6 107909 107365 107371 107911 108143 108144 6 107910 107371 107912 108144 108145 108146 5 107911 107371 107372 107913 108146 7 107912 107372 107373 107914 108146 108147 108148 6 107913 107373 107915 108148 108149 108150 6 107914 107373 107374 107376 107916 108150 6 107915 107376 107917 107918 107919 108150 6 107916 107376 107377 107378 107601 107918 6 107917 107601 107916 107919 107920 107603 6 107916 107918 107920 107921 107922 108150 6 107919 107918 107921 107925 107926 107603 6 107919 107920 107922 107923 107924 107925 6 107919 107921 107923 108150 108151 108149 6 107922 107921 107924 108151 108152 108153 6 107923 107921 107925 108153 108154 108155 6 107924 107921 107920 107926 108155 107928 6 107925 107920 107603 107604 107927 107928 6 107926 107604 107928 107929 107609 107605 6 107926 107927 107929 108155 107925 108157 6 107928 107927 107609 108157 107616 107610 6 107809 107810 107931 108050 108345 107808 6 107930 107810 107811 107932 107933 108050 6 107931 107811 107933 107934 107935 107936 6 107931 107932 107934 108050 108051 108052 6 107933 107932 107935 108052 108053 108057 6 107934 107932 107936 108059 108057 108060 6 107935 107932 107811 107812 107937 108060 6 107936 107812 107813 107938 108060 108061 6 107937 107813 107814 107939 108061 108062 6 107938 107814 107816 107817 107940 108062 6 107939 107817 107818 107941 108062 108063 6 107940 107818 107942 108063 108064 108065 6 107941 107818 107819 107943 108065 108066 6 107942 107819 107820 107821 107944 108066 6 107943 107821 107945 108066 108067 108068 6 107944 107821 107822 107946 108068 108069 6 107945 107822 107823 107947 108069 108070 6 107946 107823 107824 107948 108070 108071 6 107947 107824 107826 107949 108071 108072 6 107948 107826 107950 108072 108073 108074 6 107949 107826 107827 107951 108074 108075 6 107950 107827 107952 108075 108076 107953 6 107951 107827 107828 107829 107832 107953 6 107952 107832 107833 107954 108076 107951 6 107953 107833 107955 108076 108077 108078 6 107954 107833 107834 107835 107956 108078 6 107955 107835 107836 107957 108078 108079 6 107956 107836 107958 108079 108080 108081 6 107957 107836 107837 107838 107959 108081 6 107958 107838 107839 107960 108081 108082 5 107959 107839 107846 108082 107847 6 107846 107840 107841 107842 107843 107845 6 107726 107727 107963 108466 108468 109764 6 107962 107727 107964 108466 108487 108488 6 107963 107727 107728 107246 107965 108488 6 107964 107246 107247 107966 108488 108489 6 107965 107247 107248 107967 108489 108490 6 107966 107248 107249 107968 108490 108491 6 107967 107249 107511 107513 107969 108491 6 107968 107513 107970 108493 108491 108494 6 107969 107513 107514 107971 108494 108495 6 107970 107514 107972 108495 108496 107974 6 107971 107514 107515 107518 107973 107974 6 107972 107518 107974 107975 107976 107977 6 107972 107973 107975 108496 107971 108497 6 107974 107973 107976 108500 108497 107981 6 107975 107973 107977 107979 107980 107981 6 107976 107973 107518 107519 107978 107979 6 107977 107519 107979 107988 107989 107521 6 107977 107978 107976 107980 107987 107988 6 107976 107979 107981 107982 107986 107987 6 107976 107980 107982 107983 108500 107975 6 107981 107980 107983 107984 107985 107986 6 107981 107982 107984 108500 108501 108502 6 107983 107982 107985 108502 108503 108504 6 107984 107982 107986 108504 108505 108506 6 107985 107982 107980 107987 108506 107993 7 107986 107980 107979 107988 107991 107992 107993 5 107987 107979 107978 107989 107991 7 107988 107978 107521 107526 107990 107548 107991 5 107989 107526 107527 107546 107548 6 107989 107548 107549 107992 107987 107988 6 107991 107549 107551 107987 107993 107994 6 107987 107992 107994 108506 107986 108507 6 107993 107992 107551 108507 107997 107995 6 107551 107552 107558 107996 107997 107994 6 107995 107558 107559 107997 107998 107999 6 107995 107996 107998 108507 107994 108508 6 107997 107996 107999 108508 108509 108510 6 107998 107996 107559 107566 108000 108510 6 107999 107566 107567 107570 108001 108510 7 108000 107570 107571 108002 108510 108522 108511 6 108001 107571 107572 108003 108522 108523 7 108002 107572 107574 107577 108004 108520 108523 7 108003 107577 108005 108519 108517 108520 108541 5 108004 107577 107578 108006 108541 6 108005 107578 108007 108610 108540 108541 6 108006 107578 107579 107580 108008 108610 6 108007 107580 107581 108009 108010 108610 6 108008 107581 108010 108011 108012 107582 8 108008 108009 108011 108609 108537 108538 108540 108610 5 108010 108009 108012 108013 108609 6 108011 108009 108013 107587 107582 107585 7 108011 108012 107587 107729 108014 108608 108609 6 108013 107729 107730 108015 108607 108608 6 108014 107730 107734 108016 108611 108607 6 108015 107734 107735 108017 108611 108612 6 108016 107735 108018 108612 108613 108614 6 108017 107735 107736 108019 108614 108615 6 108018 107736 108020 108615 108618 108619 6 108019 107736 107737 108021 108022 108619 6 108020 107737 108022 108023 109766 107738 6 108020 108021 108023 108024 108619 108620 6 108022 108021 108024 108025 107742 109766 6 108022 108023 108025 108620 108621 108028 6 108024 108023 107742 107743 108026 108028 6 108025 107743 108027 108028 108029 108030 6 108026 107743 107744 107748 108030 108031 6 108025 108026 108029 108621 108024 108622 6 108028 108026 108030 108628 108622 108629 6 108029 108026 108027 108031 108033 108629 6 108030 108027 107748 108032 108033 108034 6 108031 107748 107749 108034 108035 108036 6 108030 108031 108034 108629 108630 108631 6 108033 108031 108032 108035 108631 108632 6 108034 108032 108036 107761 108635 108632 6 108035 108032 107749 107759 107760 107761 6 107784 107785 108038 108332 108333 108334 6 108037 107785 107787 108039 108041 108334 6 108038 107787 108040 108041 108042 108043 6 108039 107787 108043 108044 108045 107788 6 108038 108039 108042 108334 108335 108336 6 108041 108039 108043 108336 108337 108341 6 108042 108039 108040 108044 108341 108342 6 108043 108040 108045 108342 108343 108046 6 108044 108040 107788 107794 107795 108046 6 108045 107795 108047 107806 108343 108044 6 108046 107795 107806 107803 108048 107796 6 107803 108047 107796 107802 107801 108049 6 107801 108048 107796 107797 107799 107800 6 107930 107931 107933 108051 108345 108346 6 108050 107933 108052 108346 108347 108348 6 108051 107933 107934 108053 108054 108348 6 108052 107934 108054 108055 108056 108057 6 108052 108053 108055 108348 108349 108350 6 108054 108053 108056 108350 108351 108352 6 108055 108053 108057 108058 108352 108353 6 108056 108053 108058 108059 107935 107934 6 108056 108057 108059 108353 108354 108355 6 108058 108057 107935 108060 108355 108356 6 108059 107935 107936 107937 108061 108356 6 108060 107937 107938 108062 108356 108358 6 108061 107938 107939 107940 108063 108358 6 108062 107940 107941 108064 108359 108358 6 108063 107941 108065 108359 108360 108361 6 108064 107941 107942 108066 108361 108362 6 108065 107942 107943 107944 108067 108362 6 108066 107944 108068 108362 108363 108364 6 108067 107944 107945 108069 108364 108365 6 108068 107945 107946 108070 108365 108366 6 108069 107946 107947 108071 108366 108367 6 108070 107947 107948 108072 108367 108368 6 108071 107948 107949 108073 108368 108369 6 108072 107949 108074 108369 108370 108371 6 108073 107949 107950 108075 108371 108372 6 108074 107950 107951 108076 108372 108373 6 108075 107951 107953 107954 108077 108373 6 108076 107954 108078 108375 108373 108376 6 108077 107954 107955 107956 108079 108376 6 108078 107956 107957 108080 108376 108377 6 108079 107957 108081 108209 108377 108378 6 108080 107957 107958 107959 108082 108209 7 108081 107959 107960 107847 107848 108083 108209 6 108082 107848 107849 108084 108209 108210 6 108083 107849 107850 108085 108210 108211 6 108084 107850 108086 108211 108212 108213 6 108085 107850 107851 107852 108087 108213 6 108086 107852 108088 108213 108214 108215 6 108087 107852 107853 108089 108215 108090 6 108088 107853 107854 107855 107856 108090 5 108089 107856 108091 108215 108088 7 108090 107856 107857 108092 108215 108216 108217 5 108091 107857 108093 108217 108218 6 108092 107857 107858 108094 108218 108219 6 108093 107858 107859 107860 108095 108219 6 108094 107860 108096 108219 108220 108221 6 108095 107860 107861 108097 108221 108222 6 108096 107861 107862 108098 108222 108223 6 108097 107862 107863 108099 108223 108224 6 108098 107863 107864 108100 108224 108225 6 108099 107864 107865 108101 108225 108226 6 108100 107865 107866 108102 108226 108227 6 108101 107866 107867 107868 108103 108227 6 108102 107868 108104 108227 108228 108229 6 108103 107868 107869 108105 108229 108230 6 108104 107869 107870 107871 108106 108230 6 108105 107871 108107 108230 108231 108232 6 108106 107871 107872 108108 108232 108233 6 108107 107872 107873 107874 108109 108233 6 108108 107874 108110 108233 108234 108235 6 108109 107874 107875 107876 108111 108235 6 108110 107876 108112 108235 108236 108237 6 108111 107876 107877 107878 108113 108237 6 108112 107878 107879 108114 108237 108238 6 108113 107879 108115 108238 108239 108116 6 108114 107879 107880 107881 107882 108116 6 108115 107882 107883 108117 108239 108114 6 108116 107883 108118 108239 108240 108241 5 108117 107883 107884 108119 108241 6 108118 107884 107885 108120 108241 108242 6 108119 107885 107886 108121 108242 108243 6 108120 107886 107887 108122 108243 108244 6 108121 107887 108123 108244 108245 108246 6 108122 107887 107888 107889 108124 108246 6 108123 107889 107890 108125 108246 108247 6 108124 107890 107891 108126 108247 108248 6 108125 107891 107892 108127 108248 108249 6 108126 107892 107893 108128 108249 108250 6 108127 107893 107894 108129 108250 108251 6 108128 107894 108130 108251 108252 108253 6 108129 107894 107895 107896 108131 108253 6 108130 107896 107897 108132 108253 108254 5 108131 107897 107898 108133 108254 7 108132 107898 107899 108134 108254 108255 108256 5 108133 107899 107900 108135 108256 7 108134 107900 108136 108256 108257 108258 108259 6 108135 107900 107901 107902 108137 108259 6 108136 107902 108138 108259 108260 108261 6 108137 107902 107904 108139 108261 108262 6 108138 107904 107905 107906 108140 108262 6 108139 107906 108141 108262 108263 108264 6 108140 107906 107907 107908 108142 108264 6 108141 107908 108143 108264 108265 108266 6 108142 107908 107909 107910 108144 108266 6 108143 107910 107911 108145 108266 108267 6 108144 107911 108146 108267 108268 108269 6 108145 107911 107912 107913 108147 108269 6 108146 107913 108148 108269 108270 108271 6 108147 107913 107914 108149 108151 108271 5 108148 107914 108150 108151 107922 6 108149 107914 107915 107916 107919 107922 7 108148 108149 107922 107923 108152 108271 108272 5 108151 107923 108153 108272 108273 7 108152 107923 107924 108154 108273 108274 108275 6 108153 107924 108155 108156 108275 108276 7 108154 107924 108156 107925 107928 108157 107617 6 108154 108155 107617 107618 108158 108276 5 108155 107928 107929 107616 107617 6 108156 107618 108159 108276 108277 108278 6 108158 107618 107619 108160 108278 108279 7 108159 107619 107620 108161 108279 108280 108281 5 108160 107620 108162 108281 108282 7 108161 107620 107621 108163 108282 108283 108164 6 108162 107621 107622 107623 107624 108164 7 108163 107624 107625 107627 108165 108283 108162 6 108164 107627 107628 107630 108166 108283 6 108165 107630 108167 108168 108283 108282 6 108166 107630 108168 108169 108170 107631 6 108166 108167 108169 108282 108284 108285 6 108168 108167 108170 108285 108286 108287 6 108169 108167 107631 108171 108172 108287 6 108170 107631 108172 108173 107633 107632 6 108170 108171 108173 108287 108288 108289 6 108172 108171 107633 108174 108289 108290 6 108173 107633 107634 107636 108175 108290 6 108174 107636 107638 108176 108290 108291 6 108175 107638 108177 108291 108292 108293 6 108176 107638 107639 108178 108293 108294 6 108177 107639 108179 108294 108295 108296 6 108178 107639 107640 108180 108296 108297 6 108179 107640 108181 108307 108297 108308 6 108180 107640 107641 108182 108183 108308 6 108181 107641 108183 107644 107643 107642 6 108181 108182 107644 108184 108308 108309 6 108183 107644 107645 108185 108309 108310 7 108184 107645 107646 107647 108186 108310 108311 6 108185 107647 107648 108187 108311 108312 6 108186 107648 108188 108312 108313 108314 6 108187 107648 107649 108189 108314 108315 6 108188 107649 107650 108190 108315 108200 6 108189 107650 108191 108197 108199 108200 6 108190 107650 107651 108192 108197 108193 6 108191 107651 107652 107657 107658 108193 6 108192 107658 108194 108196 108197 108191 6 108193 107658 107659 107662 108195 108196 6 108194 107662 108196 108208 108204 107663 6 108194 108195 108193 108197 108198 108204 6 108193 108196 108198 108199 108190 108191 6 108197 108196 108199 108202 108203 108204 6 108197 108198 108190 108200 108201 108202 6 108190 108199 108201 108315 108189 108316 6 108200 108199 108202 108316 108317 108318 6 108201 108199 108198 108203 108205 108318 6 108202 108198 108204 108205 107699 108206 7 108203 108198 108206 108207 108208 108195 108196 5 108202 108203 107699 108318 107700 7 107699 108203 108204 107698 107669 107667 108207 6 107667 108206 108204 108208 107664 107665 5 108207 108204 108195 107663 107664 6 108080 108081 108082 108083 108210 108378 5 108209 108083 108084 108211 108378 6 108210 108084 108085 108212 108378 108379 6 108211 108085 108213 108379 108380 108381 6 108212 108085 108086 108087 108214 108381 6 108213 108087 108215 108381 108382 108216 6 108214 108087 108088 108090 108091 108216 6 108215 108091 108217 108382 108214 108383 6 108216 108091 108092 108218 108383 108384 6 108217 108092 108093 108219 108384 108385 6 108218 108093 108094 108095 108220 108385 5 108219 108095 108221 108385 108386 6 108220 108095 108096 108222 108386 108387 6 108221 108096 108097 108223 108387 108388 6 108222 108097 108098 108224 108388 108389 6 108223 108098 108099 108225 108389 108390 6 108224 108099 108100 108226 108390 108391 6 108225 108100 108101 108227 108391 108392 6 108226 108101 108102 108103 108228 108392 6 108227 108103 108229 108392 108393 108394 6 108228 108103 108104 108230 108394 108395 6 108229 108104 108105 108106 108231 108395 6 108230 108106 108232 108395 108396 108397 6 108231 108106 108107 108233 108397 108398 6 108232 108107 108108 108109 108234 108398 6 108233 108109 108235 108398 108399 108400 6 108234 108109 108110 108111 108236 108400 6 108235 108111 108237 108400 108401 108402 6 108236 108111 108112 108113 108238 108402 6 108237 108113 108114 108239 108402 108403 6 108238 108114 108116 108117 108240 108403 6 108239 108117 108241 108403 108404 108405 6 108240 108117 108118 108119 108242 108405 6 108241 108119 108120 108243 108405 108406 6 108242 108120 108121 108244 108406 108407 6 108243 108121 108122 108245 108407 108408 6 108244 108122 108246 108408 108409 108410 6 108245 108122 108123 108124 108247 108410 6 108246 108124 108125 108248 108410 108411 6 108247 108125 108126 108249 108411 108412 6 108248 108126 108127 108250 108412 108413 6 108249 108127 108128 108251 108413 108414 6 108250 108128 108129 108252 108414 108415 6 108251 108129 108253 108415 108416 108417 6 108252 108129 108130 108131 108254 108417 7 108253 108131 108132 108133 108255 108417 108418 5 108254 108133 108256 108418 108419 7 108255 108133 108134 108135 108257 108419 108420 5 108256 108135 108258 108420 108421 6 108257 108135 108259 108421 108422 108260 5 108258 108135 108136 108137 108260 6 108259 108137 108261 108422 108258 108423 6 108260 108137 108138 108262 108423 108424 6 108261 108138 108139 108140 108263 108424 6 108262 108140 108264 108424 108425 108426 6 108263 108140 108141 108142 108265 108426 6 108264 108142 108266 108426 108427 108428 7 108265 108142 108143 108144 108267 108428 108429 6 108266 108144 108145 108268 108429 108430 6 108267 108145 108269 108430 108431 108432 6 108268 108145 108146 108147 108270 108432 6 108269 108147 108271 108432 108433 108434 6 108270 108147 108148 108151 108272 108434 5 108271 108151 108152 108273 108434 7 108272 108152 108153 108274 108434 108435 108436 6 108273 108153 108275 108436 108437 108438 6 108274 108153 108154 108276 108438 108277 5 108275 108154 108156 108158 108277 6 108276 108158 108278 108438 108275 108439 6 108277 108158 108159 108279 108439 108440 7 108278 108159 108160 108280 108440 108441 108445 6 108279 108160 108281 108445 108446 108284 5 108280 108160 108161 108282 108284 7 108281 108161 108162 108283 108166 108168 108284 5 108282 108162 108164 108165 108166 6 108282 108168 108285 108446 108280 108281 6 108284 108168 108169 108286 108446 108447 6 108285 108169 108287 108447 108449 108450 6 108286 108169 108170 108172 108288 108450 6 108287 108172 108289 108450 108451 108452 6 108288 108172 108173 108290 108452 108453 6 108289 108173 108174 108175 108291 108453 6 108290 108175 108176 108292 108453 108454 6 108291 108176 108293 108454 108455 108456 6 108292 108176 108177 108294 108456 108457 6 108293 108177 108178 108295 108457 108458 6 108294 108178 108296 108461 108458 108299 6 108295 108178 108179 108297 108298 108299 6 108296 108179 108298 108307 108305 108180 6 108296 108297 108299 108300 108301 108305 6 108296 108298 108300 108461 108295 108462 6 108299 108298 108301 108302 108462 108463 6 108300 108298 108302 108303 108304 108305 6 108300 108301 108303 108463 108464 108465 6 108302 108301 108304 108465 108466 108467 6 108303 108301 108305 108306 108470 108467 6 108304 108301 108298 108306 108307 108297 6 108304 108305 108307 108470 108471 108472 6 108306 108305 108297 108180 108308 108472 6 108307 108180 108181 108183 108309 108472 6 108308 108183 108184 108310 108472 108473 6 108309 108184 108185 108311 108473 108474 5 108310 108185 108186 108312 108474 6 108311 108186 108187 108313 108474 108475 6 108312 108187 108314 108478 108475 108479 6 108313 108187 108188 108315 108479 108480 6 108314 108188 108189 108200 108316 108480 5 108315 108200 108201 108317 108480 6 108316 108201 108318 108480 108481 107708 7 108317 108201 108202 108205 107700 107707 107708 6 107765 107766 108320 108321 108853 108854 6 108319 107766 107767 108321 108322 107769 7 108319 108320 108322 108854 108855 108856 108323 5 108321 108320 107769 107771 108323 6 108322 107771 108324 108856 108321 108857 6 108323 107771 107772 108325 108857 108328 6 108324 107772 107777 108326 108327 108328 6 108325 107777 107778 107779 107780 108327 6 108326 107780 108325 108328 108329 107781 6 108325 108327 108329 108857 108324 108858 6 108328 108327 107781 107782 108330 108858 6 108329 107782 107783 108331 108858 108859 6 108330 107783 108332 108865 108862 108859 6 108331 107783 107784 108037 108333 108865 6 108332 108037 108334 108866 108865 108867 6 108333 108037 108038 108041 108335 108867 6 108334 108041 108336 108867 108868 108869 6 108335 108041 108042 108337 108338 108869 6 108336 108042 108338 108339 108340 108341 6 108336 108337 108339 108869 108870 108874 6 108338 108337 108340 108874 108875 108347 6 108339 108337 108341 108347 108346 108876 6 108340 108337 108042 108043 108342 108876 6 108341 108043 108044 108343 108344 108876 6 108342 108044 108344 107807 107806 108046 6 108342 108343 107807 107808 108345 108876 6 108344 107808 107930 108050 108346 108876 6 108345 108050 108051 108347 108340 108876 6 108346 108051 108348 108875 108339 108340 6 108347 108051 108052 108054 108349 108875 6 108348 108054 108350 108902 108875 108901 6 108349 108054 108055 108351 108901 108903 6 108350 108055 108352 108903 108904 108905 6 108351 108055 108056 108353 108905 108906 6 108352 108056 108058 108354 108906 108907 6 108353 108058 108355 108907 108908 108909 6 108354 108058 108059 108356 108357 108909 6 108355 108059 108060 108061 108357 108358 6 108355 108356 108358 108359 108909 108910 6 108357 108356 108061 108062 108359 108063 6 108357 108358 108063 108064 108360 108910 6 108359 108064 108361 108912 108910 108913 6 108360 108064 108065 108362 108913 108914 6 108361 108065 108066 108067 108363 108914 6 108362 108067 108364 108916 108914 108917 6 108363 108067 108068 108365 108917 108918 6 108364 108068 108069 108366 108918 108919 6 108365 108069 108070 108367 108919 108920 6 108366 108070 108071 108368 108920 108921 6 108367 108071 108072 108369 108921 108922 6 108368 108072 108073 108370 108922 108923 6 108369 108073 108371 108923 108924 108925 6 108370 108073 108074 108372 108925 108926 6 108371 108074 108075 108373 108374 108926 6 108372 108075 108076 108374 108375 108077 6 108372 108373 108375 108926 108927 108928 6 108374 108373 108077 108376 108928 108929 6 108375 108077 108078 108079 108377 108929 6 108376 108079 108080 108378 108929 108379 6 108377 108080 108209 108210 108211 108379 7 108378 108211 108212 108380 108929 108377 108930 5 108379 108212 108381 108930 108931 7 108380 108212 108213 108214 108382 108743 108931 6 108381 108214 108216 108383 108641 108743 6 108382 108216 108217 108384 108641 108642 6 108383 108217 108218 108385 108642 108643 6 108384 108218 108219 108220 108386 108643 7 108385 108220 108221 108387 108643 108644 108645 6 108386 108221 108222 108388 108645 108646 6 108387 108222 108223 108389 108646 108647 6 108388 108223 108224 108390 108647 108648 7 108389 108224 108225 108391 108648 108649 108650 6 108390 108225 108226 108392 108650 108651 6 108391 108226 108227 108228 108393 108651 6 108392 108228 108394 108651 108652 108653 6 108393 108228 108229 108395 108653 108654 6 108394 108229 108230 108231 108396 108654 5 108395 108231 108397 108654 108655 6 108396 108231 108232 108398 108655 108656 7 108397 108232 108233 108234 108399 108656 108657 5 108398 108234 108400 108657 108658 7 108399 108234 108235 108236 108401 108658 108659 5 108400 108236 108402 108659 108660 6 108401 108236 108237 108238 108403 108660 6 108402 108238 108239 108240 108404 108660 6 108403 108240 108405 108660 108661 108662 6 108404 108240 108241 108242 108406 108662 6 108405 108242 108243 108407 108662 108663 7 108406 108243 108244 108408 108663 108664 108665 6 108407 108244 108245 108409 108665 108666 6 108408 108245 108410 108666 108667 108668 6 108409 108245 108246 108247 108411 108668 6 108410 108247 108248 108412 108668 108669 6 108411 108248 108249 108413 108669 108670 6 108412 108249 108250 108414 108670 108671 6 108413 108250 108251 108415 108671 108672 6 108414 108251 108252 108416 108672 108673 6 108415 108252 108417 108673 108674 108675 6 108416 108252 108253 108254 108418 108675 6 108417 108254 108255 108419 108675 108676 6 108418 108255 108256 108420 108676 108677 6 108419 108256 108257 108421 108677 108678 6 108420 108257 108258 108422 108678 108679 6 108421 108258 108260 108423 108679 108680 7 108422 108260 108261 108424 108680 108681 108682 6 108423 108261 108262 108263 108425 108682 6 108424 108263 108426 108682 108683 108687 6 108425 108263 108264 108265 108427 108687 6 108426 108265 108428 108687 108688 108689 6 108427 108265 108266 108429 108689 108690 5 108428 108266 108267 108430 108690 6 108429 108267 108268 108431 108542 108690 6 108430 108268 108432 108542 108543 108544 6 108431 108268 108269 108270 108433 108544 6 108432 108270 108434 108544 108545 108546 7 108433 108270 108271 108272 108273 108435 108546 6 108434 108273 108436 108546 108547 108548 6 108435 108273 108274 108437 108548 108549 6 108436 108274 108438 108549 108550 108439 5 108437 108274 108275 108277 108439 7 108438 108277 108278 108440 108550 108437 108551 6 108439 108278 108279 108441 108442 108551 6 108440 108279 108442 108443 108444 108445 6 108440 108441 108443 108551 108552 108553 6 108442 108441 108444 108553 108554 108555 7 108443 108441 108445 108446 108447 108448 108555 5 108444 108441 108279 108280 108446 6 108445 108280 108284 108285 108447 108444 6 108446 108285 108286 108444 108448 108449 5 108444 108447 108449 108555 108556 6 108448 108447 108286 108450 108556 108557 7 108449 108286 108287 108288 108451 108557 108558 6 108450 108288 108452 108558 108559 108560 6 108451 108288 108289 108453 108560 108561 6 108452 108289 108290 108291 108454 108561 6 108453 108291 108292 108455 108561 108562 6 108454 108292 108456 108562 108563 108564 6 108455 108292 108293 108457 108564 108565 6 108456 108293 108294 108458 108459 108565 6 108457 108294 108459 108460 108461 108295 6 108457 108458 108460 108565 108566 108567 6 108459 108458 108461 108567 108568 108569 6 108460 108458 108295 108299 108462 108569 6 108461 108299 108300 108463 108569 108570 6 108462 108300 108302 108464 108570 108571 6 108463 108302 108465 108571 108572 108573 6 108464 108302 108303 108466 108573 108487 7 108465 108303 108467 108468 107962 107963 108487 6 108466 108303 108468 108469 108470 108304 6 108466 108467 108469 107962 109763 109764 7 108468 108467 108470 109094 108485 109763 108486 6 108469 108467 108304 108306 108471 109094 6 108470 108306 108472 108476 109094 108473 6 108471 108306 108307 108308 108309 108473 6 108472 108309 108310 108474 108476 108471 6 108473 108310 108311 108312 108475 108476 6 108474 108312 108476 108477 108478 108313 7 108474 108475 108477 108485 109094 108471 108473 6 108476 108475 108478 108483 108484 108485 6 108477 108475 108313 108479 108483 108482 6 108478 108313 108314 108480 108482 108481 6 108479 108314 108315 108316 108317 108481 6 108480 108317 107708 107709 108482 108479 7 108481 107709 107710 107713 108483 108478 108479 5 108482 107713 108484 108477 108478 6 108483 107713 107714 108477 108485 108486 6 108477 108484 108486 108469 109094 108476 6 108485 108484 109765 109763 108469 107714 5 108466 107963 108488 108573 108465 7 108487 107963 107964 107965 108489 108573 108574 5 108488 107965 107966 108490 108574 7 108489 107966 107967 108491 108492 108574 108575 6 108490 107967 108492 108493 107969 107968 5 108490 108491 108493 108575 108576 6 108492 108491 107969 108494 108576 108577 6 108493 107969 107970 108495 108577 108578 6 108494 107970 107971 108496 108578 108579 6 108495 107971 107974 108497 108498 108579 6 108496 107974 108498 108499 108500 107975 6 108496 108497 108499 108579 108580 108581 6 108498 108497 108500 108581 108582 108501 6 108499 108497 107975 107981 107983 108501 6 108500 107983 108502 108582 108499 108583 6 108501 107983 107984 108503 108586 108583 6 108502 107984 108504 108527 108586 108526 6 108503 107984 107985 108505 108526 108588 6 108504 107985 108506 108588 108513 108589 6 108505 107985 107986 107993 108507 108589 6 108506 107993 107994 107997 108508 108589 6 108507 107997 107998 108509 108513 108589 6 108508 107998 108510 108511 108512 108513 6 108509 107998 107999 108000 108001 108511 6 108509 108510 108512 108521 108522 108001 6 108509 108511 108513 108514 108515 108521 7 108509 108512 108514 108588 108505 108589 108508 6 108513 108512 108515 108516 108526 108588 6 108514 108512 108516 108517 108520 108521 6 108514 108515 108517 108518 108524 108526 6 108516 108515 108518 108519 108004 108520 6 108516 108517 108519 108524 108525 108531 6 108518 108517 108004 108541 108539 108531 6 108004 108517 108003 108515 108521 108523 6 108520 108515 108512 108511 108522 108523 5 108521 108511 108001 108002 108523 5 108522 108002 108521 108520 108003 6 108516 108518 108525 108526 108527 108528 6 108524 108518 108528 108529 108530 108531 7 108516 108524 108527 108503 108504 108588 108514 5 108526 108524 108528 108586 108503 6 108527 108524 108525 108529 108587 108586 6 108528 108525 108530 108602 108587 108603 6 108529 108525 108531 108532 108533 108603 6 108530 108525 108532 108519 108539 108518 6 108530 108531 108533 108534 108538 108539 6 108530 108532 108534 108535 108603 108604 6 108533 108532 108535 108536 108537 108538 6 108533 108534 108536 108604 108605 108606 6 108535 108534 108537 108606 108607 108608 6 108536 108534 108538 108608 108609 108010 6 108537 108534 108532 108539 108540 108010 6 108538 108532 108540 108541 108519 108531 6 108538 108539 108541 108010 108610 108006 6 108540 108539 108519 108006 108005 108004 6 108430 108431 108543 108690 108691 108692 6 108542 108431 108544 108692 108693 108694 6 108543 108431 108432 108433 108545 108694 6 108544 108433 108546 108694 108695 108547 5 108545 108433 108434 108435 108547 6 108546 108435 108548 108695 108545 108696 6 108547 108435 108436 108549 108696 108697 6 108548 108436 108437 108550 108697 108698 6 108549 108437 108439 108551 108698 108552 5 108550 108439 108440 108442 108552 7 108551 108442 108553 108698 108550 108699 108700 6 108552 108442 108443 108554 108700 108701 6 108553 108443 108555 108701 108702 108703 6 108554 108443 108444 108448 108556 108703 6 108555 108448 108449 108557 108703 108704 6 108556 108449 108450 108558 108704 108705 6 108557 108450 108451 108559 108705 108706 6 108558 108451 108560 108706 108707 108708 5 108559 108451 108452 108561 108708 6 108560 108452 108453 108454 108562 108708 6 108561 108454 108455 108563 108708 108709 6 108562 108455 108564 108709 108710 108711 6 108563 108455 108456 108565 108711 108712 7 108564 108456 108457 108459 108566 108712 108713 5 108565 108459 108567 108713 108714 6 108566 108459 108460 108568 108714 108715 6 108567 108460 108569 108715 108716 108717 6 108568 108460 108461 108462 108570 108717 7 108569 108462 108463 108571 108590 108592 108717 5 108570 108463 108464 108572 108590 7 108571 108464 108573 108574 108575 108576 108590 6 108572 108464 108465 108487 108488 108574 6 108573 108488 108489 108490 108575 108572 5 108574 108490 108492 108576 108572 7 108575 108492 108493 108577 108572 108590 108591 6 108576 108493 108494 108578 108594 108591 6 108577 108494 108495 108579 108594 108595 6 108578 108495 108496 108498 108580 108595 6 108579 108498 108581 108595 108596 108597 6 108580 108498 108499 108582 108597 108598 6 108581 108499 108501 108583 108584 108598 6 108582 108501 108584 108585 108586 108502 6 108582 108583 108585 108598 108599 108600 6 108584 108583 108586 108587 108600 108601 7 108585 108583 108587 108528 108527 108503 108502 6 108585 108586 108528 108601 108602 108529 5 108526 108504 108505 108513 108514 5 108513 108505 108506 108508 108507 6 108572 108576 108591 108571 108570 108592 6 108590 108576 108592 108593 108594 108577 5 108570 108590 108591 108593 108717 7 108592 108591 108594 108717 108716 108718 108719 6 108593 108591 108577 108578 108595 108719 7 108594 108578 108579 108580 108596 108719 108720 6 108595 108580 108597 108720 108721 108722 6 108596 108580 108581 108598 108722 108723 6 108597 108581 108582 108584 108599 108723 6 108598 108584 108600 108723 108724 108725 6 108599 108584 108585 108601 108725 108726 6 108600 108585 108587 108602 108726 108727 5 108601 108587 108529 108603 108727 6 108602 108529 108530 108533 108604 108727 6 108603 108533 108535 108605 108727 108728 6 108604 108535 108606 108728 108731 108732 6 108605 108535 108536 108607 108611 108732 6 108606 108536 108608 108611 108015 108014 6 108607 108536 108537 108609 108014 108013 5 108608 108537 108010 108013 108011 5 108010 108540 108008 108007 108006 6 108606 108607 108015 108016 108612 108732 6 108611 108016 108017 108613 108732 108733 6 108612 108017 108614 108733 108734 108735 6 108613 108017 108018 108615 108616 108735 6 108614 108018 108019 108616 108617 108618 6 108614 108615 108617 108735 108736 108737 6 108616 108615 108618 108737 108738 108739 6 108617 108615 108019 108619 108739 108742 6 108618 108019 108020 108022 108620 108742 6 108619 108022 108024 108621 108624 108742 6 108620 108024 108028 108622 108623 108624 6 108621 108028 108623 108627 108628 108029 6 108621 108622 108624 108625 108626 108627 6 108621 108623 108625 108741 108742 108620 6 108624 108623 108626 108837 108741 108838 6 108625 108623 108627 108838 108839 108840 6 108626 108623 108622 108628 108840 108841 6 108627 108622 108029 108629 108841 108842 6 108628 108029 108030 108033 108630 108842 6 108629 108033 108631 108842 108843 108844 6 108630 108033 108034 108632 108633 108844 6 108631 108034 108633 108634 108635 108035 6 108631 108632 108634 108844 108845 108846 6 108633 108632 108635 108636 108637 108846 6 108634 108632 108636 108640 107761 108035 6 108634 108635 108637 108638 108639 108640 6 108634 108636 108638 108846 108848 108849 6 108637 108636 108639 108849 108850 108851 6 108638 108636 108640 108851 108852 107762 5 108639 108636 108635 107761 107762 6 108382 108383 108642 108743 108744 108745 6 108641 108383 108384 108643 108745 108746 6 108642 108384 108385 108386 108644 108746 6 108643 108386 108645 108746 108747 108748 6 108644 108386 108387 108646 108748 108749 6 108645 108387 108388 108647 108749 108750 6 108646 108388 108389 108648 108750 108751 6 108647 108389 108390 108649 108751 108752 6 108648 108390 108650 108752 108753 108754 5 108649 108390 108391 108651 108754 6 108650 108391 108392 108393 108652 108754 6 108651 108393 108653 108754 108755 108756 6 108652 108393 108394 108654 108756 108757 6 108653 108394 108395 108396 108655 108757 6 108654 108396 108397 108656 108757 108758 7 108655 108397 108398 108657 108758 108759 108760 5 108656 108398 108399 108658 108760 7 108657 108399 108400 108659 108760 108761 108762 5 108658 108400 108401 108660 108762 8 108659 108401 108402 108403 108404 108661 108762 108763 5 108660 108404 108662 108763 108764 6 108661 108404 108405 108406 108663 108764 6 108662 108406 108407 108664 108764 108765 6 108663 108407 108665 108765 108766 108767 5 108664 108407 108408 108666 108767 6 108665 108408 108409 108667 108767 108768 6 108666 108409 108668 108768 108769 108770 6 108667 108409 108410 108411 108669 108770 6 108668 108411 108412 108670 108770 108771 6 108669 108412 108413 108671 108771 108772 6 108670 108413 108414 108672 108772 108773 6 108671 108414 108415 108673 108773 108774 6 108672 108415 108416 108674 108774 108775 6 108673 108416 108675 108775 108776 108777 6 108674 108416 108417 108418 108676 108777 6 108675 108418 108419 108677 108777 108778 6 108676 108419 108420 108678 108778 108779 6 108677 108420 108421 108679 108779 108780 6 108678 108421 108422 108680 108780 108781 6 108679 108422 108423 108681 108781 108782 6 108680 108423 108682 108782 108783 108684 6 108681 108423 108424 108425 108683 108684 6 108682 108425 108684 108685 108686 108687 5 108682 108683 108685 108783 108681 6 108684 108683 108686 108783 108784 108785 6 108685 108683 108687 108785 108786 108787 7 108686 108683 108425 108426 108427 108688 108787 5 108687 108427 108689 108787 108788 6 108688 108427 108428 108690 108788 108789 7 108689 108428 108429 108430 108542 108691 108789 6 108690 108542 108692 108789 108790 108791 5 108691 108542 108543 108693 108791 7 108692 108543 108694 108791 108792 108793 108794 6 108693 108543 108544 108545 108695 108794 6 108694 108545 108547 108696 108794 108795 7 108695 108547 108548 108697 108795 108796 108797 6 108696 108548 108549 108698 108797 108798 6 108697 108549 108550 108552 108699 108798 6 108698 108552 108700 108798 108799 108800 6 108699 108552 108553 108701 108800 108803 6 108700 108553 108554 108702 108803 108804 6 108701 108554 108703 108804 108805 108806 6 108702 108554 108555 108556 108704 108806 6 108703 108556 108557 108705 108806 108807 6 108704 108557 108558 108706 108807 108808 6 108705 108558 108559 108707 108808 108809 6 108706 108559 108708 108809 108810 108811 7 108707 108559 108560 108561 108562 108709 108811 5 108708 108562 108563 108710 108811 7 108709 108563 108711 108811 108812 108813 108814 6 108710 108563 108564 108712 108814 108815 6 108711 108564 108565 108713 108815 108816 5 108712 108565 108566 108714 108816 7 108713 108566 108567 108715 108816 108817 108818 6 108714 108567 108568 108716 108818 108819 6 108715 108568 108717 108593 108718 108819 6 108716 108568 108569 108570 108592 108593 6 108716 108593 108719 108819 108820 108720 5 108718 108593 108594 108595 108720 6 108719 108595 108596 108721 108820 108718 6 108720 108596 108722 108820 108821 108822 5 108721 108596 108597 108723 108822 6 108722 108597 108598 108599 108724 108822 6 108723 108599 108725 108822 108823 108824 6 108724 108599 108600 108726 108824 108825 6 108725 108600 108601 108727 108825 108729 7 108726 108601 108602 108603 108604 108728 108729 6 108727 108604 108605 108729 108730 108731 5 108727 108728 108730 108825 108726 6 108729 108728 108731 108825 108827 108828 6 108730 108728 108605 108732 108828 108829 7 108731 108605 108606 108611 108612 108733 108829 6 108732 108612 108613 108734 108830 108829 6 108733 108613 108735 108830 108831 108736 5 108734 108613 108614 108616 108736 6 108735 108616 108737 108831 108734 108832 6 108736 108616 108617 108738 108832 108833 6 108737 108617 108739 108740 108833 108834 6 108738 108617 108618 108740 108741 108742 6 108738 108739 108741 108834 108835 108836 7 108740 108739 108742 108624 108836 108837 108625 6 108741 108739 108624 108620 108619 108618 6 108381 108382 108641 108744 108931 108932 5 108743 108641 108745 108932 108933 6 108744 108641 108642 108746 108933 108934 6 108745 108642 108643 108644 108747 108934 6 108746 108644 108748 108934 108935 108936 6 108747 108644 108645 108749 108936 108937 6 108748 108645 108646 108750 108937 108938 6 108749 108646 108647 108751 108938 108939 6 108750 108647 108648 108752 108939 108940 6 108751 108648 108649 108753 108940 108941 6 108752 108649 108754 108941 108942 108943 7 108753 108649 108650 108651 108652 108755 108943 5 108754 108652 108756 108943 108944 6 108755 108652 108653 108757 108944 108945 6 108756 108653 108654 108655 108758 108945 7 108757 108655 108656 108759 108945 108946 108947 5 108758 108656 108760 108947 108948 6 108759 108656 108657 108658 108761 108948 6 108760 108658 108762 108948 108949 108950 6 108761 108658 108659 108660 108763 108950 5 108762 108660 108661 108764 108950 7 108763 108661 108662 108663 108765 108950 108951 6 108764 108663 108664 108766 108951 108952 6 108765 108664 108767 108952 108953 108954 6 108766 108664 108665 108666 108768 108954 6 108767 108666 108667 108769 108954 108955 6 108768 108667 108770 108955 108956 108957 6 108769 108667 108668 108669 108771 108957 6 108770 108669 108670 108772 108957 108958 6 108771 108670 108671 108773 108958 108959 6 108772 108671 108672 108774 108959 108960 6 108773 108672 108673 108775 108960 108961 6 108774 108673 108674 108776 108961 108962 6 108775 108674 108777 108962 108963 108964 6 108776 108674 108675 108676 108778 108964 6 108777 108676 108677 108779 108964 108965 6 108778 108677 108678 108780 108965 108966 6 108779 108678 108679 108781 108966 108967 6 108780 108679 108680 108782 108967 108968 6 108781 108680 108681 108783 108968 108969 6 108782 108681 108684 108685 108784 108969 6 108783 108685 108785 108969 108970 108971 6 108784 108685 108686 108786 108971 108972 6 108785 108686 108787 108972 108973 108974 6 108786 108686 108687 108688 108788 108974 6 108787 108688 108689 108789 108974 108975 6 108788 108689 108690 108691 108790 108975 6 108789 108691 108791 108975 108976 108977 6 108790 108691 108692 108693 108792 108977 6 108791 108693 108793 108977 108978 108979 6 108792 108693 108794 108979 108980 108795 5 108793 108693 108694 108695 108795 6 108794 108695 108696 108796 108980 108793 6 108795 108696 108797 108980 108981 108982 6 108796 108696 108697 108798 108982 108799 5 108797 108697 108698 108699 108799 6 108798 108699 108800 108801 108982 108797 6 108799 108699 108700 108801 108802 108803 6 108799 108800 108802 108982 108983 108984 6 108801 108800 108803 108984 108985 108986 6 108802 108800 108700 108701 108804 108986 6 108803 108701 108702 108805 108986 108987 6 108804 108702 108806 108987 108988 108989 6 108805 108702 108703 108704 108807 108989 6 108806 108704 108705 108808 108989 108990 7 108807 108705 108706 108809 108992 108990 108993 5 108808 108706 108707 108810 108993 6 108809 108707 108811 108993 108994 108812 6 108810 108707 108708 108709 108710 108812 6 108811 108710 108813 108994 108810 108995 6 108812 108710 108814 108995 108996 108997 6 108813 108710 108711 108815 108997 108998 5 108814 108711 108712 108816 108998 7 108815 108712 108713 108714 108817 108998 108999 6 108816 108714 108818 108999 109000 109001 6 108817 108714 108715 108819 109001 109002 6 108818 108715 108716 108718 108820 109002 6 108819 108718 108720 108721 108821 109002 6 108820 108721 108822 109002 109003 108823 6 108821 108721 108722 108723 108724 108823 6 108822 108724 108824 109003 108821 109004 6 108823 108724 108725 108825 108826 109004 7 108824 108725 108726 108729 108730 108826 108827 6 108824 108825 108827 109004 109005 109006 6 108826 108825 108730 108828 109012 109006 6 108827 108730 108731 108829 108830 109012 5 108828 108731 108830 108733 108732 7 108828 108829 108733 108734 108831 109011 109012 6 108830 108734 108736 108832 109013 109011 7 108831 108736 108737 108833 109013 109014 109015 6 108832 108737 108738 108834 109015 109016 6 108833 108738 108740 108835 109016 109017 6 108834 108740 108836 109017 109018 109019 6 108835 108740 108741 108837 109019 109020 5 108836 108741 108625 108838 109020 6 108837 108625 108626 108839 109020 109021 6 108838 108626 108840 109021 109022 109023 6 108839 108626 108627 108841 109023 109024 6 108840 108627 108628 108842 109024 109025 6 108841 108628 108629 108630 108843 109025 6 108842 108630 108844 109025 109026 109030 6 108843 108630 108631 108633 108845 109030 6 108844 108633 108846 108847 109031 109030 6 108845 108633 108634 108637 108847 108848 6 108845 108846 108848 109031 109032 109033 6 108847 108846 108637 108849 109042 109033 6 108848 108637 108638 108850 109043 109042 6 108849 108638 108851 109043 109044 109045 6 108850 108638 108639 108852 109045 109048 6 108851 108639 107762 107763 108853 109048 6 108852 107763 107765 108319 108854 109048 6 108853 108319 108321 108855 109047 109048 6 108854 108321 108856 109047 109049 109050 5 108855 108321 108323 108857 109050 7 108856 108323 108324 108328 108858 109050 108860 6 108857 108328 108329 108330 108859 108860 6 108858 108330 108860 108861 108862 108331 6 108858 108859 108861 109050 108857 109051 6 108860 108859 108862 108863 109051 109052 6 108861 108859 108863 108864 108865 108331 6 108861 108862 108864 108877 109058 109052 6 108863 108862 108865 108866 108877 108878 6 108864 108862 108866 108333 108332 108331 6 108864 108865 108333 108867 108878 108879 6 108866 108333 108334 108335 108868 108879 6 108867 108335 108869 108879 108880 108871 6 108868 108335 108336 108338 108870 108871 6 108869 108338 108871 108872 108873 108874 6 108869 108870 108872 108894 108880 108868 6 108871 108870 108873 108896 108894 108897 6 108872 108870 108874 108897 108898 108902 6 108873 108870 108338 108339 108875 108902 6 108874 108339 108347 108902 108349 108348 6 108346 108340 108341 108342 108344 108345 5 108863 108864 108878 109058 108882 6 108877 108864 108866 108879 108881 108882 6 108878 108866 108867 108868 108880 108881 6 108879 108868 108881 108893 108894 108871 6 108879 108880 108878 108882 108883 108893 6 108878 108881 108883 108884 109058 108877 6 108882 108881 108884 108885 108892 108893 6 108882 108883 108885 108886 108887 109058 6 108884 108883 108886 108890 108891 108892 6 108884 108885 108887 108888 108889 108890 6 108884 108886 108888 109058 109057 109059 6 108887 108886 108889 109059 109060 109061 6 108888 108886 108890 109061 109062 109063 6 108889 108886 108885 108891 109063 109064 6 108890 108885 108892 109064 109065 109066 6 108891 108885 108883 108893 109066 108895 6 108892 108883 108881 108880 108894 108895 6 108893 108880 108895 108896 108872 108871 6 108893 108894 108896 109066 108892 109067 6 108895 108894 108872 108897 109067 109068 6 108896 108872 108873 108898 108899 109068 6 108897 108873 108899 108900 108901 108902 6 108897 108898 108900 109068 109069 109070 6 108899 108898 108901 109070 109071 108903 6 108900 108898 108902 108349 108350 108903 6 108901 108898 108873 108874 108875 108349 6 108901 108350 108351 108904 109071 108900 6 108903 108351 108905 109071 109072 109073 6 108904 108351 108352 108906 109073 109074 6 108905 108352 108353 108907 109074 109075 6 108906 108353 108354 108908 109075 109076 6 108907 108354 108909 109076 109077 108911 6 108908 108354 108355 108357 108910 108911 6 108909 108357 108911 108912 108360 108359 6 108909 108910 108912 109077 108908 109078 6 108911 108910 108360 108913 109078 109079 6 108912 108360 108361 108914 108915 109079 6 108913 108361 108362 108915 108916 108363 6 108913 108914 108916 109079 109080 109081 6 108915 108914 108363 108917 109081 109082 6 108916 108363 108364 108918 109082 109083 6 108917 108364 108365 108919 109083 109084 6 108918 108365 108366 108920 109093 109084 6 108919 108366 108367 108921 109093 109100 6 108920 108367 108368 108922 109100 109101 6 108921 108368 108369 108923 109101 109102 6 108922 108369 108370 108924 109102 109103 6 108923 108370 108925 109103 109104 109105 6 108924 108370 108371 108926 109105 109106 6 108925 108371 108372 108374 108927 109106 6 108926 108374 108928 109106 109107 108931 6 108927 108374 108375 108929 108931 108930 6 108928 108375 108376 108377 108379 108930 5 108929 108379 108380 108931 108928 8 108930 108380 108381 108743 108932 109107 108927 108928 5 108931 108743 108744 108933 109107 8 108932 108744 108745 108934 109107 109106 109105 109108 6 108933 108745 108746 108747 108935 109108 6 108934 108747 108936 109108 109109 109110 6 108935 108747 108748 108937 109110 109111 6 108936 108748 108749 108938 109111 109112 6 108937 108749 108750 108939 109112 109113 6 108938 108750 108751 108940 109113 109114 6 108939 108751 108752 108941 109114 109115 6 108940 108752 108753 108942 109115 109116 6 108941 108753 108943 109116 109117 108944 5 108942 108753 108754 108755 108944 7 108943 108755 108756 108945 109117 108942 109118 7 108944 108756 108757 108758 108946 109118 109119 5 108945 108758 108947 109119 109120 6 108946 108758 108759 108948 109120 109121 7 108947 108759 108760 108761 108949 109121 109122 6 108948 108761 108950 109122 109123 108951 6 108949 108761 108762 108763 108764 108951 6 108950 108764 108765 108952 109123 108949 6 108951 108765 108766 108953 109123 109124 6 108952 108766 108954 109124 109125 109126 6 108953 108766 108767 108768 108955 109126 6 108954 108768 108769 108956 109126 109127 6 108955 108769 108957 109127 109128 109129 6 108956 108769 108770 108771 108958 109129 6 108957 108771 108772 108959 109129 109130 6 108958 108772 108773 108960 109130 109131 6 108959 108773 108774 108961 109131 109132 6 108960 108774 108775 108962 109132 109133 6 108961 108775 108776 108963 109133 109134 6 108962 108776 108964 109134 109135 109136 6 108963 108776 108777 108778 108965 109136 6 108964 108778 108779 108966 109136 109137 6 108965 108779 108780 108967 109137 109138 6 108966 108780 108781 108968 109138 109139 6 108967 108781 108782 108969 109139 109140 7 108968 108782 108783 108784 108970 109140 109141 5 108969 108784 108971 109141 109142 7 108970 108784 108785 108972 109142 109143 109144 6 108971 108785 108786 108973 109144 109145 6 108972 108786 108974 109145 109146 109147 6 108973 108786 108787 108788 108975 109147 6 108974 108788 108789 108790 108976 109147 6 108975 108790 108977 109147 109148 109149 6 108976 108790 108791 108792 108978 109149 6 108977 108792 108979 109149 109150 109151 6 108978 108792 108793 108980 109151 109152 6 108979 108793 108795 108796 108981 109152 6 108980 108796 108982 109152 109153 108983 6 108981 108796 108797 108799 108801 108983 6 108982 108801 108984 109153 108981 109154 6 108983 108801 108802 108985 109154 109155 6 108984 108802 108986 109155 109156 109157 7 108985 108802 108803 108804 108987 109157 109158 5 108986 108804 108805 108988 109158 7 108987 108805 108989 108990 108991 109158 109159 5 108988 108805 108806 108807 108990 6 108989 108807 108988 108991 108992 108808 6 108988 108990 108992 109159 109160 109161 6 108991 108990 108808 108993 109164 109161 6 108992 108808 108809 108810 108994 109164 6 108993 108810 108812 108995 109164 109165 7 108994 108812 108813 108996 109165 109167 109168 5 108995 108813 108997 109168 109169 6 108996 108813 108814 108998 109169 109170 7 108997 108814 108815 108816 108999 109170 109171 5 108998 108816 108817 109000 109171 6 108999 108817 109001 109171 109172 109173 6 109000 108817 108818 109002 109173 109003 6 109001 108818 108819 108820 108821 109003 6 109002 108821 108823 109004 109173 109001 6 109003 108823 108824 108826 109005 109173 6 109004 108826 109006 109007 109008 109173 6 109005 108826 109007 109011 109012 108827 6 109005 109006 109008 109009 109010 109011 6 109005 109007 109009 109173 109172 109174 5 109008 109007 109010 109174 109177 6 109009 109007 109011 109013 109177 109014 7 109010 109007 109006 109012 109013 108831 108830 5 109011 109006 108830 108828 108827 5 109010 109011 108831 108832 109014 6 109013 108832 109015 109177 109010 109178 6 109014 108832 108833 109016 109181 109178 5 109015 108833 108834 109017 109181 7 109016 108834 108835 109018 109181 109182 109188 6 109017 108835 109019 109188 109189 109190 6 109018 108835 108836 109020 109190 109191 6 109019 108836 108837 108838 109021 109191 6 109020 108838 108839 109022 109191 109192 6 109021 108839 109023 109192 109195 109196 6 109022 108839 108840 109024 109196 109197 6 109023 108840 108841 109025 109197 109027 6 109024 108841 108842 108843 109026 109027 6 109025 108843 109027 109028 109029 109030 6 109025 109026 109028 109197 109024 109198 6 109027 109026 109029 109198 109199 109203 5 109028 109026 109030 109031 109203 6 109029 109026 108843 109031 108845 108844 7 109029 109030 108845 108847 109032 109203 109204 6 109031 108847 109033 109034 109204 109205 6 109032 108847 109034 109035 109042 108848 6 109032 109033 109035 109036 109037 109205 6 109034 109033 109036 109040 109041 109042 6 109034 109035 109037 109038 109039 109040 6 109034 109036 109038 109205 109206 109207 6 109037 109036 109039 109207 109208 109209 6 109038 109036 109040 109209 109062 109061 6 109039 109036 109035 109041 109061 109060 6 109040 109035 109042 109043 109060 109210 6 109041 109035 109033 108848 109043 108849 6 109041 109042 108849 108850 109044 109210 7 109043 108850 109045 109046 109055 109056 109210 6 109044 108850 108851 109046 109047 109048 6 109044 109045 109047 109053 109055 109049 6 109046 109045 109048 108854 108855 109049 6 109047 109045 108851 108854 108853 108852 6 109047 108855 109050 109051 109053 109046 6 109049 108855 108856 108857 108860 109051 6 109050 108860 108861 109052 109053 109049 6 109051 108861 109053 109054 109058 108863 6 109051 109052 109054 109055 109046 109049 6 109053 109052 109055 109056 109057 109058 5 109053 109054 109046 109044 109056 6 109044 109055 109054 109057 109059 109210 5 109056 109054 109058 108887 109059 8 109057 109054 109052 108863 108877 108882 108884 108887 6 109057 108887 108888 109060 109210 109056 6 109059 108888 109061 109040 109041 109210 6 109060 108888 108889 109062 109039 109040 6 109061 108889 109063 109209 109039 109211 6 109062 108889 108890 109064 109211 109212 6 109063 108890 108891 109065 109212 109213 6 109064 108891 109066 109213 109214 109215 6 109065 108891 108892 108895 109067 109215 6 109066 108895 108896 109068 109215 109216 6 109067 108896 108897 108899 109069 109216 6 109068 108899 109070 109216 109217 109218 6 109069 108899 108900 109071 109218 109219 7 109070 108900 108903 108904 109072 109219 109220 5 109071 108904 109073 109220 109221 7 109072 108904 108905 109074 109221 109222 109223 6 109073 108905 108906 109075 109223 109225 6 109074 108906 108907 109076 109225 109226 5 109075 108907 108908 109077 109226 7 109076 108908 108911 109078 109226 109227 109228 5 109077 108911 108912 109079 109228 6 109078 108912 108913 108915 109080 109228 6 109079 108915 109081 109228 109229 109230 6 109080 108915 108916 109082 109230 109231 6 109081 108916 108917 109083 109231 109232 6 109082 108917 108918 109084 109085 109232 6 109083 108918 109085 109086 109093 108919 6 109083 109084 109086 109087 109232 109233 6 109085 109084 109087 109088 109092 109093 6 109085 109086 109088 109089 109233 109234 6 109087 109086 109089 109090 109091 109092 6 109087 109088 109090 109095 109234 109235 6 109089 109088 109091 109095 109096 109097 6 109090 109088 109092 109097 109098 109099 6 109091 109088 109086 109093 109099 109100 6 109092 109086 109084 108919 108920 109100 5 108469 108470 108485 108476 108471 6 109089 109090 109096 109235 109236 109237 6 109095 109090 109097 109237 109238 109239 6 109096 109090 109091 109098 109239 109240 6 109097 109091 109099 109240 109241 109242 6 109098 109091 109092 109100 109242 109101 6 109099 109092 109093 108920 108921 109101 6 109100 108921 108922 109102 109242 109099 6 109101 108922 108923 109103 109242 109243 6 109102 108923 108924 109104 109243 109244 6 109103 108924 109105 109109 109244 109108 6 109104 108924 108925 109106 108933 109108 6 109105 108925 108926 108927 109107 108933 5 109106 108927 108931 108932 108933 6 109105 108933 108934 108935 109109 109104 5 109108 108935 109110 109244 109104 7 109109 108935 108936 109111 109245 109244 109348 6 109110 108936 108937 109112 109350 109348 5 109111 108937 108938 109113 109350 6 109112 108938 108939 109114 109350 109351 6 109113 108939 108940 109115 109351 109352 6 109114 108940 108941 109116 109352 109353 6 109115 108941 108942 109117 109246 109353 6 109116 108942 108944 109118 109246 109247 6 109117 108944 108945 109119 109247 109248 5 109118 108945 108946 109120 109248 7 109119 108946 108947 109121 109248 109249 109250 6 109120 108947 108948 109122 109250 109251 5 109121 108948 108949 109123 109251 6 109122 108949 108951 108952 109124 109251 6 109123 108952 108953 109125 109251 109252 6 109124 108953 109126 109252 109253 109254 6 109125 108953 108954 108955 109127 109254 6 109126 108955 108956 109128 109254 109255 6 109127 108956 109129 109255 109256 109257 6 109128 108956 108957 108958 109130 109257 6 109129 108958 108959 109131 109257 109258 6 109130 108959 108960 109132 109258 109259 6 109131 108960 108961 109133 109259 109260 6 109132 108961 108962 109134 109260 109261 6 109133 108962 108963 109135 109261 109262 6 109134 108963 109136 109262 109263 109264 6 109135 108963 108964 108965 109137 109264 6 109136 108965 108966 109138 109264 109265 6 109137 108966 108967 109139 109265 109266 6 109138 108967 108968 109140 109266 109267 6 109139 108968 108969 109141 109267 109268 5 109140 108969 108970 109142 109268 7 109141 108970 108971 109143 109268 109269 109270 6 109142 108971 109144 109270 109271 109272 5 109143 108971 108972 109145 109272 6 109144 108972 108973 109146 109272 109273 6 109145 108973 109147 109273 109274 109148 6 109146 108973 108974 108975 108976 109148 6 109147 108976 109149 109274 109146 109275 6 109148 108976 108977 108978 109150 109275 6 109149 108978 109151 109275 109276 109277 6 109150 108978 108979 109152 109277 109278 7 109151 108979 108980 108981 109153 109278 109279 6 109152 108981 108983 109154 109279 109280 6 109153 108983 108984 109155 109280 109281 6 109154 108984 108985 109156 109281 109282 6 109155 108985 109157 109282 109283 109284 6 109156 108985 108986 109158 109284 109285 6 109157 108986 108987 108988 109159 109285 6 109158 108988 108991 109160 109285 109286 6 109159 108991 109161 109162 109286 109287 6 109160 108991 109162 109163 109164 108992 6 109160 109161 109163 109287 109288 109289 6 109162 109161 109164 109165 109166 109289 6 109163 109161 108992 108993 108994 109165 6 109164 108994 108995 109163 109166 109167 6 109163 109165 109167 109289 109290 109186 6 109166 109165 108995 109168 109186 109185 6 109167 108995 108996 109169 109185 109184 7 109168 108996 108997 109170 109184 109179 109176 6 109169 108997 108998 109171 109176 109175 6 109170 108998 108999 109000 109172 109175 6 109171 109000 109173 109008 109174 109175 7 109172 109000 109001 109003 109004 109005 109008 6 109172 109008 109009 109175 109176 109177 5 109172 109174 109176 109170 109171 6 109175 109174 109177 109179 109169 109170 7 109176 109174 109009 109010 109014 109178 109179 6 109177 109014 109179 109180 109181 109015 6 109177 109178 109180 109184 109169 109176 6 109179 109178 109181 109182 109183 109184 6 109180 109178 109015 109016 109017 109182 6 109181 109017 109180 109183 109187 109188 6 109180 109182 109184 109185 109186 109187 6 109180 109183 109185 109168 109169 109179 5 109184 109183 109186 109167 109168 6 109185 109183 109187 109290 109166 109167 6 109186 109183 109182 109188 109290 109291 6 109187 109182 109017 109018 109189 109291 5 109188 109018 109190 109291 109292 6 109189 109018 109019 109191 109292 109193 6 109190 109019 109020 109021 109192 109193 6 109191 109021 109022 109193 109194 109195 6 109191 109192 109194 109292 109190 109293 6 109193 109192 109195 109293 109294 109295 6 109194 109192 109022 109196 109295 109296 6 109195 109022 109023 109197 109302 109296 7 109196 109023 109024 109027 109198 109302 109303 6 109197 109027 109028 109199 109200 109303 6 109198 109028 109200 109201 109202 109203 6 109198 109199 109201 109303 109301 109304 6 109200 109199 109202 109304 109305 109306 6 109201 109199 109203 109306 109307 109204 6 109202 109199 109028 109029 109031 109204 7 109203 109031 109032 109205 109307 109202 109206 5 109204 109032 109034 109037 109206 6 109205 109037 109207 109307 109204 109308 6 109206 109037 109038 109208 109308 109309 6 109207 109038 109209 109309 109310 109314 6 109208 109038 109039 109062 109211 109314 6 109060 109041 109043 109059 109056 109044 6 109209 109062 109063 109212 109314 109315 6 109211 109063 109064 109213 109315 109316 6 109212 109064 109065 109214 109319 109316 6 109213 109065 109215 109319 109320 109321 6 109214 109065 109066 109067 109216 109321 6 109215 109067 109068 109069 109217 109321 7 109216 109069 109218 109321 109320 109322 109323 5 109217 109069 109070 109219 109323 7 109218 109070 109071 109220 109323 109324 109325 5 109219 109071 109072 109221 109325 7 109220 109072 109073 109222 109325 109326 109327 6 109221 109073 109223 109224 109327 109328 5 109222 109073 109074 109224 109225 6 109222 109223 109225 109328 109329 109330 6 109224 109223 109074 109075 109226 109330 7 109225 109075 109076 109077 109227 109330 109331 6 109226 109077 109228 109331 109332 109229 6 109227 109077 109078 109079 109080 109229 7 109228 109080 109230 109332 109227 109333 109334 6 109229 109080 109081 109231 109334 109335 6 109230 109081 109082 109232 109335 109336 7 109231 109082 109083 109085 109233 109336 109337 5 109232 109085 109087 109234 109337 7 109233 109087 109089 109235 109337 109338 109339 5 109234 109089 109095 109236 109339 7 109235 109095 109237 109339 109340 109341 109342 6 109236 109095 109096 109238 109342 109343 6 109237 109096 109239 109343 109344 109345 6 109238 109096 109097 109240 109345 109346 6 109239 109097 109098 109241 109346 109347 6 109240 109098 109242 109347 109245 109243 6 109241 109098 109099 109101 109102 109243 6 109242 109102 109103 109244 109245 109241 6 109243 109103 109245 109110 109109 109104 6 109243 109244 109110 109347 109241 109348 6 109116 109117 109247 109353 109354 109355 6 109246 109117 109118 109248 109355 109356 6 109247 109118 109119 109120 109249 109356 6 109248 109120 109250 109356 109357 109358 6 109249 109120 109121 109251 109358 109252 6 109250 109121 109122 109123 109124 109252 7 109251 109124 109125 109253 109358 109250 109359 5 109252 109125 109254 109359 109360 7 109253 109125 109126 109127 109255 109360 109361 6 109254 109127 109128 109256 109361 109362 6 109255 109128 109257 109362 109363 109364 6 109256 109128 109129 109130 109258 109364 7 109257 109130 109131 109259 109364 109365 109366 6 109258 109131 109132 109260 109366 109367 6 109259 109132 109133 109261 109367 109368 6 109260 109133 109134 109262 109368 109369 6 109261 109134 109135 109263 109369 109370 6 109262 109135 109264 109370 109371 109372 6 109263 109135 109136 109137 109265 109372 6 109264 109137 109138 109266 109372 109373 6 109265 109138 109139 109267 109373 109374 6 109266 109139 109140 109268 109374 109375 7 109267 109140 109141 109142 109269 109375 109376 5 109268 109142 109270 109376 109377 6 109269 109142 109143 109271 109377 109381 6 109270 109143 109272 109381 109382 109383 6 109271 109143 109144 109145 109273 109383 6 109272 109145 109146 109274 109383 109384 6 109273 109146 109148 109275 109384 109385 7 109274 109148 109149 109150 109276 109385 109386 5 109275 109150 109277 109386 109388 6 109276 109150 109151 109278 109388 109389 6 109277 109151 109152 109279 109389 109390 6 109278 109152 109153 109280 109390 109391 5 109279 109153 109154 109281 109391 6 109280 109154 109155 109282 109393 109391 6 109281 109155 109156 109283 109393 109394 6 109282 109156 109284 109394 109395 109396 6 109283 109156 109157 109285 109396 109397 6 109284 109157 109158 109159 109286 109397 6 109285 109159 109160 109287 109397 109398 5 109286 109160 109162 109288 109398 7 109287 109162 109289 109398 109399 109400 109401 6 109288 109162 109163 109166 109290 109401 7 109289 109166 109186 109187 109291 109402 109401 6 109290 109187 109188 109189 109292 109402 7 109291 109189 109190 109193 109293 109402 109400 6 109292 109193 109194 109294 109400 109403 6 109293 109194 109295 109403 109404 109405 6 109294 109194 109195 109296 109297 109405 6 109295 109195 109297 109298 109302 109196 6 109295 109296 109298 109299 109405 109406 6 109297 109296 109299 109300 109301 109302 6 109297 109298 109300 109409 109406 109410 6 109299 109298 109301 109410 109411 109412 7 109300 109298 109302 109303 109200 109304 109412 6 109301 109298 109296 109196 109197 109303 5 109302 109197 109198 109200 109301 5 109301 109200 109201 109305 109412 7 109304 109201 109306 109412 109413 109414 109418 5 109305 109201 109202 109307 109418 6 109306 109202 109204 109206 109308 109418 6 109307 109206 109207 109309 109417 109418 6 109308 109207 109208 109310 109311 109417 6 109309 109208 109311 109312 109313 109314 6 109309 109310 109312 109416 109417 109419 6 109311 109310 109313 109419 109420 109424 7 109312 109310 109314 109424 109425 109317 109315 6 109313 109310 109208 109209 109211 109315 6 109314 109211 109212 109316 109317 109313 6 109315 109212 109317 109318 109319 109213 6 109315 109316 109318 109425 109313 109426 6 109317 109316 109319 109426 109427 109428 6 109318 109316 109213 109214 109320 109428 6 109319 109214 109321 109217 109322 109428 5 109320 109214 109215 109216 109217 6 109320 109217 109323 109428 109429 109430 6 109322 109217 109218 109219 109324 109430 6 109323 109219 109325 109430 109431 109432 6 109324 109219 109220 109221 109326 109432 6 109325 109221 109327 109432 109433 109434 6 109326 109221 109222 109328 109434 109435 5 109327 109222 109224 109329 109435 7 109328 109224 109330 109435 109436 109437 109438 6 109329 109224 109225 109226 109331 109438 6 109330 109226 109227 109332 109438 109439 6 109331 109227 109229 109333 109442 109439 6 109332 109229 109334 109442 109443 109446 5 109333 109229 109230 109335 109446 6 109334 109230 109231 109336 109446 109447 6 109335 109231 109232 109337 109447 109448 6 109336 109232 109233 109234 109338 109448 6 109337 109234 109339 109448 109449 109450 6 109338 109234 109235 109236 109340 109450 6 109339 109236 109341 109450 109451 109452 6 109340 109236 109342 109452 109453 109454 6 109341 109236 109237 109343 109454 109455 5 109342 109237 109238 109344 109455 7 109343 109238 109345 109455 109456 109457 109458 6 109344 109238 109239 109346 109458 109349 5 109345 109239 109240 109347 109349 6 109346 109240 109241 109245 109348 109349 6 109347 109245 109349 109350 109111 109110 7 109347 109348 109350 109458 109345 109346 109351 6 109349 109348 109111 109112 109113 109351 7 109350 109113 109114 109352 109458 109349 109459 6 109351 109114 109115 109353 109459 109460 6 109352 109115 109116 109246 109354 109460 6 109353 109246 109355 109460 109461 109462 6 109354 109246 109247 109356 109462 109463 6 109355 109247 109248 109249 109357 109463 6 109356 109249 109358 109463 109464 109465 6 109357 109249 109250 109252 109359 109465 5 109358 109252 109253 109360 109465 7 109359 109253 109254 109361 109465 109466 109467 5 109360 109254 109255 109362 109467 6 109361 109255 109256 109363 109467 109468 6 109362 109256 109364 109468 109469 109470 6 109363 109256 109257 109258 109365 109470 6 109364 109258 109366 109470 109471 109472 5 109365 109258 109259 109367 109472 6 109366 109259 109260 109368 109472 109473 6 109367 109260 109261 109369 109473 109474 6 109368 109261 109262 109370 109474 109475 6 109369 109262 109263 109371 109475 109476 6 109370 109263 109372 109476 109477 109478 6 109371 109263 109264 109265 109373 109478 6 109372 109265 109266 109374 109478 109479 6 109373 109266 109267 109375 109479 109480 6 109374 109267 109268 109376 109480 109481 6 109375 109268 109269 109377 109378 109481 7 109376 109269 109270 109378 109379 109380 109381 5 109376 109377 109379 109481 109482 6 109378 109377 109380 109482 109483 109484 6 109379 109377 109381 109484 109485 109382 5 109380 109377 109270 109271 109382 6 109381 109271 109383 109485 109380 109486 7 109382 109271 109272 109273 109384 109486 109487 6 109383 109273 109274 109385 109487 109488 6 109384 109274 109275 109386 109387 109488 5 109385 109275 109276 109387 109388 6 109385 109386 109388 109488 109489 109490 7 109387 109386 109276 109277 109389 109490 109491 6 109388 109277 109278 109390 109491 109492 6 109389 109278 109279 109391 109392 109492 6 109390 109279 109392 109393 109281 109280 6 109390 109391 109393 109492 109493 109494 6 109392 109391 109281 109282 109394 109494 6 109393 109282 109283 109395 109494 109495 6 109394 109283 109396 109495 109496 109497 6 109395 109283 109284 109397 109498 109497 6 109396 109284 109285 109286 109398 109498 6 109397 109286 109287 109288 109399 109498 6 109398 109288 109400 109498 109404 109403 7 109399 109288 109401 109402 109292 109293 109403 5 109400 109288 109402 109290 109289 5 109400 109401 109290 109291 109292 5 109400 109293 109294 109404 109399 6 109403 109294 109405 109498 109399 109407 6 109404 109294 109295 109297 109406 109407 6 109405 109297 109407 109408 109409 109299 6 109405 109406 109408 109497 109498 109404 6 109407 109406 109409 109496 109497 109499 6 109408 109406 109299 109410 109499 109500 6 109409 109299 109300 109411 109500 109501 6 109410 109300 109412 109501 109502 109413 6 109411 109300 109301 109304 109305 109413 6 109412 109305 109414 109415 109502 109411 6 109413 109305 109415 109416 109417 109418 6 109413 109414 109416 109502 109503 109504 6 109415 109414 109417 109311 109419 109504 6 109416 109414 109418 109308 109309 109311 6 109417 109414 109308 109307 109306 109305 6 109416 109311 109312 109420 109421 109504 6 109419 109312 109421 109422 109423 109424 6 109419 109420 109422 109504 109505 109506 6 109421 109420 109423 109506 109507 109508 6 109422 109420 109424 109511 109508 109512 6 109423 109420 109312 109313 109425 109512 5 109424 109313 109317 109426 109512 6 109425 109317 109318 109427 109512 109513 6 109426 109318 109428 109513 109514 109429 6 109427 109318 109319 109320 109322 109429 6 109428 109322 109430 109517 109514 109427 6 109429 109322 109323 109324 109431 109517 6 109430 109324 109432 109524 109517 109525 6 109431 109324 109325 109326 109433 109525 6 109432 109326 109434 109525 109526 109527 6 109433 109326 109327 109435 109527 109528 6 109434 109327 109328 109329 109436 109528 6 109435 109329 109437 109528 109530 109531 6 109436 109329 109438 109531 109532 109440 6 109437 109329 109330 109331 109439 109440 6 109438 109331 109440 109441 109442 109332 5 109438 109439 109441 109532 109437 7 109440 109439 109442 109443 109444 109532 109533 5 109441 109439 109332 109333 109443 6 109442 109333 109441 109444 109445 109446 5 109441 109443 109445 109533 109534 6 109444 109443 109446 109534 109535 109536 7 109445 109443 109333 109334 109335 109447 109536 6 109446 109335 109336 109448 109536 109537 6 109447 109336 109337 109338 109449 109537 6 109448 109338 109450 109537 109538 109451 5 109449 109338 109339 109340 109451 7 109450 109340 109452 109538 109449 109539 109540 6 109451 109340 109341 109453 109540 109541 6 109452 109341 109454 109541 109542 109543 6 109453 109341 109342 109455 109543 109544 6 109454 109342 109343 109344 109456 109544 6 109455 109344 109457 109544 109545 109461 6 109456 109344 109458 109461 109460 109459 6 109457 109344 109345 109349 109351 109459 5 109458 109351 109352 109460 109457 6 109459 109352 109353 109354 109461 109457 6 109460 109354 109462 109545 109456 109457 5 109461 109354 109355 109463 109545 7 109462 109355 109356 109357 109464 109545 109546 6 109463 109357 109465 109546 109547 109548 7 109464 109357 109358 109359 109360 109466 109548 6 109465 109360 109467 109548 109549 109550 6 109466 109360 109361 109362 109468 109550 6 109467 109362 109363 109469 109550 109551 6 109468 109363 109470 109551 109552 109553 6 109469 109363 109364 109365 109471 109553 6 109470 109365 109472 109553 109554 109555 6 109471 109365 109366 109367 109473 109555 6 109472 109367 109368 109474 109555 109556 6 109473 109368 109369 109475 109556 109557 6 109474 109369 109370 109476 109557 109558 6 109475 109370 109371 109477 109558 109559 6 109476 109371 109478 109559 109560 109561 6 109477 109371 109372 109373 109479 109561 6 109478 109373 109374 109480 109561 109562 6 109479 109374 109375 109481 109562 109563 6 109480 109375 109376 109378 109482 109563 6 109481 109378 109379 109483 109563 109564 6 109482 109379 109484 109564 109565 109566 6 109483 109379 109380 109485 109566 109567 6 109484 109380 109382 109486 109567 109568 6 109485 109382 109383 109487 109568 109569 6 109486 109383 109384 109488 109569 109570 6 109487 109384 109385 109387 109489 109570 6 109488 109387 109490 109570 109571 109572 6 109489 109387 109388 109491 109572 109573 6 109490 109388 109389 109492 109573 109574 6 109491 109389 109390 109392 109493 109574 6 109492 109392 109494 109574 109575 109576 6 109493 109392 109393 109394 109495 109576 6 109494 109394 109395 109496 109576 109577 6 109495 109395 109497 109408 109499 109577 6 109496 109395 109408 109407 109498 109396 7 109407 109497 109396 109397 109398 109399 109404 5 109496 109408 109409 109500 109577 7 109499 109409 109410 109501 109577 109578 109579 6 109500 109410 109411 109502 109579 109580 6 109501 109411 109413 109415 109503 109580 6 109502 109415 109504 109580 109581 109582 7 109503 109415 109416 109419 109421 109505 109582 5 109504 109421 109506 109582 109583 6 109505 109421 109422 109507 109583 109584 6 109506 109422 109508 109509 109584 109585 6 109507 109422 109509 109510 109511 109423 6 109507 109508 109510 109585 109586 109587 6 109509 109508 109511 109518 109587 109521 6 109510 109508 109423 109512 109518 109519 7 109511 109423 109424 109425 109426 109513 109519 6 109512 109426 109427 109514 109515 109519 6 109513 109427 109515 109516 109517 109429 6 109513 109514 109516 109519 109518 109520 6 109515 109514 109517 109523 109520 109524 6 109516 109514 109429 109430 109524 109431 6 109510 109511 109519 109515 109520 109521 5 109518 109511 109512 109513 109515 6 109518 109515 109521 109522 109523 109516 6 109518 109520 109522 109587 109510 109588 6 109521 109520 109523 109588 109589 109590 6 109522 109520 109516 109524 109590 109591 6 109523 109516 109517 109431 109525 109591 7 109524 109431 109432 109433 109526 109591 109592 5 109525 109433 109527 109592 109593 6 109526 109433 109434 109528 109529 109593 6 109527 109434 109435 109436 109529 109530 6 109527 109528 109530 109593 109594 109595 6 109529 109528 109436 109531 109595 109596 6 109530 109436 109437 109532 109596 109597 7 109531 109437 109440 109441 109533 109597 109598 5 109532 109441 109444 109534 109598 7 109533 109444 109445 109535 109598 109599 109600 6 109534 109445 109536 109600 109601 109602 7 109535 109445 109446 109447 109537 109602 109603 6 109536 109447 109448 109449 109538 109603 6 109537 109449 109451 109539 109603 109604 6 109538 109451 109540 109604 109605 109606 6 109539 109451 109452 109541 109606 109607 5 109540 109452 109453 109542 109607 7 109541 109453 109543 109607 109608 109609 109610 5 109542 109453 109454 109544 109610 7 109543 109454 109455 109456 109545 109610 109546 6 109544 109456 109461 109462 109463 109546 6 109545 109463 109464 109547 109610 109544 6 109546 109464 109548 109610 109609 109549 5 109547 109464 109465 109466 109549 6 109548 109466 109550 109609 109547 109611 6 109549 109466 109467 109468 109551 109611 6 109550 109468 109469 109552 109611 109612 6 109551 109469 109553 109612 109613 109614 6 109552 109469 109470 109471 109554 109614 6 109553 109471 109555 109614 109615 109616 6 109554 109471 109472 109473 109556 109616 6 109555 109473 109474 109557 109616 109617 6 109556 109474 109475 109558 109617 109618 6 109557 109475 109476 109559 109618 109619 6 109558 109476 109477 109560 109619 109620 6 109559 109477 109561 109620 109621 109622 6 109560 109477 109478 109479 109562 109622 6 109561 109479 109480 109563 109622 109623 6 109562 109480 109481 109482 109564 109623 6 109563 109482 109483 109565 109623 109624 6 109564 109483 109566 109624 109625 109626 6 109565 109483 109484 109567 109626 109627 6 109566 109484 109485 109568 109627 109628 7 109567 109485 109486 109569 109628 109629 109630 6 109568 109486 109487 109570 109630 109631 6 109569 109487 109488 109489 109571 109631 6 109570 109489 109572 109631 109632 109633 6 109571 109489 109490 109573 109633 109634 6 109572 109490 109491 109574 109634 109635 6 109573 109491 109492 109493 109575 109635 6 109574 109493 109576 109635 109636 109578 6 109575 109493 109494 109495 109577 109578 6 109576 109495 109496 109499 109500 109578 6 109577 109500 109579 109636 109575 109576 6 109578 109500 109501 109580 109636 109581 5 109579 109501 109502 109503 109581 6 109580 109503 109582 109636 109579 109637 6 109581 109503 109504 109505 109583 109637 6 109582 109505 109506 109584 109637 109638 6 109583 109506 109507 109585 109638 109633 6 109584 109507 109509 109586 109633 109632 6 109585 109509 109587 109632 109639 109629 6 109586 109509 109510 109521 109588 109629 6 109587 109521 109522 109589 109629 109628 6 109588 109522 109590 109628 109627 109640 6 109589 109522 109523 109591 109640 109641 6 109590 109523 109524 109525 109592 109641 6 109591 109525 109526 109593 109641 109642 7 109592 109526 109527 109529 109594 109642 109643 5 109593 109529 109595 109643 109644 6 109594 109529 109530 109596 109644 109645 6 109595 109530 109531 109597 109645 109646 6 109596 109531 109532 109598 109646 109647 6 109597 109532 109533 109534 109599 109647 5 109598 109534 109600 109647 109648 7 109599 109534 109535 109601 109648 109649 109650 5 109600 109535 109602 109650 109651 6 109601 109535 109536 109603 109651 109604 5 109602 109536 109537 109538 109604 6 109603 109538 109539 109605 109651 109602 6 109604 109539 109606 109651 109652 109653 6 109605 109539 109540 109607 109653 109613 6 109606 109540 109541 109542 109608 109613 6 109607 109542 109609 109613 109612 109611 6 109608 109542 109610 109547 109549 109611 6 109609 109542 109543 109544 109546 109547 6 109609 109549 109550 109551 109612 109608 5 109611 109551 109552 109613 109608 7 109612 109552 109614 109653 109606 109607 109608 6 109613 109552 109553 109554 109615 109653 6 109614 109554 109616 109653 109652 109654 6 109615 109554 109555 109556 109617 109654 6 109616 109556 109557 109618 109654 109655 6 109617 109557 109558 109619 109655 109656 6 109618 109558 109559 109620 109656 109657 6 109619 109559 109560 109621 109657 109658 6 109620 109560 109622 109658 109659 109660 6 109621 109560 109561 109562 109623 109660 6 109622 109562 109563 109564 109624 109660 7 109623 109564 109565 109625 109660 109661 109662 5 109624 109565 109626 109662 109663 7 109625 109565 109566 109627 109663 109664 109640 6 109626 109566 109567 109628 109589 109640 6 109627 109567 109568 109629 109588 109589 7 109628 109568 109630 109639 109586 109587 109588 5 109629 109568 109569 109631 109639 6 109630 109569 109570 109571 109632 109639 6 109631 109571 109633 109585 109586 109639 7 109632 109571 109572 109634 109638 109584 109585 6 109633 109572 109573 109635 109637 109638 6 109634 109573 109574 109575 109636 109637 6 109635 109575 109578 109579 109581 109637 7 109636 109581 109582 109583 109638 109635 109634 5 109637 109583 109584 109633 109634 5 109632 109586 109629 109630 109631 6 109627 109589 109590 109641 109664 109626 6 109640 109590 109591 109592 109642 109664 6 109641 109592 109593 109643 109664 109663 6 109642 109593 109594 109644 109663 109662 7 109643 109594 109595 109645 109662 109661 109665 7 109644 109595 109596 109646 109665 109659 109666 6 109645 109596 109597 109647 109666 109667 6 109646 109597 109598 109599 109648 109667 6 109647 109599 109600 109649 109667 109668 6 109648 109600 109650 109668 109656 109655 6 109649 109600 109601 109651 109655 109669 7 109650 109601 109602 109604 109605 109652 109669 6 109651 109605 109653 109615 109654 109669 6 109652 109605 109606 109613 109614 109615 6 109652 109615 109616 109617 109655 109669 7 109654 109617 109618 109656 109649 109650 109669 6 109655 109618 109619 109657 109668 109649 5 109656 109619 109620 109658 109668 6 109657 109620 109621 109659 109668 109666 6 109658 109621 109660 109665 109645 109666 7 109659 109621 109622 109623 109624 109661 109665 5 109660 109624 109662 109644 109665 6 109661 109624 109625 109663 109643 109644 6 109662 109625 109626 109664 109642 109643 5 109663 109626 109640 109641 109642 5 109661 109644 109645 109659 109660 6 109659 109645 109646 109667 109668 109658 5 109666 109646 109647 109648 109668 7 109667 109648 109649 109656 109657 109658 109666 5 109655 109650 109651 109652 109654 6 106653 106650 106651 109671 109691 109681 6 109670 106651 109672 109676 109680 109681 6 109671 106651 109673 109674 109675 109676 6 109672 106651 109674 106649 109727 106365 6 109672 109673 109675 109725 109726 109727 6 109672 109674 109676 109677 109678 109725 6 109672 109675 109677 109679 109680 109671 5 109676 109675 109678 105235 109679 7 109677 109675 105235 109734 104519 109725 109733 6 109677 105235 105236 109676 109680 109683 7 109676 109679 109671 109681 109682 104654 109683 6 109671 109680 109682 109691 109670 109685 5 109681 109680 104654 104655 109685 6 104654 109680 109679 105236 104652 109684 6 104652 109683 104650 100422 105237 105236 6 109682 104655 109686 109687 109691 109681 6 109685 104655 109687 103169 109688 104656 6 109685 109686 103169 103170 109691 103172 7 103169 109686 104656 109689 103168 102843 109690 5 109688 104656 105380 100430 109690 6 102843 109688 109689 100430 102841 100429 6 109685 109687 103172 106653 109670 109681 6 106475 106478 106474 109779 109774 109780 6 106460 106461 106465 106467 106377 106378 6 105862 105863 109695 109702 109703 109700 6 109694 105863 105864 109696 105719 109700 5 109695 105864 105865 105718 105719 6 105718 105865 105866 105867 109698 109699 6 109697 105867 109699 105695 105694 105868 5 109697 109698 105695 105696 105718 6 109695 105719 105720 109701 109702 109694 5 109700 105720 105721 105724 109702 6 109701 105724 106095 109703 109694 109700 6 109702 106095 106383 109694 105862 105861 6 106490 102252 100415 102194 106488 106489 7 106488 102195 106487 106480 102196 109773 109778 5 102251 106491 103336 106492 103335 6 103335 106492 103334 106499 106493 106494 6 106502 106503 109709 102189 109711 109712 6 106502 109708 102189 106501 109710 102190 6 106501 109709 106500 102190 102191 102512 7 109708 106503 106512 109712 109715 109716 109717 5 109708 109711 102189 109713 109715 6 102189 109712 102187 102197 109714 109715 6 102197 109713 109715 102215 102216 109720 6 109714 109713 109712 109711 109716 102215 7 109715 109711 109717 109718 109719 102214 102215 6 109716 109711 106512 106513 106514 109718 5 109717 106514 106516 109719 109716 5 109718 106516 109716 102214 106522 6 109714 102216 102217 102200 102198 102197 6 106669 106775 109722 109723 106656 106658 5 109721 106775 109723 109724 109798 6 109721 109722 109724 106646 106656 106655 6 109723 109722 106646 106645 109799 109798 6 109675 109674 109726 109678 109733 109735 6 109725 109674 109727 109729 109735 109728 6 109726 109674 109673 106365 106366 109728 6 109727 106366 106368 106370 109729 109726 6 109728 106370 109730 109731 109735 109726 6 109729 106370 106371 106375 106467 109731 6 109730 106467 106466 109732 109735 109729 6 109731 106466 106468 107510 109733 109735 6 109732 107510 109734 109735 109678 109725 6 109733 107510 107508 104518 104519 109678 6 109732 109733 109731 109729 109726 109725 6 106041 106039 106038 106019 105872 105874 6 106132 106398 106392 106393 106115 109738 6 109737 106115 106116 106132 106131 106122 6 100569 100571 109740 109744 100568 109743 6 109739 100571 100573 109741 109742 109743 6 109740 100573 100916 100917 109742 100918 6 109740 109741 100918 109743 100921 100919 6 109740 109742 100921 100563 109744 109739 6 109743 100563 100564 100567 100568 109739 6 107205 107206 109746 107218 107217 107216 6 109745 107206 107207 107213 107216 107214 6 103491 103492 103496 103502 106706 106555 5 106706 103502 109749 103503 106710 5 106706 109748 106710 106707 106705 5 106682 105157 104667 106681 109761 5 103201 103470 103410 103200 103411 6 105932 105910 105915 105916 109755 105931 5 104915 104917 109754 104880 104879 7 109753 104917 104911 104880 109756 104904 109759 7 109752 105916 105931 105921 105920 105919 109758 6 104880 109754 109757 104895 104897 109759 5 104880 109756 104895 104884 104881 5 105919 109755 105918 105916 105917 6 109754 104904 104901 104898 104897 109756 6 104638 104912 104875 104872 104869 104868 7 106681 109750 104667 104668 109762 104560 109792 5 109761 104668 104546 104548 104560 5 108468 108469 109764 109765 108486 5 108468 109763 109765 107726 107962 7 109764 109763 108486 107714 107715 107723 107726 6 108023 108021 107738 107739 107740 107742 5 107723 107715 107716 107719 107721 6 100427 107500 107502 109769 100046 100045 6 109768 107502 109770 109772 100044 100045 7 109769 107502 107503 109771 109772 109774 109780 7 102196 100043 100001 109772 109770 109773 109774 5 109771 100001 109770 109769 100044 6 102196 109771 109774 109705 109778 109779 6 109773 109771 109770 109779 109692 109780 6 107253 107256 107523 107520 107517 107516 6 102095 102083 102084 106093 103138 103131 5 106638 106639 106642 106787 106785 5 109705 109773 109779 106478 106480 5 109778 109773 109774 109692 106478 5 109692 109774 106474 109770 107503 6 103852 103129 100026 100025 101526 103130 6 106787 106642 106643 109783 106789 106170 5 109782 106643 106168 106169 106170 6 104396 104529 104395 104121 104119 104530 6 106637 106783 106779 106636 106635 106771 6 104118 103529 103531 109787 109789 104120 6 109786 103531 103533 109788 107174 109789 6 109787 103533 103535 107178 107175 107174 6 109787 107174 109786 104120 104122 107172 5 107670 107695 107696 107698 107669 6 107775 103145 104231 103413 103414 107776 6 104560 106675 106676 106677 106681 109761 6 103659 103660 104908 109794 104369 104371 5 109793 104908 104642 104370 104369 6 105543 105545 105700 105540 105541 105542 6 106177 106178 109797 109798 106181 109799 6 106782 106177 109796 109798 106776 106780 7 109797 109796 106776 109799 109724 109722 106775 6 109796 106181 106183 106645 109724 109798 scotchpy/scotchpy/data/m4x4.grf000066400000000000000000000002371505500072100167500ustar00rootroot000000000000000 16 48 0 000 2 1 4 3 0 2 5 3 1 3 6 2 2 7 3 0 5 8 4 1 4 6 9 4 2 5 7 10 3 3 6 11 3 4 9 12 4 5 8 10 13 4 6 9 11 14 3 7 10 15 2 8 13 3 9 12 14 3 10 13 15 2 11 14 scotchpy/scotchpy/data/small_55.msh000066400000000000000000000001631505500072100176040ustar00rootroot000000000000001 6 7 36 0 6 000 3 0 1 2 3 0 1 5 3 1 5 4 3 1 4 6 3 1 6 3 3 1 3 2 2 0 1 6 0 1 2 3 4 5 2 0 5 2 4 5 2 2 3 2 1 2 2 3 4 scotchpy/scotchpy/dgraph.py000066400000000000000000001011061505500072100163570ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes import numpy as np from .find_libs import _ptscotch_lib from . import common as _common from . import strat as _strat from .exception import LibraryError, CannotCoarsen try: from mpi4py import MPI flag_mpi4py_available = True except ImportError: flag_mpi4py_available = False def build_dgraph(*args, dgrafptr=None, **kwargs): """ Args and kwargs need to be given in the same fashion as Graph.build takes them. """ if not flag_mpi4py_available: raise ImportError("mpi4py is required to build a distributed graph.") gra = DGraph(dgrafptr) gra.build(*args, **kwargs) return gra def load_dgraph(*args, dgrafptr=None, **kwargs): """ Args and kwargs need to be given in the same fashion as Graph.load takes them. """ if not flag_mpi4py_available: raise ImportError("mpi4py is required to load a distributed graph.") gra = DGraph(dgrafptr) gra.load(*args, **kwargs) return gra def dgraph_alloc(): if not flag_mpi4py_available: raise ImportError("mpi4py is required to allocate a distributed graph.") return DGraph(init=False) if flag_mpi4py_available: class DGraph: # dummy structure """ Caution, mutating the given np.arrays voids your warranty. The use of np.array(copy=True) is recommended otherwise. The constructor doesn't build a viable cgraph, .load or .build has to be called afterwards. `build_dgraph` or `load_dgraph` both return viable dgraphs. """ class _DGraphStruct(ctypes.Structure): _fields_ = [ ("dummy", ctypes.c_char * _common.libptscotch.SCOTCH_dgraphSizeof()) ] _exitval = True _readableattrs = ( "baseval", "vertglbnbr", "vertlocnbr", "vertlocmax", "vertgstnbr", "vertloctab", "vendloctab", "veloloctab", "vlblloctab", "edgeglbnbr", "edgelocnbr", "edgelocsiz", "edgeloctab", "edgegsttab", "edloloctab", ) _dgrafptr = None _baseval = None _vertglbnbr = None _vertlocnbr = None _vertlocmax = None _vertgstnbr = None _vertloctab = None _vendloctab = None _veloloctab = None _vlblloctab = None _edgelocnbr = None _edgeglbnbr = None _edgelocsiz = None _edgeloctab = None _edgegsttab = None _edloloctab = None _comm = None def __getattr__(self, name): name = str(name) if name in self._readableattrs: return getattr(self, "_" + name) raise AttributeError(f"'{type(self)}' object has no attribute '{name}'") def __setattr__(self, name, value): name = str(name) if name in self._readableattrs: raise AttributeError("The {} attribute is read-only.".format(name)) super().__setattr__(name, value) def __init__(self, comm, dgrafptr=None, init=True): if not dgrafptr: _common.libptscotch.SCOTCH_dgraphAlloc.restype = ctypes.POINTER( self._DGraphStruct ) dgrafptr = _common.libptscotch.SCOTCH_dgraphAlloc() self._dgrafptr = dgrafptr self._comm = comm if init: self.init(comm) def init(self, comm): if not self._exitval: self.exit() self._exitval = False # Convert MPI communicator to ctypes comm_ptr = MPI._addressof(comm) comm_obj = ctypes.c_void_p(comm_ptr) # Call the C function _common.libhelper.dgraph_load_mpi(self._dgrafptr, comm_obj) def build( self, baseval=None, vertglbnbr=None, vertlocnbr=None, vertlocmax=None, vertgstnbr=None, vertloctab=None, vendloctab=None, veloloctab=None, vlblloctab=None, edgeglbnbr=None, edgelocnbr=None, edgelocsiz=None, edgeloctab=None, edgegsttab=None, edloloctab=None, ): if (edgeloctab is None) or (vertloctab is None): raise ValueError("Both edgeloctab and vertloctab need to be given") self._vertglbnbr = vertglbnbr self._vertgstnbr = vertgstnbr self._edgeglbnbr = edgeglbnbr self._edgeloctab = _common.properly_format(edgeloctab) self._vertloctab = _common.properly_format(vertloctab) print(self._vertloctab) self._vendloctab = _common.properly_format(vendloctab) if isinstance(self._vertloctab, np.ndarray) and isinstance( self._vendloctab, np.ndarray ): if self._vertloctab.size > self._vendloctab.size + 1: raise ValueError( "If given, vertloctab must not be longer than vendloctab+1" ) self._edloloctab = _common.properly_format(edloloctab) self._veloloctab = _common.properly_format(veloloctab) self._edgegsttab = _common.properly_format(edgegsttab) self._vlblloctab = _common.properly_format(vlblloctab) if baseval: self._baseval = baseval elif not vendloctab and isinstance(self._vertloctab, np.ndarray): self._baseval = vertloctab[0] else: raise ValueError( "Baseval must be given in a non-compact dgraph or\ when vertloctab is not an Iterable" ) if vertlocnbr is None: if not isinstance( self._vertloctab, np.ndarray ): # vertloctab has no size raise TypeError( "Vertlocnbr must be given when vertloctab is not an Iterable" ) else: self._vertlocnbr = self._vertloctab.size - 1 else: # vertlocnbr is given self._vertlocnbr = vertlocnbr if edgelocnbr is None: if not isinstance( self._edgelocnbr, np.ndarray ): # vertloctab has no size raise TypeError( "Edgelocnbr must be given when vertloctab is not an Iterable" ) elif vendloctab is not None: # non-compact dgraph self._edgelocnbr = sum( [ self._vendloctab[i] - self._vertloctab[i] for i in range(self._vendloctab.size) ] ) else: # compact dgraph self._edgelocnbr = self._vertloctab[-1] - self._baseval else: # edgelocnbr is given self._edgelocnbr = edgelocnbr if vertlocmax is None: self._vertlocmax = self._vertlocnbr else: self._vertlocmax = vertlocmax if edgegsttab is not None: if isinstance(edgegsttab, np.ndarray): self._edgegsttab = _common.properly_format(edgegsttab) else: raise TypeError("edgegsttab must be a numpy array") if edgelocsiz is None: self._edgelocsiz = self._edgegsttab.size else: self._edgelocsiz = edgelocsiz if _common.libptscotch.SCOTCH_dgraphBuild( self._dgrafptr, _common.proper_int(self._baseval), _common.proper_int(self._vertlocnbr), _common.proper_int(self._vertlocmax), _common.array_to_pointer(self._vertloctab), _common.array_to_pointer(self._vendloctab), _common.array_to_pointer(self._veloloctab), _common.array_to_pointer(self._vlblloctab), _common.proper_int(self._edgelocnbr), _common.proper_int(self._edgelocsiz), _common.array_to_pointer(self._edgeloctab), _common.array_to_pointer(self._edgegsttab), _common.array_to_pointer(self._edloloctab), ): raise LibraryError("dgraphBuild") if self.check(): raise LibraryError( msg="Graph check revealed discrepancies in data integrity" ) def load(self, stream, baseval=-1, flagval=0): if stream is not None: if isinstance(stream, (str, bytes)): with open(stream) as st: return self.load(st, baseval, flagval) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) else: filep = None interngptr = _common.libptscotch.SCOTCH_dgraphAlloc() comm_ptr = MPI._addressof(self._comm) comm_obj = ctypes.c_void_p(comm_ptr) if _common.libhelper.dgraph_load_mpi(interngptr, comm_obj) != 0: raise LibraryError("dgraphInit failed") if ( _common.libptscotch.SCOTCH_dgraphLoad( interngptr, filep, ctypes.c_int(baseval), ctypes.c_int(flagval) ) != 0 ): raise LibraryError("dgraphLoad failed") if filep is not None: _common.libc.fflush(filep) _common.libc.fclose(filep) data = self._data(dgrafptr=interngptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libptscotch.SCOTCH_dgraphExit(interngptr) print(data) self.build(**data) def save(self, stream): if isinstance(stream, (str, bytes)): with open(stream, "w") as st: return self.save(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libptscotch.SCOTCH_dgraphSave(self._dgrafptr, filep): raise LibraryError("dgraphSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def __del__(self): self.exit() _common.libptscotch.SCOTCH_dgraphFree(self._dgrafptr) def exit(self): if not self._exitval: _common.libptscotch.SCOTCH_dgraphExit( self._dgrafptr ) # graphInit mirror self._exitval = True for attrname in self._readableattrs: setattr(self, "".join(("_", attrname)), None) def free(self): self.exit() self.init() def check(self): return _common.libptscotch.SCOTCH_dgraphCheck(self._dgrafptr) def _data(self, dgrafptr=None, store=False, getComm=True): argue = ( [_common.proper_int() for k in range(5)] # baseptr .. vertgstptr + [ctypes.pointer(_common.proper_int()) for k in range(4)] # vertloctab .. vlblloctab + [_common.proper_int() for k in range(3)] # edgeglbptr .. edgelocptz + [ctypes.pointer(_common.proper_int()) for k in range(3)] # ) if getComm: comm_ptr = MPI._addressof(self._comm) comm_obj = ctypes.c_void_p(comm_ptr) else: comm_obj = None _common.libptscotch.SCOTCH_dgraphData( dgrafptr or self._dgrafptr, # graph *(ctypes.byref(arg) for arg in argue), # fields to retrieve ctypes.byref(comm_obj) # we want possibly the communicator ) argue = dict(zip(self._readableattrs, argue)) return_value = dict() for key, val in argue.items(): if isinstance(val, _common.proper_int): if store: setattr(self, "_" + key, val.value) return_value[key] = val.value arraysize = {} arraysize["vertloctab"] = return_value["vertlocnbr"] arraysize["vendloctab"] = return_value["vertlocnbr"] arraysize["veloloctab"] = return_value["vertlocnbr"] arraysize["vlblloctab"] = return_value["vertlocnbr"] arraysize["edgeloctab"] = return_value["edgelocsiz"] arraysize["edgegsttab"] = return_value["edgelocsiz"] arraysize["edloloctab"] = return_value["edgelocnbr"] if ctypes.addressof(argue["vertloctab"].contents) == ( ctypes.addressof(argue["vendloctab"].contents) - _common.num_sizeof() ): # if the dgraph is compact, it stays that way arraysize["vertloctab"] += 1 del argue["vendloctab"] for key, val in argue.items(): if isinstance(val, ctypes.POINTER(_common.proper_int)): try: arey = np.ctypeslib.as_array(val, (arraysize[key],)) except ValueError: # if the pointer is NULL if store: setattr(self, "_" + key, None) return_value[key] = None else: # if no ValueError has happened if store: setattr(self, "_" + key, arey) return_value[key] = arey return return_value def build_grid_3d(self, baseval, dimxval, dimyval, dimzval, incrval, flagval): if _common.libptscotch.SCOTCH_dgraphBuildGrid3D( self._dgrafptr, _common.proper_int(baseval), _common.proper_int(dimxval), _common.proper_int(dimyval), _common.proper_int(dimzval), _common.proper_int(incrval), _common.proper_int(flagval), ): raise LibraryError("dgraphBuildGrid3D") def data(self, as_dict=False): # serves as grafptr """ The values are returned as a 15-element tuple or as a dict, if requested with the `as_dict` parameter """ return_value = tuple(getattr(self, attr) for attr in self._readableattrs) if as_dict: return dict(zip(self._readableattrs, return_value)) return return_value def band(self, fronlocnbr, fronloctab, distval, bndgraf): if _common.libptscotch.SCOTCH_dgraphBand( self._dgrafptr, _common.proper_int(fronlocnbr), _common.array_to_pointer(fronloctab), _common.proper_int(distval), bndgraf._dgrafptr, ): raise LibraryError("dgraphBand") bndgraf._data(store=True) def coarsen(self, coarnbr, coarrrat, flagval, coargraf): coarsen_vert_loc_max = self.coarsen_vert_loc_max(flagval) multloctab = np.full(2 * coarsen_vert_loc_max, -1, _common.proper_int) multloctabnew = _common.array_to_c_array(multloctab) rv = _common.libptscotch.SCOTCH_dgraphCoarsen( self._dgrafptr, _common.proper_int(coarnbr), ctypes.c_double(coarrrat), _common.proper_int(flagval), coargraf._dgrafptr, _common.array_to_pointer(multloctabnew), ) if flagval & _common.COARSENFOLD != _common.COARSENFOLD: coargraf._data(store=True, getComm=True) else: if self._comm.rank >= (self._comm.size + 1) / 2: coargraf._comm = MPI.COMM_NULL if rv: if rv == 1: raise CannotCoarsen raise LibraryError("dgraphCoarsen") return rv, multloctabnew def coarsen_vert_loc_max(self, flagval): return _common.libptscotch.SCOTCH_dgraphCoarsenVertLocMax( self._dgrafptr, _common.proper_int(flagval) ) def gather(self, cgrf): if _common.libptscotch.SCOTCH_dgraphGather(self._dgrafptr, cgrf._dgrafptr): raise LibraryError("dgraphGather") cgrf._data(store=True) def induce_part(self, orgpartloctab, indpartval, indvertlocnbr, indgraf): if _common.libptscotch.SCOTCH_dgraphInducePart( self._dgrafptr, _common.array_to_pointer(orgpartloctab), _common.array_to_pointer(indpartval), _common.proper_int(indvertlocnbr), indgraf._dgrafptr, ): raise LibraryError("dgraphInducePart") indgraf._data(store=True) def redist(self, partloctab, permgsttab, vertlocdlt, edgelocdlt, redgraf): if _common.libptscotch.SCOTCH_dgraphRedist( self._dgrafptr, _common.array_to_pointer(partloctab), _common.array_to_pointer(permgsttab), _common.proper_int(vertlocdlt), _common.proper_int(edgelocdlt), redgraf._dgrafptr, ): raise LibraryError("dgraphRedist") redgraf._data(store=True) def scatter(self, cgraf): if _common.libptscotch.SCOTCH_dgraphScatter( self._dgrafptr, cgraf._dgrafptr ): raise LibraryError("dgraphScatter") cgraf._data(store=True) def size(self, as_dict=False): return_value = ( self._vertlocnbr, self._vertglbnbr, self._edgelocnbr, self._edgeglbnbr, ) if as_dict: return_value = dict( zip("vertlocnbr", "vertglbnbr", "edgelocnbr", "edgeglbnbr"), return_value, ) return return_value def ghst(self): if _common.libptscotch.SCOTCH_dgraphGhst(self._dgrafptr): raise LibraryError("dgraphGhst") self._data(store=True) def halo(self, datatab, typeval): if isinstance(typeval, MPI.Datatype): if _common.libptscotch.SCOTCH_dgraphHalo( self._dgrafptr, _common.array_to_pointer(datatab), ctypes.c_void_p(typeval.Get_handle()), ): raise LibraryError("dgraphHalo") else: raise TypeError("typeval must be an MPI.Datatype") def halo_async(self, datatab, typeval, requ): if isinstance(typeval, MPI.Datatype): if _common.libptscotch.SCOTCH_dgraphHaloAsync( self._dgrafptr, _common.array_to_pointer(datatab), ctypes.c_void_p(typeval.Get_handle()), requ._haloreqptr, ): raise LibraryError("dgraphHaloAsync") else: raise TypeError("typeval must be an MPI.Datatype") def halo_wait(requ): if _common.libptscotch.SCOTCH_dgraphHaloWait(requ._haloreqptr): raise LibraryError("dgraphHaloWait") def map(self, arch, strat, partloctab): strat = strat or _strat.Strat(init=True) if _common.libptscotch.SCOTCH_dgraphMap( self._dgrafptr, arch._archptr, strat._stratptr, _common.array_to_pointer(partloctab), ): raise LibraryError("dgraphMap") def map_compute(self, mapping, strat): if _common.libptscotch.SCOTCH_dgraphMapCompute( self._dgrafptr, mapping._dmappptr, strat._stratptr ): raise LibraryError("dgraphMapCompute") def map_init(self, mapping, arch, partloctab=None): parttabnew = _common.array_to_c_array( partloctab, max(len(partloctab), self._vertlocnbr) ) if _common.libptscotch.SCOTCH_dgraphMapInit( self._dgrafptr, mapping._dmappptr, arch._archptr, _common.array_to_pointer(parttabnew), ): raise LibraryError("dgraphMapInit") if partloctab is not None: try: partloctab[:] = parttabnew except TypeError: pass def map_exit(self, mapping): mapping.unregister() if _common.libptscotch.SCOTCH_dgraphMapExit( self._dgrafptr, mapping._dmappptr ): raise LibraryError("dgraphMapExit") def map_save(self, mapping, stream): if isinstance(stream, (str, bytes)): with open(stream, "w") as st: return self.map_save(mapping, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libptscotch.SCOTCH_dgraphMapSave( self._dgrafptr, mapping._dmappptr, filep ): raise LibraryError("dgraphMapSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def map_view(self, mapping, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.map_view(mapping, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_dgraphMapView( self._dgrafptr, mapping._mappptr, filep ): raise LibraryError("graphMapView") _common.libc.fflush(filep) _common.libc.fclose(filep) def part(self, partnbr, strat=None, partloctab=None): strat = strat or _strat.Strat(init=True) parttabnew = _common.array_to_c_array( partloctab, max(len(partloctab), self._vertlocnbr) ) if _common.libptscotch.SCOTCH_dgraphPart( self._dgrafptr, _common.proper_int(partnbr), strat._stratptr, _common.array_to_pointer(parttabnew), ): raise LibraryError("dgraphPart") if partloctab is not None: try: partloctab[:] = parttabnew except TypeError: pass def order_init(self, ordering): if _common.libptscotch.SCOTCH_dgraphOrderInit( self._dgrafptr, ordering._ordeptr ): raise LibraryError("dgraphOrderInit") ordering.register(self) def order_exit(self, ordering): ordering.unregister() if _common.libptscotch.SCOTCH_dgraphOrderExit( self._dgrafptr, ordering._ordeptr ): raise LibraryError("dgraphOrderExit") def order_cblk_dist(self, ordering): return _common.libptscotch.SCOTCH_dgraphOrderCblkDist( self._dgrafptr, ordering._ordeptr ) def order_compute(self, ordering, strat): if _common.libptscotch.SCOTCH_dgraphOrderCompute( self._dgrafptr, ordering._ordeptr, strat._stratptr ): raise LibraryError("dgraphOrderCompute") def order_save(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w") as st: return self.order_save(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libptscotch.SCOTCH_dgraphOrderSave( self._dgrafptr, ordering._ordeptr, filep ): raise LibraryError("dgraphOrderSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_map(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w") as st: return self.order_save_map(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libptscotch.SCOTCH_dgraphOrderSaveMap( self._dgrafptr, ordering._ordeptr, filep ): raise LibraryError("dgraphOrderSaveMap") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_tree(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w") as st: return self.order_save_tree(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libptscotch.SCOTCH_dgraphOrderSaveTree( self._dgrafptr, ordering._ordeptr, filep ): raise LibraryError("dgraphOrderSaveTree") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_perm(self, ordering, permloctab=None): permloctabnew = _common.array_to_c_array(permloctab, self._vertlocnbr) if _common.libptscotch.SCOTCH_dgraphOrderPerm( self._dgrafptr, ordering._ordeptr, _common.array_to_pointer(permloctabnew), ): raise LibraryError("dgraphOrderPerm") if permloctab is not None: try: permloctab[:] = permloctabnew except TypeError: pass def order_tree_dist(self, ordering, treeglbtab=None, sizeglbtab=None): treeglbtabnew = _common.array_to_c_array(treeglbtab, self._vertlocnbr) sizeglbtabnew = _common.array_to_c_array(sizeglbtab, self._vertlocnbr) if _common.libptscotch.SCOTCH_dgraphOrderTreeDist( self._dgrafptr, ordering._ordeptr, _common.array_to_pointer(treeglbtabnew), _common.array_to_pointer(sizeglbtabnew), ): raise LibraryError("dgraphOrderTreeDist") try: treeglbtab[:] = treeglbtabnew sizeglbtab[:] = sizeglbtabnew except TypeError: pass def centralized_order_exit(self, cordering): cordering.unregister() if _common.libptscotch.SCOTCH_dgraphCentralizeOrderExit( self._dgrafptr, cordering._cordptr ): raise LibraryError("dgraphCentralizeOrderExit") def stat(self, as_dict=False): """ The values are returned as a 14-element tuple or as a dict, if requested with the `as_dict` parameter """ argue = ( [_common.proper_int() for k in range(3)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(2)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(3)] + [ctypes.c_double() for k in range(2)] ) _common.libptscotch.SCOTCH_dgraphStat( self._dgrafptr, *(ctypes.byref(arg) for arg in argue) ) values = tuple(arg.value for arg in argue) if as_dict: values = dict( zip( ( "velomin", "velomax", "velosum", "veloavg", "velodlt", "degrmin", "degrmax", "degravg", "degrdlt", "edlomin", "edlomax", "edlosum", "edloavg", "edlodlt", ), values, ) ) return values def centralized_order_init( self, cordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None, ): cblknbr = cblknbr or _common.proper_int() if _common.libptscotch.SCOTCH_dgraphCentralizeOrderInit( self._dgrafptr, cordering._ordeptr, _common.array_to_pointer(permtab), _common.array_to_pointer(peritab), cblknbr, _common.array_to_pointer(rangtab), _common.array_to_pointer(treetab), ): raise LibraryError("dgraphCentralizeOrderInit") rv = [ permtab[:] if permtab is not None else None, peritab[:] if peritab is not None else None, cblknbr.value if cblknbr is not None else None, rangtab[:] if rangtab is not None else None, treetab[:] if treetab is not None else None, ] cordering.register(self, *rv) def order_gather(self, dordering, cordering): if _common.libptscotch.SCOTCH_dgraphOrderGather( self._dgrafptr, dordering._ordeptr, cordering._cordptr ): raise LibraryError("dgraphOrderGather") cordering.register(self) def grow(self, seedlocnbr, seedloctab, distmax, partgsttab=None): if _common.libptscotch.SCOTCH_dgraphGrow( self._dgrafptr, _common.proper_int(seedlocnbr), _common.array_to_pointer(seedloctab), _common.proper_int(distmax), _common.array_to_pointer(partgsttab), ): raise LibraryError("dgraphGrow") class HaloReq: class _HaloReqStruct(ctypes.Structure): _fields_ = [ ( "dummy", ctypes.c_char * _common.libptscotch.SCOTCH_dgraphHaloReqSizeof(), ) ] _exitval = True _haloreqptr = None def __init__(self, haloreqptr=None, init=True): if not haloreqptr: _common.libptscotch.SCOTCH_dgraphHaloReqAlloc.restype = ctypes.POINTER( self._HaloReqStruct ) self._haloreqptr = _common.libptscotch.SCOTCH_dgraphHaloReqAlloc() self._haloreqptr = haloreqptr if init: self.init() scotchpy/scotchpy/exception.py000066400000000000000000000042361505500072100171160ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## last_error_msg = [] class LibraryError(Exception): """ Will look for the exception text where errorPrint has put it (once implemented) """ def __init__(self, fname=None, *args, msg=None): if msg: args = (msg,) + args if last_error_msg: args = (last_error_msg.pop(0),) + args if fname: args = ( "".join(("A Scotch Error occured when calling SCOTCH_", fname)), ) + args super().__init__(*args) class CannotCoarsen(Exception): """ Raised when SCOTCH_graphCoarsen or a SCOTCH_graphCoarsenMatch returns 1. """ def __init__(self, *args): super().__init__( "No further coarsening could enforce the threshold parameters", *args ) scotchpy/scotchpy/find_libs.py000066400000000000000000000067071505500072100170560ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import os import sys from importlib import resources # To find the extension def _find_lib(name, directory = None): """ _find_lib(name, dir) searches for library name in directory """ if sys.platform == "darwin": ext = ".dylib" else: ext = ".so" if not directory or not os.path.isdir(directory): dir_path = str(resources.files(__package__)) else: dir_path = directory for f in os.listdir(dir_path): if f.endswith(ext) and (name in f): f_with_dir = os.path.join(dir_path, f) if os.path.exists(f_with_dir): return f_with_dir return "" def _check_lib(name, directory = None): """ Checks that lib `name` in in the directory directory """ if sys.platform == "darwin": ext = ".dylib" else: ext = ".so" if not directory or not os.path.isdir(directory): dirname = str(resources.files(__package__)) else: dirname = directory join_name=os.path.join(dirname, "lib"+ name + ext) if os.path.exists(join_name): return join_name if sys.platform == "darwin": join_name_alt=os.path.join(dirname, name + ext) if os.path.exists(join_name_alt): return join_name_alt return "" # Package with MPI support _ptscotch_lib = _check_lib("ptscotch", os.environ.get("SCOTCHPY_SCOTCH")) _libptscotch_mpi4py_lib = _find_lib("libptscotch_mpi4py", os.environ.get("SCOTCHPY_ERR")) if _ptscotch_lib: if not _libptscotch_mpi4py_lib: raise Exception("The libptscotch has been found but not the libptscotchmpi4py extension") # Search for extension _scotchpy_err_lib = _find_lib("scotchpy_err", os.environ.get("SCOTCHPY_ERR")) if not _scotchpy_err_lib: raise Exception("The scotch_err_py library is not included in the package") # Search for the Scotch library _scotch_lib = _check_lib("scotch", os.environ.get("SCOTCHPY_SCOTCH")) if not _scotch_lib: raise Exception("The scotch library is not included in the package") # Minimal SCOTCH Library version scotch_minimal_version = (7, 0, 6) scotchpy/scotchpy/geom.py000066400000000000000000000070151505500072100160450ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes import numpy as np from .find_libs import _scotchpy_err_lib, _scotch_lib from . import common as _common def geom_alloc(): return Geom(init=False) class Geom: class _Geomtruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_geomSizeof())] _readableattrs = ("dimnnbr", "geomtab") _exitval = True _geomptr = None _dimnnbr = None _geomtab = None def __init__(self, init=True): _common.libscotch.SCOTCH_geomAlloc.restype = ctypes.POINTER(self._GraphStruct) geomptr = _common.libscotch.SCOTCH_geomAlloc() self._geomptr = geomptr if init: self.init() def init(self): if not self._exitval: self.exit() self._exitval = False _common.libscotch.SCOTCH_geomInit(self._geomptr) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._geomptr) def exit(self): if not self._exitval: _common.libscotch.SCOTCH_geomExit(self._geomptr) self._exitval = True def free(self): self.exit() self.init() def _data(self, geomptr=None, store=False): argue = [_common.proper_int(), ctypes.pointer(ctypes.c_double())] _common.libscotch.SCOTCH_geomData( self._geomptr or geomptr, *(ctypes.byref(arg) for arg in argue) ) argue = dict(zip(self._readableattrs, argue)) return_value = dict() for key, val in argue.items(): if isinstance(val, _common.proper_int): if store: setattr(self, "_" + key, val.value) return_value[key] = val.value elif isinstance(val, ctypes.POINTER(ctypes.c_double)): if store: setattr(self, "_" + key, val.contents.value) return_value[key] = val.contents.value return return_value def data(self, as_dict=False): return_value = tuple(getattr(self, attr) for attr in self._readableattrs) if as_dict: return dict(zip(self._readableattrs, return_value)) return return_value scotchpy/scotchpy/graph.py000066400000000000000000001246321505500072100162240ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes import numpy as np from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common from . import strat as _strat from .exception import LibraryError, CannotCoarsen # Try to export networkx _nx_found = True try: import networkx as nx except ModuleNotFoundError: _nx_found = False pass # Detect matplotlib _matplotlib_found = True try: import matplotlib.pyplot as plt except ModuleNotFoundError: _matplotlib_found = False pass def build_graph(*args, grafptr=None, **kwargs): """ Args and kwargs need to be given in the same fashion as Graph.build takes them. """ gra = Graph(grafptr) gra.build(*args, **kwargs) return gra def build_graph_from_csgraph(*args, grafptr=None, **kwargs): """ Args and kwargs need to be given in the same fashion as Graph.build_from_csgraph takes them. """ gra = Graph(grafptr) gra.build_from_csgraph(*args, **kwargs) return gra def load_graph(*args, grafptr=None, **kwargs): """ Args and kwargs need to be given in the same fashion as Graph.load takes them. """ gra = Graph(grafptr) gra.load(*args, **kwargs) return gra def graph_alloc(): return Graph(init=False) class Graph: """ Caution, mutating the given np.arrays voids your warranty. The use of np.array(copy=True) is recommended otherwise. The constructor doesn't build a viable graph, .load or .build has to be called afterwards. `build_graph` or `load_graph` both return viable graphs. """ # Dummy structure class _GraphStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_graphSizeof())] _exitval = True # indicates if the graph is able to get inited _readableattrs = ( "baseval", "vertnbr", "verttab", "vendtab", "velotab", "vlbltab", "edgenbr", "edgetab", "edlotab", ) _grafptr = None _baseval = None _vertnbr = None _verttab = None _vendtab = None _velotab = None _vlbltab = None _edgenbr = None _edgetab = None _edlotab = None def __getattr__(self, name): name = str(name) if name in self._readableattrs: return getattr(self, "_" + name) raise AttributeError(f"'{type(self)}' object has no attribute '{name}'") def __setattr__(self, name, value): name = str(name) if name in self._readableattrs: raise AttributeError("The {} attribute is read-only.".format(name)) super().__setattr__(name, value) def __init__(self, grafptr=None, init=True): if not grafptr: _common.libscotch.SCOTCH_graphAlloc.restype = ctypes.POINTER( self._GraphStruct ) grafptr = _common.libscotch.SCOTCH_graphAlloc() self._grafptr = grafptr if init: self.init() def init(self): if not self._exitval: # raise Exception("You need to exit a graph before re-initing it.") # let's be nice self.exit() self._exitval = False _common.libscotch.SCOTCH_graphInit(self._grafptr) # graphExit mirror def base(self, baseval): rv = _common.libscotch.SCOTCH_graphBase( self._grafptr, _common.proper_int(baseval) ) self._data(store=True) return rv def build( self, # gives the grafptr baseval=None, vertnbr=None, verttab=None, vendtab=None, velotab=None, vlbltab=None, edgenbr=None, edgetab=None, edlotab=None, ): if (edgetab is None) or (verttab is None): raise ValueError("Both edgetab and verttab need to be given") self._edgetab = _common.properly_format(edgetab) self._verttab = _common.properly_format(verttab) self._vendtab = _common.properly_format(vendtab) if isinstance(self._verttab, np.ndarray) and isinstance( self._vendtab, np.ndarray ): if self._verttab.size > self._vendtab.size + 1: raise ValueError("If given, verttab must not be longer than vendtab+1") self._edlotab = _common.properly_format(edlotab) self._velotab = _common.properly_format(velotab) if baseval: self._baseval = baseval elif not vendtab and isinstance(self._verttab, np.ndarray): self._baseval = verttab[0] else: raise ValueError( "Baseval must be given in a non-compact graph or\ when verttab is not an Iterable" ) if vertnbr is None: if not isinstance(self._verttab, np.ndarray): # verttab has no size raise TypeError("Vertnbr must be given when verttab is not an Iterable") else: self._vertnbr = self._verttab.size - 1 else: # vertnbr is given self._vertnbr = vertnbr if edgenbr is None: if not isinstance(self._edgetab, np.ndarray): # verttab has no size raise TypeError("Edgenbr must be given when verttab is not an Iterable") elif vendtab is not None: # non-compact graph self._edgenbr = sum( [ self._vendtab[i] - self._verttab[i] for i in range(self._vendtab.size) ] ) else: # compact graph self._edgenbr = self._verttab[-1] - self._baseval else: # edgenbr is given self._edgenbr = edgenbr self._vlbltab = _common.properly_format(vlbltab) if _common.libscotch.SCOTCH_graphBuild( self._grafptr, _common.proper_int(self._baseval), _common.proper_int(self._vertnbr), _common.array_to_pointer(self._verttab), _common.array_to_pointer(self._vendtab), _common.array_to_pointer(self._velotab), _common.array_to_pointer(self._vlbltab), _common.proper_int(self._edgenbr), _common.array_to_pointer(self._edgetab), _common.array_to_pointer(self._edlotab), ): raise LibraryError("graphBuild") if self.check(): raise LibraryError( msg="Graph check revealed discrepancies in data integrity" ) def build_from_csgraph(self, csg): return self.build(edlotab=csg.data, edgetab=csg.indices, verttab=csg.indptr) def load(self, stream, baseval=-1, flagval=0): """ `stream` being either a file object (result of an `open()`, don't forget to close it) or a filename, as a string or as a bytes object (such as b"file/name"). """ if isinstance(stream, (str, bytes)): with open(stream) as st: return self.load(st, baseval, flagval) interngptr = _common.libscotch.SCOTCH_graphAlloc() _common.libscotch.SCOTCH_graphInit(interngptr) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphLoad(interngptr, filep, baseval, flagval): raise LibraryError("graphLoad") _common.libc.fflush(filep) _common.libc.fclose(filep) data = self._data(grafptr=interngptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_graphExit(interngptr) self.build(**data) def save(self, stream): """ `stream` being either a file object (result of an `open()`, don't forget to close it) or a filename, as a string or as a bytes object (such as b"file/name"). """ if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.save(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphSave(self._grafptr, filep): raise LibraryError("graphSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._grafptr) def exit(self): if not self._exitval: _common.libscotch.SCOTCH_graphExit(self._grafptr) # graphInit mirror self._exitval = True for attrname in self._readableattrs: setattr(self, "".join(("_", attrname)), None) def free(self): self.exit() self.init() def check(self): return _common.libscotch.SCOTCH_graphCheck(self._grafptr) def _data(self, grafptr=None, store=False): """ Reads the 9 values from the C structure with SCOTCH_graphData, stores them in their respective attributes (if `store`) and returns them as a dict. If no grafptr is given as grafptr, this graph's grafptr is used. """ argue = ( [_common.proper_int() for k in range(2)] + [ctypes.pointer(_common.proper_int()) for k in range(4)] + [_common.proper_int()] + [ctypes.pointer(_common.proper_int()) for k in range(2)] ) _common.libscotch.SCOTCH_graphData( grafptr or self._grafptr, *(ctypes.byref(arg) for arg in argue) ) argue = dict(zip(self._readableattrs, argue)) return_value = dict() for key, val in argue.items(): if isinstance(val, _common.proper_int): if store: setattr(self, "_" + key, val.value) return_value[key] = val.value arraysize = {} # matches each array name with its size arraysize["verttab"] = return_value["vertnbr"] arraysize["vendtab"] = return_value["vertnbr"] arraysize["velotab"] = return_value["vertnbr"] arraysize["vlbltab"] = return_value["vertnbr"] arraysize["edgetab"] = return_value["edgenbr"] arraysize["edlotab"] = arraysize["edgetab"] if ctypes.addressof(argue["verttab"].contents) == ( ctypes.addressof(argue["vendtab"].contents) - _common.num_sizeof() ): # if the graph is compact, it stays that way arraysize["verttab"] += 1 del argue["vendtab"] for key, val in argue.items(): if isinstance(val, ctypes.POINTER(_common.proper_int)): try: arey = np.ctypeslib.as_array(val, (arraysize[key],)) except ValueError: # if the pointer is NULL if store: setattr(self, "_" + key, None) return_value[key] = None else: # if no ValueError has appened if store: setattr(self, "_" + key, arey) return_value[key] = arey return return_value def data(self, as_dict=False): # serves as grafptr """ The values are returned as a 9-element tuple or as a dict, if requested with the `as_dict` parameter """ return_value = tuple(getattr(self, attr) for attr in self._readableattrs) if as_dict: return dict(zip(self._readableattrs, return_value)) return return_value def diam_pv(self): return_value = _common.libscotch.SCOTCH_graphDiamPV(self._grafptr) if return_value == -1: raise LibraryError("graphDiamPV") return return_value if _matplotlib_found and _nx_found: def draw(self, **kwargs): nx.draw(self.tonx(), **kwargs) plt.show() def stat(self, as_dict=False): """ The values are returned as a 14-element tuple or as a dict, if requested with the `as_dict` parameter """ argue = ( [_common.proper_int() for k in range(3)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(2)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(3)] + [ctypes.c_double() for k in range(2)] ) _common.libscotch.SCOTCH_graphStat( self._grafptr, *(ctypes.byref(arg) for arg in argue) ) values = tuple(arg.value for arg in argue) if as_dict: values = dict( zip( ( "velomin", "velomax", "velosum", "veloavg", "velodlt", "degrmin", "degrmax", "degravg", "degrdlt", "edlomin", "edlomax", "edlosum", "edloavg", "edlodlt", ), values, ) ) return values def size(self, as_dict=False): """ The values are returned as a 2-element tuple or as a dict, if requested with the `as_dict` parameter """ return_value = (self.vertnbr, self.edgenbr) if as_dict: return_value = dict(zip(("vertnbr", "edgenbr"), return_value)) return return_value def induce_list(self, vnumnbr, vnumtab, indgraf): if _common.libscotch.SCOTCH_graphInduceList( self._grafptr, _common.proper_int(vnumnbr), _common.array_to_pointer(vnumtab), indgraf._grafptr, ): raise LibraryError("graphInduceList") indgraf._data(store=True) def induce_part(self, vnumnbr, vnumtab, partval, indgraf): if _common.libscotch.SCOTCH_graphInducePart( self._grafptr, _common.proper_int(vnumnbr), _common.array_to_pointer(vnumtab), _common.proper_int(partval), indgraf._grafptr, ): raise LibraryError("graphInducePart") indgraf._data(store=True) def map_init(self, mapping, arch, parttab=None): if parttab is not None: parttabnew = _common.properly_format(parttab) mapping.register(self, parttab=parttabnew) if _common.libscotch.SCOTCH_graphMapInit( self._grafptr, mapping._mappptr, arch._archptr, _common.array_to_pointer(parttabnew), ): raise LibraryError("graphMapInit") if parttabnew is not None: if parttab is not None: try: parttab[:] = parttabnew[:] except TypeError: pass def map_exit(self, mapping): mapping.unregister() _common.libscotch.SCOTCH_graphMapExit(self._grafptr, mapping._mappptr) def map_compute(self, mapping, strat): if _common.libscotch.SCOTCH_graphMapCompute( self._grafptr, mapping._mappptr, strat._straptr ): raise LibraryError("graphMapCompute") def map_fixed_compute(self, mapping, strat): if _common.libscotch.SCOTCH_graphMapFixedCompute( self._grafptr, mapping._mappptr, strat._straptr ): raise LibraryError("graphMapFixedCompute") def remap_compute(self, mapping, mapo, emraval, vmlotab, strat): if _common.libscotch.SCOTCH_graphRemapCompute( self._grafptr, mapping._mappptr, mapo._mappptr, ctypes.c_double(emraval), _common.array_to_pointer(vmlotab), strat._straptr, ): raise LibraryError("graphRemapCompute") def remap_fixed_compute(self, mapping, mapo, emraval, vmlotab, strat): if _common.libscotch.SCOTCH_graphRemapFixedCompute( self._grafptr, mapping._mappptr, mapo._mappptr, ctypes.c_double(emraval), _common.array_to_pointer(vmlotab), strat._straptr, ): raise LibraryError("graphRemapFixedCompute") def map_load(self, mapping, stream): if isinstance(stream, (str, bytes)): with open(stream) as st: return self.map_load(mapping, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphMapLoad( self._grafptr, mapping._mappptr, filep ): raise LibraryError("graphMapLoad") _common.libc.fflush(filep) _common.libc.fclose(filep) def map_save(self, mapping, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.map_save(mapping, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphMapSave( self._grafptr, mapping._mappptr, filep ): raise LibraryError("graphMapSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def map_view(self, mapping, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.map_view(mapping, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphMapView( self._grafptr, mapping._mappptr, filep ): raise LibraryError("graphMapView") _common.libc.fflush(filep) _common.libc.fclose(filep) def order( self, strat=None, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None, ): strat = strat or _strat.Strat(init=True) cblknbr = cblknbr or _common.proper_int() if _common.libscotch.SCOTCH_graphOrder( self._grafptr, strat._straptr, _common.array_to_pointer(permtab), _common.array_to_pointer(peritab), ctypes.byref(cblknbr), _common.array_to_pointer(rangtab), _common.array_to_pointer(treetab), ): raise LibraryError("graphOrder") def order_init( self, ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None, ): cblknbr = cblknbr or _common.proper_int() if _common.libscotch.SCOTCH_graphOrderInit( self._grafptr, ordering._ordeptr, permtab, peritab, ctypes.byref(cblknbr), rangtab, treetab, ): raise LibraryError("graphOrderInit") rv = [ permtab[:] if permtab is not None else None, peritab[:] if peritab is not None else None, cblknbr.value if cblknbr is not None else None, rangtab[:] if rangtab is not None else None, treetab[:] if treetab is not None else None, ] ordering.register(self, *rv) def order_exit(self, ordering): ordering.unregister() if _common.libscotch.SCOTCH_graphOrderExit(self._grafptr, ordering._ordeptr): raise LibraryError("graphOrderExit") def order_check(self, ordering): if _common.libscotch.SCOTCH_graphOrderCheck(self._grafptr, ordering._ordeptr): raise LibraryError("graphOrderCheck") def order_compute(self, ordering, strat): if _common.libscotch.SCOTCH_graphOrderCompute( self._grafptr, ordering._ordeptr, strat._straptr ): raise LibraryError("graphOrderCompute") def order_compute_list(self, ordering, listtab, strat): """ The listnbr is taken from listtab's length. """ if _common.libscotch.SCOTCH_graphOrderComputeList( self._grafptr, ordering._ordeptr, len(listtab), _common.array_to_pointer(listtab), strat._straptr, ): raise LibraryError("graphOrderComputeList") def order_load(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream) as st: return self.order_load(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphOrderLoad( self._grafptr, ordering._ordeptr, filep ): raise LibraryError("graphOrderLoad") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.order_save(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphOrderSave( self._grafptr, ordering._ordeptr, filep ): raise LibraryError("graphOrderSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_map(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.order_save_map(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphOrderSaveMap( self._grafptr, ordering._ordeptr, filep ): raise LibraryError("graphOrderSaveMap") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_tree(self, ordering, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.order_save_tree(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphOrderSaveTree( self._grafptr, ordering._ordeptr, filep ): raise LibraryError("graphOrderSaveTree") _common.libc.fflush(filep) _common.libc.fclose(filep) def coarsen(self, coarvertnbr, coarrat, flagval, coargraf, coarmulttab=None): """ Raises CannotCoarsen if not because of threshold parameters, raises LibraryError otherwise. """ coarmulttabnew = _common.array_to_c_array( coarmulttab, max(len(coarmulttab), 2 * self.vertnbr) ) rv = _common.libscotch.SCOTCH_graphCoarsen( self._grafptr, _common.proper_int(coarvertnbr), ctypes.c_double(coarrat), _common.proper_int(flagval), coargraf._grafptr, ctypes.byref(coarmulttabnew), ) coargraf._data(store=True) if rv: if rv == 1: raise CannotCoarsen raise LibraryError("graphCoarsen") if coarmulttab is not None: try: coarmulttab[:] = coarmulttabnew[:] # replacing each element except: pass def coarsen_match(self, coarvertnbr, coarrat, flagval, finematetab=None): """ Modifies finematetab in-place if successfully created, raises CannotCoarsen if not because of threshold parameters, raises LibraryError otherwise. Returns coarvertnbr. """ finematetabnew = _common.array_to_c_array( finematetab, max(len(finematetab), self.vertnbr) ) coarvertnbrnew = _common.proper_int(coarvertnbr) rv = _common.libscotch.SCOTCH_graphCoarsenMatch( self._grafptr, ctypes.byref(coarvertnbrnew), ctypes.c_double(coarrat), _common.proper_int(flagval), finematetabnew, ) if rv: if rv == 1: raise CannotCoarsen raise LibraryError("graphCoarsenMatch") if finematetab is not None: try: finematetab.clear() finematetab.extend(finematetabnew) except TypeError: pass return coarvertnbrnew.value def coarsen_build(self, coarvertnbr, finematetab, coargraf, coarmulttab=None): finematetabnew = _common.array_to_c_array( finematetab, max(len(finematetab), self.vertnbr) ) coarmulttabnew = _common.array_to_c_array( coarmulttab, max(len(coarmulttab), 2 * coarvertnbr) ) if _common.libscotch.SCOTCH_graphCoarsenBuild( self._grafptr, _common.proper_int(coarvertnbr), finematetabnew, coargraf._grafptr, coarmulttabnew, ): raise LibraryError("graphCoarsenBuild") coargraf._data(store=True) for tab, tabnew in ( (finematetab, finematetabnew), (coarmulttab, coarmulttabnew), ): if tab is not None: try: tab.clear() tab.extend(tabnew) except TypeError: pass def color(self, colotab=None, flagval=0): """ If colotab is given as a list or an array of integers, it is updated with the returned values. The colonbr value can be obtained by applying the max() function to colotab. """ if colotab is None: colotab = [-1 for _ in range(self._vertnbr)] colonbr = _common.proper_int(len(colotab)) colotbb = _common.array_to_pointer(colotab) if _common.libscotch.SCOTCH_graphColor( self._grafptr, colotbb, ctypes.byref(colonbr), _common.proper_int(flagval) ): raise LibraryError("graphColor") try: colotab[:] = colotbb[: len(colotab)] except TypeError: pass return colotbb[: len(colotab)] def tab_load(self, stream, parttab=None): if isinstance(stream, (str, bytes)): with open(stream) as st: return self.tab_load(parttab, st) if parttab is None: parttabnew = (_common.proper_int * self._vertnbr)() else: parttabnew = (_common.proper_int * max(len(parttab), self._vertnbr))( *parttab ) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphTabLoad( self._grafptr, _common.array_to_pointer(parttab), filep ): raise LibraryError("graphTabLoad") _common.libc.fflush(filep) if parttab is not None: try: parttab[:] = parttabnew[:] # replacing each element except TypeError: pass if _nx_found: def tonx(self): vertnbr = self._vertnbr verttab = self._verttab edgetab = self._edgetab baseval = 0 if self._baseval is None else self._baseval edlotab = self._edlotab g = nx.Graph() g.add_nodes_from(range(baseval, vertnbr+baseval)) for i in range(baseval, vertnbr+baseval): for ind in range(verttab[i-baseval],verttab[i+1-baseval]): j = ind - baseval g.add_edge(i,edgetab[j], weight = None if edlotab is None else edlotab[j]) return g def tab_save(self, stream, parttab=None): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.tab_save(parttab, st) parttabnew = _common.array_to_pointer(parttab) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_graphTabSave(self._grafptr, parttabnew, filep): raise LibraryError("graphTabSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def geom_load_chac(self, geom, grafstream, geomstream, string): if isinstance(grafstream, (str, bytes)): with open(grafstream) as st: return self.geom_load_chac(geom, st, geomstream, string) if isinstance(geomstream, (str, bytes)): with open(geomstream) as st: return self.geom_load_chac(geom, grafstream, st, string) interngraptr = _common.libscotch.SCOTCH_graphAlloc() interngeoptr = _common.libscotch.SCOTCH_geomAlloc() _common.libscotch.SCOTCH_graphInit(interngraptr) _common.libscotch.SCOTCH_geomInit(interngeoptr) grafstream.flush() geomstream.flush() nfilenogra = _common.libc.dup(grafstream.fileno()) nfilenogeo = _common.libc.dup(geomstream.fileno()) filepgra = _common.libc.fdopen(nfilenogra, grafstream.mode.encode()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) if _common.libscotch.SCOTCH_graphGeomLoadChac( interngraptr, interngeoptr, grafstream, geomstream, ctypes.c_char_p(string) ): raise LibraryError("graphGeomLoadChac") _common.libc.fflush(filepgra) _common.libc.fflush(filepgeo) geom._data(interngeoptr, store=True) data = self._data(grafptr=interngraptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_graphExit(interngraptr) _common.libscotch.SCOTCH_geomExit(interngeoptr) self.build(**data) def geom_load_habo(self, geom, grafstream, geomstream, string): if isinstance(grafstream, (str, bytes)): with open(grafstream) as st: return self.geom_load_habo(geom, st, geomstream, string) if isinstance(geomstream, (str, bytes)): with open(geomstream) as st: return self.geom_load_habo(geom, grafstream, st, string) interngraptr = _common.libscotch.SCOTCH_graphAlloc() interngeoptr = _common.libscotch.SCOTCH_geomAlloc() _common.libscotch.SCOTCH_graphInit(interngraptr) _common.libscotch.SCOTCH_geomInit(interngeoptr) grafstream.flush() geomstream.flush() nfilenogra = _common.libc.dup(grafstream.fileno()) nfilenogeo = _common.libc.dup(geomstream.fileno()) filepgra = _common.libc.fdopen(nfilenogra, grafstream.mode.encode()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) if _common.libscotch.SCOTCH_graphGeomLoadHabo( interngraptr, interngeoptr, grafstream, geomstream, ctypes.c_char_p(string) ): raise LibraryError("graphGeomLoadHabo") _common.libc.fflush(filepgra) _common.libc.fflush(filepgeo) geom._data(interngeoptr, store=True) data = self._data(grafptr=interngraptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_graphExit(interngraptr) _common.libscotch.SCOTCH_geomExit(interngeoptr) self.build(**data) def geom_load_scot(self, geom, grafstream, geomstream, string): if isinstance(grafstream, (str, bytes)): with open(grafstream) as st: return self.geom_load_scot(geom, st, geomstream, string) if isinstance(geomstream, (str, bytes)): with open(geomstream) as st: return self.geom_load_scot(geom, grafstream, st, string) interngraptr = _common.libscotch.SCOTCH_graphAlloc() interngeoptr = _common.libscotch.SCOTCH_geomAlloc() _common.libscotch.SCOTCH_graphInit(interngraptr) _common.libscotch.SCOTCH_geomInit(interngeoptr) grafstream.flush() geomstream.flush() nfilenogra = _common.libc.dup(grafstream.fileno()) nfilenogeo = _common.libc.dup(geomstream.fileno()) filepgra = _common.libc.fdopen(nfilenogra, grafstream.mode.encode()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) if _common.libscotch.SCOTCH_graphGeomLoadScot( interngraptr, interngeoptr, grafstream, geomstream, ctypes.c_char_p(string) ): raise LibraryError("graphGeomLoadScot") _common.libc.fflush(filepgra) _common.libc.fflush(filepgeo) geom._data(interngeoptr, store=True) data = self._data(grafptr=interngraptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_graphExit(interngraptr) _common.libscotch.SCOTCH_geomExit(interngeoptr) self.build(**data) def geom_save_chac(self, geom, grafstream, geomstream, string): if isinstance(grafstream, (str, bytes)): with open(grafstream) as st: return self.geom_save_chac(geom, st, geomstream, string) if isinstance(geomstream, (str, bytes)): with open(geomstream) as st: return self.geom_save_chac(geom, grafstream, st, string) grafstream.flush() geomstream.flush() nfilenogra = _common.libc.dup(grafstream.fileno()) nfilenogeo = _common.libc.dup(geomstream.fileno()) filepgra = _common.libc.fdopen(nfilenogra, grafstream.mode.encode()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) if _common.libscotch.SCOTCH_graphGeomSaveChac( self._grafptr, geom._geomptr, grafstream, geomstream, ctypes.c_char_p(string), ): raise LibraryError("graphGeomSaveChac") _common.libc.fflush(filepgra) _common.libc.fflush(filepgeo) def geom_save_scot(self, geom, grafstream, geomstream, string): if isinstance(grafstream, (str, bytes)): with open(grafstream) as st: return self.geom_save_scot(geom, st, geomstream, string) if isinstance(geomstream, (str, bytes)): with open(geomstream) as st: return self.geom_save_scot(geom, grafstream, st, string) grafstream.flush() geomstream.flush() nfilenogra = _common.libc.dup(grafstream.fileno()) nfilenogeo = _common.libc.dup(geomstream.fileno()) filepgra = _common.libc.fdopen(nfilenogra, grafstream.mode.encode()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) if _common.libscotch.SCOTCH_graphGeomSaveScot( self._grafptr, geom._geomptr, grafstream, geomstream, ctypes.c_char_p(string), ): raise LibraryError("graphGeomSaveScot") _common.libc.fflush(filepgra) _common.libc.fflush(filepgeo) for _stringmethodname, _docstring in ( ( "", "This routine computes a partition of the given graph structure, with respect to the given strategy.", ), ( "fixed", "This routine computes a partition of the given graph structure with respect to the given strategy and the fixed vertices in maptab.", ), ( "ovl", "This routine computes a partition with overlap of the given graph structure, with respect to the given strategy.", ), ): def _graph_part_method(graf, partnbr, strat=None, parttab=None, methname=None): strat = strat or _strat.Strat(init=True) parttabnew = _common.array_to_c_array(parttab, max(len(parttab), graf.vertnbr)) libfunc = getattr(_common.libscotch, "SCOTCH_graphPart" + methname.capitalize()) if libfunc( graf._grafptr, _common.proper_int(partnbr), strat._straptr, ctypes.byref(parttabnew), ): raise LibraryError("graphPart" + methname.capitalize()) if parttab is not None: try: parttab[:] = parttabnew except TypeError: pass _gloname = ( "_".join(("graph_part", _stringmethodname)) if _stringmethodname else "graph_part" ) globals()[_gloname] = _common.wrap( _common.curry(_graph_part_method, methname=_stringmethodname), __name__=_gloname, __doc__=_docstring, ) setattr( Graph, "_".join(("part", _stringmethodname)) if _stringmethodname else "part", _common.wrap( _common.curry(_graph_part_method, methname=_stringmethodname), __name__="_".join(("part", _stringmethodname)), __doc__=_docstring, ), ) for _stringmethodname, _docstring in ( ("", ""), ("fixed", " and the fixed vertices in maptab"), ): # Graph.repart def _graph_repart_method( self, partnbr, parotab, emraval, vmlotab, strat=None, parttab=None, methname=None, ): strat = strat or _strat.Strat(init=True) parttabnew = _common.array_to_c_array(parttab, max(len(parttab), self.vertnbr)) libfunc = getattr( _common.libscotch, "SCOTCH_graphRepart" + methname.capitalize() ) if libfunc( self._grafptr, _common.proper_int(partnbr), _common.array_to_pointer(parotab), ctypes.c_double(emraval), _common.array_to_pointer(vmlotab), strat._straptr, ctypes.byref(parttabnew), ): raise LibraryError("graphRepart" + methname.capitalize()) if parttab is not None: try: parttab[:] = parttabnew except TypeError: pass _docstring = "".join( ( "This routine computes a repartitionning of the given graph structure", "with respect to the given strategy", _docstring, ".", ) ) setattr( Graph, "_".join(("repart", _stringmethodname)) if _stringmethodname else "repart", _common.wrap( _common.curry(_graph_repart_method, methname=_stringmethodname), __name__="_".join(("repart", _stringmethodname)), __doc__=_docstring, ), ) # Graph.map def _graph_map_method(self, arch, strat=None, parttab=None, methname=None): strat = strat or _strat.Strat(init=True) parttabnew = _common.array_to_c_array(parttab, max(len(parttab), self.vertnbr)) libfunc = getattr(_common.libscotch, "SCOTCH_graphMap" + methname.capitalize()) if libfunc( self._grafptr, arch._archptr, strat._straptr, ctypes.byref(parttabnew) ): raise LibraryError("graphMap" + methname.capitalize()) if parttab is not None: try: parttab[:] = parttabnew except TypeError: pass _docstring = "".join( ( "This routine computes a mapping of the given graph structure onto the", "given target architecture with respect to the given strategy", _docstring, ".", ) ) setattr( Graph, "_".join(("map", _stringmethodname)) if _stringmethodname else "map", _common.wrap( _common.curry(_graph_map_method, methname=_stringmethodname), __name__="_".join(("map", _stringmethodname)), __doc__=_docstring, ), ) # Graph.remap def _graph_remap_method( self, arch, parotab, emraval, vmlotab, strat=None, parttab=None, methname=None ): strat = strat or _strat.Strat(init=True) parttabnew = _common.array_to_c_array(parttab, max(len(parttab), self.vertnbr)) libfunc = getattr( _common.libscotch, "SCOTCH_graphRemap" + methname.capitalize() ) if libfunc( self._grafptr, arch._archptr, _common.array_to_pointer(parotab), ctypes.c_double(emraval), _common.array_to_pointer(vmlotab), strat._straptr, ctypes.byref(parttabnew), ): raise LibraryError("graphRemap" + methname.capitalize()) if parttab is not None: try: parttab[:] = parttabnew except TypeError: pass _docstring = "".join( ( "This routine computes a remapping of the given graph structure onto", "the given target architecture with respect to the given strategy", _docstring, ".", ) ) setattr( Graph, "_".join(("remap", _stringmethodname)) if _stringmethodname else "remap", _common.wrap( _common.curry(_graph_remap_method, methname=_stringmethodname), __name__="_".join(("remap", _stringmethodname)), __doc__=_docstring, ), ) scotchpy/scotchpy/maporder.py000066400000000000000000000161661505500072100167360ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes import numpy as np from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common # from .exception import LibraryError class _MapOrderBase: """Allows for extreme factorization in Mapping and Ordering classes""" _first = None # replaces the _exitval attr and allows for disalloc security _fnampre = None def __init__(self): if self._fnampre is None: raise NotImplementedError def init(self, first, *args): funcname = "_".join((self._fnampre, "init")) func = getattr(first, funcname) return func(self, *args) def register(self, first): if self._first is not None: self.exit() self._first = first def exit(self): if self._first is not None: funcname = "_".join((self._fnampre, "exit")) func = getattr(self._first, funcname) return func(self) def unregister(self): if self._first is not None: self._first = None def _meth(self, *args, fname=None): funcname = "_".join((self._fnampre, fname)) func = getattr(self._first, funcname) return func(self, *args) def map_alloc(): """ This function returns a Mapping object """ return Mapping() class Mapping(_MapOrderBase): """Mapping class constructor""" class _MappingStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_mapSizeof())] _re_map = None _fnampre = "map" def __init__(self, *args): super().__init__() _common.libscotch.SCOTCH_mapAlloc.restype = ctypes.POINTER(self._MappingStruct) mappptr = _common.libscotch.SCOTCH_mapAlloc() self._mappptr = mappptr if args: self.init(*args) def register(self, first, parttab=None): if parttab is not None and not isinstance(parttab, np.ndarray): if parttab.dtype != _common.proper_int(): raise TypeError("The parttab argument must be properly formatted") self._parttab = parttab super().register(first) def unregister(self): self._re_map = None self._parttab = None super().unregister() def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._mappptr) compute = _common.curry(_meth, fname="compute") fixed_compute = _common.curry(_meth, fname="fixed_compute") load = _common.curry(_meth, fname="load") save = _common.curry(_meth, fname="save") view = _common.curry(_meth, fname="view") def re_compute(self, *args): self._first.remap_compute(self, *args) def re_fixed_compute(self, *args): self._first.remap_fixed_compute(self, *args) class Ordering(_MapOrderBase): """Ordering class constructor""" class _OrderingStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_orderSizeof())] _fnampre = "order" def __init__(self, *args): super().__init__() _common.libscotch.SCOTCH_orderAlloc.restype = ctypes.POINTER( self._OrderingStruct ) ordeptr = _common.libscotch.SCOTCH_orderAlloc() self._ordeptr = ordeptr if args: self.init(*args) def register(self, first, permtab, peritab, cblknbr, rangtab, treetab): self._permtab = permtab self._peritab = peritab self._cblkptr = [cblknbr] self._rangtab = rangtab self._treetab = treetab super().register(first) def unregister(self): self._permtab = None self._peritab = None self._cblkptr = None self._rangtab = None self._treetab = None super().unregister() def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._ordeptr) check = _common.curry(_meth, fname="check") compute = _common.curry(_meth, fname="compute") compute_list = _common.curry(_meth, fname="compute_list") load = _common.curry(_meth, fname="load") save = _common.curry(_meth, fname="save") save_map = _common.curry(_meth, fname="save_map") save_tree = _common.curry(_meth, fname="save_tree") def order_alloc(): """ This function returns an Ordering object """ return Ordering() if _ptscotch_lib: class DOrdering: """DOrdering class constructor""" class _DOrderStruct(ctypes.Structure): _fields_ = [ ("dummy", ctypes.c_char * _common.libptscotch.SCOTCH_dorderSizeof()) ] def __init__(self, *args): _common.libptscotch.SCOTCH_dorderAlloc.restype = ctypes.POINTER( self._DOrderStruct ) dordptr = _common.libptscotch.SCOTCH_dorderAlloc() self._dordptr = dordptr if args: self.init(*args) def __del__(self): _common.libptscotch.SCOTCH_memFree(self._dordptr) class DMapping: """DMapping class constructor""" class _DMappingStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libptscotch.SCOTCH_dmapSizeof())] def __init__(self, *args): _common.libptscotch.SCOTCH_dmapAlloc.restype = ctypes.POINTER( self._DMappingStruct ) dmappptr = _common.libptscotch.SCOTCH_dmapAlloc() self._dmappptr = dmappptr if args: self.init(*args) def __del__(self): _common.libptscotch.SCOTCH_memFree(self._dmappptr) def dorder_alloc(): """ This function returns a DOrdering object """ return DOrdering() def dmap_alloc(): """ This function returns a DMapping object """ return DMapping() scotchpy/scotchpy/mesh.py000066400000000000000000000506441505500072100160600ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes import numpy as np from .find_libs import _scotchpy_err_lib, _scotch_lib, _ptscotch_lib from . import common as _common from .exception import LibraryError from . import strat as _strat def build_mesh(*args, meshptr=None, **kwargs): """ args and kwargs need to be given in the same fashion as Mesh.build takes them. """ mesh = Mesh(meshptr) mesh.build(*args, **kwargs) return mesh def load_mesh(*args, meshptr=None, **kwargs): """ args and kwargs need to be given in the same fashion as Mesh.load takes them. """ mesh = Mesh(meshptr) mesh.load(*args, **kwargs) return mesh def mesh_alloc(): return Mesh(init=False) class Mesh: """ Caution, mutating the given np.arrays will void your warranty. The use of no.array(copy=True) is recommended otherwise. The constructor doesn't build a viable mesh, .load() or .build() must be called afterwards. 'build_mesh' and 'load_mesh' both return viable meshes. """ class _MeshStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_meshSizeof())] _exitval = True _readableattrs = ( "velmbas", "vnodbas", "velmnbr", "vnodnbr", "verttab", "vendtab", "velotab", "vnlotab", "vlbltab", "edgenbr", "edgetab", ) _meshptr = None _velmbas = None _vnodbas = None _velmnbr = None _vnodnbr = None _verttab = None _vendtab = None _velotab = None _vnlotab = None _vlbltab = None _edgenbr = None _edgetab = None _degrnbr = None # not sure if needed def __getattr__(self, name): name = str(name) if name in self._readableattrs: return getattr(self, "_" + name) raise AttributeError(f"'{type(self)}' object has no attribute '{name}'") def __setattr__(self, name, value): name = str(name) if name in self._readableattrs: raise AttributeError("attribute {} is read-only".format(name)) super().__setattr__(name, value) def __init__(self, init=True): _common.libscotch.SCOTCH_meshAlloc.restype = ctypes.POINTER(self._MeshStruct) meshptr = _common.libscotch.SCOTCH_meshAlloc() self._meshptr = meshptr if init: self.init() def init(self): if not self._exitval: self.exit() self._exitval = False _common.libscotch.SCOTCH_meshInit(self._meshptr) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._meshptr) def exit(self): if not self._exitval: _common.libscotch.SCOTCH_meshExit(self._meshptr) self._exitval = True def _data(self, meshptr, store=False): """ Reads the 12 values from the C structure with SCOCTCH_meshData, stores them in their respective attributes if store is True. and returns them as a dict. If no meshptr is given, the meshptr of the instance is used. """ argue = ( [_common.proper_int() for k in range(4)] + [ctypes.pointer(_common.proper_int()) for k in range(5)] + [_common.proper_int()] + [ctypes.pointer(_common.proper_int())] + [_common.proper_int()] ) _common.libscotch.SCOTCH_meshData( meshptr or self._meshptr, *(ctypes.byref(arg) for arg in argue) ) argue = dict(zip(self._readableattrs, argue)) return_value = dict() for key, val in argue.items(): if isinstance(val, _common.proper_int): if store: setattr(self, "_" + key, val.value) return_value[key] = val.value vertnbr = return_value["velmnbr"] + return_value["vnodnbr"] arraysize = {} # matches each array name with its size arraysize["vendtab"] = vertnbr arraysize["velotab"] = return_value["velmnbr"] arraysize["vnlotab"] = return_value["vnodnbr"] arraysize["vlbltab"] = vertnbr arraysize["edgetab"] = return_value["edgenbr"] if ctypes.addressof(argue["vendtab"]) == ( ctypes.addressof(argue["verttab"].contents) + _common.num_sizeof() ): # if the mesh is compact, it stays the same arraysize["verttab"] = vertnbr + 1 del argue["vendtab"] else: arraysize["verttab"] = vertnbr for key, val in argue.items(): if isinstance(val, ctypes.POINTER(_common.proper_int)): try: arey = np.ctypeslib.as_array(val, shape=(arraysize[key],)) except ValueError: if store: setattr(self, "_" + key, None) return_value[key] = None else: if store: setattr(self, "_" + key, arey) return_value[key] = arey return return_value def build( self, velmbas=None, vnodbas=None, velmnbr=None, vnodnbr=None, verttab=None, vendtab=None, velotab=None, vnlotab=None, vlbltab=None, edgenbr=None, edgetab=None, ): if (verttab is None) or (edgetab is None): raise ValueError("Both verttab and edgetab need to be given") self._verttab = _common.properly_format(verttab) self._edgetab = _common.properly_format(edgetab) self._vendtab = _common.properly_format(vendtab) if isinstance(self._verttab, np.ndarray) and isinstance( self._vendtab, np.ndarray ): if self._verttab.size > self._vendtab.size + 1: raise ValueError( "if given, verttab and vendtab must not be longer than edgetab" ) self._velotab = _common.properly_format(velotab) self._vnlotab = _common.properly_format(vnlotab) self._vlbltab = _common.properly_format(vlbltab) if (velmbas is not None) and (vnodbas is not None): self._velmbas = velmbas self._vnodbas = vnodbas else: raise ValueError("Both velmbas and vnodbas need to be given") if vnodnbr is None: if not isinstance(self._verttab, np.ndarray): raise TypeError("Vnodnbr must be given when vnlotab is not an Iterable") elif vnlotab: self._vnodnbr = self._vnlotab.size else: self._vnodnbr = velmbas + velmnbr if velmnbr is None: if not isinstance(self._verttab, np.ndarray): raise TypeError("Velmnbr must be given when velotab is not an Iterable") self._velmnbr = velmnbr if edgenbr is None: if not isinstance(self._edgetab, np.ndarray): # verttab has no size raise TypeError("Edgenbr must be given when verttab is not an Iterable") elif vendtab: # non-compact mesh self._edgenbr = sum( [ self._vendtab[i] - self._verttab[i] for i in range(self._verttab.size) ] ) else: # compact mesh self._edgenbr = self._verttab[-1] - self._baseval else: # edgenbr is given self._edgenbr = edgenbr self._vlbltab = _common.properly_format(vlbltab) if _common.libscotch.SCOTCH_meshBuild( self._meshptr, _common.proper_int(velmbas), _common.proper_int(vnodbas), _common.proper_int(velmnbr), _common.proper_int(vnodnbr), _common.array_to_pointer(verttab), _common.array_to_pointer(vendtab), _common.array_to_pointer(velotab), _common.array_to_pointer(vnlotab), _common.array_to_pointer(vlbltab), _common.proper_int(edgenbr), _common.array_to_pointer(edgetab), ): raise LibraryError("meshBuild") if self.check(): raise ValueError("Mesh is not valid") def check(self): return _common.libscotch.SCOTCH_meshCheck(self._meshptr) def data(self, as_dict=False): return_value = tuple(getattr(self, attr) for attr in self._readableattrs) if as_dict: return dict(zip(self._readableattrs, return_value)) return return_value def load(self, stream, baseval=-1): if isinstance(stream, str): with open(stream) as st: return self.Load( st, ) internmptr = _common.libscotch.SCOTCH_meshAlloc() _common.libscotch.SCOTCH_meshInit(internmptr) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_meshLoad(internmptr, filep, baseval): raise LibraryError("meshLoad") _common.libc.fflush(filep) _common.libc.fclose(filep) data = self._data(meshptr=internmptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_meshExit(internmptr) self.build(**data) def save(self, stream): if isinstance(stream, str): with open(stream, "w+") as st: return self.save(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_meshSave(self._meshptr, filep): raise LibraryError("meshSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def size(self, as_dict=False): return_value = (self.velmnbr, self.vnodnbr, self.edgenbr) if as_dict: return dict(zip(("velmnbr", "vnodnbr", "edgenbr"), return_value)) return return_value def stat(self, as_dict=False): argue = ( [_common.proper_int() for k in range(3)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(2)] + [ctypes.c_double() for k in range(2)] + [_common.proper_int() for k in range(2)] + [ctypes.c_double() for k in range(2)] ) _common.libscotch.SCOTCH_meshStat( self._meshptr, *(ctypes.byref(arg) for arg in argue) ) values = tuple(arg.value for arg in argue) if as_dict: return dict( zip( ( "vnlomin", "vnlomax", "vnlosum", "vnloavg", "vnloadl", "edegmin", "edegmax", "edegavg", "edegdlt", "ndegmin", "ndegmax", "ndegavg", "ndegdlt", ), values, ) ) return values def graph(self, graf): if _common.libscotch.SCOTCH_meshGraph(self._meshptr, graf._grafptr): raise LibraryError("meshGraph") def graph_dual(self, graf, ncomval): if _common.libscotch.SCOTCH_meshGraphDual( self._meshptr, graf._grafptr, _common.proper_int(ncomval) ): raise LibraryError("meshGraphDual") def order( self, strat=None, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None, ): strat = strat or _strat.Strat(init=True) cblknbr = cblknbr or _common.proper_int() if _common.libscotch.SCOTCH_meshOrder( self._meshptr, strat._straptr, permtab, peritab, ctypes.byref(cblknbr), rangtab, treetab, ): raise LibraryError("meshOrder") def order_init( self, ordering, permtab=None, peritab=None, cblknbr=None, rangtab=None, treetab=None, ): cblknbr = cblknbr or _common.proper_int() if _common.libscotch.SCOTCH_meshOrderInit( self._meshptr, ordering._ordeptr, ctypes.byref(permtab), ctypes.byref(peritab), ctypes.byref(cblknbr), ctypes.byref(rangtab), ctypes.byref(treetab), ): raise LibraryError("meshOrderInit") rv = (permtab[:], peritab[:], cblknbr.value, rangtab[:], treetab[:]) ordering.register(self, *rv) def order_exit(self, ordering): ordering.unregister() _common.libscotch.SCOTCH_meshOrderExit(self._meshptr, ordering._ordeptr) def order_check(self, ordering): if _common.libscotch.SCOTCH_meshOrderCheck(self._meshptr, ordering._ordeptr): raise LibraryError("meshOrderCheck") def order_compute(self, ordering, strat): if _common.libscotch.SCOTCH_meshOrderCompute( self._meshptr, ordering._ordeptr, strat._straptr ): raise LibraryError("meshOrderCompute") self._data(store=True) def order_save(self, ordering, stream): if isinstance(stream, str): with open(stream, "w+") as st: return self.order_save(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_meshOrderSave( self._meshptr, ordering._ordeptr, filep ): raise LibraryError("meshOrderSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_map(self, ordering, stream): if isinstance(stream, str): with open(stream, "w+") as st: return self.order_save_map(ordering, st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_meshOrderSaveMap( self._meshptr, ordering._ordeptr, filep ): raise LibraryError("meshOrderSaveMap") _common.libc.fflush(filep) _common.libc.fclose(filep) def order_save_tree(self, ordering, stream): if isinstance(stream, str): with open(stream, "w+") as st: return self.order_save_tree(ordering, st) # issue??? stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_meshOrderSaveTree( self._meshptr, ordering._ordeptr, filep ): raise LibraryError("meshOrderSaveTree") _common.libc.fflush(filep) _common.libc.fclose(filep) def geom_load_habo(self, geom, meshstream, geomstream, string): if isinstance(meshstream, str): with open(meshstream) as mst: return self.geom_load_habo(geom, mst, geomstream, string) if isinstance(geomstream, str): with open(geomstream) as gst: return self.geom_load_habo(geom, meshstream, gst, string) internmptr = _common.libscotch.SCOTCH_meshAlloc() interngptr = _common.libscotch.SCOTCH_geomAlloc() _common.libscotch.SCOTCH_meshInit(internmptr) _common.libscotch.SCOTCH_geomInit(interngptr) meshstream.flush() geomstream.flush() nfilenogeo = _common.libc.dup(geomstream.fileno()) nfilenomes = _common.libc.dup(meshstream.fileno()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) filepmes = _common.libc.fdopen(nfilenomes, meshstream.mode.encode()) if _common.libscotch.SCOTCH_meshGeomLoadHabo( internmptr, interngptr, filepmes, filepgeo, string ): raise LibraryError("meshGeomLoadHabo") _common.libc.fflush(filepgeo) _common.libc.fflush(filepmes) geom._data(interngptr, store=True) data = self._data(meshptr=internmptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_meshExit(internmptr) _common.libscotch.SCOTCH_geomExit(interngptr) self.build(**data) def geom_load_scot(self, geom, meshstream, geomstream, string): if isinstance(meshstream, str): with open(meshstream) as mst: return self.geom_load_scot(geom, mst, geomstream, string) if isinstance(geomstream, str): with open(geomstream) as gst: return self.geom_load_scot(geom, meshstream, gst, string) internmptr = _common.libscotch.SCOTCH_meshAlloc() interngptr = _common.libscotch.SCOTCH_geomAlloc() _common.libscotch.SCOTCH_meshInit(internmptr) _common.libscotch.SCOTCH_geomInit(interngptr) meshstream.flush() geomstream.flush() nfilenogeo = _common.libc.dup(geomstream.fileno()) nfilenomes = _common.libc.dup(meshstream.fileno()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) filepmes = _common.libc.fdopen(nfilenomes, meshstream.mode.encode()) if _common.libscotch.SCOTCH_meshGeomLoadScot( internmptr, interngptr, filepmes, filepgeo, string ): raise LibraryError("meshGeomLoadScot") _common.libc.fflush(filepgeo) _common.libc.fflush(filepmes) geom._data(interngptr, store=True) data = self._data(meshptr=internmptr, store=False) for key, val in data.items(): if val is not None and isinstance(val, _common.Iterable): data[key] = np.array(val, copy=True) _common.libscotch.SCOTCH_meshExit(internmptr) _common.libscotch.SCOTCH_geomExit(interngptr) self.build(**data) def geom_save_scot(self, geom, meshstream, geomstream, string): if isinstance(meshstream, str): with open(meshstream, "w+") as mst: return self.geom_save_scot(geom, mst, geomstream, string) if isinstance(geomstream, str): with open(geomstream, "w+") as gst: return self.geom_save_scot(geom, meshstream, gst, string) meshstream.flush() geomstream.flush() nfilenogeo = _common.libc.dup(geomstream.fileno()) nfilenomes = _common.libc.dup(meshstream.fileno()) filepgeo = _common.libc.fdopen(nfilenogeo, geomstream.mode.encode()) filepmes = _common.libc.fdopen(nfilenomes, meshstream.mode.encode()) if _common.libscotch.SCOTCH_meshGeomSaveScot( self._meshptr, geom._geomptr, filepmes, filepgeo, string ): raise LibraryError("meshGeomSaveScot") _common.libc.fflush(filepgeo) _common.libc.fflush(filepmes) _common.libc.fclose(filepgeo) _common.libc.fclose(filepmes) scotchpy/scotchpy/strat.py000066400000000000000000000165351505500072100162620ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import ctypes from . import common as _common from .exception import LibraryError from .find_libs import _ptscotch_lib def strat_alloc(): return Strat(init=False) class Strat: """ Strat is a class that wraps the SCOTCH_Strat struct and provides a pythonic interface to the SCOTCH_Strat struct """ class _StratStruct(ctypes.Structure): _fields_ = [("dummy", ctypes.c_char * _common.libscotch.SCOTCH_stratSizeof())] _exitval = True def __init__(self, init=True): _common.libscotch.SCOTCH_stratAlloc.restype = ctypes.POINTER(self._StratStruct) straptr = _common.libscotch.SCOTCH_stratAlloc() self._straptr = straptr if init: self.init() def init(self): if not self._exitval: self.exit() self._exitval = False _common.libscotch.SCOTCH_stratInit(self._straptr) def __del__(self): self.exit() _common.libscotch.SCOTCH_memFree(self._straptr) def exit(self): if not self._exitval: _common.libscotch.SCOTCH_stratExit(self._straptr) self._exitval = True # clear each attribute def save(self, stream): if isinstance(stream, (str, bytes)): with open(stream, "w+") as st: return self.save(st) stream.flush() nfileno = _common.libc.dup(stream.fileno()) filep = _common.libc.fdopen(nfileno, stream.mode.encode()) if _common.libscotch.SCOTCH_stratSave(self._straptr, filep): raise LibraryError("stratSave") _common.libc.fflush(filep) _common.libc.fclose(filep) def graph_cluster_build(self, flagval, pwgtmax, densmin, bbalval): if _common.libscotch.SCOTCH_stratGraphClusterBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(pwgtmax), ctypes.c_double(densmin), ctypes.c_double(bbalval), ): raise LibraryError("stratGraphClusterBuild") def graph_map_build(self, flagval, partnbr, balrat): if _common.libscotch.SCOTCH_stratGraphMapBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(partnbr), ctypes.c_double(balrat), ): raise LibraryError("stratGraphMapBuild") def graph_part_ovl_build(self, flagval, partnbr, balrat): if _common.libscotch.SCOTCH_stratGraphPartOvlBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(partnbr), ctypes.c_double(balrat), ): raise LibraryError("stratGraphPartOvlBuild") def graph_order_build(self, flagval, levlnbr, balrat): if _common.libscotch.SCOTCH_stratGraphOrderBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(levlnbr), ctypes.c_double(balrat), ): raise LibraryError("stratGraphOrderBuild") def mesh_order_build(self, flagval, balrat): if _common.libscotch.SCOTCH_stratMeshOrderBuild( self._straptr, _common.proper_int(flagval), ctypes.c_double(balrat) ): raise LibraryError("stratMeshOrderBuild") def dgraph_map(self, string): if _common.libscotch.SCOTCH_stratDgraphMap( self._straptr, ctypes.c_char_p(string) ): raise LibraryError("stratDgraphMap") if _ptscotch_lib: # Define these methods only when libptscotch is present def dgraph_cluster_build(self, flagval, pwgtmax, densmin, bbalval): if _common.libptscotch.SCOTCH_stratDgraphClusterBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(pwgtmax), ctypes.c_double(densmin), ctypes.c_double(bbalval), ): raise LibraryError("stratDgraphClusterBuild") def dgraph_map_build(self, flagval, procnbr, partnbr, balrat): if _common.libptscotch.SCOTCH_stratDgraphMapBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(procnbr), _common.proper_int(partnbr), ctypes.c_double(balrat), ): raise LibraryError("stratDgraphMapBuild") def dgraph_order(self, string): if _common.libptscotch.SCOTCH_stratDgraphOrder( self._straptr, ctypes.c_char_p(string) ): raise LibraryError("stratDgraphOrder") def dgraph_order_build(self, flagval, procnbr, levlnbr, balrat): if _common.libptscotch.SCOTCH_stratDgraphOrderBuild( self._straptr, _common.proper_int(flagval), _common.proper_int(procnbr), _common.proper_int(levlnbr), ctypes.c_double(balrat), ): raise LibraryError("stratDgraphOrderBuild") for _method_name_elements in { ("graph", "bipart"), ("graph", "map"), ("graph", "part", "ovl"), ("graph", "order"), ("mesh", "order"), }: def _strat_string_method(self, string, meth_name_els=None): octets = string if isinstance(string, bytes) else bytes(string, "utf8") libfuncname = "SCOTCH_strat" + "".join( [el[0].capitalize() + el[1:] for el in meth_name_els] ) # SCOTCH_stratGraphPartOvl libfunc = getattr(_common.libscotch, libfuncname) if libfunc(self._straptr, ctypes.c_char_p(octets)): raise LibraryError(libfuncname[7:]) setattr( Strat, "_".join(_method_name_elements), # Strat.graph_part_ovl _common.wrap( _common.curry(_strat_string_method, meth_name_els=_method_name_elements), __name__="_".join(_method_name_elements), ), ) # Similar wrapping can be done to stratXBuild methods # by parsing a {funcname:argsnumber} dict # and deducing the arg types from the number of args scotchpy/src/000077500000000000000000000000001505500072100134745ustar00rootroot00000000000000scotchpy/src/libptscotch_mpi4py.c000066400000000000000000000036751505500072100174730ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause ** ** Copyright 2020-2025 Inria & Université de Bordeaux ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions ** are met: ** ** 1. Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** ** 2. Redistributions in binary form must reproduce the above ** copyright notice, this list of conditions and the following ** disclaimer in the documentation and/or other materials provided ** with the distribution. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ** CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ** TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ** TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ** THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ #define MPICH_SKIP_MPICXX 1 #define OMPI_SKIP_MPICXX 1 #include #include #include #include "ptscotch.h" void dgraph_load_mpi ( void * grafdat, void * input_comm) { MPI_Comm comm = *((MPI_Comm *) input_comm); if (comm == MPI_COMM_NULL) { fprintf (stderr, "Error: MPI_COMM_NULL passed\n"); return; } if (SCOTCH_dgraphInit (grafdat, comm) != 0) /* Ensure grafdat is correctly cast and used */ fprintf (stderr, "Error: failed to initialize distributed graph\n"); } scotchpy/src/scotchpy_err.c000066400000000000000000000063261505500072100163530ustar00rootroot00000000000000/* SPDX-License-Identifier: BSD-2-Clause ** ** Copyright 2020-2025 Inria & Université de Bordeaux ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions ** are met: ** ** 1. Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** ** 2. Redistributions in binary form must reproduce the above ** copyright notice, this list of conditions and the following ** disclaimer in the documentation and/or other materials provided ** with the distribution. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ** CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ** INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ** BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ** TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ** TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ** THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ #include #include #if defined(_WIN32) #define CALL_BACK_EXPORT_API __declspec (dllexport) #else #define CALL_BACK_EXPORT_API #endif #define MAX_CHAR_LEN 2048 typedef void (* pCallBack) (const char *); CALL_BACK_EXPORT_API void setCallBack (pCallBack cb); CALL_BACK_EXPORT_API void SCOTCH_errorPrint (const char *, ...); CALL_BACK_EXPORT_API void SCOTCH_errorPrintW (const char *, ...); static pCallBack callptr = NULL; void setCallBack ( pCallBack funcptr) { callptr = funcptr; } void SCOTCH_errorPrint ( const char * const errstr, /*+ printf-like variable argument list +*/ ...) { va_list errlst; /* Argument list of the call */ char errbuf[MAX_CHAR_LEN]; sprintf (errbuf, "ERROR: "); va_start (errlst, errstr); /* Open variable-argument list */ vsnprintf (errbuf + 7, MAX_CHAR_LEN - 7, errstr, errlst); /* Write arguments to buffer */ va_end (errlst); /* Close variable-argument list */ errbuf[MAX_CHAR_LEN - 1] = '\0'; /* Make sure string is terminated */ if (callptr != NULL) (*callptr) (errbuf); } void SCOTCH_errorPrintW ( const char * const errstr, ...) { va_list errlst; char errbuf[MAX_CHAR_LEN]; sprintf (errbuf, "WARNING: "); va_start (errlst, errstr); /* Open variable-argument list */ vsnprintf (errbuf + 9, MAX_CHAR_LEN - 9, errstr, errlst); /* Write arguments to buffer */ va_end (errlst); /* Close variable-argument list */ errbuf[MAX_CHAR_LEN - 1] = '\0'; /* Make sure string is terminated */ if (callptr != NULL) (*callptr) (errbuf); } scotchpy/tests/000077500000000000000000000000001505500072100140475ustar00rootroot00000000000000scotchpy/tests/__init__.py000066400000000000000000000026121505500072100161610ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## scotchpy/tests/test_arch.py000066400000000000000000000156261505500072100164070ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import scotchpy as SCOTCH import tempfile import os import importlib.resources _data_dir = importlib.resources.files('scotchpy').joinpath("data") # taken from check/test_scotch_arch.c def testMain(): # Due to the inter-depending nature of these tests, they are all in the same method. vnumtab = [0, 4, 1, 5, 7, 11, 13, 15] dimntab = [3, 3, 5, 4, 8] sizetab = [6, 3, 4] linktab = [20, 5, 1] archtab = [SCOTCH.Arch() for _ in range(20)] archnbr = 0 try: archtab[archnbr].hcub(4) except SCOTCH.LibraryError: assert False, "cannot create hcub architecture" raise archnbr += 1 try: archtab[archnbr].cmplt(8) except SCOTCH.LibraryError: assert False, "cannot create cmplt architecture" raise archnbr += 1 try: archtab[archnbr].mesh2(2, 4) except SCOTCH.LibraryError: assert False, "cannot create mesh2D architecture" raise archnbr += 1 try: archtab[archnbr].mesh3(3, 4, 5) except SCOTCH.LibraryError: assert False, "cannot create mesh3D architecture" raise archnbr += 1 try: archtab[archnbr].meshX(dimntab) except SCOTCH.LibraryError: assert False, "cannot create meshXD architecture" raise archnbr += 1 try: archtab[archnbr].tleaf(sizetab, linktab) except SCOTCH.LibraryError: assert False, "cannot create tleaf architecture" raise archnbr += 1 try: archtab[archnbr].torus2(2, 4) except SCOTCH.LibraryError: assert False, "cannot create torus2D architecture" raise archnbr += 1 try: archtab[archnbr].torus3(3, 4, 5) except SCOTCH.LibraryError: assert False, "cannot create torus3D architecture" raise archnbr += 1 try: archtab[archnbr].torusX(dimntab) except SCOTCH.LibraryError: assert False, "cannot create torusXD architecture" raise archnbr += 1 try: archtab[archnbr].sub(archtab[0], vnumtab) except SCOTCH.LibraryError: assert False, "cannot create sub-architecture (1)" raise archnbr += 1 for i in range(archnbr): try: archtab[i + archnbr].sub(archtab[i], vnumtab[:5]) except SCOTCH.LibraryError: assert False, "cannot create sub-architecture ({})".format(2 + i) raise archnbr *= 2 with tempfile.TemporaryDirectory() as tmpdirname: filename = os.path.join(tmpdirname, "test_scotchpy_arch_output.txt") for i in range(archnbr): try: archtab[i].save(filename) except SCOTCH.LibraryError: assert False, "cannot save architecture ({})".format(i + 1) raise for i in range(archnbr - 1, -1, -1): archtab[i].exit() for i in range(archnbr): try: archtab[i].init() archtab[i].load(filename) except SCOTCH.LibraryError: assert False, "cannot load architecture ({})".format(i + 1) raise for i in range(archnbr): archtab[i].exit() # taken from check/test_scotch_arch_deco.c def testDeco(): archtab = [SCOTCH.Arch() for _ in range(6)] listtab = [0, 4, 1, 5, 7] filename1 = os.path.join(_data_dir, "m4x4.grf") tmpdir = tempfile.TemporaryDirectory() filename2 = os.path.join(tmpdir.name, "test_scotchpy_arch_deco_output.txt") try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename1, -1, 0) except SCOTCH.LibraryError: assert False, "cannot load graph" raise vertnbr, _ = graf.size(as_dict=False) assert vertnbr > 8 strat = SCOTCH.Strat() archnbr = 0 for i in range(2): try: if not i: archtab[archnbr].build0(graf, [], strat) else: archtab[archnbr].build2(graf, []) except SCOTCH.LibraryError: assert ( False ), "cannot create decomposition-described architecture ({})".format( 2 * i + 1 ) raise try: if not i: archtab[archnbr + 1].build0(graf, listtab, strat) else: archtab[archnbr + 1].build2(graf, listtab) except SCOTCH.LibraryError: assert ( False ), "cannot create decomposition-described architecture ({})".format( 2 * i + 2 ) raise if i: try: archtab[archnbr + 2].sub(archtab[archnbr], listtab) except SCOTCH.LibraryError: assert False, "cannot create sub-architecture ({})".format(i + 1) raise for j in range(i + 2): try: archtab[archnbr + j].save(filename2) except SCOTCH.LibraryError: assert False, "cannot save architecture ({})".format(archnbr + j + 1) raise archnbr += i + 2 strat.exit() for i in range(archnbr - 1, -1, -1): archtab[i].exit() graf.exit() for i in range(archnbr): try: archtab[i].init() archtab[i].load(filename2) except SCOTCH.LibraryError: assert False, "cannot load architacture ({})".format(i + 1) raise for i in range(archnbr): archtab[i].exit() tmpdir.cleanup() scotchpy/tests/test_coarsen.py000066400000000000000000000206141505500072100171150ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import scotchpy as SCOTCH import scotchpy.common as common import importlib.resources import os _data_dir = importlib.resources.files('scotchpy').joinpath("data") # taken from check/test_scotch_graph_coarsen.c def checkCoarMult(coarmulttab, coarvertnbr, finevertnbr, baseval): finevertnnd = finevertnbr + baseval coarverttmp = finevertnbr for coarvertnum in range(coarvertnbr): finevertnum0 = coarmulttab[coarvertnum * 2] finevertnum1 = coarmulttab[coarvertnum * 2 + 1] if ( finevertnum0 < baseval or finevertnum0 >= finevertnnd or finevertnum1 < baseval or finevertnum1 >= finevertnnd ): raise ValueError("Invalid multinode array (1)") if finevertnum0 != finevertnum1: coarverttmp -= 1 if coarverttmp != coarvertnbr: raise ValueError("Invalid multinode array (2)") def checkFineCoar(finematetab, coarvertnbr, finevertnbr, baseval): finevertnnd = finevertnbr + baseval coarverttmp = finevertnbr for finevertnum in range(baseval, finevertnnd): finevertend = finematetab[finevertnum] if (finevertnnd <= finevertend) or (finevertend < baseval): assert False, "invalid mate array (1)" if finevertend > finevertnum: coarverttmp -= 1 if finematetab[finevertend] != finevertnum: assert False, "invalid mate array (2)" if coarverttmp != coarvertnbr: assert False, "invalid mate array (3)" def testCoarsen(): for filename in ( os.path.join(_data_dir, "bump.grf"), os.path.join(_data_dir, "bump_b100000.grf"), ): try: finegraf = SCOTCH.Graph(init=True) except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise coargraf = SCOTCH.Graph(init=False) with open(filename) as fp: try: finegraf.load(fp, -1, 0) except SCOTCH.LibraryError: assert False, "cannot load {} graph".format(filename) raise baseval, finevertnbr, fineverttax, finevendtax, _, _, _, fineedgetax, _ = ( finegraf.data(as_dict=False) ) print("baseval = {}".format(baseval)) print("finevertnbr = {}".format(finevertnbr)) print("fineverttax = {}".format(fineverttax)) print("finevendtax = {}".format(finevendtax)) print("fineedgetax = {}".format(fineedgetax)) if finegraf.check() != 0: assert False, "invalid graph" raise baseval, finevertnbr, fineverttax, finevendtax, _, _, _, fineedgetax, _ = ( finegraf.data(as_dict=False) ) print("Fine graph baseval = {}".format(baseval)) if fineverttax is not None: fineverttax = [-1 for _ in range(baseval)] + list(fineverttax) if finevendtax is not None: finevendtax = [-1 for _ in range(baseval)] + list(finevendtax) if fineedgetax is not None: fineedgetax = [-1 for _ in range(baseval)] + list(fineedgetax) finematetax = [-1 for _ in range(finevertnbr)] coarvertnbr = 0 try: coarvertnbr = finegraf.coarsen_match( coarvertnbr, 1.0, common.COARSENNOMERGE, finematetax ) except SCOTCH.LibraryError: assert False, "cannot compute matching" raise finematetax = [-1 for _ in range(baseval)] + finematetax checkFineCoar(finematetax, coarvertnbr, finevertnbr, baseval) print("Mate array has {} vertices".format(coarvertnbr)) print("Graph mated with a ratio of {}".format(coarvertnbr / finevertnbr)) coarmulttab = [-1 for _ in range(coarvertnbr * 2)] try: finegraf.coarsen_build( coarvertnbr, finematetax[baseval:], coargraf, coarmulttab ) except SCOTCH.LibraryError: assert False, "cannot compute coarse graph (1)" raise coarvertnbr, coaredgenbr = coargraf.size() print( "Coarse graph has {} vertices and {} edges".format(coarvertnbr, coaredgenbr) ) print("Graph coarsened with a ratio of {}".format(coarvertnbr / finevertnbr)) checkCoarMult(coarmulttab, coarvertnbr, finevertnbr, baseval) coargraf.exit() del coarmulttab finematetax[baseval:] = [~0 for _ in range(finevertnbr)] # match build finevertnnd = finevertnbr + baseval coarvertnbr = 0 for finevertnum in range(baseval, finevertnnd): if finematetax[finevertnum] >= 0: continue coarvertnbr += 1 finematenum = finevertnum if fineverttax is not None and finevendtax is not None: if fineverttax[finevertnum] == finevendtax[finevertnum]: while True: finevertnum += 1 if finevertnum >= finevertnnd: finematetax[finematenum] = finematenum brk = True break if finematetax[finevertnum] < 0: break if brk: break else: for fineedgenum in range( fineverttax[finevertnum], finevendtax[finevertnum] ): finevertend = fineedgetax[fineedgenum] if finematetax[finevertend] < 0: finematenum = finevertend break finematetax[finevertnum] = finematenum finematetax[finematenum] = finevertnum print("Mate array has {} vertices".format(coarvertnbr)) print("Graph mated with a ratio of {}".format(coarvertnbr / finevertnbr)) coarmulttab = [-1 for _ in range(2 * coarvertnbr)] try: finegraf.coarsen_build( coarvertnbr, finematetax[baseval:], coargraf, coarmulttab ) except SCOTCH.LibraryError: assert False, "cannot compute coarse graph (2)" raise coarvertnbr, coaredgenbr = coargraf.size() print( "Coarse graph has {} vertices and {} edges".format(coarvertnbr, coaredgenbr) ) print("Graph coarsened with a ratio of {}".format(coarvertnbr / finevertnbr)) coargraf.exit() del coarmulttab del finematetax coarmulttab = [-1 for _ in range(2 * finevertnbr)] try: finegraf.coarsen(1, 1.0, common.COARSENNONE, coargraf, coarmulttab) except SCOTCH.LibraryError: assert False, "cannot coarsen graph" raise coarvertnbr, _ = coargraf.size() print( "Coarse graph has {} vertices and {} edges".format(coarvertnbr, coaredgenbr) ) print("Graph coarsened with a ratio of {}".format(coarvertnbr / finevertnbr)) checkCoarMult(coarmulttab, coarvertnbr, finevertnbr, baseval) scotchpy/tests/test_context.py000066400000000000000000000106621505500072100171510ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import scotchpy as SCOTCH import ctypes import threading import os # taken from check/test_scotch_context.c class TestThreadData: contptr = None thrdnum = 0 def graphTest(): return SCOTCH.build_graph( verttab=[1, 4, 10, 13, 16, 19, 22, 25], edgetab=[ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], ) def testMain(): for thrdnbr in {3, os.cpu_count()}: try: context = SCOTCH.Context() except SCOTCH.LibraryError: assert False, "cannot initialize context" raise graf0 = graphTest() try: graf1 = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: context.bind_graph(graf0, graf1) except SCOTCH.LibraryError: assert False, "cannot bind context(1)" raise graf1.exit() context.exit() context.init() context.thread_spawn(thrdnbr, None) graf1.init() try: context.bind_graph(graf0, graf1) except SCOTCH.LibraryError: assert False, "cannot bind context(2)" raise graf1.exit() context.exit() coretab = ctypes.POINTER(ctypes.c_int)() coretab = (ctypes.c_int * thrdnbr)() coretab[0] = 0 for thrdnum in range(1, thrdnbr): coretab[thrdnum] = thrdnbr - thrdnum context.init() context.thread_spawn(thrdnbr, coretab) try: context.random_clone() except SCOTCH.LibraryError: assert False, "cannot clone random context" raise graf1.init() try: context.bind_graph(graf0, graf1) except SCOTCH.LibraryError: assert False, "cannot bind context(3)" raise graf1.exit() context.exit() thrdtab = [TestThreadData() for _ in range(thrdnbr)] for thrdnum in range(thrdnbr): thrdtab[thrdnum].thrdnum = thrdnum thrdtab[thrdnum].contptr = context._contextptr context.init() context.thread_import1(thrdnbr) for thrdnum in range(1, thrdnbr): try: threading.Thread( target=context.thread_import2, args=(thrdtab[thrdnum].thrdnum,) ).start() except SCOTCH.LibraryError: assert False, "cannot import thread" raise context.thread_import2(0) graf1.init() try: context.bind_graph(graf0, graf1) except SCOTCH.LibraryError: assert False, "cannot bind context(4)" raise graf1.exit() context.exit() graf0.exit() scotchpy/tests/test_dgraph.py000066400000000000000000000235251505500072100167340ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import sys import pytest import scotchpy as SCOTCH import numpy as np import scotchpy.common as _common import scotchpy.dgraph as PTSCOTCH from scotchpy.common import _ptscotch_lib, _libptscotch_mpi4py_lib import tempfile import importlib.resources import os try: from mpi4py import MPI if _ptscotch_lib and _libptscotch_mpi4py_lib: flag_mpi4py_available = True else: flag_mpi4py_available = False except ImportError: flag_mpi4py_available = False _data_dir = importlib.resources.files('scotchpy').joinpath("data") @pytest.mark.mpi def testDgraphCheck(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD proclocnum = comm.Get_rank() comm.Barrier() graf = PTSCOTCH.DGraph(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: graf.load(fp) else: graf.load(None) if graf.check(): print("Invalid graph") sys.exit(1) graf.exit() comm.Barrier() @pytest.mark.mpi def testDgraphBand(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD procglbnbr = comm.Get_size() proclocnum = comm.Get_rank() comm.Barrier() graf = PTSCOTCH.DGraph(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: graf.load(fp) else: graf.load(None) comm.Barrier() baseval, vertglbnbr, vertlocnbr, _, _, _, _, _, _, _, _, _, _, _, _ = graf.data() fronloctab = np.full(vertlocnbr, -1, _common.proper_int) bandgraf = PTSCOTCH.DGraph(comm) fronloctab[0] = baseval if proclocnum == 1: fronlocnbr = 0 else: fronlocnbr = 1 graf.band(fronlocnbr, fronloctab, 4, bandgraf) fronloctab = None ( baseval, bandvertglbnbr, bandvertlocnbr, _, _, _, _, _, bandvlblloctab, _, _, _, _, _, _, ) = bandgraf.data() tmpdir = tempfile.TemporaryDirectory() tmpfile = os.path.join(tmpdir.name, "test_scotch_dgraph_band_output.txt") if proclocnum == 0: try: with open(tmpfile, "x") as file: pass except FileExistsError: pass comm.Barrier() for procnum in range(procglbnbr): comm.Barrier() if procnum == proclocnum: with open(tmpfile, "a+") as file: if procnum == 0: file.write(f"{bandvertglbnbr}\n") for bandvertlocnum in range(bandvertlocnbr): file.write(f"{bandvlblloctab[bandvertlocnum]}\t1\n") graf.exit() bandgraf.exit() tmpdir.cleanup() @pytest.mark.mpi def testDgraphCoarsen(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD procglbnbr = comm.Get_size() proclocnum = comm.Get_rank() comm.Barrier() graf = PTSCOTCH.DGraph(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: graf.load(fp) else: graf.load(None) _, vertglbnbr, vertlocnbr, _, _, _, _, _, _, _, _, _, _, _, _ = graf.data() coarrat = 0.8 for i in range(3): if i == 0: foldval = _common.COARSENNONE foldstr = "Plain coarsening" elif i == 1: foldval = _common.COARSENFOLD foldstr = "Folding" else: foldval = _common.COARSENFOLDDUP foldstr = "Folding with duplication" if proclocnum == 0: print(foldstr) coargraf = PTSCOTCH.DGraph(comm) o, multloctab = graf.coarsen(0, coarrat, foldval, coargraf) coarstr = "" if o == 0: coarstr = "coarse graph created" if o == 2: coarstr = "folded graph not created here" if o == 3: coarstr = "cannot create coarse graph" _, coarvertglbnbr, coarvertlocnbr, _, _, _, _, _, _, _, _, _, _, _, _ = ( coargraf.data() ) for procnum in range(procglbnbr): comm.Barrier() if procnum == proclocnum: if coarvertlocnbr and vertglbnbr : print( f"{procnum}: {coarstr} ({vertlocnbr} / {coarvertlocnbr} / {float(coarvertglbnbr) / float(vertglbnbr)})" ) coargraf.exit() graf.exit() comm.Barrier() @pytest.mark.mpi def testDgraphGrow(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD procglbnbr = comm.Get_size() proclocnum = comm.Get_rank() comm.Barrier() graf = PTSCOTCH.DGraph(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: graf.load(fp) else: graf.load(None) comm.Barrier() graf.ghst() baseval, vertglbnbr, vertlocnbr, _, vertgstnbr, _, _, _, _, _, _, _, _, _, _ = ( graf.data() ) seedloctab = np.full(vertlocnbr, -1, _common.proper_int) partgsttab = np.full(vertgstnbr, ~0, _common.proper_int) _common.random_reset() seedloctab[0] = baseval + _common.random_val(vertlocnbr) seedloctab[1] = baseval + _common.random_val(vertlocnbr) seedloctab[2] = baseval + _common.random_val(vertlocnbr) partgsttab[seedloctab[0] - baseval] = 0 partgsttab[seedloctab[1] - baseval] = 1 partgsttab[seedloctab[2] - baseval] = 2 graf.grow(3, seedloctab, 4, partgsttab) seedloctab = None tmpdir = tempfile.TemporaryDirectory() tmpfile = os.path.join(tmpdir.name, "test_scotchpy_dgraph_grow_output.txt") if proclocnum == 0: try: with open(tmpfile, "x") as file: pass except FileExistsError: pass comm.Barrier() statdat = MPI.Status() for procnum in range(procglbnbr): comm.Barrier() if procnum == proclocnum: with open(tmpfile, "a+") as file: if procnum == 0: file.write(f"{vertglbnbr}\n") vertlocadj = baseval else: vertlocadj = comm.recv(source=procnum - 1, tag=0, status=statdat) for vertlocnum in range(vertlocnbr): file.write(f"{vertlocadj + vertlocnum}\t{partgsttab[vertlocnum]}\n") if procnum < (procglbnbr - 1): vertlocadj += vertlocnbr comm.send(vertlocadj, dest=procnum + 1, tag=0) graf.exit() tmpdir.cleanup() @pytest.mark.mpi def testDgraphInduce(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD proclocnum = comm.Get_rank() comm.Barrier() orggraf = PTSCOTCH.DGraph(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: orggraf.load(fp) else: orggraf.load(None) comm.Barrier() baseval, _, orgvertlocnbr, _, _, _, _, _, _, _, _, _, _, _, _ = orggraf.data() orgpartloctab = np.full(orgvertlocnbr, -1, dtype=int) indlistloctab = np.full(orgvertlocnbr, -1, dtype=int) _common.random_reset() orgpartloctab = np.zeros(orgvertlocnbr, dtype=int) indlistloctab = np.arange(baseval, baseval + orgvertlocnbr, dtype=int) np.random.shuffle(indlistloctab) indvertlocnbr = (orgvertlocnbr + 1) // 2 orgpartloctab[indlistloctab[:indvertlocnbr] - baseval] = 1 indgraf = PTSCOTCH.DGraph(comm) indgraf.init(comm) orggraf.induce_part(orgpartloctab, 1, indvertlocnbr, indgraf) indgraf.check() orggraf.exit() indgraf.exit() @pytest.mark.mpi def testDgraphRedist(): if not flag_mpi4py_available: pytest.xfail("MPI not found") comm = MPI.COMM_WORLD procglbnbr = comm.Get_size() proclocnum = comm.Get_rank() comm.Barrier() srcgraf = PTSCOTCH.DGraph(comm) dstgraf = PTSCOTCH.DGraph(comm) dstgraf.init(comm) if proclocnum == 0: with open(os.path.join(_data_dir, "bump_b100000.grf")) as fp: srcgraf.load(fp) else: srcgraf.load(None) srcgraf.check() comm.Barrier() _, vertglbnbr, vertlocnbr, _, _, _, _, _, _, _, _, _, _, _, _ = srcgraf.data() partloctab = np.zeros(vertlocnbr, dtype=int) for vertlocnum in range(vertlocnbr): partloctab[vertlocnum] = (vertlocnum // 3) % procglbnbr srcgraf.redist(partloctab, None, -1, -1, dstgraf) dstgraf.exit() srcgraf.exit() comm.Barrier() scotchpy/tests/test_graph.py000066400000000000000000000447401505500072100165720ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import os import numpy as np import scotchpy as SCOTCH import scotchpy.common as _common from scotchpy.common import proper_int as SCOTCH_num import tempfile import importlib.resources _data_dir = importlib.resources.files('scotchpy').joinpath("data") def graph1(): # using kwargs return SCOTCH.build_graph( baseval=1, vertnbr=7, verttab=[1, 4, 10, 13, 16, 19, 22, 25], vendtab=None, velotab=[4, 1, 4, 4, 4, 4, 4], vlbltab=None, # vlbltab edgenbr=24, edgetab=[ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], edlotab=[ 1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1, ], ) def graph2(): # using pos args return SCOTCH.build_graph( 1, 7, [1, 4, 10, 13, 16, 19, 22, 25], None, [4, 1, 4, 4, 4, 4, 4], None, # vlbltab 24, [3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4], [1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1], ) def graph3(): # using the least args possible return SCOTCH.build_graph( verttab=[1, 4, 10, 13, 16, 19, 22, 25], edgetab=[ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], ) def graph4(): # same but with vendtab baseval = 1001 verttab = [1001, 1004, 1010, 1013, 1016, 1019, 1022, 1025] vendtab = [1004, 1010, 1013, 1016, 1019, 1022, 1025] edgetab = [ 1003, 1002, 1006, 1003, 1004, 1001, 1007, 1006, 1005, 1001, 1002, 1004, 1002, 1007, 1003, 1007, 1002, 1006, 1002, 1001, 1005, 1005, 1002, 1004, ] verttab = _common.properly_format(verttab) vendtab = _common.properly_format(vendtab) edgetab = _common.properly_format(edgetab) return SCOTCH.build_graph( baseval=baseval, verttab=verttab, vendtab=vendtab, edgetab=edgetab ) def graph5(): # really non-compact return SCOTCH.build_graph( baseval=1, verttab=[1, 6, 14, 19, 24, 29, 34, 37], vendtab=[4, 12, 17, 22, 27, 32, 37], edgetab=[ 3, 2, 6, 0, 0, 3, 4, 1, 7, 6, 5, 0, 0, 1, 2, 4, 0, 0, 2, 7, 3, 0, 0, 7, 2, 6, 0, 0, 2, 1, 5, 0, 0, 5, 2, 4, 0, 0, ], ) def testBuildKWArgs(): testGraph = graph1() checkk = testGraph.check() assert checkk == 0 def testBuildPosArgs(): testGraph = graph2() checkk = testGraph.check() assert checkk == 0 def testCompactImplicitArgs(): testGraph = graph3() checkk = testGraph.check() assert checkk == 0 def testBuildIncompact(): testGraph = graph4() checkk = testGraph.check() baseval, vertnbr, verttab, vendtab, velotab, vlbltab, _, edgetab, _ = ( testGraph.data(as_dict=False) ) assert checkk == 0 def testBuildNonCompact(): testGraph = graph5() checkk = testGraph.check() assert checkk == 0 def testDiamPV(): g = graph2() pv = g.diam_pv() assert pv == 10 def testStat(): g = graph2() stats = g.stat(as_dict=False) witness = ( 1, 4, 25, 25 / 7, 0.7346938775510203, 3, 6, 24 / 7, 0.7346938775510203, 1, 3, 44, # 22 or 44 ? 11 / 6, 0.6944444444444445, ) validind = range(14) for k in validind: assert stats[k] == witness[k] def testDataCompact(): kwargs = { "baseval": 1, "vertnbr": 7, "verttab": [1, 4, 10, 13, 16, 19, 22, 25], "vendtab": None, "velotab": [4, 1, 4, 4, 4, 4, 4], "vlbltab": None, # vlbltab "edgenbr": 24, "edgetab": [ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], "edlotab": [ 1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1, ], } g = SCOTCH.build_graph(**kwargs) assert g.check() == 0 data = g.data(as_dict=True) for key, val in kwargs.items(): if isinstance(val, int): assert val == data[key] else: assert np.array_equal(np.array(val), data[key]) def testDataNonCompact1(): kwargs = { "baseval": 1, "vertnbr": 7, "verttab": [1, 4, 10, 13, 16, 19, 22, 25], "vendtab": [4, 10, 13, 16, 19, 22, 25], "velotab": [4, 1, 4, 4, 4, 4, 4], "vlbltab": None, # vlbltab "edgenbr": 24, "edgetab": [ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], "edlotab": [ 1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1, ], } g = SCOTCH.build_graph(**kwargs) assert g.check() == 0 data = g.data(as_dict=True) for key, val in kwargs.items(): if isinstance(val, int): assert val == data[key] else: assert np.array_equal(np.array(val), data[key]) def testDataNonCompact2(): kwargs = { "baseval": 1, "verttab": [3, 8, 16, 21, 26, 31, 36, 39], "vendtab": [6, 14, 19, 24, 29, 34, 39], "edgetab": [ 0, 0, 3, 2, 6, 0, 0, 3, 4, 1, 7, 6, 5, 0, 0, 1, 2, 4, 0, 0, 2, 7, 3, 0, 0, 7, 2, 6, 0, 0, 2, 1, 5, 0, 0, 5, 2, 4, 0, 0, ], "velotab": [4, 1, 4, 4, 4, 4, 4], } g = SCOTCH.build_graph(**kwargs) assert g.check() == 0 data = g.data(as_dict=True) for key, val in kwargs.items(): if isinstance(val, int): assert val == data[key] else: assert np.array_equal(np.array(val), data[key]) def testLoadOpen(): # Using some test file found in the check/ directory g = SCOTCH.Graph() with open(os.path.join(_data_dir, "m4x4.grf")) as fp: g.load(fp) assert g.check() == 0 def testLoadString(): g = SCOTCH.Graph() g.load(os.path.join(_data_dir, "m4x4.grf")) assert g.check() == 0 def testLoadBinaryString(): g = SCOTCH.Graph() g.load(os.path.join(_data_dir, "m4x4.grf")) assert g.check() == 0 def testLoadGraph(): g = SCOTCH.load_graph(os.path.join(_data_dir, "m4x4.grf")) assert g.check() == 0 def testSaveOpen(): filename = "./test_scotchpy_graph_save_output.txt" g = graph1() with open(filename, "w+") as fp1: g.save(fp1) with open(filename) as fp2: h = SCOTCH.load_graph(fp2) datag = g.data() datah = h.data() for valg, valh in zip(datag, datah): if isinstance(valg, int): assert valg == valh else: assert np.array_equal(valg, valh) os.remove(filename) def testLibraryError(): try: testGraph = SCOTCH.build_graph( baseval=1, vertnbr=7, verttab=[1, 5, 10, 13, 16, 19, 22, 25], vendtab=None, velotab=[4, 1, 4, 4, 4, 4, 4], vlbltab=None, # vlbltab edgenbr=24, edgetab=[ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], edlotab=[ 1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1, ], ) testGraph.check() except SCOTCH.LibraryError as e: assert "Inside Python ERROR" in "\n".join(e.args) else: assert False, "A LibraryException was supposed to be raised" # taken from check/test_scotch_graph_part_ovl.c def testPartOvl(): partnbr = 4 filename1 = os.path.join(_data_dir, "m4x4.grf") tmpdir = tempfile.TemporaryDirectory() filename2 = os.path.join(tmpdir.name, "test_scotchpy_graph_part_ovl_output.txt") string = None assert partnbr >= 1 try: strat = SCOTCH.Strat() except SCOTCH.LibraryError: assert False, "cannot initialize strategy" raise if string: try: strat.graph_part_ovl(string) except SCOTCH.LibraryError: assert False, "invalid user-provided strategy" raise try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename1, -1, 0) except SCOTCH.LibraryError: assert False, "cannot load graph" raise baseval, vertnbr, verttab, vendtab, velotab, vlbltab, _, edgetab, _ = graf.data( as_dict=False ) vendtab = vendtab or verttab[1:] parttab = [0 for _ in range(vertnbr)] try: graf.part_ovl(partnbr, strat, parttab) except SCOTCH.LibraryError: assert False, "cannot compute mapping" raise if baseval: edgetab = np.concatenate(([None for _ in range(baseval)], edgetab)) parttab = np.concatenate(([None for _ in range(baseval)], parttab)) loadtab = [0 for _ in range(partnbr)] flagtab = [~0 for _ in range(partnbr)] for vertnum in range(vertnbr): veloval = velotab[vertnum] if velotab else 1 partval = parttab[vertnum + baseval] if partval >= 0: loadtab[partval] += veloval else: for edgenum in range(verttab[vertnum], vendtab[vertnum]): vertend = edgetab[edgenum] partend = parttab[vertend] if partend < 0: continue if flagtab[partend] == vertnum: continue loadtab[partend] += veloval flagtab[partend] = vertnum loadsum = loadmax = 0 loadmin = float("inf") # SCOTCH_NUMMAX, but this is better for partnum in range(partnbr): loadsum += loadtab[partnum] if loadtab[partnum] > loadmax: loadmax = loadtab[partnum] if loadtab[partnum] < loadmin: loadmin = loadtab[partnum] # assert False ,"M\tCompload[{}]\t{}\n".format(partnum, loadtab[partnum])) loadavg = loadsum / partnbr # assert False ,"M\tCompLoadAvg\t{}\n".format(loadavg)) # assert False ,"M\tCompLoadMax/Avg\t{}\n".format(loadmax/loadavg)) with open(filename2, "w+") as file2: file2.write("{}\n".format(vertnbr)) for vertnum in range(vertnbr): file2.write( "{}\t{}\n".format( vlbltab[vertnum] if vlbltab else vertnum, parttab[vertnum + baseval] ) ) tmpdir.cleanup() # taken from check/test_scotch_graph_color.c def testColor(): filename = os.path.join(_data_dir, "m4x4.grf") try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename) except SCOTCH.LibraryError: assert False, "cannot load graph" raise vertnbr, _ = graf.size(as_dict=False) colotab = [-1 for _ in range(vertnbr)] cnbrtab = [0 for _ in range(vertnbr)] try: graf.color(colotab, 0) except SCOTCH.LibraryError: assert False, "cannot color graph" raise colonbr = max(colotab) # supplementary test assert -1 not in colotab, "incorrect graph coloration" return # to avoid unnecessary assert False assert False, "Number of colors: {}".format(colonbr) for vertnum in range(vertnbr): cnbrtab[colotab[vertnum]] += 1 for colonum in range(colonbr): assert False, "Color {}: {}".format(colonum, cnbrtab[colonum]) # taken from check/test_scotch_graph_diam.c def testDiam(): filename = os.path.join(_data_dir, "m4x4.grf") try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename) except SCOTCH.LibraryError: assert False, "cannot load graph" raise try: diamval = graf.diam_pv() except SCOTCH.LibraryError: assert False, "cannot compute graph pseudo-diameter" raise assert diamval >= 0 # assert False ,"Graph pseudo-diameter: {}".format(diamval)) def testInduce(): # taken from check/test_scotch_graph_induce.c filename = os.path.join(_data_dir, "m4x4.grf") try: orggraf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: orggraf.load(filename) except SCOTCH.LibraryError: assert False, "cannot load graph" raise baseval, orgvertnbr, _, _, _, _, _, _, _ = orggraf.data(as_dict=False) orgparttab = [0 for _ in range(orgvertnbr)] indlisttab = [0 for _ in range(orgvertnbr)] _common.random_reset() for orgvertnum in range(orgvertnbr): orgparttab[orgvertnum] = orgvertnum + baseval for orgvertnum in range(orgvertnbr - 1): randval = _common.random_val(orgvertnbr - orgvertnum) verttmp = orgparttab[orgvertnum + randval] indlisttab[orgvertnum + randval] = indlisttab[orgvertnum] indlisttab[orgvertnum] = verttmp indvertnbr = (orgvertnbr + 1) // 2 orgparttab = [0 for _ in range(orgvertnbr)] for indvertnum in range(indvertnbr): orgparttab[indlisttab[indvertnum] - baseval] = 1 indgraf = SCOTCH.Graph() try: orggraf.induce_list(indvertnbr, indlisttab, indgraf) except SCOTCH.LibraryError: assert False, "cannot induce graph" raise indgraf.check() indgraf.exit() indgraf.init() try: orggraf.induce_part(indvertnbr, orgparttab, 1, indgraf) except SCOTCH.LibraryError: assert False, "cannot induce graph" raise indgraf.check() indgraf.exit() orggraf.exit() scotchpy/tests/test_map.py000066400000000000000000000200711505500072100162350ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import math import numpy as np import scotchpy as SCOTCH import importlib.resources import os _data_dir = importlib.resources.files('scotchpy').joinpath("data") # taken from check/test_scotch_graph_map.c def testMap(): ARCHNBR = 4 STRANBR = 2 COORD = lambda x, y: y * xdimsiz + x filename1 = os.path.join(_data_dir, "m4x4.grf") filename2 = "./test_scotchpy_graph_map_temp.txt" archtab = [None for _ in range(ARCHNBR)] stratab = [None for _ in range(STRANBR)] try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename1) except SCOTCH.LibraryError: assert False, "cannot load graph" raise vertnbr, _ = graf.size(as_dict=False) xdimsiz = int(math.sqrt(vertnbr)) assert vertnbr == xdimsiz * xdimsiz, "graph is not a square grid" parttab = np.full(vertnbr, -1, SCOTCH.common.proper_int) parotab = np.full(vertnbr, -1, SCOTCH.common.proper_int) vmlotab = np.full(vertnbr, -1, SCOTCH.common.proper_int) for vertnum in range(vertnbr): vmlotab[vertnum] = vertnum % 3 for stranum in range(STRANBR): try: stratab[stranum] = SCOTCH.Strat() except SCOTCH.LibraryError: assert False, "cannot initialize strategy" raise stratab[0].graph_map_build(SCOTCH.STRATRECURSIVE, 4, 0.05) stratab[1].graph_map_build(SCOTCH.STRATDEFAULT, 4, 0.05) for archnum in range(ARCHNBR): try: archtab[archnum] = SCOTCH.Arch() except SCOTCH.LibraryError: assert False, "cannot initialize architecture" raise archtab[0].cmplt(5) archtab[1].mesh2(2, 2) archtab[2].mesh2(xdimsiz * 2, xdimsiz * 2) # oversized architecture archtab[3].vhcub() mapp = SCOTCH.Mapping() mapo = SCOTCH.Mapping() for stranum in range(STRANBR): for archnum in range(ARCHNBR): try: graf.map_init(mapp, archtab[archnum], parttab) except SCOTCH.LibraryError: assert False, "cannot initialize mapping (1)" raise try: graf.map_init(mapo, archtab[archnum], parotab) except SCOTCH.LibraryError: assert False, "cannot initialize mapping (2)" raise archsiz = archtab[archnum].size() for typenum in range(6): parttab = np.full(xdimsiz * xdimsiz, -1, SCOTCH.common.proper_int) if archnum < 2: for i in range(xdimsiz - 1): parttab[COORD(0, i)] = 0 parttab[COORD(i + 1, 0)] = 1 parttab[COORD(xdimsiz - 1, i + 1)] = archsiz - 2 parttab[COORD(i, xdimsiz - 1)] = archsiz - 1 else: for i in range(xdimsiz - 1): parttab[COORD(0, i)] = vertnbr - 2 parttab[COORD(i + 1, 0)] = vertnbr - 1 parttab[COORD(xdimsiz - 1, i + 1)] = vertnbr parttab[COORD(i, xdimsiz - 1)] = vertnbr + 1 # print("Strat {}, arch {}, type {}".format(stranum, archnum, typenum)) vmloptr = vmlotab # .copy() try: if typenum == 0: graf.map_compute(mapp, stratab[stranum]) parotab[:vertnbr] = parttab[:vertnbr] elif typenum == 1: graf.map_fixed_compute(mapp, stratab[stranum]) elif typenum == 2: vmloptr = None elif typenum == 3: graf.remap_compute(mapp, mapo, 0.2, vmloptr, stratab[stranum]) elif typenum == 4: vmloptr = None elif typenum == 5: graf.remap_fixed_compute( mapp, mapo, 0.2, vmloptr, stratab[stranum] ) except SCOTCH.LibraryError: assert False, "cannot compute mapping" raise graf.map_exit(mapo) graf.map_exit(mapp) # taken from check/test_scotch_graph_map_copy.c def testMapCopy(): STRANBR = 3 stratab = [None for _ in range(STRANBR)] mapp = SCOTCH.Mapping() mapo = SCOTCH.Mapping() filename = os.path.join(_data_dir, "bump.grf") try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise try: graf.load(filename) except SCOTCH.LibraryError: assert False, "cannot load graph" raise vertnbr, _ = graf.size(as_dict=False) parttab = np.full(vertnbr, -1, SCOTCH.common.proper_int) parotab = np.full(vertnbr, -1, SCOTCH.common.proper_int) for stranum in range(STRANBR): try: stratab[stranum] = SCOTCH.Strat() except SCOTCH.LibraryError: assert False, "cannot initialize strategy" raise stratab[0].graph_map("cf{move=10000,pass=-1,bal=0.05}") stratab[1].graph_map( "m{vert=120,low=cf{move=10000,pass=-1,bal=0.05},asc=b{bnd=f{move=10000,pass=-1,bal=0.05},org=f{move=10000,pass=-1,bal=0.05}}}" ) try: arch = SCOTCH.Arch() except SCOTCH.LibraryError: assert False, "cannot initialize architecture" raise arch.cmplt(5) for stranum in range(STRANBR - 1): for typenum in range(2): # print("Strat {}, type {}".format(stranum, typenum)) if typenum == 0: try: graf.map_init(mapp, arch, parttab) except SCOTCH.LibraryError: assert False, "cannot initialize mapping (1)" raise try: # graf.map_compute(mapp, stratab[STRANBR-1]) mapp.compute(stratab[STRANBR - 1]) # canonically equivalent except SCOTCH.LibraryError: assert False, "cannot compute mapping (1)" raise parotab[:vertnbr] = parttab[:vertnbr] elif typenum == 1: try: graf.map_init(mapo, arch, parotab) except SCOTCH.LibraryError: assert False, "cannot initialize mapping (2)" raise try: graf.remap_compute(mapp, mapo, 0.0, None, stratab[stranum]) except SCOTCH.ScotchException: assert False, "cannot compute mapping (2)" raise graf.map_exit(mapo) graf.map_exit(mapp) scotchpy/tests/test_mesh.py000066400000000000000000000075241505500072100164240ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import scotchpy as SCOTCH import numpy as np import os import importlib.resources _data_dir = importlib.resources.files('scotchpy').joinpath("data") # taken from check/test_scotch_mesh_graph.c def testMesh1(): mesh = SCOTCH.Mesh() graf = SCOTCH.Graph() graf.init() with open(os.path.join(_data_dir, "small_55.msh")) as fp: try: mesh.load(fp) except SCOTCH.LibraryError: assert False, "cannot load mesh" raise mesh.check() try: mesh.graph(graf) except SCOTCH.LibraryError: assert False, "cannot create mesh from graph" raise graf.exit() mesh.exit() def testMesh2(): mesh = SCOTCH.Mesh() graf = SCOTCH.Graph() graf.init() with open(os.path.join(_data_dir, "small_55.msh")) as fp: try: mesh.load(fp) except SCOTCH.LibraryError: assert False, "cannot load mesh" raise mesh.check() filename = "./test_scotchpy_mesh_save_output.txt" with open(filename, "w+") as fp1: mesh.save(fp1) with open(filename) as fp2: h = SCOTCH.load_mesh(fp2) datag = mesh.data() datah = h.data() for valg, valh in zip(datag, datah): if isinstance(valg, int): assert valg == valh else: assert np.array_equal(valg, valh) os.remove(filename) h.exit() mesh.exit() kwargs = { "baseval": 1, "vertnbr": 7, "verttab": [1, 4, 10, 13, 16, 19, 22, 25], "vendtab": None, "velotab": [4, 1, 4, 4, 4, 4, 4], "vlbltab": None, "edgenbr": 24, "edgetab": [ 3, 2, 6, 3, 4, 1, 7, 6, 5, 1, 2, 4, 2, 7, 3, 7, 2, 6, 2, 1, 5, 5, 2, 4, ], "edlotab": [ 1, 1, 1, 2, 2, 1, 2, 3, 3, 1, 2, 2, 2, 1, 2, 1, 3, 3, 3, 1, 3, 1, 2, 1, ], } graf = SCOTCH.build_graph(**kwargs) mesh.graph(graf) # more testing? scotchpy/tests/test_order.py000066400000000000000000000101731505500072100165750ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import tempfile import scotchpy as SCOTCH import os import importlib.resources _data_dir = importlib.resources.files('scotchpy').joinpath("data") # taken from check/test_scotch_graph_order.c def testOrder(): for filename in (os.path.join(_data_dir, "bump.grf"), os.path.join(_data_dir, "bump_b100000.grf")): try: graf = SCOTCH.Graph() except SCOTCH.LibraryError: assert False, "cannot initialize graph" raise with open(filename) as fp: try: graf.load(fp, -1, 0) except SCOTCH.LibraryError: assert False, "cannot load graph " + filename raise baseval, vertnbr, _, _, _, _, _, _, _ = graf.data() listnbr = (vertnbr + 1) // 2 listtab = [0] * listnbr vertnum = baseval + (listnbr // 4) # Initialize vertnum for listnum in range(listnbr): listtab[listnum] = vertnum vertnum += 1 with tempfile.TemporaryFile() as fp: try: strat = SCOTCH.Strat(init=False) strat.init() except SCOTCH.LibraryError: assert False, "cannot initialize strategy" raise ordering = SCOTCH.Ordering() try: graf.order_init(ordering) except SCOTCH.LibraryError: assert False, "cannot initialize ordering (1)" raise # return # unexpected failure # pdb.set_trace() try: graf.order_compute(ordering, strat) except SCOTCH.LibraryError: assert False, "cannot order graph" raise try: graf.order_check(ordering) except SCOTCH.LibraryError: assert False, "invalid ordering (1)" raise graf.order_save(ordering, fp) graf.order_save_map(ordering, fp) graf.order_save_tree(ordering, fp) graf.order_exit(ordering) try: graf.order_init(ordering) except SCOTCH.LibraryError: assert False, "cannot initialize ordering (2)" raise try: graf.order_compute_list(ordering, listtab, strat) except SCOTCH.LibraryError: assert False, "cannot order induced graph" raise try: graf.order_check(ordering) except SCOTCH.LibraryError: assert False, "invalid ordering (2)" raise graf.order_save(ordering, fp) graf.order_save_map(ordering, fp) graf.order_save_tree(ordering, fp) scotchpy/tests/test_strat.py000066400000000000000000000063141505500072100166210ustar00rootroot00000000000000## SPDX-License-Identifier: BSD-2-Clause ## ## Copyright 2020-2025 Inria & Université de Bordeaux ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above ## copyright notice, this list of conditions and the following ## disclaimer in the documentation and/or other materials provided ## with the distribution. ## ## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND ## CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, ## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS ## BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ## EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ## ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR ## TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF ## THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## import numpy as np import scotchpy as SCOTCH # taken from check/test_strat_seq.c def testDEFAULT1(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_map_build(SCOTCH.STRATDEFAULT, 16, 0.03) stratt.exit() def testRECURSIVE(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_map_build(SCOTCH.STRATRECURSIVE, 16, 0.03) stratt.exit() def testREMAP(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_map_build(SCOTCH.STRATREMAP, 16, 0.03) stratt.exit() def testRECURSIVE_REMAP(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_map_build(SCOTCH.STRATRECURSIVE + SCOTCH.STRATREMAP, 16, 0.03) stratt.exit() def testDEFAULT2(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATDEFAULT, 0, 0.2) stratt.exit() def testDISCONNECTED(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATDISCONNECTED, 3, 0.2) stratt.exit() def testLEVELMAX(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATLEVELMAX, 3, 0.2) stratt.exit() def testLEVELMIN(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATLEVELMIN, 3, 0.2) stratt.exit() def testLEVELMAX_LEVELMIN(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATLEVELMAX + SCOTCH.STRATLEVELMIN, 3, 0.2) stratt.exit() def testLEAFSIMPLE(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATLEAFSIMPLE, 3, 0.2) stratt.exit() def testSEPASIMPLE(): stratt = SCOTCH.Strat(init=False) stratt.init() stratt.graph_order_build(SCOTCH.STRATSEPASIMPLE, 3, 0.2) stratt.exit()