From 5e16e2429e019b1b4f273f481b57e14becb01b20 Mon Sep 17 00:00:00 2001 From: gonzalo rubio Date: Thu, 2 Feb 2023 07:37:39 +0100 Subject: [PATCH] Huge IBM change by Stefano --- Solver/configure | 1 + .../SpatialDiscretization.f90 | 95 +- .../SpatialDiscretization.f90 | 93 +- Solver/src/addons/horses2tecplot/Storage.f90 | 5 +- .../addons/tools/LocalIBMRefinementTool.f90 | 202 + .../src/addons/tools/LocalRefinementTool.f90 | 8 +- Solver/src/addons/tools/Makefile | 4 +- Solver/src/addons/tools/readGMSH.f90 | 600 + Solver/src/addons/tools/readHDF5.f90 | 37 +- Solver/src/addons/tools/readSpecM.f90 | 15 +- Solver/src/libs/discretization/DGSEMClass.f90 | 19 +- Solver/src/libs/foundation/Utilities.f90 | 9 +- Solver/src/libs/io/ProgressBar.f90 | 304 +- Solver/src/libs/io/SolutionFile.f90 | 10 +- Solver/src/libs/mesh/HexElementClass.f90 | 20 +- Solver/src/libs/mesh/HexMesh.f90 | 73 +- Solver/src/libs/mesh/IBMClass.f90 | 6225 +-- Solver/src/libs/mesh/KDClass.f90 | 3558 +- Solver/src/libs/mesh/MPI_IBMUtilities.f90 | 3277 +- Solver/src/libs/mesh/MappedGeometry.f90 | 4 +- Solver/src/libs/mesh/OrientedBoundingBox.f90 | 2592 +- Solver/src/libs/mesh/Read_GMSH.f90 | 2 + Solver/src/libs/mesh/TessellationTypes.f90 | 2119 +- Solver/src/libs/monitors/Monitors.f90 | 19 +- Solver/src/libs/monitors/SurfaceIntegrals.f90 | 745 +- Solver/src/libs/monitors/SurfaceMonitor.f90 | 87 +- .../libs/physics/common/FreeSlipWallBC.f90 | 4 +- .../src/libs/physics/common/NoSlipWallBC.f90 | 4 +- Solver/src/libs/physics/common/OutflowBC.f90 | 6 +- Solver/src/libs/physics/common/Physics.f90 | 4 +- .../libs/physics/navierstokes/Physics_NS.f90 | 8 +- .../physics/spallartalmaras/Physics_NSSA.f90 | 8 +- Solver/src/libs/sources/Makefile | 320 +- .../timeintegrator/AnisFASMultigridClass.f90 | 21 +- .../libs/timeintegrator/ExplicitMethods.f90 | 198 +- .../libs/timeintegrator/FASMultigridClass.f90 | 171 +- .../LinearSolvers/MatrixFreeGMRESClass.f90 | 12 +- .../libs/timeintegrator/TimeIntegrator.f90 | 10 +- .../CahnHilliard/outdated/Pipe/Pipe.control | 80 +- .../outdated/TestEulerJacobians/Makefile | 19 +- .../IBM_Cylinder/IBM/cylinder.stl | Bin 0 -> 39884 bytes .../IBM_Cylinder/IBMCylinder.control | 65 + .../IBM_Cylinder/MESH/cylinder.stl | Bin 0 -> 39884 bytes .../IBM_Cylinder/SETUP/ProblemFile.f90 | 629 + Solver/test/TestMeshes/IBMCylinder.msh | 42998 ++++++++++++++++ doc/UserManual.pdf | Bin 420355 -> 355433 bytes doc/UserManual.tex | 29 +- 47 files changed, 54835 insertions(+), 9874 deletions(-) create mode 100644 Solver/src/addons/tools/LocalIBMRefinementTool.f90 create mode 100644 Solver/src/addons/tools/readGMSH.f90 mode change 100755 => 100644 Solver/src/libs/foundation/Utilities.f90 create mode 100644 Solver/test/NavierStokes/IBM_Cylinder/IBM/cylinder.stl create mode 100644 Solver/test/NavierStokes/IBM_Cylinder/IBMCylinder.control create mode 100644 Solver/test/NavierStokes/IBM_Cylinder/MESH/cylinder.stl create mode 100644 Solver/test/NavierStokes/IBM_Cylinder/SETUP/ProblemFile.f90 create mode 100644 Solver/test/TestMeshes/IBMCylinder.msh diff --git a/Solver/configure b/Solver/configure index d3d7bb6f6..39422c069 100755 --- a/Solver/configure +++ b/Solver/configure @@ -51,6 +51,7 @@ TEST_CASES="./Euler/BoxAroundCircle \ ./NavierStokes/CylinderDucros \ ./NavierStokes/CylinderDifferentOrders \ ./NavierStokes/CylinderLES \ + ./NavierStokes/IBM_Cylinder \ ./NavierStokes/DualTimeStepping \ ./NavierStokes/EntropyConservingTest \ ./NavierStokes/EnergyConservingTest \ diff --git a/Solver/src/NavierStokesSolver/SpatialDiscretization.f90 b/Solver/src/NavierStokesSolver/SpatialDiscretization.f90 index 3d27bf202..ae7c11ead 100644 --- a/Solver/src/NavierStokesSolver/SpatialDiscretization.f90 +++ b/Solver/src/NavierStokesSolver/SpatialDiscretization.f90 @@ -357,8 +357,8 @@ subroutine TimeDerivative_ComputeQDot( mesh , particles, t) ! Local variables ! --------------- ! - integer :: eID , i, j, k, ierr, fID, iFace, iEl - real(kind=RP) :: mu_smag, delta, Source(NCONS) + integer :: eID , i, j, k, ierr, fID, iFace, iEl, iP + real(kind=RP) :: mu_smag, delta, Source(NCONS), TurbulentSource(NCONS) ! ! *********************************************** ! Compute the viscosity at the elements and faces @@ -602,19 +602,40 @@ subroutine TimeDerivative_ComputeQDot( mesh , particles, t) ! ********************* ! Add IBM source term ! ********************* - if( mesh% IBM% active .and. .not. mesh% IBM% semiImplicit ) then -!$omp do schedule(runtime) private(i,j,k) - do eID = 1, mesh % no_of_elements - associate ( e => mesh % elements(eID) ) - do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) - if( e% isInsideBody(i,j,k) ) then - call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source ) - e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source - end if - end do ; end do ; end do - end associate - end do + if( mesh% IBM% active ) then + if( .not. mesh% IBM% semiImplicit .and. t .gt. 0.0_RP ) then +!$omp do schedule(runtime) private(i,j,k,Source) + do eID = 1, mesh % no_of_elements + associate ( e => mesh % elements(eID) ) + do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) + if( e% isInsideBody(i,j,k) ) then + call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source, wallfunction = .false. ) + e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source + end if + end do ; end do ; end do + end associate + end do +!$omp end do + if( mesh% IBM% Wallfunction ) then +!$omp single + call mesh% IBM% GetBandRegionStates( mesh% elements ) +!$omp end single +!$omp do schedule(runtime) private(i,j,k,TurbulentSource) + do iP = 1, mesh% IBM% NumOfForcingPoints + associate( e => mesh% elements(mesh% IBM% ImagePoints(iP)% element_index), & + e_in => mesh% elements(mesh% IBM% ImagePoints(iP)% element_in) ) + i = mesh% IBM% ImagePoints(iP)% local_position(1) + j = mesh% IBM% ImagePoints(iP)% local_position(2) + k = mesh% IBM% ImagePoints(iP)% local_position(3) + call mesh % IBM % SourceTermTurbulence( mesh% IBM% ImagePoints(iP), e% storage% Q(:,i,j,k), & + e% geom% normal(:,i,j,k), e% geom% dWall(i,j,k), & + e% STL(i,j,k), TurbulentSource ) + e% storage% QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + TurbulentSource + end associate + end do !$omp end do + end if + end if end if end subroutine TimeDerivative_ComputeQDot @@ -671,6 +692,7 @@ subroutine compute_viscosity_at_faces(no_of_faces, no_of_sides, face_ids, mesh) + end subroutine compute_viscosity_at_faces ! !//////////////////////////////////////////////////////////////////////// @@ -690,8 +712,9 @@ subroutine TimeDerivative_ComputeQDotIsolated( mesh , t ) ! Local variables ! --------------- ! - integer :: eID , i, j, k, fID + integer :: eID , i, j, k, fID, iP procedure(UserDefinedSourceTermNS_f) :: UserDefinedSourceTermNS + real(kind=rp) :: Source(NCONS), TurbulentSource(NCONS) ! ! **************** ! Volume integrals @@ -745,6 +768,46 @@ subroutine TimeDerivative_ComputeQDotIsolated( mesh , t ) end do !$omp end do +! +! ********************* +! Add IBM source term +! ********************* + + if( mesh% IBM% active ) then + if( .not. mesh% IBM% semiImplicit ) then +!$omp do schedule(runtime) private(i,j,k,Source) + do eID = 1, mesh % no_of_elements + associate ( e => mesh % elements(eID) ) + do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) + if( e% isInsideBody(i,j,k) ) then + call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source, wallfunction = .false. ) + e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source + end if + end do ; end do ; end do + end associate + end do +!$omp end do + if( mesh% IBM% Wallfunction ) then +!$omp single + call mesh% IBM% GetBandRegionStates( mesh% elements ) +!$omp end single +!$omp do schedule(runtime) private(i,j,k,TurbulentSource) + do iP = 1, mesh% IBM% NumOfForcingPoints + associate( e => mesh% elements(mesh% IBM% ImagePoints(iP)% element_index) ) + i = mesh% IBM% ImagePoints(iP)% local_position(1) + j = mesh% IBM% ImagePoints(iP)% local_position(2) + k = mesh% IBM% ImagePoints(iP)% local_position(3) + call mesh % IBM % SourceTermTurbulence( mesh% IBM% ImagePoints(iP), e% storage% Q(:,i,j,k), & + e% geom% normal(:,i,j,k), e% geom% dWall(i,j,k), & + e% STL(i,j,k), TurbulentSource ) + e% storage% QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + TurbulentSource + end associate + end do +!$omp end do + end if + end if + endif + end subroutine TimeDerivative_ComputeQDotIsolated ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1261,4 +1324,4 @@ SUBROUTINE computeBoundaryFlux(f, time, mesh) end subroutine computeBoundaryFlux -end module SpatialDiscretization +end module SpatialDiscretization \ No newline at end of file diff --git a/Solver/src/NavierStokesSolverRANS/SpatialDiscretization.f90 b/Solver/src/NavierStokesSolverRANS/SpatialDiscretization.f90 index 9b1ce1cfa..b3d492761 100644 --- a/Solver/src/NavierStokesSolverRANS/SpatialDiscretization.f90 +++ b/Solver/src/NavierStokesSolverRANS/SpatialDiscretization.f90 @@ -386,8 +386,9 @@ subroutine TimeDerivative_ComputeQDot( mesh , particles, t) ! Local variables ! --------------- ! - integer :: eID , i, j, k, ierr, fID, iFace, iEl - real(kind=RP) :: mu_smag, delta, mu_t, eta, kinematic_viscocity, mu_dim, Source(NCONS) + integer :: eID , i, j, k, ierr, fID, iFace, iEl, iP + real(kind=RP) :: mu_smag, delta, mu_t, eta, kinematic_viscocity, mu_dim, & + Source(NCONS), TurbulentSource(NCONS) logical :: isfirst = .TRUE. ! ! *********************************************** @@ -649,19 +650,39 @@ subroutine TimeDerivative_ComputeQDot( mesh , particles, t) ! ********************* ! Add IBM source term ! ********************* - if( mesh% IBM% active .and. .not. mesh% IBM% semiImplicit ) then -!$omp do schedule(runtime) private(i,j,k) - do eID = 1, mesh % no_of_elements - associate ( e => mesh % elements(eID) ) - do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) - if( e% isInsideBody(i,j,k) ) then - call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source ) - e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source - end if - end do ; end do ; end do - end associate - end do + if( mesh% IBM% active ) then + if( .not. mesh% IBM% semiImplicit ) then +!$omp do schedule(runtime) private(i,j,k,Source) + do eID = 1, mesh % no_of_elements + associate ( e => mesh % elements(eID) ) + do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) + if( e% isInsideBody(i,j,k) ) then + call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source, wallfunction = .false. ) + e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source + end if + end do ; end do ; end do + end associate + end do +!$omp end do + if( mesh% IBM% Wallfunction ) then +!$omp single + call mesh% IBM% GetBandRegionStates( mesh% elements ) +!$omp end single +!$omp do schedule(runtime) private(i,j,k,TurbulentSource) + do iP = 1, mesh% IBM% NumOfForcingPoints + associate( e => mesh% elements(mesh% IBM% ImagePoints(iP)% element_index) ) + i = mesh% IBM% ImagePoints(iP)% local_position(1) + j = mesh% IBM% ImagePoints(iP)% local_position(2) + k = mesh% IBM% ImagePoints(iP)% local_position(3) + call mesh % IBM % SourceTermTurbulence( mesh% IBM% ImagePoints(iP), e% storage% Q(:,i,j,k), & + e% geom% normal(:,i,j,k), e% geom% dWall(i,j,k), & + e% STL(i,j,k), TurbulentSource ) + e% storage% QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + TurbulentSource + end associate + end do !$omp end do + end if + end if end if end subroutine TimeDerivative_ComputeQDot @@ -733,8 +754,9 @@ subroutine TimeDerivative_ComputeQDotIsolated( mesh , t ) ! Local variables ! --------------- ! - integer :: eID , i, j, k, fID + integer :: eID , i, j, k, fID, iP procedure(UserDefinedSourceTermNS_f) :: UserDefinedSourceTermNS + real(kind=rp) :: Source(NCONS), TurbulentSource(NCONS) ! ! **************** ! Volume integrals @@ -785,6 +807,45 @@ subroutine TimeDerivative_ComputeQDotIsolated( mesh , t ) end do !$omp end do +! +! ********************* +! Add IBM source term +! ********************* + if( mesh% IBM% active ) then + if( .not. mesh% IBM% semiImplicit ) then +!$omp do schedule(runtime) private(i,j,k,Source) + do eID = 1, mesh % no_of_elements + associate ( e => mesh % elements(eID) ) + do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) + if( e% isInsideBody(i,j,k) ) then + call mesh% IBM% SourceTerm( eID = eID, Q = e % storage % Q(:,i,j,k), Source = Source, wallfunction = .false. ) + e % storage % QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + Source + end if + end do ; end do ; end do + end associate + end do +!$omp end do + if( mesh% IBM% Wallfunction ) then +!$omp single + call mesh% IBM% GetBandRegionStates( mesh% elements ) +!$omp end single +!$omp do schedule(runtime) private(i,j,k,TurbulentSource) + do iP = 1, mesh% IBM% NumOfForcingPoints + associate( e => mesh% elements(mesh% IBM% ImagePoints(iP)% element_index) ) + i = mesh% IBM% ImagePoints(iP)% local_position(1) + j = mesh% IBM% ImagePoints(iP)% local_position(2) + k = mesh% IBM% ImagePoints(iP)% local_position(3) + call mesh % IBM % SourceTermTurbulence( mesh% IBM% ImagePoints(iP), e% storage% Q(:,i,j,k), & + e% geom% normal(:,i,j,k), e% geom% dWall(i,j,k), & + e% STL(i,j,k), TurbulentSource ) + e% storage% QDot(:,i,j,k) = e % storage % QDot(:,i,j,k) + TurbulentSource + end associate + end do +!$omp end do + end if + end if + end if + end subroutine TimeDerivative_ComputeQDotIsolated ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1320,4 +1381,4 @@ SUBROUTINE computeBoundaryFlux_NSSA(f, time, mesh) END SUBROUTINE computeBoundaryFlux_NSSA -end module SpatialDiscretization +end module SpatialDiscretization \ No newline at end of file diff --git a/Solver/src/addons/horses2tecplot/Storage.f90 b/Solver/src/addons/horses2tecplot/Storage.f90 index f8b2dc08d..d6f0bc3ad 100644 --- a/Solver/src/addons/horses2tecplot/Storage.f90 +++ b/Solver/src/addons/horses2tecplot/Storage.f90 @@ -249,9 +249,6 @@ subroutine Mesh_ReadSolution(self,solutionName) self % hasSensor = .false. self % hasTimeDeriv = .true. - ! TODO? - case (IBM_MESH) - case (SOLUTION_AND_SENSOR_FILE) dimensionsSize = 4 self % hasGradients = .false. @@ -551,4 +548,4 @@ Subroutine getNVARS(originalDim, useFlowEq) end select End Subroutine getNVARS -end module Storage +end module Storage \ No newline at end of file diff --git a/Solver/src/addons/tools/LocalIBMRefinementTool.f90 b/Solver/src/addons/tools/LocalIBMRefinementTool.f90 new file mode 100644 index 000000000..f9e1c3c44 --- /dev/null +++ b/Solver/src/addons/tools/LocalIBMRefinementTool.f90 @@ -0,0 +1,202 @@ +module LocalIBMRefinementTool + + use SMConstants + use FTValueDictionaryClass + use LocalRefinementTool + + implicit none + + private + public LocalRef_IBM + +!//////////////////////////////////////////////////////////////////////// + contains +!//////////////////////////////////////////////////////////////////////// +! + subroutine LocalRef_IBM(controlVariables) + + use LocalRefinement + use HexMeshClass + use SMConstants + use FTValueDictionaryClass + use mainKeywordsModule + use Headers + use MPI_Process_Info + use OrientedBoundingBox + use PhysicsStorage + + implicit none + !-arguemnts---------------------------------------------- + type( FTValueDictionary) :: controlVariables + !-local-variables---------------------------------------- + character(len=LINE_LENGTH) :: fileName, meshFileName + type(HexMesh) :: mesh + logical :: success + character(len=LINE_LENGTH) :: msg, fname, MyString, & + STLfilename + integer, allocatable :: Nx(:), Ny(:), Nz(:) + real(kind=RP) :: Naverage + integer :: Nmax, STLnum + + call CheckInputIntegrityIBM(controlVariables, success) + if(.not. success) error stop "Control file reading error" +! +! --------------------------- +! Set up the local refinement +! --------------------------- +! + meshFileName = controlVariables % stringValueForKey("mesh file name", requestedLength = LINE_LENGTH) + fileName = controlVariables % stringValueForKey("solution file name", requestedLength = LINE_LENGTH) + + call GetMeshPolynomialOrders(controlVariables,Nx,Ny,Nz,Nmax) + + call ConstructSimpleMesh_IBM(mesh, meshFileName, Nx, Ny, Nz) +! +! ----------------- +! Describe the mesh +! ----------------- +! + write(STD_OUT,'(/)') + call Section_Header("Job description") + write(msg,'(A,A,A)') 'Mesh file "',trim(meshFileName),'":' + write(STD_OUT,'(/)') + call SubSection_Header(trim(msg)) + write(STD_OUT,'(30X,A,A30,I0)') "->", "Number of elements: ", mesh% no_of_elements + write(STD_OUT,'(/)') + + call mesh% IBM% read_info( controlVariables ) + + allocate( mesh% IBM% stl(mesh% IBM% NumOfSTL), & + mesh% IBM% STLfilename(mesh% IBM% NumOfSTL), & + OBB(mesh% IBM% NumOfSTL) ) + + do STLNum = 1, mesh% IBM% NumOfSTL + write(MyString, '(i100)') STLNum + if( STLNum .eq. 1 ) then + fname = stlFileNameKey + else + fname = trim(stlFileNameKey)//trim(adjustl(MyString)) + end if + mesh% IBM% STLfilename(STLNum) = controlVariables% stringValueForKey(trim(fname), requestedLength = LINE_LENGTH) + mesh% IBM% stl(STLNum)% body = STLNum + OBB(STLNum)% filename = mesh% IBM% STLfilename(STLNum) + call mesh% IBM% stl(STLNum)% ReadTessellation( mesh% IBM% STLfilename(STLNum) ) + call OBB(STLNum)% construct( mesh% IBM% stl(STLNum), .false., .false. ) + end do + + call mesh% IBM% SetPolynomialOrder( mesh% elements ) +! +! --------------------- +! Create the final file +! --------------------- +! + call mesh% ExportOrders(meshFileName) + + do STLNum = 1, mesh% IBM% NumOfSTL + call mesh% IBM% stl(STLNum)% destroy() + end do + + deallocate( mesh% IBM% stl, mesh% IBM% STLfilename, OBB ) + + Naverage = sum( mesh% elements(1:size(mesh% elements))% Nxyz(1) + & + mesh% elements(1:size(mesh% elements))% Nxyz(2) + & + mesh% elements(1:size(mesh% elements))% Nxyz(3) )/(3.0_RP * mesh% no_of_elements) + + call Subsection_Header("omesh file") + + write(STD_OUT,'(30X,A,A30,F5.2)') "-> ", "Average polynomial order: ", Naverage + write(STD_OUT,'(30X,A,A30,I0)') "-> ", "Degrees of Freedom (NDOF): ", & + sum( (mesh% elements(1:size(mesh% elements))% Nxyz(1)+1)* & + (mesh% elements(1:size(mesh% elements))% Nxyz(2)+1)* & + (mesh% elements(1:size(mesh% elements))% Nxyz(3)+1) ) + + end subroutine LocalRef_IBM + + subroutine ConstructSimpleMesh_IBM(mesh, meshFileName, AllNx, AllNy, AllNz) + + use SMConstants + use Headers + use HexMeshClass + use LocalRefinement + use readHDF5 + use readSpecM + use readGMSH + use FileReadingUtilities, only: getFileExtension + implicit none + !-arguments---------------------------------------------- + type(HexMesh) :: mesh + character(len=*) :: meshFileName + integer, intent(in) :: AllNx(:), AllNy(:), AllNz(:) + !-local-variables---------------------------------------- + integer :: gmsh_version + character(len=LINE_LENGTH) :: ext + + ext = getFileExtension(trim(meshFileName)) + if (trim(ext)=='h5') then + call ConstructSimpleMesh_FromHDF5File_(mesh, meshFileName, AllNx=AllNx, AllNy=AllNy, AllNz=AllNz) + elseif (trim(ext)=='mesh') then + call ConstructSimpleMesh_FromSpecFile_(mesh, meshFileName, AllNx=AllNx, AllNy=AllNy, AllNz=AllNz) + elseif (trim(ext)=='msh') then + call CheckGMSHversion (meshFileName, gmsh_version) + select case (gmsh_version) + case (4) + call ConstructSimpleMesh_FromGMSHFile_v4_( mesh, meshFileName, AllNx, AllNy, AllNz ) + case (2) + call ConstructSimpleMesh_FromGMSHFile_v2_( mesh, meshFileName, AllNx, AllNy, AllNz ) + case default + error stop "ReadMeshFile :: Unrecognized GMSH version." + end select + else + error stop 'Mesh file extension not recognized.' + end if + + end subroutine ConstructSimpleMesh_IBM + + subroutine CheckInputIntegrityIBM( controlVariables, success ) + use ParamfileRegions + implicit none + !-arguments-------------------------------------------------- + type(FTValueDictionary), intent(inout) :: controlVariables + logical, intent(out) :: success + !-local-variables-------------------------------------------- + real(kind=rp), allocatable :: BandRegionCoeff_in + integer, allocatable :: Nx_in, Ny_in, Nz_in + character(len=LINE_LENGTH) :: in_label, paramFile + + write(in_label , '(A)') "#define ibm" + call get_command_argument(1, paramFile) + call readValueInRegion( trim( paramFile ), "nx", Nx_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "ny", Ny_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "nz", Nz_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "band region coeff", BandRegionCoeff_in, in_label, "#end" ) + + if( .not. allocated(Nx_in) ) then + print*, "Missing keyword 'nx' in input file" + success = .false. + return + end if + + if( .not. allocated(Ny_in) ) then + print*, "Missing keyword 'ny' in input file" + success = .false. + return + end if + + if( .not. allocated(Nz_in) ) then + print*, "Missing keyword 'nz' in input file" + success = .false. + return + end if + + if( .not. allocated(BandRegionCoeff_in) ) then + print*, "Missing keyword 'band region coeff' in input file" + success = .false. + return + end if + + success = .true. + + end subroutine CheckInputIntegrityIBM + + +end module LocalIBMRefinementTool diff --git a/Solver/src/addons/tools/LocalRefinementTool.f90 b/Solver/src/addons/tools/LocalRefinementTool.f90 index 856be4a42..91aeb30ce 100644 --- a/Solver/src/addons/tools/LocalRefinementTool.f90 +++ b/Solver/src/addons/tools/LocalRefinementTool.f90 @@ -201,15 +201,15 @@ Subroutine ConstructSimpleMesh(mesh, meshFileName, locR) ext = getFileExtension(trim(meshFileName)) if (trim(ext)=='h5') then - call ConstructSimpleMesh_FromHDF5File_(mesh, meshFileName, locR) + call ConstructSimpleMesh_FromHDF5File_(mesh, meshFileName, locR=locR) elseif (trim(ext)=='mesh') then - call ConstructSimpleMesh_FromSpecFile_(mesh, meshFileName, locR) + call ConstructSimpleMesh_FromSpecFile_(mesh, meshFileName, locR=locR) ! elseif (trim(ext)=='msh') then - ! call ConstructSimpleMesh_FromGmshFile_(mesh, meshFileName, locR) + ! call ConstructSimpleMesh_FromGmshFile_(mesh, meshFileName, locR else ERROR STOP 'Mesh file extension not recognized.' end if End Subroutine ConstructSimpleMesh ! -End Module LocalRefinementTool +End Module LocalRefinementTool \ No newline at end of file diff --git a/Solver/src/addons/tools/Makefile b/Solver/src/addons/tools/Makefile index 7683e1e71..87db087ff 100644 --- a/Solver/src/addons/tools/Makefile +++ b/Solver/src/addons/tools/Makefile @@ -32,7 +32,9 @@ OBJS= \ LocalRefinementClass \ readSpecM \ readHDF5 \ + readGMSH \ LocalRefinementTool \ + LocalIBMRefinementTool \ ConverStats \ main \ @@ -93,4 +95,4 @@ header: FORCE @echo ## Dummy target to make sure a rule is executed -FORCE: +FORCE: \ No newline at end of file diff --git a/Solver/src/addons/tools/readGMSH.f90 b/Solver/src/addons/tools/readGMSH.f90 new file mode 100644 index 000000000..e5293ef45 --- /dev/null +++ b/Solver/src/addons/tools/readGMSH.f90 @@ -0,0 +1,600 @@ +#include "Includes.h" +module readGMSH + use HexMeshClass + use ElementClass + use SMConstants + use ElementConnectivityDefinitions + use LocalRefinement + use Utilities, only: UnusedUnit + use NodeClass + use Read_GMSH + use FileReadingUtilities , only: getFileName, getRealArrayFromStringNoCommas + + implicit none + + contains + + subroutine ConstructSimpleMesh_FromGMSHFile_v4_(self, fileName, Nx, Ny, Nz) + + !use PhysicsStorage + + implicit none +! --------------- +! Input variables +! --------------- +! + type(HexMesh) :: self + character(len=*) :: fileName + integer, intent(in) :: Nx(:), Ny(:), Nz(:) +! +! --------------- +! Local variables +! --------------- +! + character(len=1024) :: tmps + real(kind=RP) :: tmpd + integer :: tmpi, tmpi1, tmpi2, tmpi3, tmp_eltag + integer :: i, j, k, l + integer :: msh_no_points + integer :: msh_no_curves + integer :: msh_no_surfaces + integer :: msh_no_volumes + integer :: funit, fileStat + + real(kind=RP), allocatable :: msh_entity_vec(:) + + logical :: tmpb + + integer, dimension(EL_MAX_ORDER) :: check_eltype + integer, dimension(:), allocatable :: tmpi_vec1, el_types + + integer :: msh_no_nodeblocks, msh_nodeblock, msh_nodes_per_block, msh_node, msh_global_node + integer :: element_type, org_element_type, org_element_type_2D + integer :: msh_no_elblocks, msh_elblock, msh_els_per_block, msh_el, msh_global_el + integer :: numberOfElements, numberOfElements2D + integer :: numberOfNodes + integer :: bFaceOrder, no_nodes_i + + + type(MSH_node_block_t), dimension(:), allocatable :: msh_node_blocks + type(MSH_element_block_t), dimension(:), allocatable :: msh_element_blocks + type(MSH_point_t), dimension(:), allocatable :: msh_points + + real(kind=RP) :: corners(NDIM,NODES_PER_ELEMENT) + real(kind=RP) :: x(NDIM), L_ref + integer :: nodeIDs(NODES_PER_ELEMENT) + character(len=MSH_LEN) :: msh_entity + + L_ref = 1.0_RP + + funit = UnusedUnit() + open( unit = fUnit, file = fileName, iostat = fileStat ) + if ( fileStat /= 0 ) then + print *, "Error opening file: ", fileName + return + end if + +!-----Read-header-info--------------------------------------------------- + read(fUnit,*) tmps + if (trim(tmps) .ne. '$MeshFormat') error stop "READ_GMSH :: Wrong input file." + read(fUnit,*) tmpd, tmpi, tmpi + read(fUnit,*) tmps + +!-----Read-BC-info------------------------------------------------------- + ! Bc not required, they are skipped + read(fUnit,*) tmps + if (trim(tmps) .ne. '$PhysicalNames') error stop "READ_GMSH :: Wrong input file - no boundary conditions defined." + read(fUnit,*) tmpi + + do i=1, tmpi + read(fUnit,*) + end do + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndPhysicalNames') error stop "READ_GMSH :: Wrong input file - not all boundary conditions detected." + +!-----Read-msh-entities-------------------------------------------------- + read(fUnit,*) tmps + if (trim(tmps) .ne. '$Entities') error stop "READ_GMSH :: Wrong input file - no entities found." + read(fUnit,*) msh_no_points, msh_no_curves, msh_no_surfaces, msh_no_volumes + + ! allocate memory for gmsh internal entities + ! msh_no_curves, msh_no_surfaces, msh_no_volumes not required + allocate(msh_points(msh_no_points)) + allocate(msh_entity_vec(32)) ! arbitrary number + +!-----Read-points-------------------------------------------------------- + do i=1, msh_no_points + msh_entity_vec=0.0_RP + read(fUnit,'(4096a)') msh_entity + call getRealArrayFromStringNoCommas(msh_entity,msh_entity_vec) + + msh_points(i)%tag = int(msh_entity_vec(1)) + msh_points(i)%x = msh_entity_vec(2:4) + msh_points(i)%no_ptags = int(msh_entity_vec(5)) + if (msh_points(i)%no_ptags .gt. 0) msh_points(i)%ptags(1:msh_points(i)%no_ptags) = int(msh_entity_vec(6:5+msh_points(i)%no_ptags)) + end do ! msh_no_points +!------------------------------------------------------------------------ + +!-----Read-curves-------------------------------------------------------- + ! Curves not needed + do i=1, msh_no_curves + msh_entity_vec=0.0_RP + read(fUnit,'(4096a)') + end do ! msh_no_curves +!-----Read-surfaces------------------------------------------------------ + ! Surfaces not needed + do i=1, msh_no_surfaces + msh_entity_vec=0.0_RP + read(fUnit,'(4096a)') + end do ! msh_no_surfaces +!-----Read-volumes------------------------------------------------------- + ! Volumes not needed + do i=1, msh_no_volumes + msh_entity_vec=0.0_RP + read(fUnit,'(4096a)') + end do ! msh_no_volumes + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndEntities') error stop "READ_GMSH :: Wrong input file - not all entities detected." + +!-----Read-nodes--------------------------------------------------------- + read(fUnit,*) tmps + if (trim(tmps) .ne. '$Nodes') error stop "READ_GMSH :: Wrong input file - no nodes found." + + read(fUnit,*) msh_no_nodeblocks, numberOfNodes, tmpi1, tmpi2 + if (numberOfNodes .ne. tmpi2) error stop "READ_gmsh :: Incoherent node numbering." + + ! allocate nodes storage + allocate(msh_node_blocks(msh_no_nodeblocks)) + + msh_global_node = 0 + do msh_nodeblock=1, msh_no_nodeblocks + read(fUnit,*) tmpi1, tmpi2, tmpi3, msh_nodes_per_block + tmpb=tmpi3 + if (tmpb) error stop "READ_gmsh :: Parametric nodes not supported." + + call msh_node_blocks(msh_nodeblock) % Construct(tmpi1, tmpi2, tmpb, msh_nodes_per_block) + + do msh_node=1, msh_nodes_per_block + read(fUnit,*) msh_node_blocks(msh_nodeblock) % tags(msh_node) + end do ! msh_nodes_per_block /for tags + + do msh_node=1, msh_nodes_per_block + read(fUnit,*) msh_node_blocks(msh_nodeblock) % cords(msh_node,:) + end do ! msh_nodes_per_block /for coordinates + + msh_global_node = msh_global_node + msh_nodes_per_block + + end do ! msh_no_nodeblocks + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndNodes') error stop "READ_GMSH :: Wrong input file - not all nodes detected." +!-----Read-elements------------------------------------------------------ + read(fUnit,*) tmps + if (trim(tmps) .ne. '$Elements') error stop "READ_GMSH :: Wrong input file - no elements found." + + read(fUnit,*) msh_no_elblocks, numberOfElements, tmpi1, tmpi2 + if (numberOfElements .ne. tmpi2) error stop "READ_gmsh :: Incoherent element numbering." + + allocate(msh_element_blocks(msh_no_elblocks)) + + msh_global_el = 0 + do msh_elblock=1, msh_no_elblocks + + read(fUnit,*) tmpi1, tmpi2, element_type, msh_els_per_block + + call msh_element_blocks(msh_elblock) % Construct(element_type,msh_els_per_block) + + do msh_el=1, msh_els_per_block + read(fUnit,*) msh_element_blocks(msh_elblock) % tags(msh_el), msh_element_blocks(msh_elblock) % nodes(msh_el,:) + end do ! msh_els_per_block /for tags + + msh_global_el = msh_global_el + msh_els_per_block + + end do ! msh_no_elblocks + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndElements') error stop "READ_GMSH :: Wrong input file - not all elements detected." + close( fUnit ) + +!-----Mesh-info---------------------------------------------------------- + ! find order of elements curvature + check_eltype = 0 + do i=1, EL_MAX_ORDER + do msh_elblock=1, msh_no_elblocks + if( msh_element_blocks(msh_elblock)% el_type .eq. SUPPORTED_EL_TYPES(i) ) then !count(msh_element_blocks(:)% el_type .eq. SUPPORTED_EL_TYPES(i)) + check_eltype(i) = check_eltype(i) + 1 + end if + end do + end do + if (sum(check_eltype) .eq. 0) error stop "READ_GMSH :: No 3D elements detected in the mesh." + if (sum(check_eltype) .ne. maxval(check_eltype)) error stop "READ_GMSH :: More than 1 type of hexahedral detected in the mesh." + bFaceOrder = maxloc(check_eltype,1) ! set order of the mesh + org_element_type = SUPPORTED_EL_TYPES(bFaceOrder) + ! find number of elements + numberOfElements = 0 + do msh_elblock=1, msh_no_elblocks + if (msh_element_blocks(msh_elblock) % el_type .eq. org_element_type) then + numberOfElements = numberOfElements + msh_element_blocks(msh_elblock) % no_els + end if + end do + +!-----Reorder-nodes-in-elements------------------------------------------ + allocate(tmpi_vec1((bFaceOrder + 1)**3)) + do msh_elblock=1, msh_no_elblocks + if (msh_element_blocks(msh_elblock) % el_type .eq. org_element_type) then + do j=1, msh_element_blocks(msh_elblock) % no_els + ! re-order nodes within element to match HORSES ordering + tmpi_vec1 = msh_element_blocks(msh_elblock) % nodes(j,:) + call ReorderElement(tmpi_vec1,bFaceOrder) + msh_element_blocks(msh_elblock) % nodes(j,:) = tmpi_vec1 + end do + end if + end do + deallocate(tmpi_vec1) +!-----Assign-new-tags---------------------------------------------------- + tmp_eltag = 0 + do msh_elblock=1, msh_no_elblocks + if (msh_element_blocks(msh_elblock) % el_type .eq. org_element_type) then + do j=1, msh_element_blocks(msh_elblock) % no_els + tmp_eltag = tmp_eltag + 1 + msh_element_blocks(msh_elblock) % tags(j) = tmp_eltag + end do + end if + end do + if (.not. (tmp_eltag .eq. numberOfElements)) error stop "Read_GMSH :: Number of elements inconsistent." + +!-----Build-nodes-------------------------------------------------------- + self % no_of_elements = numberOfElements +!-----Allocate-mem-for-elements-and-nodes-------------------------------- + allocate( self % elements(numberOfelements) ) + allocate( self % nodes(numberOfNodes) ) + allocate( self % Nx(numberOfelements) , self % Ny(numberOfelements) , self % Nz(numberOfelements) ) + self % Nx = Nx + self % Ny = Ny + self % Nz = Nz + +!----Set-nodes----------------------------------------------------------- + do msh_nodeblock=1, msh_no_nodeblocks + do msh_node=1, msh_node_blocks(msh_nodeblock) % no_nodes + x = msh_node_blocks(msh_nodeblock) % cords(msh_node,1:NDIM)!/L_ref + call ConstructNode( self % nodes(msh_node_blocks(msh_nodeblock) % tags(msh_node)), x, msh_node_blocks(msh_nodeblock) % tags(msh_node) ) + end do + end do + +!----Set-elements----------------------------------------------------------- + j = 0 + do msh_elblock=1, msh_no_elblocks + if (msh_element_blocks(msh_elblock) % el_type .eq. org_element_type) then + do msh_el = 1, msh_element_blocks(msh_elblock) % no_els + j = j + 1 + ! setting l'th element + l = msh_element_blocks(msh_elblock) % tags(msh_el) + nodeIDs = msh_element_blocks(msh_elblock) % nodes(msh_el,1:8) ! only non-curved nodes + + if (bFaceOrder .eq. 1) then ! non-curved mesh + do k = 1, NODES_PER_ELEMENT + corners(:,k) = self % nodes(nodeIDs(k)) % x + end do + self % elements(l) % SurfInfo % IsHex8 = .TRUE. + self % elements(l) % SurfInfo % corners = corners + else ! curved mesh + print*, "Curved mesh for IBM p-adaptation not supported" + error stop + end if + + call self % elements(l) % Construct (Nx(l), Ny(l), Nz(l), nodeIDs , l, l) + end do ! msh_element_blocks(msh_elblock) % no_els + end if ! if el_type .eq. org_element_type + end do ! msh_no_elblocks + if (.not. (j .eq. numberOfElements)) error stop "Read_GMSH :: Not all elements assigned." + +!------Deallocate-msh-vairables------------------------------------------- + do msh_nodeblock=1, msh_no_nodeblocks + call msh_node_blocks(msh_nodeblock) % Destruct() + end do + deallocate(msh_node_blocks) + + do msh_elblock=1, msh_no_elblocks + call msh_element_blocks(msh_elblock) % Destruct() + end do + deallocate(msh_element_blocks) + + deallocate(msh_points) + deallocate(msh_entity_vec) + + end subroutine ConstructSimpleMesh_FromGMSHFile_v4_ + + subroutine ConstructSimpleMesh_FromGMSHFile_v2_(self, filename, Nx, Ny, Nz) + + USE Physics + use PartitionedMeshClass + use MPI_Process_Info + + implicit none +! --------------- +! Input variables +! --------------- +! + type(HexMesh) :: self + character(len=*) :: fileName + integer, intent(in) :: Nx(:), Ny(:), Nz(:) +! +! --------------- +! Local variables +! --------------- +! + character(len=1024) :: tmps + real(kind=RP) :: tmpd + integer :: tmpi, tmpi1, tmpi2, tmpi3, tmp_eltag + integer :: i, j, k, l + integer :: msh_no_points + integer :: msh_no_curves + integer :: msh_no_surfaces + integer :: msh_no_volumes + integer :: funit, fileStat + + real(kind=RP), allocatable :: msh_entity_vec(:) + + integer, dimension(EL_MAX_ORDER) :: check_eltype + integer, dimension(:), allocatable :: tmpi_vec1, el_types + + integer :: msh_no_nodeblocks, msh_nodeblock, msh_nodes_per_block, msh_global_node + integer :: element_type, org_element_type, org_element_type_2D + integer :: msh_no_elblocks, msh_elblock, msh_els_per_block, msh_el, msh_global_el + integer :: numberOfElements, numberOfElements2D + integer :: numberOfNodes, numberOfElements_, numberOfElements2D_ + integer :: bFaceOrder, no_nodes_i, msh_node + + type(MSH_element_block_t) :: msh_element_blocks + type(MSH_point_t), dimension(:), allocatable :: msh_points + + type(MSH_node_block_t) :: msh_nodes + type(MSH_element_block_t) :: msh_elements, msh_elements_3D, msh_elements_2D + + real(kind=RP) :: corners(NDIM,NODES_PER_ELEMENT) + real(kind=RP) :: x(NDIM) + integer :: nodeIDs(NODES_PER_ELEMENT) + character(len=MSH_LEN) :: msh_entity + + funit = UnusedUnit() + open( unit = fUnit, file = fileName, iostat = fileStat ) + if ( fileStat /= 0 ) then + print *, "Error opening file: ", fileName + return + end if + +!-----Read-header-info--------------------------------------------------- + read(fUnit,*) tmps + if (trim(tmps) .ne. '$MeshFormat') error stop "READ_GMSH :: Wrong input file." + read(fUnit,*) tmpd, tmpi, tmpi + read(fUnit,*) tmps +!-----Read-BC-info------------------------------------------------------- + ! Bc not needed + read(fUnit,*) tmps + if (trim(tmps) .ne. '$PhysicalNames') error stop "READ_GMSH :: Wrong input file - no boundary conditions defined." + read(fUnit,*) tmpi + + do i=1, tmpi + read(fUnit,*) + end do ! tmpi + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndPhysicalNames') error stop "READ_GMSH :: Wrong input file - not all boundary conditions detected." + +!-----Read-nodes--------------------------------------------------------- + read(fUnit,*) tmps + if (trim(tmps) .ne. '$Nodes') error stop "READ_GMSH :: Wrong input file - no nodes found." + read(fUnit,*) numberOfNodes + + call msh_nodes% Construct(0, 0, .false., numberOfNodes) + + do i=1, numberOfNodes + read(fUnit,*) msh_nodes% tags(i), msh_nodes% cords(i,:) + end do + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndNodes') error stop "READ_GMSH :: Wrong input file - not all nodes detected." + +!-----Read-elements------------------------------------------------------ + read(fUnit,*) tmps + if (trim(tmps) .ne. '$Elements') error stop "READ_GMSH :: Wrong input file - no elements found." + + read(fUnit,*) numberOfElements + call msh_elements% Construct(element_type,numberOfElements) + allocate(msh_entity_vec(255)) ! arbitrary number + allocate(el_types(numberOfElements)) ! arbitrary number + + do i=1, numberOfElements + + read(fUnit,'(4096a)') msh_entity ! read row + + msh_entity_vec=0.0_RP + + call getRealArrayFromStringNoCommas(msh_entity,msh_entity_vec) + + msh_elements% tags(i) = int(msh_entity_vec(1)) + el_types(i) = int(msh_entity_vec(2)) + msh_elements% no_ptags(i) = int(msh_entity_vec(3)) + if (msh_elements% no_ptags(i) .gt. 0) msh_elements% ptags(i,1:msh_elements% no_ptags(i)) = & + int(msh_entity_vec(4:3+msh_elements % no_ptags(i))) + + select case (el_types(i)) + case (5) ! 3D - 1st order + no_nodes_i = 8 + case (12) ! 3D - 2st order + no_nodes_i = 27 + case (92) ! 3D - 3rd order + no_nodes_i = 64 + case (93) ! 3D - 4th order + no_nodes_i = 125 + case (94) ! 3D - 5th order + no_nodes_i = 216 + case (3) ! 2D - 1st order + no_nodes_i = 4 + case (10) ! 2D - 2st order + no_nodes_i = 9 + case (36) ! 2D - 3rd order + no_nodes_i = 16 + case (37) ! 2D - 4th order + no_nodes_i = 25 + case (38) ! 2D - 5th order + no_nodes_i = 36 + case default + no_nodes_i = 0 + end select + + msh_elements% nodes(i,1:size(msh_entity_vec(4+msh_elements% no_ptags(i):3+msh_elements% no_ptags(i)+no_nodes_i) )) = & + int(msh_entity_vec(4+msh_elements% no_ptags(i):3+msh_elements% no_ptags(i)+no_nodes_i)) + + end do ! numberOfElements + + deallocate(msh_entity_vec) + + read(fUnit,*) tmps + if (trim(tmps) .ne. '$EndElements') error stop "READ_GMSH :: Wrong input file - not all elements detected." + close( fUnit ) + +!-----Mesh-info---------------------------------------------------------- + ! find order of elements curvature + check_eltype = 0 + do i=1, EL_MAX_ORDER + do j = 1, numberOfElements + if( el_types(j) .eq. SUPPORTED_EL_TYPES(i) )then + check_eltype(i) = check_eltype(i) + 1 + end if + end do +!~ check_eltype(i) = count(el_types .eq. SUPPORTED_EL_TYPES(i)) + end do + if (sum(check_eltype) .eq. 0) error stop "READ_GMSH :: No 3D elements detected in the mesh." + if (sum(check_eltype) .ne. maxval(check_eltype)) error stop "READ_GMSH :: More than 1 type of hexahedral detected in the mesh." + bFaceOrder = maxloc(check_eltype,1) ! set order of the mesh + org_element_type = SUPPORTED_EL_TYPES(bFaceOrder) + msh_elements% el_type = org_element_type + + select case (bFaceOrder) + case (1) + org_element_type_2D = 3 + case (2) + org_element_type_2D = 10 + case (3) + org_element_type_2D = 36 + case (4) + org_element_type_2D = 37 + case (5) + org_element_type_2D = 38 + case default + end select + +!~ if (numberOfElements .ne. (count(el_types .eq. org_element_type) + count(el_types .eq. org_element_type_2D)) ) & +!~ error stop "READ_GMSH :: Too many different types of elements." +!~ numberOfElements = count(el_types .eq. org_element_type) +!~ numberOfElements2D = count(el_types .eq. org_element_type_2D) + + numberOfElements_ = 0 + numberOfElements2D_ = 0 + do i = 1, size(el_types) + if( el_types(i) .eq. org_element_type ) then + numberOfElements_ = numberOfElements_ + 1 + elseif( el_types(i) .eq. org_element_type_2D ) then + numberOfElements2D_ = numberOfElements2D_ + 1 + end if + end do + + if( numberOfElements .ne. (numberOfElements_ + numberOfElements2D_) ) & + error stop "READ_GMSH :: Too many different types of elements." + + + numberOfElements = numberOfElements_ + numberOfElements2D = numberOfElements2D_ + + call msh_elements_3D % Construct(org_element_type,numberOfElements) + call msh_elements_2D % Construct(org_element_type_2D,numberOfElements2D) + + j = 0 + k = 0 + do i=1, size(el_types) + + if ( el_types(i) .eq. org_element_type ) then + j = j + 1 + msh_elements_3D % tags(j) = msh_elements% tags(i) + msh_elements_3D % no_ptags(j) = msh_elements% no_ptags(i) + msh_elements_3D % ptags(j,:) = msh_elements% ptags(i,1) + msh_elements_3D % nodes(j,:) = msh_elements% nodes(i,1:size(msh_elements_3D % nodes(j,:))) + elseif ( el_types(i) .eq. org_element_type_2D ) then + k = k + 1 + msh_elements_2D % tags(k) = msh_elements% tags(i) + msh_elements_2D % no_ptags(k) = msh_elements% no_ptags(i) + msh_elements_2D % ptags(k,:) = msh_elements% ptags(i,1) + msh_elements_2D % nodes(k,:) = msh_elements% nodes(i,1:size(msh_elements_2D % nodes(k,:))) + else + error stop "READ_GMSH :: Unknown element type in the mesh." + end if + + end do + + deallocate(el_types) + call msh_elements % Destruct() +!-----Reorder-nodes-in-elements------------------------------------------ + allocate(tmpi_vec1((bFaceOrder + 1)**3)) + do j=1, msh_elements_3D % no_els + ! re-order nodes within element to match HORSES ordering + tmpi_vec1 = msh_elements_3D % nodes(j,:) + call ReorderElement(tmpi_vec1,bFaceOrder) + msh_elements_3D % nodes(j,:) = tmpi_vec1 + end do + deallocate(tmpi_vec1) +!-----Assign-new-tags---------------------------------------------------- + tmp_eltag = 0 + do j=1, msh_elements_3D % no_els + tmp_eltag = tmp_eltag + 1 + msh_elements_3D % tags(j) = tmp_eltag + end do + if (.not. (tmp_eltag .eq. numberOfElements)) error stop "Read_GMSH :: Number of elements inconsistent." +!-----Build-nodes-------------------------------------------------------- + self % no_of_elements = numberOfElements +!-----Allocate-mem-for-elements-and-nodes-------------------------------- + allocate( self % elements(numberOfelements) ) + allocate( self % nodes(numberOfNodes) ) + allocate( self % Nx(numberOfelements) , self % Ny(numberOfelements) , self % Nz(numberOfelements) ) + self % Nx = Nx + self % Ny = Ny + self % Nz = Nz +!~ !----Set-nodes----------------------------------------------------------- + do msh_node=1, msh_nodes % no_nodes + x = msh_nodes % cords(msh_node,1:NDIM)!/L_ref + call ConstructNode( self % nodes(msh_nodes% tags(msh_node)), x, msh_nodes% tags(msh_node) ) + end do ! msh_nodes % no_nodes +!----Set-elements----------------------------------------------------------- + j = 0 + do msh_el = 1, msh_elements_3D % no_els + j = j + 1 + ! setting l'th element + l = msh_elements_3D % tags(msh_el) + nodeIDs = msh_elements_3D % nodes(msh_el,1:8) ! only non-curved nodes + + if (bFaceOrder .eq. 1) then ! non-curved mesh + do k = 1, NODES_PER_ELEMENT + corners(:,k) = self % nodes(nodeIDs(k)) % x + end do + self % elements(l) % SurfInfo % IsHex8 = .TRUE. + self % elements(l) % SurfInfo % corners = corners + else ! curved mesh + print*, "Curved mesh for IBM p-adaptation not supported" + error stop + end if + + call self % elements(l) % Construct (Nx(l), Ny(l), Nz(l), nodeIDs , l, l) + + end do ! msh_elements_3D % no_els + if (.not. (j .eq. numberOfElements)) error stop "Read_GMSH :: Not all elements assigned." + +!~ !-----Deallocate-msh-vairables------------------------------------------- + call msh_nodes% Destruct() + call msh_elements_3D % Destruct() + call msh_elements_2D % Destruct() + + end subroutine ConstructSimpleMesh_FromGMSHFile_v2_ + +end module readGMSH diff --git a/Solver/src/addons/tools/readHDF5.f90 b/Solver/src/addons/tools/readHDF5.f90 index 50f21ce50..86bf0bb48 100644 --- a/Solver/src/addons/tools/readHDF5.f90 +++ b/Solver/src/addons/tools/readHDF5.f90 @@ -65,14 +65,14 @@ end function NumOfElems_HDF5 ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - subroutine ConstructSimpleMesh_FromHDF5File_( self, fileName, locR) + subroutine ConstructSimpleMesh_FromHDF5File_( self, fileName, locR, AllNx, AllNy, AllNz ) implicit none !-arguments-------------------------------------------------------------- - class(HexMesh) , intent(inout) :: self + class(HexMesh) , intent(inout) :: self ! class(SimpleHexMesh) , intent(inout) :: self - character(LEN=*), intent(in) :: fileName - type(LocalRef_t), intent(in) :: locR - ! integer , intent(in) :: Nx(:), Ny(:), Nz(:) !< Polynomial orders for all the elements + character(LEN=*), optional, intent(in) :: fileName + type(LocalRef_t), optional, intent(in) :: locR + integer , optional, intent(in) :: AllNx(:), AllNy(:), AllNz(:) !< Polynomial orders for all the elements !-local-variables--------------------------------------------------------- #ifdef HAS_HDF5 ! Variables as called by Kopriva @@ -182,24 +182,23 @@ subroutine ConstructSimpleMesh_FromHDF5File_( self, fileName, locR) ! Now we construct the elements ! --------------------------------------- - ! set dummy values - falseNodeID = 0 - do l = 1, numberOfElements DO k = 1, NODES_PER_ELEMENT - HOPRNodeID = ElemInfo(ELEM_FirstNodeInd,l) + HCornerMap(k) - - corners(:,k) = NodeCoords(:,HOPRNodeID) / Lref - + HOPRNodeID = ElemInfo(ELEM_FirstNodeInd,l) + HCornerMap(k) + falseNodeID(k) = HOPRNodeID + corners(:,k) = NodeCoords(:,HOPRNodeID) / Lref END DO - - call locR%getOrderOfPosition(corners, Nx, Ny, Nz) - - ! call self % elements(l) % Construct (Nx(l), Ny(l), Nz(l), corners , l, l) - ! call self % elements(l) % Construct (Nx, Ny, Nz, corners , l, l) - call self % elements(l) % Construct (Nx, Ny, Nz, falseNodeID , l, l) + if( present(locR) ) then + ! set dummy values + falseNodeID = 0 + self % elements(l) % SurfInfo % corners = corners + call locR% getOrderOfPosition(corners, Nx, Ny, Nz) + call self % elements(l) % Construct (Nx, Ny, Nz, falseNodeID , l, l) + else + call self % elements(l) % Construct (AllNx(l), AllNy(l), AllNz(l), falseNodeID , l, l) + end if end do ! l = 1, numberOfElements @@ -456,4 +455,4 @@ end function HOPR2HORSESCornerMap #endif !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! -End Module readHDF5 +End Module readHDF5 \ No newline at end of file diff --git a/Solver/src/addons/tools/readSpecM.f90 b/Solver/src/addons/tools/readSpecM.f90 index e6384f321..c55cc07fa 100644 --- a/Solver/src/addons/tools/readSpecM.f90 +++ b/Solver/src/addons/tools/readSpecM.f90 @@ -11,7 +11,7 @@ Module readSpecM contains - Subroutine ConstructSimpleMesh_FromSpecFile_(self, fileName, locR) + Subroutine ConstructSimpleMesh_FromSpecFile_(self, fileName, locR, AllNx, AllNy, AllNz) ! --------------- ! Input variables @@ -19,7 +19,8 @@ Subroutine ConstructSimpleMesh_FromSpecFile_(self, fileName, locR) ! type(HexMesh) :: self CHARACTER(LEN=*) :: fileName - type(LocalRef_t), intent(in) :: locR + type(LocalRef_t), optional, intent(in) :: locR + integer , optional, intent(in) :: AllNx(:), AllNy(:), AllNz(:) !< Polynomial orders for all the elements ! ! --------------- ! Local variables @@ -171,9 +172,13 @@ Subroutine ConstructSimpleMesh_FromSpecFile_(self, fileName, locR) ! set dummy values falseNodeID = 0 - call locR % getOrderOfPosition(corners, Nx, Ny, Nz) - ! call self % elements(l) % Construct (Nx, Ny, Nz, falseNodeID , l, l) - call self % elements(l) % Construct (Nx, Ny, Nz, nodeIDs, l, l) + if( present(locR) ) then + call locR % getOrderOfPosition(corners, Nx, Ny, Nz) + ! call self % elements(l) % Construct (Nx, Ny, Nz, falseNodeID , l, l) + call self % elements(l) % Construct (Nx, Ny, Nz, nodeIDs, l, l) + else + call self% elements(l)% Construct(AllNx(l), AllNy(l), AllNz(l), nodeIDs, l, l) + end if READ( fUnit, * ) names END DO diff --git a/Solver/src/libs/discretization/DGSEMClass.f90 b/Solver/src/libs/discretization/DGSEMClass.f90 index 4011b5a83..bbe6ab23a 100644 --- a/Solver/src/libs/discretization/DGSEMClass.f90 +++ b/Solver/src/libs/discretization/DGSEMClass.f90 @@ -280,7 +280,12 @@ SUBROUTINE ConstructDGSem( self, meshFileName_, controlVariables, & ! if (MPI_Process % isRoot) write(STD_OUT,'(/,5X,A)') "Reading mesh..." CALL constructMeshFromFile( self % mesh, self % mesh % meshFileName, CurrentNodes, Nx, Ny, Nz, MeshInnerCurves , dir2D, useRelaxPeriodic, success ) - if (.not. self % mesh % child) call mpi_partition % ConstructGeneralInfo (self % mesh % no_of_allElements) + if (.not. self % mesh % child) call mpi_partition % ConstructGeneralInfo (self % mesh % no_of_allElements) +! +! Immersed boundary method parameter +! ----------------------------------- + + call self% mesh% IBM% read_info( controlVariables ) ! ! Compute wall distances ! ---------------------- @@ -321,19 +326,17 @@ SUBROUTINE ConstructDGSem( self, meshFileName_, controlVariables, & ! * IMMERSED BOUNDARY CONSTRUCTION * ! ********************************************************** ! - call self% mesh% IBM% read_info( controlVariables ) - if( self% mesh% IBM% active ) then - - if( .not. self % mesh % child ) call self% mesh% IBM% construct( controlVariables ) - + if( .not. self % mesh % child ) then + call self% mesh% IBM% GetDomainExtreme( self% mesh% elements ) + call self% mesh% IBM% construct( controlVariables ) + end if ! ! ------------------------------------------------ ! building the IBM mask and the IBM band region ! ------------------------------------------------ ! call self% mesh% IBM% build( self% mesh% elements, self% mesh% no_of_elements, self% mesh% NDOF, self% mesh% child ) - end if ! @@ -837,4 +840,4 @@ subroutine hnRange(mesh, hnmin, hnmax) end subroutine hnRange ! -end module DGSEMClass +end module DGSEMClass \ No newline at end of file diff --git a/Solver/src/libs/foundation/Utilities.f90 b/Solver/src/libs/foundation/Utilities.f90 old mode 100755 new mode 100644 index 702002349..e2246c663 --- a/Solver/src/libs/foundation/Utilities.f90 +++ b/Solver/src/libs/foundation/Utilities.f90 @@ -337,10 +337,10 @@ end subroutine LeastSquaresLinRegression ! Qsort.f90 ! Created: 2016-08-25 14:30 (GMT+0) ! By: Juli Rew (juliana@ucar.edu) -! Recursive Fortran 95 quicksort rOUTINe -! sorts INTEGER numbers INto ascENDing numerical order -! Based on algorithm from Cormen et al., Introduction to Algorithms, -! 1997 prINting +! Recursive Fortran 95 quicksort rOUTINe +! sorts INTEGER numbers INto ascENDing numerical order +! Based on algorithm from Cormen et al., Introduction to Algorithms, +! 1997 prINting ! !//////////////////////////////////////////////////////////////////////////////////////// ! @@ -517,4 +517,3 @@ end function my_findloc !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! end module Utilities - diff --git a/Solver/src/libs/io/ProgressBar.f90 b/Solver/src/libs/io/ProgressBar.f90 index a8a403cdb..11e25cc9e 100644 --- a/Solver/src/libs/io/ProgressBar.f90 +++ b/Solver/src/libs/io/ProgressBar.f90 @@ -1,152 +1,152 @@ -!+++++++++++++++++++++++++++++++++++++++++ -!> \brief Module containing a set of classes that can be used as progress-bars -!! and status counters. These counters only write to the standard output. -!! -!! This class is part of the online Fortran 2003 Tutorial by -!! Danny E.P. Vanpoucke (http://dannyvanpoucke.be) -!! and comes without warranty. -!! -!! This module makes use of: -!! - NOTHING -!<----------------------------------------------------------------------- -module progressbarsmodule - use SMConstants - implicit none - private - - - - !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - !> \brief Displays a text progress bar in the command-line. - !! - !! By making use of the carriage return character it is possible to generate a - !! progress bar, by continuously overwriting the same line.\n - !! The progress bar appear as:\n - !! \par - !! \b example \n - !! Your Progress Message, 43% [======== - !! - !<----------------------------------------------------------------------- - type, public :: TProgressBar - private - logical :: init - logical :: running - logical :: done - character(len=255) :: message - character(len=30) :: progressString - character(len=20) :: bar - real :: progress - contains - private - procedure,pass(this),public :: initialize - procedure,pass(this),public :: reset - procedure,pass(this),public :: run - procedure,pass(this),private:: printbar - procedure,pass(this),private:: updateBar - end type TProgressBar - - -contains - - !+++++++++++++++++++++++++++++++++++ - !>\brief Initialize the TProgressBar object. - !! - !! @param[in] msg String containing message to be displayed with the progressbar.[\b OPTIONAL ,\b DEFAULT = none] - !<---------------------------------- - subroutine initialize(this,msg) - class(TProgressBar) :: this - character(len=*),intent(in),optional :: msg - - call this%reset() - if(present(msg)) this%message=msg - this%init=.true. - - end subroutine initialize - !+++++++++++++++++++++++++++++++++++ - !>\brief Reset the TProgressBar object. - !<---------------------------------- - subroutine reset(this) - class(TProgressBar) :: this - - this%init=.false. - this%done=.false. - this%running=.false. - this%message="" - this%progressString="" - this%progress=0.0 - - end subroutine reset - !+++++++++++++++++++++++++++++++++++ - !>\brief Run the TProgressBar object. - !! - !! @param[in] pct Real value providing a the % of progress. - !! @param[in] Ix Integer number providing the number of digits to be used in the %. [\b OPTIONAL ,\b DEFAULT = 2] - !! @param[in] msg String containing message to be displayed with the progressbar.[\b OPTIONAL ,\b DEFAULT = none/ provided by the initialisation] - !<---------------------------------- - subroutine run(this,pct,Ix,msg) - class(TProgressBar) :: this - real::pct - integer, intent(in), optional :: Ix - character(len=*),intent(in),optional :: msg - if (.not. this%init) call this%initialize(msg) - if (.not. this%done) then - this%running=.true. - this%progress=pct - call this%updateBar(Ix) - call this%printbar() - if (abs(pct-100.0)<1.0E-6) then - this%done=.true. - write(*,'(A6)') "] done" - end if - end if - - end subroutine run - !+++++++++++++++++++++++++++++++++++ - !>\brief Update the bar of the TProgressBar object. - !! - !! @param[in] Ix Integer number providing the number of digits to be used in the %. [\b OPTIONAL ,\b DEFAULT = 2] - !<---------------------------------- - subroutine updateBar(this,Ix) - class(TProgressBar) :: this - integer, intent(in), optional :: Ix - - integer :: Ixx,np - character(len=50)::fm, fb - - Ixx=2 - if (present(Ix)) then - if (Ix>=0) Ixx=Ix - end if - fb="========================" - - write(fm,'(A2,I0,A1,I0,A1)')"(F",Ixx+5,".",Ixx,")" - write(this%progressString,trim(fm)) this%progress - ! every new bar section per 5% (20 pieces) - np=NINT(this%progress/5) - - if(np/=len_trim(this%bar)) then! things changed=redo bar - this%bar=fb(1:np) - end if - - end subroutine updateBar - !+++++++++++++++++++++++++++++++++++ - !>\brief Print the TProgressBar object. - !! - !<---------------------------------- - subroutine printbar(this) - ! use, intrinsic :: iso_fortran_env, only: OUTPUT_UNIT - class(TProgressBar) :: this - - character(len=50)::fm - - !fmt='(A'//trim(adjustl(ls))//',2X,1I3,1A1,2X,1A1,256A1)' - fm='(A1,A,X,2A,2X,A1,A)' - !start with carriage return to stay on the same line. - write(STD_OUT,trim(fm), advance='NO') achar(13),& - &trim(this%message),trim(adjustl(this%progressString)),'%','[',trim(adjustl(this%bar)) - ! flush(OUTPUT_UNIT) - flush(STD_OUT) - end subroutine printbar - - -end module progressbarsmodule +!+++++++++++++++++++++++++++++++++++++++++ +!> \brief Module containing a set of classes that can be used as progress-bars +!! and status counters. These counters only write to the standard output. +!! +!! This class is part of the online Fortran 2003 Tutorial by +!! Danny E.P. Vanpoucke (http://dannyvanpoucke.be) +!! and comes without warranty. +!! +!! This module makes use of: +!! - NOTHING +!<----------------------------------------------------------------------- +module progressbarsmodule + use SMConstants + implicit none + private + + + + !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + !> \brief Displays a text progress bar in the command-line. + !! + !! By making use of the carriage return character it is possible to generate a + !! progress bar, by continuously overwriting the same line.\n + !! The progress bar appear as:\n + !! \par + !! \b example \n + !! Your Progress Message, 43% [======== + !! + !<----------------------------------------------------------------------- + type, public :: TProgressBar + private + logical :: init + logical :: running + logical :: done + character(len=255) :: message + character(len=30) :: progressString + character(len=20) :: bar + real :: progress + contains + private + procedure,pass(this),public :: initialize + procedure,pass(this),public :: reset + procedure,pass(this),public :: run + procedure,pass(this),private:: printbar + procedure,pass(this),private:: updateBar + end type TProgressBar + + +contains + + !+++++++++++++++++++++++++++++++++++ + !>\brief Initialize the TProgressBar object. + !! + !! @param[in] msg String containing message to be displayed with the progressbar.[\b OPTIONAL ,\b DEFAULT = none] + !<---------------------------------- + subroutine initialize(this,msg) + class(TProgressBar) :: this + character(len=*),intent(in),optional :: msg + + call this%reset() + if(present(msg)) this%message=msg + this%init=.true. + + end subroutine initialize + !+++++++++++++++++++++++++++++++++++ + !>\brief Reset the TProgressBar object. + !<---------------------------------- + subroutine reset(this) + class(TProgressBar) :: this + + this%init=.false. + this%done=.false. + this%running=.false. + this%message="" + this%progressString="" + this%progress=0.0 + + end subroutine reset + !+++++++++++++++++++++++++++++++++++ + !>\brief Run the TProgressBar object. + !! + !! @param[in] pct Real value providing a the % of progress. + !! @param[in] Ix Integer number providing the number of digits to be used in the %. [\b OPTIONAL ,\b DEFAULT = 2] + !! @param[in] msg String containing message to be displayed with the progressbar.[\b OPTIONAL ,\b DEFAULT = none/ provided by the initialisation] + !<---------------------------------- + subroutine run(this,pct,Ix,msg) + class(TProgressBar) :: this + real::pct + integer, intent(in), optional :: Ix + character(len=*),intent(in),optional :: msg + if (.not. this%init) call this%initialize(msg) + if (.not. this%done) then + this%running=.true. + this%progress=pct + call this%updateBar(Ix) + call this%printbar() + if (abs(pct-100.0)<1.0E-6) then + this%done=.true. + write(*,'(A6)') "] done" + end if + end if + + end subroutine run + !+++++++++++++++++++++++++++++++++++ + !>\brief Update the bar of the TProgressBar object. + !! + !! @param[in] Ix Integer number providing the number of digits to be used in the %. [\b OPTIONAL ,\b DEFAULT = 2] + !<---------------------------------- + subroutine updateBar(this,Ix) + class(TProgressBar) :: this + integer, intent(in), optional :: Ix + + integer :: Ixx,np + character(len=50)::fm, fb + + Ixx=2 + if (present(Ix)) then + if (Ix>=0) Ixx=Ix + end if + fb="========================" + + write(fm,'(A2,I0,A1,I0,A1)')"(F",Ixx+5,".",Ixx,")" + write(this%progressString,trim(fm)) this%progress + ! every new bar section per 5% (20 pieces) + np=NINT(this%progress/5) + + if(np/=len_trim(this%bar)) then! things changed=redo bar + this%bar=fb(1:np) + end if + + end subroutine updateBar + !+++++++++++++++++++++++++++++++++++ + !>\brief Print the TProgressBar object. + !! + !<---------------------------------- + subroutine printbar(this) + ! use, intrinsic :: iso_fortran_env, only: OUTPUT_UNIT + class(TProgressBar) :: this + + character(len=50)::fm + + !fmt='(A'//trim(adjustl(ls))//',2X,1I3,1A1,2X,1A1,256A1)' + fm='(A1,A,X,2A,2X,A1,A)' + !start with carriage return to stay on the same line. + write(STD_OUT,trim(fm), advance='NO') achar(13),& + &trim(this%message),trim(adjustl(this%progressString)),'%','[',trim(adjustl(this%bar)) + ! flush(OUTPUT_UNIT) + flush(STD_OUT) + end subroutine printbar + + +end module progressbarsmodule \ No newline at end of file diff --git a/Solver/src/libs/io/SolutionFile.f90 b/Solver/src/libs/io/SolutionFile.f90 index 16b6581bb..fad8701e1 100644 --- a/Solver/src/libs/io/SolutionFile.f90 +++ b/Solver/src/libs/io/SolutionFile.f90 @@ -39,7 +39,7 @@ module SolutionFile #endif private - public :: MESH_FILE, SOLUTION_FILE, SOLUTION_AND_GRADIENTS_FILE, STATS_FILE, ZONE_MESH_FILE, IBM_MESH + public :: MESH_FILE, SOLUTION_FILE, SOLUTION_AND_GRADIENTS_FILE, STATS_FILE, ZONE_MESH_FILE public :: ZONE_SOLUTION_FILE, ZONE_SOLUTION_AND_DOT_FILE public :: SOLUTION_AND_SENSOR_FILE, SOLUTION_AND_GRADIENTS_AND_SENSOR_FILE public :: BEGINNING_DATA @@ -64,9 +64,8 @@ module SolutionFile integer, parameter :: ZONE_MESH_FILE = 5 integer, parameter :: ZONE_SOLUTION_FILE = 6 integer, parameter :: ZONE_SOLUTION_AND_DOT_FILE = 7 - integer, parameter :: IBM_MESH = 8 - integer, parameter :: SOLUTION_AND_SENSOR_FILE = 9 - integer, parameter :: SOLUTION_AND_GRADIENTS_AND_SENSOR_FILE = 10 + integer, parameter :: SOLUTION_AND_SENSOR_FILE = 8 + integer, parameter :: SOLUTION_AND_GRADIENTS_AND_SENSOR_FILE = 9 integer, parameter :: SOLFILE_STR_LEN = 128 integer, parameter :: END_OF_FILE = 99 @@ -137,7 +136,6 @@ subroutine CreateNewSolutionFile(name, type_, nodes, no_of_elements, iter, time, case(ZONE_MESH_FILE) case(ZONE_SOLUTION_FILE) case(ZONE_SOLUTION_AND_DOT_FILE) - case(IBM_MESH) case(SOLUTION_AND_SENSOR_FILE) case(SOLUTION_AND_GRADIENTS_AND_SENSOR_FILE) case default @@ -625,4 +623,4 @@ subroutine getSolutionFileArrayDimensions(fid,N,pos) end subroutine getSolutionFileArrayDimensions -end module SolutionFile +end module SolutionFile \ No newline at end of file diff --git a/Solver/src/libs/mesh/HexElementClass.f90 b/Solver/src/libs/mesh/HexElementClass.f90 index 95ee9910e..b03530f50 100644 --- a/Solver/src/libs/mesh/HexElementClass.f90 +++ b/Solver/src/libs/mesh/HexElementClass.f90 @@ -75,8 +75,9 @@ Module ElementClass type(ElementStorage_t), pointer :: storage type(SurfInfo_t) :: SurfInfo ! Information about the geometry of the neighboring faces, as in the mesh file type(TransfiniteHexMap) :: hexMap ! High-order mapper - logical, dimension(:,:,:), allocatable :: isInsideBody != .false. ! Immersed boundaty term -> if InsideBody(i,j,k) = true, the point(i,j,k) is inside the body - integer, dimension(:,:,:,:), allocatable :: STL !STL file the DoFbelongs to if isInsideBody = .true. + logical, dimension(:,:,:), allocatable :: isInsideBody, isForcingPoint ! Immersed boundaty term -> if InsideBody(i,j,k) = true, the point(i,j,k) is inside the body (IB) + integer, dimension(:,:,:), allocatable :: STL !STL file the DoFbelongs to if isInsideBody = .true. (IB) + integer :: IP_index contains procedure :: Construct => HexElement_Construct procedure :: Destruct => HexElement_Destruct @@ -168,6 +169,10 @@ elemental SUBROUTINE HexElement_Destruct( self ) call self % hexMap % destruct call self % SurfInfo % destruct + + if( allocated(self% isInsideBody) ) deallocate(self% isInsideBody) + if( allocated(self% isForcingPoint) ) deallocate(self% isForcingPoint) + if( allocated(self% STL) ) deallocate(self% STL) END SUBROUTINE HexElement_Destruct ! @@ -851,10 +856,13 @@ subroutine HexElement_ConstructIBM( self, Nx, Ny, Nz, NumOfSTL ) integer, intent(in) :: Nx, Ny, Nz, NumOfSTL !< Polynomial orders, num of stl files allocate(self% isInsideBody(0:Nx,0:Ny,0:Nz)) - allocate(self% STL(NumOfSTL,0:Nx,0:Ny,0:Nz)) - - self% isInsideBody = .false. - self% STL = 0 + allocate(self% isForcingPoint(0:Nx,0:Ny,0:Nz)) + allocate(self% STL(0:Nx,0:Ny,0:Nz)) + + self% isInsideBody = .false. + self% isForcingPoint = .false. + self% STL = 0 + self% IP_index = 0 end subroutine HexElement_ConstructIBM diff --git a/Solver/src/libs/mesh/HexMesh.f90 b/Solver/src/libs/mesh/HexMesh.f90 index ce7d33a23..736f0b9dc 100644 --- a/Solver/src/libs/mesh/HexMesh.f90 +++ b/Solver/src/libs/mesh/HexMesh.f90 @@ -198,7 +198,7 @@ SUBROUTINE HexMesh_Destruct( self ) call self% IBM% destruct( .false. ) end if end if - + END SUBROUTINE HexMesh_Destruct ! ! ------------- @@ -2365,7 +2365,7 @@ subroutine HexMesh_ConstructGeometry(self, facesList, elementList) end if end select - if ( any(CLN < NSurfR) ) then ! TODO JMT: I have added this.. is correct? + if ( any(CLN < NSurfR) ) then ! TODO JMT: I have added this.. is correct? allocate(faceCL(1:3,CLN(1)+1,CLN(2)+1)) call ProjectFaceToNewPoints(SurfInfo(eIDRight) % facePatches(SideIDR), CLN(1), NodalStorage(CLN(1)) % xCGL, & CLN(2), NodalStorage(CLN(2)) % xCGL, faceCL) @@ -2410,16 +2410,16 @@ subroutine HexMesh_ConstructGeometry(self, facesList, elementList) if ( SurfInfo(eID) % IsHex8 .or. all(NSurf == 1) ) cycle if (self % elements(eID) % faceSide(side) == LEFT) then - CLN(1) = f % NfLeft(1) ! TODO in MPI faces, p-adaption has - CLN(2) = f % NfLeft(2) ! not been accounted yet. + CLN(1) = f % NfLeft(1) ! TODO in MPI faces, p-adaption has + CLN(2) = f % NfLeft(2) ! not been accounted yet. else - CLN(1) = f % NfRight(1) ! TODO in MPI faces, p-adaption has - CLN(2) = f % NfRight(2) ! not been accounted yet. + CLN(1) = f % NfRight(1) ! TODO in MPI faces, p-adaption has + CLN(2) = f % NfRight(2) ! not been accounted yet. end if if ( side .eq. 2 ) then ! Right faces need to be rotated select case ( f % rotation ) - case ( 1, 3, 4, 6 ) ! Local x and y axis are perpendicular ! TODO this is correct? + case ( 1, 3, 4, 6 ) ! Local x and y axis are perpendicular ! TODO this is correct? if (CLN(1) /= CLN(2)) then buffer = CLN(1) CLN(1) = CLN(2) @@ -3119,7 +3119,7 @@ subroutine HexMesh_LoadSolutionForRestart( self, controlVariables, initial_itera auxMesh % Nz(eID) = Nz (e % globID) e_aux % globID = e % globID e_aux % Nxyz = [Nx(e % globID) , Ny(e % globID) , Nz(e % globID)] - NDOF = NDOF + (Nx(e % globID) + 1) * (Ny(e % globID) + 1) * (Nz(e % globID) + 1) ! TODO: change for new NDOF + NDOF = NDOF + (Nx(e % globID) + 1) * (Ny(e % globID) + 1) * (Nz(e % globID) + 1) ! TODO: change for new NDOF end associate end do @@ -3577,19 +3577,26 @@ subroutine HexMesh_ComputeWallDistances(self,facesList,elementList) end if associate(e => self % elements(eID)) allocate(e % geom % dWall(0:e % Nxyz(1), 0:e % Nxyz(2), 0:e % Nxyz(3))) + if( self% IBM% active ) then + allocate(e % geom % normal(NDIM, 0:e % Nxyz(1), 0:e % Nxyz(2), 0:e % Nxyz(3))) + e % geom % dWall = huge(1.0_RP) + endif + + if( .not. self% IBM% active ) then + do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) + xP = e % geom % x(:,i,j,k) + + minimumDistance = HUGE(1.0_RP) + do fID = 1, no_of_wallDOFS + currentDistance = sum(POW2(xP - Xwall(:,fID))) + minimumDistance = min(minimumDistance, currentDistance) + end do - do k = 0, e % Nxyz(3) ; do j = 0, e % Nxyz(2) ; do i = 0, e % Nxyz(1) - xP = e % geom % x(:,i,j,k) - - minimumDistance = HUGE(1.0_RP) - do fID = 1, no_of_wallDOFS - currentDistance = sum(POW2(xP - Xwall(:,fID))) - minimumDistance = min(minimumDistance, currentDistance) - end do - - e % geom % dWall(i,j,k) = sqrt(minimumDistance) + e % geom % dWall(i,j,k) = sqrt(minimumDistance) - end do ; end do ; end do + end do ; end do ; end do + end if + end associate end do ! @@ -3609,19 +3616,25 @@ subroutine HexMesh_ComputeWallDistances(self,facesList,elementList) associate(fe => self % faces(eID)) allocate(fe % geom % dWall(0:fe % Nf(1), 0:fe % Nf(2))) + if( self% IBM% active ) then + fe % geom % dWall = huge(1.0_RP) + endif + + if( .not. self% IBM% active ) then + do j = 0, fe % Nf(2) ; do i = 0, fe % Nf(1) + xP = fe % geom % x(:,i,j) + + minimumDistance = HUGE(1.0_RP) + do fID = 1, no_of_wallDOFS + currentDistance = sum(POW2(xP - Xwall(:,fID))) + minimumDistance = min(minimumDistance, currentDistance) + end do - do j = 0, fe % Nf(2) ; do i = 0, fe % Nf(1) - xP = fe % geom % x(:,i,j) - - minimumDistance = HUGE(1.0_RP) - do fID = 1, no_of_wallDOFS - currentDistance = sum(POW2(xP - Xwall(:,fID))) - minimumDistance = min(minimumDistance, currentDistance) - end do - - fe % geom % dWall(i,j) = sqrt(minimumDistance) + fe % geom % dWall(i,j) = sqrt(minimumDistance) - end do ; end do + end do ; end do + end if + end associate end do diff --git a/Solver/src/libs/mesh/IBMClass.f90 b/Solver/src/libs/mesh/IBMClass.f90 index 5d11a2eb5..30d8444c8 100644 --- a/Solver/src/libs/mesh/IBMClass.f90 +++ b/Solver/src/libs/mesh/IBMClass.f90 @@ -1,2876 +1,3349 @@ -#include "Includes.h" -module IBMClass - - use SMConstants - use Utilities - use FTValueDictionaryClass - use ElementClass - use FaceClass - use TessellationTypes - use OrientedBoundingBox - use KDClass - use IntegerDataLinkedList - use MPI_IBMUtilities -#ifdef _HAS_MPI_ - use mpi -#endif - implicit none - - type :: Integral_Obj - - integer, dimension(:,:), allocatable :: PointsIndex - real(kind=rp), dimension(:,:), allocatable :: x - real(kind=rp) :: Area - - end type - - type :: Integral_t - - real(kind=rp), dimension(:), allocatable :: xi, eta, weights - integer :: Order, n_of_Q_points - type(Integral_Obj), dimension(:), allocatable :: IntegObjs, NearestPoints, NearestPointsTurbulence - logical :: ListComputed = .false., constructed = .false. - - contains - procedure :: construct => Integral_construct - procedure :: destruct => Integral_destruct - procedure :: GetCoords => Integral_GetCoords - - end type - - type IBM_type - - type(STLfile), allocatable :: stl(:) - type(KDtree) :: rootPoints - type(KDtree), allocatable :: root(:) - type(PointLinkedList) :: BandPoints - type(Integral_t), allocatable :: Integral(:) - character(len=LINE_LENGTH), allocatable :: STLfilename(:) - character(len=LINE_LENGTH) :: filename - logical :: plotOBB, plotKDtree, active = .false., TimePenal, & - describeIBM, semiImplicit, active_semiImplicit, & - symmetry, plotBandPoints, plotMask, & - ComputeInterpolation = .false., & - Wallfunction = .false. - real(kind=rp) :: eta, BandRegionCoeff - real(kind=rp), allocatable :: symCoords(:), penalization(:) - integer :: KDtree_Min_n_of_Objs, KDtree_n_of_interPoints, & - IntegrationOrder, n_of_INpoints, & - rank, lvl = 0, NumOfSTL - integer, allocatable :: symPlanes(:), ImagePoint_NearestPoints(:,:) - - contains - procedure :: read_info => IBM_read_info - procedure :: construct => IBM_construct - procedure :: constructMask => IBM_constructMask - procedure :: constructSTL_KDtree => IBM_constructSTL_KDtree - procedure :: CheckPoint => IBM_checkPoint - procedure :: constructBandRegion => IBM_constructBandRegion - procedure :: build => IBM_build - procedure :: GetMask => IBM_GetMask - procedure :: MPI_send2Root => IBM_MPI_send2Root - procedure :: MPI_send2Partitions => IBM_MPI_send2Partitions - procedure :: MPI_sendMask2Root => IBM_MPI_sendMask2Root - procedure :: MPI_sendMask2Partitions => IBM_MPI_sendMask2Partitions - procedure :: MPI_sendBand2Root => IBM_MPI_sendBand2Root - procedure :: MPI_sendBand2Partitions => IBM_MPI_sendBand2Partitions - procedure :: BandRegionPoints => IBM_bandRegionPoints - procedure :: GetForcingPointsGeom => IBM_GetForcingPointsGeom - procedure :: GetImagePointCoords => IBM_GetImagePointCoords - procedure :: GetInfo => IBM_GetInfo - procedure :: SourceTerm => IBM_SourceTerm -#if defined(NAVIERSTOKES) - procedure :: GetImagePoint_nearest => IBM_GetImagePoint_nearest - procedure :: SourceTermTurbulence => IBM_SourceTermTurbulence -#endif - procedure :: semiImplicitShiftJacobian => IBM_semiImplicitShiftJacobian - procedure :: semiImplicitJacobian => IBM_semiImplicitJacobian - procedure :: GetSemiImplicitStep => IBM_GetSemiImplicitStep - procedure :: getObjsTangent => IBM_getObjsTangent - procedure :: upDateNormals => IBM_upDateNormals - procedure :: SetIntegration => IBM_SetIntegration - procedure :: copyKDtree => IBM_copyKDtree - procedure :: MoveBody => IBM_MoveBody - procedure :: CleanMask => IBM_CleanMask - procedure :: BandPoint_SetGeom => IBM_BandPoint_SetGeom - procedure :: BandPoint_state => IBM_BandPoint_state - procedure :: Describe => IBM_Describe - procedure :: plot_Mask => IBM_plot_Mask - procedure :: WriteMesh => IBM_WriteMesh - procedure :: Destruct => IBM_Destruct - procedure :: DestroyKDtree => IBM_DestroyKDtree - - end type - - integer, parameter :: mean_density = 1 - integer, parameter :: mean_u_II = 2 - integer, parameter :: mean_mu = 3 - - contains - - subroutine Integral_construct( this, Order, NumOfObjs, Wallfunction ) - - implicit none - - class(Integral_t), intent(inout) :: this - integer, intent(in) :: Order, NumOfObjs - logical, intent(in) :: Wallfunction - - if( this% constructed ) return - - this% Order = Order - - allocate(this% IntegObjs(NumOfObjs)) - - select case( Order ) - case( 2 ) - this% n_of_Q_points = 3 - - allocate(this% xi(3),this% eta(3), this% weights(3)) - - this% xi(1) = 1.0_RP/6.0_RP - this% xi(2) = 2.0_RP/3.0_RP - this% xi(3) = 1.0_RP/6.0_RP - - this% eta(1) = 1.0_RP/6.0_RP - this% eta(2) = 1.0_RP/6.0_RP - this% eta(3) = 2.0_RP/3.0_RP - - this% weights(1) = 1.0_RP/6.0_RP - this% weights(2) = this% weights(1) - this% weights(3) = this% weights(1) - - case( 3 ) - this% n_of_Q_points = 4 - - allocate(this% xi(4), this% eta(4), this% weights(4)) - - this% xi(1) = 1.0_RP/3.0_RP - this% xi(2) = 1.0_RP/5.0_RP - this% xi(3) = 1.0_RP/5.0_RP - this% xi(4) = 3.0_RP/5.0_RP - - this% eta(1) = 1.0_RP/3.0_RP - this% eta(2) = 1.0_RP/5.0_RP - this% eta(3) = 3.0_RP/5.0_RP - this% eta(4) = 1.0_RP/5.0_RP - - this% weights(1) = -27.0_RP/96.0_RP - this% weights(2) = 25.0_RP/96.0_RP - this% weights(3) = this% weights(2) - this% weights(4) = this% weights(2) - - case default - write(*,"(a26,I10,a21)")" Intgral_construct:: order", Order ," not implemented yet." - write(*,"(a25)")" Available orders:: 2 & 3" - error stop - end select - - this% constructed = .true. - - end subroutine Integral_construct - - subroutine Integral_destruct( this ) - - implicit none - !-arguments------------------------------ - class(Integral_t), intent(inout) :: this - !-local-variables------------------------ - integer :: i - - deallocate(this% xi) - deallocate(this% eta) - deallocate(this% weights) - - do i = 1, size(this% IntegObjs) - if( allocated(this% IntegObjs(i)% PointsIndex) ) then - deallocate(this% IntegObjs(i)% PointsIndex) - deallocate(this% IntegObjs(i)% x) - end if - end do - deallocate(this% IntegObjs) - - end subroutine Integral_destruct - - subroutine Integral_GetCoords( this, vertex1, vertex2, vertex3, index, n_of_Q_points ) - - implicit none - !-arguments--------------------------------------------------------------------- - class(Integral_t), intent(inout) :: this - real(kind=rp), dimension(NDIM), intent(in) :: vertex1, vertex2, vertex3 - integer, intent(in) :: index, n_of_Q_points - !-local-variables--------------------------------------------------------------- - integer :: i - - do i = 1, n_of_Q_points - this% IntegObjs(index)% x(:,i) = vertex1 + ( vertex2-vertex1 ) * this% xi(i) + & - ( vertex3-vertex1 ) * this% eta(i) - end do - - end subroutine Integral_GetCoords - - subroutine IBM_read_info( this, controlVariables ) - use FileReadingUtilities - implicit none - - class(IBM_type), intent(inout) :: this - class(FTValueDictionary) :: controlVariables - - call this% GetInfo( controlVariables ) - - end subroutine IBM_read_info - - - subroutine IBM_construct( this, controlVariables ) - use mainKeywordsModule - use FileReadingUtilities - use MPI_Process_Info - implicit none - !-arguments---------------------------------------- - class(IBM_type), intent(inout) :: this - class(FTValueDictionary) :: controlVariables - !-local-variables---------------------------------- - character(len=LINE_LENGTH) :: filename, MyString - integer :: STLNum - - if( this% describeIBM ) call this% describe() - - allocate( this% stl(this% NumOfSTL), & - OBB(this% NumOfSTL), & - this% root(this% NumOfSTL), & - this% integral(this% NumOfSTL), & - this% STLfilename(this% NumOfSTL) ) - - do STLNum = 1, this% NumOfSTL - write(MyString, '(i100)') STLNum - if( STLNum .eq. 1 ) then - filename = stlFileNameKey - else - filename = trim(stlFileNameKey)//trim(adjustl(MyString)) - end if - this% STLfilename(STLNum) = controlVariables% stringValueForKey(trim(filename), requestedLength = LINE_LENGTH) - call STLfile_GetMotionInfo( this% stl(STLNum), this% STLfilename(STLNum), this% NumOfSTL ) - this% stl(STLNum)% body = STLNum - call this% stl(STLNum)% ReadTessellation( this% STLfilename(STLNum) ) - call OBB(STLNum)% construct( this% stl(STLNum), this% plotOBB ) - this% root(STLNum)% STLNum = STLNum - call OBB(STLNum)% ChangeObjsRefFrame( this% stl(STLNum)% ObjectsList ) - call this% constructSTL_KDtree( STLNum ) - end do - - end subroutine IBM_Construct - - subroutine IBM_constructSTL_KDtree( this, STLNum ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - integer, intent(in) :: STLNum - - call MPI_KDtree_buildPartition( this% stl(STLNum) ) - - if ( MPI_Process% doMPIAction ) then - call recvSTLPartition() - end if - - if( MPI_Process% doMPIRootAction ) then - call SendSTLPartitions() - end if - - call this% root(STLNum)% construct( MPI_KDtreePartition% stl, MPI_KDtreePartition% Vertices, & - this% plotKDtree, this% KDtree_Min_n_of_Objs ) - - this% root(STLNum)% MaxAxis = MPI_KDtreePartition% axis - - call this% Integral(STLNum)% construct( this% IntegrationOrder, MPI_KDtreePartition% stl% NumOfObjs, this% Wallfunction ) - - call MPI_KDtree_destroy() - - end subroutine IBM_constructSTL_KDtree - - subroutine IBM_Destruct( this, isChild ) - use MPI_Process_Info - implicit none - !-arguments------------------------------ - class(IBM_type), intent(inout) :: this - logical, intent(in) :: isChild - !---------------------------------------- - integer :: i - - do i = 1, size(this% root) - call this% root(i)% destruct() - if( .not. isChild ) call this% Integral(i)% destruct() - end do - - deallocate(this% penalization) - - if( .not. isChild ) then - call this% rootPoints% Destruct() - call this% BandPoints% Destruct() - deallocate(this% symCoords) - deallocate(this% symPlanes) - end if - - end subroutine IBM_Destruct - - subroutine IBM_DestroyKDtree( this ) - use MPI_Process_Info - implicit none - !-arguments------------------------------ - class(IBM_type), intent(inout) :: this - !---------------------------------------- - integer :: i - - do i = 1, size(this% root) - call this% root(i)% destruct() - end do - - end subroutine IBM_DestroyKDtree - - - subroutine IBM_build( this, elements, no_of_elements, no_of_DoFs, isChild ) - use MPI_Process_Info - implicit none - !-arguments----------------------------------------------------------------- - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, no_of_DoFs - logical, intent(in) :: isChild - !-local-variables----------------------------------------------------------- - integer :: MaskPoints, STLNum -#ifdef _HAS_MPI_ - integer :: localVal, ierr -#endif - - this% n_of_INpoints = 0 - - do STLNum = 1, this% NumOfSTL - call this% GetMask( elements, no_of_elements, no_of_DoFs, STLNum ) - end do - - if( MPI_Process% doMPIAction ) then -#ifdef _HAS_MPI_ - localVal = this% n_of_INpoints - call mpi_allreduce(localVal, MaskPoints, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - else - MaskPoints = this% n_of_INpoints - end if - - if( MaskPoints .eq. 0 .and. this% lvl .gt. 0 ) then - print *, "The mask for the multigrid level ", this% lvl, " is made of 0 points." - print *, "Try to increase the polynomial order or to refine the mesh." - error stop - elseif( MaskPoints .eq. 0 ) then - print *, "The mask is made of 0 points." - print *, "Try to increase the polynomial order or to refine the mesh." - error stop - end if - - if( .not. isChild ) then - call this% constructBandRegion( elements, no_of_elements ) - do STLNum = 1, this% NumOfSTL - call this% SetIntegration( STLNum ) - end do - if( this% Wallfunction) then -#if defined(NAVIERSTOKES) - call this% GetForcingPointsGeom() - call this% GetImagePoint_nearest() -#endif - end if - call this% WriteMesh( elements, no_of_elements, 0 ) - end if - - allocate( this% penalization(no_of_elements) ) - - this% penalization = this% eta - - if( this% plotMask ) call this% plot_Mask( elements, no_of_elements ) - - end subroutine IBM_build - - subroutine IBM_GetMask( this, elements, no_of_elements, no_of_DoFs, STLNum ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, no_of_DoFs, STLNum - - call this% MPI_send2Root( elements, no_of_elements, no_of_DoFs, STLNum ) - - call this% MPI_send2Partitions() - - call this% constructmask( MPI_M_Points_ALL% x, elements, STLNum ) - - call MPI_M_PointsPartition% destroy() - call MPI_M_Points_ALL% destroy() - - end subroutine IBM_GetMask -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! - subroutine IBM_MPI_send2Root( this, elements, no_of_elements, no_of_DoFs, STLNum ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, no_of_DoFs, STLNum -#ifdef _HAS_MPI_ - integer :: LocalVal, ierr -#endif - - call MaskCandidates( elements, no_of_elements, no_of_DoFs, STLNum, this% NumOfSTL ) - - if( MPI_Process% doMPIAction ) then -#ifdef _HAS_MPI_ - localVal = MPI_M_PointsPartition% LocNumOfObjs - call mpi_allreduce(localVal, MPI_M_Points_All% NumOfObjs, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - else - MPI_M_Points_All% NumOfObjs = MPI_M_PointsPartition% LocNumOfObjs - end if - - call MPI_Pointpartition(MPI_M_Points_All% NumOfObjs) - - if ( MPI_Process% doMPIAction ) then - call RootRecvrecvPointMaskPartition() - call RootSendPointMaskPartition() - end if - - end subroutine IBM_MPI_send2Root - - - subroutine IBM_MPI_send2Partitions( this ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - - if ( MPI_Process% doMPIAction ) then - call recvPointMaskPartition() - end if - - if( MPI_Process% doMPIRootAction ) then - call sendPointMaskPartition() - end if - - end subroutine IBM_MPI_send2Partitions - -!-------------------------------------- - - subroutine IBM_MPI_sendMask2Root( this ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - - if ( MPI_Process% doMPIAction ) then - call RootRecvPointMask() - call RootSendPointMask() - end if - - end subroutine IBM_MPI_sendMask2Root - - - subroutine IBM_MPI_sendMask2Partitions( this ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - - if ( MPI_Process% doMPIAction ) then - call recvPointMask() - end if - - if( MPI_Process% doMPIRootAction ) then - call sendPointMask() - end if - - end subroutine IBM_MPI_sendMask2Partitions - -!-------------------------------------- - - subroutine IBM_MPI_sendBand2Root( this ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - - if ( MPI_Process% doMPIAction ) then - call RootrecvBandPoint() - call RootSendBandPoint( this% BandPoints ) - end if - - end subroutine IBM_MPI_sendBand2Root - - - subroutine IBM_MPI_sendBand2Partitions( this ) - use MPI_Process_Info - implicit none - - class(IBM_type), intent(inout) :: this - - if ( MPI_Process% doMPIAction ) then - call recvBandPointPartition() - end if - - if( MPI_Process% doMPIRootAction ) then - call sendBandPointPartition() - end if - - end subroutine IBM_MPI_sendBand2Partitions - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ----------------------------------------------------------- -! This subroutine plots the points outside & inside the body -! ----------------------------------------------------------- - - subroutine IBM_plot_Mask( this, elements, no_of_elements, timestep ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, timestep - !-local-variables------------------------------------------------ - character(len=LINE_LENGTH) :: PointFile, lvlName, nRank, step - integer :: eID, i, j, k, funit - logical :: add_Point = .false. - - optional :: timestep - - if( MPI_Process% nProcs .gt. 1 ) then - write(nRank,"(I100)") MPI_Process% rank - if( this% lvl .gt. 0 ) then - write(lvlName,"(I10)") this% lvl - PointFile = trim(this% filename)//'_MGlevel'//trim(adjustl(lvlName))//'_'//trim(adjustl(nRank)) - else - PointFile = trim(this% filename)//'_'//trim(adjustl(nRank)) - end if - else - if( this% lvl .gt. 0 ) then - write(lvlName,"(I10)") this% lvl - PointFile = trim(this% filename)//'_MGlevel'//trim(adjustl(lvlName)) - else - PointFile = trim(this% filename) - end if - end if - - if( this% n_of_INpoints .gt. 0 ) then - if( present(timestep) ) then - write(step,"(I10)") timestep - PointFile = PointFile//trim(step) - end if - - call TecFileHeader( 'IBM/Mask_'//trim(PointFile), 'Mask Points', this% n_of_INpoints/2+mod(this% n_of_INpoints,2),2,1, funit, 'POINT') - - if( mod(this% n_of_INpoints,2) .ne. 0 ) add_Point = .true. - - do eID = 1, no_of_elements - associate ( e => elements(eID) ) - do k = 0, e% Nxyz(3); do j = 0, e% Nxyz(2) ; do i = 0, e% Nxyz(1) - if( e% isInsideBody(i,j,k) ) then - write(funit,'(3E13.5)') e% geom% x(1,i,j,k), e% geom% x(2,i,j,k), e% geom% x(3,i,j,k) - if( add_Point ) then - write(funit,'(3E13.5)') e% geom% x(1,i,j,k), e% geom% x(2,i,j,k), e% geom% x(3,i,j,k) - add_Point = .false. - end if - end if - end do; end do; end do - end associate - end do - - close(funit) - end if - - end subroutine IBM_plot_Mask -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine constructs the mask -! ----------------------------------------------- - subroutine IBM_constructmask( this, x, elements, STLNum ) - use MPI_Process_Info - implicit none - !-arguments---------------------------------------------------- - class(IBM_type), intent(inout) :: this - type(point_type), dimension(:), intent(inout) :: x - integer, intent(in) :: STLNum - type(element), dimension(:), intent(inout) :: elements - !-local-variables---------------------------------------------- - real(kind=RP) :: Point(NDIM) - integer :: eID, n, i, j, k - -!$omp parallel shared(this,x,STLNum,n) -!$omp do schedule(runtime) private(Point) - do n = 1, size(x) - call OBB(STLNum)% ChangeRefFrame( x(n)% coords, 'local', Point ) - if( isInsideBox( Point, this% root(STLNum)% vertices ) ) then - call this% CheckPoint( x(n)% coords, STLNum, x(n)% isInsideBody ) - end if - end do -!$omp end do -!$omp end parallel - - call this% MPI_sendMask2Root() - call this% MPI_sendMask2Partitions() - -!$omp parallel shared(this,x,elements,STLNum,n) -!$omp do schedule(runtime) private(eID,i,j,k) - do n = 1, size(x) - if( x(n)% partition .eq. MPI_Process% rank ) then - eID = x(n)% element_index - i = x(n)% local_Position(1) - j = x(n)% local_Position(2) - k = x(n)% local_Position(3) - elements(eID)% isInsideBody(i,j,k) = x(n)% isInsideBody - if( elements(eID)% isInsideBody(i,j,k) ) then - elements(eID)% STL(STLNum,i,j,k) = STLNum -!$omp critical - this% n_of_INpoints = this% n_of_INpoints + 1 -!$omp end critical - end if - end if - end do -!$omp end do -!$omp end parallel - - end subroutine IBM_constructmask -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! -------------------------------------------------------------- -! This subroutine constructs the band region for the integration -! -------------------------------------------------------------- - - subroutine IBM_constructBandRegion( this, elements, no_of_elements ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements - !-local-variables------------------------------------------------ -#ifdef _HAS_MPI_ - integer localVal, ierr -#endif - - call this% BandRegionPoints( elements, no_of_elements ) - - if ( MPI_Process % doMPIAction ) then -#ifdef _HAS_MPI_ - localVal = this% BandPoints% NumOfPoints - call mpi_allreduce(localVal, BandPoints_All% NumOfObjs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - else - BandPoints_All% NumOfObjs = this% BandPoints% NumOfPoints - end if - - - if( BandPoints_All% NumOfObjs .eq. 0 ) then - print *, "IBM_bandRegionPoints: Number of points in the band region is 0" - error stop - end if - - call MPI_BandPointpartition( BandPoints_All% NumOfObjs, this% BandPoints ) - - call this% MPI_sendBand2Root() - call this% MPI_sendBand2Partitions() - - ! STL & OBB not used for rootpoints - call this% rootPoints% construct( this% stl(1), OBB(1)% LocVertices, this% plotBandPoints, this% KDtree_n_of_interPoints, BandPoints_All% x ) - - call this% BandPoints% destruct() - - end subroutine IBM_constructBandRegion - - subroutine IBM_bandRegionPoints( this, elements, n_of_elements ) - use ElementClass - use FaceClass - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: n_of_elements - !-local-variables------------------------------------------------------ - type(point_type) :: p - integer :: eID, n, i, j, k, NumOfPoints, STLNum - - this% BandPoints = PointLinkedList() - - n = 0; NumOfPoints = 0 - - do eID = 1, n_of_elements - associate( e => elements(eID) ) - do i = 0, e% Nxyz(1); do j = 0, e% Nxyz(2); do k = 0, e% Nxyz(3) - if( .not. e% isInsideBody(i,j,k) ) then - do STLNum = 1, this% NumOfSTL - if( OBB(STLNum)% isPointInside( e% geom% x(:,i,j,k), this% BandRegionCoeff ) ) then - p% coords = e% geom% x(:,i,j,k) - p% element_index = eID; p% local_Position = (/ i,j,k /) - n = n + 1; NumOfPoints = NumOfPoints + 1 - p% index = n; p% partition = MPI_Process% rank - call this% BandPoints% add(p) - exit - end if - end do - end if - end do; end do; end do - end associate - end do - - this% BandPoints% NumOfPoints = NumOfPoints - - end subroutine IBM_bandRegionPoints - - subroutine IBM_copyKDtree( this, KDtree2copy ) - - implicit none - - class(IBM_type), intent(inout) :: this - type(KDtree), target, intent(in) :: KDtree2copy(:) - - integer :: i - - allocate(this% root(size(KDtree2copy))) - - do i = 1, size(KDtree2copy) - this% root(i) = KDtree2copy(i) - end do - - end subroutine IBM_copyKDtree - - - subroutine IBM_getObjsTangent( this, STLNum ) - use MappedGeometryClass - implicit none - !-arguments------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: STLNum - !-local-variables------------------------- - real(kind=rp) :: dv(NDIM), & - Vertices(NDIM,3) - integer :: i - -!$omp parallel shared(this,STLNum,i) -!$omp do schedule(runtime) private(Vertices,dv) - do i = 1, this% root(STLNum)% NumOfObjs - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(1)% coords ,'global', Vertices(:,1)) - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(2)% coords ,'global', Vertices(:,2)) - call vcross(Vertices(:,2) - Vertices(:,1),this% root(STLNum)% ObjectsList(i)% normal,dv) - dv = dv/norm2(dv) - this% root(STLNum)% ObjectsList(i)% tangent = dv/norm2(dv) - end do -!$omp end do -!$omp end parallel - end subroutine IBM_getObjsTangent - - subroutine IBM_upDateNormals( this, STLNum ) - use MappedGeometryClass - implicit none - !-argument-------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: STLNum - !-local-variables------------------------- - real(kind=rp) :: dv(NDIM), & - Vertices(NDIM,3) - integer :: i - -!$omp parallel shared(this,STLNum,i) -!$omp do schedule(runtime) private(Vertices,dv) - do i = 1, this% root(STLNum)% NumOfObjs - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(1)% coords ,'global', Vertices(:,1)) - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(2)% coords ,'global', Vertices(:,2)) - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(3)% coords ,'global', Vertices(:,3)) - call vcross(Vertices(:,2) - Vertices(:,1),Vertices(:,3) - Vertices(:,1),dv) - dv = dv/norm2(dv) - this% root(STLNum)% ObjectsList(i)% normal = dv/norm2(dv) - end do -!$omp end do -!$omp end parallel - end subroutine IBM_upDateNormals - - - subroutine IBM_GetImagePointCoords( this, maxDistFP ) - use MPI_Process_Info - implicit none - !-arguments---------------------------------------------- - class(IBM_type), intent(inout) :: this - real(kind=rp), intent(in) :: maxDistFP - !-local-variables---------------------------------------- - real(kind=rp) :: d, minDist, DistFP - real(kind=rp), parameter :: factor = 0.01_RP - integer :: i, j, STLNum - logical, dimension(this% NumOfSTL) :: found - - minDist = huge(1.0_RP) - -!$omp parallel shared(i,maxDistFP) -!$omp do schedule(runtime) private(j,STLNum,found,d,DistFP) - do i = 1, BandPoints_ALL% NumOfObjs - - if( .not. BandPoints_ALL% x(i)% forcingPoint ) cycle - - d = 0.0_RP - - DistFP = maxDistFP - BandPoints_ALL% x(i)% Dist - - BandPoints_ALL% x(i)% ImagePoint_coords = BandPoints_ALL% x(i)% coords + DistFP * BandPoints_ALL% x(i)% normal - - found = .false. - - do j = 1, 5001 - ! first we move the point far away - do STLNum = 1, this% NumOfSTL - if( .not. OBB(STLNum)% isInsidePolygon( BandPoints_ALL% x(i)% ImagePoint_coords ) ) then - found(STLNum) = .true. - end if - end do - - if( all(found) ) exit - - found = .false. - - d = d + factor - - BandPoints_ALL% x(i)% ImagePoint_coords = BandPoints_ALL% x(i)% coords + (d + DistFP)*BandPoints_ALL% x(i)% normal - - end do - -!$omp critical - minDist = min(minDist,d) -!$omp end critical - - if( .not. all(found) ) print*, "can't set the Image point for the forcing point ", BandPoints_ALL% x(i)% coords - - end do -!$omp end do -!$omp end parallel - -!$omp parallel shared(minDist,maxDistFP,i) -!$omp do schedule(runtime) private(d) - do i = 1, BandPoints_ALL% NumOfObjs - if( BandPoints_ALL% x(i)% forcingPoint ) then - d = maxDistFP - BandPoints_ALL% x(i)% Dist + minDist - BandPoints_ALL% x(i)% ImagePoint_coords = BandPoints_ALL% x(i)% coords + d*BandPoints_ALL% x(i)% normal - end if - end do -!$Omp end do -!$Omp end parallel - - - end subroutine IBM_GetImagePointCoords - - - - - subroutine IBM_GetForcingPointsGeom( this ) - use MPI_Process_Info - - use omp_lib - - implicit none - !-arguments--------------------------------------------- - class(IBM_type), intent(inout) :: this - !-local-variables-------------------------------------- - real(kind=RP) :: Dist, Point(NDIM), normal(NDIM), meanDist - integer :: i, STLNum -#ifdef _HAS_MPI_ - real(kind=RP) :: MPI_in(2,1), MPI_out(2,1) - integer :: ierr -#endif - - BandPoints_ALL% NumOfF_Points = 0 - -!$omp parallel shared(i) -!$omp do schedule(runtime) private(STLNum,Dist,normal,Point) - do i = 1, BandPoints_ALL% NumOfObjs - BandPoints_ALL% x(i)% Dist = huge(1.0_RP) - do STLNum = 1, this% NumOfSTL - if( .not. OBB(STLNum)% isInsidePolygon( BandPoints_ALL% x(i)% coords ) ) cycle - BandPoints_ALL% x(i)% forcingPoint = .true. -!$omp critical - BandPoints_ALL% NumOfF_Points = BandPoints_ALL% NumOfF_Points + 1 -!$omp end critical - call OBB(STLNum)% ChangeRefFrame(BandPoints_ALL% x(i)% coords, 'local', Point) - call MinimumDistance( Point, this% root(STLNum), Dist, normal ) - if( Dist .lt. BandPoints_ALL% x(i)% Dist ) then - BandPoints_ALL% x(i)% Dist = Dist - BandPoints_ALL% x(i)% normal = normal - BandPoints_ALL% x(i)% rank = MPI_Process% rank - end if - end do - end do -!$omp end do -!$omp end parallel - - if( BandPoints_ALL% NumOfF_Points .eq. 0 ) then - print*, " Number of forcing points is 0." - print*, " Increase 'coeff' in OrientedBoundingBox:: OBB_isInsidePolygon" - end if - -#ifdef _HAS_MPI_ - do i = 1, BandPoints_ALL% NumOfObjs - MPI_in(1,1) = BandPoints_ALL% x(i)% Dist - MPI_in(2,1) = MPI_Process% rank - call mpi_allreduce( MPI_in, MPI_out, 1, MPI_2DOUBLE_PRECISION, MPI_MINLOC, MPI_COMM_WORLD, ierr ) - if( MPI_Process% isRoot ) then - BandPoints_ALL% x(i)% Dist = MPI_out(1,1) - BandPoints_ALL% x(i)% rank = MPI_out(2,1) - end if - end do -#endif - - if ( MPI_Process% doMPIAction ) then - call recvGeom() - end if - - if( MPI_Process% doMPIRootAction ) then - call sendGeom() - end if - - call this% BandPoint_SetGeom() - - meanDist = sum(BandPoints_ALL% x(:)% Dist,BandPoints_ALL% x(:)% forcingPoint)/BandPoints_ALL% NumOfF_Points - -!$omp parallel shared(i,meanDist) -!$omp do schedule(runtime) - do i = 1, BandPoints_ALL% NumOfObjs - if( BandPoints_ALL% x(i)% forcingPoint .and. BandPoints_ALL% x(i)% Dist .gt. meanDist ) then - BandPoints_ALL% x(i)% forcingPoint = .false. -!$omp critical - BandPoints_ALL% NumOfF_Points = BandPoints_ALL% NumOfF_Points - 1 -!$omp end critical - end if - end do -!$omp end do -!$omp end parallel - - call this% GetImagePointCoords( meanDist ) - - end subroutine IBM_GetForcingPointsGeom - - - - subroutine IBM_BandPoint_SetGeom( this ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------- - class(IBM_type), intent(inout) :: this - !-local-variables------------------------------------------- - real(kind=rp), dimension(:,:), allocatable :: bpNormals - real(kind=rp), dimension(:), allocatable :: local_sum - integer :: i, rank -#ifdef _HAS_MPI_ - integer :: ierr -#endif - - allocate( bpNormals(NDIM,BandPoints_ALL% NumOfObjs), & - local_sum(BandPoints_ALL% NumOfObjs) ) - - bpNormals = 0.0_RP - do i = 1, BandPoints_ALL% NumOfObjs - rank = BandPoints_ALL% x(i)% rank - if( rank .eq. MPI_Process% rank ) then - bpNormals(:,i) = BandPoints_ALL% x(i)% normal - end if - end do - -#ifdef _HAS_MPI_ - do i = 1, NDIM - local_sum = bpNormals(i,:) - call mpi_allreduce( local_sum, bpNormals(i,:), BandPoints_ALL% NumOfObjs, MPI_DOUBLE, & - MPI_SUM, MPI_COMM_WORLD, ierr ) - end do -#endif - - do i = 1, BandPoints_ALL% NumOfObjs - BandPoints_ALL% x(i)% normal = bpNormals(:,i) - end do - - deallocate(bpNormals,local_sum) - - end subroutine IBM_BandPoint_SetGeom - - subroutine IBM_BandPoint_state( this, elements, bpQ, bpU_x, bpU_y, bpU_z ) - use PhysicsStorage - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(in) :: elements - real(kind=rp), dimension(:,:), intent(inout) :: bpQ, bpU_x, & - bpU_y, bpU_z - !-local-variables------------------------------------------------- - integer :: i -#ifdef _HAS_MPI_ - real(kind=rp), dimension(:), allocatable :: local_sum - integer :: ierr -#endif - - optional :: bpU_x, bpU_y, bpU_z - - bpQ = 0.0_RP - if( present(bpU_x) ) bpU_x = 0.0_RP - if( present(bpU_y) ) bpU_y = 0.0_RP - if( present(bpU_z) ) bpU_z = 0.0_RP - -!$omp parallel shared(i,bpQ,bpU_x,bpU_y,bpU_z) -!$omp do schedule(runtime) - do i = 1, BandPoints_ALL% NumOfObjs - if( BandPoints_ALL% x(i)% partition .eq. MPI_Process% rank ) then - bpQ(:,i) = elements(BandPoints_ALL% x(i)% element_index)% storage% & - Q(:,BandPoints_ALL% x(i)% local_Position(1), & - BandPoints_ALL% x(i)% local_Position(2), & - BandPoints_ALL% x(i)% local_Position(3) ) - if( present(bpU_x) ) then - bpU_x(:,i) = elements(BandPoints_ALL% x(i)% element_index)% storage% & - U_x(:,BandPoints_ALL% x(i)% local_Position(1), & - BandPoints_ALL% x(i)% local_Position(2), & - BandPoints_ALL% x(i)% local_Position(3) ) - end if - if( present(bpU_y) ) then - bpU_y(:,i) = elements(BandPoints_ALL% x(i)% element_index)% storage% & - U_y(:,BandPoints_ALL% x(i)% local_Position(1), & - BandPoints_ALL% x(i)% local_Position(2), & - BandPoints_ALL% x(i)% local_Position(3) ) - end if - if( present(bpU_z) ) then - bpU_z(:,i) = elements(BandPoints_ALL% x(i)% element_index)% storage% & - U_z(:,BandPoints_ALL% x(i)% local_Position(1), & - BandPoints_ALL% x(i)% local_Position(2), & - BandPoints_ALL% x(i)% local_Position(3) ) - end if - end if - end do -!$omp end do -!$omp end parallel - -#ifdef _HAS_MPI_ - allocate(local_sum(BandPoints_ALL% NumOfObjs)) - do i = 1, NCONS - local_sum = bpQ(i,:) - call mpi_allreduce(local_sum, bpQ(i,:), BandPoints_ALL% NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) - if( present(bpU_x) ) then - local_sum = bpU_x(i,:) - call mpi_allreduce(local_sum, bpU_x(i,:), BandPoints_ALL% NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) - end if - if( present(bpU_y) ) then - local_sum = bpU_y(i,:) - call mpi_allreduce(local_sum, bpU_y(i,:), BandPoints_ALL% NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) - end if - if( present(bpU_z) ) then - local_sum = bpU_z(i,:) - call mpi_allreduce(local_sum, bpU_z(i,:), BandPoints_ALL% NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) - end if - end do - deallocate(local_sum) -#endif - end subroutine IBM_BandPoint_state - - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine reads the info in the #define region of controlfile -! ----------------------------------------------- - subroutine IBM_GetInfo( this, controlVariables ) - use FileReadingUtilities - implicit none - !-arguments---------------------------------------------------------------- - class(IBM_type), intent(inout) :: this - class(FTValueDictionary) :: controlVariables - !-local-variables---------------------------------------------------------- - logical, allocatable :: active_in, describe_in, plotOBB_in, & - plotKDtree_in, semiImplicit_in, & - plotBandPoints_in, plotMask_in, & - Wallfunction_in - real(kind=rp), allocatable :: penalization_in, BandRegionCoeff_in - integer, allocatable :: n_of_Objs_in, n_of_interpoints_in, & - IntegrationOrder_in, sym_planes(:) - character(len=LINE_LENGTH) :: in_label, paramFile, name_in, tmp - integer :: i - - character(len=LINE_LENGTH), parameter :: NumberOfSTL = "number of stl" - -! Read block -! ********** - write(in_label , '(A)') "#define ibm" - call get_command_argument(1, paramFile) - call readValueInRegion ( trim ( paramFile ), "name", name_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "active", active_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "penalization", penalization_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "semi implicit", semiImplicit_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "wall function", Wallfunction_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "number of objects", n_of_Objs_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "number of interpolation points", n_of_interpoints_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "band region coefficient", BandRegionCoeff_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "integration order", IntegrationOrder_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "describe", describe_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "plot obb" ,plotOBB_in, in_label , "# end" ) - call readValueInRegion ( trim ( paramFile ), "plot kdtree" ,plotKDtree_in, in_label , "# end" ) - call readValueInRegion ( trim ( paramFile ), "plot mask", plotMask_in, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ), "plot band points", plotBandPoints_in, in_label, "#end" ) - - this% filename = trim(name_in) - - if( allocated(active_in) ) then - this% active = active_in - else - this% active = .FALSE. - end if - - if( .not. this% active) return - - this% semiImplicit = .false. - if( allocated(semiImplicit_in) ) then - this% active_semiImplicit = semiImplicit_in - else - this% active_semiImplicit = .FALSE. - end if - - if( allocated(describe_in) ) then - this% describeIBM = describe_in - else - this% describeIBM = .FALSE. - end if - - if( allocated(plotOBB_in) ) then - this% plotOBB = plotOBB_in - else - this% plotOBB = .FALSE. - end if - - if( allocated(plotKDtree_in) ) then - this% plotKDtree = plotKDtree_in - else - this% plotKDtree = .FALSE. - end if - - if( allocated(penalization_in) ) then - this% eta = penalization_in - this% TimePenal = .false. - else - this% eta = 0.1_RP - this% TimePenal = .true. - end if - - if( allocated(n_of_Objs_in) ) then - this% KDtree_Min_n_of_Objs = n_of_Objs_in - else - this% KDtree_Min_n_of_Objs = 5 - end if - - if( allocated(n_of_interpoints_in) ) then - this% KDtree_n_of_interPoints = n_of_interpoints_in - else - this% KDtree_n_of_interPoints = 15 - end if - - if( allocated(IntegrationOrder_in) ) then - this% IntegrationOrder = IntegrationOrder_in - else - this% IntegrationOrder = 2 - end if - - if( allocated(plotBandPoints_in) ) then - this% plotBandPoints = plotBandPoints_in - else - this% plotBandPoints = .false. - end if - - if( allocated(plotMask_in) ) then - this% plotMask = plotMask_in - else - this% plotMask = .false. - end if - - if( allocated(BandRegionCoeff_in) ) then - this% BandRegionCoeff = BandRegionCoeff_in - else - this% BandRegionCoeff = 1.5_RP - end if - - if( allocated(Wallfunction_in) ) then - this% Wallfunction = Wallfunction_in - else - this% Wallfunction = .false. - end if - - if( this% Wallfunction ) then - if (.not. controlVariables % containsKey("wall function")) then - print *, "IBM_GetInfo:: 'wall function' not specified in the control file" - error stop - end if - end if - - if( controlVariables% containsKey(trim(NumberOfSTL)) ) then - tmp = controlVariables% StringValueForKey(trim(NumberOfSTL),LINE_LENGTH) - this% NumOfSTL = GetIntValue(tmp) - else - this% NumOfSTL = 1 - end if - - this% symmetry = .false. - - if( controlVariables% containsKey("symmetry planes") ) then - this% symmetry = .true. - tmp = controlVariables% StringValueForKey("symmetry planes",LINE_LENGTH) - sym_planes = getIntArrayFromString(tmp) - if( maxval(abs(sym_planes)) .gt. 3 ) then - error stop " IBM_GetInfo :: Symmetry planes allowed values -3:3" - end if - allocate( this% symPlanes(size(sym_Planes,1)), this% symCoords(size(sym_Planes,1)) ) - do i = 1, size(sym_Planes,1) - this% symPlanes(i) = sym_planes(i) - if( sym_planes(i) .gt. 0 ) then - this% symCoords(i) = -huge(1.0_RP) - else - this% symCoords(i) = huge(1.0_RP) - end if - end do - end if - - - end subroutine IBM_GetInfo -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine describes the IBM info -! ----------------------------------------------- - subroutine IBM_Describe( this ) - use Headers - use mainKeywordsModule - use MPI_Process_Info - implicit none - !-arguments-------------------------------- - class(IBM_type), intent(inout) :: this - - if ( MPI_Process % isRoot ) then - write(STD_OUT,'(/)') - call Section_Header("IBM parameters") - write(STD_OUT,'(/)') - - call SubSection_Header('IBM info') - - write(STD_OUT,'(30X,A,A35,L10)') "->" , "Semi implicit treatment: ", this% active_semiImplicit - if( .not. this% TimePenal ) then - write(STD_OUT,'(30X,A,A35,1pG10.3)') "->" , "Penalization term: " , this% eta - else - write(STD_OUT,'(30X,A,A35,A)') "->" , "Penalization term: ", " proportional to time step" - end if - - write(STD_OUT,'(30X,A,A35,I10)') "->" , "Minimum number of objects: ", this% KDtree_Min_n_of_Objs - write(STD_OUT,'(30X,A,A35,I10)') "->" , "Number of interpolation points: ", this% KDtree_n_of_interPoints - write(STD_OUT,'(30X,A,A35,I10)') "->" , "Integration order: ", this% IntegrationOrder - if( this% symmetry ) then - select case( size(this% symPlanes,1) ) - case( 1 ) - write(STD_OUT,'(30X,A,A35,I2,A)') "->" , "Symmetry planes: [", this% symPlanes(1),"]" - case( 2 ) - write(STD_OUT,'(30X,A,A36,I2,A,I2,A)') "->" , "Symmetry planes: [", this% symPlanes(1),",",this% symPlanes(2),"]" - case( 3 ) - write(STD_OUT,'(30X,A,A35,I2,A,I2,A,I2,A)') "->" , "Symmetry planes: [", this% symPlanes(1),",",this% symPlanes(2),",",this% symPlanes(3),"]" - case default - write(STD_OUT,'(30X,A,A35,I10)') "->" , "Symmetry planes: ", this% symPlanes - end select - end if - end if - end subroutine IBM_Describe -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the IBM source term -! ------------------------------------------------ - - subroutine IBM_SourceTerm( this, eID, Q, Q_target, Source ) - use PhysicsStorage - implicit none - !-arguments------------------------------------------------ - class(IBM_type), intent(inout) :: this - integer, intent(in) :: eID - real(kind=rp), dimension(NCONS), intent(in) :: Q, Q_target - real(kind=rp), dimension(NCONS), intent(inout) :: Source - !-local-variables----------------------------------- - real(kind=rp) :: rho, rho_s, u, u_s, v, v_s, w, w_s -#if defined(SPALARTALMARAS) - real(kind=rp) :: theta, theta_s -#endif - - optional :: Q_target - - Source = 0.0_RP - -#if defined(NAVIERSTOKES) - if( present(Q_target) ) then - rho_s = Q_target(IRHO) - u_s = Q_target(IRHOU)/rho_s - v_s = Q_target(IRHOV)/rho_s - w_s = Q_target(IRHOW)/rho_s -#if defined(SPALARTALMARAS) - theta_s = Q_target(IRHOTHETA) -#endif - else - rho_s = Q(IRHO) - u_s = 0.0_RP - v_s = 0.0_RP - w_s = 0.0_RP -#if defined(SPALARTALMARAS) - theta_s = 0.0_RP -#endif - end if - - rho = Q(IRHO) - u = Q(IRHOU)/rho - v = Q(IRHOV)/rho - w = Q(IRHOW)/rho - - Source(IRHOU) = rho*(u-u_s) - Source(IRHOV) = rho*(v-v_s) - Source(IRHOW) = rho*(w-w_s) - Source(IRHOE) = 0.5_RP * rho*( POW2(u) + POW2(v) + POW2(w) ) & - -0.5_RP * rho_s*( POW2(u_s) + POW2(v_s) + POW2(w_s) ) -#if defined(SPALARTALMARAS) - Source(IRHOTHETA) = (theta - theta_s) -#endif -#endif - - Source = -1.0_RP/this% penalization(eID) * Source - - end subroutine IBM_SourceTerm - - subroutine IBM_semiImplicitShiftJacobian( this, eID, Q, dt, invdS_dQ ) - use PhysicsStorage - implicit none - !-arguments---------------------------------------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: eID - real(kind=rp), dimension(NCONS), intent(in) :: Q - real(kind=rp), intent(in) :: dt - real(kind=rp), dimension(NCONS,NCONS), intent(inout) :: invdS_dQ - !-local-variables---------------------------------------------------------- - real(kind=rp) :: rho, u, v, w - - invdS_dQ = 0.0_RP - - associate( eta => this% penalization(eID) ) - -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - rho = Q(IRHO) - u = Q(IRHOU)/rho - v = Q(IRHOV)/rho - w = Q(IRHOW)/rho - - invdS_dQ(IRHO,IRHO) = 1.0_RP - invdS_dQ(IRHOU,IRHOU) = eta/( dt + eta ) - invdS_dQ(IRHOV,IRHOV) = eta/( dt + eta ) - invdS_dQ(IRHOW,IRHOW) = eta/( dt + eta ) - invdS_dQ(IRHOE,:) = (/ 0.5_RP*dt/eta * (POW2(u) + POW2(v) + POW2(w)), & - -dt*u/(dt + eta), & - -dt*v/(dt + eta), & - -dt*w/(dt + eta), & - 1.0_RP /) -#endif - - end associate - - end subroutine IBM_SemiImplicitShiftJacobian - - subroutine IBM_semiImplicitJacobian( this, eID, Q, dS_dQ ) - use PhysicsStorage - implicit none - !-arguments---------------------------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: eID - real(kind=rp), dimension(NCONS), intent(in) :: Q - real(kind=rp), dimension(NCONS,NCONS), intent(inout) :: dS_dQ - !-local-variables---------------------------------------------- - real(kind=rp) :: rho, u, v, w - - dS_dQ = 0.0_RP - -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - rho = Q(IRHO) - u = Q(IRHOU)/rho - v = Q(IRHOV)/rho - w = Q(IRHOW)/rho - - dS_dQ(IRHOU,IRHOU) = 1.0_RP - dS_dQ(IRHOV,IRHOV) = 1.0_RP - dS_dQ(IRHOW,IRHOW) = 1.0_RP - dS_dQ(IRHOE,:) = (/ -0.5_RP*( POW2(u) + POW2(v) + POW2(w) ), & - u, v, w, 0.0_RP /) -#endif - - dS_dQ = -1.0_RP/this% penalization(eID) * dS_dQ - - end subroutine IBM_SemiImplicitJacobian - - subroutine IBM_GetSemiImplicitStep( this, eID, dt, Q ) - use PhysicsStorage - implicit none - !-arguments---------------------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: eID - real(kind=rp), intent(in) :: dt - real(kind=rp), dimension(NCONS), intent(inout) :: Q - !-local-variables---------------------------------------- - real(kind=rp), dimension(NCONS,NCONS) :: dS_dQ, invdS_dQ - real(kind=rp), dimension(NCONS) :: IBMSource - - call this% semiImplicitJacobian( eID, Q, dS_dQ ) - call this% semiImplicitShiftJacobian( eID, Q, dt, invdS_dQ ) - - call this% SourceTerm(eID = eID, Q = Q, Source = IBMSource) - - Q = matmul(invdS_dQ, Q + dt*( IBMSource - matmul(dS_dQ,Q) )) - - end subroutine IBM_GetSemiImplicitStep - - subroutine IBM_SetIntegration( this, STLNum ) - use MPI_Process_Info - use MappedGeometryClass - implicit none - !-arguments--------------------------------------------- - class(IBM_type), intent(inout) :: this - integer, intent(in) :: STLNum - !-local-variables--------------------------------------- - real(kind=rp) :: coord, Vertices(NDIM,3), & - T(NDIM) - integer :: i, j, k, axis, & - n_of_Q_points, & - kdtree_n_of_interPoints, & - symPlaneIndex - - if( this% symmetry ) then -!$omp parallel shared(this,STLNum,i) -!$omp do schedule(runtime) private(k,j,coord,axis,Vertices) - do i = 1, size(this% root(STLNum)% ObjectsList) - - this% root(STLNum)% ObjectsList(i)% ComputeIntegrals = .true. - - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(1)% coords, 'global', Vertices(:,1) ) - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(2)% coords, 'global', Vertices(:,2) ) - call OBB(STLNum)% ChangeRefFrame( this% root(STLNum)% ObjectsList(i)% vertices(3)% coords, 'global', Vertices(:,3) ) - - do k = 1, size(this% symPlanes,1) - axis = abs(this% symPlanes(k)) - if( this% symPlanes(k) .lt. 0 .and. this% root(STLNum)% ObjectsList(i)% ComputeIntegrals ) then - coord = minval(this% rootPoints% vertices(axis,:)) - if( Vertices(axis,1) .lt. coord .and. & - Vertices(axis,2) .lt. coord .and. & - Vertices(axis,3) .lt. coord ) then - this% root(STLNum)% ObjectsList(i)% ComputeIntegrals = .false. - else - do j = 1, size(this% root(STLNum)% ObjectsList(i)% vertices) - if( Vertices(axis,j) .lt. coord ) this% root(STLNum)% ObjectsList(i)% vertices(j)% Translate = k - end do - end if - elseif( this% root(STLNum)% ObjectsList(i)% ComputeIntegrals ) then - coord = maxval(this% rootPoints% vertices(axis,:)) - if( Vertices(axis,1) .gt. coord .and. & - Vertices(axis,2) .gt. coord .and. & - Vertices(axis,3) .gt. coord ) then - this% root(STLNum)% ObjectsList(i)% ComputeIntegrals = .false. - else - do j = 1, size(this% root(STLNum)% ObjectsList(i)% vertices) - if( Vertices(axis,j) .gt. coord ) this% root(STLNum)% ObjectsList(i)% vertices(j)% Translate = k - end do - end if - end if - end do - end do -!$omp end do -!$omp end parallel - - do k = 1, size(this% symPlanes,1) - axis = abs(this% symPlanes(k)) - if( this% symPlanes(k) .lt. 0 ) then - coord = minval(this% rootPoints% vertices(axis,:)) - else - coord = maxval(this% rootPoints% vertices(axis,:)) - end if - this% symCoords(k) = coord - end do - end if - - n_of_Q_points = this% Integral(STLNum)% n_of_Q_points - kdtree_n_of_interPoints = this% kdtree_n_of_interPoints - -!$omp parallel shared(this,n_of_Q_points,kdtree_n_of_interPoints,i,STLNum) -!$omp do schedule(runtime) private(Vertices,symPlaneIndex,T,j) - do i = 1, size(this% root(STLNum)% ObjectsList) - if( this% root(STLNum)% ObjectsList(i)% ComputeIntegrals ) then - !if body is moving, we deallocate and reallocate - if( allocated(this% Integral(STLNum)% IntegObjs(i)% PointsIndex) ) deallocate(this% Integral(STLNum)% IntegObjs(i)% PointsIndex) - if( allocated(this% Integral(STLNum)% IntegObjs(i)% x ) ) deallocate(this% Integral(STLNum)% IntegObjs(i)% x) - - allocate( this% Integral(STLNum)% IntegObjs(i)% PointsIndex(kdtree_n_of_interPoints,n_of_Q_points), & - this% Integral(STLNum)% IntegObjs(i)% x(NDIM,n_of_Q_points) ) - - do j = 1, size(this% root(STLNum)% ObjectsList(i)% vertices) - Vertices(:,j) = this% root(STLNum)% ObjectsList(i)% vertices(j)% coords - symPlaneIndex = this% root(STLNum)% ObjectsList(i)% vertices(j)% Translate - if( symPlaneIndex .gt. 0 .and. this% symmetry ) then - call OBB(STLNum)% ChangeRefFrame( Vertices(:,j), 'global', Vertices(:,j) ) - Vertices(abs(this% symPlanes(symPlaneIndex)),j) = this% symCoords( symPlaneIndex ) - call OBB(STLNum)% ChangeRefFrame( Vertices(:,j), 'local', Vertices(:,j) ) - end if - end do - - call this% Integral(STLNum)% GetCoords( Vertices(:,1), Vertices(:,2), Vertices(:,3), i, n_of_Q_points ) - - call vcross( (Vertices(:,3)-Vertices(:,1)), (Vertices(:,2)-Vertices(:,1)), T ) - - this% Integral(STLNum)% IntegObjs(i)% Area = norm2(T) - - end if - end do -!$omp end do -!$omp end parallel - - end subroutine IBM_SetIntegration - - - subroutine IBM_WriteMesh( this, elements, no_of_elements, k ) - use SolutionFile - implicit none - !-arguments---------------------------------------------------- - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(in) :: elements - integer, intent(in) :: no_of_elements, k - !-local-variables---------------------------------------------- - character(len=LINE_LENGTH) :: FinalNameIBM - integer :: fID, eID, position - - write(FinalNameIBM,'(2A,I10.10,A)') trim(this% filename),'_',k,'.hibm' - - call CreateNewIBMmeshFile( this, FinalNameIBM ) - - open(newunit=fid, file='IBM/IBM_'//trim(FinalNameIBM), & - status="old", action="readwrite", form="unformatted" , access="stream" ) - - - read(fID, pos=POS_FILETYPE) - position = POS_FILETYPE - - do eID = 1, no_of_elements - associate( e => elements(eID) ) - position = position + (e% Nxyz(1)+1)*(e% Nxyz(2)+1)*(e% Nxyz(3)+1)*SIZEOF_INT - write(fID,pos=position) e% isInsideBody(0:e% Nxyz(1),0:e% Nxyz(2),0:e% Nxyz(3)) - end associate - end do - - close(fID) - - end subroutine IBM_WriteMesh - - subroutine CreateNewIBMmeshFile( IBM, FinalNameIBM ) - use SolutionFile - implicit none - - type(IBM_type), intent(in) :: IBM - character(len=*), intent(in) :: FinalNameIBM - - integer :: fID - - open(newunit=fID, file='IBM/IBM_'//trim(FinalNameIBM), & - action= "write", status="replace", form="unformatted", access = "stream" ) - - write(fID, POS=POS_FILETYPE) IBM_MESH - - close(fID) - - end subroutine CreateNewIBMmeshFile -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------- -! This subroutine returns true if the point is inside the body. -! ------------------------------------------------------------- - subroutine IBM_CheckPoint( this, x, STLNum, isInsideBody ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------------------------------ - class(IBM_type), intent(inout) :: this - real(kind=rp), dimension(:), intent(in) :: x - integer, intent(in) :: STLNum - logical, intent(inout) :: isInsideBody - !-local-variables------------------------------------------------------------ - type(KDtree), pointer :: tree - real(kind=rp), dimension(NDIM) :: RayDirection, Point, vecAxis - integer :: Axis, NumOfIntersections, minAxis(1) - logical :: Upward, OnSurface - type(IntegerDataLinkedList_t) :: Integer_List - - real(kind=RP) :: EPS = 1.0d-8 - - call OBB(STLNum)% ChangeRefFrame(x, 'local', Point) - - RayDirection = 0.0_RP - - isInsideBody = .false. - OnSurface = .false. - - vecAxis = (/OBB(STLNum)% MBR% Length,OBB(STLNum)% MBR% Width,abs(OBB(STLNum)% nMax) + abs(OBB(STLNum)% nMin)/) - - minAxis = minloc(vecAxis) - axis = minAxis(1) - - if( axis .eq. this% root(STLNum)% maxAxis ) then - axis = axis - 1 - if( axis .eq. 0 ) axis = 3 - end if - - if( Point(axis) .le. 0.0_RP ) then - RayDirection(axis) = -1.0_RP - Upward = .true. - vecAxis = (/ -0.5_RP*OBB(STLNum)% MBR% Length, -0.5_RP*OBB(STLNum)% MBR% Width, & - OBB(STLNum)% nMin /) - else - RayDirection(axis) = 1.0_RP - Upward = .false. - vecAxis = (/ 0.5_RP*OBB(STLNum)% MBR% Length, 0.5_RP*OBB(STLNum)% MBR% Width, & - OBB(STLNum)% nMax /) - end if - - Integer_List = IntegerDataLinkedList_t( .false. ) - - NumOfIntersections = 0 - - do - - call this% root(STLNum)% FindLeaf( Point, tree ) - - call isPointInside( Point, RayDirection, this% root(STLNum)% ObjectsList, tree, Integer_List, NumOfIntersections, OnSurface ) - - if( OnSurface ) exit - - if( Upward ) then - Point(axis) = tree% vertices(axis,1) - EPS - if( Point(axis) .lt. vecAxis(axis) ) exit - elseif( .not. Upward ) then - Point(axis) = tree% vertices(axis,7) + EPS - if( Point(axis) .gt. vecAxis(axis) ) exit - end if - - end do - - if( mod(NumOfIntersections, 2) .eq. 0 ) then !even - isInsideBody = .false. - else - isInsideBody = .true. - end if - - if( OnSurface ) isInsideBody = .true. - - call integer_List% Destruct() - - end subroutine IBM_CheckPoint -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! BODY MOTION -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- - - subroutine IBM_MoveBody( this, elements, no_of_elements, no_of_DoFs, isChild, dt, k, autosave ) - use MPI_Process_Info - implicit none - !-arguments------------------------------ - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, no_of_DoFs, k - logical, intent(in) :: isChild - real(kind=RP), intent(in) :: dt - logical, intent(in) :: autosave - !-local-variables------------------------ - integer :: STLNum, MaskPoints -#ifdef _HAS_MPI_ - integer :: localVal, ierr -#endif - - optional :: k, autosave - - do STLNum = 1, this% NumOfSTL - if( this% stl(STLNum)% move .and. .not. isChild ) then - if( this% stl(STLNum)% motionType .eq. ROTATION ) then - call this% stl(STLNum)% getRotationaMatrix( dt ) - call OBB(STLNum)% STL_rotate(this% stl(STLNum)) - elseif( this% stl(STLNum)% motionType .eq. LINEAR ) then - call this% stl(STLNum)% getDisplacement( dt ) - call OBB(STLNum)% STL_translate(this% stl(STLNum)) - end if - if( .not. isChild .and. present(autosave) .and. autosave ) call this% stl(STLNum)% plot( k ) - call OBB(STLNum)% construct( this% stl(STLNum), this% plotOBB ) - this% root(STLNum)% STLNum = STLNum - call OBB(STLNum)% ChangeObjsRefFrame( this% stl(STLNum)% ObjectsList ) - call this% root(STLNum)% Destruct() - this% plotKDtree = .false. - call this% constructSTL_KDtree( STLNum ) - call this% upDateNormals( STLNum ) - call this% CleanMask( elements, no_of_elements, STLNum ) - elseif( this% stl(STLNum)% move .and. isChild ) then - call this% CleanMask( elements, no_of_elements, STLNum ) - end if - end do - - if( .not. isChild ) then - call this% rootPoints% destruct() - call MPI_Pointpartition_destroy() - end if - - do STLNum = 1, this% NumOfSTL - if( this% stl(STLNum)% move ) then - ! get new mask - call this% GetMask( elements, no_of_elements, no_of_DoFs, STLNum ) - end if - end do - - if( MPI_Process% doMPIAction ) then -#ifdef _HAS_MPI_ - localVal = this% n_of_INpoints - call mpi_allreduce(localVal, MaskPoints, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - else - MaskPoints = this% n_of_INpoints - end if - - if( MaskPoints .eq. 0 ) then - print *, "The mask is made of 0 points." - print *, "Try to increase the polynomial order or refine the mesh." - error stop - end if - - if( .not. isChild .and. .not. this% Wallfunction ) then - call this% constructBandRegion( elements, no_of_elements ) - do STLNum = 1, this% NumOfSTL - call this% SetIntegration( STLNum ) - end do - if( this% Wallfunction ) then -#if defined(NAVIERSTOKES) - call this% GetForcingPointsGeom() - call this% GetImagePoint_nearest() -#endif - end if - if( present(autosave) .and. autosave ) then - call this% WriteMesh( elements, no_of_elements, k ) - end if - end if - - if( this% plotMask .and. .not. isChild ) call this% plot_Mask( elements, no_of_elements, k ) - - end subroutine IBM_MoveBody - - - subroutine IBM_CleanMask( this, elements, no_of_elements, STLNum ) - - implicit none - - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, STLNum - - integer :: eID, i, j, k -!$omp parallel shared(this,elements,no_of_elements,STLNum,eID) -!$omp do schedule(runtime) private(i,j,k) - do eID = 1, no_of_elements - do i = 0, elements(eID)% Nxyz(1); do j = 0, elements(eID)% Nxyz(2); do k = 0, elements(eID)% Nxyz(3) - if( any(elements(eID)% STL(:,i,j,k) .eq. STLNum) .and. elements(eID)% isInsideBody(i,j,k) ) then - elements(eID)% STL(STLNum,i,j,k) = 0 - if(all(elements(eID)% STL(:,i,j,k) .eq. 0)) then - elements(eID)% isInsideBody(i,j,k) = .false. -!$omp critical - this% n_of_INpoints = this% n_of_INpoints - 1 -!$omp end critical - end if - end if - end do; end do; end do - end do -!$omp end do -!$omp end parallel - end subroutine IBM_CleanMask - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine checks if a point intersects one or -! more of the triangles belonging to a box (tree). -! ------------------------------------------------ - subroutine isPointInside( Point, RayDirection, ObjectsList, tree, Integer_List, NumOfIntersections, OnSurface ) - use RealDataLinkedList - use omp_lib - implicit none - !-arguments-------------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point, RayDirection - type(object_type), dimension(:), intent(in) :: ObjectsList - type(KDtree), intent(inout) :: tree - type(IntegerDataLinkedList_t), intent(inout) :: Integer_List - integer, intent(inout) :: NumOfIntersections - logical, intent(inout) :: OnSurface - !-local-variables-------------------------------------------------------- - logical :: Intersect, OnTriBound, found, foundReal - real(kind=rp) :: t - integer :: i - type(RealDataLinkedList_t) :: Real_List - - integer :: index - - if( tree% NumOfObjs .eq. 0 ) then - return - end if - - do i = 1, tree% NumOfObjs - index = tree% ObjsIndeces(i) - found = integer_List% Check( index ) - if( .not. found ) then - call Integer_List% Add( index ) - call PointIntersectTriangle( Point,ObjectsList(index)% vertices(1)% coords, & - ObjectsList(index)% vertices(2)% coords,ObjectsList(index)% vertices(3)% coords, & - RayDirection, Intersect, OnTriBound, t ) - foundReal = Real_List% Check( t ) - - if( Intersect .and. .not. foundReal .and. t .ge. 0.0_RP ) then - call Real_List% append( t ) - NumOfIntersections = NumOfIntersections + 1 - ! If the point is on the triangle - !-------------------------------- - if( almostEqual(t,0.0_RP) ) OnSurface = .true. - end if - - end if - end do - - call Real_List% destruct() - - end subroutine isPointInside -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! --------------------------------------------------------------------- -! This subroutine checks if a ray (RayDirection) starting from a point (Point) intersects -! a triangle in 3D space. If present, the intersection point Q is Q = P + t*RayDirection. -! If there is more than one intersections, the second one is not counted if it has the same t -! as the one previously found. -! See Fast, Minimum Storage Ray/Triangle Intersection, Moller Trumbore -! --------------------------------------------------------------------- - - subroutine PointIntersectTriangle( Point, TriangleVertex1, TriangleVertex2, & - TriangleVertex3, RayDirection, & - Intersect, OnTriBound, t ) - use MappedGeometryClass - implicit none - !-arguments--------------------------------------------------------------------------------------- - real(kind=rp), dimension(NDIM), intent(in) :: Point, RayDirection - real(kind=rp), dimension(NDIM), intent(in) :: TriangleVertex1, TriangleVertex2, TriangleVertex3 - logical, intent(out) :: Intersect, OnTriBound - real(kind=rp), intent(out) :: t - !-local-variables---------------------------------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: E1vec, E2vec, Pvec, Qvec, Tvec, N - real(kind=rp) :: Det, u, v, invDet - logical :: isInside - - Intersect = .false. - OnTriBound = .false. - - E1vec = TriangleVertex2 - TriangleVertex1 - E2vec = TriangleVertex3 - TriangleVertex1 - Tvec = Point - TriangleVertex1 - - call vcross(RayDirection,E2vec,Pvec) - Det = vdot( E1vec, Pvec ) - - If( almostEqual(Det,0.0_RP) ) then - ! If Pvec .ne. (/0,0,0/), then the vector E1vec must lie on the plane made of the 2 vectors RayDirection and E2vec. - ! Thus we have to check if the ray intersects the triangle or not. In the latter case no intersection is detected. In - ! the first case, we have to check whether the point is inside the triangle or not. If it is in the triangle, one intersection - ! will be detected. - !------------------------------------------------------------------------------------------------------------------------------ - call vcross(E1vec, E2vec, N) - Intersect = .false. - - t = -1.0_RP - ! Check if the ray lies in the same plane of the triangle - !-------------------------------------------------------- - if( AlmostEqual(vdot( Tvec, N ), 0.0_RP) ) then - isInside = isPointInsideTri( Point, TriangleVertex1, TriangleVertex2, & - TriangleVertex3 ) - - if( isInside ) t = 0.0_RP - if( isInside ) Intersect = .true. - end if - return - end if - - call vcross(Tvec,E1vec,Qvec) - - invDet = 1.0_RP/Det - - u = vdot( Tvec, Pvec )*invDet - - if( u < 0.0_RP .or. u > 1.0_RP ) return - - v = vdot( RayDirection, Qvec )/Det - - - if( v < 0.0_RP .or. u+v > 1.0_RP ) return - - t = vdot( E2vec, Qvec )*invDet - - ! Check if the point lies on the boundaries of the triangle - !---------------------------------------------------------- - if( almostEqual(u,0.0_RP) .or. almostEqual(v,0.0_RP) .or. & - almostEqual(u+v,1.0_RP) ) OnTriBound = .true. - - Intersect = .true. - - end subroutine PointIntersectTriangle -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function checks if a point is inside a triangle. -! The point and the triangle are on the same plane -! ------------------------------------------------ - logical function isPointInsideTri( Point, TriangleVertex1, TriangleVertex2, & - TriangleVertex3 ) result( isInside ) - use MappedGeometryClass - implicit none - !-arguments----------------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point, TriangleVertex1, & - TriangleVertex2, TriangleVertex3 - !-local-variables----------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: bb, E0, E1, dd - real(kind=rp) :: a, b, c, d, e, f, det, s, t - integer :: region - - isInside = .false. - - bb = TriangleVertex1 - E0 = TriangleVertex1 - TriangleVertex2 - E1 = TriangleVertex1 - TriangleVertex3 - dd = bb - Point - - a = vdot(E0,E0) - b = vdot(E0,E1) - c = vdot(E1,E1) - d = vdot(E0,dd) - e = vdot(E1,dd) - f = vdot(dd,dd) - - det = abs( a*c - b*b) - s = (b*e - c*d)/det - t = (b*d - a*e)/det - - region = FindRegion( det, s, t ) - - if( region .eq. 0 ) isInside = .true. - - end function isPointInsideTri -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function computes the minimum distance from a point to a triangle in 3D. -! for more ditails see https://www.geometrictools.com/Documentation/DistancePoint3Triangle3.pdf -! ------------------------------------------------ - subroutine MinimumPointTriDistance( Point, TriangleVertex1, TriangleVertex2, & - TriangleVertex3, dist, IntersectionPoint ) - use MappedGeometryClass - implicit none - !-arguments----------------------------------------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point, TriangleVertex1, & - TriangleVertex2, & - TriangleVertex3 - real(kind=rp), dimension(NDIM), intent(out) :: IntersectionPoint - real(kind=rp), intent(out) :: dist - !-local-variables----------------------------------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: bb, E0, E1, dd - real(kind=rp) :: a, b, c, d, e, f, det, s, t, sqrDistance - integer :: region - - bb = TriangleVertex1 - E0 = TriangleVertex2 - bb - E1 = TriangleVertex3 - bb - dd = bb - Point - - a = vdot(E0,E0) - b = vdot(E0,E1) - c = vdot(E1,E1) - d = vdot(E0,dd) - e = vdot(E1,dd) - f = vdot(dd,dd) - - det = a*c - b*b - s = b*e - c*d - t = b*d - a*e - - region = FindRegion( det, s, t ) - - sqrDistance = regionSqrDistance( a, b, c, d, e, f, det, s, t, region ) - - !Round-off errors - !---------------- - if (sqrDistance .lt. 0.0_RP) then - sqrDistance = 0.0_RP - end if - - dist = sqrt(sqrDistance) !Can be done later, it's better. - - IntersectionPoint = bb + s*E0 + t*E1 - - end subroutine MinimumPointTriDistance -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! -------------------------------------------------------------------------- -! This function detects the region, see below. -! -------------------------------------------------------------------------- -! \ region2 ^t -! \ | -! \ | -! \ | -! \ | -! \ | -! \ | -! \ | -! \ | -! \| -! * -! |\ P2 -! | \ -! | \ -! | \ -! | \ -! | \ -! | \ -! | \ -! | \ -! region3 | \ region1 -! | \ -! | region0 \ -! | \ -! | \ P1 -! ---------------*--------------*------->s -! |P0 \ -! region4 | region5 \ region6 - - - integer function FindRegion( det, s, t ) result( region ) - implicit none - !-arguments----------------------------------------------------------------------------------------- - real(kind=rp), intent(in) :: det, s, t - - if( (s+t) .le. det ) then - if( s .lt. 0 ) then - if( t .lt. 0 ) then - region = 4 - else - region = 3 - end if - elseif( t .lt. 0 ) then - region = 5 - else - region = 0 - end if - else - if( s .lt. 0 ) then - region = 2 - elseif ( t .lt. 0 ) then - region = 6 - else - region = 1 - end if - end if - - end function FindRegion -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! -------------------------------------------------------------------------- -! This function the square of the distance according to the parameter region. -! -------------------------------------------------------------------------- - real(kind=rp) function regionSqrDistance( a, b, c, d, e, f, det, s, t, region ) result( sqrDistance ) - - implicit none - !-arguments------------------------------------------- - real(kind=rp), intent(in) :: a, b, c, d, e, f, det - real(kind=rp), intent(inout) :: s, t - integer, intent(in) :: region - !-local-variables------------------------------------- - real(kind=rp) :: invDet, numer, denom, tmp1, tmp0 - - select case( region ) - case( 0 ) - invDet = 1.0_RP/det - s = s*invDet - t = t*invDet - sqrDistance = s*(a*s + b*t + 2.0_RP*d) + t*(b*s + c*t + 2.0_RP*e) + f - case( 1 ) - numer = c + e - b - d - if( numer .le. 0.0_RP ) then - s = 0.0_RP; t = 1.0_RP - sqrDistance = c + 2.0_RP*e + f - else - denom = a - 2.0_RP*b + c - if( numer .ge. denom ) then - s = 1.0_RP; t = 0.0_RP - sqrDistance = a + 2.0_RP*d + f - else - s = numer/denom; t = 1.0_RP-s - sqrDistance = s*(a*s + b*t + 2.0_RP*d) + t*(b*s + c*t + 2.0_RP*e) + f - end if - end if - case(2) - tmp0 = b + d - tmp1 = c + e - if( tmp1 .gt. tmp0 ) then - numer = tmp1 - tmp0 - denom = a - 2.0_RP*b + c - if( numer .ge. denom ) then - s = 1.0_RP; t = 0.0_RP - sqrDistance = a + 2.0_RP*d + f - else - s = numer/denom; t = 1-s - sqrDistance = s*(a*s + b*t + 2*d) + t*(b*s + c*t + 2*e) + f - end if - else - s = 0.0_RP - if( tmp1 .le. 0.0_RP ) then - t = 1.0_RP - sqrDistance = c + 2.0_RP*e + f - else - if (e .ge. 0.0_RP ) then - t = 0.0_RP - sqrDistance = f - else - t = -e/c - sqrDistance = e*t + f - end if - end if - end if - case( 3 ) - s = 0.0_RP - if (e .ge. 0.0_RP ) then - sqrDistance = f - else - if (-e .ge. c ) then - sqrDistance = c + 2.0_RP*e +f - else - t = -e/c - sqrDistance = e*t + f - end if - end if - case( 4 ) - if( d .lt. 0.0_RP ) then - t = 0.0_RP - if( -d .ge. a ) then - s = 1.0_RP - sqrDistance = a + 2.0_RP*d + f - else - s = -d/a - sqrDistance = d*s + f - end if - else - s = 0.0_RP - if( e .ge. 0.0_RP ) then - sqrDistance = f - else - if( -e .ge. c) then - sqrDistance = c + 2.0_RP*e + f - else - t = -e/c - sqrDistance = e*t + f - end if - end if - end if - case( 5 ) - t = 0.0_RP - if( d .ge. 0.0_RP ) then - s = 0.0_RP - sqrDistance = f - else - if (-d .ge. a) then - s = 1.0_RP - sqrDistance = a + 2.0_RP*d + f - else - s = -d/a - sqrDistance = d*s + f - end if - end if - case( 6 ) - tmp0 = b + e - tmp1 = a + d - if (tmp1 .gt. tmp0) then - numer = tmp1 - tmp0 - denom = a-2.0_RP*b+c - if (numer .ge. denom) then - t = 1.0_RP; s = 0.0_RP - sqrDistance = c + 2.0_RP*e + f - else - t = numer/denom; s = 1.0_RP - t - sqrDistance = s*(a*s + b*t + 2.0_RP*d) + t*(b*s + c*t + 2.0_RP*e) + f - end if - else - t = 0.0_RP - if (tmp1 .le. 0.0_RP) then - s = 1.0_RP - sqrDistance = a + 2.0_RP*d + f; - else - if (d .ge. 0.0_RP) then - s = 0.0_RP - sqrDistance = f - else - s = -d/a - sqrDistance = d*s + f - end if - end if - end if - end select - - end function regionSqrDistance - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the minimum distance from x (global ref. frame) to the body. First, -! the box (tree) where x lies is found, then the min distance between the objects inside the tree and -! the point is computed. If the sphere whose radius is minDist, is enclosed in the box, the subroutine stops. -! If the latter condition is not true, all the boxes that intersects the sphere are checked in the same way as -! the initial one, getting new_minDist. If a lower distance is found, minDist is updated. -! ------------------------------------------------ - - subroutine MinimumDistance( Point, root, minDist, normal ) - - implicit none - !-arguments--------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), intent(inout) :: root - real(kind=rp), intent(inout) :: minDist - real(kind=rp), dimension(:), intent(inout) :: normal - !-local-variables--------------------------------------- - real(kind=rp), dimension(NDIM) :: IntersPoint, new_IntersPoint, & - dsvec, IntersectionPoint, x - logical :: Inside - type(KDtree), pointer :: tree, parent - real(kind=rp) :: Dist, New_minDist, Radius, ds - integer :: i, index - - minDist = huge(1.0_RP) - - call root% FindLeaf( Point, tree ) - - do i = 1, tree% NumOfObjs - index = tree% ObjsIndeces(i) - call MinimumPointTriDistance( Point, root% ObjectsList(index)% vertices(1)% coords, & - root% ObjectsList(index)% vertices(2)% coords, & - root% ObjectsList(index)% vertices(3)% coords, Dist, & - IntersPoint ) - if( Dist .lt. minDist ) then - minDist = Dist - IntersectionPoint = IntersPoint - end if - end do - - if( tree% NumOfObjs .gt. 0 ) then - ! Check the sphere - !----------------- - Radius = sqrt(minDist) - Inside = CheckHypersphere( tree, Point, Radius ) - else - parent => tree% parent - dsvec(1) = abs(parent% vertices(1,7)-parent% vertices(1,1)) - dsvec(2) = abs(parent% vertices(2,7)-parent% vertices(2,1)) - dsvec(3) = abs(parent% vertices(3,7)-parent% vertices(3,1)) - ds = maxval(dsvec) - Radius = ds - Inside = .true. - nullify(parent) - end if - - nullify(tree) - - if( Inside ) then - New_minDist = huge(1.0_RP) - call MinimumDistOtherBoxes( Point, root, root, Radius, New_minDist, New_IntersPoint ) - if( New_minDist .lt. minDist ) then - minDist = New_minDist - IntersectionPoint = New_IntersPoint - end if - end if - - call OBB(root% STLNum)% ChangeRefFrame( Point, 'global', x ) - call OBB(root% STLNum)% ChangeRefFrame( IntersectionPoint, 'global', IntersectionPoint ) - - normal = x - IntersectionPoint - normal = normal/norm2(normal) - - end subroutine MinimumDistance - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes New_minDist -! ------------------------------------------------ - recursive subroutine MinimumDistOtherBoxes( Point, root, tree, Radius, New_minDist, New_IntersPoint ) - - implicit none - !-arguments---------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), intent(in) :: root - type(KDtree), intent(inout) :: tree - real(kind=rp), intent(in) :: Radius - real(kind=rp), intent(inout) :: New_minDist - real(kind=rp), dimension(:), intent(inout) :: New_IntersPoint - !-local-variables--------------------------------------------------- - real(kind=rp) :: Dist - logical :: Intersect - real(kind=rp), dimension(NDIM) :: IntersPoint - integer :: i, index - - Intersect = BoxIntersectSphere( Radius, Point, tree% vertices ) - - if( Intersect ) then - if( tree% isLast ) then - do i = 1, tree% NumOfObjs - index = tree% ObjsIndeces(i) - call MinimumPointTriDistance( Point, root% ObjectsList(index)% vertices(1)% coords, & - root% ObjectsList(index)% vertices(2)% coords, & - root% ObjectsList(index)% vertices(3)% coords, Dist, & - IntersPoint ) - if( Dist .lt. New_minDist ) then - New_minDist = Dist - New_IntersPoint = IntersPoint - end if - end do - else - call MinimumDistOtherBoxes( Point, root, tree% child_L, & - Radius, New_minDist, & - New_IntersPoint ) - call MinimumDistOtherBoxes( Point, root, tree% child_R, & - Radius, New_minDist, & - New_IntersPoint ) - end if - end if - - end subroutine MinimumDistOtherBoxes -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! --------------------------------------------------------------------------------------------------- -! This subroutine checks if a sphere with radius minDist is inside the box or not. If it's not -! a/ circle/s is/are computed. Each circle is the base of a cylinder used to find possible boxes that -! can intersect the sphere. -! --------------------------------------------------------------------------------------------------- - - logical function CheckHypersphere( tree, Point, minDist) result( Inside ) - - implicit none - !-arguments----------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), target, intent(inout) :: tree - real(kind=rp), intent(inout) :: minDist - - Inside = BoxIntersectSphere( minDist, Point, tree% vertices ) - - end function CheckHypersphere -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! --------------------------------------------------------- -! This function gives true if a circle interscts a rectangle -! --------------------------------------------------------- - - logical function CircleRectIntersection( RectLength, RectWidth, RectCenter, & - Center, Radius ) result( Intersect ) - - implicit none - !-arguments--------------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: RectCenter, Center - real(kind=rp), intent(in) :: RectLength, RectWidth, Radius - !-local-variables--------------------------------------------------------- - real(kind=rp), dimension(2) :: d - - Intersect = .false. - - d = Center - RectCenter - - If( abs(d(1)) .gt. 0.5_RP*RectLength + Radius ) return - If( abs(d(2)) .gt. 0.5_RP*RectWidth + Radius ) return - - if( abs(d(1)) .le. 0.5_RP*RectLength .and. & - abs(d(2)) .le. 0.5_RP*RectWidth ) then - Intersect = .true. - return - end if - - if( POW2(abs(d(1)) - 0.5_RP*RectLength) + POW2(abs(d(2)) - 0.5_RP*RectWidth) .le. & - POW2(Radius) ) Intersect = .true. - - end function CircleRectIntersection -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function computes the distance between a point and a box -! ------------------------------------------------ - - real(kind=rp) function PointBoxDistance( Point, vertices ) result( sqrDist ) - - implicit none - !-arguments-------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - real(kind=rp), dimension(:,:), intent(in) :: vertices - !-local-variables-------------------------------------- - integer, dimension(NDIM) :: ind - real(kind=rp) :: v - integer :: i - - sqrDist = 0.0_RP - - ind(1) = 2 ! x-axis - ind(2) = 4 ! y-axis - ind(3) = 5 ! z-axis - - ! if the point's x-coordinate (xp) is less than the x-min coord. of the box, then - ! the minimum distance on the x-dir is the distance between the xp and x-min, or - ! vertices(i,1) - x-coordinate. The following loop avoids the computation of the point - ! with the minimum distance from P. If the point P is inside the box, sqrDist = 0. - !-------------------------------------------------------------------------------------- - do i = 1, NDIM - v = Point(i) - if( v .lt. vertices(i,1) ) sqrDist = sqrDist + (vertices(i,1)-v)*(vertices(i,1)-v) - if( v .gt. vertices(i,ind(i)) ) sqrDist = sqrDist + (v-vertices(i,ind(i)))*(v-vertices(i,ind(i))) - end do - - end function PointBoxDistance -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function checks if a sphere intersects a box -! ------------------------------------------------ - - logical function BoxIntersectSphere( Radius, Center, vertices ) result( Intersect ) - - implicit none - !-arguments------------------------------------------- - real(kind=rp), dimension(:,:), intent(in) :: vertices - real(kind=rp), dimension(:), intent(in) :: Center - real(kind=rp), intent(in) :: Radius - !-local-variables------------------------------------- - real(kind=rp) :: sqrDist - - Intersect = .false. - sqrDist = PointBoxDistance( Center, vertices ) - - if( sqrDist .le. POW2(Radius) ) Intersect = .true. - - end function BoxIntersectSphere - - - subroutine MinimumDistancePoints( Point, root, minDist, LowerBound, actualIndex, PointsIndex, forcingPointsMask ) - - implicit none - !-arguments------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), intent(inout) :: root - real(kind=rp), intent(inout) :: minDist, LowerBound - integer, intent(in) :: actualIndex - integer, dimension(:), intent(inout) :: PointsIndex - logical, intent(in) :: forcingPointsMask - !-local-variables------------------------------------------------- - real(kind=rp), dimension(NDIM) :: BandPoint, dsvec - logical :: Inside, found, FPmask - type(KDtree), pointer :: tree, parent - real(kind=rp) :: sqrDist, New_minsqrDist, Radius, ds - integer :: i, LeafIndex, temp_index - - optional :: forcingPointsMask - - ! ref frame = global - - minDist = huge(1.0_RP) - - call root% FindLeaf( Point, tree ) - - LeafIndex = tree% index - - do i = 1, tree% NumOfObjs - - if( present(forcingPointsMask) .and. forcingPointsMask ) then - if( BandPoints_ALL% x(tree% ObjsIndeces(i))% forcingPoint ) cycle - end if - - BandPoint = BandPoints_ALL% x(tree% ObjsIndeces(i))% coords - - sqrDist = POW2(norm2(Point - BandPoint)) - - if( sqrDist .lt. minDist .and. sqrDist .gt. LowerBound .or. & - AlmostEqual(sqrDist, LowerBound) ) then - - found = .false. - if( any(PointsIndex .eq. tree% ObjsIndeces(i)) )then - found = .true. - end if - - if( .not. found ) then - minDist = sqrDist - PointsIndex(actualIndex) = tree% ObjsIndeces(i) - end if - - end if - - end do - - if( tree% NumOfObjs .gt. 0 ) then - ! Check the sphere - !----------------- - Radius = sqrt(minDist) - Inside = CheckHypersphere( tree, Point, Radius ) - else - parent => tree% parent - dsvec(1) = abs(parent% vertices(1,7)-parent% vertices(1,1)) - dsvec(2) = abs(parent% vertices(2,7)-parent% vertices(2,1)) - dsvec(3) = abs(parent% vertices(3,7)-parent% vertices(3,1)) - ds = maxval(dsvec) - Radius = ds - Inside = .true. - nullify(parent) - end if - - nullify(tree) - - if( present(forcingPointsMask) ) then - FPmask = forcingPointsMask - else - FPmask = .false. - end if - - if( Inside ) then - New_minsqrDist = huge(1.0_RP) - call MinimumDistOtherBoxesPoints( Point, root, Radius, New_minsqrDist, & - LowerBound, PointsIndex, LeafIndex, & - temp_index, FPmask ) - if( New_minsqrDist .le. minDist ) then - minDist = New_minsqrDist; PointsIndex(actualIndex) = temp_index - end if - end if - - minDist = sqrt(minDist) - - end subroutine MinimumDistancePoints - - recursive subroutine MinimumDistOtherBoxesPoints( Point, tree, Radius, New_minsqrDist, & - LowerBound, PointsIndex, LeafIndex, & - temp_index, forcingPointsMask ) - - implicit none - !-arguments---------------------------------------------------------- - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), intent(inout) :: tree - real(kind=rp), intent(in) :: Radius, LowerBound - real(kind=rp), intent(inout) :: New_minsqrDist - integer, intent(inout) :: temp_index - integer, dimension(:), intent(in) :: PointsIndex - integer, intent(in) :: LeafIndex - logical, intent(in) :: forcingPointsMask - !-local-variables--------------------------------------------------- - real(kind=rp) :: sqrDist, BandPoint(NDIM) - logical :: Intersect, found - integer :: i - - Intersect = BoxIntersectSphere( Radius, Point, tree% vertices ) - - if( Intersect ) then - if( tree% isLast ) then - if( tree% index .ne. LeafIndex ) then - do i = 1, tree% NumOfObjs - - if( forcingPointsMask ) then - if( BandPoints_ALL% x(tree% ObjsIndeces(i))% forcingPoint ) cycle - end if - - BandPoint = BandPoints_ALL% x(tree% ObjsIndeces(i))% coords - - sqrDist = POW2(norm2(Point - BandPoint)) - - if( sqrDist .lt. New_minsqrDist .and. sqrDist .gt. LowerBound .or. & - AlmostEqual(sqrDist, LowerBound) )then - - found = .false. - if( any(PointsIndex .eq. tree% ObjsIndeces(i)) ) then - found = .true. - end if - - if( .not. found ) then - New_minsqrDist = sqrDist - temp_index = tree% ObjsIndeces(i) - end if - - end if - end do - end if - else - call MinimumDistOtherBoxesPoints( Point, tree% child_L, Radius, & - New_minsqrDist, LowerBound, & - PointsIndex, LeafIndex, & - temp_index, forcingPointsMask ) - call MinimumDistOtherBoxesPoints( Point, tree% child_R, Radius, & - New_minsqrDist, LowerBound, & - PointsIndex, LeafIndex, & - temp_index, forcingPointsMask ) - end if - end if - - end subroutine MinimumDistOtherBoxesPoints -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! --------------------- -! TURBULENCE -! --------------------- -! -!///////////////////////////////////////////////////////////////////////////////////////////// - - subroutine GetIDW_value( Point, normal, Q, PointsIndex, value ) - use PhysicsStorage - use MappedGeometryClass - implicit none - !-arguments--------------------------------------------------------- - real(kind=RP), dimension(:), intent(in) :: Point, normal - real(kind=RP), dimension(:,:), intent(in) :: Q - integer, dimension(:), intent(in) :: PointsIndex - real(kind=RP), dimension(NCONS), intent(out) :: value - !-local-variables--------------------------------------------------- - real(kind=RP) :: DistanceNormal(NDIM), d2, d1, distanceSqr, sqrd1, & - num(NCONS), den - integer :: i, k - - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) - - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do - - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) - - num = num + Q(:,i)/d1 - den = den + 1.0_RP/d1 - - end do - - value = num/den - - end subroutine GetIDW_value -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! TURBULENCE -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -#if defined(NAVIERSTOKES) -! ------------------------------------------------- -! This subroutine performs iterations so that the -! forcing point lies inside the log region -! ------------------------------------------------ - - subroutine IBM_GetImagePoint_nearest( this ) - use WallFunctionDefinitions - use WallFunctionBC - use MappedGeometryClass - use PhysicsStorage - use MPI_Process_Info - implicit none - !-arguments--------------------------------------------------------------------------- - class(IBM_type), intent(inout) :: this - !-local-variables---------------------------------------------------------------------- - real(kind=RP) :: Dist, LowerBound - integer :: i, k - - if( allocated(this% ImagePoint_NearestPoints) ) deallocate(this% ImagePoint_NearestPoints) - allocate(this% ImagePoint_NearestPoints(this% KDtree_n_of_interPoints,BandPoints_ALL% NumOfObjs)) - - this% ImagePoint_NearestPoints = 0 - - if( MPI_Process% isRoot ) then -!$omp parallel shared(i) -!$omp do schedule(runtime) private(k,Dist,LowerBound) - do i = 1, BandPoints_ALL% NumOfObjs - if( .not. BandPoints_ALL% x(i)% forcingPoint ) cycle - LowerBound = -huge(1.0_RP) - do k = 1, this% KDtree_n_of_interPoints - call MinimumDistancePoints( BandPoints_ALL% x(i)% ImagePoint_coords, this% rootPoints, & - Dist, LowerBound, k, this% ImagePoint_NearestPoints(:,i), & - .true. ) - LowerBound = POW2(Dist) - end do - end do -!$omp end do -!$omp end parallel - end if - - call recvIP_NearestPoints( this% ImagePoint_NearestPoints ) - call sendIP_NearestPoints( this% ImagePoint_NearestPoints ) - - end subroutine IBM_GetImagePoint_nearest - - - subroutine IBM_SourceTermTurbulence( this, elements ) - use PhysicsStorage - use VariableConversion - use WallFunctionBC - implicit none - !-arguments-------------------------------------------------- - class(IBM_type), intent(inout) :: this - type(element), dimension(:), intent(inout) :: elements - !-local-variables-------------------------------------------- - real(kind=rp), allocatable :: bpQ(:,:) - real(kind=rp) :: Q(NCONS), Q_target(NCONS), nu, & - mu, T, u_tau, uIP_t, uIP_n, y_IP, & - uFC_t, uFC_n, uFC(NDIM), & - Source(NCONS), tangent(NDIM), & - VIP_t(NDIM) - real(kind=rp), parameter :: EPS = 1.0d-12 - integer :: n, i - - allocate( bpQ(NCONS,BandPoints_ALL% NumOfObjs) ) - - call this% BandPoint_state( elements, bpQ ) - - do i = 1, BandPoints_ALL% NumOfObjs - - if( .not. BandPoints_ALL% x(i)% forcingPoint ) cycle - - if( BandPoints_ALL% x(i)% partition .eq. MPI_Process% rank ) then - - associate( y_FC => BandPoints_ALL% x(i)% Dist, & - IP_NearestPoints => this% ImagePoint_NearestPoints(:,i), & - normal => BandPoints_ALL% x(i)% normal, & - eID => BandPoints_ALL% x(i)% element_index, & - loc_pos => BandPoints_ALL% x(i)% local_Position ) - - do n = 1, NCONS - Q(n) = sum(bpQ(n,IP_NearestPoints)) - end do - - Q = Q/this% KDtree_n_of_interPoints -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - T = Temperature(Q) - mu = SutherlandsLaw(T) - - nu = mu/Q(IRHO) - - uIP_n = Q(IRHOU)*normal(1)+Q(IRHOV)*normal(2)+Q(IRHOW)*normal(3) - - VIP_t = Q(IRHOU:IRHOW) - uIP_n*normal - - uIP_t = norm2(VIP_t) - - y_IP = y_FC + norm2(BandPoints_ALL% x(i)% ImagePoint_coords - BandPoints_ALL% x(i)% coords) - - u_tau = u_tau_f(uIP_t,y_IP,nu, u_tau0=1.0_RP) - - uFC_t = u_plus_f( y_plus_f( y_IP, u_tau, nu ) ) * u_tau - uFC_n = uIP_n * y_FC/y_IP - - tangent = VIP_t/(uIP_t+EPS) - - uFC = uFC_t*tangent + uFC_n*normal - - Q_target = elements(eID)% storage% Q(:,loc_pos(1),loc_pos(2),loc_pos(3)) - Q_target(IRHOU) = Q_target(IRHO) * uFC(1) - Q_target(IRHOV) = Q_target(IRHO) * uFC(2) - Q_target(IRHOW) = Q_target(IRHO) * uFC(3) - - call this% SourceTerm( eID, elements(eID)% storage% Q(:,loc_pos(1),loc_pos(2),loc_pos(3)), Q_target, Source ) -#endif - elements(eID)% storage% QDot(:,loc_pos(1),loc_pos(2),loc_pos(3)) = & - elements(eID)% storage% QDot(:,loc_pos(1),loc_pos(2),loc_pos(3)) + Source - - end associate - - end if - - end do - - deallocate(bpQ) - - end subroutine IBM_SourceTermTurbulence - -! estimate the y_plus for a flat plate - - real(kind=RP) function InitializeDistance( y_plus ) result( y ) - use FluidData - implicit none - !-arguments - real(kind=rp), intent(in) :: y_plus - !-local-varirables------------------------- - real(kind=RP) :: nu, u_tau -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - nu = refValues% mu / refValues% rho -#endif - u_tau = Estimate_u_tau( ) - - y = GetEstimated_y( y_plus, nu, u_tau ) - - end function InitializeDistance - - real(kind=RP) function Estimate_Cf() result( Cf ) - use FluidData - implicit none -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - ! Schlichting, Hermann (1979), Boundary Layer Theory... ok if Re < 10^9 - Cf = (2.0_RP*log10(dimensionless% Re) - 0.65_RP)**(-2.3_RP) -#endif - end function Estimate_Cf - - real(kind=RP) function Estimate_u_tau( ) result( u_tau ) - use FluidData - implicit none - !-local-variables-------------------------------- - real(kind=RP) :: Cf - - Cf = Estimate_Cf() -#if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) - u_tau = sqrt( 0.5_RP * POW2(refValues% V) * Cf ) !sqrt(tau_w/rho) -#endif - end function Estimate_u_tau - - - real(kind=RP) function GetEstimated_y( y_plus, nu, u_tau ) result( y ) - use PhysicsStorage - implicit none - !-arguments-------------------------------------- - real(kind=RP), intent(in) :: y_plus, nu, u_tau - - y = y_plus * nu / u_tau - - y = y/Lref - - end function GetEstimated_y -#endif - -end module IBMClass - +#include "Includes.h" +module IBMClass + + use SMConstants + use Utilities + use FTValueDictionaryClass + use ElementClass + use FaceClass + use TessellationTypes + use OrientedBoundingBox + use KDClass + use IntegerDataLinkedList + use MPI_IBMUtilities +#ifdef _HAS_MPI_ + use mpi +#endif + implicit none + + type :: Integral_t + + logical :: ListComputed = .false., & + compute = .false., & + constructed = .false. + end type + + type IBM_type + + type(STLfile), allocatable :: stl(:) + type(KDtree), allocatable :: root(:), rootDistance(:), rootPoints(:) + type(PointLinkedList) :: BandPoints + type(IBMpoints), allocatable :: BandRegion(:), BandRegion4Distance(:) + type(point_type), allocatable :: ImagePoints(:) + type(Integral_t), allocatable :: Integral(:) + character(len=LINE_LENGTH), allocatable :: STLfilename(:) + character(len=LINE_LENGTH) :: filename + logical :: plotOBB = .false., & + plotKDtree = .false., & + active = .false., & + TimePenal = .false., & + semiImplicit = .false., & + ComputeBandRegion = .false., & + plotBandPoints = .false., & + plotMask = .false., & + ComputeInterpolation = .false., & + Wallfunction = .false., & + ComputeDistance = .false., & + AAB = .false. + real(kind=rp) :: eta, BandRegionCoeff, IP_Distance = 0.0_RP, & + y_plus_target, minCOORDS, maxCOORDS, & + penalCoeff + real(kind=rp), allocatable :: penalization(:) + integer :: KDtree_Min_n_of_Objs, NumOfInterPoints, & + n_of_INpoints, rank, lvl = 0, NumOfSTL, & + NumOfForcingPoints, Clipaxis = 0, & + Nx, Ny, Nz, LocClipAxis = 0, & + InterpolationType + integer, allocatable :: ImagePoint_NearestPoints(:,:) + + contains + procedure :: read_info => IBM_read_info + procedure :: construct => IBM_construct + procedure :: constructMask => IBM_constructMask + procedure :: constructSTL_KDtree => IBM_constructSTL_KDtree + procedure :: CheckPoint => IBM_checkPoint + procedure :: constructBandRegion => IBM_constructBandRegion + procedure :: constructBandRegion4Distance => IBM_constructBandRegion4Distance + procedure :: build => IBM_build + procedure :: SetPolynomialOrder => IBM_SetPolynomialOrder + procedure :: GetMask => IBM_GetMask + procedure :: MPI_sendOBB => IBM_MPI_sendOBB + procedure :: MPI_sendSTLpartitions => IBM_MPI_sendSTLpartitions + procedure :: MPI_sendMask2Root => IBM_MPI_sendMask2Root + procedure :: MPI_sendMask2Partitions => IBM_MPI_sendMask2Partitions + procedure :: MPI_sendNormals2Root => IBM_MPI_sendNormals2Root + procedure :: MPI_sendDistNormals2partitions => IBM_MPI_sendDistNormals2partitions + procedure :: BandRegionPoints => IBM_bandRegionPoints + procedure :: GetForcingPointsGeom => IBM_GetForcingPointsGeom + procedure :: GetInfo => IBM_GetInfo + procedure :: SourceTerm => IBM_SourceTerm + procedure :: ComputeIBMWallDistance => IBM_ComputeIBMWallDistance + procedure :: GetDistanceInsideBox => IBM_GetDistanceInsideBox + procedure :: GetDistanceOutsideBox => IBM_GetDistanceOutsideBox + procedure :: SemiImplicitCorrection => IBM_SemiImplicitCorrection + procedure :: GetImagePoint_nearest => IBM_GetImagePoint_nearest + procedure :: GetBandRegionStates => IBM_GetBandRegionStates + procedure :: GetDomainExtreme => IBM_GetDomainExtreme + procedure :: ImagePointsElement => IBM_ImagePointsElement + procedure :: SourceTermTurbulence => IBM_SourceTermTurbulence + procedure :: semiImplicitShiftJacobian => IBM_semiImplicitShiftJacobian + procedure :: semiImplicitTurbulenceShiftJacobian => IBM_semiImplicitTurbulenceShiftJacobian + procedure :: semiImplicitJacobian => IBM_semiImplicitJacobian + procedure :: semiImplicitTurbulenceJacobian => IBM_semiImplicitTurbulenceJacobian + procedure :: GetSemiImplicitStep => IBM_GetSemiImplicitStep + procedure :: GetSemiImplicitStepTurbulence => IBM_GetSemiImplicitStepTurbulence + procedure :: SetIntegration => IBM_SetIntegration + procedure :: copy => IBM_copy + procedure :: MoveBody => IBM_MoveBody + procedure :: CleanMask => IBM_CleanMask + procedure :: BandPoint_state => IBM_BandPoint_state + procedure :: Describe => IBM_Describe + procedure :: plot_Mask => IBM_plot_Mask + procedure :: Destruct => IBM_Destruct + procedure :: DestroyKDtree => IBM_DestroyKDtree + procedure :: constructDistance_KDtree => IBM_constructDistance_KDtree + procedure :: MPI_PointsListOperations => IBM_MPI_PointsListOperations + end type + + public :: expCoeff, EXPONENTIAL + + real(kind=RP) :: expCoeff + integer, parameter :: EXPONENTIAL = 1, IDW = 2 + + contains +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! Immersed boundary info +! ------------------------------------------------- + subroutine IBM_read_info( this, controlVariables ) + use FileReadingUtilities + implicit none + + class(IBM_type), intent(inout) :: this + class(FTValueDictionary) :: controlVariables + + call this% GetInfo( controlVariables ) + + end subroutine IBM_read_info + + + subroutine IBM_GetInfo( this, controlVariables ) + use FileReadingUtilities +#if defined(NAVIERSTOKES) + use WallFunctionDefinitions +#endif + implicit none + !-arguments---------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + class(FTValueDictionary) :: controlVariables + !-local-variables---------------------------------------------------------- + logical, allocatable :: active_in, plotOBB_in, & + plotKDtree_in, semiImplicit_in, & + plotBandPoints_in, plotMask_in, & + BandRegion_in, Distance_in, AAB_in + real(kind=rp), allocatable :: penalization_in, y_plus_target_in, & + BandRegionCoeff_in, & + penalization_coeff_in + integer, allocatable :: n_of_Objs_in, n_of_interpoints_in, & + Nx_in, Ny_in, Nz_in, Clipaxis_in + character(len=LINE_LENGTH) :: in_label, paramFile, name_in, tmp, & + InterpolationType_in + real(kind=rp), allocatable :: coords(:) + logical :: correct + + character(len=LINE_LENGTH), parameter :: NumberOfSTL = "number of stl" + +! Read block +! ********** + write(in_label , '(A)') "#define ibm" + call get_command_argument(1, paramFile) + call readValueInRegion( trim( paramFile ), "name", name_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "active", active_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "penalization", penalization_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "penalization coeff", penalization_coeff_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "semi implicit", semiImplicit_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "nx", Nx_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "ny", Ny_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "nz", Nz_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "target y plus", y_plus_target_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "number of objects", n_of_Objs_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "number of interpolation points", n_of_interpoints_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "clip axis", Clipaxis_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "band region", BandRegion_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "distance", Distance_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "band region coeff", BandRegionCoeff_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "aab", AAB_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "intepolation", InterpolationType_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "plot obb", plotOBB_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "plot kdtree" , plotKDtree_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "plot mask", plotMask_in, in_label, "#end" ) + call readValueInRegion( trim( paramFile ), "plot band points", plotBandPoints_in, in_label, "#end" ) + + this% filename = trim(name_in) + + if( allocated(active_in) ) then + this% active = active_in + else + this% active = .FALSE. + end if + + if( .not. this% active) return + + if( allocated(semiImplicit_in) ) then + this% semiImplicit = semiImplicit_in + else + this% semiImplicit = .FALSE. + end if + + if( allocated(Nx_in) ) then + this% Nx = Nx_in + else + this% Nx = 0 + end if + + if( allocated(Ny_in) ) then + this% Ny = Ny_in + else + this% Ny = 0 + end if + + if( allocated(Nz_in) ) then + this% Nz = Nz_in + else + this% Nz = 0 + end if + + if( allocated(plotOBB_in) ) then + this% plotOBB = plotOBB_in + else + this% plotOBB = .FALSE. + end if + + if( allocated(plotKDtree_in) ) then + this% plotKDtree = plotKDtree_in + else + this% plotKDtree = .FALSE. + end if + + if( allocated(penalization_in) ) then + this% eta = penalization_in + this% TimePenal = .false. + else + this% eta = 0.1_RP + this% TimePenal = .true. + end if + + if( allocated(penalization_coeff_in) ) then + this% penalCoeff = penalization_coeff_in + else + this% penalCoeff = 1.0_RP + end if + + if( allocated(n_of_Objs_in) ) then + this% KDtree_Min_n_of_Objs = n_of_Objs_in + else + this% KDtree_Min_n_of_Objs = 5 + end if + + if( allocated(n_of_interpoints_in) ) then + this% NumOfInterPoints = n_of_interpoints_in + else + this% NumOfInterPoints = 15 + end if + + if( allocated(plotBandPoints_in) ) then + this% plotBandPoints = plotBandPoints_in + else + this% plotBandPoints = .false. + end if + + if( allocated(plotMask_in) ) then + this% plotMask = plotMask_in + else + this% plotMask = .false. + end if + + if( allocated(BandRegion_in) ) then + this% ComputeBandRegion = BandRegion_in + else + this% ComputeBandRegion = .false. + end if + + if( allocated(Distance_in) ) then + this% ComputeDistance = Distance_in + else + this% ComputeDistance = .false. + end if + + if( allocated(Clipaxis_in) ) then + this% ClipAxis = Clipaxis_in + else + this% ClipAxis = 0 + endif + + if( controlVariables% containsKey("wall function") ) then + this% Wallfunction = .true. +#if defined(NAVIERSTOKES) + call Initialize_Wall_Function(controlVariables, correct) !TO BE REMOVED +#endif + if( allocated(y_plus_target_in) ) then + this% y_plus_target = y_plus_target_in + else + this% y_plus_target = 50.0_RP + end if + + this% ComputeBandRegion = .true. + this% ComputeDistance = .true. + + else + this% Wallfunction = .false. + end if + + if( allocated(BandRegionCoeff_in) ) then + this% BandRegionCoeff = BandRegionCoeff_in + else + this% BandRegionCoeff = 2.0_RP + end if + + if( controlVariables% containsKey(trim(NumberOfSTL)) ) then + tmp = controlVariables% StringValueForKey(trim(NumberOfSTL),LINE_LENGTH) + this% NumOfSTL = GetIntValue(tmp) + else + this% NumOfSTL = 1 + end if + + if( allocated(AAB_in) ) then + this% AAB = AAB_in + else + this% AAB = .false. + end if + + select case(trim(InterpolationType_in)) + case("exp") + this% InterpolationType = EXPONENTIAL + case("idw") + this% InterpolationType = IDW + case default + this% InterpolationType = IDW + end select + + end subroutine IBM_GetInfo +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! KDtree procedures +! ------------------------------------------------- + subroutine IBM_construct( this, controlVariables ) + use mainKeywordsModule + use FileReadingUtilities + use MPI_Process_Info + implicit none + !-arguments---------------------------------------- + class(IBM_type), intent(inout) :: this + class(FTValueDictionary) :: controlVariables + !-local-variables---------------------------------- + character(len=LINE_LENGTH) :: filename, MyString + real(kind=RP) :: axis(NDIM) + integer :: STLNum, j, k + + call this% describe() + + allocate( this% stl(this% NumOfSTL), & + OBB(this% NumOfSTL), & + this% root(this% NumOfSTL), & + this% integral(this% NumOfSTL), & + this% STLfilename(this% NumOfSTL) ) + + if( this% ComputeBandRegion ) then + allocate( this% rootPoints(this% NumOfSTL), & + this% BandRegion(this% NumOfSTL) ) + end if + + if( this% ComputeDistance ) allocate(this% rootDistance(this% NumOfSTL)) + + do STLNum = 1, this% NumOfSTL + write(MyString, '(i100)') STLNum + if( STLNum .eq. 1 ) then + filename = stlFileNameKey + else + filename = trim(stlFileNameKey)//trim(adjustl(MyString)) + end if + this% STLfilename(STLNum) = controlVariables% stringValueForKey(trim(filename), requestedLength = LINE_LENGTH) + OBB(STLNum)% filename = this% STLfilename(STLNum) + call STLfile_GetMotionInfo( this% stl(STLNum), this% STLfilename(STLNum), this% NumOfSTL ) + if( MPI_Process% isRoot ) then + this% stl(STLNum)% show = .true. + call this% stl(STLNum)% ReadTessellation( this% STLfilename(STLNum) ) + if( this% ClipAxis .ne. 0 ) call this% stl(STLNum)% Clip( this% minCOORDS, this% maxCOORDS, this% ClipAxis ) + call OBB(STLNum)% construct( this% stl(STLNum), this% plotOBB, this% AAB ) + call OBB(STLNum)% ChangeObjsRefFrame( this% stl(STLNum)% ObjectsList, LOCAL ) + end if + call this% MPI_sendOBB(STLNum) + call this% constructSTL_KDtree( STLNum ) + end do + + end subroutine IBM_Construct + + subroutine IBM_constructSTL_KDtree( this, STLNum ) + use MPI_Process_Info + implicit none + !-arguments----------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + !-local-variables----------------------------- + real(kind=RP) :: vertices(NDIM,8) + + this% root(STLNum)% STLNum = STLNum + this% root(STLNum)% which_KDtree = TRIANGLES_KDTREE_SAH + + vertices = OBB(STLNum)% LocVertices + + call this% MPI_sendSTLpartitions( STLNum, vertices ) + + call this% root(STLNum)% construct( stl = this% stl(STLNum), & + vertices = vertices, & + isPlot = this% plotKDtree, & + Min_n_of_Objs = this% KDtree_Min_n_of_Objs ) + + if( this% ComputeDistance ) call this% constructDistance_KDtree( STLNum ) + + call this% stl(STLNum)% destroy() + + end subroutine IBM_constructSTL_KDtree + + subroutine IBM_constructDistance_KDtree( this, STLNum ) + use MPI_Process_Info + implicit none + !-arguments---------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + !-local-variables---------------------------------- + real(kind=RP) :: BRvertices(NDIM,8) + + this% rootDistance(STLNum)% STLNum = STLNum + this% rootDistance(STLNum)% which_KDtree = TRIANGLES_KDTREE_MEDIAN + + call GetBRvertices( this% root(STLNum)% vertices, this% BandRegionCoeff, this% root(STLNum)% MaxAxis, STLNum, BRvertices ) + + call this% rootDistance(STLNum)% construct( stl = this% stl(STLNum), & + Vertices = BRvertices, & + isPlot = .false., & + Min_n_of_Objs = this% KDtree_Min_n_of_Objs ) + + end subroutine IBM_constructDistance_KDtree +! +! Copy a KD tree +! --------------- + subroutine IBM_copy( this, parent, lvl ) + + implicit none + !-arguments---------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(IBM_type), target, intent(in) :: parent + integer, intent(in) :: lvl + !-local-variables---------------------------------------------------------- + integer :: STLNum + + allocate( this% root(parent% NumOfSTL), & + this% STLfilename(parent% NumOfSTL) ) + + if( parent% ComputeBandRegion ) then + allocate( this% rootPoints(parent% NumOfSTL), & + this% BandRegion(parent% NumOfSTL) ) + end if + + if( parent% ComputeDistance ) allocate(this% rootDistance(parent% NumOfSTL)) + + do STLNum = 1, parent% NumOfSTL + this% STLfilename(STLNum) = parent% STLfilename(STLNum) + this% root(STLNum) = parent% root(STLNum) + if( parent% ComputeDistance ) this% rootDistance(STLNum) = parent% rootDistance(STLNum) + end do + + this% ClipAxis = parent% ClipAxis + + this% lvl = lvl + + end subroutine IBM_copy +! +! Destroy the KD tree +! -------------------- + subroutine IBM_DestroyKDtree( this, isChild, DistanceKDtree ) + use MPI_Process_Info + implicit none + !-arguments-------------------------------------------------- + class(IBM_type), intent(inout) :: this + logical, intent(in) :: isChild + logical, optional, intent(in) :: DistanceKDtree + !-local-variables-------------------------------------------- + integer :: STLNum + + if(this% ComputeDistance ) then + do STLNum = 1, this% NumOfSTL + call this% rootDistance(STLNum)% destruct( isChild ) + end do + deallocate(this% rootDistance) + return + end if + + do STLNum = 1, this% NumOfSTL + call this% root(STLNum)% destruct( isChild ) + end do + + end subroutine IBM_DestroyKDtree +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! Mask procedures +! ------------------------------------------------- + subroutine IBM_GetMask( this, elements, no_of_elements, no_of_DoFs, STLNum, iter ) + use MPI_Process_Info + implicit none + !-arguments----------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, no_of_DoFs, STLNum, iter + + call GetMaskCandidates( elements, no_of_elements, no_of_DoFs, STLNum, this% NumOfSTL ) + + call this% MPI_PointsListOperations( Mask ) + + call this% constructmask( elements, STLNum ) + + if( this% plotMask ) call this% plot_Mask( iter, STLNum ) + + deallocate( Mask% x ) + + end subroutine IBM_GetMask +! +! +! mask construction +! ----------------------------------- + subroutine IBM_constructmask( this, elements, STLNum ) + use MPI_Process_Info + implicit none + !-arguments---------------------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + type(element), intent(inout) :: elements(:) + !-local-variables---------------------------------------------- + real(kind=RP) :: Point(NDIM) + integer :: eID, n, i, j, k +!$omp parallel +!$omp do schedule(runtime) private(Point) + do n = 1, Mask% NumOfObjs + call OBB(STLNum)% ChangeRefFrame( Mask% x(n)% coords, LOCAL, Point ) + Mask% x(n)% isInsideBody = .false. + Mask% x(n)% NumOfIntersections = 0 + if( isInsideBox( Point, this% root(STLNum)% vertices ) ) then + call this% CheckPoint( Point, STLNum, Mask% x(n)% NumOfIntersections ) + end if + end do +!$omp end do +!$omp end parallel + call this% MPI_sendMask2Root() + call this% MPI_sendMask2Partitions() +!$omp parallel +!$omp do schedule(runtime) private(eID,i,j,k) + do n = 1, Mask% NumOfObjs + if( Mask% x(n)% partition .eq. MPI_Process% rank ) then + eID = Mask% x(n)% element_index + i = Mask% x(n)% local_Position(1) + j = Mask% x(n)% local_Position(2) + k = Mask% x(n)% local_Position(3) + elements(eID)% isInsideBody(i,j,k) = Mask% x(n)% isInsideBody + if( elements(eID)% isInsideBody(i,j,k) ) then + elements(eID)% STL(i,j,k) = STLNum + end if + end if + end do +!$omp end do +!$omp end parallel + if( MPI_Process% isRoot ) then + if( Mask% NumOfObjs .eq. 0 .and. this% lvl .gt. 0 ) then + print *, "The mask for the multigrid level ", this% lvl, " is made of 0 points." + print *, "Try to increase the polynomial order or to refine the mesh." + error stop + elseif( Mask% NumOfObjs .eq. 0 ) then + print *, "The mask is made of 0 points." + print *, "Try to increase the polynomial order or to refine the mesh." + error stop + end if + end if + end subroutine IBM_constructmask +! +! Mask plot +! ----------------------------------------------------------- + subroutine IBM_plot_Mask( this, iter, STLNum) + use MPI_Process_Info + implicit none + !-arguments------------------------------------------------------ + class(IBM_type), intent(inout) :: this + integer, intent(in) :: iter, STLNum + !-local-variables------------------------------------------------ + character(len=LINE_LENGTH) :: filename + integer :: i, funit, NumOfObjs + logical :: add_Point = .false. + + if( .not. MPI_Process% isRoot ) return + + NumOfObjs = 0 + do i = 1, Mask% NumOfObjs + if( Mask% x(i)% isInsideBody ) NumOfObjs = NumOfObjs + 1 + end do + + if( NumOfObjs .eq. 0 ) then + print*, "Mask is made of 0 points" + error stop + end if + + if( this% lvl .gt. 0 ) then + write(filename,'(A,A,I1,A,I10.10)') trim(this% STLfilename(STLNum)),'_MGlevel',this% lvl,'_',iter + else + write(filename,'(A,A,I10.10)') trim(this% STLfilename(STLNum)),'_',iter + end if + + call TecFileHeader( 'IBM/Mask_'//trim(filename), 'Mask Points', NumOfObjs/2+mod(NumOfObjs,2),2,1, funit, 'POINT') + + if( mod(NumOfObjs,2) .ne. 0 ) add_Point = .true. + + do i = 1, Mask% NumOfObjs + if( Mask% x(i)% isInsideBody ) then + write(funit,'(3E13.5)') Mask% x(i)% coords(1), Mask% x(i)% coords(2), Mask% x(i)% coords(3) + if( add_Point ) then + write(funit,'(3E13.5)') Mask% x(i)% coords(1), Mask% x(i)% coords(2), Mask% x(i)% coords(3) + add_Point = .false. + end if + end if + end do + + close(funit) + + end subroutine IBM_plot_Mask +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ----------------------------------------------------------------------- +! Getting extreme of the domain mesh. These are used to clip the STL file +! ----------------------------------------------------------------------- + + subroutine IBM_GetDomainExtreme( this, elements ) + use MPI_Process_Info + implicit none + !-arguments--------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(in) :: elements(:) + !-local-variables--------------------------------------- + real(kind=rp) :: ElemMax, ElemMin + integer :: eID, i, axis, j, k +#ifdef _HAS_MPI_ + real(kind=RP) :: localmax, localmin + integer :: ierr +#endif + this% maxCOORDS = -huge(1.0_RP); this% minCOORDS = huge(1.0_RP) + axis = this% ClipAxis + do eID = 1, size(elements) + !ElemMax = maxval(elements(eID)% SurfInfo% corners(axis,:)); ElemMin = minval(elements(eID)% SurfInfo% corners(axis,:)) + do k = 0, elements(eID)% Nxyz(3) ; do j = 0, elements(eID)% Nxyz(2) ; do i = 0, elements(eID)% Nxyz(1) + this% maxCOORDS = max(this% maxCOORDS,elements(eID)% geom% x(axis,i,j,k)); this% minCOORDS = min(this% minCOORDS,elements(eID)% geom% x(axis,i,j,k)) + end do; end do; end do + end do + this% maxCOORDS = this% maxCOORDS + 1.0e-8 + this% minCOORDS = this% minCOORDS - 1.0e-8 +#ifdef _HAS_MPI_ + localmax = this% maxCOORDS; localmin = this% minCOORDS + call mpi_allreduce(localmax, this% maxCOORDS, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD, ierr) + call mpi_allreduce(localmin, this% minCOORDS, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD, ierr) +#endif + end subroutine IBM_GetDomainExtreme +! +! Allocation and coordinates for the integration points +! ----------------------------------------------------- + subroutine IBM_SetIntegration( this, STLNum ) + use PhysicsStorage + implicit none + !-arguments------------------------------ + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + !-local-variables------------------------ + integer :: i, j + + if( this% Integral(STLNum)% compute ) return + + do i = 1, this% root(STLNum)% NumOfObjs + do j = 1, 3 + allocate( this% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints(this% NumOfInterPoints), & + this% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi(this% NumOfInterPoints,this% NumOfInterPoints), & + this% root(STLNum)% ObjectsList(i)% vertices(j)% b(this% NumOfInterPoints) ) + end do + end do + + allocate(this% BandRegion(STLNum)% U_x(NCONS,this% BandRegion(STLNum)% NumOfObjs)) + allocate(this% BandRegion(STLNum)% U_y(NCONS,this% BandRegion(STLNum)% NumOfObjs)) + allocate(this% BandRegion(STLNum)% U_z(NCONS,this% BandRegion(STLNum)% NumOfObjs)) + + end subroutine IBM_SetIntegration +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! building the immersed boundary +! ------------------------------------------------- + subroutine IBM_build( this, elements, no_of_elements, no_of_DoFs, isChild, movingSTL, iter ) + use MPI_Process_Info + use PhysicsStorage + implicit none + !-arguments----------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, no_of_DoFs + logical, intent(in) :: isChild + integer, optional, intent(in) :: movingSTL, iter + !-local-variables----------------------------------------------------------- + integer :: MaskPoints, STLNum +#ifdef _HAS_MPI_ + integer :: localVal, ierr +#endif + do STLNum = 1, this% NumOfSTL + if( .not. present(movingSTL) )then + call this% GetMask( elements, no_of_elements, no_of_DoFs, STLNum, 0 ) + else + if( STLNum .eq. movingSTL ) call this% GetMask( elements, no_of_elements, no_of_DoFs, STLNum, iter ) + end if + end do + + if( .not. present(movingSTL) )then + allocate( this% penalization(no_of_elements) ) + this% penalization = this% eta + end if +#if defined(NAVIERSTOKES) + if( this% ComputeDistance ) then + if( .not. present(movingSTL) ) then + call this% ComputeIBMWallDistance( elements ) + else + call this% ComputeIBMWallDistance( elements, movingSTL ) + end if + end if +#endif + if( this% ComputeBandRegion ) then + do STLNum = 1, this% NumOfSTL + if( .not. present(movingSTL) ) then + call this% constructBandRegion( elements, no_of_elements, STLNum ) + else + if( STLNum .eq. movingSTL ) then + call this% constructBandRegion( elements, no_of_elements, STLNum ) + end if + end if + end do + end if + + if( this% Wallfunction ) then +#if defined(NAVIERSTOKES) + call this% GetImagePoint_nearest( elements ) +#endif + end if + + end subroutine IBM_build +! +! Immersed boundary description +! ----------------------------- + subroutine IBM_Describe( this ) + use Headers + use mainKeywordsModule + use MPI_Process_Info + implicit none + !-arguments----------------------------- + class(IBM_type), intent(inout) :: this + + if ( .not. MPI_Process % isRoot ) return + write(STD_OUT,'(/)') + call Section_Header("IBM parameters") + write(STD_OUT,'(/)') + + call SubSection_Header('IBM info') + write(STD_OUT,'(30X,A,A35,L10)') "->" , "Semi implicit treatment: ", this% semiImplicit + if( .not. this% TimePenal ) then + write(STD_OUT,'(30X,A,A35,ES14.2)') "->" , "Penalization term: " , this% eta + else + write(STD_OUT,'(30X,A,A35,A10)') "->" , "Penalization term: ", " Dt" + end if + + write(STD_OUT,'(30X,A,A35,I10)') "->" , "Minimum number of objects: ", this% KDtree_Min_n_of_Objs + write(STD_OUT,'(30X,A,A35,I10)') "->" , "Number of interpolation points: ", this% NumOfInterPoints + !if( this% Wallfunction ) then + ! write(STD_OUT,'(30X,A,A35,F10.3)') "->" , "Target y+: ", this% y_plus_target + !end if + + end subroutine IBM_Describe +! +! Destroy immersed boundary +! ------------------------- + subroutine IBM_Destruct( this, isChild ) + use MPI_Process_Info + implicit none + !-arguments------------------------------ + class(IBM_type), intent(inout) :: this + logical, intent(in) :: isChild + !---------------------------------------- + integer :: STLNum, i, j + + do STLNum = 1, this% NumOfSTL + do i = 1, this% root(STLNum)% NumOfObjs + do j = 1, 3 + if( allocated(this% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints) ) then + deallocate(this% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints) + deallocate(this% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi) + deallocate(this% root(STLNum)% ObjectsList(i)% vertices(j)% b) + end if + end do + end do + call this% root(STLNum)% destruct( isChild ) + if( this% ComputeDistance ) call this% rootDistance(STLNum)% destruct( isChild ) + if( this% ComputeBandRegion ) then + deallocate(this% BandRegion(STLNum)% x) + call this% rootPoints(STLNum)% Destruct( .false. ) + deallocate(this% BandRegion(STLNum)% Q) + if( allocated(this% BandRegion(STLNum)% U_x) ) deallocate(this% BandRegion(STLNum)% U_x) + if( allocated(this% BandRegion(STLNum)% U_y) ) deallocate(this% BandRegion(STLNum)% U_y) + if( allocated(this% BandRegion(STLNum)% U_z) ) deallocate(this% BandRegion(STLNum)% U_Z) + end if + end do + + if( this% Wallfunction ) then + do i = 1, this% NumOfForcingPoints + deallocate( this% ImagePoints(i)% invPhi, & + this% ImagePoints(i)% b ) + end do + deallocate(this% ImagePoints) + end if + + deallocate(this% penalization, this% Integral) + + end subroutine IBM_Destruct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------ +! Creating the .omesh file for p-adaptation close to the STL +! ------------------------------------------------------------ + subroutine IBM_SetPolynomialOrder( this, elements, corners ) + implicit none + + !-arguments---------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + real(kind=RP), optional, intent(in) :: corners(:,:) + !-local-variables---------------------------------------- + real(kind=RP) :: corner(NDIM) + integer :: STLNum, eID, k + + if( present(corners) ) then + do eID = 1, size(elements) + do k = 1, 8 + if( isInsideBox( elements(eID)% SurfInfo% corners(:,k), corners ) ) then + elements(eID)% Nxyz(1) = this% Nx + elements(eID)% Nxyz(2) = this% Ny + elements(eID)% Nxyz(3) = this% Nz + exit + end if + end do + end do + else + do eID = 1, size(elements) + !loop over the stl files + do STLNum = 1, this% NumOfSTL + loop: do k = 1, 8 + call OBB(STLNum)% ChangeRefFrame( elements(eID)% SurfInfo% corners(:,k), LOCAL, corner ) + if( isInsideBox( corner, this% BandRegionCoeff*OBB(STLNum)% LocVertices ) ) then + if( this% Nx .ne. 0 ) elements(eID)% Nxyz(1) = this% Nx + if( this% Ny .ne. 0 ) elements(eID)% Nxyz(2) = this% Ny + if( this% Nz .ne. 0 ) elements(eID)% Nxyz(3) = this% Nz + exit loop + end if + end do loop + end do + end do + end if + + end subroutine IBM_SetPolynomialOrder +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ----------------------------------------------------------------------- +! Band region for the computation of the forces and turbulent quantities +! ----------------------------------------------------------------------- + + subroutine IBM_constructBandRegion( this, elements, no_of_elements, STLNum ) + use MPI_Process_Info + use PhysicsStorage + implicit none + !-arguments------------------------------------------------------ + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, & + STLNum + !-local-variables------------------------------------------------ + type(STLfile) :: stl + type(point_type), pointer :: p + integer :: i +#ifdef _HAS_MPI_ + integer :: localVal, ierr +#endif + call this% BandRegionPoints( elements, no_of_elements, STLNum ) + + this% BandRegion(STLNum)% LocNumOfObjs = this% BandPoints% NumOfPoints +#ifdef _HAS_MPI_ + call mpi_allreduce(this% BandPoints% NumOfPoints, this% BandRegion(STLNum)% NumOfObjs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) +#else + this% BandRegion(STLNum)% NumOfObjs = this% BandPoints% NumOfPoints +#endif + + if( this% BandRegion(STLNum)% NumOfObjs .eq. 0 ) then + print *, "IBM_bandRegionPoints: Number of points in the band region is 0" + error stop + end if + + allocate(this% BandRegion(STLNum)% x(this% BandRegion(STLNum)% NumOfObjs)) + + p => this% BandPoints% head + + do i = 1, this% BandPoints% NumOfPoints + this% BandRegion(STLNum)% x(i)% index = i + this% BandRegion(STLNum)% x(i)% coords = p% coords + this% BandRegion(STLNum)% x(i)% local_Position = p% local_Position + this% BandRegion(STLNum)% x(i)% element_index = p% element_index + this% BandRegion(STLNum)% x(i)% partition = p% partition + this% BandRegion(STLNum)% x(i)% STLNum = STLNum + this% BandRegion(STLNum)% x(i)% normal = 0.0_RP + this% BandRegion(STLNum)% x(i)% Dist = huge(1.0_RP) + p => p% next + end do + + call this% MPI_PointsListOperations( this% BandRegion(STLNum) ) + + ! STL not used for rootpoints + this% rootPoints(STLNum)% STLNum = STLNum + this% rootPoints(STLNum)% which_KDtree = POINTS_KDTREE + + call this% rootPoints(STLNum)% construct( stl = this% stl(STLNum), & + Vertices = this% BandRegionCoeff*OBB(STLNum)% LocVertices, & + isPlot = this% plotBandPoints, & + Min_n_of_Objs = this% NumOfInterPoints, & + pointList = this% BandRegion(STLNum)% x, & + lvl = this% lvl ) + + allocate( this% BandRegion(STLNum)% Q(NCONS,this% BandRegion(STLNum)% NumOfObjs) ) + + call this% BandPoints% destruct() + + end subroutine IBM_constructBandRegion +! +! Building band region for the computation of the STL-DoFs distance +! ------------------------------------------------------------------ + subroutine IBM_constructBandRegion4Distance( this, elements, no_of_elements, STLNum ) + use MPI_Process_Info + implicit none + !-arguments------------------------------------------ + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, & + STLNum + !-local-variables------------------------------------ + type(point_type), pointer :: p + integer :: i +#ifdef _HAS_MPI_ + integer :: localVal, ierr +#endif + call this% BandRegionPoints( elements, no_of_elements, STLNum ) + + this% BandRegion4Distance(STLNum)% LocNumOfObjs = this% BandPoints% NumOfPoints +#ifdef _HAS_MPI_ + call mpi_allreduce(this% BandPoints% NumOfPoints, this% BandRegion4Distance(STLNum)% NumOfObjs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) +#else + this% BandRegion4Distance(STLNum)% NumOfObjs = this% BandPoints% NumOfPoints +#endif + + allocate(this% BandRegion4Distance(STLNum)% x(this% BandRegion4Distance(STLNum)% NumOfObjs)) + + p => this% BandPoints% head + + do i = 1, this% BandPoints% NumOfPoints + this% BandRegion4Distance(STLNum)% x(i)% index = i + this% BandRegion4Distance(STLNum)% x(i)% coords = p% coords + this% BandRegion4Distance(STLNum)% x(i)% local_Position = p% local_Position + this% BandRegion4Distance(STLNum)% x(i)% element_index = p% element_index + this% BandRegion4Distance(STLNum)% x(i)% partition = p% partition + this% BandRegion4Distance(STLNum)% x(i)% STLNum = STLNum + this% BandRegion4Distance(STLNum)% x(i)% normal = 0.0_RP + this% BandRegion4Distance(STLNum)% x(i)% Dist = huge(1.0_RP) + p => p% next + end do + + call this% MPI_PointsListOperations( this% BandRegion4Distance(STLNum) ) + + call this% BandPoints% destruct() + + end subroutine IBM_constructBandRegion4Distance +! +! Band region points are found and stored +! --------------------------------------- + subroutine IBM_bandRegionPoints( this, elements, n_of_elements, STLNum ) + use ElementClass + use FaceClass + use MPI_Process_Info + implicit none + !-arguments----------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: n_of_elements, & + STLNum + !-local-variables----------------------------------- + type(point_type) :: p + real(kind=RP) :: Point(NDIM) + integer :: eID, n, i, j, k, NumOfPoints + + this% BandPoints = PointLinkedList() + + n = 0; NumOfPoints = 0 + + do eID = 1, n_of_elements + associate( e => elements(eID) ) + do i = 0, e% Nxyz(1); do j = 0, e% Nxyz(2); do k = 0, e% Nxyz(3) + if( .not. e% isInsideBody(i,j,k) .and. .not. e% isForcingPoint(i,j,k) ) then + call OBB(STLNum)% ChangeRefFrame(e% geom% x(:,i,j,k),LOCAL,Point) + if( isInsideBox(Point, this% BandRegionCoeff*OBB(STLNum)% LocVertices, .true. ) ) then + p% coords = Point + p% element_index = eID; p% local_Position = (/ i,j,k /) + n = n + 1; NumOfPoints = NumOfPoints + 1 + p% index = n; p% partition = MPI_Process% rank + call this% BandPoints% add(p) + end if + end if + end do; end do; end do + end associate + end do + + this% BandPoints% NumOfPoints = NumOfPoints + + end subroutine IBM_bandRegionPoints +! +! Band region points' state is stored +! ----------------------------------- + subroutine IBM_BandPoint_state( this, elements, STLNum, gradients ) + use PhysicsStorage + use MPI_Process_Info + implicit none + !-arguments------------------------------------------------ + class(IBM_type), intent(inout) :: this + type(element), intent(in) :: elements(:) + integer, intent(in) :: STLnum + logical, intent(in) :: gradients + !-local-variables------------------------------------------ + integer :: n, i, j, k, eID +#ifdef _HAS_MPI_ + real(kind=rp), allocatable :: local_sum(:), global_sum(:) + integer :: ierr, NumOfObjs +#endif + this% BandRegion(STLNum)% Q = 0.0_RP + if( gradients ) then + this% BandRegion(STLNum)% U_x = 0.0_RP + this% BandRegion(STLNum)% U_y = 0.0_RP + this% BandRegion(STLNum)% U_z = 0.0_RP + end if +!$omp parallel +!$omp do schedule(runtime) private(i,j,k,eID) + do n = 1, this% BandRegion(STLNum)% NumOfObjs + if( this% BandRegion(STLNum)% x(n)% partition .eq. MPI_Process% rank ) then + i = this% BandRegion(STLNum)% x(n)% local_Position(1) + j = this% BandRegion(STLNum)% x(n)% local_Position(2) + k = this% BandRegion(STLNum)% x(n)% local_Position(3) + eID = this% BandRegion(STLNum)% x(n)% element_index + this% BandRegion(STLNum)% Q(:,n) = elements(eID)% storage% Q(:,i,j,k) + if( gradients ) then + this% BandRegion(STLNum)% U_x(:,n) = elements(eID)% storage% U_x(:,i,j,k) + this% BandRegion(STLNum)% U_y(:,n) = elements(eID)% storage% U_y(:,i,j,k) + this% BandRegion(STLNum)% U_z(:,n) = elements(eID)% storage% U_z(:,i,j,k) + end if + end if + end do +!$omp end do +!$omp end parallel +#ifdef _HAS_MPI_ + if( MPI_Process% doMPIAction ) then + NumOfObjs = this% BandRegion(STLNum)% NumOfObjs + allocate(local_sum(NumOfObjs),global_sum(NumOfObjs)) + do i = 1, NCONS + local_sum = this% BandRegion(STLNum)% Q(i,:) + call mpi_allreduce(local_sum, global_sum, NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) + this% BandRegion(STLNum)% Q(i,:) = global_sum + if( gradients ) then + local_sum = this% BandRegion(STLNum)% U_x(i,:) + call mpi_allreduce(local_sum, global_sum, NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) + this% BandRegion(STLNum)% U_x(i,:) = global_sum + local_sum = this% BandRegion(STLNum)% U_y(i,:) + call mpi_allreduce(local_sum, global_sum, NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) + this% BandRegion(STLNum)% U_y(i,:) = global_sum + local_sum = this% BandRegion(STLNum)% U_z(i,:) + call mpi_allreduce(local_sum, global_sum, NumOfObjs, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) + this% BandRegion(STLNum)% U_z(i,:) = global_sum + end if + end do + deallocate(local_sum,global_sum) + end if +#endif + end subroutine IBM_BandPoint_state +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------ +! MPI routines +! ------------------------------------------------------------ + subroutine IBM_MPI_sendOBB( this, STLNum ) + use MPI_Process_Info + implicit none + !-arguments------------------------------ + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + + if ( MPI_Process% doMPIAction ) then + call recvOBB( STLNum ) + end if + + if( MPI_Process% doMPIRootAction ) then + call SendOBB( STLNum ) + end if + + end subroutine IBM_MPI_sendOBB + + subroutine IBM_MPI_sendSTLpartitions( this, STLNum, vertices ) + use MPI_Process_Info + implicit none + !-arguments--------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + real(kind=RP), intent(inout) :: vertices(:,:) + + if( MPI_Process% doMPIAction ) then + call receiveSTLpartitions( this% stl(STLNum), STLNum, vertices, this% root(STLNum)% MaxAxis ) + end if + + if( MPI_Process% isRoot ) then + call sendSTL2Partitions( this% stl(STLNum), STLNum, vertices, this% root(STLNum)% MaxAxis ) + end if + + end subroutine IBM_MPI_sendSTLpartitions + + subroutine IBM_MPI_PointsListOperations( this, pointsList ) + use MPI_Process_Info + implicit none + !-arguments---------------------------- + class(IBM_type), intent(inout) :: this + type(IBMpoints), intent(inout) :: pointsList + + if( MPI_Process% doMPIAction ) then + call SendPointsList2Root( pointsList ) + end if + + if( MPI_Process% doMPIRootAction ) then + call RecvPointsListRoot( pointsList ) + end if + + if( MPI_Process% doMPIRootAction ) then + call SendPointsList2partitions( pointsList ) + end if + + if( MPI_Process% doMPIAction ) then + call RecvPointsListpartitions( pointsList ) + end if + + end subroutine IBM_MPI_PointsListOperations +! +! MASK: root sends and receives its mask points +! ---------------------------------------------- + subroutine IBM_MPI_sendMask2Root( this ) + use MPI_Process_Info + implicit none + !-arguments----------------------------- + class(IBM_type), intent(inout) :: this + + if( MPI_Process% isRoot ) then + call recvPointsMaskRoot() + end if + + if( MPI_Process% doMPIAction ) then + call sendPointsMask2Root() + endif + + end subroutine IBM_MPI_sendMask2Root +! +! MASK: all points go from root to partitions +! ------------------------------------------- + subroutine IBM_MPI_sendMask2Partitions( this ) + use MPI_Process_Info + implicit none + !-arguments---------------------------- + class(IBM_type), intent(inout) :: this + + if( MPI_Process% doMPIAction ) then + call recvPointsMaskPartitions() + end if + + if( MPI_Process% doMPIRootAction ) then + call sendPointsMask2Partitions() + endif + + end subroutine IBM_MPI_sendMask2Partitions + + subroutine IBM_MPI_sendNormals2Root( this, pointsList, ranks ) + use MPI_Process_Info + implicit none + !-arguments---------------------------- + class(IBM_type), intent(inout) :: this + type(IBMpoints), intent(inout) :: pointsList + real(kind=RP), intent(in) :: ranks(:) + + if( MPI_Process% doMPIAction ) then + call sendNormals2Root( pointsList ) + end if + if( MPI_Process% doMPIRootAction ) then + call recvNormalsRoot( PointsList, ranks ) + end if + + end subroutine IBM_MPI_sendNormals2Root + + subroutine IBM_MPI_sendDistNormals2partitions( this, PointsList ) + use MPI_Process_Info + implicit none + !-arguments------------------------------- + class(IBM_type), intent(inout) :: this + type(IBMpoints), intent(inout) :: pointsList + + if( MPI_Process% doMPIRootAction ) then + call sendDistanceANDNormals2partitions( PointsList ) + end if + if( MPI_Process% doMPIAction ) then + call recvDistancesANDNormalspartitions( PointsList ) + end if + + end subroutine IBM_MPI_sendDistNormals2partitions +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------ +! Moving bodies +! ------------------------------------------------------------ + subroutine IBM_MoveBody( this, elements, no_of_elements, no_of_DoFs, isChild, t, iter, autosave ) + use MPI_Process_Info + implicit none + !-arguments----------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, no_of_DoFs + logical, intent(in) :: isChild + real(kind=RP), intent(in) :: t + integer, optional, intent(in) :: iter + logical, optional, intent(in) :: autosave + !-local-variables----------------------------------------------------------- + integer :: STLNum + + do STLNum = 1, this% NumOfSTL + if( this% stl(STLNum)% move ) then + call this% root(STLNum)% Destruct( isChild ) + if( this% ComputeBandRegion ) then + deallocate( this% BandRegion(STLNum)% x ) + call this% rootPoints(STLNum)% destruct( isChild ) + end if + if( this% ComputeDistance ) call this% rootDistance(STLNum)% destruct( isChild ) + call this% CleanMask( elements, no_of_elements, STLNum ) + if( MPI_Process% isRoot .and. .not. isChild ) then + call this% stl(STLNum)% ReadTessellation( this% STLfilename(STLNum) ) + if( this% stl(STLNum)% motionType .eq. ROTATION ) then + call this% stl(STLNum)% getRotationaMatrix( t ) + call OBB(STLNum)% STL_rotate(this% stl(STLNum)) + elseif( this% stl(STLNum)% motionType .eq. LINEAR ) then + call this% stl(STLNum)% getDisplacement( t ) + call OBB(STLNum)% STL_translate(this% stl(STLNum)) + end if + call this% stl(STLNum)% updateNormals() + this% stl(STLNum)% show = .false. + this% plotMask = .false. + if( present(autosave) .and. autosave ) this% plotMask = .true. + if( present(autosave) .and. autosave ) call this% stl(STLNum)% plot( iter ) + call OBB(STLNum)% construct( this% stl(STLNum), this% plotOBB, this% AAB ) + call OBB(STLNum)% ChangeObjsRefFrame( this% stl(STLNum)% ObjectsList, LOCAL ) + end if + call this% MPI_sendOBB(STLNum) + this% plotKDtree = .false. + call this% constructSTL_KDtree( STLNum ) + end if + end do + + do STLNum = 1, this% NumOfSTL + if( this% stl(STLNum)% move ) call this% build( elements, no_of_elements, no_of_DoFs, isChild, STLNum, iter ) + end do + + end subroutine IBM_MoveBody +! +! Mask is cleaned +! --------------- + subroutine IBM_CleanMask( this, elements, no_of_elements, STLNum ) + + implicit none + !-arguments------------------------------------------------ + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, STLNum + !-local-variables------------------------------------------ + integer :: eID, i, j, k +!$omp parallel +!$omp do schedule(runtime) private(i,j,k) + do eID = 1, no_of_elements + do i = 0, elements(eID)% Nxyz(1); do j = 0, elements(eID)% Nxyz(2); do k = 0, elements(eID)% Nxyz(3) + if( elements(eID)% STL(i,j,k) .eq. STLNum .and. elements(eID)% isInsideBody(i,j,k) ) then + elements(eID)% STL(i,j,k) = 0 + elements(eID)% isInsideBody(i,j,k) = .false. + end if + end do; end do; end do + end do +!$omp end do +!$omp end parallel + end subroutine IBM_CleanMask +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ---------------------------------------------------- +! Geometrical quantities for the turbulence wall model +! ---------------------------------------------------- + subroutine IBM_GetForcingPointsGeom( this, elements ) + use MPI_Process_Info + use MeshTypes + implicit none + !-arguments---------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + !-local-variables---------------------------------- + real(kind=RP) :: dx, dy, dz, d, d_min, Dist + integer :: eID, i, j, k, n, Total +#ifdef _HAS_MPI_ + integer :: ierr +#endif + this% NumOfForcingPoints = 0 + d = huge(1.0_RP) + + do eID = 1, size(elements) + dx = maxval(elements(eID)% SurfInfo% corners(1,:)) - minval(elements(eID)% SurfInfo% corners(1,:)) + dy = maxval(elements(eID)% SurfInfo% corners(2,:)) - minval(elements(eID)% SurfInfo% corners(2,:)) + dz = maxval(elements(eID)% SurfInfo% corners(3,:)) - minval(elements(eID)% SurfInfo% corners(3,:)) + d = min(d,min(abs(dx),abs(dy),abs(dz))) + end do + d_min = sqrt(3.0_RP)*d + + write(*,*) 'd_min =', d_min + +#ifdef _HAS_MPI_ + call mpi_allreduce(d_min, this% IP_Distance, 1, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD, ierr) + Dist = this% IP_Distance + this% IP_Distance = 1.5_RP*this% IP_Distance +#else + this% IP_Distance = d_min + Dist = this% IP_Distance + this% IP_Distance = 1.5_RP*this% IP_Distance +#endif + + write(*,*) 'ip dist=', Dist + + do eID = 1, size(elements) + do k = 0, elements(eID)% Nxyz(3); do j = 0, elements(eID)% Nxyz(2); do i = 0, elements(eID)% Nxyz(1) + if( elements(eID)% geom% dWall(i,j,k) .gt. Dist ) cycle + elements(eID)% isForcingPoint(i,j,k) = .true. + this% NumOfForcingPoints = this% NumOfForcingPoints + 1 + end do; end do; end do + end do +#ifdef _HAS_MPI_ + call mpi_allreduce(this% NumOfForcingPoints, Total, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) +#else + Total = this% NumOfForcingPoints +#endif + if( Total .eq. 0 .and. MPI_Process% isRoot ) then + print*, "No forcing points found, change y+ target" + error stop + endif + + allocate(this% ImagePoints(this% NumOfForcingPoints)) + n = 0 + + do eID = 1, size(elements) + do k = 0, elements(eID)% Nxyz(3); do j = 0, elements(eID)% Nxyz(2); do i = 0, elements(eID)% Nxyz(1) + if( elements(eID)% isForcingPoint(i,j,k) ) then + Dist = this% IP_distance - elements(eID)% geom% dWall(i,j,k) + n = n + 1 + this% ImagePoints(n)% coords = elements(eID)% geom% x(:,i,j,k) + Dist * elements(eID)% geom% normal(:,i,j,k) + this% ImagePoints(n)% element_index = eID + this% ImagePoints(n)% local_Position = (/i,j,k/) + this% ImagePoints(n)% index = n + end if + end do; end do; end do + end do + + call Plot_Forcing_Imagepoints( this, elements ) + + end subroutine IBM_GetForcingPointsGeom + + subroutine IBM_ImagePointsElement( this)!, mesh ) + implicit none + !-arguments----------------- + class(IBM_type), intent(inout) :: this + !type(HexMesh), intent(inout) :: mesh + !-local-variables----------------------- + integer :: i + + !do i = 1, this% NumOfForcingPoints + !do eID = 1, size(elements) + ! success = elements(eID) % FindPointInLinElement(x, nodes) + ! if ( success ) exit + !end do + + !if (eID <= self % no_of_elements) then + ! success = self % FindPointWithCoordsInNeighbors(x, xi, eID, 2) + ! if ( success ) then + ! HexMesh_FindPointWithCoords = .true. + ! return + ! end if + !end if + !call mesh% FindPointWithCoords(this% ImagePoints(i)% coords, this% ImagePoints(i)% element_in, this% ImagePoints(i)% xi) + !end do + + end subroutine IBM_ImagePointsElement + + + subroutine Plot_Forcing_Imagepoints( IBM, elements ) + use MPI_Process_Info + implicit none + !-arguments---------------------------------------- + type(IBM_type), intent(in) :: IBM + type(element), intent(in) :: elements(:) + !-local-variables---------------------------------- + real(kind=RP) :: ImagePoint(NDIM), & + Dist + character(len=LINE_LENGTH) :: filenameFP, & + filenameIP, & + lvl, rank + integer :: eID, i, j, k, & + funit + logical :: add_Point = .false. + + if( IBM% NumOfForcingPoints .eq. 0 ) return + + if( MPI_Process% nProcs .gt. 1 ) then + write(rank,*) MPI_Process% rank + if( IBM% lvl .gt. 0 ) then + write(lvl,*) IBM% lvl + filenameFP = 'ForcingPoints_'//trim(IBM% filename)//'_MGlevel'//trim(adjustl(lvl))//'_Process'//trim(adjustl(rank)) + filenameIP = 'ImagePoints_'//trim(IBM% filename)//'_MGlevel'//trim(adjustl(lvl))//'_Process'//trim(adjustl(rank)) + else + filenameFP = 'ForcingPoints_'//trim(IBM% filename)//'_Process'//trim(adjustl(rank)) + filenameIP = 'ImagePoints_'//trim(IBM% filename)//'_Process'//trim(adjustl(rank)) + end if + else + if( IBM% lvl .gt. 0 ) then + write(lvl,*) IBM% lvl + filenameFP = 'ForcingPoints_'//trim(IBM% filename)//'_MGlevel'//trim(adjustl(lvl)) + filenameIP = 'ImagePoints_'//trim(IBM% filename)//'_MGlevel'//trim(adjustl(lvl)) + else + filenameFP = 'ForcingPoints_'//trim(IBM% filename) + filenameIP = 'ImagePoints_'//trim(IBM% filename) + end if + endif + + call TecFileHeader( 'IBM/'//trim(filenameFP), 'Forcing Points', IBM% NumOfForcingPoints/2+mod(IBM% NumOfForcingPoints,2),2,1, funit, 'POINT' ) + + if( mod(IBM% NumOfForcingPoints,2) .ne. 0 ) add_Point = .true. + + do eID = 1, size(elements) + associate ( e => elements(eID) ) + do k = 0, e% Nxyz(3); do j = 0, e% Nxyz(2) ; do i = 0, e% Nxyz(1) + if( e% isForcingPoint(i,j,k) ) then + write(funit,'(3E13.5)') e% geom% x(1,i,j,k), e% geom% x(2,i,j,k), e% geom% x(3,i,j,k) + if( add_Point ) then + write(funit,'(3E13.5)') e% geom% x(1,i,j,k), e% geom% x(2,i,j,k), e% geom% x(3,i,j,k) + add_Point = .false. + end if + end if + end do; end do; end do + end associate + end do + + close(funit) + + call TecFileHeader( 'IBM/'//trim(filenameIP), 'Image Points', IBM% NumOfForcingPoints/2+mod(IBM% NumOfForcingPoints,2),2,1, funit, 'POINT' ) + + do i = 1, IBM% NumOfForcingPoints + write(funit,'(3E13.5)') IBM% ImagePoints(i)% coords(1), IBM% ImagePoints(i)% coords(2), IBM% ImagePoints(i)% coords(3) + if( add_Point ) then + write(funit,'(3E13.5)') IBM% ImagePoints(i)% coords(1), IBM% ImagePoints(i)% coords(2), IBM% ImagePoints(i)% coords(3) + add_Point = .false. + end if + end do + + close(funit) + + end subroutine Plot_Forcing_Imagepoints + +! +! DoFs closer to each image point +! ------------------------------- + subroutine IBM_GetImagePoint_nearest( this, elements ) + use MappedGeometryClass + use PhysicsStorage + use MPI_Process_Info + use ElementClass + implicit none + !-arguments------------------------------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + !-local-variables------------------------------------------------------------------------------- + real(kind=RP) :: iP(NDIM), Dist + integer :: i, n, STLNum +!$omp parallel +!$omp do schedule(runtime) private(Dist,STLNum,iP,n) + do i = 1, this% NumOfForcingPoints + STLNum = elements(this% ImagePoints(i)% element_index)% STL( this% ImagePoints(i)% local_Position(1), & + this% ImagePoints(i)% local_Position(2), & + this% ImagePoints(i)% local_Position(3) ) + + call OBB(STLNum)% ChangeRefFrame(this% ImagePoints(i)% coords,LOCAL,iP) + + allocate( this% ImagePoints(i)% nearestPoints(this% NumOfInterPoints), & + this% ImagePoints(i)% invPhi(this% NumOfInterPoints,this% NumOfInterPoints), & + this% ImagePoints(i)% b(this% NumOfInterPoints) ) + + this% ImagePoints(i)% nearestPoints = 0 + + do n = 1, this% NumOfInterPoints + call MinimumDistancePoints( iP, this% rootPoints(STLNum), this% BandRegion(STLNum), & + Dist, n, this% ImagePoints(i)% nearestPoints ) + end do + + if(any(this% ImagePoints(i)% nearestPoints .eq. 0) ) then + print *, "Can't fine nearest point for the image point: ", i + error stop + end if + + call GetMatrixInterpolationSystem( iP, & + this% BandRegion(STLNum)% x(this% ImagePoints(i)% nearestPoints), & + this% ImagePoints(i)% invPhi, & + this% ImagePoints(i)% b, this% InterpolationType ) + end do +!$omp end do +!$omp end parallel + end subroutine IBM_GetImagePoint_nearest +! +! Distance from the wall needed +! ----------------------------- + subroutine IBM_ComputeIBMWallDistance( this, elements, movingSTL ) + use MPI_Process_Info + implicit none + !-arguments-------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, optional , intent(in) :: movingSTL + !-local-variables-------------------------------- + integer :: STLNum + + allocate(this% BandRegion4Distance(this% NumOfSTL)) + + do STLNum = 1, this% NumOfSTL + if( .not. present(movingSTL) )then + call this% GetDistanceInsideBox( elements, STLNum ) + else + if( STLNum .eq. movingSTL) call this% GetDistanceInsideBox( elements, STLNum ) + end if + end do + + do STLNum = 1, this% NumOfSTL + if( .not. present(movingSTL) )then + call this%GetDistanceOutsideBox( STLNum ) + else + if( STLNum .eq. movingSTL) call this%GetDistanceOutsideBox( STLNum ) + end if + end do + + do STLNum = 1, this% NumOfSTL + if( .not. present(movingSTL) )then + call SetDistances( this% BandRegion4Distance(STLNum), elements ) + else + if( STLNum .eq. movingSTL) call SetDistances( this% BandRegion4Distance(STLNum), elements ) + endif + end do + + deallocate(this% BandRegion4Distance) + + if( this% Wallfunction ) then +#if defined(NAVIERSTOKES) + call this% GetForcingPointsGeom( elements ) +#endif + endif + + end subroutine IBM_ComputeIBMWallDistance +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------------------------- +! Computing the distance between a point and the triangles inside the box it lies in +! ------------------------------------------------------------------------------------- + subroutine IBM_GetDistanceInsideBox( this, elements, STLNum ) + use MPI_Process_Info + implicit none + !-arguments------------------------------------ + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + integer, intent(in) :: STLNum + !-local-variables------------------------------ + integer :: i, no_of_elements + real(kind=RP) :: xP(NDIM), Dist, normal(NDIM) + + no_of_elements = size(elements) + + call this% constructBandRegion4Distance( elements, no_of_elements, STLNum ) +!$omp parallel +!$omp do schedule(runtime) private(xP,Dist,normal) + do i = 1, this% BandRegion4Distance(STLNum)% NumOfObjs + this% BandRegion4Distance(STLNum)% x(i)% Dist = huge(1.0_RP) + this% BandRegion4Distance(STLNum)% x(i)% STLNum = STLNum + this% BandRegion4Distance(STLNum)% x(i)% normal = 0.0_RP + xP = this% BandRegion4Distance(STLNum)% x(i)% coords + if( isInsideBox(xP,this% rootDistance(STLNum)% vertices) ) then + call MinimumDistance( xP, this% rootDistance(STLNum), Dist, normal ) + if( Dist .lt. this% BandRegion4Distance(STLNum)% x(i)% Dist ) then + this% BandRegion4Distance(STLNum)% x(i)% Dist = Dist + this% BandRegion4Distance(STLNum)% x(i)% normal = normal + end if + end if + end do +!$omp end do +!$omp end parallel + end subroutine IBM_GetDistanceInsideBox +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------------------------------- +! Computing the distance between a point and the triangles inside the box it does not lay in +! ------------------------------------------------------------------------------------------- + subroutine IBM_GetDistanceOutsideBox( this, STLNum ) + use MPI_Process_Info + implicit none + !-arguments----------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: STLNum + !-local-variables----------------------------- + integer :: i, no_of_elements + real(kind=RP) :: xP(NDIM), Dist, normal(NDIM) +#ifdef _HAS_MPI_ + real(kind=rp), allocatable :: input(:,:), output(:,:) + integer :: ierr, rank +#endif +#ifdef _HAS_MPI_ + allocate( input(2,this% BandRegion4Distance(STLNum)% NumOfObjs), & + output(2,this% BandRegion4Distance(STLNum)% NumOfObjs) ) +#endif +!$omp parallel +!$omp do schedule(runtime) private(xP,Dist,normal) + do i = 1, this% BandRegion4Distance(STLNum)% NumOfObjs + xP = this% BandRegion4Distance(STLNum)% x(i)% coords + this% BandRegion4Distance(STLNum)% x(i)% STLNum = STLNum + if( .not. isInsideBox(xP,this% rootDistance(STLNum)% vertices) ) then + call MinimumDistanceSphereKDtree( xP, this% rootDistance(STLNum), this% BandRegion4Distance(STLNum)% x(i)% Dist, Dist, normal ) + if( Dist .lt. this% BandRegion4Distance(STLNum)% x(i)% Dist ) then + this% BandRegion4Distance(STLNum)% x(i)% Dist = Dist + this% BandRegion4Distance(STLNum)% x(i)% normal = normal + end if + end if +#ifdef _HAS_MPI_ + input(1,i) = this% BandRegion4Distance(STLNum)% x(i)% Dist + input(2,i) = MPI_Process% rank +#endif + end do +!$omp end do +!$omp end parallel +#ifdef _HAS_MPI_ + call mpi_allreduce( input, output, this% BandRegion4Distance(STLNum)% NumOfObjs, & + MPI_2DOUBLE_PRECISION, MPI_MINLOC, & + MPI_COMM_WORLD, ierr ) + + if( MPI_Process% isRoot ) then + do i = 1, this% BandRegion4Distance(STLNum)% NumOfObjs + this% BandRegion4Distance(STLNum)% x(i)% Dist = output(1,i) + end do + end if + + call this% MPI_sendNormals2Root( this% BandRegion4Distance(STLNum), output(2,:) ) + call this% MPI_sendDistNormals2partitions( this% BandRegion4Distance(STLNum) ) + + deallocate(input,output) +#endif + end subroutine IBM_GetDistanceOutsideBox + + subroutine SetDistances( BandRegion4Distance, elements ) + use MPI_Process_Info + implicit none + !-arguments--------------------------------------------------- + type(IBMpoints), intent(inout) :: BandRegion4Distance + type(element), intent(inout) :: elements(:) + !-local-variables--------------------------------------------- + integer :: i +!$omp parallel +!$omp do schedule(runtime) + do i = 1, BandRegion4Distance% NumOfObjs + BandRegion4Distance% x(i)% Dist = sqrt(BandRegion4Distance% x(i)% Dist) + if( BandRegion4Distance% x(i)% partition .eq. MPI_Process% rank ) then + elements(BandRegion4Distance% x(i)% element_index)% geom% & + dWall(BandRegion4Distance% x(i)% local_Position(1), & + BandRegion4Distance% x(i)% local_Position(2), & + BandRegion4Distance% x(i)% local_Position(3) ) = BandRegion4Distance% x(i)% Dist + elements(BandRegion4Distance% x(i)% element_index)% geom% & + normal(:, BandRegion4Distance% x(i)% local_Position(1), & + BandRegion4Distance% x(i)% local_Position(2), & + BandRegion4Distance% x(i)% local_Position(3) ) = BandRegion4Distance% x(i)% normal + elements(BandRegion4Distance% x(i)% element_index)% & + STL(BandRegion4Distance% x(i)% local_Position(1), & + BandRegion4Distance% x(i)% local_Position(2), & + BandRegion4Distance% x(i)% local_Position(3) ) = BandRegion4Distance% x(i)% STLNum + end if + end do +!$omp end do +!$omp end parallel + + deallocate( BandRegion4Distance% x) + + end subroutine SetDistances +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! Source terms for the immersed boundary +! ------------------------------------------------ + subroutine IBM_SourceTerm( this, eID, Q, Q_target, Source, Wallfunction ) + use PhysicsStorage + implicit none + !-arguments-------------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: eID + real(kind=rp), intent(in) :: Q(:) + real(kind=rp), optional, intent(in) :: Q_target(:) + real(kind=rp), intent(inout) :: Source(:) + logical, intent(in) :: Wallfunction + !-local-variables-------------------------------------- + real(kind=rp) :: rho, rho_s, u, u_s, v, v_s, w, w_s +#if defined(SPALARTALMARAS) + real(kind=rp) :: theta, theta_s +#endif + Source = 0.0_RP +#if defined(NAVIERSTOKES) + if( present(Q_target) ) then + rho_s = Q_target(IRHO) + u_s = Q_target(IRHOU)/rho_s + v_s = Q_target(IRHOV)/rho_s + w_s = Q_target(IRHOW)/rho_s +#if defined(SPALARTALMARAS) + theta_s = Q_target(IRHOTHETA)/rho_s +#endif + else + rho_s = Q(IRHO) + u_s = 0.0_RP + v_s = 0.0_RP + w_s = 0.0_RP +#if defined(SPALARTALMARAS) + theta_s = 0.0_RP +#endif + end if + + rho = Q(IRHO) + u = Q(IRHOU)/rho + v = Q(IRHOV)/rho + w = Q(IRHOW)/rho + + Source(IRHOU) = rho*u-rho_s*u_s + Source(IRHOV) = rho*v-rho_s*v_s + Source(IRHOW) = rho*w-rho_s*w_s + Source(IRHOE) = 0.5_RP * rho*( POW2(u) + POW2(v) + POW2(w) ) & + -0.5_RP * rho_s*( POW2(u_s) + POW2(v_s) + POW2(w_s) ) +#if defined(SPALARTALMARAS) + theta = Q(IRHOTHETA)/rho + Source(IRHOTHETA) = rho*theta - rho_s*theta_s +#endif +#endif + if( Wallfunction ) then + Source = -1.0_RP/(this% penalCoeff * this% penalization(eID)) * Source + else + Source = -1.0_RP/this% penalization(eID) * Source + end if + end subroutine IBM_SourceTerm +! +! Analytical jacobian: dS/dQ +! --------------------------- + subroutine IBM_semiImplicitJacobian( this, eID, Q, dS_dQ ) + use PhysicsStorage + implicit none + !-arguments---------------------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: eID + real(kind=rp), intent(in) :: Q(:) + real(kind=rp), intent(inout) :: dS_dQ(:,:) + !-local-variables---------------------------------------------- + real(kind=rp) :: rho, u, v, w + + dS_dQ = 0.0_RP +#if defined(NAVIERSTOKES) + rho = Q(IRHO) + u = Q(IRHOU)/rho + v = Q(IRHOV)/rho + w = Q(IRHOW)/rho + + dS_dQ(IRHOU,IRHOU) = 1.0_RP + dS_dQ(IRHOV,IRHOV) = 1.0_RP + dS_dQ(IRHOW,IRHOW) = 1.0_RP + dS_dQ(IRHOE,IRHO:IRHOE) = (/ -0.5_RP*( POW2(u) + POW2(v) + POW2(w) ), & + u, v, w, 0.0_RP /) +#if defined(SPALARTALMARAS) + dS_dQ(IRHOTHETA,IRHOTHETA) = 1.0_RP +#endif +#endif + dS_dQ = -1.0_RP/this% penalization(eID) * dS_dQ + + end subroutine IBM_semiImplicitJacobian + + subroutine IBM_semiImplicitTurbulenceJacobian( this, ImagePoint, Q, normal, dWall, STLNum, dS_dQ ) + use PhysicsStorage + implicit none + !-arguments----------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(point_type), intent(in) :: ImagePoint + real(kind=rp), intent(in) :: Q(:), dWall, normal(:) + integer, intent(in) :: STLNum + real(kind=rp), intent(inout) :: dS_dQ(:,:) + !-local-variables----------------------------------------------------------- + real(kind=rp) :: Q_IP(NCONS), Q_FP(NCONS), Qnext(NCONS), & + Q_IPnext(NCONS), Q_FPnext(NCONS), & + dS_dQt(NCONS,NCONS), iP(NDIM), eps + integer :: i + + do i = 1, NCONS + Q_IP(i) = GetInterpolatedValue( this% BandRegion(STLNum)% Q(i,ImagePoint% nearestPoints), & + ImagePoint% invPhi, & + ImagePoint% b ) + end do + + Q_FP = Q +#if defined(NAVIERSTOKES) + call ForcingPointState( Q_IP, this% IP_Distance, dWall, normal, Q_FP ) +#endif + eps = sqrt(EPSILON(eps)) + + do i = 1, NCONS + Q_FPnext = Q; Q_IPnext = Q_IP + Q_IPnext(i) = Q_IP(i) + eps +#if defined(NAVIERSTOKES) + call ForcingPointState( Q_IPnext, this% IP_Distance, dWall, normal, Q_FPnext ) +#endif + dS_dQ(:,i) = (Q_FPnext - Q_FP)/eps + end do + + dS_dQ = -1.0_RP/(this% penalCoeff*this% penalization(ImagePoint% element_index)) * dS_dQ + + end subroutine IBM_semiImplicitTurbulenceJacobian +! +! Analytical inverse jacobian: (1 - dt*dS/dQ)^(-1) +! -------------------------------------------------- + subroutine IBM_semiImplicitShiftJacobian( this, eID, Q, dt, invdS_dQ ) + use PhysicsStorage + implicit none + !-arguments---------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: eID + real(kind=rp), intent(in) :: Q(:) + real(kind=rp), intent(in) :: dt + real(kind=rp), intent(inout) :: invdS_dQ(:,:) + !-local-variables---------------------------------------------------------- + real(kind=rp) :: rho, u, v, w + + invdS_dQ = 0.0_RP + + associate( eta => this% penalization(eID) ) +#if defined(NAVIERSTOKES) + rho = Q(IRHO) + u = Q(IRHOU)/rho + v = Q(IRHOV)/rho + w = Q(IRHOW)/rho + + invdS_dQ(IRHO,IRHO) = 1.0_RP + invdS_dQ(IRHOU,IRHOU) = eta/( dt + eta ) + invdS_dQ(IRHOV,IRHOV) = eta/( dt + eta ) + invdS_dQ(IRHOW,IRHOW) = eta/( dt + eta ) + invdS_dQ(IRHOE,IRHO:IRHOE) = (/ 0.5_RP*dt/eta * (POW2(u) + POW2(v) + POW2(w)), & + -dt*u/(dt + eta), & + -dt*v/(dt + eta), & + -dt*w/(dt + eta), & + 1.0_RP /) +#if defined(SPALARTALMARAS) + invdS_dQ(IRHOTHETA,IRHOTHETA) = eta/( dt + eta ) +#endif +#endif + end associate + + end subroutine IBM_SemiImplicitShiftJacobian +! +! (1/dt - dS_dQt) +! + subroutine IBM_SemiImplicitTurbulenceShiftJacobian( this, dt, invdS_dQ ) + use PhysicsStorage + implicit none + !-arguments----------------------------------- + class(IBM_type), intent(inout) :: this + real(kind=RP), intent(in) :: dt + real(kind=RP), intent(inout) :: invdS_dQ(:,:) + !-local-variables----------------------------- + integer :: i + + invdS_dQ = dt*invdS_dQ + + do i = 1, NCONS + invdS_dQ(i,i) = 1.0_RP + invdS_dQ(i,i) + end do + + end subroutine IBM_SemiImplicitTurbulenceShiftJacobian +! +! Second order Strang splitting correction Q^*. (1/dt - dS/dQ)^(-1)*Q^* = Q + dt*(S - dS/dQ*Q^*) +! ------------------------------------------------------------------------------------------------ + subroutine IBM_GetSemiImplicitStep( this, eID, dt, Q ) + use PhysicsStorage + implicit none + !-arguments----------------------------------------------------- + class(IBM_type), intent(inout) :: this + integer, intent(in) :: eID + real(kind=rp), intent(in) :: dt + real(kind=rp), intent(inout) :: Q(:) + !-local-variables----------------------------------------------- + real(kind=rp) :: dS_dQ(NCONS,NCONS), invdS_dQ(NCONS,NCONS), & + IBMSource(NCONS) + + call this% semiImplicitJacobian( eID, Q, dS_dQ ) + + call this% semiImplicitShiftJacobian( eID, Q, dt, invdS_dQ ) + call this% SourceTerm(eID = eID, Q = Q, Source = IBMSource, Wallfunction =.false.) + + Q = matmul(invdS_dQ, Q + dt*( IBMSource - matmul(dS_dQ,Q) )) + + end subroutine IBM_GetSemiImplicitStep +! +! Second order Strang splitting correction Q^*. (1/dt - dS/dQ)^(-1)*Q^* = Q + dt*(S - dS/dQ*Q^*) +! ------------------------------------------------------------------------------------------------ + subroutine IBM_GetSemiImplicitStepTurbulence( this, ImagePoint, dt, Q, normal, dWall, STLNum ) + use PhysicsStorage + use DenseMatUtilities + implicit none + !-arguments------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(point_type), intent(in) :: ImagePoint + real(kind=rp), intent(in) :: dt, normal(:), dWall + integer, intent(in) :: STLNum + real(kind=rp), intent(inout) :: Q(:) + !-local-variables------------------------------------------------- + real(kind=rp) :: dS_dQ(NCONS,NCONS), invdS_dQ(NCONS,NCONS), & + TurbulenceSource(NCONS) + + call this% semiImplicitTurbulenceJacobian( ImagePoint, Q, normal, dWall, STLNum, dS_dQ ) + + invdS_dQ = -dS_dQ + + call this% SemiImplicitTurbulenceShiftJacobian( dt, invdS_dQ ) + + invdS_dQ = inverse(invdS_dQ) + + call this% SourceTermTurbulence( ImagePoint, Q, normal, dWall, STLNum, TurbulenceSource ) + + Q = matmul(invdS_dQ, Q + dt*( TurbulenceSource - matmul(dS_dQ,Q) )) + + end subroutine IBM_GetSemiImplicitStepTurbulence +! +! Splitting correction is applied. In the splitting, dt = dt/2 +! ------------------------------------------------------------ + subroutine IBM_SemiImplicitCorrection( this, elements, dt ) + + implicit none + !-arguments----------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(inout) :: elements(:) + real(kind=RP), intent(in) :: dt + !-local-variables----------------------------- + integer :: eID, i, j, k, iP + + if( .not. this% semiImplicit ) return + + if( this% Wallfunction ) call this% GetBandRegionStates( elements ) +!$omp parallel +!$omp do schedule(runtime) private(i,j,k) + do eID = 1, SIZE( elements ) + associate(e => elements(eID)) + do i = 0, e% Nxyz(1); do j = 0, e% Nxyz(2); do k = 0, e% Nxyz(3) + if( e% isInsideBody(i,j,k) ) call this% GetSemiImplicitStep( eID, 0.5_RP*dt, e% storage% Q(:,i,j,k) ) + end do; end do; end do + end associate + end do +!$omp end do + if( this% Wallfunction ) then +!$omp do schedule(runtime) private(i,j,k) + do iP = 1, this% NumOfForcingPoints + associate( e => elements(this% ImagePoints(iP)% element_index)) + i = this% ImagePoints(iP)% local_position(1) + j = this% ImagePoints(iP)% local_position(2) + k = this% ImagePoints(iP)% local_position(3) + call this% GetSemiImplicitStepTurbulence( this% ImagePoints(iP), 0.5_RP*dt, e% storage% Q(:,i,j,k), & + e% geom% normal(:,i,j,k), e% geom% dWall(i,j,k), e% STL(i,j,k) ) + end associate + end do +!$omp end do + end if +!$omp end parallel + end subroutine IBM_SemiImplicitCorrection + + subroutine IBM_GetBandRegionStates( this, elements ) + use PhysicsStorage + implicit none + !-arguments----------------------------------------------- + class(IBM_type), intent(inout) :: this + type(element), intent(in) :: elements(:) + !-local-variables----------------------------------------- + integer :: STLNum + + do STLNum = 1, this% NumOfSTL + call this% BandPoint_state( elements, STLNum, .false. ) + end do + + end subroutine IBM_GetBandRegionStates +! +! Turbulent source term when wall function is applied +! --------------------------------------------------- + subroutine IBM_SourceTermTurbulence( this, ImagePoint, Q, normal, dWall, STLNum, TurbulenceSource ) + use PhysicsStorage + use NodalStorageClass, only: NodalStorage + implicit none + !-arguments----------------------------------------------------------------- + class(IBM_type), intent(inout) :: this + type(point_type), intent(in) :: ImagePoint + real(kind=rp), intent(in) :: Q(:), dWall, normal(:) + integer, intent(in) :: STLNum + real(kind=rp), intent(inout) :: TurbulenceSource(NCONS) + !-local-variables----------------------------------------------------------- + real(kind=rp) :: Q_IP(NCONS), Q_FP(NCONS), iP(NDIM) + integer :: i + + do i = 1, NCONS + Q_IP(i) = GetInterpolatedValue( this% BandRegion(STLNum)% Q(i,ImagePoint% nearestPoints), & + ImagePoint% invPhi, & + ImagePoint% b ) + end do + + Q_FP = Q +#if defined(NAVIERSTOKES) + call ForcingPointState( Q_IP, this% IP_Distance, dWall, normal, Q_FP ) +#endif + call this% SourceTerm( ImagePoint% element_index, Q, Q_FP, TurbulenceSource, .true. ) + + !TurbulenceSource = -1.0_RP/(1.0_RP*this% penalization(ImagePoint% element_index)) * (Q - Q_FP) + + end subroutine IBM_SourceTermTurbulence +! +! State to be imposed on the forcing points due to the wall model +! --------------------------------------------------------------- +#if defined(NAVIERSTOKES) + subroutine ForcingPointState( Q_IP, y_IP, y_FP, normal, Q_FP ) + use PhysicsStorage + use WallFunctionDefinitions + use WallFunctionBC + use VariableConversion + use SpallartAlmarasTurbulence + use FluidData + implicit none + !-arguments-------------------------------------------------------------- + real(kind=rp), intent(in) :: Q_IP(:), normal(:) + real(kind=rp), intent(in) :: y_IP, y_FP + real(kind=rp), intent(inout) :: Q_FP(:) + !-local-variables-------------------------------------------------------- + real(kind=rp) :: nu_IP, nu_FP, mu_IP, mu_FP, T_IP, T_FP, & + u_tau, u_IP(NDIM), u_IPt, u_FPt, & + u_FPn, u_FP(NDIM), u_IP_t(NDIM), & + tangent(NDIM), yplus_FP, nu_tilde, & + kappa_IP, kappa_FP +#if defined(SPALARTALMARAS) + real(kind=rp) :: Dump, chi, fv1, nu_t +#endif + call get_laminar_mu_kappa(Q_IP,mu_IP,kappa_IP) + nu_IP = mu_IP/Q_IP(IRHO) + + u_IP = Q_IP(IRHOU:IRHOW)/Q_IP(IRHO) + + u_IP_t = u_IP - (dot_product(u_IP,normal) * normal) + + if( almostEqual(norm2(u_IP_t),0.0_RP) ) return + + tangent = u_IP_t/norm2(u_IP_t) + + u_IPt = dot_product(u_IP,tangent) + + u_tau = u_tau_f(u_IPt, y_IP, nu_IP, u_tau0=.1_RP) + + call get_laminar_mu_kappa(Q_FP,mu_FP,kappa_FP) + nu_FP = mu_FP/Q_FP(IRHO) + + u_FPt = u_plus_f(y_plus_f(y_FP, u_tau, nu_FP)) * u_tau + + u_FPn = dot_product(u_IP,normal) * y_FP/y_IP + + u_FP = u_FPt*tangent + u_FPn*normal + + T_FP = Temperature(Q_IP) + (dimensionless% Pr)**(1._RP/3._RP)/(2.0_RP*thermodynamics% cp) * (POW2(u_IPt) - POW2(u_FPt)) +#if defined(SPALARTALMARAS) + !yplus_FP = y_plus_f( y_FP, u_tau, nu_FP) + !Dump = POW2(1.0_RP - exp(-yplus_FP/19.0_RP)) + + !chi = QuarticRealPositiveRoot( 1.0_RP, -kappa*u_tau*y_FP*Dump/nu_FP, 0.0_RP, 0.0_RP, -kappa*u_tau*y_FP*Dump/nu_FP*POW3(SAmodel% cv1) ) + + !nu_t = nu_FP * chi + nu_t = kappa * u_tau * y_FP +#endif + ! Q_FP(IRHO) = Pressure(Q_IP)*refvalues% p/(thermodynamics% R * refValues% T * T_FP) + ! Q_FP(IRHO) = Q_FP(IRHO)/refvalues% rho + + Q_FP(IRHOU:IRHOW) = Q_FP(IRHO) * u_FP + + ! Q_FP(IRHOE) = pressure(Q_IP)/( thermodynamics% gamma - 1._RP) + 0.5_RP*Q_FP(IRHO)*(POW2(u_FP(1)) + POW2(u_FP(2)) + POW2(u_FP(3))) + Q_FP(IRHOE) = 0.5_RP*Q_FP(IRHO)*(POW2(u_FP(1)) + POW2(u_FP(2)) + POW2(u_FP(3))) +#if defined(SPALARTALMARAS) + Q_FP(IRHOTHETA) = Q_FP(IRHO) * nu_t +#endif + end subroutine ForcingPointState +#endif +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------- +! Ray tracing +! ------------------------------------------------------------- + subroutine IBM_CheckPoint( this, Point, STLNum, NumOfIntersections ) + use MPI_Process_Info + implicit none + !-arguments------------------------------------------------------------------ + class(IBM_type), intent(inout) :: this + real(kind=rp), intent(inout) :: Point(:) + integer, intent(in) :: STLNum + integer, intent(inout) :: NumOfIntersections + !-local-variables------------------------------------------------------------ + type(KDtree), pointer :: tree + real(kind=rp) :: RayDirection(NDIM), vecAxis(NDIM) + integer :: Axis, minAxis(1), & + lastIndex + logical :: Upward, OnSurface, OnTriBound, delete + type(ObjsDataLinkedList_t) :: Integer_List + + RayDirection = 0.0_RP + + OnSurface = .false.; delete = .false. + + vecAxis = (/OBB(STLNum)% MBR% Length,OBB(STLNum)% MBR% Width,abs(OBB(STLNum)% nMax) + abs(OBB(STLNum)% nMin)/) + + minAxis = minloc(vecAxis) + axis = minAxis(1) + + call RayAxis( this% root(STLNum)% maxAxis, this% ClipAxis, axis ) + + if( Point(axis) .le. 0.0_RP ) then + RayDirection(axis) = -1.0_RP + Upward = .true. + vecAxis(1) = OBB(STLNum)% LocVertices(1,1) + vecAxis(2) = OBB(STLNum)% LocVertices(2,1) + vecAxis(3) = OBB(STLNum)% LocVertices(3,1) + else + RayDirection(axis) = 1.0_RP + Upward = .false. + vecAxis(1) = OBB(STLNum)% LocVertices(1,7) + vecAxis(2) = OBB(STLNum)% LocVertices(2,7) + vecAxis(3) = OBB(STLNum)% LocVertices(3,7) + end if + + Integer_List = ObjsDataLinkedList_t() + + NumOfIntersections = 0; lastIndex = -1 + + do + + call this% root(STLNum)% FindLeaf( Point, tree, .false. ) + + if( tree% index .eq. lastIndex ) then + call this% root(STLNum)% FindLeaf( Point, tree, .true. ) + endif + + lastIndex = tree% index + + call isPointInside( Point, RayDirection, this% root(STLNum)% ObjectsList, tree, Integer_List, NumOfIntersections, OnTriBound ) + + if( OnTriBound ) delete = .true. + + if( Upward ) then + Point(axis) = tree% vertices(axis,1) + if( Point(axis) .le. vecAxis(axis) ) exit + elseif( .not. Upward ) then + Point(axis) = tree% vertices(axis,7) + if( Point(axis) .ge. vecAxis(axis) ) exit + end if + + end do + + if( delete ) NumOfIntersections = NumOfIntersections - 1 + + call integer_List% Destruct() + + end subroutine IBM_CheckPoint +! +! Intersection between a ray an a set of triangles +! ------------------------------------------------ + subroutine isPointInside( Point, RayDirection, ObjectsList, tree, Integer_List, NumOfIntersections, OnTriBound ) + use RealDataLinkedList + use omp_lib + implicit none + !-arguments---------------------------------------------------------------- + real(kind=rp), intent(in) :: Point(:), RayDirection(:) + type(object_type), intent(in) :: ObjectsList(:) + type(KDtree), intent(inout) :: tree + type(ObjsDataLinkedList_t), intent(inout) :: Integer_List + integer, intent(inout) :: NumOfIntersections + logical, intent(inout) :: OnTriBound + !-local-variables---------------------------------------------------------- + logical :: Intersect, found + integer :: i, index + + OnTriBound = .false. + + if( tree% NumOfObjs .eq. 0 ) then + return + end if + + do i = 1, tree% NumOfObjs + index = tree% ObjsIndeces(i) + found = integer_List% Check( index ) + if( .not. found ) then + call Integer_List% Add( index ) + + call PointIntersectTriangle( Point,ObjectsList(index)% vertices(1)% coords, & + ObjectsList(index)% vertices(2)% coords, & + ObjectsList(index)% vertices(3)% coords, & + RayDirection, Intersect, OnTriBound ) + if( Intersect ) then + NumOfIntersections = NumOfIntersections + 1 + end if + end if + end do + + end subroutine isPointInside +! +! This subroutine checks if a ray (RayDirection) starting from a point (Point) intersects +! a triangle in 3D space. If present, the intersection point Q is Q = P + t*RayDirection. +! If there is more than one intersections, the second one is not counted if it has the same t +! as the one previously found. +! See Fast, Minimum Storage Ray/Trinagle INtersection, Moller TRumbore +! -------------------------------------------------------------------------------------------- + subroutine PointIntersectTriangle( Point, TriangleVertex1, TriangleVertex2, & + TriangleVertex3, RayDirection, & + Intersect, OnTriBound ) + use MappedGeometryClass + implicit none + !-arguments--------------------------------------------------------------------------------------- + real(kind=rp), intent(in) :: Point(NDIM), RayDirection(NDIM) + real(kind=rp), intent(in) :: TriangleVertex1(NDIM), TriangleVertex2(NDIM), TriangleVertex3(NDIM) + logical, intent(inout) :: Intersect, OnTriBound + !-local-variables---------------------------------------------------------------------------------- + real(kind=rp) :: E1vec(NDIM), E2vec(NDIM), Pvec(NDIM), & + Qvec(NDIM), Tvec(NDIM), N(NDIM), & + Det, u, v, invDet, t + logical :: isInside + + Intersect = .false. + OnTriBound = .false. + t = -1.0_RP + + E1vec = TriangleVertex2 - TriangleVertex1 + E2vec = TriangleVertex3 - TriangleVertex1 + Tvec = Point - TriangleVertex1 + + call vcross(RayDirection,E2vec,Pvec) + Det = dot_product( E1vec, Pvec ) + + If( almostEqual(Det,0.0_RP) ) return + + call vcross(Tvec,E1vec,Qvec) + + invDet = 1.0_RP/Det + + u = dot_product( Tvec, Pvec )*invDet + + if( u < 0.0_RP .or. u > 1.0_RP ) return + + v = dot_product( RayDirection, Qvec )*invDet + + if( v < 0.0_RP .or. u+v > 1.0_RP ) return + + t = dot_product( E2vec, Qvec )*invDet + + if( almostequal(t,0.0_RP) ) return + + ! Check if the point lies on the boundaries of the triangle + !---------------------------------------------------------- + if( almostEqual(u,0.0_RP) .and. ( v .ge. 0.0_RP .and. v .le. 1.0_RP ) ) OnTriBound = .true. + if( almostEqual(v,0.0_RP) .and. ( u .ge. 0.0_RP .and. u .le. 1.0_RP ) ) OnTriBound = .true. + if( almostEqual(u+v,1.0_RP) ) OnTriBound = .true. + + if( t .gt. 0.0_RP ) Intersect = .true. + + + end subroutine PointIntersectTriangle +! +! Point-triangle intersection (point and triangle are on the same plane) +! ------------------------------------------------ + logical function isPointInsideTri( Point, TriangleVertex1, TriangleVertex2, & + TriangleVertex3 ) result( isInside ) + use MappedGeometryClass + implicit none + !-arguments----------------------------------------------------------------- + real(kind=rp), intent(in) :: Point(:), TriangleVertex1(:), & + TriangleVertex2(:), TriangleVertex3(:) + !-local-variables----------------------------------------------------------- + real(kind=rp) :: bb(NDIM), E0(NDIM), E1(NDIM), dd(NDIM), & + a, b, c, d, e, f, det, s, t + integer :: region + + isInside = .false. + + bb = TriangleVertex1 + E0 = TriangleVertex1 - TriangleVertex2 + E1 = TriangleVertex1 - TriangleVertex3 + dd = bb - Point + + a = dot_product(E0,E0) + b = dot_product(E0,E1) + c = dot_product(E1,E1) + d = dot_product(E0,dd) + e = dot_product(E1,dd) + f = dot_product(dd,dd) + + det = abs( a*c - b*b) + s = (b*e - c*d)/det + t = (b*d - a*e)/det + + region = FindRegion( det, s, t ) + + if( region .eq. 0 ) isInside = .true. + + end function isPointInsideTri + + subroutine RayAxis( maxAxis, ClipAxis, axis ) + implicit none + !-arguments---------------------------------- + integer, intent(in) :: maxAxis, ClipAxis + integer, intent(inout) :: axis + !-local-variables---------------------------- + integer :: vecAxis(NDIM), i + + vecAxis = (/1,2,3/) + + vecAxis(maxAxis) = 0 + if( ClipAxis .ne. 0 ) vecAxis(ClipAxis) = 0 + + if( axis .eq. maxAxis .or. axis .eq. ClipAxis ) then + do i = 1, NDIM + if(vecAxis(i) .eq. 0) cycle + axis = i; exit + end do + end if + + end subroutine RayAxis +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! Procedures for computing the point-STL distance +! ------------------------------------------------- +! +! This function computes the minimum distance from a point to a triangle in 3D. +! for more ditails see https://www.geometrictools.com/Documentation/DistancePoint3Triangle3.pdf +! ------------------------------------------------ + subroutine MinimumPointTriDistance( Point, TriangleVertex1, TriangleVertex2, & + TriangleVertex3, dist, IntersectionPoint ) + use MappedGeometryClass + implicit none + !-arguments-------------------------------------------------------------------- + real(kind=rp), intent(in) :: Point(:), TriangleVertex1(:), & + TriangleVertex2(:), & + TriangleVertex3(:) + real(kind=rp), intent(out) :: IntersectionPoint(NDIM) + real(kind=rp), intent(out) :: dist + !-local-variables-------------------------------------------------------------- + real(kind=rp) :: bb(NDIM), E0(NDIM), E1(NDIM), dd(NDIM), & + a00, a01, a11, b0, b1, f, det, s, t, & + tmp1, tmp0, numer, denom + integer :: region + + bb = TriangleVertex1 + E0 = TriangleVertex2 - bb + E1 = TriangleVertex3 - bb + dd = bb - Point + + a00 = dot_product(E0,E0) + a01 = dot_product(E0,E1) + a11 = dot_product(E1,E1) + b0 = dot_product(dd,E0) + b1 = dot_product(dd,E1) + f = dot_product(dd,dd) + + det = max(a00*a11 - a01*a01,0.0_RP) + s = a01*b1 - a11*b0 + t = a01*b0 - a00*b1 + + + if( s + t <= det ) then + if( s < 0.0_RP ) then + if( t < 0.0_RP ) then !region 4 + if( b0 < 0.0_RP ) then + t = 0.0_RP + if( -b0 >= a00 ) then + s = 1.0_RP + else + s = -b0/a00 + end if + else + s = 0.0_RP + if( b1 >= 0.0_RP ) then + t = 0.0_RP + elseif( -b1 >= a11 ) then + t = 1.0_RP + else + t = -b1/a11 + end if + end if + else !region 3 + s = 0.0_RP + if( b1 >= 0.0_RP ) then + t = 0.0_RP + elseif( -b1 >= a11 ) then + t = 1.0_RP + else + t = -b1/a11 + end if + end if + elseif( t < 0.0_RP ) then !region 5 + t = 0.0_RP + if( b0 >= 0.0_RP ) then + s = 0.0_RP + elseif( -b0 >= a00 ) then + s = 1.0_RP + else + s = -b0/a00 + end if + else !region 0 + s = s/det + t = t/det + end if + else + if( s < 0.0_RP ) then !region 2 + tmp0 = a01 + b0 + tmp1 = a11 + b1 + if (tmp1 > tmp0) then + numer = tmp1 - tmp0 + denom = a00 - 2.0_RP * a01 + a11 + if (numer >= denom) then + s = 1.0_RP + t = 0.0_RP + else + s = numer / denom + t = 1.0_RP - s + end if + else + s = 0.0_RP + if ( tmp1 <= 0.0_RP ) then + t = 1.0_RP + elseif( b1 >= 0.0_RP ) then + t = 0.0_RP + else + t = -b1 / a11 + end if + end if + elseif( t < 0.0_RP ) then !region 6 + tmp0 = a01 + b1 + tmp1 = a00 + b0 + if( tmp1 > tmp0 ) then + numer = tmp1 - tmp0 + denom = a00 - 2.0_RP * a01 + a11 + if (numer >= denom ) then + t = 1.0_RP + s = 0.0_RP + else + t = numer / denom; + s = 1.0_RP - t; + endif + else + t = 0.0_RP + if( tmp1 <= 0.0_RP ) then + s = 1.0_RP + elseif( b0 >= 0.0_RP ) then + s = 0.0_RP + else + s = -b0 / a00 + end if + end if + else ! region 1 + numer = a11 + b1 - a01 - b0 + if( numer <= 0.0_RP ) then + s = 0.0_RP + t = 1.0_RP + else + denom = a00 - 2.0_RP * a01 + a11 + if( numer >= denom ) then + s = 1.0_RP + t = 0.0_RP + else + s = numer / denom + t = 1.0_RP - s + end if + end if + end if + end if + + IntersectionPoint = TriangleVertex1 + s*E0 + t*E1 + + dist = dot_product(Point - IntersectionPoint,Point - IntersectionPoint) + + end subroutine MinimumPointTriDistance +! +! Identification of the section, see below. +! -------------------------------------------------------------------------- +! \ region2 ^t +! \ | +! \ | +! \ | +! \ | +! \ | +! \ | +! \ | +! \ | +! \| +! * +! |\ P2 +! | \ +! | \ +! | \ +! | \ +! | \ +! | \ +! | \ +! | \ +! region3 | \ region1 +! | \ +! | region0 \ +! | \ +! | \ P1 +! ---------------*--------------*------->s +! |P0 \ +! region4 | region5 \ region6 + integer function FindRegion( det, s, t ) result( region ) + implicit none + !-arguments----------------------------- + real(kind=rp), intent(in) :: det, s, t + + if( s+t <= det ) then + if( s < 0 ) then + if( t < 0 ) then + region = 4 + else + region = 3 + end if + elseif( t < 0 ) then + region = 5 + else + region = 0 + end if + else + if( s < 0 ) then + region = 2 + elseif ( t < 0 ) then + region = 6 + else + region = 1 + end if + end if + + end function FindRegion +! +! This subroutine computes the minumum distance from x (global ref. frame) to the body. First, +! the box (tree) where x lies is found, then the min distance between the objects inside the tree and +! the point is computed. If the sphere whose radius is minDist, is enclosed in the box, the subroutine stops. +! If the latter condition is not true, all the boxes that intersects the sphere are checked in the same way as +! the initial one, getting new_minDist. If a lower distance is found, minDist is updated. +! minDist is the SQUARE of the actual distance. +! ------------------------------------------------------------------------------------------------------------- + subroutine MinimumDistance( Point, root, minDist, normal ) + implicit none + !-arguments---------------------------------------------------------- + real(kind=rp), intent(in) :: Point(:) + type(KDtree), intent(inout) :: root + real(kind=rp), intent(inout) :: minDist + real(kind=rp), intent(out) :: normal(NDIM) + !-local-variables----------------------------------------------------- + real(kind=rp) :: IntersPoint(NDIM), new_IntersPoint(NDIM), & + dsvec(NDIM), x(NDIM), P(NDIM), IP(NDIM), & + IntersectionPoint(NDIM), Dist, & + New_minDist, Radius, ds + logical :: Intersect + type(KDtree), pointer :: tree, newGuess + integer :: i, index, LeafIndex, & + TriangleIndex, New_TriangleIndex + + minDist = huge(1.0_RP) + + call root% FindLeaf( Point, tree, .false. ) + + LeafIndex = tree% index + + do i = 1, tree% NumOfObjs + index = tree% ObjsIndeces(i) + + call MinimumPointTriDistance( Point, root% ObjectsList(index)% vertices(1)% coords, & + root% ObjectsList(index)% vertices(2)% coords, & + root% ObjectsList(index)% vertices(3)% coords, Dist, & + IntersPoint ) + + if( Dist .lt. minDist ) then + minDist = Dist + IntersectionPoint = IntersPoint + TriangleIndex = index + end if + end do + + if( tree% NumOfObjs .gt. 0 ) then + ! Check the sphere + !----------------- + Radius = minDist + Intersect = CheckHypersphere( tree, Point, Radius ) + else + print *, "IBM:: MinimumDistance: " + print *, "Can't find triangles in leaf ", LeafIndex + error stop + end if + + nullify(tree) + + if( Intersect ) then + New_minDist = huge(1.0_RP) + call MinimumDistOtherBoxes( Point, root, root, Radius, LeafIndex, New_minDist, New_IntersPoint, New_TriangleIndex ) + if( New_minDist .lt. minDist ) then + minDist = New_minDist + IntersectionPoint = New_IntersPoint + TriangleIndex = New_TriangleIndex + end if + end if + + call OBB(root% STLNum)% ChangeRefFrame( Point, GLOBAL, P ) + call OBB(root% STLNum)% ChangeRefFrame( IntersectionPoint, GLOBAL, IP ) + + normal = (P - IP)/norm2(P - IP) + + end subroutine MinimumDistance +! +! Distance between the point and triangles in other boxes, i.e. not the one containing it +! ----------------------------------------------------------------------------------------- + recursive subroutine MinimumDistOtherBoxes( Point, root, tree, Radius, LeafIndex, & + New_minDist, New_IntersPoint, New_TriangleIndex ) + + implicit none + !-arguments----------------------------------------------- + real(kind=rp), intent(in) :: Point(:) + type(KDtree), intent(in) :: root + type(KDtree), intent(inout) :: tree + real(kind=rp), intent(in) :: Radius + integer, intent(in) :: LeafIndex + real(kind=rp), intent(inout) :: New_minDist + real(kind=rp), intent(inout) :: New_IntersPoint(:) + integer, intent(inout) :: New_TriangleIndex + !-local-variables----------------------------------------- + real(kind=rp) :: IntersPoint(NDIM), Dist + logical :: Intersect + integer :: i, index + + Intersect = BoxIntersectSphere( Radius, Point, tree% vertices ) + + if( Intersect ) then + if( tree% isLast ) then + if( LeafIndex .ne. tree% index ) then + do i = 1, tree% NumOfObjs + index = tree% ObjsIndeces(i) + call MinimumPointTriDistance( Point, root% ObjectsList(index)% vertices(1)% coords, & + root% ObjectsList(index)% vertices(2)% coords, & + root% ObjectsList(index)% vertices(3)% coords, Dist, & + IntersPoint ) + if( Dist .lt. New_minDist ) then + New_minDist = Dist + New_IntersPoint = IntersPoint + New_TriangleIndex = index + end if + end do + end if + else + call MinimumDistOtherBoxes( Point, root, tree% child_L, & + Radius, LeafIndex, New_minDist, & + New_IntersPoint, New_TriangleIndex ) + call MinimumDistOtherBoxes( Point, root, tree% child_R, & + Radius, LeafIndex, New_minDist, & + New_IntersPoint, New_TriangleIndex ) + end if + end if + + end subroutine MinimumDistOtherBoxes + + subroutine MinimumDistanceSphereKDtree( Point, root, Radius, minDist, normal ) + implicit none + !-arguments---------------------------------------- + real(kind=rp), intent(in) :: Point(:), Radius + type(KDtree), intent(inout) :: root + real(kind=rp), intent(inout) :: minDist + real(kind=rp), intent(out) :: normal(NDIM) + !-local-variables---------------------------------- + real(kind=RP) :: P(NDIM), IP(NDIM), & + IntersectionPoint(NDIM) + integer :: TriangleIndex + + minDist = huge(1.0_RP) + + if( .not. BoxIntersectSphere( Radius, Point, root% vertices ) ) return + + call MinimumDistOtherBoxes( Point, root, root, Radius, 0, minDist, & + IntersectionPoint, TriangleIndex ) + + call OBB(root% STLNum)% ChangeRefFrame( Point, GLOBAL, P ) + call OBB(root% STLNum)% ChangeRefFrame( IntersectionPoint, GLOBAL, IP ) + + normal = (P - IP)/norm2(P - IP) + + end subroutine MinimumDistanceSphereKDtree + + +! +! Once the first distance is found, a sphere whose radius is equal to the distance is computed. If +! it lies inside the starting box, nothing is done; otherwise the boxes intersecting the sphere are +! selected +! --------------------------------------------------------------------------------------------------- + logical function CheckHypersphere( tree, Point, minDist) result( Intersect ) + + implicit none + !-arguments----------------------------------------------------- + real(kind=rp), intent(in) :: Point(:) + type(KDtree), target, intent(inout) :: tree + real(kind=rp), intent(inout) :: minDist + + Intersect = BoxIntersectSphere( minDist, Point, tree% vertices ) + + end function CheckHypersphere +! +! Circle-triangle intersection +! --------------------------------------------------------- + logical function CircleRectIntersection( RectLength, RectWidth, RectCenter, Center, Radius ) result( Intersect ) + + implicit none + !-arguments------------------------------------------------ + real(kind=rp), intent(in) :: RectCenter(:), Center(:) + real(kind=rp), intent(in) :: RectLength, RectWidth, Radius + !-local-variables------------------------------------------ + real(kind=rp) :: d(2) + + Intersect = .false. + + d = Center - RectCenter + + If( abs(d(1)) .gt. 0.5_RP*RectLength + Radius ) return + If( abs(d(2)) .gt. 0.5_RP*RectWidth + Radius ) return + + if( abs(d(1)) .le. 0.5_RP*RectLength .and. & + abs(d(2)) .le. 0.5_RP*RectWidth ) then + Intersect = .true. + return + end if + + if( POW2(abs(d(1)) - 0.5_RP*RectLength) + POW2(abs(d(2)) - 0.5_RP*RectWidth) .le. & + POW2(Radius) ) Intersect = .true. + + end function CircleRectIntersection +! +! Point-box distance +! ------------------------------------------------ + real(kind=rp) function PointBoxDistance( Point, vertices ) result( sqrDist ) + + implicit none + !-arguments-------------------------------- + real(kind=rp), intent(in) :: Point(:) + real(kind=rp), intent(in) :: vertices(:,:) + !-local-variables-------------------------- + integer :: i + + sqrDist = 0.0_RP + + ! if the point's x-coordinate (xp) is less than the x-min coord. of the box, then + ! the minimum distance on the x-dir is the distance between the xp and x-min, or + ! vertices(i,1) - x-coordinate. The following loop avoids the computation of the point + ! with the minimum distance from P. If the point P is inside the box, sqrDist = 0. + !-------------------------------------------------------------------------------------- + do i = 1, NDIM + if( Point(i) .lt. minval(vertices(i,:)) ) sqrDist = sqrDist + POW2(minval(vertices(i,:))-Point(i)) + if( Point(i) .gt. maxval(vertices(i,:)) ) sqrDist = sqrDist + POW2(Point(i)-maxval(vertices(i,:))) + end do + + end function PointBoxDistance +! +! Sphere-box intersection, the radius must be SQUARED +! ------------------------------------------------ + logical function BoxIntersectSphere( Radius, Center, vertices ) result( Intersect ) + + implicit none + !-arguments------------------------------------------- + real(kind=rp), intent(in) :: vertices(:,:) + real(kind=rp), intent(in) :: Center(:) + real(kind=rp), intent(in) :: Radius + !-local-variables------------------------------------- + real(kind=rp) :: sqrDist + + Intersect = .false. + sqrDist = PointBoxDistance( Center, vertices ) + + if( sqrDist .le. Radius ) Intersect = .true. + + end function BoxIntersectSphere +! +! Nearest-neighbor algorithm for selecting the DoFs closer to Point. +! -------------------------------------------------------------------- + subroutine MinimumDistancePoints( Point, root, BandRegion, minDist, actualIndex, PointsIndex ) + use ElementClass + implicit none + !-arguments------------------------------------------------------- + real(kind=rp), intent(in) :: Point(:) + type(KDtree), intent(inout) :: root + type(IBMpoints), intent(in) :: BandRegion + real(kind=rp), intent(inout) :: minDist + integer, intent(in) :: actualIndex + integer, intent(inout) :: PointsIndex(:) + !-local-variables------------------------------------------------- + real(kind=rp) :: BandPoint(NDIM), sqrDist, & + New_sqrDist, Radius + logical :: Intersect + type(KDtree), pointer :: tree + integer :: i, LeafIndex, new_index, k + + minDist = huge(1.0_RP) + + call root% FindLeaf( Point, tree, .false. ) + + LeafIndex = tree% index + + do i = 1, tree% NumOfObjs + + if( any(PointsIndex .eq. tree% ObjsIndeces(i)) ) cycle + + BandPoint = BandRegion% x(tree% ObjsIndeces(i))% coords + + sqrDist = 0.0_RP + do k = 1, NDIM + sqrDist = sqrDist + POW2(Point(k) - BandPoint(k)) + end do + + if( sqrDist .lt. minDist .or. almostEqual(sqrDist,minDist) ) then + minDist = sqrDist + PointsIndex(actualIndex) = tree% ObjsIndeces(i) + end if + + end do + + if( tree% NumOfObjs .gt. 0 ) then + ! Check the sphere + !----------------- + if( PointsIndex(actualIndex) .eq. 0 ) then + BandPoint = BandRegion% x(PointsIndex(actualIndex-1))% coords + else + BandPoint = BandRegion% x(PointsIndex(actualIndex))% coords + end if + + sqrDist = 0.0_RP + do k = 1, NDIM + sqrDist = sqrDist + POW2(Point(k) - BandPoint(k)) + end do + + Radius = sqrDist !minDist + Intersect = CheckHypersphere( tree, Point, Radius ) + else + print *, "IBM:: MinimumDistance: " + print *, "Can't find triangles in leaf ", LeafIndex + error stop + end if + + nullify(tree) + + if( Intersect ) then + New_sqrDist = huge(1.0_RP) + call MinimumDistOtherBoxesPoints( Point, root, BandRegion, Radius, & + New_sqrDist, PointsIndex, & + LeafIndex, new_index ) + if( New_sqrDist .le. minDist ) then + minDist = New_sqrDist; PointsIndex(actualIndex) = new_index + end if + end if + + minDist = sqrt(minDist) + + end subroutine MinimumDistancePoints +! +! Distance between the point and DoFs in other boxes, i.e. not the one containing it +! ----------------------------------------------------------------------------------------- + recursive subroutine MinimumDistOtherBoxesPoints( Point, tree, BandRegion, Radius, & + New_sqrDist, PointsIndex, & + LeafIndex, new_index ) + use elementClass + implicit none + !-arguments--------------------------------------------------- + real(kind=rp), intent(in) :: Point(:) + type(KDtree), intent(inout) :: tree + type(IBMpoints), intent(in) :: BandRegion + real(kind=rp), intent(in) :: Radius + real(kind=rp), intent(inout) :: New_sqrDist + integer, intent(inout) :: new_index + integer, intent(in) :: PointsIndex(:) + integer, intent(in) :: LeafIndex + !-local-variables--------------------------------------------- + real(kind=rp) :: sqrDist, BandPoint(NDIM) + logical :: Intersect + integer :: i, k + + Intersect = BoxIntersectSphere( Radius, Point, tree% vertices ) + + if( Intersect ) then + if( tree% isLast ) then + if( LeafIndex .ne. tree% index ) then + do i = 1, tree% NumOfObjs + + if( any(PointsIndex .eq. tree% ObjsIndeces(i)) ) cycle + + BandPoint = BandRegion% x(tree% ObjsIndeces(i))% coords + + sqrDist = 0.0_RP + do k = 1, NDIM + sqrDist = sqrDist + POW2(Point(k) - BandPoint(k)) + end do + + if( sqrDist .lt. New_sqrDist .or. almostEqual(sqrDist,New_sqrDist) )then + New_sqrDist = sqrDist + new_index = tree% ObjsIndeces(i) + end if + + end do + end if + else + call MinimumDistOtherBoxesPoints( Point, tree% child_L, BandRegion, & + Radius, New_sqrDist,PointsIndex, & + LeafIndex, new_index ) + call MinimumDistOtherBoxesPoints( Point, tree% child_R, BandRegion, & + Radius, New_sqrDist, PointsIndex, & + LeafIndex, new_index ) + end if + end if + + end subroutine MinimumDistOtherBoxesPoints + + + subroutine GetMatrixInterpolationSystem( Point, x, invPhi, b, INTERPOLATION ) + use DenseMatUtilities + implicit none + !-arguments------------------------------------ + real(kind=RP), intent(in) :: Point(:) + type(point_type), intent(in) :: x(:) + real(kind=RP), intent(inout) :: invPhi(:,:), b(:) + integer, intent(in) :: INTERPOLATION + !-local-variables------------------------------ + real(kind=RP) :: Phi(size(b),size(b)), & + dist(size(b),size(b)), & + diag, d + integer :: i, j + + select case( INTERPOLATION ) + case( EXPONENTIAL ) + do i = 1, size(x) + do j = i, size(x) + dist(i,j) = norm2(x(i)% coords - x(j)% coords) + dist(j,i) = dist(i,j) + end do + end do + + expCoeff = maxval(dist) + + do i = 1, size(x) + do j = i, size(x) + Phi(i,j) = interpolationfunction(dist(i,j)) + Phi(j,i) = Phi(i,j) + end do + b = interpolationfunction(norm2(Point - x(i)% coords)) + end do + invPhi = inverse(Phi) + case( IDW ) + b = 0.0_RP; invPhi = 0.0_RP + do i = 1, size(x) + d = norm2(Point - x(i)% coords) + invPhi(i,i) = 1.0_RP/d + b = b + invPhi(i,i) + end do + do i = 1, size(x) + b(i) = 1.0_RP/b(i) + end do + end select + + end subroutine GetMatrixInterpolationSystem + + real(kind=RP) function interpolationfunction(x) result(f) + implicit none + real(kind=RP), intent(in) :: x + + f = exp(-POW2(x/expCoeff)) + + end function interpolationfunction + + real(kind=RP) function GetInterpolatedValue( variable, invPhi, b ) result(value) + implicit none + !-arguments------------------------------------------------ + real(kind=RP), intent(in) :: variable(:), invPhi(:,:), b(:) + !-local-variables------------------------------------------ + real(kind=RP) :: weights(size(b)) + + value = dot_product(matmul(invPhi,variable),b) + + end function GetInterpolatedValue +! +! Inverse Distance Weighting interpolation +! ---------------------------------------- + subroutine GetIDW_value( Point, x, Q, value ) + use PhysicsStorage + use MappedGeometryClass + implicit none + !-arguments---------------------------------------------------- + real(kind=RP), intent(in) :: Point(:) + type(point_type), intent(in) :: x(:) + real(kind=RP), intent(in) :: Q(:,:) + real(kind=RP), intent(out) :: value(NCONS) + !-local-variables---------------------------------------------- + real(kind=RP) :: DistanceNormal(NDIM), d, & + distanceSqr, sqrd1, & + num(NCONS), den, xP(NDIM) + real(kind=RP), parameter :: eps = 1.0d-10 + integer :: i, k + + num = 0.0_RP; den = 0.0_RP + + do i = 1, size(x) + + d = norm2(x(i)% coords - Point) + + num = num + Q(:,i)/(d+eps) + den = den + 1.0_RP/(d+eps) + + end do + + value = num/den + + end subroutine GetIDW_value + +! estimate the yplus for a flat plate + + real(kind=RP) function InitializeDistance( y_plus ) result( y ) + use FluidData + implicit none + !-arguments-------------------------- + real(kind=rp), intent(in) :: y_plus + !-local-varirables------------------- + real(kind=RP) :: nu, Cf + + y = 0.0_RP +#if defined(NAVIERSTOKES) + nu = refValues% mu / refValues% rho +#endif + Cf = Estimate_Cf() +#if defined(NAVIERSTOKES) + y = sqrt(2.0_RP) * y_plus * nu /(refValues% V * sqrt(Cf)) +#endif + end function InitializeDistance + + real(kind=RP) function Estimate_Cf() result( Cf ) + use FluidData + implicit none + + Cf = 0.0_RP +#if defined(NAVIERSTOKES) + ! Schlichting, Hermann (1979), Boundary Layer Theory... ok if Re < 10^9 +!~ Cf = (2.0_RP*log10(dimensionless% Re) - 0.65_RP)**(-2.3_RP) + Cf = 0.058_RP * dimensionless% Re**(-0.2_RP) +#endif + end function Estimate_Cf + + real(kind=RP) function Estimate_u_tau( ) result( u_tau ) + use FluidData + implicit none + !-local-variables-------------------------------- + real(kind=RP) :: Cf + + u_tau = 0.0_RP + + Cf = Estimate_Cf() +#if defined(NAVIERSTOKES) + u_tau = sqrt( 0.5_RP * POW2(refValues% V) * Cf ) !sqrt(tau_w/rho) +#endif + end function Estimate_u_tau + + real(kind=RP) function GetEstimated_y( y_plus, nu, u_tau ) result( y ) + use PhysicsStorage + implicit none + !-arguments-------------------------------------- + real(kind=RP), intent(in) :: y_plus, nu, u_tau + + y = y_plus * nu / u_tau + + y = y/Lref + + end function GetEstimated_y + + + real(kind=RP) function QuarticRealPositiveRoot(a0, b0, c0, d0, e0) result( value ) + !https://math.stackexchange.com/questions/115631/quartic-equation-solution-and-conditions-for-real-roots + implicit none + !-arguments-------------------------------------- + real(kind=rp), intent(in) :: a0, b0, c0, d0, e0 + !-local-variables-------------------------------- + real(kind=rp) :: a, b, c, d, x, m2, m, n, & + alpha, beta, psi, & + solution(2) + + a = b0/a0; b = c0/a0; c = d0/a0; d = e0/a0 + + x = cubic_poly( 1.0_RP, -b, a*c-4.0_RP*d, d*(4.0_RP*b-POW2(a)) - POW2(c) ) + + m2 = 0.25_RP*POW2(a)-b+x + + if( m2 .gt. 0.0_RP ) then + m = sqrt(m2) + n = (a*x-2.0_RP*c)/(4.0_RP*m) + elseif( almostEqual(m2,0.0_RP) ) then + m = 0.0_RP + n = sqrt(0.25_RP*POW2(x) - d) + else + print *, 'no real roots found' + error stop + end if + + alpha = 0.5_RP*POW2(a) - x - b + + beta = 4.0_RP * n - a * m + + if( (alpha + beta) .ge. 0.0_RP ) then + psi = sqrt(alpha+beta) + solution(1) = -0.25_RP*a + 0.5_RP*m + 0.5_RP*psi + solution(2) = -0.25_RP*a + 0.5_RP*m - 0.5_RP*psi + elseif( (alpha - beta) .ge. 0.0_RP ) then + psi = sqrt(alpha-beta) + solution(1) = -0.25_RP*a - 0.5_RP*m + 0.5_RP*psi + solution(2) = -0.25_RP*a - 0.5_RP*m - 0.5_RP*psi + end if + !take positive solution + value = maxval(solution) + + end function QuarticRealPositiveRoot + + real(KIND=rp) function cubic_poly( a0, b0, c0, d0 ) result( x ) + + implicit none + !-arguments---------------------------------------------- + real(kind=RP), intent(in) :: a0, b0, c0, d0 + !-local-variables---------------------------------------- + real(kind=RP) :: a, b, c, Jac, x0, q, r + real(kind=RP) :: theta, m, s, txx + integer :: i + + + a = b0/a0; b = c0/a0; c = d0/a0 + + x0 = 1.0_RP + + do i = 1, 100 + + Jac = 3.0_RP*a0*POW2(x0) + 2.0_RP*b0*x0 + c0 + + x = x0 - eval_cubic(a0, b0, c0, d0, x0)/Jac + + if( abs(x-x0) .lt. 1.0E-10_RP ) return + + x0 = x + + end do + + print *, "cubic_poly:: Newtown method doesn't coverge" + error stop + + end function cubic_poly + + real(kind=RP) function eval_cubic( a0, b0, c0, d0, x0 ) result( value ) + + implicit none + !-arguments---------------------------------- + real(kind=RP), intent(in) :: a0, b0, c0, d0, x0 + + value = a0*POW3(x0) + b0*POW2(x0) + c0*x0 + d0 + + end function eval_cubic +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! --------------------------------------------------- +! Subourinte for generating a .tec file with forces +! --------------------------------------------------- + subroutine STLScalarTEC( x, y, z, scalar, STLNum, FileName, title, variables ) + + implicit none + !-arguments-------------------------------------------------- + real(kind=RP), intent(in) :: x(:), y(:), z(:), scalar(:) + integer, intent(in) :: STLNum + character(len=*), intent(in) :: FileName, title, variables + !-local-variables-------------------------------------------- + integer :: NumOfObjs, funit + + NumOfObjs = size(x) + + call TecHeader( funit, FileName, title, variables ) + call WriteScalarQuatity( funit, NumOfObjs, x, y, z, scalar ) + call TECtriangle_3points( funit, NumOfObjs ) + + close(funit) + + end subroutine STLScalarTEC + + subroutine STLvectorTEC( x, y, z, vector_x, vector_y, vector_z, STLNum, FileName, title, variables ) + + implicit none + !-arguments--------------------------------------------------------- + real(kind=RP), intent(in) :: x(:), y(:), z(:), vector_x(:), & + vector_y(:), vector_z(:) + integer, intent(in) :: STLNum + character(len=*), intent(in) :: FileName, title, variables + !-local-variables-------------------------------------------------- + integer :: NumOfObjs, funit + + NumOfObjs = size(x) + + call TecHeader( funit, FileName, title, variables ) + call WriteVectorQuatity( funit, NumOfObjs, x, y, z, vector_x, vector_y, vector_z ) + call TECtriangle_3points( funit, NumOfObjs ) + + close(funit) + + end subroutine STLvectorTEC + + subroutine TecHeader( funit, FileName, title, variables ) + + implicit none + !-arguments------------------- + integer, intent(inout) :: funit + character(len=*), intent(in) :: FileName, title, & + variables + + funit = UnusedUnit() + + open(funit,file='RESULTS/'//trim(FileName), status='unknown') + + write(funit,'(A)') 'Title="' //trim(title)// '"' + write(funit,'(A)') 'Variables='//trim(variables) + + end subroutine TecHeader + + subroutine WriteScalarQuatity( funit, NumOfObjs, x, y, z, scalar ) + + implicit none + !-arguments------------------------------------------------------- + integer, intent(in) :: funit, NumOfObjs + real(kind=RP), intent(in) :: x(:), y(:), z(:), scalar(:) + !-local-variables------------------------------------------------- + integer :: i, j + + write(funit,'(a,i6,a,i6,a)') 'ZONE NODES =', NumOfObjs, ',ELEMENTS =', NumOfObjs/3,', DATAPACKING=POINT, ZONETYPE=FETRIANGLE' + + do i = 1, NumOfObjs + write(funit,'(4g15.6)') x(i), y(i), z(i), scalar(i) + end do + + end subroutine WriteScalarQuatity + + subroutine WriteVectorQuatity( funit, NumOfObjs, x, y, z, vector_x, vector_y, vector_z ) + + implicit none + !-arguments--------------------------------------------------------- + integer, intent(in) :: funit, NumOfObjs + real(kind=RP), intent(in) :: x(:), y(:), z(:), vector_x(:), & + vector_y(:), vector_z(:) + !-local-variables--------------------------------------------------- + integer :: i, j + + write(funit,'(a,i6,a,i6,a)') 'ZONE NODES=', NumOfObjs, ',ELEMENTS =', NumOfObjs/3,', DATAPACKING=POINT, ZONETYPE=FETRIANGLE' + + do i = 1, NumOfObjs + write (funit,'(6g15.6)') x(i), y(i), z(i), vector_x(i), vector_y(i), vector_z(i) + end do + + end subroutine WriteVectorQuatity + + subroutine WriteTimeFile( t, STLNum ) + use MPI_Process_Info + implicit none + !-arguments--------------------------------------------------------- + real(kind=RP), intent(in) :: t + integer , intent(in) :: STLNum + !-local-variables--------------------------------------------------- + integer :: funit + + if( .not. MPI_Process% isRoot ) return + + funit = UnusedUnit() + + open(funit,file='RESULTS/'//trim(OBB(STLNum)% FileName)//'_time.dat', action = "write" , access = "append" , status = "unknown") + + write(funit,'(1g15.6)') t + + close(funit) + + end subroutine WriteTimeFile + + subroutine TECtriangle_3points( funit, NumOfObjs ) + + implicit none + !-arguments------------------------------------ + integer, intent(in) :: funit, NumOfObjs + !-local-variables------------------------------ + integer :: i, index + + index = 0 + + do i = 1, NumOfObjs/3 + write(funit,'(3i6)') index + 1, index + 2, index + 3 + index = index + 3 + end do + + end subroutine TECtriangle_3points + +end module IBMClass \ No newline at end of file diff --git a/Solver/src/libs/mesh/KDClass.f90 b/Solver/src/libs/mesh/KDClass.f90 index ae45919fc..16b23b068 100644 --- a/Solver/src/libs/mesh/KDClass.f90 +++ b/Solver/src/libs/mesh/KDClass.f90 @@ -1,1745 +1,1813 @@ -module KDClass - - use SMConstants - use Utilities - use TessellationTypes - use OrientedBoundingBox - - implicit none - -!~ 5-----------------8 -!~ /| /| -!~ / | / | -!~ / | / | -!~ 6-----------------7 | -!~ | | | | -!~ | | | | -!~ | | | | -!~ | | | | -!~ | 1-------------|---4 -!~ | / | / | z -!~ | / | / |_______ y -!~ |/ |/ / -!~ 2-----------------3 / x - - public :: LastLevel, BoxIndex - - integer :: BoxIndex, LastLevel = -1, depth, NumOfObjsIndx, NumOfKDtreePoints - - integer, parameter :: side_L = 4, side_R = 0, ON_PLANE = 0, POINTS_KDTREE = 0, TRIANGLES_KDTREE = 1 - integer, parameter :: START_ = 2, END_ = 0, PLANAR_ = 1, ONLYLEFT = 0, ONLYRIGHT = 1, BOTH = 2, ODD = 1, EVEN = 2 - integer, parameter :: BREADTHFIRST = 1, DEPTHFIRST = 0 - - real(kind=rp), parameter :: C_TRANSVERSE = 1.0_RP, C_INTERSECT = 1.5_RP, C_1 = 1.2_RP, C_2 = 2.0_RP - - integer, parameter, dimension(8) :: vertices_x = (/ 1,4,5,8, 2,3,6,7 /), & - vertices_y = (/ 1,2,6,5, 3,4,7,8 /), & - vertices_z = (/ 1,2,3,4, 5,6,7,8 /) - - type Event - - real(kind=rp) :: plane - integer :: eType, index, axis - - end type - -! -! ************************************************** -! Main type for a kd-tree -! ************************************************** - type KDtree - - class(KDtree), pointer :: child_L, child_R, parent - type(Object_type), dimension(:), allocatable :: ObjectsList - real(kind=rp), dimension(3,8) :: vertices - integer :: NumOfObjs, level, axis, & - index, Min_n_of_Objs, & - which_KDtree, MaxAxis, & - SIDE, N_L, N_R, N_B, & - HalfEvents, NumThreads, & - STLNum - logical :: isLast, Split - integer, dimension(NDIM) :: NumOfEvents - real(kind=rp) :: S, SplitCost, SplittingPlane - type(Event), dimension(:,:), allocatable :: Events - integer, dimension(:), allocatable :: ObjsIndeces - - contains - procedure :: construct => KDtree_construct - procedure :: SetUpRoot => KDtree_SetUpRoot - procedure :: FindLeaf => KDtree_FindLeaf - procedure :: plot => KDtree_plot - procedure :: plotBlock => KDtree_plotBlock - procedure :: Destruct => KD_treeDestruct - procedure :: GetArea => KD_treeGetArea - procedure :: BuildChild => KDtree_BuildChild - procedure :: EvaluateCost => KDtree_EvaluateCost - procedure :: SaveObjsIndeces => KDtree_SaveObjsIndeces - procedure :: SavePointsIndeces => KDtree_SavePointsIndeces - - end type - - type DepthFirst_type - - type(KDtree), pointer :: taskTree - type(Event), dimension(:,:), allocatable :: taskEvents - logical :: active = .false. - - end type - - type taskPart_dim_type - - real(kind=RP) :: splittingPlane - integer :: N_L, N_R, N_P, ChunkDim, Starting_index, Values2Check - - end type - - type taskSAH_type - - real(kind=RP) :: SplitCost, splittingPlane - integer :: axis, SIDE - logical :: split = .false. - - end type - - type taskPart_type - - type(taskPart_dim_type), dimension(NDIM) :: taskPartDim - - end type - - contains -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! -------------------------------------------------------------- -! This function computes the index corresponding to the integer i. -! -------------------------------------------------------------- - - integer function AxisIndex( i ) result( axis ) - - implicit none - !-arguments------------- - integer, intent(in) :: i - - if( i .eq. 1 ) axis = 2 - if( i .eq. 2 ) axis = 3 - if( i .eq. 3 ) axis = 1 - - end function AxisIndex -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function computes the longest axis of the OBB. -! ------------------------------------------------- - integer function FindAxis( this ) result( FirstAxis ) - - implicit none - !-arguments - type(KDtree), intent(in) :: this - !-local-variables---------------- - integer, dimension(1) :: maxvec - - maxvec = maxloc( (/ OBB(this% STLNum)% MBR% Length, OBB(this% STLNum)% MBR% Width, & - abs(OBB(this% STLNum)% nMax) + abs(OBB(this% STLNum)% nMin) /) ) - - FirstAxis = maxvec(1) - - end function FindAxis -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ---------------------------------------------------------- -! This subroutine saves and plots the leaves of the KD tree. -! ---------------------------------------------------------- - - recursive subroutine Plot_leaves( tree, STLNum, funit, which_KDtree ) - use PhysicsStorage - implicit none - !-arguments------------------------------ - type(KDtree), intent(inout) :: tree - integer, intent(in) :: STLNum, funit, & - which_KDtree - !-local-variables------------------------ - real(kind=rp), dimension(NDIM) :: x_g - integer :: i - - if( tree% isLast ) then - write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' - select case( which_KDtree ) - case( POINTS_KDTREE ) - do i = 1, 8 - write(funit,'(3E13.5)') Lref*tree% vertices(1,i),Lref*tree% vertices(2,i), Lref*tree% vertices(3,i) - end do - case( TRIANGLES_KDTREE ) - do i = 1, 8 - call OBB(STLNum)% ChangeRefFrame( tree% vertices(:,i), 'global', x_g ) - write(funit,'(3E13.5)') Lref*x_g(1),Lref*x_g(2), Lref*x_g(3) - end do - end select - - write(funit,'(4i2)') 1, 2, 3, 4 - write(funit,'(4i2)') 1, 5, 8, 4 - write(funit,'(4i2)') 5, 6, 7, 8 - write(funit,'(4i2)') 2, 3, 7, 6 - write(funit,'(4i2)') 4, 8, 7, 3 - write(funit,'(4i2)') 1, 2, 6, 5 - - else - call Plot_leaves( tree% child_L, STLNum, funit, which_KDtree ) - call Plot_leaves( tree% child_R, STLNum, funit, which_KDtree ) - end if - - end subroutine Plot_leaves -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine creates a new file call KDtree in which the leaves will be stored. -! ------------------------------------------------ - subroutine KDtree_plot( this ) - use MPI_Process_Info - implicit none - !-arguemnts---------------------------------- - class(KDtree), target, intent(inout) :: this - !-local-variables---------------------------- - real(kind=rp), dimension(NDIM) :: x_g - character(len=LINE_LENGTH) :: filename, myString - integer :: i, funit - - select case( this% which_KDtree ) - case( POINTS_KDTREE ) - if( MPI_Process% isRoot ) then - ! same kdtree for all the processes - funit = UnusedUnit() - - open(funit,file='IBM/KDTreeBandPoints.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "KD-tree"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - call Plot_leaves( this, this% STLNum, funit, this% which_KDtree ) - - close(funit) - - end if - case( TRIANGLES_KDTREE ) - - write(myString,'(i100)') MPI_Process% rank - - if( MPI_Process% nProcs .eq. 1 ) then - filename = OBB(this% STLNum)% filename - else - filename = 'PARTITION'//trim(adjustl(myString))//'_'//OBB(this% STLNum)% filename - filename = trim(filename) - end if - - funit = UnusedUnit() - - open(funit,file='IBM/KDTree_'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "KD-tree"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - call Plot_leaves( this, this% STLNum, funit, this% which_KDtree ) - - close(funit) - - case default - print *, " KD tree type not recognized, stop." - error stop - end select - - end subroutine KDtree_plot -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine plot a single block whose index is BlockIndex. if PlotObjs is true -! also the objects belonging to the box are saved and plot -! ------------------------------------------------ - subroutine KDtree_plotBlock( this, ObjectsList, PlotObjs ) - - implicit none - !-arguments--------------------------------------------- - class(KDtree), intent(inout) :: this - type(object_type), intent(in) :: ObjectsList(:) - logical, intent(in) :: PlotObjs - !-local-variables--------------------------------------- - real(kind=rp), dimension(NDIM) :: x_g - character(len=LINE_LENGTH) :: filename, myString - integer :: i,j, funit, index - - funit = UnusedUnit() - - write(myString,'(i100)') this% index - filename = 'block'//trim(adjustl(myString))//'_'//OBB(this% STLNum)% filename - filename = trim(filename) - - open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "BLOCK"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' - do i = 1, 8 - call OBB(this% STLNum)% ChangeRefFrame( this% vertices(:,i), 'global', x_g ) - write(funit,'(3E13.5)') x_g(1),x_g(2), x_g(3) - end do - - write(funit,'(4i2)') 1, 2, 3, 4 - write(funit,'(4i2)') 1, 5, 8, 4 - write(funit,'(4i2)') 5, 6, 7, 8 - write(funit,'(4i2)') 2, 3, 7, 6 - write(funit,'(4i2)') 4, 8, 7, 3 - write(funit,'(4i2)') 1, 2, 6, 5 - - close(funit) - - if( PlotObjs .and. this% NumOfObjs .gt. 0 ) then - filename = 'Objects'//trim(adjustl(myString))//'_'//OBB(this% STLNum)% filename - filename = trim(filename) - - open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "ObjsIndx"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - do i = 1, this% NumOfObjs - write(funit,"(a66)") 'ZONE NODES=3, ELEMENTS = 1, DATAPACKING=POINT, ZONETYPE=FETRIANGLE' - index = this% ObjsIndeces(i) - - do j = 1, ObjectsList(index)% NumOfVertices - call OBB(this% STLNum)% ChangeRefFrame( ObjectsList(index)% vertices(j)% coords, 'global', x_g ) - write(funit,'(3E13.5)') x_g(1),x_g(2), x_g(3) - end do - - write(funit,'(3i2)') 1, 2, 3 - end do - - close(funit) - end if - - end subroutine KDtree_plotBlock -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine sets up the starting box of the tree which is called root. -! It coincides with the OBB if PointList not present. -! ------------------------------------------------ - subroutine KDtree_SetUpRoot( this, stl, Vertices, PointList ) - - implicit none - !-arguments-------------------------------------------- - class(KDtree), intent(inout) :: this - type(STLfile), intent(in) :: stl - real(kind=RP), dimension(NDIM,8), intent(in) :: Vertices - type(Point_type), dimension(:), intent(in) :: PointList - !-local-variables-------------------------------------- - type(Object_type), pointer :: vertex => null() - type(Object_type) :: Obj, Objvertex - type(point_type), pointer :: p => null() - real(kind=rp), dimension(NDIM) :: coords - real(kind=rp) :: MaxX, MaxY, MaxZ, MinX, MinY, MinZ - integer :: i - - optional :: PointList - - this% NumOfObjs = 0 - - if( present(PointList) ) then - MaxX = maxval(PointList(:)% coords(1)); MinX = minval(PointList(:)% coords(1)) - MaxY = maxval(PointList(:)% coords(2)); MinY = minval(PointList(:)% coords(2)) - MaxZ = maxval(PointList(:)% coords(3)); MinZ = minval(PointList(:)% coords(3)) - - this% NumOfObjs = size(PointList) - - this% vertices(:,1) = (/ MinX, MinY, MinZ /) - this% vertices(:,2) = (/ MaxX, MinY, MinZ /) - this% vertices(:,3) = (/ MaxX, MaxY, MinZ /) - this% vertices(:,4) = (/ MinX, MaxY, MinZ /) - this% vertices(:,5) = (/ MinX, MinY, MaxZ /) - this% vertices(:,6) = (/ MaxX, MinY, MaxZ /) - this% vertices(:,7) = (/ MaxX, MaxY, MaxZ /) - this% vertices(:,8) = (/ MinX, MaxY, MaxZ /) - - else -! -! Local ref frame -! ---------------------------------------------------- - do i = 1, 4 - this% vertices(:,i) = Vertices(:,i) - this% vertices(:,i+4) = Vertices(:,i+4) - end do - - if( associated(this% parent) ) nullify(this% parent) - allocate( this% ObjectsList(stl% NumOfObjs) ) - - associate( Objs => stl% ObjectsList ) - - do i = 1, stl% NumOfObjs - this% ObjectsList(i) = Objs(i) - end do - - end associate - - this% NumOfObjs = stl% NumOfObjs - - end if - - end subroutine KDtree_SetUpRoot -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine builds the KD tree. -! ------------------------------------------------ - subroutine KDtree_construct( this, stl, Vertices, isPlot, Min_n_of_Objs, PointList ) - use omp_lib - implicit none - !-arguments----------------------------------------------------------------- - class(KDtree), intent(inout) :: this - type(STLfile), intent(in) :: stl - real(kind=RP), dimension(NDIM,8), intent(in) :: Vertices - logical, intent(in) :: isPlot - integer, intent(in) :: Min_n_of_Objs - type(point_type), dimension(:), intent(in) :: PointList - !-local-varables------------------------------------------------------------ - real(kind=rp) :: NumOfObjs, & - NumThreads_RP - integer, dimension(:), allocatable :: ObjsIndx - type(Event), dimension(:,:), allocatable :: Events - type(DepthFirst_type), dimension(:), allocatable :: Depth_First - integer :: i, k, NumThreads, & - DepthFirstLevel, & - NumDepthFirst - - optional :: PointList - - if( present( PointList ) ) then - this% which_KDtree = POINTS_KDTREE - call this% SetUpRoot( stl, vertices, PointList ) - else - this% which_KDtree = TRIANGLES_KDTREE - call this% SetUpRoot( stl, vertices ) - end if - - this% level = 0 - NumOfObjs = this% NumOfObjs - depth = C_1*log(NumOfObjs)/log(2.0_RP) + C_2!1.2 * log2(N) + 2 --> on improving kd tree for ray shooting Havran - this% Min_n_of_Objs = Min_n_of_Objs - this% isLast = .false. - BoxIndex = 1 - this% index = BoxIndex - - select case( this% which_KDtree ) - case( POINTS_KDTREE ) - - this% axis = FindAxis( this ) - - allocate(Events(NDIM,this% NumOfObjs)) - - call GetPointsEvents( this, Events, PointList, NumThreads ) - - this% NumThreads = NumThreads - NumThreads_RP = NumThreads - DepthFirstLevel = floor(log(NumThreads_RP)/log(2.0_RP)) - NumDepthFirst = 2.0_RP**(DepthFirstLevel) - - allocate(Depth_First(NumThreads),ObjsIndx(this% NumOfObjs)) - - call KDtree_buildPoints_BreadthFirst( this, Events, ObjsIndx, DepthFirstLevel, Depth_First ) - - deallocate(ObjsIndx) - -!$omp parallel shared(this,Depth_First,k) -!$omp single - do k = 1, count( Depth_First(:)% active ) -!$omp task firstprivate(k) private(ObjsIndx) - allocate(ObjsIndx(this% NumOfObjs)) - call KDtree_buildPoints_DepthFirst( Depth_First(k)% taskTree, Depth_First(k)% taskEvents, ObjsIndx ) - nullify( Depth_First(k)% taskTree ) - deallocate(ObjsIndx) -!$omp end task - end do -!$omp end single -!$omp end parallel - - deallocate(Depth_First) - - case( TRIANGLES_KDTREE ) - - allocate(Events(NDIM,2*this% NumOfObjs)) - - call GetEvents( this, Events, NumThreads ) - - this% NumThreads = NumThreads - NumThreads_RP = NumThreads - DepthFirstLevel = floor(log(NumThreads_RP)/log(2.0_RP)) - NumDepthFirst = 2.0_RP**(DepthFirstLevel) - - allocate(Depth_First(NumThreads),ObjsIndx(this% NumOfObjs)) - - call KDtree_buildSAH_BreadthFirst( this, Events, ObjsIndx, DepthFirstLevel, Depth_First ) - - deallocate(ObjsIndx) - -!$omp parallel shared(this,Depth_First,k) -!$omp single - do k = 1, count( Depth_First(:)% active ) -!$omp task firstprivate(k) private(ObjsIndx) - allocate(ObjsIndx(this% NumOfObjs)) - call KDtree_buildSAH_DepthFirst( Depth_First(k)% taskTree, Depth_First(k)% taskEvents, ObjsIndx ) - nullify( Depth_First(k)% taskTree ) - deallocate(ObjsIndx) -!$omp end task - end do -!$omp end single -!$omp end parallel - deallocate(Depth_First) - - case default - print *, 'KD tree type not recognized' - error stop - end select - - if( isPlot ) call this% plot() - - end subroutine KDtree_construct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine finds the leaf where Point lies -! ------------------------------------------------ - subroutine KDtree_FindLeaf( this, Point, tree ) - - implicit none - !-arguments------------------------------------------ - class(KDtree), target, intent(inout) :: this - real(kind=rp), dimension(:), intent(in) :: Point - type(KDtree), pointer, intent(inout) :: tree - !-local-variables------------------------------------ - real(kind=rp), dimension(NDIM) :: vertices - integer :: level - - if( associated(this% parent) ) then - print *, "The starting point of the KDtree is not the root" - error stop - end if - - tree => this - - level = 0 - - do - if( Point(tree% axis) .le. tree% SplittingPlane ) then !lt - tree => tree% child_L - elseif( Point(tree% axis) .gt. tree% SplittingPlane ) then - tree => tree% child_R - end if - if( tree% isLast ) return - end do - - end subroutine KDtree_FindLeaf - - recursive subroutine KD_treeDestruct( this ) - - implicit none - !-arguments---------------------------------- - class(KDtree), intent(inout) :: this - !-local-variables---------------------------- - integer :: i - - if( allocated(this% ObjectsList) ) then - do i = 1, this% NumOfObjs - deallocate(this% ObjectsList(i)% vertices) - end do - deallocate(this% ObjectsList) - end if - if( allocated(this% ObjsIndeces) ) deallocate(this% ObjsIndeces) - if( allocated(this% Events) ) deallocate(this% Events) - - if( associated(this% child_L) .and. .not. this% isLast ) call this% child_L% destruct - if( associated(this% child_R) .and. .not. this% isLast ) call this% child_R% destruct - - if( associated(this% child_L) ) deallocate(this% child_L) - if( associated(this% child_R) ) deallocate(this% child_R) - - end subroutine KD_treeDestruct - - subroutine KD_treeGetArea( tree ) - - implicit none - - class(KDtree), intent(inout) :: tree - - real(kind=rp) :: L_x, L_y, L_z - - L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) - L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) - L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) - - tree% S = 2.0_RP*(L_x*L_y + L_x*L_z + L_y*L_z) - - end subroutine KD_treeGetArea - - subroutine GetEvents( tree, Events, NumThreads ) - use omp_lib - implicit none - - type(KDtree), intent(inout) :: tree - type(Event), dimension(:,:), intent(inout) :: Events - integer, intent(out) :: NumThreads - - integer :: k - -!$omp parallel shared(tree,Events,k) -!$omp single -#ifdef _OPENMP - NumThreads = omp_get_num_threads() -#else - NumThreads = 1 -#endif - do k = 1, NDIM -!$omp task firstprivate(k) - call Event_Construct( Events(k,:), tree% ObjectsList, tree, k ) - call QsortEvents( Events(k,:), 1, tree% NumOfEvents(k) ) -!$omp end task - end do -!$omp end single -!$omp end parallel - - end subroutine GetEvents - - subroutine GetPointsEvents( tree, Events, PointList, NumThreads ) - use omp_lib - implicit none - - type(KDtree), intent(inout) :: tree - type(Event), dimension(:,:), intent(inout) :: Events - type(point_type), dimension(:), intent(in) :: PointList - integer, intent(out) :: NumThreads - - integer :: k - -!$omp parallel shared(tree,Events,k,PointList) -!$omp single -#ifdef _OPENMP - NumThreads = omp_get_num_threads() -#else - NumThreads = 1 -#endif - do k = 1, NDIM -!$omp task firstprivate(k) - call Points_Event_Construct( Events(k,:), tree, k, PointList ) - call QsortEvents( Events(k,:), 1, tree% NumOfEvents(k) ) -!$omp end task - end do -!$omp end single -!$omp end parallel - - end subroutine GetPointsEvents - - recursive subroutine KDtree_buildSAH_BreadthFirst( this, Events, ObjsIndx, level, Depth_First ) - - implicit none - - type(KDtree), target, intent(inout) :: this - type(Event), allocatable, intent(inout) :: Events(:,:) - integer, intent(in) :: level - integer, dimension(:), intent(inout) :: ObjsIndx - type(DepthFirst_type), intent(inout) :: Depth_First(:) - - type(KDtree), pointer :: child_L, child_R - type(Event), dimension(:,:), allocatable :: Events_L, Events_R - integer :: j - - call this% GetArea() - - BoxIndex = BoxIndex + 1 - - this% index = BoxIndex - - if( this% level .lt. level .and. this% NumOfObjs .gt. 0 ) then - - call this% EvaluateCost( Events, BREADTHFIRST ) - - if( this% split ) then - - allocate(this% child_L,this% child_R) - allocate(this% child_L% parent, this% child_R% parent) - - this% child_L% parent => this; this% child_R% parent => this - - child_L => this% child_L - child_R => this% child_R - - child_L% level = this% level + 1 - child_R% level = this% level + 1 - - this% isLast = .false. - - call this% BuildChild( child_L, side_L ) - call this% BuildChild( child_R, side_R ) - - child_L% Min_n_of_Objs = this% Min_n_of_Objs - child_R% Min_n_of_Objs = this% Min_n_of_Objs - child_L% NumThreads = this% NumThreads - child_R% NumThreads = this% NumThreads - - call Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) - - allocate(Events_L(NDIM,2*child_L% NumOfObjs)) - allocate(Events_R(NDIM,2*child_R% NumOfObjs)) - - call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, BREADTHFIRST ) - - deallocate(Events) - - call KDtree_buildSAH_BreadthFirst( child_L, Events_L, ObjsIndx, level, Depth_First ) - call KDtree_buildSAH_BreadthFirst( child_R, Events_R, ObjsIndx, level, Depth_First ) - - else - this% isLast = .false. - if( this% level .lt. level ) this% isLast = .true. - do j = 1, size(Depth_First) - if( .not. Depth_First(j)% active ) then - Depth_First(j)% taskTree => this - allocate(Depth_First(j)% taskEvents(NDIM,2*this% NumOfObjs)) - Depth_First(j)% taskEvents = Events - Depth_First(j)% active = .true. - deallocate(Events) - exit - end if - end do - end if - else - this% isLast = .false. - if( this% NumOfObjs .eq. 0 ) this% isLast = .true. - do j = 1, size(Depth_First) - if( .not. Depth_First(j)% active ) then - Depth_First(j)% taskTree => this - allocate(Depth_First(j)% taskEvents(NDIM,2*this% NumOfObjs)) - Depth_First(j)% taskEvents = Events - Depth_First(j)% active = .true. - deallocate(Events) - exit - end if - end do - end if - - if( allocated(events) ) deallocate( events ) - - end subroutine KDtree_buildSAH_BreadthFirst - - - recursive subroutine KDtree_buildSAH_DepthFirst( this, Events, ObjsIndx ) - use omp_lib - implicit none - - type(KDtree), target, intent(inout) :: this - type(Event), allocatable, intent(inout) :: Events(:,:) - integer, dimension(:), intent(inout) :: ObjsIndx - - type(KDtree), pointer :: child_L, child_R - type(Event), dimension(:,:), allocatable :: Events_L, Events_R - - call this% GetArea() - -!$omp critical - BoxIndex = BoxIndex + 1 -!$omp end critical - - this% index = BoxIndex - - if( this% level .lt. depth .and. this% NumOfObjs .ge. this% Min_n_of_Objs ) then - - call this% EvaluateCost( Events, DEPTHFIRST ) - - if( this% split ) then - - allocate(this% child_L,this% child_R) - allocate(this% child_L% parent, this% child_R% parent) - this% child_L% parent => this; this% child_R% parent => this - - child_L => this% child_L - child_R => this% child_R - - child_L% level = this% level + 1 - child_R% level = this% level + 1 - - this% isLast = .false. - - call this% BuildChild( child_L, side_L ) - call this% BuildChild( child_R, side_R ) - - child_L% Min_n_of_Objs = this% Min_n_of_Objs - child_R% Min_n_of_Objs = this% Min_n_of_Objs - child_L% NumThreads = this% NumThreads - child_R% NumThreads = this% NumThreads - - call Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) - - allocate(Events_L(NDIM,2*child_L% NumOfObjs)) - allocate(Events_R(NDIM,2*child_R% NumOfObjs)) - - call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, DEPTHFIRST ) - - deallocate(Events) - - call KDtree_buildSAH_DepthFirst( child_L, Events_L, ObjsIndx ) - call KDtree_buildSAH_DepthFirst( child_R, Events_R, ObjsIndx ) - - else - this% isLast = .true. - call this% SaveObjsIndeces( Events ) - deallocate(Events) - end if - else - this% isLast = .true. - if( this% NumOfObjs .gt. 0 ) then - call this% SaveObjsIndeces( Events ) - deallocate(Events) - end if - end if - - if( allocated(events) ) deallocate(events) - - end subroutine KDtree_buildSAH_DepthFirst - - - - subroutine ComputeSplitSurface_L(tree, SplittingPlane, axis, S_L) - - implicit none - - type(KDtree), intent(in) :: tree - real(kind=rp), intent(in) :: SplittingPlane - integer, intent(in) :: axis - real(kind=rp), intent(out) :: S_L - - real(kind=rp) :: L_x, L_y, L_z - - select case( axis ) - case(1) - L_x = abs(SplittingPlane-tree% vertices(1,1)) - L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) - L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) - case(2) - L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) - L_y = abs(SplittingPlane-tree% vertices(2,1)) - L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) - case(3) - L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) - L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) - L_z = abs(SplittingPlane-tree% vertices(3,1)) - end select - - S_L = 2.0_RP*(L_x*L_y+L_y*L_z+L_x*L_z) - - end subroutine ComputeSplitSurface_L - - subroutine ComputeSplitSurface_R(tree, SplittingPlane, axis, S_R) - - implicit none - - type(KDtree), intent(in) :: tree - real(kind=rp), intent(in) :: SplittingPlane - integer, intent(in) :: axis - real(kind=rp), intent(out) :: S_R - - real(kind=rp) :: L_x, L_y, L_z - - select case( axis ) - case(1) - L_x = abs(tree% vertices(1,7)-SplittingPlane) - L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) - L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) - case(2) - L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) - L_y = abs(tree% vertices(2,7)-SplittingPlane) - L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) - case(3) - L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) - L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) - L_z = abs(tree% vertices(3,7)-SplittingPlane) - end select - - S_R = 2.0_RP*(L_x*L_y+L_y*L_z+L_x*L_z) - - end subroutine ComputeSplitSurface_R - - real(kind=rp) function computeSplittingCost(S, S_L, S_R, N_L, N_R) result(SplittingCost) - - implicit none - - real(kind=rp), intent(in) :: S, S_L, S_R - integer, intent(in) :: N_L, N_R - - SplittingCost = C_TRANSVERSE + C_INTERSECT*(S_L/S*N_L+S_R/S*N_R) - - end function computeSplittingCost - - subroutine KDtree_EvaluateCost( this, Events, parallelization_type ) - use omp_lib - implicit none - - class(KDtree), intent(inout) :: this - type(Event), intent(in) :: Events(:,:) - integer, intent(in) :: parallelization_type - - integer :: i, j, k, l, N_L(NDIM), N_R(NDIM), N_P(NDIM), & - BestSide(1), pminus, pplus, pvert, axis - real(kind=rp) :: SplittingCost(2), S_L, S_R, SplittingPlane - type(taskPart_type), allocatable :: taskPart(:) - integer :: level, taskNum - type(KDtree), allocatable :: taskTree(:) - - this% split = .false. - this% SplitCost = C_INTERSECT * this% NumOfObjs - - if( this% NumOfObjs .eq. 0 ) return - - select case( parallelization_type ) - - case( BREADTHFIRST ) - - call constrct_taskPart( taskPart, this% NumOfEvents(:), this% NumThreads ) - allocate(taskTree(this% NumThreads)) - taskTree(:)% S = this% S - taskTree(:)% split = .false. - taskTree(:)% SplitCost = this% SplitCost - -!$omp parallel shared(Events,taskPart,taskTree) -!$omp single - do taskNum = 1, size(taskPart)-1 -!$omp task private(i,k,pplus,pminus,pvert,SplittingPlane) firstprivate(taskNum) - do k = 1, NDIM - pplus = 0; pminus = 0; pvert = 0 - SplittingPlane = Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index + & - taskPart(taskNum)% taskPartDim(k)% ChunkDim)% plane - i = 1 - do while(i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim) - - if( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .lt. 0 ) exit - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - ( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. END_ ) - pminus = pminus + 1 - i = i + 1 - end do - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - (Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. PLANAR_ ) - pvert = pvert + 1 - if(Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane) & - taskPart(taskNum+1)% taskPartDim(k)% N_P = taskPart(taskNum+1)% taskPartDim(k)% N_P + 1 - i = i + 1 - end do - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - (Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. START_ ) - pplus = pplus + 1 - i = i + 1 - end do - end do - taskPart(taskNum+1)% taskPartDim(k)% N_R = taskPart(taskNum+1)% taskPartDim(k)% N_R - pminus - pvert - taskPart(taskNum+1)% taskPartDim(k)% N_L = taskPart(taskNum+1)% taskPartDim(k)% N_L + pplus + pvert - - end do -!$omp end task - end do -!$omp taskwait - - do taskNum = 1, size(taskPart) - do k = 1, NDIM - if( taskNum .eq. 1 ) then - taskPart(taskNum)% taskPartDim(k)% N_R = this% NumOfObjs - else - taskPart(taskNum)% taskPartDim(k)% N_R = taskPart(taskNum)% taskPartDim(k)% N_R + & - taskPart(taskNum-1)% taskPartDim(k)% N_R - taskPart(taskNum)% taskPartDim(k)% N_L = taskPart(taskNum)% taskPartDim(k)% N_L + & - taskPart(taskNum-1)% taskPartDim(k)% N_L - taskPart(taskNum)% taskPartDim(k)% N_P = taskPart(taskNum)% taskPartDim(k)% N_P + & - taskPart(taskNum-1)% taskPartDim(k)% N_P - end if - end do - end do - - do taskNum = 1, size(taskPart) -!$omp task private(i,k,pplus,pminus,pvert,SplittingPlane,N_R,N_L,N_P,SplittingCost,BestSide,S_L,S_R) firstprivate(taskNum) - do k = 1, NDIM - N_R(k) = taskPart(taskNum)% taskPartDim(k)% N_R - N_L(k) = taskPart(taskNum)% taskPartDim(k)% N_L - N_P(k) = taskPart(taskNum)% taskPartDim(k)% N_P - i = 1 - do while ( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) - pplus = 0; pminus = 0; pvert = 0 - SplittingPlane = Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane - - if( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .lt. 0 ) exit - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. END_ ) - pminus = pminus + 1 - i = i + 1 - end do - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. PLANAR_ ) - pvert = pvert + 1 - i = i + 1 - end do - - do while( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & - Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. START_ ) - pplus = pplus + 1 - i = i + 1 - end do - - N_R(k) = N_R(k) - pminus - pvert - - call ComputeSplitSurface_L(this, SplittingPlane, k, S_L) - call ComputeSplitSurface_R(this, SplittingPlane, k, S_R) - - SplittingCost(1) = computeSplittingCost( taskTree(taskNum)% S, S_L, S_R, N_L(k)+N_P(k), N_R(k) ) - SplittingCost(2) = computeSplittingCost(taskTree(taskNum)% S, S_L, S_R, N_L(k), N_R(k)+N_P(k) ) - - if( SplittingCost(1) .lt. SplittingCost(2) ) then - BestSide(1) = 1 - else - BestSide(1) = 2 - end if - - if( taskTree(taskNum)% SplitCost .gt. SplittingCost(BestSide(1)) ) then - taskTree(taskNum)% SplittingPlane = SplittingPlane - taskTree(taskNum)% SplitCost = SplittingCost(BestSide(1)) - taskTree(taskNum)% split = .true. - taskTree(taskNum)% axis = k - taskTree(taskNum)% SIDE = BestSide(1) - end if - - N_L(k) = N_L(k) + pplus + pvert - N_P(k) = pvert - - end do - end do -!$omp end task - end do -!$omp end single -!$omp end parallel - - if( any( taskTree(:)% split ) ) then - BestSide = minloc(taskTree(:)% SplitCost) - this% SplittingPlane = taskTree(BestSide(1))% SplittingPlane - this% SplitCost = taskTree(BestSide(1))% SplitCost - this% split = .true. - this% axis = taskTree(BestSide(1))% axis - this% SIDE = taskTree(BestSide(1))% SIDE - end if - - deallocate(taskTree,taskPart) - - case( DEPTHFIRST ) - - N_R = this% NumOfObjs; N_L = 0; N_P = 0 - this% split = .false. - this% SplitCost = C_INTERSECT * this% NumOfObjs - - do k = 1, NDIM - i = 1 - do while ( i .le. this% NumOfEvents(k) ) - pplus = 0; pminus = 0; pvert = 0 - SplittingPlane = Events(k,i)% plane - - if( Events(k,i)% eType .lt. 0 ) exit - - do while( i .le. this% NumOfEvents(k) .and. & - Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. END_ ) - pminus = pminus + 1 - i = i + 1 - end do - - do while( i .le. this% NumOfEvents(k) .and. & - Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. PLANAR_ ) - pvert = pvert + 1 - i = i + 1 - end do - - do while( i .le. this% NumOfEvents(k) .and. & - Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. START_ ) - pplus = pplus + 1 - i = i + 1 - end do - - N_R(k) = N_R(k) - pminus - pvert - - call ComputeSplitSurface_L(this, SplittingPlane, k, S_L) - call ComputeSplitSurface_R(this, SplittingPlane, k, S_R) - - SplittingCost(1) = computeSplittingCost( this% S, S_L, S_R, N_L(k)+N_P(k), N_R(k) ) - SplittingCost(2) = computeSplittingCost( this% S, S_L, S_R, N_L(k), N_R(k)+N_P(k) ) - - BestSide = minloc(SplittingCost) - - if( this% SplitCost .gt. SplittingCost(BestSide(1)) ) then - this% SplittingPlane = SplittingPlane - this% SplitCost = SplittingCost(BestSide(1)) - this% split = .true. - this% axis = k - this% SIDE = BestSide(1) - end if - N_L(k) = N_L(k) + pplus + pvert - N_P(k) = pvert - - end do - end do - - end select - - end subroutine KDtree_EvaluateCost - - subroutine Event_ClassifyObjs( this, tree, child_L, child_R, ObjsIndx ) - - implicit none - - type(Event), dimension(:), intent(in) :: this - type(KDtree), intent(inout) :: tree - type(KDtree), intent(inout) :: child_L, child_R - integer, dimension(:), intent(inout) :: ObjsIndx - - integer :: i, N_B, N_L, N_R - - ObjsIndx = BOTH - - N_B = tree% NumOfObjs; N_L = 0; N_R = 0 - - do i = 1, tree% NumOfEvents(tree% axis) - if( this(i)% eType .eq. END_ .and. & - (this(i)% plane .lt. tree% SplittingPlane .or. this(i)% plane .eq. tree% SplittingPlane) ) then - ObjsIndx(this(i)% index) = ONLYLEFT - N_L = N_L + 1 - elseif( this(i)% eType .eq. START_ .and. & - (this(i)% plane .gt. tree% SplittingPlane .or. this(i)% plane .eq. tree% SplittingPlane) ) then - ObjsIndx(this(i)% index) = ONLYRIGHT - N_R = N_R + 1 - elseif( this(i)% eType .eq. PLANAR_ ) then - if( this(i)% plane .lt. tree% SplittingPlane .or. & - (this(i)% plane .eq. tree% SplittingPlane .and. tree% SIDE .eq. 1) ) then - ObjsIndx(this(i)% index) = ONLYLEFT - N_L = N_L + 1 - elseif( this(i)% plane .gt. tree% SplittingPlane .or. & - (this(i)% plane .eq. tree% SplittingPlane .and. tree% SIDE .eq. 2) ) then - ObjsIndx(this(i)% index) = ONLYRIGHT - N_R = N_R + 1 - end if - end if - end do - - N_B = N_B - N_L - N_R - - tree% N_L = N_L; tree% N_R = N_R; tree% N_B = N_B - child_L% NumOfObjs = N_B+N_L - child_R% NumOfObjs = N_B+N_R - - end subroutine Event_ClassifyObjs - - subroutine KDtree_BuildChild( this, child, side ) - - implicit none - - class(KDtree), intent(inout) :: this - type(KDtree), intent(inout) :: child - integer, intent(in) :: side - - integer :: i - - child% vertices = this% vertices - child% isLast = .false. - - select case( this% axis ) - case( 1 ) - do i = 1, 4 - child% vertices(1,vertices_x(side+i)) = this% SplittingPlane - end do - case( 2 ) - do i = 1, 4 - child% vertices(2,vertices_y(side+i)) = this% SplittingPlane - end do - case( 3 ) - do i = 1, 4 - child% vertices(3,vertices_z(side+i)) = this% SplittingPlane - end do - end select - - end subroutine KDtree_BuildChild - - subroutine Event_BuildLists( this, tree, child_L, child_R, ObjsIndx, Events_L, Events_R, parallelization_type ) - use omp_lib - implicit none - - type(Event), dimension(:,:), intent(in) :: this - type(KDtree), intent(in) :: tree - type(KDtree), intent(inout) :: child_L, child_R - integer, dimension(:), intent(inout) :: ObjsIndx - type(Event), dimension(:,:), intent(inout) :: Events_L, Events_R - integer, intent(in) :: parallelization_type - - type(taskPart_type), allocatable :: taskPart(:) - integer :: i, k, B, L, R, j, level, index, taskNum - integer :: index_L, index_R, N_Events_L(NDIM), N_Events_R(NDIM) - - select case( parallelization_type ) - - case( BREADTHFIRST ) - - child_L% NumOfEvents = 0 - child_R% NumOfEvents = 0 - call constrct_taskPart( taskPart, tree% NumOfEvents(:), tree% NumThreads ) - -!$omp parallel shared(N_Events_L,N_Events_R,Events_L,Events_R,this,ObjsIndx,taskPart) -!$omp single - N_Events_L = 0 - N_Events_R = 0 - do taskNum = 1, size(taskPart) -!$omp task private(i,k,L,R,index) firstprivate(taskNum) - do k = 1, NDIM - L = 0; R = 0 - index = taskPart(taskNum)% taskPartDim(k)% starting_index - do i = 1, taskPart(taskNum)% taskPartDim(k)% ChunkDim - if( ObjsIndx(this(k,index+i)% index) .eq. ONLYLEFT ) then - L = L + 1 - elseif( ObjsIndx(this(k,index+i)% index) .eq. ONLYRIGHT ) then - R = R + 1 - elseif( ObjsIndx(this(k,index+i)% index) .eq. BOTH ) then - L = L + 1 - R = R + 1 - end if - end do - taskPart(taskNum)% taskPartDim(k)% N_L = L - taskPart(taskNum)% taskPartDim(k)% N_R = R - end do -!$omp end task - end do -!$omp taskwait - - do k = 1, NDIM - N_Events_L = sum(taskPart(:)% taskPartDim(k)% N_L) - N_Events_R = sum(taskPart(:)% taskPartDim(k)% N_R) - end do - - do taskNum = size(taskPart),2,-1 - do k = 1, NDIM - taskPart(taskNum)% taskPartDim(k)% N_R = sum(taskPart(1:taskNum-1)% taskPartDim(k)% N_R) - taskPart(taskNum)% taskPartDim(k)% N_L = sum(taskPart(1:taskNum-1)% taskPartDim(k)% N_L) - end do - end do - - taskPart(1)% taskPartDim(:)% N_R = 0 - taskPart(1)% taskPartDim(:)% N_L = 0 - - do taskNum = 1, size(taskPart) -!$omp task private(i,k,L,R,index_L,index_R,index) firstprivate(taskNum) - do k = 1, NDIM - L = 0; R = 0 - index_L = taskPart(taskNum)% taskPartDim(k)% N_L - index_R = taskPart(taskNum)% taskPartDim(k)% N_R - index = taskPart(taskNum)% taskPartDim(k)% starting_index - do i = 1, taskPart(taskNum)% taskPartDim(k)% ChunkDim - if( ObjsIndx(this(k,index+i)% index) .eq. ONLYLEFT ) then - L = L + 1 - Events_L(k,L+index_L) = this(k,index+i) - elseif( ObjsIndx(this(k,index+i)% index) .eq. ONLYRIGHT ) then - R = R + 1 - Events_R(k,R+index_R) = this(k,index+i) - elseif( ObjsIndx(this(k,index+i)% index) .eq. BOTH ) then - L = L + 1 - R = R + 1 - Events_L(k,L+index_L) = this(k,index+i) - Events_R(k,R+index_R) = this(k,index+i) - end if - end do - end do -!$omp end task - end do -!$omp end single -!$omp end parallel - - child_L% NumOfEvents = N_Events_L - child_R% NumOfEvents = N_Events_R - - deallocate(taskPart) - - case( DEPTHFIRST ) - - child_L% NumOfEvents = 0 - child_R% NumOfEvents = 0 - - do k = 1, NDIM - L = 0; R = 0 - do i = 1, tree% NumOfEvents(k) - if( ObjsIndx(this(k,i)% index) .eq. ONLYLEFT ) then - L = L + 1 - Events_L(k,L) = this(k,i) - child_L% NumOfEvents(k) = child_L% NumOfEvents(k) + 1 - elseif( ObjsIndx(this(k,i)% index) .eq. ONLYRIGHT ) then - R = R + 1 - Events_R(k,R) = this(k,i) - child_R% NumOfEvents(k) = child_R% NumOfEvents(k) + 1 - elseif( ObjsIndx(this(k,i)% index) .eq. BOTH ) then - L = L + 1 - R = R + 1 - Events_L(k,L) = this(k,i) - Events_R(k,R) = this(k,i) - child_L% NumOfEvents(k) = child_L% NumOfEvents(k) + 1 - child_R% NumOfEvents(k) = child_R% NumOfEvents(k) + 1 - end if - end do - end do - - end select - - end subroutine Event_BuildLists - - subroutine KDtree_SaveObjsIndeces( this, Events ) - - implicit none - - class(KDtree), intent(inout) :: this - type(Event), intent(in) :: Events(:,:) - integer :: i, k - - allocate(this% ObjsIndeces(this% NumOfObjs)) - - k = 1 - - do i = 1, this% NumOfEvents(1) - if( Events(1,i)% eType .eq. START_ .or. & - Events(1,i)% eType .eq. PLANAR_ ) then - this% ObjsIndeces(k) = Events(1,i)% index - k = k + 1 - if( k .gt. this% NumOfObjs ) exit - end if - end do - - end subroutine KDtree_SaveObjsIndeces - - subroutine Event_Construct( this, ObjectsList, tree, axis ) - - implicit none - - type(Event), dimension(:), intent(inout) :: this - type(object_type), dimension(:), intent(in) :: ObjectsList - type(KDtree), intent(inout) :: tree - integer, intent(in) :: axis - - integer :: i, j, k, shift - - tree% NumOfEvents(axis) = 0 - - do i =1, tree% NumOfObjs - this(i)% index = ObjectsList(i)% index - this(i+tree% NumOfObjs)% index = ObjectsList(i)% index - - this(i)% plane = minval(ObjectsList(i)% vertices(:)% coords(axis)) - this(i+tree% NumOfObjs)% plane = maxval(ObjectsList(i)% vertices(:)% coords(axis)) - - if( almostEqual(this(i)% plane,this(i+tree% NumOfObjs)% plane) ) then - this(i)% eType = PLANAR_ - !pushed to the end - this(i+tree% NumOfObjs)% plane = huge(1.0_RP) - this(i+tree% NumOfObjs)% eType = -1 - tree% NumOfEvents(axis) = tree% NumOfEvents(axis) + 2 - else - this(i)% eType = START_ - this(i+tree% NumOfObjs)% eType = END_ - tree% NumOfEvents(axis) = tree% NumOfEvents(axis) + 2 - end if - end do - - end subroutine Event_Construct - - -!////////////////// SUBROUTINES FOR KD TREE made of points /////////////////////// - - recursive subroutine KDtree_buildPoints_BreadthFirst( this, Events, ObjsIndx, level, Depth_First ) - - implicit none - - type(KDtree), target, intent(inout) :: this - type(Event), allocatable, intent(inout) :: Events(:,:) - integer, intent(in) :: level - integer, dimension(:), intent(inout) :: ObjsIndx - type(DepthFirst_type), intent(inout) :: Depth_First(:) - - type(KDtree), pointer :: child_L, child_R - type(Event), dimension(:,:), allocatable :: Events_L, Events_R - integer :: j - - BoxIndex = BoxIndex + 1 - - this% index = BoxIndex - this% NumOfEvents(:) = this% NumOfObjs - - if( this% level .lt. level .and. this% NumOfObjs .gt. 0 ) then - - if( mod(this% NumOfObjs,2) .eq. 0 ) then - this% HalfEvents = this% NumOfObjs/2 - this% SIDE = EVEN - else - this% HalfEvents = this% NumOfObjs/2 - this% HalfEvents = this% HalfEvents+1 - this% SIDE = ODD - end if - - this% SplittingPlane = Events(this% axis,this% HalfEvents)% plane - - allocate(this% child_L,this% child_R) - allocate(this% child_L% parent, this% child_R% parent) - - this% child_L% parent => this; this% child_R% parent => this - - child_L => this% child_L - child_R => this% child_R - - child_L% level = this% level + 1 - child_R% level = this% level + 1 - - this% isLast = .false. - - call this% BuildChild( child_L, side_L ) - call this% BuildChild( child_R, side_R ) - - child_L% Min_n_of_Objs = this% Min_n_of_Objs - child_R% Min_n_of_Objs = this% Min_n_of_Objs - child_L% NumThreads = this% NumThreads - child_R% NumThreads = this% NumThreads - - child_L% axis = AxisIndex( this% axis ) - child_R% axis = AxisIndex( this% axis ) - - call Points_Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) - - allocate(Events_L(NDIM,child_L% NumOfObjs)) - allocate(Events_R(NDIM,child_R% NumOfObjs)) - - call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, BREADTHFIRST ) - - deallocate(Events) - - call KDtree_buildPoints_BreadthFirst( child_L, Events_L, ObjsIndx, level, Depth_First ) - call KDtree_buildPoints_BreadthFirst( child_R, Events_R, ObjsIndx, level, Depth_First ) - - else - this% isLast = .false. - if( this% NumOfObjs .eq. 0 ) this% isLast = .true. - do j = 1, size(Depth_First) - if( .not. Depth_First(j)% active ) then - Depth_First(j)% taskTree => this - allocate(Depth_First(j)% taskEvents(NDIM,this% NumOfObjs)) - Depth_First(j)% taskEvents = Events - Depth_First(j)% active = .true. - deallocate(Events) - exit - end if - end do - end if - - if( allocated( Events ) ) deallocate( Events ) - - end subroutine KDtree_buildPoints_BreadthFirst - - recursive subroutine KDtree_buildPoints_DepthFirst( this, Events, ObjsIndx ) - use omp_lib - implicit none - - type(KDtree), target, intent(inout) :: this - type(Event), allocatable, intent(inout) :: Events(:,:) - integer, dimension(:), intent(inout) :: ObjsIndx - - type(KDtree), pointer :: child_L, child_R - type(Event), dimension(:,:), allocatable :: Events_L, Events_R - -!$omp critical - BoxIndex = BoxIndex + 1 -!$omp end critical - - this% index = BoxIndex - this% NumOfEvents(:) = this% NumOfObjs - - if( this% level .lt. depth .and. this% NumOfObjs .ge. this% Min_n_of_Objs ) then - - if( mod(this% NumOfObjs,2) .eq. 0 ) then - this% HalfEvents = this% NumOfObjs/2 - this% SIDE = EVEN - else - this% HalfEvents = this% NumOfObjs/2 - this% HalfEvents = this% HalfEvents+1 - this% SIDE = ODD - end if - - this% SplittingPlane = Events(this% axis,this% HalfEvents)% plane - - allocate(this% child_L,this% child_R) - allocate(this% child_L% parent, this% child_R% parent) - this% child_L% parent => this; this% child_R% parent => this - - child_L => this% child_L - child_R => this% child_R - - child_L% level = this% level + 1 - child_R% level = this% level + 1 - - this% isLast = .false. - - call this% BuildChild( child_L, side_L ) - call this% BuildChild( child_R, side_R ) - - child_L% Min_n_of_Objs = this% Min_n_of_Objs - child_R% Min_n_of_Objs = this% Min_n_of_Objs - child_L% NumThreads = this% NumThreads - child_R% NumThreads = this% NumThreads - - child_L% axis = AxisIndex( this% axis ) - child_R% axis = AxisIndex( this% axis ) - - call Points_Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) - - allocate(Events_L(NDIM,child_L% NumOfObjs)) - allocate(Events_R(NDIM,child_R% NumOfObjs)) - - call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, DEPTHFIRST ) - - deallocate(Events) - - call KDtree_buildPoints_DepthFirst( child_L, Events_L, ObjsIndx ) - call KDtree_buildPoints_DepthFirst( child_R, Events_R, ObjsIndx ) - - else - this% isLast = .true. - if( this% NumOfObjs .gt. 0 ) then - call this% SavePointsIndeces(Events) - deallocate(Events) - end if - end if - - if( allocated( Events ) ) deallocate( Events ) - - end subroutine KDtree_buildPoints_DepthFirst - - - subroutine KDtree_SavePointsIndeces( this, Events ) - - implicit none - - class(KDtree), intent(inout) :: this - type(Event), intent(in) :: Events(:,:) - integer :: i, k - - allocate(this% ObjsIndeces(this% NumOfObjs)) - - do i = 1, this% NumOfObjs - this% ObjsIndeces(i) = Events(1,i)% index - end do - - end subroutine KDtree_SavePointsIndeces - - subroutine Points_Event_ClassifyObjs( this, tree, child_L, child_R, ObjsIndx ) - - use omp_lib - implicit none - - type(Event), dimension(:), intent(in) :: this - type(KDtree), intent(inout) :: tree - type(KDtree), intent(inout) :: child_L, child_R - integer, dimension(:), intent(inout) :: ObjsIndx - - integer :: i, N_B, N_L, N_R - - N_L = 0; N_R = 0; N_B = 0 - - do i = 1, tree% NumOfObjs - if( i .lt. tree% HalfEvents ) then - ObjsIndx(this(i)% index) = ONLYLEFT - N_L = N_L + 1 - elseif( i .gt. tree% HalfEvents ) then - ObjsIndx(this(i)% index) = ONLYRIGHT - N_R = N_R + 1 - elseif( i .eq. tree% HalfEvents ) then - if( tree% SIDE .eq. ODD ) then - ObjsIndx(this(i)% index) = BOTH - N_B = N_B + 1 - else - ObjsIndx(this(i)% index) = ONLYLEFT - N_L = N_L + 1 - end if - end if - end do - - tree% N_L = N_L; tree% N_R = N_R; tree% N_B = N_B - child_L% NumOfObjs = N_L + N_B - child_R% NumOfObjs = N_R + N_B - - end subroutine Points_Event_ClassifyObjs - - subroutine Points_Event_construct(this, tree, axis, PointList) - use MPI_IBMUtilities - implicit none - - type(Event), dimension(:), intent(inout) :: this - type(KDtree), intent(inout) :: tree - integer, intent(in) :: axis - type(point_type), dimension(:), intent(in) :: PointList - - integer :: i - - tree% NumOfEvents = tree% NumOfObjs - - do i = 1, tree% NumOfObjs !no planar evetns thus NumOfObjs = NumOfEvents - this(i)% index = PointList(i)% index - this(i)% plane = PointList(i)% coords(axis) - this(i)% eType = START_ - end do - - end subroutine Points_Event_construct - -!/////////////////////////////// EVENTS SORTING /////////////////////// - - recursive subroutine QsortEvents( Events, startIdx, endIdx ) - - implicit none - !-arguments------------------------------------------------- - type(Event), dimension(:), intent(inout) :: Events - integer, intent(in) :: startIdx, endIdx - - type(Event) :: pivot - integer :: left, right, mid - - if( startIdx .gt. endIdx ) return - - left = startIdx; right = endIdx - - mid = (startIdx + endIdx)/2 - - pivot = Events(mid) - - do while ( left < right ) - do while( EventIsLess(Events(left),pivot) ) - left = left + 1 - end do - do while( EventIsLess(pivot,Events(right)) ) - right = right - 1 - end do - if( left .le. right ) then - call swapEvents(Events(left), Events(right)) - left = left + 1 - right = right - 1 - end if - end do - - if( startIdx .lt. right ) call QsortEvents( Events, startIdx, right ) - if( left .lt. endIdx ) call QsortEvents( Events, left, endIdx ) - - end subroutine QsortEvents - - subroutine swapEvents( EventA, EventB ) - - implicit none - - type(Event), intent(inout) :: EventA, EventB - - type(Event) :: temp - - temp = EventA - EventA = EventB - EventB = temp - - end subroutine swapEvents - - logical function EventIsLess( EventA, EventB ) result( IsLess ) - - implicit none - - type(Event), intent(in) :: EventA, EventB - - if( EventA% plane .eq. EventB% plane ) then - if( EventA% eTYPE .lt. EventB% eTYPE ) then - IsLess = .true. - else - IsLess = .false. - end if - elseif( EventA% plane < EventB% plane ) then - IsLess = .true. - else - IsLess = .false. - end if - - end function EventIsLess - - subroutine constrct_taskPart( taskPart, TotalChunk, NumOfThreads ) - - implicit none - - type(taskPart_type), allocatable, intent(inout) :: taskPart(:) - integer, intent(in) :: NumOfThreads - integer, dimension(NDIM), intent(in) :: TotalChunk - - integer, dimension(NDIM,NumOfThreads) :: ChunkDim - integer :: i, k - - - ChunkDim = ChunkPartition( TotalChunk, NumOfThreads ) - - if( allocated(taskPart) ) deallocate(taskPart) - allocate(taskPart(NumOfThreads)) - - do k = 1, NDIM - do i = 1, NumOfThreads - taskPart(i)% taskPartDim(k)% ChunkDim = ChunkDim(k,i) - taskPart(i)% taskPartDim(k)% Starting_index = (i-1)*ChunkDim(k,1) - - taskPart(i)% taskPartDim(k)% N_R = 0 - taskPart(i)% taskPartDim(k)% N_L = 0 - taskPart(i)% taskPartDim(k)% N_P = 0 - taskPart(i)% taskPartDim(k)% Values2Check = 0 - end do - end do - - end subroutine constrct_taskPart - - function ChunkPartition( TotalChunk, NumOfThreads ) result(ChunkDim) - - implicit none - - integer, intent(in) :: NumOfThreads - integer, dimension(NDIM), intent(in) :: TotalChunk - integer, dimension(NDIM,NumOfThreads) :: ChunkDim - - integer :: Part, i, k - - do k = 1, NDIM - Part = TotalChunk(k)/NumOfThreads - - do i = 1, NumOfThreads - ChunkDim(k,i) = Part - if( i .eq. NumOfThreads ) then - ChunkDim(k,i) = ChunkDim(k,i) + (TotalChunk(k) - i*Part) - end if - end do - end do - - end function ChunkPartition - -end module KDClass +module KDClass + + use SMConstants + use Utilities + use TessellationTypes + use OrientedBoundingBox + + implicit none + +!~ 5-----------------8 +!~ /| /| +!~ / | / | +!~ / | / | +!~ 6-----------------7 | +!~ | | | | +!~ | | | | +!~ | | | | +!~ | | | | +!~ | 1-------------|---4 +!~ | / | / | z +!~ | / | / |_______ y +!~ |/ |/ / +!~ 2-----------------3 / x + + public :: LastLevel, BoxIndex, POINTS_KDTREE, TRIANGLES_KDTREE_SAH, TRIANGLES_KDTREE_MEDIAN + + integer :: BoxIndex, LastLevel = -1, depth, NumOfObjsIndx, NumOfKDtreePoints + + integer, parameter :: side_L = 4, side_R = 0, ON_PLANE = 0, POINTS_KDTREE = 0, TRIANGLES_KDTREE_SAH = 1, TRIANGLES_KDTREE_MEDIAN = 2 + integer, parameter :: START_ = 2, END_ = 0, PLANAR_ = 1, ONLYLEFT = 0, ONLYRIGHT = 1, BOTH = 2, ODD = 1, EVEN = 2 + integer, parameter :: BREADTHFIRST = 1, DEPTHFIRST = 0 + + real(kind=rp), parameter :: C_TRANSVERSE = 1.0_RP, C_INTERSECT = 1.5_RP, C_1 = 1.2_RP, C_2 = 2.0_RP + + integer, parameter, dimension(8) :: vertices_x = (/ 1,4,5,8, 2,3,6,7 /), & + vertices_y = (/ 1,2,6,5, 3,4,7,8 /), & + vertices_z = (/ 1,2,3,4, 5,6,7,8 /) + + type Event + + real(kind=rp) :: plane, median + integer :: eType, index, axis + + end type + +! +! ************************************************** +! Main type for a kd-tree +! ************************************************** + type KDtree + + class(KDtree), pointer :: child_L, child_R, parent + type(Object_type), dimension(:), allocatable :: ObjectsList + real(kind=rp), dimension(3,8) :: vertices !local + integer :: NumOfObjs, level, axis, & + index, Min_n_of_Objs, & + which_KDtree, MaxAxis, & + SIDE, N_L, N_R, N_B, & + HalfEvents, NumThreads, & + STLNum + logical :: isLast, Split + integer, dimension(NDIM) :: NumOfEvents + real(kind=rp) :: S, SplitCost, SplittingPlane + type(Event), dimension(:,:), allocatable :: Events + integer, dimension(:), allocatable :: ObjsIndeces + + contains + procedure :: construct => KDtree_construct + procedure :: SetUpRoot => KDtree_SetUpRoot + procedure :: FindLeaf => KDtree_FindLeaf + procedure :: plot => KDtree_plot + procedure :: plotBlock => KDtree_plotBlock + procedure :: Destruct => KD_treeDestruct + procedure :: GetArea => KD_treeGetArea + procedure :: BuildChild => KDtree_BuildChild + procedure :: EvaluateCostSAH => KDtree_EvaluateCostSAH + procedure :: EvaluateCostMEDIAN => KDtree_EvaluateCostMEDIAN + procedure :: SaveObjsIndeces => KDtree_SaveObjsIndeces + procedure :: SavePointsIndeces => KDtree_SavePointsIndeces + + end type + + type DepthFirst_type + + type(KDtree), pointer :: taskTree + type(Event), dimension(:,:), allocatable :: taskEvents + logical :: active = .false. + + end type + + type taskPart_dim_type + + real(kind=RP) :: splittingPlane + integer :: N_L, N_R, N_P, ChunkDim, Starting_index, Values2Check + + end type + + type taskSAH_type + + real(kind=RP) :: SplitCost, splittingPlane + integer :: axis, SIDE + logical :: split = .false. + + end type + + type taskPart_type + + type(taskPart_dim_type), dimension(NDIM) :: taskPartDim + + end type + + contains +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! -------------------------------------------------------------- +! This function computes the index corresponding to the integer i. +! -------------------------------------------------------------- + + integer function AxisIndex( i ) result( axis ) + + implicit none + !-arguments------------- + integer, intent(in) :: i + + if( i .eq. 1 ) axis = 2 + if( i .eq. 2 ) axis = 3 + if( i .eq. 3 ) axis = 1 + + end function AxisIndex +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This function computes the longest axis of the OBB. +! ------------------------------------------------- + integer function FindAxis( this ) result( FirstAxis ) + + implicit none + !-arguments---------------------- + type(KDtree), intent(in) :: this + !-local-variables---------------- + integer, dimension(1) :: maxvec + + maxvec = maxloc( (/ abs(this% vertices(1,7) - this% vertices(1,1)), & + abs(this% vertices(2,7) - this% vertices(2,1)), & + abs(this% vertices(3,7) - this% vertices(3,1)) /) ) + + FirstAxis = maxvec(1) + + end function FindAxis +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ---------------------------------------------------------- +! This subroutine saves and plots the leaves of the KD tree. +! ---------------------------------------------------------- + + recursive subroutine Plot_leaves( tree, STLNum, funit, which_KDtree ) + use PhysicsStorage + implicit none + !-arguments-------------------------------------- + type(KDtree), intent(inout) :: tree + integer, intent(in) :: STLNum, funit, & + which_KDtree + !-local-variables-------------------------------- + real(kind=rp) :: x_g(NDIM) + integer :: i + + if( tree% isLast ) then + write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' + + do i = 1, 8 + call OBB(STLNum)% ChangeRefFrame( tree% vertices(:,i), GLOBAL, x_g ) + write(funit,'(3E13.5)') Lref*x_g(1),Lref*x_g(2), Lref*x_g(3) + end do + + write(funit,'(4i2)') 1, 2, 3, 4 + write(funit,'(4i2)') 1, 5, 8, 4 + write(funit,'(4i2)') 5, 6, 7, 8 + write(funit,'(4i2)') 2, 3, 7, 6 + write(funit,'(4i2)') 4, 8, 7, 3 + write(funit,'(4i2)') 1, 2, 6, 5 + + else + call Plot_leaves( tree% child_L, STLNum, funit, which_KDtree ) + call Plot_leaves( tree% child_R, STLNum, funit, which_KDtree ) + end if + + end subroutine Plot_leaves +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine creates a new file call KDtree in which the leaves will be stored. +! ------------------------------------------------ + subroutine KDtree_plot( this, lvl ) + use MPI_Process_Info + implicit none + !-arguemnts---------------------------------------- + class(KDtree), target, intent(inout) :: this + integer, optional, intent(in) :: lvl + !-local-variables---------------------------------- + real(kind=rp) :: x_g(NDIM) + character(len=LINE_LENGTH) :: filename, myString + integer :: i, funit + + select case( this% which_KDtree ) + case( POINTS_KDTREE ) + + if( .not. MPI_Process% isRoot ) return + + if( present(lvl) ) then + if( lvl .gt. 0 ) then + write(myString,'(i100)') lvl + filename = 'KDtreeBandPoints_MGlevel'//trim(adjustl(myString)) + else + filename = 'KDTreeBandPoints' + end if + else + filename = 'KDTreeBandPoints' + end if + + case( TRIANGLES_KDTREE_SAH ) + + write(myString,'(i100)') MPI_Process% rank + + if( MPI_Process% nProcs .eq. 1 ) then + filename = 'KDTree_'//OBB(this% STLNum)% filename + else + filename = 'KDTree_Partition'//trim(adjustl(myString))//'_'//OBB(this% STLNum)% filename + filename = trim(filename) + end if + + end select + + funit = UnusedUnit() + + open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') + + write(funit,"(a28)") 'TITLE = "KD-tree"' + write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' + + call Plot_leaves( this, this% STLNum, funit, this% which_KDtree ) + + close(funit) + + end subroutine KDtree_plot +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine plot a single block whose index is BlockIndex. if PlotObjs is true +! also the objects belonging to the box are saved and plot +! ------------------------------------------------ + subroutine KDtree_plotBlock( this, ObjectsList, STLNum, PlotObjs ) + + implicit none + !-arguments--------------------------------------------- + class(KDtree), intent(inout) :: this + type(object_type), intent(in) :: ObjectsList(:) + integer, intent(in) :: STLNum + logical, intent(in) :: PlotObjs + !-local-variables--------------------------------------- + real(kind=rp) :: x_g(NDIM) + character(len=LINE_LENGTH) :: filename, myString + integer :: i,j, funit, index + + funit = UnusedUnit() + + write(myString,'(i100)') this% index + filename = 'block'//trim(adjustl(myString))//'_'//OBB(STLNum)% filename + filename = trim(filename) + + open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') + + write(funit,"(a28)") 'TITLE = "BLOCK"' + write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' + + write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' + do i = 1, 8 + call OBB(STLNum)% ChangeRefFrame( this% vertices(:,i), GLOBAL, x_g ) + write(funit,'(3E13.5)') x_g(1),x_g(2), x_g(3) + end do + + write(funit,'(4i2)') 1, 2, 3, 4 + write(funit,'(4i2)') 1, 5, 8, 4 + write(funit,'(4i2)') 5, 6, 7, 8 + write(funit,'(4i2)') 2, 3, 7, 6 + write(funit,'(4i2)') 4, 8, 7, 3 + write(funit,'(4i2)') 1, 2, 6, 5 + + close(funit) + + if( PlotObjs .and. this% NumOfObjs .gt. 0 ) then + filename = 'Objects'//trim(adjustl(myString))//'_'//OBB(STLNum)% filename + filename = trim(filename) + + open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') + + write(funit,"(a28)") 'TITLE = "ObjsIndx"' + write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' + + do i = 1, this% NumOfObjs + write(funit,"(a66)") 'ZONE NODES=3, ELEMENTS = 1, DATAPACKING=POINT, ZONETYPE=FETRIANGLE' + index = this% ObjsIndeces(i) + + do j = 1, 3 + call OBB(STLNum)% ChangeRefFrame( ObjectsList(index)% vertices(j)% coords, GLOBAL, x_g ) + write(funit,'(3E13.5)') x_g(1),x_g(2), x_g(3) + end do + + write(funit,'(3i2)') 1, 2, 3 + end do + + close(funit) + end if + + end subroutine KDtree_plotBlock +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine sets up the starting box of the tree which is called root. +! It coincides whit the OBB if PointList not present. +! ------------------------------------------------ + subroutine KDtree_SetUpRoot( this, stl, Vertices, PointList ) + + implicit none + !-arguments-------------------------------------------- + class(KDtree), intent(inout) :: this + type(STLfile), intent(in) :: stl + real(kind=RP), intent(in) :: Vertices(:,:) + type(Point_type), optional, intent(in) :: PointList(:) + !-local-variables-------------------------------------- + type(Object_type) :: Obj + integer :: i + + this% NumOfObjs = 0 + + do i = 1, 4 + this% vertices(:,i) = Vertices(:,i) + this% vertices(:,i+4) = Vertices(:,i+4) + end do + + select case( this% which_KDtree ) + + case( POINTS_KDTREE ) + + allocate( this% ObjectsList(size(PointList)) ) + this% NumOfObjs = size(PointList) + + case( TRIANGLES_KDTREE_MEDIAN,TRIANGLES_KDTREE_SAH ) + + allocate( this% ObjectsList(stl% NumOfObjs) ) + + associate( Objs => stl% ObjectsList ) + + do i = 1, stl% NumOfObjs + this% ObjectsList(i) = Objs(i) + end do + + end associate + + this% NumOfObjs = stl% NumOfObjs + + end select + + end subroutine KDtree_SetUpRoot +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine builds the KD tree. +! ------------------------------------------------ + subroutine KDtree_construct( this, stl, Vertices, isPlot, Min_n_of_Objs, PointList, lvl ) + use omp_lib + implicit none + !-arguments------------------------------------------------- + class(KDtree), intent(inout) :: this + type(STLfile), intent(in) :: stl + real(kind=RP), intent(in) :: Vertices(:,:) + logical, intent(in) :: isPlot + integer, intent(in) :: Min_n_of_Objs + integer, optional, intent(in) :: lvl + type(point_type), optional, intent(in) :: PointList(:) + !-local-varables-------------------------------------------- + real(kind=rp) :: NumOfObjs, & + NumThreads_RP + integer, allocatable :: ObjsIndx(:) + type(Event), allocatable :: Events(:,:) + type(DepthFirst_type), allocatable :: Depth_First(:) + integer :: i, k, NumThreads, & + DepthFirstLevel, & + NumDepthFirst + + if( this% which_KDtree .eq. POINTS_KDTREE ) then + if( .not. present(PointList) ) then + print *, "KDtree_construct:: PointList needed for this type of KDtree" + error stop + end if + call this% SetUpRoot( stl, vertices, PointList ) + else + call this% SetUpRoot( stl, vertices ) + end if + + this% level = 0 + NumOfObjs = this% NumOfObjs + this% Min_n_of_Objs = Min_n_of_Objs + this% isLast = .false. + BoxIndex = 1 + this% index = BoxIndex + + select case( this% which_KDtree ) + case( POINTS_KDTREE ) + + this% axis = FindAxis( this ) + + allocate(Events(NDIM,this% NumOfObjs)) + + call GetPointsEvents( this, Events, PointList, NumThreads ) + + depth = huge(1) + this% NumThreads = NumThreads + NumThreads_RP = NumThreads + DepthFirstLevel = floor(log(NumThreads_RP)/log(2.0_RP)) + NumDepthFirst = 2.0_RP**(DepthFirstLevel) + + allocate(Depth_First(NumThreads),ObjsIndx(this% NumOfObjs)) + + call KDtree_buildPoints_BreadthFirst( this, Events, ObjsIndx, DepthFirstLevel, Depth_First ) + + deallocate(ObjsIndx) + +!$omp parallel shared(this,Depth_First,k) +!$omp single + do k = 1, count( Depth_First(:)% active ) +!$omp task firstprivate(k) private(ObjsIndx) + allocate(ObjsIndx(this% NumOfObjs)) + call KDtree_buildPoints_DepthFirst( Depth_First(k)% taskTree, Depth_First(k)% taskEvents, ObjsIndx ) + nullify( Depth_First(k)% taskTree ) + deallocate(ObjsIndx) +!$omp end task + end do +!$omp end single +!$omp end parallel + deallocate(Depth_First) + + case( TRIANGLES_KDTREE_SAH ) + + allocate(Events(NDIM,2*this% NumOfObjs)) + + call GetEvents( this, Events, NumThreads ) + + depth = C_1*log(NumOfObjs)/log(2.0_RP) + C_2!1.2 * log2(N) + 2 --> on improving kd tree for ray shooting Havran + this% NumThreads = NumThreads + NumThreads_RP = NumThreads + DepthFirstLevel = floor(log(NumThreads_RP)/log(2.0_RP)) + NumDepthFirst = 2.0_RP**(DepthFirstLevel) + + allocate(Depth_First(NumThreads),ObjsIndx(this% NumOfObjs)) + + call KDtree_buildTRIANGLES_BreadthFirst( this, Events, ObjsIndx, DepthFirstLevel, Depth_First ) + + deallocate(ObjsIndx) +!$omp parallel shared(this,Depth_First,k) +!$omp single + do k = 1, count( Depth_First(:)% active ) +!$omp task firstprivate(k) private(ObjsIndx) + allocate(ObjsIndx(this% NumOfObjs)) + call KDtree_buildTRIANGLES_DepthFirst( Depth_First(k)% taskTree, Depth_First(k)% taskEvents, ObjsIndx ) + nullify( Depth_First(k)% taskTree ) + deallocate(ObjsIndx) +!$omp end task + end do +!$omp end single +!$omp end parallel + deallocate(Depth_First) + + case( TRIANGLES_KDTREE_MEDIAN ) + + this% axis = FindAxis(this) + + allocate(Events(NDIM,2*this% NumOfObjs)) + + call GetEvents( this, Events, NumThreads ) + + depth = log(NumOfObjs)/log(2.0_RP) !--> on improving kd tree for ray shooting Havran + this% NumThreads = NumThreads + NumThreads_RP = NumThreads + DepthFirstLevel = floor(log(NumThreads_RP)/log(2.0_RP)) + NumDepthFirst = 2.0_RP**(DepthFirstLevel) + + allocate(Depth_First(NumThreads),ObjsIndx(this% NumOfObjs)) + + call KDtree_buildTRIANGLES_BreadthFirst( this, Events, ObjsIndx, DepthFirstLevel, Depth_First ) + + deallocate(ObjsIndx) + +!$omp parallel shared(this,Depth_First,k) +!$omp single + do k = 1, count( Depth_First(:)% active ) +!$omp task firstprivate(k) private(ObjsIndx) + allocate(ObjsIndx(this% NumOfObjs)) + call KDtree_buildTRIANGLES_DepthFirst( Depth_First(k)% taskTree, Depth_First(k)% taskEvents, ObjsIndx ) + nullify( Depth_First(k)% taskTree ) + deallocate(ObjsIndx) +!$omp end task + end do +!$omp end single +!$omp end parallel + deallocate(Depth_First) + case default + print *, 'KD tree type not recognized' + error stop + end select + + if( present(lvl) ) then + if( isPlot ) call this% plot(lvl) + else + if( isPlot ) call this% plot() + end if + + end subroutine KDtree_construct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine finds the leaf where Point lies +! ------------------------------------------------ + subroutine KDtree_FindLeaf( this, Point, tree, RIGHTCHILD ) + + implicit none + !-arguments---------------------------------------------- + class(KDtree), target, intent(inout) :: this + real(kind=rp), intent(in) :: Point(:) + type(KDtree), pointer, intent(inout) :: tree + logical, intent(in) :: RIGHTCHILD + !-local-variables---------------------------------------- + real(kind=rp) :: vertices(NDIM) + integer :: level + + tree => this + + if( tree% isLast ) return + + level = 0 + + do + if( RIGHTCHILD ) then + if( Point(tree% axis) .lt. tree% SplittingPlane ) then !lt + tree => tree% child_L + elseif( Point(tree% axis) .ge. tree% SplittingPlane ) then + tree => tree% child_R + end if + else + if( Point(tree% axis) .le. tree% SplittingPlane ) then !lt + tree => tree% child_L + elseif( Point(tree% axis) .gt. tree% SplittingPlane ) then + tree => tree% child_R + end if + endif + if( tree% isLast ) return + end do + + end subroutine KDtree_FindLeaf + + recursive subroutine KD_treeDestruct( this, isChild ) + + implicit none + !-arguments----------------------------- + class(KDtree), intent(inout) :: this + logical, intent(in) :: isChild + !-local-variables----------------------- + integer :: i + + if( allocated(this% ObjectsList) ) then + if( this% which_KDtree .ne. POINTS_KDTREE ) then + do i = 1, this% NumOfObjs + deallocate(this% ObjectsList(i)% vertices) + end do + end if + deallocate(this% ObjectsList) + end if + + if( allocated(this% ObjsIndeces) ) deallocate(this% ObjsIndeces) + if( allocated(this% Events) ) deallocate(this% Events) + + if( associated(this% child_L) .and. .not. this% isLast ) call this% child_L% destruct( isChild ) + if( associated(this% child_R) .and. .not. this% isLast ) call this% child_R% destruct( isChild ) + + end subroutine KD_treeDestruct + + subroutine KD_treeGetArea( tree ) + + implicit none + !-arguments--------------------------- + class(KDtree), intent(inout) :: tree + !-local-variables--------------------- + real(kind=rp) :: L_x, L_y, L_z + + L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) + L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) + L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) + + tree% S = 2.0_RP*(L_x*L_y + L_x*L_z + L_y*L_z) + + end subroutine KD_treeGetArea + + subroutine GetEvents( tree, Events, NumThreads ) + use omp_lib + implicit none + !-arguments--------------------------------- + type(KDtree), intent(inout) :: tree + type(Event), intent(inout) :: Events(:,:) + integer, intent(out) :: NumThreads + !-local-variables--------------------------- + integer :: k +!$omp parallel shared(tree,Events,k) +!$omp single +#ifdef _OPENMP + NumThreads = omp_get_num_threads() +#else + NumThreads = 1 +#endif + do k = 1, NDIM +!$omp task firstprivate(k) + call Event_Construct( Events(k,:), tree% ObjectsList, tree, k ) + call QsortEvents( Events(k,:), 1, tree% NumOfEvents(k) ) +!$omp end task + end do +!$omp end single +!$omp end parallel + end subroutine GetEvents + + subroutine GetPointsEvents( tree, Events, PointList, NumThreads ) + use omp_lib + implicit none + !-arguments------------------------------------- + type(KDtree), intent(inout) :: tree + type(Event), intent(inout) :: Events(:,:) + type(point_type), intent(in) :: PointList(:) + integer, intent(out) :: NumThreads + !-local-variables------------------------------- + integer :: k +!$omp parallel shared(tree,Events,k,PointList) +!$omp single +#ifdef _OPENMP + NumThreads = omp_get_num_threads() +#else + NumThreads = 1 +#endif + do k = 1, NDIM +!$omp task firstprivate(k) + call Points_Event_Construct( Events(k,:), tree, k, PointList ) + call QsortEvents( Events(k,:), 1, tree% NumOfEvents(k) ) +!$omp end task + end do +!$omp end single +!$omp end parallel + + end subroutine GetPointsEvents + + recursive subroutine KDtree_buildTRIANGLES_BreadthFirst( this, Events, ObjsIndx, level, Depth_First ) + + implicit none + !-arguments------------------------------------------------ + type(KDtree), target, intent(inout) :: this + type(Event), allocatable, intent(inout) :: Events(:,:) + integer, intent(in) :: level + integer, intent(inout) :: ObjsIndx(:) + type(DepthFirst_type), intent(inout) :: Depth_First(:) + !-local-variables------------------------------------------ + type(KDtree), pointer :: child_L, child_R + type(Event), allocatable :: Events_L(:,:), Events_R(:,:) + integer :: j + + call this% GetArea() + + BoxIndex = BoxIndex + 1 + + this% index = BoxIndex + + if( this% level .lt. level .and. this% NumOfObjs .gt. 0 ) then + + if( this% which_KDtree .eq. TRIANGLES_KDTREE_SAH ) then + call this% EvaluateCostSAH( Events, BREADTHFIRST ) + else + call this% EvaluateCostMEDIAN( Events ) + end if + + if( this% split ) then + + allocate(this% child_L,this% child_R) + + child_L => this% child_L + child_R => this% child_R + + child_L% parent => this + child_R% parent => this + + child_L% level = this% level + 1 + child_R% level = this% level + 1 + + this% isLast = .false. + + if( this% which_KDtree .eq. TRIANGLES_KDTREE_MEDIAN ) then + child_L% axis = AxisIndex( this% axis ) + child_R% axis = AxisIndex( this% axis ) + endif + + call this% BuildChild( child_L, side_L ) + call this% BuildChild( child_R, side_R ) + + child_L% Min_n_of_Objs = this% Min_n_of_Objs + child_R% Min_n_of_Objs = this% Min_n_of_Objs + child_L% NumThreads = this% NumThreads + child_R% NumThreads = this% NumThreads + child_L% which_KDtree = this% which_KDtree + child_R% which_KDtree = this% which_KDtree + + call Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) + + allocate(Events_L(NDIM,2*child_L% NumOfObjs)) + allocate(Events_R(NDIM,2*child_R% NumOfObjs)) + + call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, BREADTHFIRST ) + + deallocate(Events) + + call KDtree_buildTRIANGLES_BreadthFirst( child_L, Events_L, ObjsIndx, level, Depth_First ) + call KDtree_buildTRIANGLES_BreadthFirst( child_R, Events_R, ObjsIndx, level, Depth_First ) + + else + this% isLast = .false. + if( this% level .lt. level ) this% isLast = .true. + do j = 1, size(Depth_First) + if( .not. Depth_First(j)% active ) then + Depth_First(j)% taskTree => this + allocate(Depth_First(j)% taskEvents(NDIM,2*this% NumOfObjs+1)) + Depth_First(j)% taskEvents = Events + Depth_First(j)% active = .true. + deallocate(Events) + exit + end if + end do + end if + else + this% isLast = .false. + if( this% NumOfObjs .eq. 0 ) this% isLast = .true. + do j = 1, size(Depth_First) + if( .not. Depth_First(j)% active ) then + Depth_First(j)% taskTree => this + allocate(Depth_First(j)% taskEvents(NDIM,2*this% NumOfObjs)) + Depth_First(j)% taskEvents = Events + Depth_First(j)% active = .true. + deallocate(Events) + exit + end if + end do + end if + + if( allocated(Events) ) deallocate( Events ) + + end subroutine KDtree_buildTRIANGLES_BreadthFirst + + + recursive subroutine KDtree_buildTRIANGLES_DepthFirst( this, Events, ObjsIndx ) + use omp_lib + implicit none + !-arguments---------------------------------------------------------- + type(KDtree), target, intent(inout) :: this + type(Event), allocatable, intent(inout) :: Events(:,:) + integer, intent(inout) :: ObjsIndx(:) + !-local-variables--------------------------------------------------- + type(KDtree), pointer :: child_L, child_R + type(Event), allocatable :: Events_L(:,:), Events_R(:,:) + + call this% GetArea() + +!$omp critical + BoxIndex = BoxIndex + 1 +!$omp end critical + + this% index = BoxIndex + + if( this% level .lt. depth .and. this% NumOfObjs .ge. this% Min_n_of_Objs ) then + + if( this% which_KDtree .eq. TRIANGLES_KDTREE_SAH ) then + call this% EvaluateCostSAH( Events, BREADTHFIRST ) + else + call this% EvaluateCostMEDIAN( Events ) + end if + + if( this% split ) then + + allocate(this% child_L,this% child_R) + + child_L => this% child_L + child_R => this% child_R + + child_L% parent => this + child_R% parent => this + + child_L% level = this% level + 1 + child_R% level = this% level + 1 + + this% isLast = .false. + + if( this% which_KDtree .eq. TRIANGLES_KDTREE_MEDIAN ) then + child_L% axis = AxisIndex( this% axis ) + child_R% axis = AxisIndex( this% axis ) + endif + + call this% BuildChild( child_L, side_L ) + call this% BuildChild( child_R, side_R ) + + child_L% Min_n_of_Objs = this% Min_n_of_Objs + child_R% Min_n_of_Objs = this% Min_n_of_Objs + child_L% NumThreads = this% NumThreads + child_R% NumThreads = this% NumThreads + child_L% which_KDtree = this% which_KDtree + child_R% which_KDtree = this% which_KDtree + + call Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) + + allocate(Events_L(NDIM,2*child_L% NumOfObjs)) + allocate(Events_R(NDIM,2*child_R% NumOfObjs)) + + call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, DEPTHFIRST ) + + deallocate(Events) + + call KDtree_buildTRIANGLES_DepthFirst( child_L, Events_L, ObjsIndx ) + call KDtree_buildTRIANGLES_DepthFirst( child_R, Events_R, ObjsIndx ) + + else + this% isLast = .true. + call this% SaveObjsIndeces( Events ) + deallocate(Events) + end if + else + this% isLast = .true. + if( this% NumOfObjs .gt. 0 ) then + call this% SaveObjsIndeces( Events ) + deallocate(Events) + end if + + end if + + if( allocated(Events) ) deallocate(Events) + + end subroutine KDtree_buildTRIANGLES_DepthFirst + + subroutine ComputeSplitSurface_L(tree, SplittingPlane, axis, S_L) + + implicit none + !-arguments------------------------------------- + type(KDtree), intent(in) :: tree + real(kind=rp), intent(in) :: SplittingPlane + integer, intent(in) :: axis + real(kind=rp), intent(out) :: S_L + !-local-variables------------------------------- + real(kind=rp) :: L_x, L_y, L_z + + select case( axis ) + case(1) + L_x = abs(SplittingPlane-tree% vertices(1,1)) + L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) + L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) + case(2) + L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) + L_y = abs(SplittingPlane-tree% vertices(2,1)) + L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) + case(3) + L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) + L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) + L_z = abs(SplittingPlane-tree% vertices(3,1)) + end select + + S_L = 2.0_RP*(L_x*L_y+L_y*L_z+L_x*L_z) + + end subroutine ComputeSplitSurface_L + + subroutine ComputeSplitSurface_R(tree, SplittingPlane, axis, S_R) + + implicit none + !-arguments------------------------------------ + type(KDtree), intent(in) :: tree + real(kind=rp), intent(in) :: SplittingPlane + integer, intent(in) :: axis + real(kind=rp), intent(out) :: S_R + !-local-variables------------------------------ + real(kind=rp) :: L_x, L_y, L_z + + select case( axis ) + case(1) + L_x = abs(tree% vertices(1,7)-SplittingPlane) + L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) + L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) + case(2) + L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) + L_y = abs(tree% vertices(2,7)-SplittingPlane) + L_z = abs(tree% vertices(3,7)-tree% vertices(3,1)) + case(3) + L_x = abs(tree% vertices(1,7)-tree% vertices(1,1)) + L_y = abs(tree% vertices(2,7)-tree% vertices(2,1)) + L_z = abs(tree% vertices(3,7)-SplittingPlane) + end select + + S_R = 2.0_RP*(L_x*L_y+L_y*L_z+L_x*L_z) + + end subroutine ComputeSplitSurface_R + + real(kind=rp) function computeSplittingCost(S, S_L, S_R, N_L, N_R) result(SplittingCost) + + implicit none + !-arguments------------------------------ + real(kind=rp), intent(in) :: S, S_L, S_R + integer, intent(in) :: N_L, N_R + + SplittingCost = C_TRANSVERSE + C_INTERSECT*(S_L/S*N_L+S_R/S*N_R) + + end function computeSplittingCost + + subroutine KDtree_EvaluateCostSAH( this, Events, parallelization_type ) + use omp_lib + implicit none + !-arguments---------------------------------------------------------------------------- + class(KDtree), intent(inout) :: this + type(Event), intent(in) :: Events(:,:) + integer, intent(in) :: parallelization_type + !-local-variables---------------------------------------------------------------------- + integer :: i, j, k, l, N_L(NDIM), N_R(NDIM), N_P(NDIM), & + BestSide(1), pminus, pplus, pvert, axis + real(kind=rp) :: SplittingCost(2), S_L, S_R, SplittingPlane + type(taskPart_type), allocatable :: taskPart(:) + integer :: level, taskNum + type(KDtree), allocatable :: taskTree(:) + + this% split = .false. + this% SplitCost = C_INTERSECT * this% NumOfObjs + + if( this% NumOfObjs .eq. 0 ) return + + select case( parallelization_type ) + + case( BREADTHFIRST ) + + call constrct_taskPart( taskPart, this% NumOfEvents(:), this% NumThreads ) + allocate(taskTree(this% NumThreads)) + taskTree(:)% S = this% S + taskTree(:)% split = .false. + taskTree(:)% SplitCost = this% SplitCost + +!$omp parallel shared(Events,taskPart,taskTree) +!$omp single + do taskNum = 1, size(taskPart)-1 +!$omp task private(i,k,pplus,pminus,pvert,SplittingPlane) firstprivate(taskNum) + do k = 1, NDIM + pplus = 0; pminus = 0; pvert = 0 + + SplittingPlane = Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index + & + taskPart(taskNum)% taskPartDim(k)% ChunkDim)% plane + i = 1 + do while(i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim) + + if( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .lt. 0 ) exit + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while(( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. END_ ) + pminus = pminus + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + end if + + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while(( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. PLANAR_ ) + pvert = pvert + 1 + if(Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane) & + taskPart(taskNum+1)% taskPartDim(k)% N_P = taskPart(taskNum+1)% taskPartDim(k)% N_P + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + end if + + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while(( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .or. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .lt. SplittingPlane ) .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. START_ ) + pplus = pplus + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + endif + + end do + + taskPart(taskNum+1)% taskPartDim(k)% N_R = taskPart(taskNum+1)% taskPartDim(k)% N_R - pminus - pvert + taskPart(taskNum+1)% taskPartDim(k)% N_L = taskPart(taskNum+1)% taskPartDim(k)% N_L + pplus + pvert + + end do +!$omp end task + end do +!$omp taskwait + + do taskNum = 1, size(taskPart) + do k = 1, NDIM + if( taskNum .eq. 1 ) then + taskPart(taskNum)% taskPartDim(k)% N_R = this% NumOfObjs + else + taskPart(taskNum)% taskPartDim(k)% N_R = taskPart(taskNum)% taskPartDim(k)% N_R + & + taskPart(taskNum-1)% taskPartDim(k)% N_R + taskPart(taskNum)% taskPartDim(k)% N_L = taskPart(taskNum)% taskPartDim(k)% N_L + & + taskPart(taskNum-1)% taskPartDim(k)% N_L + taskPart(taskNum)% taskPartDim(k)% N_P = taskPart(taskNum)% taskPartDim(k)% N_P + & + taskPart(taskNum-1)% taskPartDim(k)% N_P + end if + end do + end do + + do taskNum = 1, size(taskPart) +!$omp task private(i,k,pplus,pminus,pvert,SplittingPlane,N_R,N_L,N_P,SplittingCost,BestSide,S_L,S_R) firstprivate(taskNum) + do k = 1, NDIM + N_R(k) = taskPart(taskNum)% taskPartDim(k)% N_R + N_L(k) = taskPart(taskNum)% taskPartDim(k)% N_L + N_P(k) = taskPart(taskNum)% taskPartDim(k)% N_P + i = 1 + do while ( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) + pplus = 0; pminus = 0; pvert = 0 + + SplittingPlane = Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane + + if( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .lt. 0 ) exit + + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. END_ ) + pminus = pminus + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + end if + + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. PLANAR_ ) + pvert = pvert + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + end if + + if( i .le. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) then + do while( Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% plane .eq. SplittingPlane .and. & + Events(k,taskPart(taskNum)% taskPartDim(k)% Starting_index+i)% eType .eq. START_ ) + pplus = pplus + 1 + i = i + 1 + if( i .gt. taskPart(taskNum)% taskPartDim(k)% ChunkDim ) exit + end do + end if + + N_R(k) = N_R(k) - pminus - pvert + + call ComputeSplitSurface_L(this, SplittingPlane, k, S_L) + call ComputeSplitSurface_R(this, SplittingPlane, k, S_R) + + SplittingCost(1) = computeSplittingCost( taskTree(taskNum)% S, S_L, S_R, N_L(k)+N_P(k), N_R(k) ) + SplittingCost(2) = computeSplittingCost(taskTree(taskNum)% S, S_L, S_R, N_L(k), N_R(k)+N_P(k) ) + + if( SplittingCost(1) .lt. SplittingCost(2) ) then + BestSide(1) = 1 + else + BestSide(1) = 2 + end if + + if( taskTree(taskNum)% SplitCost .gt. SplittingCost(BestSide(1)) ) then + taskTree(taskNum)% SplittingPlane = SplittingPlane + taskTree(taskNum)% SplitCost = SplittingCost(BestSide(1)) + taskTree(taskNum)% split = .true. + taskTree(taskNum)% axis = k + taskTree(taskNum)% SIDE = BestSide(1) + end if + + N_L(k) = N_L(k) + pplus + pvert + N_P(k) = pvert + + end do + end do +!$omp end task + end do +!$omp end single +!$omp end parallel + + if( any( taskTree(:)% split ) ) then + BestSide = minloc(taskTree(:)% SplitCost) + this% SplittingPlane = taskTree(BestSide(1))% SplittingPlane + this% SplitCost = taskTree(BestSide(1))% SplitCost + this% split = .true. + this% axis = taskTree(BestSide(1))% axis + this% SIDE = taskTree(BestSide(1))% SIDE + end if + + deallocate(taskTree,taskPart) + + case( DEPTHFIRST ) + + N_R = this% NumOfObjs; N_L = 0; N_P = 0 + this% split = .false. + this% SplitCost = C_INTERSECT * this% NumOfObjs + + do k = 1, NDIM + i = 1 + do while ( i .le. this% NumOfEvents(k) ) + pplus = 0; pminus = 0; pvert = 0 + SplittingPlane = Events(k,i)% plane + + if( Events(k,i)% eType .lt. 0 ) exit + + if( i .le. this% NumOfEvents(k) ) then + do while( Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. END_ ) + pminus = pminus + 1 + i = i + 1 + if( i .gt. this% NumOfEvents(k) ) exit + end do + end if + + if( i .le. this% NumOfEvents(k) ) then + do while( Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. PLANAR_ ) + pvert = pvert + 1 + i = i + 1 + if( i .gt. this% NumOfEvents(k) ) exit + end do + end if + + if( i .le. this% NumOfEvents(k) ) then + do while( Events(k,i)% plane .eq. SplittingPlane .and. Events(k,i)% eType .eq. START_ ) + pplus = pplus + 1 + i = i + 1 + if( i .gt. this% NumOfEvents(k) ) exit + end do + end if + + N_R(k) = N_R(k) - pminus - pvert + + call ComputeSplitSurface_L(this, SplittingPlane, k, S_L) + call ComputeSplitSurface_R(this, SplittingPlane, k, S_R) + + SplittingCost(1) = computeSplittingCost( this% S, S_L, S_R, N_L(k)+N_P(k), N_R(k) ) + SplittingCost(2) = computeSplittingCost( this% S, S_L, S_R, N_L(k), N_R(k)+N_P(k) ) + + BestSide = minloc(SplittingCost) + + if( this% SplitCost .gt. SplittingCost(BestSide(1)) ) then + this% SplittingPlane = SplittingPlane + this% SplitCost = SplittingCost(BestSide(1)) + this% split = .true. + this% axis = k + this% SIDE = BestSide(1) + end if + N_L(k) = N_L(k) + pplus + pvert + N_P(k) = pvert + + end do + end do + + end select + + end subroutine KDtree_EvaluateCostSAH + + subroutine KDtree_EvaluateCostMEDIAN( this, Events ) + use omp_lib + implicit none + !-arguments---------------------------------- + class(KDtree), intent(inout) :: this + type(Event), intent(in) :: Events(:,:) + + this% SplittingPlane = sum(Events(this% axis,:)% median)/this% NumOfEvents(this% axis) + this% split = .true. + + end subroutine KDtree_EvaluateCostMEDIAN + + subroutine Event_ClassifyObjs( this, tree, child_L, child_R, ObjsIndx ) + + implicit none + !-arguments---------------------------------- + type(Event), intent(in) :: this(:) + type(KDtree), intent(inout) :: tree + type(KDtree), intent(inout) :: child_L, child_R + integer, intent(inout) :: ObjsIndx(:) + !-local-variables---------------------------------- + integer :: i, N_B, N_L, N_R + + ObjsIndx = BOTH + + N_B = tree% NumOfObjs; N_L = 0; N_R = 0 + + do i = 1, tree% NumOfEvents(tree% axis) + if( this(i)% eType .eq. END_ .and. & + (this(i)% plane .lt. tree% SplittingPlane .or. this(i)% plane .eq. tree% SplittingPlane) ) then + ObjsIndx(this(i)% index) = ONLYLEFT + N_L = N_L + 1 + elseif( this(i)% eType .eq. START_ .and. & + (this(i)% plane .gt. tree% SplittingPlane .or. this(i)% plane .eq. tree% SplittingPlane) ) then + ObjsIndx(this(i)% index) = ONLYRIGHT + N_R = N_R + 1 + elseif( this(i)% eType .eq. PLANAR_ ) then + if( this(i)% plane .lt. tree% SplittingPlane .or. & + (this(i)% plane .eq. tree% SplittingPlane .and. tree% SIDE .eq. 1) ) then + ObjsIndx(this(i)% index) = ONLYLEFT + N_L = N_L + 1 + elseif( this(i)% plane .gt. tree% SplittingPlane .or. & + (this(i)% plane .eq. tree% SplittingPlane .and. tree% SIDE .eq. 2) ) then + ObjsIndx(this(i)% index) = ONLYRIGHT + N_R = N_R + 1 + end if + end if + end do + + N_B = N_B - N_L - N_R + + tree% N_L = N_L; tree% N_R = N_R; tree% N_B = N_B + child_L% NumOfObjs = N_B+N_L + child_R% NumOfObjs = N_B+N_R + + end subroutine Event_ClassifyObjs + + subroutine KDtree_BuildChild( this, child, side ) + + implicit none + !-arguments---------------------------- + class(KDtree), intent(inout) :: this + type(KDtree), intent(inout) :: child + integer, intent(in) :: side + !-local-variables---------------------- + integer :: i + + child% vertices = this% vertices + child% isLast = .false. + + select case( this% axis ) + case( 1 ) + do i = 1, 4 + child% vertices(1,vertices_x(side+i)) = this% SplittingPlane + end do + case( 2 ) + do i = 1, 4 + child% vertices(2,vertices_y(side+i)) = this% SplittingPlane + end do + case( 3 ) + do i = 1, 4 + child% vertices(3,vertices_z(side+i)) = this% SplittingPlane + end do + end select + + end subroutine KDtree_BuildChild + + subroutine Event_BuildLists( this, tree, child_L, child_R, ObjsIndx, Events_L, Events_R, parallelization_type ) + use omp_lib + implicit none + !-arguments--------------------------------------------------------------------------------- + type(Event), intent(in) :: this(:,:) + type(KDtree), intent(in) :: tree + type(KDtree), intent(inout) :: child_L, child_R + integer, intent(inout) :: ObjsIndx(:) + type(Event), intent(inout) :: Events_L(:,:), Events_R(:,:) + integer, intent(in) :: parallelization_type + !-local-variables--------------------------------------------------------------------------- + type(taskPart_type), allocatable :: taskPart(:) + integer :: i, k, B, L, R, j, level, index, taskNum + integer :: index_L, index_R, N_Events_L(NDIM), N_Events_R(NDIM) + + select case( parallelization_type ) + + case( BREADTHFIRST ) + + child_L% NumOfEvents = 0 + child_R% NumOfEvents = 0 + call constrct_taskPart( taskPart, tree% NumOfEvents(:), tree% NumThreads ) + +!$omp parallel shared(N_Events_L,N_Events_R,Events_L,Events_R,this,ObjsIndx,taskPart) +!$omp single + N_Events_L = 0 + N_Events_R = 0 + do taskNum = 1, size(taskPart) +!$omp task private(i,k,L,R,index) firstprivate(taskNum) + do k = 1, NDIM + L = 0; R = 0 + index = taskPart(taskNum)% taskPartDim(k)% starting_index + do i = 1, taskPart(taskNum)% taskPartDim(k)% ChunkDim + if( ObjsIndx(this(k,index+i)% index) .eq. ONLYLEFT ) then + L = L + 1 + elseif( ObjsIndx(this(k,index+i)% index) .eq. ONLYRIGHT ) then + R = R + 1 + elseif( ObjsIndx(this(k,index+i)% index) .eq. BOTH ) then + L = L + 1 + R = R + 1 + end if + end do + taskPart(taskNum)% taskPartDim(k)% N_L = L + taskPart(taskNum)% taskPartDim(k)% N_R = R + end do +!$omp end task + end do +!$omp taskwait + + do k = 1, NDIM + N_Events_L = sum(taskPart(:)% taskPartDim(k)% N_L) + N_Events_R = sum(taskPart(:)% taskPartDim(k)% N_R) + end do + + do taskNum = size(taskPart),2,-1 + do k = 1, NDIM + taskPart(taskNum)% taskPartDim(k)% N_R = sum(taskPart(1:taskNum-1)% taskPartDim(k)% N_R) + taskPart(taskNum)% taskPartDim(k)% N_L = sum(taskPart(1:taskNum-1)% taskPartDim(k)% N_L) + end do + end do + + taskPart(1)% taskPartDim(:)% N_R = 0 + taskPart(1)% taskPartDim(:)% N_L = 0 + + do taskNum = 1, size(taskPart) +!$omp task private(i,k,L,R,index_L,index_R,index) firstprivate(taskNum) + do k = 1, NDIM + L = 0; R = 0 + index_L = taskPart(taskNum)% taskPartDim(k)% N_L + index_R = taskPart(taskNum)% taskPartDim(k)% N_R + index = taskPart(taskNum)% taskPartDim(k)% starting_index + do i = 1, taskPart(taskNum)% taskPartDim(k)% ChunkDim + if( ObjsIndx(this(k,index+i)% index) .eq. ONLYLEFT ) then + L = L + 1 + Events_L(k,L+index_L) = this(k,index+i) + elseif( ObjsIndx(this(k,index+i)% index) .eq. ONLYRIGHT ) then + R = R + 1 + Events_R(k,R+index_R) = this(k,index+i) + elseif( ObjsIndx(this(k,index+i)% index) .eq. BOTH ) then + L = L + 1 + R = R + 1 + Events_L(k,L+index_L) = this(k,index+i) + Events_R(k,R+index_R) = this(k,index+i) + end if + end do + end do +!$omp end task + end do +!$omp end single +!$omp end parallel + + child_L% NumOfEvents = N_Events_L + child_R% NumOfEvents = N_Events_R + + deallocate(taskPart) + + case( DEPTHFIRST ) + + child_L% NumOfEvents = 0 + child_R% NumOfEvents = 0 + + do k = 1, NDIM + L = 0; R = 0 + do i = 1, tree% NumOfEvents(k) + if( ObjsIndx(this(k,i)% index) .eq. ONLYLEFT ) then + L = L + 1 + Events_L(k,L) = this(k,i) + child_L% NumOfEvents(k) = child_L% NumOfEvents(k) + 1 + elseif( ObjsIndx(this(k,i)% index) .eq. ONLYRIGHT ) then + R = R + 1 + Events_R(k,R) = this(k,i) + child_R% NumOfEvents(k) = child_R% NumOfEvents(k) + 1 + elseif( ObjsIndx(this(k,i)% index) .eq. BOTH ) then + L = L + 1 + R = R + 1 + Events_L(k,L) = this(k,i) + Events_R(k,R) = this(k,i) + child_L% NumOfEvents(k) = child_L% NumOfEvents(k) + 1 + child_R% NumOfEvents(k) = child_R% NumOfEvents(k) + 1 + end if + end do + end do + + end select + + end subroutine Event_BuildLists + + subroutine KDtree_SaveObjsIndeces( this, Events ) + + implicit none + !-arguments---------------------------------- + class(KDtree), intent(inout) :: this + type(Event), intent(in) :: Events(:,:) + !-local-variables---------------------------- + integer :: i, k + + allocate(this% ObjsIndeces(this% NumOfObjs)) + + k = 1 + + do i = 1, this% NumOfEvents(1) + if( Events(1,i)% eType .eq. START_ .or. & + Events(1,i)% eType .eq. PLANAR_ ) then + this% ObjsIndeces(k) = Events(1,i)% index + k = k + 1 + if( k .gt. this% NumOfObjs ) exit + end if + end do + + end subroutine KDtree_SaveObjsIndeces + + subroutine Event_Construct( this, ObjectsList, tree, axis ) + + implicit none + !-arguments------------------------------------------ + type(Event), intent(inout) :: this(:) + type(object_type), intent(in) :: ObjectsList(:) + type(KDtree), intent(inout) :: tree + integer, intent(in) :: axis + !-local-variables------------------------------------ + integer :: i, j, k, shift + + tree% NumOfEvents(axis) = 0 + + do i =1, tree% NumOfObjs + this(i)% index = ObjectsList(i)% index + this(i+tree% NumOfObjs)% index = ObjectsList(i)% index + + this(i)% plane = minval(ObjectsList(i)% vertices(:)% coords(axis)) + this(i+tree% NumOfObjs)% plane = maxval(ObjectsList(i)% vertices(:)% coords(axis)) + + if( almostEqual(this(i)% plane,this(i+tree% NumOfObjs)% plane) ) then + this(i)% eType = PLANAR_ + !pushed to the end + this(i+tree% NumOfObjs)% plane = huge(1.0_RP) + this(i+tree% NumOfObjs)% eType = -1 + tree% NumOfEvents(axis) = tree% NumOfEvents(axis) + 2 + else + this(i)% eType = START_ + this(i+tree% NumOfObjs)% eType = END_ + tree% NumOfEvents(axis) = tree% NumOfEvents(axis) + 2 + end if + this(i)% median = sum(ObjectsList(i)% vertices(:)% coords(axis))/3.0_RP + this(i+tree% NumOfObjs)% median = this(i)% median + end do + + end subroutine Event_Construct + +!////////////////// SUBROUTINES FOR KD TREE made of points /////////////////////// + + recursive subroutine KDtree_buildPoints_BreadthFirst( this, Events, ObjsIndx, level, Depth_First ) + + implicit none + !-arguments--------------------------------------------------- + type(KDtree), target, intent(inout) :: this + type(Event), allocatable, intent(inout) :: Events(:,:) + integer, intent(in) :: level + integer, intent(inout) :: ObjsIndx(:) + type(DepthFirst_type), intent(inout) :: Depth_First(:) + !-local-variables--------------------------------------------- + type(KDtree), pointer :: child_L, child_R + type(Event), allocatable :: Events_L(:,:), Events_R(:,:) + integer :: j + + BoxIndex = BoxIndex + 1 + + this% index = BoxIndex + this% NumOfEvents(:) = this% NumOfObjs + + if( this% level .lt. level .and. this% NumOfObjs .gt. 0 ) then + + if( mod(this% NumOfObjs,2) .eq. 0 ) then + this% HalfEvents = this% NumOfObjs/2 + this% SIDE = EVEN + else + this% HalfEvents = this% NumOfObjs/2 + this% HalfEvents = this% HalfEvents+1 + this% SIDE = ODD + end if + + this% SplittingPlane = Events(this% axis,this% HalfEvents)% plane + + allocate(this% child_L,this% child_R) + + child_L => this% child_L + child_R => this% child_R + + child_L% level = this% level + 1 + child_R% level = this% level + 1 + + this% isLast = .false. + + call this% BuildChild( child_L, side_L ) + call this% BuildChild( child_R, side_R ) + + child_L% Min_n_of_Objs = this% Min_n_of_Objs + child_R% Min_n_of_Objs = this% Min_n_of_Objs + child_L% NumThreads = this% NumThreads + child_R% NumThreads = this% NumThreads + + child_L% axis = AxisIndex( this% axis ) + child_R% axis = AxisIndex( this% axis ) + + call Points_Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) + + allocate(Events_L(NDIM,child_L% NumOfObjs)) + allocate(Events_R(NDIM,child_R% NumOfObjs)) + + call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, BREADTHFIRST ) + + deallocate(Events) + + call KDtree_buildPoints_BreadthFirst( child_L, Events_L, ObjsIndx, level, Depth_First ) + call KDtree_buildPoints_BreadthFirst( child_R, Events_R, ObjsIndx, level, Depth_First ) + + else + this% isLast = .false. + if( this% NumOfObjs .eq. 0 ) this% isLast = .true. + do j = 1, size(Depth_First) + if( .not. Depth_First(j)% active ) then + Depth_First(j)% taskTree => this + allocate(Depth_First(j)% taskEvents(NDIM,this% NumOfObjs)) + Depth_First(j)% taskEvents = Events + Depth_First(j)% active = .true. + deallocate(Events) + exit + end if + end do + end if + + if( allocated( Events ) ) deallocate( Events ) + + end subroutine KDtree_buildPoints_BreadthFirst + + recursive subroutine KDtree_buildPoints_DepthFirst( this, Events, ObjsIndx ) + use omp_lib + implicit none + !-arguments------------------------------------------------ + type(KDtree), target, intent(inout) :: this + type(Event), allocatable, intent(inout) :: Events(:,:) + integer, intent(inout) :: ObjsIndx(:) + !-local-variables------------------------------------------ + type(KDtree), pointer :: child_L, child_R + type(Event), allocatable :: Events_L(:,:), Events_R(:,:) + +!$omp critical + BoxIndex = BoxIndex + 1 +!$omp end critical + + this% index = BoxIndex + this% NumOfEvents(:) = this% NumOfObjs + + if( this% level .lt. depth .and. this% NumOfObjs .ge. this% Min_n_of_Objs ) then + + if( mod(this% NumOfObjs,2) .eq. 0 ) then + this% HalfEvents = this% NumOfObjs/2 + this% SIDE = EVEN + else + this% HalfEvents = this% NumOfObjs/2 + this% HalfEvents = this% HalfEvents+1 + this% SIDE = ODD + end if + + this% SplittingPlane = Events(this% axis,this% HalfEvents)% plane + + allocate(this% child_L,this% child_R) + + child_L => this% child_L + child_R => this% child_R + + child_L% level = this% level + 1 + child_R% level = this% level + 1 + + this% isLast = .false. + + call this% BuildChild( child_L, side_L ) + call this% BuildChild( child_R, side_R ) + + child_L% Min_n_of_Objs = this% Min_n_of_Objs + child_R% Min_n_of_Objs = this% Min_n_of_Objs + child_L% NumThreads = this% NumThreads + child_R% NumThreads = this% NumThreads + + child_L% axis = AxisIndex( this% axis ) + child_R% axis = AxisIndex( this% axis ) + + call Points_Event_ClassifyObjs( Events(this% axis,:), this, child_L, child_R, ObjsIndx ) + + allocate(Events_L(NDIM,child_L% NumOfObjs)) + allocate(Events_R(NDIM,child_R% NumOfObjs)) + + call Event_BuildLists( Events, this, child_L, child_R, ObjsIndx, Events_L, Events_R, DEPTHFIRST ) + + deallocate(Events) + + call KDtree_buildPoints_DepthFirst( child_L, Events_L, ObjsIndx ) + call KDtree_buildPoints_DepthFirst( child_R, Events_R, ObjsIndx ) + + else + this% isLast = .true. + if( this% NumOfObjs .gt. 0 ) then + call this% SavePointsIndeces(Events) + deallocate(Events) + end if + end if + + if( allocated( Events ) ) deallocate( Events ) + + end subroutine KDtree_buildPoints_DepthFirst + + + subroutine KDtree_SavePointsIndeces( this, Events ) + + implicit none + !-arguments---------------------------------- + class(KDtree), intent(inout) :: this + type(Event), intent(in) :: Events(:,:) + !-local-variables---------------------------- + integer :: i, k + + allocate(this% ObjsIndeces(this% NumOfObjs)) + + do i = 1, this% NumOfObjs + this% ObjsIndeces(i) = Events(1,i)% index + end do + + end subroutine KDtree_SavePointsIndeces + + subroutine Points_Event_ClassifyObjs( this, tree, child_L, child_R, ObjsIndx ) + use omp_lib + implicit none + !-arguments---------------------------------------- + type(Event), intent(in) :: this(:) + type(KDtree), intent(inout) :: tree + type(KDtree), intent(inout) :: child_L, child_R + integer, intent(inout) :: ObjsIndx(:) + !-local-variables---------------------------------- + integer :: i, N_B, N_L, N_R + + N_L = 0; N_R = 0; N_B = 0 + + do i = 1, tree% NumOfObjs + if( i .lt. tree% HalfEvents ) then + ObjsIndx(this(i)% index) = ONLYLEFT + N_L = N_L + 1 + elseif( i .gt. tree% HalfEvents ) then + ObjsIndx(this(i)% index) = ONLYRIGHT + N_R = N_R + 1 + elseif( i .eq. tree% HalfEvents ) then + if( tree% SIDE .eq. ODD ) then + ObjsIndx(this(i)% index) = BOTH + N_B = N_B + 1 + else + ObjsIndx(this(i)% index) = ONLYLEFT + N_L = N_L + 1 + end if + end if + end do + + tree% N_L = N_L; tree% N_R = N_R; tree% N_B = N_B + child_L% NumOfObjs = N_L + N_B + child_R% NumOfObjs = N_R + N_B + + end subroutine Points_Event_ClassifyObjs + + subroutine Points_Event_construct(this, tree, axis, PointList) + use MPI_IBMUtilities + implicit none + !-arguments-------------------------------------- + type(Event), intent(inout) :: this(:) + type(KDtree), intent(inout) :: tree + integer, intent(in) :: axis + type(point_type), intent(in) :: PointList(:) + !-local-varibales-------------------------------- + integer :: i + + tree% NumOfEvents = tree% NumOfObjs + + do i = 1, tree% NumOfObjs !no planar evetns thus NumOfObjs = NumOfEvents + this(i)% index = PointList(i)% index + this(i)% plane = PointList(i)% coords(axis) + this(i)% eType = START_ + end do + + end subroutine Points_Event_construct + +!/////////////////////////////// EVENTS SORTING /////////////////////// + + recursive subroutine QsortEvents( Events, startIdx, endIdx ) + + implicit none + !-arguments------------------------------------- + type(Event), intent(inout) :: Events(:) + integer, intent(in) :: startIdx, endIdx + !-local-variables------------------------------- + type(Event) :: pivot + integer :: left, right, mid + + if( startIdx .gt. endIdx ) return + + left = startIdx; right = endIdx + + mid = (startIdx + endIdx)/2 + + pivot = Events(mid) + + do while ( left < right ) + do while( EventIsLess(Events(left),pivot) ) + left = left + 1 + end do + do while( EventIsLess(pivot,Events(right)) ) + right = right - 1 + end do + if( left .le. right ) then + call swapEvents(Events(left), Events(right)) + left = left + 1 + right = right - 1 + end if + end do + + if( startIdx .lt. right ) call QsortEvents( Events, startIdx, right ) + if( left .lt. endIdx ) call QsortEvents( Events, left, endIdx ) + + end subroutine QsortEvents + + subroutine swapEvents( EventA, EventB ) + + implicit none + !-arguments------------------------------------ + type(Event), intent(inout) :: EventA, EventB + !-local-variables------------------------------ + type(Event) :: temp + + temp = EventA + EventA = EventB + EventB = temp + + end subroutine swapEvents + + logical function EventIsLess( EventA, EventB ) result( IsLess ) + + implicit none + !-arguments---------------------------------- + type(Event), intent(in) :: EventA, EventB + + if( EventA% plane .eq. EventB% plane ) then + if( EventA% eTYPE .lt. EventB% eTYPE ) then + IsLess = .true. + else + IsLess = .false. + end if + elseif( EventA% plane < EventB% plane ) then + IsLess = .true. + else + IsLess = .false. + end if + + end function EventIsLess + + subroutine constrct_taskPart( taskPart, TotalChunk, NumOfThreads ) + + implicit none + !-arguments---------------------------------------------------------- + type(taskPart_type), allocatable, intent(inout) :: taskPart(:) + integer, intent(in) :: NumOfThreads + integer, intent(in) :: TotalChunk(NDIM) + !-local-variables---------------------------------------------------- + integer :: ChunkDim(NDIM,NumOfThreads), i, k + + ChunkDim = ChunkPartition( TotalChunk, NumOfThreads ) + + if( allocated(taskPart) ) deallocate(taskPart) + allocate(taskPart(NumOfThreads)) + + do k = 1, NDIM + do i = 1, NumOfThreads + taskPart(i)% taskPartDim(k)% ChunkDim = ChunkDim(k,i) + taskPart(i)% taskPartDim(k)% Starting_index = (i-1)*ChunkDim(k,1) + + taskPart(i)% taskPartDim(k)% N_R = 0 + taskPart(i)% taskPartDim(k)% N_L = 0 + taskPart(i)% taskPartDim(k)% N_P = 0 + taskPart(i)% taskPartDim(k)% Values2Check = 0 + end do + end do + + end subroutine constrct_taskPart + + function ChunkPartition( TotalChunk, NumOfThreads ) result(ChunkDim) + + implicit none + !-arguments----------------------------------------- + integer, intent(in) :: NumOfThreads + integer, intent(in) :: TotalChunk(NDIM) + integer :: ChunkDim(NDIM,NumOfThreads) + !-local-variables-------------------------------------- + integer :: Part, i, k + + do k = 1, NDIM + Part = TotalChunk(k)/NumOfThreads + + do i = 1, NumOfThreads + ChunkDim(k,i) = Part + if( i .eq. NumOfThreads ) then + ChunkDim(k,i) = ChunkDim(k,i) + (TotalChunk(k) - i*Part) + end if + end do + end do + + end function ChunkPartition + +end module KDClass diff --git a/Solver/src/libs/mesh/MPI_IBMUtilities.f90 b/Solver/src/libs/mesh/MPI_IBMUtilities.f90 index 8ddc4b7f7..942d4acc2 100644 --- a/Solver/src/libs/mesh/MPI_IBMUtilities.f90 +++ b/Solver/src/libs/mesh/MPI_IBMUtilities.f90 @@ -1,1887 +1,1390 @@ - -#include "Includes.h" -module MPI_IBMUtilities - - use SMConstants - use Utilities - use TessellationTypes - use OrientedBoundingBox - use MPI_Process_info -#ifdef _HAS_MPI_ - use mpi -#endif - -! amximum 9 points after polygon's been split - -!~ ----> axis -!~ | | -!~ plane1 plane2 - - implicit none - - private - public :: MPI_KDtree_type, KDtree_partition_type - public :: MPI_KDtree_buildPartition, MPI_KDtree_destroy, recvSTLPartition, SendSTLPartitions - public :: MPI_M_Points_type, MPI_Pointpartition, MPI_Pointpartition_destroy - public :: RootSendPointMaskPartition, MaskCandidates, RootRecvrecvPointMaskPartition - public :: sendPointMaskPartition, RecvPointMaskPartition - public :: RootRecvPointMask, RootSendPointMask - public :: recvPointMask, SendPointMask - public :: RootrecvBandPoint, RootSendBandPoint, MPI_BandPointpartition - public :: recvBandPointPartition, sendBandPointPartition - public :: recvGeom, sendGeom, recvIP_NearestPoints, sendIP_NearestPoints - - integer, parameter :: ON_PLANE = 0, IN_FRONT_PLANE = 1, BEHIND_PLANE = 2 - - - type KDtree_partition_type - - real(kind=RP), dimension(2) :: plane - real(kind=RP), dimension(NDIM,8) :: vertices - integer :: prev, axis, ID - type(STLfile) :: stl - - contains - - procedure :: build => KDtree_partition_build - procedure :: SetVertices => KDtree_partition_SetVertices - procedure :: plot => KDtree_partition_plot - procedure :: plotObjs => KDtree_partition_plotObjs - - end type KDtree_partition_type - - type MPI_KDtree_type - - type(KDtree_partition_type), dimension(:), allocatable :: partition - real(kind=RP) :: axisLength - integer :: axis - - contains - - procedure :: build => MPI_KDtree_build - procedure :: SplittingPlanes => MPI_KDtree_SplittingPlanes - procedure :: checkObj => MPI_KDtree_checkObj - procedure :: STL_partition => MPI_KDtree_STL_partition - - end type MPI_KDtree_type - - - type MPI_M_Points_type - - type(point_type), dimension(:), allocatable :: x - integer, dimension(:), allocatable :: buffer - integer :: NumOfObjs, & - LocNumOfObjs, & - NumOfF_Points - - contains - - procedure :: destroy => MPI_M_Points_type_destroy - - end type MPI_M_Points_type - - type(MPI_KDtree_type), public :: MPI_KDtree_all - type(KDtree_partition_type), public :: MPI_KDtreePartition - - type(MPI_M_Points_type), public :: MPI_M_Points_ALL - type(MPI_M_Points_type), public :: MPI_M_PointsPartition - - type(MPI_M_Points_type), public :: BandPoints_ALL - -contains - - subroutine MPI_BandPointpartition(NumOfObjs, BandPoints) - - implicit none - !-arguments----------------------------------------- - integer, intent(in) :: NumOfObjs - type(PointLinkedList), intent(inout) :: BandPoints - !-local-variables----------------------------------- - type(point_type), pointer :: p - integer :: i - - allocate(BandPoints_ALL% buffer(MPI_Process% nProcs)) - allocate(BandPoints_ALL% x(NumOfObjs)) - - BandPoints_ALL% buffer = 0 - BandPoints_ALL% NumOfObjs = NumOfObjs - - BandPoints_ALL% buffer(1) = BandPoints% NumOfPoints - - if( MPI_Process% isRoot ) then - p => BandPoints% head - do i = 1, BandPoints% NumOfPoints - BandPoints_ALL% x(i)% index = p% index - BandPoints_ALL% x(i)% coords(1) = p% coords(1) - BandPoints_ALL% x(i)% coords(2) = p% coords(2) - BandPoints_ALL% x(i)% coords(3) = p% coords(3) - BandPoints_ALL% x(i)% local_Position(1) = p% local_Position(1) - BandPoints_ALL% x(i)% local_Position(2) = p% local_Position(2) - BandPoints_ALL% x(i)% local_Position(3) = p% local_Position(3) - BandPoints_ALL% x(i)% element_index = p% element_index - BandPoints_ALL% x(i)% partition = p% partition - p => p% next - end do - end if - - end subroutine MPI_BandPointpartition - - subroutine MPI_Pointpartition(NumOfObjs) - - implicit none - !-arguments----------------------- - integer, intent(in) :: NumOfObjs - - MPI_M_Points_ALL% NumOfObjs = NumOfObjs - - allocate(MPI_M_Points_ALL% buffer(MPI_Process% nProcs)) - allocate(MPI_M_Points_ALL% x(NumOfObjs)) - - MPI_M_Points_ALL% buffer = 0 - - MPI_M_Points_ALL% buffer(1) = MPI_M_PointsPartition% LocNumOfObjs - MPI_M_Points_ALL% x(:)% isInsideBody = .false. - - if( MPI_Process% isRoot ) then - MPI_M_Points_ALL% x(1:MPI_M_PointsPartition% LocNumOfObjs) = & - MPI_M_PointsPartition% x(1:MPI_M_PointsPartition% LocNumOfObjs) - end if - - end subroutine MPI_Pointpartition - - - - subroutine MPI_Pointpartition_destroy() - - implicit none - - deallocate(BandPoints_ALL% buffer) - deallocate(BandPoints_ALL% x) - - end subroutine MPI_Pointpartition_destroy - - - - - subroutine MPI_KDtree_buildPartition( stl ) - - implicit none - !-arguments--------------------------- - type(STLfile), intent(inout) :: stl - !-local-variables--------------------- - integer :: i - - if( MPI_Process% doMPIRootAction ) then -#ifdef _HAS_MPI_ - call MPI_KDtree_all% build( stl% body ) - call MPI_KDtree_all% SplittingPlanes( stl% body ) - call MPI_KDtree_all% STL_partition( stl% ObjectsList ) -#endif - elseif( MPI_Process% nProcs .eq. 1 ) then - MPI_KDtreePartition% stl = stl - MPI_KDtreePartition% vertices = OBB(stl% body)% LocVertices - end if - - if( MPI_Process% doMPIRootAction ) then - do i = 1, MPI_Process% nProcs - call MPI_KDtree_ALL% partition(i)% stl% DescribePartitions() - end do - end if - - end subroutine MPI_KDtree_buildPartition - - subroutine MPI_KDtree_build( this, STLNum ) - use MPI_Process_Info - implicit none - !-arguments--------------------------------------- - class(MPI_KDtree_type), intent(inout) :: this - integer, intent(in) :: STLNum - !-local-variables--------------------------------- - real(kind=RP), dimension(NDIM) :: axis - integer, dimension(1) :: maxvec - integer :: i - - allocate(this% partition(MPI_Process% nProcs)) - - axis = (/ OBB(STLNum)% MBR% Length,OBB(STLNum)% MBR% Width,abs(OBB(STLNum)% nMax) + abs(OBB(STLNum)% nMin) /) - - maxvec = maxloc( axis ) - - this% axis = maxvec(1) - this% axisLength = axis(this% axis) - - do i = 1, MPI_Process% nProcs - this% partition(i)% axis = this% axis - end do - - end subroutine MPI_KDtree_build - - subroutine KDtree_partition_build( this, rank ) - - implicit none - !-arguments------------------------------------------- - class(KDtree_partition_type), intent(inout) :: this - integer, intent(in) :: rank - - this% plane = 0.0_RP - this% vertices = 0.0_RP - this% prev = 0 - this% axis = 0 - this% ID = rank - - safedeallocate(this% stl% ObjectsList) - - end subroutine KDtree_partition_build - - subroutine MPI_KDtree_destroy() - use MPI_Process_Info - implicit none - !-local-varaibles----------------------------- - integer :: i - - if( MPI_Process% doMPIRootAction ) then -#ifdef _HAS_MPI_ - do i = 1, size(MPI_KDtree_all% partition) - call MPI_KDtree_all% partition(i)% stl% destroy() - end do - deallocate(MPI_KDtree_all% partition) - MPI_KDtree_all% axis = 0 - MPI_KDtree_all% axisLength = 0.0_RP -#endif - end if - - call MPI_KDtreePartition% stl% destroy() - MPI_KDtreePartition% plane = 0.0_RP - MPI_KDtreePartition% prev = 0 - MPI_KDtreePartition% axis = 0 - MPI_KDtreePartition% ID = 0 - - end subroutine MPI_KDtree_destroy - - - subroutine KDtree_partition_plot( this ) - use MPI_Process_Info - implicit none - !-arguments----------------------------------------- - class(KDtree_partition_type), intent(inout) :: this - !-local-variables----------------------------------- - real(kind=RP), dimension(NDIM) :: x_g - character(len=LINE_LENGTH) :: filename, myString - integer :: i, j, funit - - funit = UnusedUnit() - - write(myString,'(i100)') MPI_Process% rank - - filename = 'STL_partition'//trim(adjustl(myString)) - filename = trim(filename) - - open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a25)") 'TITLE = "Partition Block"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' - do i = 1, 8 - call OBB(this% stl% body)% ChangeRefFrame( this% vertices(:,i), 'global', x_g ) - write(funit,'(3E13.5)') x_g(1),x_g(2), x_g(3) - end do - - write(funit,'(4i2)') 1, 2, 3, 4 - write(funit,'(4i2)') 1, 5, 8, 4 - write(funit,'(4i2)') 5, 6, 7, 8 - write(funit,'(4i2)') 2, 3, 7, 6 - write(funit,'(4i2)') 4, 8, 7, 3 - write(funit,'(4i2)') 1, 2, 6, 5 - - close(funit) - - end subroutine KDtree_partition_plot - - - subroutine KDtree_partition_plotObjs( this, STLname ) - use MPI_Process_Info - implicit none - !-arguments------------------------------------------ - class(KDtree_partition_type), intent(inout) :: this - character(len=*), intent(in) :: STLname - !-local-variables------------------------------------ - real(kind=RP), dimension(NDIM) :: x_g - character(len=LINE_LENGTH) :: filename, myString - integer :: i, j, funit - - funit = UnusedUnit() - - write(myString,'(i100)') MPI_Process% rank - - if( MPI_Process% nProcs .gt. 1 ) then - filename = trim(STLname)//'_partition'//trim(adjustl(myString)) - filename = trim(filename) - else - filename = trim(STLname) - end if - - open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "Partition objects"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - do i = 1, SIZE(this% stl% ObjectsList) - write(funit,"(a66)") 'ZONE NODES=3, ELEMENTS = 1, DATAPACKING=POINT, ZONETYPE=FETRIANGLE' - do j = 1, this% stl% ObjectsList(i)% NumOfVertices - call OBB(this% stl% body)% ChangeRefFrame( this% stl% ObjectsList(i)% vertices(j)% coords, 'global', x_g ) - write(funit,'(3E13.5)') x_g(1), x_g(2), x_g(3) - end do - - write(funit,'(3i2)') 1, 2, 3 - end do - - close(funit) - - end subroutine KDtree_partition_plotObjs - - subroutine MPI_KDtree_STL_partition( this, objs ) - use MPI_Process_Info - implicit none - !-arguments-------------------------------------------------------------------- - class(MPI_KDtree_type), intent(inout) :: this - type(Object_type), dimension(:), intent(inout) :: objs - !-local-variables-------------------------------------------------------------- - type(Object_type) :: objTemp, ObjFront, & - ObjBack - type(Object_type), dimension(:), allocatable :: tria - integer, dimension(MPI_Process% nProcs) :: index - integer, dimension(2) :: PARTITION - real(kind=RP), dimension(NDIM) :: plane_normal, plane_point - integer :: i, j, k, n, max_index - - index = 0 - -!$omp parallel shared(this,i,objs,index) -!$omp do schedule(runtime) private(j,PARTITION) - do i = 1, SIZE(objs) - - call this% checkObj( maxval(objs(i)% vertices(:)% coords(this% axis)), & - minval(objs(i)% vertices(:)% coords(this% axis)), & - PARTITION ) - - objs(i)% partition(1) = PARTITION(1) - objs(i)% partition(2) = PARTITION(2) - - if( PARTITION(2) - PARTITION(1) .eq. 0 ) then -!$omp critical - index(PARTITION(1)) = index(PARTITION(1)) + 1 -!$omp end critical - elseif( PARTITION(2) - PARTITION(1) .gt. 0 ) then -!$omp critical - do j = 0, PARTITION(2) - PARTITION(1) - index(PARTITION(1)+j) = index(PARTITION(1)+j) + 3 !max number of triagnles is 3 - end do -!$omp end critical - end if - - end do -!$omp end do -!$omp end parallel - - do i = 1, MPI_Process% nProcs - allocate(this% partition(i)% stl% ObjectsList(index(i))) - end do - - associate( partitions => this% partition ) - - index = 0 - plane_normal = 0.0_RP - plane_normal(this% axis) = 1.0_RP - - do i = 1, SIZE(objs) - if( objs(i)% partition(1) - objs(i)% partition(2) .eq. 0 ) then - index(objs(i)% partition(1)) = index(objs(i)% partition(1)) + 1 - partitions(objs(i)% partition(1))% stl% ObjectsList(index(objs(i)% partition(1))) = objs(i) - partitions(objs(i)% partition(1))% stl% ObjectsList(index(objs(i)% partition(1)))% index = index(objs(i)% partition(1)) - else - objTemp = objs(i) - plane_point = 0.0_RP - do j = 0, objs(i)% partition(2) - objs(i)% partition(1) - 1 - plane_point(this% axis) = partitions(objs(i)% partition(1)+j)% plane(2) - call ClipPloy( objTemp, plane_normal, plane_point, ObjFront, ObjBack ) - call Poly2Triangles( ObjBack, tria ) - index(objs(i)% partition(1)+j) = index(objs(i)% partition(1)+j) + 1 - partitions(objs(i)% partition(1)+j)% stl% ObjectsList(index(objs(i)% partition(1)+j)) = ObjBack - partitions(objs(i)% partition(1)+j)% stl% ObjectsList(index(objs(i)% partition(1)+j))% index = index(objs(i)% partition(1)+j) - if( allocated(tria) ) then - do k = 1, size(tria) - index(objs(i)% partition(1)+j) = index(objs(i)% partition(1)+j) + 1 - partitions(objs(i)% partition(1)+j)% stl% ObjectsList(index(objs(i)% partition(1)+j)) = tria(k) - partitions(objs(i)% partition(1)+j)% stl% ObjectsList(index(objs(i)% partition(1)+j))% index = index(objs(i)% partition(1)+j) - end do - deallocate(tria) - end if - objTemp = ObjFront - end do - call Poly2Triangles( ObjFront, tria ) - index(objs(i)% partition(2)) = index(objs(i)% partition(2)) + 1 - partitions(objs(i)% partition(2))% stl% ObjectsList(index(objs(i)% partition(2))) = ObjFront - partitions(objs(i)% partition(2))% stl% ObjectsList(index(objs(i)% partition(2)))% index = index(objs(i)% partition(2)) - if( allocated(tria) ) then - do k = 1, size(tria) - index(objs(i)% partition(2)) = index(objs(i)% partition(2)) + 1 - partitions(objs(i)% partition(2))% stl% ObjectsList(index(objs(i)% partition(2))) = tria(k) - partitions(objs(i)% partition(2))% stl% ObjectsList(index(objs(i)% partition(2)))% index = index(objs(i)% partition(2)) - end do - deallocate(tria) - end if - end if - end do - - end associate - - do i = 1, MPI_Process% nProcs - this% partition(i)% stl% NumOfObjs = index(i) - this% partition(i)% stl% partition = i - end do - - end subroutine MPI_KDtree_STL_partition - - - subroutine MPI_KDtree_SplittingPlanes( this, STLNum ) - use MPI_Process_Info - implicit none - !-arguments-------------------------------------------------- - class(MPI_KDtree_type), intent(inout) :: this - integer, intent(in) :: STLNum - !-local-variables-------------------------------------------- - real(kind=RP) :: partition, Locpartition, v_max, v_min - integer :: i, j - real(kind=RP) :: eps = 0.001_RP - - do i = 1, MPI_Process% nProcs - do j = 1, 8 - this% partition(i)% vertices(:,j) = OBB(STLNum)% LocVertices(:,j) - end do - end do - - partition = this% axisLength/MPI_Process% nProcs - - v_max = OBB(STLNum)% LocVertices(this% axis,7) - v_min = OBB(STLNum)% LocVertices(this% axis,1) - - this% partition(1)% plane(1) = v_min - this% partition(1)% plane(2) = this% partition(1)% plane(1) + partition - - call this% partition(1)% SetVertices( 1, this% axis, partition ) - - if( MPI_Process% nProcs .eq. 1 ) return - - do i = 2, MPI_Process% nProcs-1 - this% partition(i)% plane(1) = this% partition(i-1)% plane(2) - this% partition(i)% plane(2) = this% partition(i)% plane(1) + partition - call this% partition(i)% SetVertices( i, this% axis, partition ) - end do - - this% partition(MPI_Process% nprocs)% plane(1) = this% partition(MPI_Process% nprocs-1)% plane(2) - this% partition(MPI_Process% nprocs)% plane(2) = v_max - call this% partition(MPI_Process% nprocs)% SetVertices( MPI_Process% nprocs, this% axis, partition ) - - end subroutine MPI_KDtree_SplittingPlanes - - - subroutine KDtree_partition_SetVertices( this, nprocs, axis, Locpartition ) - - implicit none - !-arguments----------------------------------------------------------- - class(KDtree_partition_type), intent(inout) :: this - real(kind=RP), intent(in) :: Locpartition - integer, intent(in) :: axis, nprocs - !-local-variables----------------------------------------------------- - integer, dimension(4,2) :: v_indeces - - if( axis .eq. 1 ) then - v_indeces(:,1) = (/1,4,8,5/) - v_indeces(:,2) = (/2,3,7,6/) - elseif( axis .eq. 2 ) then - v_indeces(:,1) = (/1,5,6,2/) - v_indeces(:,2) = (/4,8,7,3/) - else - v_indeces(:,1) = (/1,2,3,4/) - v_indeces(:,2) = (/5,6,7,8/) - end if - - this% vertices(axis,v_indeces(:,2)) = this% vertices(axis,v_indeces(:,1)) + & - (nprocs)*Locpartition - this% vertices(axis,v_indeces(:,1)) = this% vertices(axis,v_indeces(:,1)) + & - (nprocs-1)*Locpartition - - end subroutine KDtree_partition_SetVertices - - - subroutine MPI_KDtree_checkObj( this, coord_max, coord_min, PARTITION ) - use MPI_Process_Info - implicit none - !-arguments----------------------------------------------------------- - class(MPI_KDtree_type), intent(inout) :: this - real(kind=RP), intent(in) :: coord_max, coord_min - integer, dimension(2), intent(out) :: PARTITION - !-local-variables------------------------------------------------------ - integer :: i - - PARTITION = 0 - - do i = 1, MPI_Process% nProcs - if( coord_min .gt. this% partition(i)% plane(1) .and. & - coord_max .lt. this% partition(i)% plane(2) ) then - PARTITION(1) = i; PARTITION(2) = i - exit - elseif( coord_min .lt. this% partition(i)% plane(1) .and. & - coord_max .gt. this% partition(i)% plane(1) ) then -!~ an obj can intersect more the one partition, in this case PARTITION(2)-PARTITION(1) =/ 1 and > 0 - if( PARTITION(1) .eq. 0 ) then - PARTITION(1) = i-1 - end if - PARTITION(2) = i - end if - end do - - end subroutine MPI_KDtree_checkObj - - - subroutine Poly2Triangles( Poly, tria ) - - implicit none - !-arguments----------------------------------------------------------- - type(object_type), intent(inout) :: Poly - type(object_type), dimension(:), allocatable, intent(out) :: tria - !-local-variables----------------------------------------------------- - real(kind=RP), dimension(NDIM,Poly% NumOfVertices) :: coords - integer :: j, n_vert - - if( Poly% NumOfVertices .eq. 3 ) return - - n_vert = Poly% NumOfVertices - - do j = 1, n_vert - coords(:,j) = Poly% vertices(j)% coords - end do - - if( Poly% NumOfVertices .eq. 4 ) then - allocate(tria(1)) - tria(1) = Poly - Poly% NumOfVertices = 3 - tria(1)% NumOfVertices = 3 - deallocate(Poly% vertices, tria(1)% vertices) - allocate(Poly% vertices(3), tria(1)% vertices(3)) - elseif( Poly% NumOfVertices .eq. 5 ) then - allocate(tria(2)) - tria(1) = Poly - tria(2) = Poly - Poly% NumOfVertices = 3 - tria(1)% NumOfVertices = 3 - tria(2)% NumOfVertices = 3 - deallocate(Poly% vertices,tria(1)% vertices,tria(2)% vertices) - allocate(Poly% vertices(3),tria(1)% vertices(3),tria(2)% vertices(3)) - else - print *, 'error in MPI_KDtree, NumOfVertices not recognized', Poly% NumOfVertices - end if - - do j = 1, 3 - Poly% vertices(j)% coords = coords(:,j) - if( j .eq. 3 ) then - tria(1)% vertices(j)% coords = coords(:,1) - else - tria(1)% vertices(j)% coords = coords(:,j+2) - end if - if( size(tria) .eq. 2 ) then - if( j .eq. 3 ) then - tria(2)% vertices(j)% coords = coords(:,1) - else - tria(2)% vertices(j)% coords = coords(:,j+3) - end if - end if - end do - - end subroutine Poly2Triangles - - - - subroutine ClipPloy( obj, plane_normal, plane_point, objFront, objBack ) - - implicit none - !-arguments----------------------------------------------------------------- - type(object_type), intent(in) :: obj - real(kind=rp), dimension(:), intent(in) :: plane_normal, plane_point - type(object_type), intent(out) :: objFront, objBack - !-local-variables----------------------------------------------------------- - real(kind=RP), dimension(NDIM,9) :: PointFront, PointBack - real(kind=RP), dimension(NDIM) :: PointA, PointB, Point_inters - integer :: PointA_Is, PointB_Is, n_front, n_back, i - - n_front = 0; n_back = 0 - - pointA = obj% vertices(obj% NumOfVertices)% coords - - PointA_Is = Point_wrt_Plane( plane_normal, plane_point, pointA ) - - do i = 1, obj% NumOfVertices - PointB = obj% vertices(i)% coords - - PointB_Is = Point_wrt_Plane( plane_normal, plane_point, pointB ) - if( PointB_Is .eq. IN_FRONT_PLANE ) then - if( PointA_Is .eq. BEHIND_PLANE ) then - Point_inters = EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) - n_front = n_front + 1 - n_back = n_back + 1 - PointFront(:,n_front) = Point_Inters - PointBack(:,n_back) = Point_Inters - end if - n_front = n_front + 1 - PointFront(:,n_front) = PointB - elseif( PointB_Is .eq. BEHIND_PLANE ) then - if( PointA_Is .eq. IN_FRONT_PLANE ) then - Point_inters = EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) - n_front = n_front + 1 - n_back = n_back + 1 - PointFront(:,n_front) = Point_Inters - PointBack(:,n_back) = Point_Inters - elseif( PointA_Is .eq. ON_PLANE ) then - n_back = n_back + 1 - PointBack(:,n_back) = PointA - end if - n_back = n_back + 1 - PointBack(:,n_back) = PointB - else - n_front = n_front + 1 - PointFront(:,n_front) = PointB - if( PointA_Is .eq. BEHIND_PLANE ) then - n_back = n_back + 1 - PointBack(:,n_back) = PointB - end if - end if - PointA = PointB - PointA_Is = PointB_Is - end do - - call objFront% build( PointFront, obj% normal, n_front, obj% index, obj% computeIntegrals ) - call objBack% build( PointBack, obj% normal, n_back, obj% index, obj% computeIntegrals ) - - end subroutine ClipPloy - - - integer function Point_wrt_Plane( plane_normal, plane_point, point ) result( PointIs ) - use MappedGeometryClass - implicit none - !-arguments----------------------------------------------------------------- - real(kind=RP), dimension(:), intent(in) :: plane_normal, plane_point, point - !-local-variables----------------------------------------------------------- - real(kind=RP) :: d - - d = vdot(plane_normal,point) - vdot(plane_normal,plane_point) - - if( AlmostEqual(d,0.0_RP) ) then - PointIs = ON_PLANE - elseif( d > 0.0d0 ) then - PointIs = IN_FRONT_PLANE - elseif( d < 0.0d0 ) then - PointIs = BEHIND_PLANE - end if - - end function Point_wrt_Plane - - function EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) result( Point_inters ) - use MappedGeometryClass - implicit none - !-arguments----------------------------------------------------------------- - real(kind=RP), dimension(:), intent(in) :: plane_normal, plane_point, & - PointA, PointB - real(kind=RP), dimension(NDIM) :: Point_inters - !-local-variables----------------------------------------------------------- - real(kind=RP), dimension(NDIM) :: n_AB - real(kind=RP) :: d, t - - n_AB = PointB - PointA - - d = vdot(plane_normal,plane_point) - - t = ( d - vdot(plane_normal,PointA) )/vdot(plane_normal,n_AB) - - if( almostEqual(t,0.0_RP) ) then - Point_inters = PointA - elseif( almostEqual(t,1.0_RP) ) then - Point_inters = PointB - elseif( t .gt. 0.0_RP .and. t .lt. 1.0_RP ) then - Point_inters = PointA + t*n_AB - end if - - end function EdgePlaneIntersection - - - subroutine recvSTLPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables------------------------------------------------------------------------------------------- - integer :: ObjsSize, ierr, j, array_of_statuses(MPI_STATUS_SIZE,19), & - i, recv_req(19) - real(kind=RP), dimension(:), allocatable :: normal_x, normal_y, normal_z, COORD - real(kind=RP), dimension(:), allocatable :: COORD_x1, COORD_x2, COORD_x3 - real(kind=RP), dimension(:), allocatable :: COORD_y1, COORD_y2, COORD_y3 - real(kind=RP), dimension(:), allocatable :: COORD_z1, COORD_z2, COORD_z3 - real(kind=RP), dimension(:), allocatable :: vertex1, vertex2, vertex3, vertex4, & - vertex5, vertex6, vertex7, vertex8 - integer, dimension(:), allocatable :: indeces - - if( MPI_Process% isRoot ) return - - ! receive n of objects - call mpi_irecv( ObjsSize, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(1), ierr ) - - call mpi_wait(recv_req(1), MPI_STATUS_IGNORE, ierr) - - MPI_KDtreePartition% stl% NumOfObjs = ObjsSize - - allocate(MPI_KDtreePartition% stl% ObjectsList(ObjsSize)) - - call mpi_irecv( MPI_KDtreePartition% plane, 2, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(2), ierr ) - - call mpi_irecv( MPI_KDtreePartition% axis, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(3), ierr ) - - allocate( indeces(ObjsSize), & - normal_x(ObjsSize), & - normal_y(ObjsSize), & - normal_z(ObjsSize), & - COORD_x1(ObjsSize), & - COORD_x2(ObjsSize), & - COORD_x3(ObjsSize), & - COORD_y1(ObjsSize), & - COORD_y2(ObjsSize), & - COORD_y3(ObjsSize), & - COORD_z1(ObjsSize), & - COORD_z2(ObjsSize), & - COORD_z3(ObjsSize), & - vertex1(8), & - vertex2(8), & - vertex3(8) ) - - call mpi_irecv( indeces, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(4), ierr ) - - call mpi_irecv( normal_x, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(5), ierr ) - - call mpi_irecv( normal_y, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(6), ierr ) - - call mpi_irecv( normal_z, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(7), ierr ) - - call mpi_irecv( COORD_x1, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(8), ierr ) - - call mpi_irecv( COORD_x2, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(9), ierr ) - - call mpi_irecv( COORD_x3, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(10), ierr ) - - call mpi_irecv( COORD_y1, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(11), ierr ) - - call mpi_irecv( COORD_y2, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(12), ierr ) - - call mpi_irecv( COORD_y3, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(13), ierr ) - - call mpi_irecv( COORD_z1, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(14), ierr ) - - call mpi_irecv( COORD_z2, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(15), ierr ) - - call mpi_irecv( COORD_z3, ObjsSize, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(16), ierr ) - - call mpi_irecv( vertex1, 8, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(17), ierr ) - - call mpi_irecv( vertex2, 8, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(18), ierr ) - - call mpi_irecv( vertex3, 8, MPI_DOUBLE_PRECISION, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(19), ierr ) - - call mpi_waitall(19, recv_req, array_of_statuses, ierr) - - do i = 1, MPI_KDtreePartition% stl% NumOfObjs - MPI_KDtreePartition% stl% ObjectsList(i)% NumOfVertices = 3 - allocate( MPI_KDtreePartition% stl% ObjectsList(i)% vertices(3) ) - MPI_KDtreePartition% stl% ObjectsList(i)% index = i - MPI_KDtreePartition% stl% ObjectsList(i)% normal(1) = normal_x(i) - MPI_KDtreePartition% stl% ObjectsList(i)% normal(2) = normal_y(i) - MPI_KDtreePartition% stl% ObjectsList(i)% normal(3) = normal_z(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(1)% coords(1) = COORD_x1(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(2)% coords(1) = COORD_x2(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(3)% coords(1) = COORD_x3(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(1)% coords(2) = COORD_y1(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(2)% coords(2) = COORD_y2(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(3)% coords(2) = COORD_y3(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(1)% coords(3) = COORD_z1(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(2)% coords(3) = COORD_z2(i) - MPI_KDtreePartition% stl% ObjectsList(i)% vertices(3)% coords(3) = COORD_z3(i) - end do - - MPI_KDtreePartition% vertices(1,:) = vertex1 - MPI_KDtreePartition% vertices(2,:) = vertex2 - MPI_KDtreePartition% vertices(3,:) = vertex3 - - deallocate( indeces, & - normal_x, & - normal_y, & - normal_z, & - COORD_x1, & - COORD_x2, & - COORD_x3, & - COORD_y1, & - COORD_y2, & - COORD_y3, & - COORD_z1, & - COORD_z2, & - COORD_z3, & - vertex1, & - vertex2, & - vertex3 ) -#endif - - end subroutine recvSTLPartition - - subroutine SendSTLPartitions() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables------------------------------------------------------------------------- - integer :: ObjsSize, PartSize, nProcs, i, j, ierr, & - msg, array_of_statuses(MPI_STATUS_SIZE,19) - real(kind=RP), dimension(:), allocatable :: normal_x, normal_y, normal_z - real(kind=RP), dimension(:), allocatable :: vertex1, vertex2, vertex3 - real(kind=RP), dimension(:), allocatable :: COORD_x1, COORD_x2, COORD_x3 - real(kind=RP), dimension(:), allocatable :: COORD_y1, COORD_y2, COORD_y3 - real(kind=RP), dimension(:), allocatable :: COORD_z1, COORD_z2, COORD_z3 - integer, dimension(:), allocatable :: indeces - integer, dimension(:,:), allocatable :: send_req - - allocate(send_req(MPI_Process% nProcs-1,19)) - - do nProcs = 2, MPI_Process% nProcs - - ObjsSize = MPI_KDtree_all% partition(nProcs)% stl% NumOfObjs - call mpi_isend( ObjsSize, 1, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - send_req(nProcs-1,1), ierr ) - - end do - - do nProcs = 2, MPI_Process% nProcs - - partSize = MPI_KDtree_all% partition(nProcs)% stl% NumOfObjs - - call mpi_isend( MPI_KDtree_all% partition(nProcs)% plane, 2, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - send_req(nProcs-1,2), ierr) - - call mpi_isend( MPI_KDtree_all% partition(nProcs)% axis, 1, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - send_req(nProcs-1,3), ierr) - - - allocate( indeces(partSize), & - normal_x(partSize), & - normal_y(partSize), & - normal_z(partSize), & - COORD_x1(partSize), & - COORD_x2(partSize), & - COORD_x3(partSize), & - COORD_y1(partSize), & - COORD_y2(partSize), & - COORD_y3(partSize), & - COORD_z1(partSize), & - COORD_z2(partSize), & - COORD_z3(partSize), & - vertex1(8), & - vertex2(8), & - vertex3(8) ) - - do i = 1, partSize - indeces(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% index - normal_x(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% normal(1) - normal_y(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% normal(2) - normal_z(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% normal(3) - COORD_x1(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(1)% coords(1) - COORD_x2(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(2)% coords(1) - COORD_x3(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(3)% coords(1) - COORD_y1(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(1)% coords(2) - COORD_y2(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(2)% coords(2) - COORD_y3(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(3)% coords(2) - COORD_z1(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(1)% coords(3) - COORD_z2(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(2)% coords(3) - COORD_z3(i) = MPI_KDtree_all% partition(nProcs)% stl% ObjectsList(i)% vertices(3)% coords(3) - end do - - vertex1 = MPI_KDtree_all% partition(nProcs)% vertices(1,:) - vertex2 = MPI_KDtree_all% partition(nProcs)% vertices(2,:) - vertex3 = MPI_KDtree_all% partition(nProcs)% vertices(3,:) - - call mpi_isend( indeces, partSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,4), ierr ) - - call mpi_isend( normal_x, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,5), ierr ) - - call mpi_isend( normal_y, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,6), ierr ) - - call mpi_isend( normal_z, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,7), ierr ) - - call mpi_isend( COORD_x1, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,8), ierr ) - - call mpi_isend( COORD_x2, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,9), ierr ) - - call mpi_isend( COORD_x3, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,10), ierr ) - - call mpi_isend( COORD_y1, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,11), ierr ) - - call mpi_isend( COORD_y2, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,12), ierr ) - - call mpi_isend( COORD_y3, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,13), ierr ) - - call mpi_isend( COORD_z1, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,14), ierr ) - - call mpi_isend( COORD_z2, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,15), ierr ) - - call mpi_isend( COORD_z3, partSize, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,16), ierr ) - - call mpi_isend( vertex1, 8, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,17), ierr ) - - call mpi_isend( vertex2, 8, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,18), ierr ) - - call mpi_isend( vertex3, 8, MPI_DOUBLE_PRECISION, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,19), ierr ) - - call mpi_waitall(19, send_req(nProcs-1,:), array_of_statuses, ierr) - - deallocate( indeces, & - normal_x, & - normal_y, & - normal_z, & - COORD_x1, & - COORD_x2, & - COORD_x3, & - COORD_y1, & - COORD_y2, & - COORD_y3, & - COORD_z1, & - COORD_z2, & - COORD_z3, & - vertex1, & - vertex2, & - vertex3 ) - - end do - - MPI_KDtreePartition = MPI_KDtree_all% partition(1) - - deallocate(send_req) - -#endif - - end subroutine SendSTLPartitions - - -! PARTITION FOR MASK POINTS - - subroutine MPI_M_Points_type_Destroy( this ) - - implicit none - !-arguments------------------------------------- - class(MPI_M_Points_type), intent(inout) :: this - - if( allocated(this% x) ) deallocate(this% x) - if( allocated(this% buffer) ) deallocate(this% buffer) - this% NumOfObjs = 0 - - end subroutine MPI_M_Points_type_Destroy - - subroutine MaskCandidates( elements, no_of_elements, no_of_DoFs, STLNum, NumOfSTL ) - use ElementClass - implicit none - !-arguments---------------------------------------------------------------- - type(element), dimension(:), intent(inout) :: elements - integer, intent(in) :: no_of_elements, no_of_DoFs, & - STLNum, NumOfSTL - !-local-variables----------------------------------------------------------- - real(kind=RP) :: Point(NDIM) - integer :: n, eID, i, j, k - - allocate(MPI_M_PointsPartition% x(no_of_DoFs)) - - n = 0 - -!$omp parallel shared(n,eID,elements,no_of_elements,MPI_M_PointsPartition,STLNum,NumOfSTL) -!$omp do schedule(runtime) private(i,j,k) - do eID = 1, no_of_elements - if( .not. allocated(elements(eID)% isInsideBody) ) then - call elements(eID)% ConstructIBM(elements(eID)% Nxyz(1), elements(eID)% Nxyz(2), elements(eID)% Nxyz(3), NumOfSTL ) - end if - - do k = 0, elements(eID)% Nxyz(3); do j = 0, elements(eID)% Nxyz(2) ; do i = 0, elements(eID)% Nxyz(1) - - if( elements(eID)% isInsideBody(i,j,k) ) cycle - - elements(eID)% isInsideBody(i,j,k) = OBB(STLNum)% isPointInside(coords = elements(eID)% geom% x(:,i,j,k) ) - - if( elements(eID)% isInsideBody(i,j,k) ) then -!$omp critical - n = n + 1 - MPI_M_PointsPartition% x(n)% coords = elements(eID)% geom% x(:,i,j,k) - MPI_M_PointsPartition% x(n)% local_Position(1) = i - MPI_M_PointsPartition% x(n)% local_Position(2) = j - MPI_M_PointsPartition% x(n)% local_Position(3) = k - MPI_M_PointsPartition% x(n)% element_index = eID - MPI_M_PointsPartition% x(n)% partition = MPI_Process% rank - MPI_M_PointsPartition% LocNumOfObjs = n -!$omp end critical - end if - end do; end do; end do - - end do -!$omp end do -!$omp end parallel - - end subroutine MaskCandidates - - - subroutine RootRecvrecvPointMaskPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables---------------------------------------------------------------- - integer :: ObjsSize, nProcs, ierr, i, msg, & - array_of_statuses(MPI_STATUS_SIZE,9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: i_v, j_v, k_v, eID, partition, buffer - integer, dimension(:,:), allocatable :: RootMaskrecv_req - - if( MPI_Process% isRoot ) then - - allocate( buffer(MPI_Process% nProcs-1), & - RootMaskrecv_req(MPI_Process% nProcs-1,9) ) - - do nProcs = 2, MPI_Process% nProcs - call mpi_irecv( ObjsSize, 1, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,1), ierr ) - call mpi_wait(RootMaskrecv_req(nProcs-1,1), MPI_STATUS_IGNORE, ierr) - - MPI_M_Points_All% buffer(nProcs) = MPI_M_Points_All% buffer(nProcs-1) + ObjsSize - buffer(nProcs-1) = ObjsSize - - end do - - do nProcs = 2, MPI_Process% nProcs - - allocate( COORD_x(buffer(nProcs-1)), & - COORD_y(buffer(nProcs-1)), & - COORD_z(buffer(nProcs-1)), & - i_v(buffer(nProcs-1)), & - j_v(buffer(nProcs-1)), & - k_v(buffer(nProcs-1)), & - eID(buffer(nProcs-1)), & - partition(buffer(nProcs-1)) ) - - call mpi_irecv( COORD_x, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,2), ierr ) - - call mpi_irecv( COORD_y, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,3), ierr ) - - call mpi_irecv( COORD_z, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,4), ierr ) - - call mpi_irecv( i_v, buffer(nProcs-1), MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,5), ierr ) - - call mpi_irecv( j_v, buffer(nProcs-1), MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,6), ierr ) - - call mpi_irecv( k_v, buffer(nProcs-1), MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,7), ierr ) - - call mpi_irecv( eID, buffer(nProcs-1), MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,8), ierr ) - - call mpi_irecv( partition, buffer(nProcs-1), MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req(nProcs-1,9), ierr ) - - call mpi_waitall(9, RootMaskrecv_req(nProcs-1,:), array_of_statuses, ierr) - - do i = 1, buffer(nProcs-1) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% coords(1) = COORD_x(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% coords(2) = COORD_y(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% coords(3) = COORD_z(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% local_Position(1) = i_v(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% local_Position(2) = j_v(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% local_Position(3) = k_v(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% element_index = eID(i) - MPI_M_Points_All% x(i+MPI_M_Points_All% buffer(nProcs-1))% partition = partition(i) - end do - - deallocate( COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition ) - - end do - - deallocate(buffer,RootMaskrecv_req) - - end if -#endif - - end subroutine RootRecvrecvPointMaskPartition - - subroutine RootSendPointMaskPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables---------------------------------------------------------------- - integer :: ObjsSize, i, j, ierr, msg, & - array_of_statuses(MPI_STATUS_SIZE,9), & - RootMasksend_req(9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: i_v, j_v, k_v, eID, partition - - if( MPI_Process% isRoot ) return - - ObjsSize = MPI_M_PointsPartition% LocNumOfObjs - - call mpi_isend( ObjsSize, 1, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(1), ierr ) - - allocate( COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize) ) - - COORD_x = MPI_M_PointsPartition% x(1:ObjsSize)% coords(1) - COORD_y = MPI_M_PointsPartition% x(1:ObjsSize)% coords(2) - COORD_z = MPI_M_PointsPartition% x(1:ObjsSize)% coords(3) - - i_v = MPI_M_PointsPartition% x(1:ObjsSize)% local_Position(1) - j_v = MPI_M_PointsPartition% x(1:ObjsSize)% local_Position(2) - k_v = MPI_M_PointsPartition% x(1:ObjsSize)% local_Position(3) - eID = MPI_M_PointsPartition% x(1:ObjsSize)% element_index - partition = MPI_M_PointsPartition% x(1:ObjsSize)% partition - - call mpi_isend( COORD_x, MPI_M_PointsPartition% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(2), ierr ) - - call mpi_isend( COORD_y, MPI_M_PointsPartition% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(3), ierr ) - - call mpi_isend( COORD_z, MPI_M_PointsPartition% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(4), ierr ) - - call mpi_isend( i_v, MPI_M_PointsPartition% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(5), ierr ) - - call mpi_isend( j_v, MPI_M_PointsPartition% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(6), ierr ) - - call mpi_isend( k_v, MPI_M_PointsPartition% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(7), ierr ) - - call mpi_isend( eID, MPI_M_PointsPartition% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(8), ierr ) - - call mpi_isend( partition, MPI_M_PointsPartition% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, & - RootMasksend_req(9), ierr ) - - call mpi_waitall(9, RootMasksend_req, array_of_statuses, ierr) - - deallocate( COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition ) -#endif - - end subroutine RootSendPointMaskPartition - - - subroutine recvPointMaskPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables----------------------------------------------------------------- - integer :: ObjsSize, ierr, i, & - array_of_statuses(MPI_STATUS_SIZE,8), & - Maskrecv_req(8) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: i_v, j_v, k_v, eID, partition - - if( MPI_Process% isRoot ) return - - ObjsSize = MPI_M_Points_ALL% NumOfObjs - - allocate( COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize) ) - - call mpi_irecv( COORD_x, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(1), ierr ) - - call mpi_irecv( COORD_y, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(2), ierr ) - - call mpi_irecv( COORD_z, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(3), ierr ) - - call mpi_irecv( i_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(4), ierr ) - - call mpi_irecv( j_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(5), ierr ) - - call mpi_irecv( k_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(6), ierr ) - - call mpi_irecv( eID, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(7), ierr ) - - call mpi_irecv( partition, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req(8), ierr ) - - call mpi_waitall(8, Maskrecv_req, array_of_statuses, ierr) - - do i = 1, ObjsSize - MPI_M_Points_All% x(i)% coords(1) = COORD_x(i) - MPI_M_Points_All% x(i)% coords(2) = COORD_y(i) - MPI_M_Points_All% x(i)% coords(3) = COORD_z(i) - MPI_M_Points_All% x(i)% local_Position(1) = i_v(i) - MPI_M_Points_All% x(i)% local_Position(2) = j_v(i) - MPI_M_Points_All% x(i)% local_Position(3) = k_v(i) - MPI_M_Points_All% x(i)% element_index = eID(i) - MPI_M_Points_All% x(i)% partition = partition(i) - end do - - deallocate( COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition ) -#endif - - end subroutine recvPointMaskPartition - - subroutine sendPointMaskPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables---------------------------------------------------------------- - integer :: ObjsSize, nProcs, msg, ierr, & - array_of_statuses(MPI_STATUS_SIZE,9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: i_v, j_v, k_v, eID, partition - integer, dimension(:,:), allocatable :: Masksend_req - - ObjsSize = MPI_M_Points_ALL% NumOfObjs - - allocate( COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize), & - Masksend_req(MPI_Process% nProcs-1,8) ) - - COORD_x = MPI_M_Points_ALL% x(:)% coords(1) - COORD_y = MPI_M_Points_ALL% x(:)% coords(2) - COORD_z = MPI_M_Points_ALL% x(:)% coords(3) - i_v = MPI_M_Points_ALL% x(:)% local_Position(1) - j_v = MPI_M_Points_ALL% x(:)% local_Position(2) - k_v = MPI_M_Points_ALL% x(:)% local_Position(3) - eID = MPI_M_Points_ALL% x(:)% element_index - partition = MPI_M_Points_ALL% x(:)% partition - - do nProcs = 2, MPI_Process% nProcs - - call mpi_isend( COORD_x, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,1), ierr ) - - call mpi_isend( COORD_y, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,2), ierr ) - - call mpi_isend( COORD_z, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,3), ierr ) - - call mpi_isend( i_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,4), ierr ) - - call mpi_isend( j_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,5), ierr ) - - call mpi_isend( k_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,6), ierr ) - - call mpi_isend( eID, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,7), ierr ) - - call mpi_isend( partition, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1,8), ierr ) - - call mpi_waitall(8, Masksend_req(nProcs-1,:), array_of_statuses, ierr ) - - end do - - deallocate(COORD_x,COORD_y,COORD_z,i_v,j_v,k_v,eID,partition,Masksend_req) -#endif - - end subroutine sendPointMaskPartition - - - subroutine RootRecvPointMask() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables--------------------------------------------------------------- - integer :: ObjsSize, nProcs, ierr, i, msg, & - status(MPI_STATUS_SIZE), RootMaskrecv_req - logical, dimension(:), allocatable :: isInsideBody - - if( MPI_Process% isRoot ) then - - allocate( isInsideBody(MPI_M_Points_All% NumOfObjs) ) - - do nProcs = 2, MPI_Process% nProcs - - - call mpi_irecv( isInsideBody, MPI_M_Points_All% NumOfObjs, MPI_LOGICAL, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootMaskrecv_req, ierr ) - - call mpi_wait(RootMaskrecv_req, status, ierr) - - do i = 1, MPI_M_Points_All% NumOfObjs - if( MPI_M_Points_All% x(i)% isInsideBody ) cycle - MPI_M_Points_All% x(i)% isInsideBody = isInsideBody(i) - end do - - - end do - - deallocate( isInsideBody ) - - end if -#endif - - end subroutine RootRecvPointMask - - subroutine RootSendPointMask() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables----------------------------------------------------------- - integer :: ObjsSize, i, j, ierr, msg, & - status(MPI_STATUS_SIZE), RootMasksend_req - logical, dimension(:), allocatable :: isInsideBody - - if( MPI_Process% isRoot ) return - - ObjsSize = MPI_M_Points_ALL% NumOfObjs - - allocate( isInsideBody(ObjsSize) ) - - isInsideBody = MPI_M_Points_ALL% x(:)% isInsideBody - - call mpi_isend( isInsideBody, MPI_M_Points_ALL% NumOfObjs, MPI_LOGICAL, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootMasksend_req, ierr ) - - call mpi_wait(RootMasksend_req, status, ierr) - - deallocate( isInsideBody ) -#endif - - end subroutine RootSendPointMask - - - subroutine recvPointMask() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables----------------------------------------------------------- - integer :: ObjsSize, ierr, i, & - status(MPI_STATUS_SIZE), Maskrecv_req - logical, dimension(:), allocatable :: isInsideBody - - if( MPI_Process% isRoot ) return - - ObjsSize = MPI_M_Points_ALL% NumOfObjs - - allocate( isInsideBody(ObjsSize) ) - - call mpi_irecv( isInsideBody, ObjsSize, MPI_LOGICAL, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Maskrecv_req, ierr ) - - call mpi_wait(Maskrecv_req, status, ierr) - - do i = 1, ObjsSize - MPI_M_Points_All% x(i)% isInsideBody = isInsideBody(i) - end do - - deallocate( isInsideBody ) -#endif - - end subroutine recvPointMask - - subroutine sendPointMask() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables----------------------------------------------------------------------------- - integer :: ObjsSize, nProcs, msg, ierr, & - array_of_statuses(MPI_STATUS_SIZE,MPI_Process% nProcs-1) - logical, dimension(:), allocatable :: isInsideBody - integer, dimension(:), allocatable :: Masksend_req - - ObjsSize = MPI_M_Points_ALL% NumOfObjs - - allocate( isInsideBody(ObjsSize), Masksend_req(MPI_Process% nProcs-1) ) - - isInsideBody = MPI_M_Points_ALL% x(:)% isInsideBody - - do nProcs = 2, MPI_Process% nProcs - - call mpi_isend( isInsideBody, ObjsSize, MPI_LOGICAL, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Masksend_req(nProcs-1), ierr ) - - end do - - call mpi_waitall(MPI_Process% nProcs-1, Masksend_req, array_of_statuses, ierr ) - - deallocate(isInsideBody, Masksend_req) -#endif - - end subroutine sendPointMask - - - - -! BAND REGION - - subroutine RootrecvBandPoint() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables----------------------------------------------------------------- - integer :: ObjsSize, nProcs, ierr, i, msg, & - array_of_statuses(MPI_STATUS_SIZE,9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: buffer, i_v, j_v, k_v, eID, partition - integer, dimension(:,:), allocatable :: RootBandrecv_req - - if( MPI_Process% isRoot ) then - - allocate(buffer(MPI_Process% nProcs-1),RootBandrecv_req(MPI_Process% nProcs-1,9)) - - do nProcs = 2, MPI_Process% nProcs - - call mpi_irecv( ObjsSize, 1, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,1), ierr ) - call mpi_wait(RootBandrecv_req(nProcs-1,1), MPI_STATUS_IGNORE, ierr) - - BandPoints_All% buffer(nProcs) = BandPoints_All% buffer(nProcs-1) + ObjsSize - buffer(nProcs-1) = ObjsSize - - end do - - do nProcs = 2, MPI_Process% nProcs - - allocate( COORD_x(buffer(nProcs-1)), & - COORD_y(buffer(nProcs-1)), & - COORD_z(buffer(nProcs-1)), & - i_v(buffer(nProcs-1)), & - j_v(buffer(nProcs-1)), & - k_v(buffer(nProcs-1)), & - eID(buffer(nProcs-1)), & - partition(buffer(nProcs-1)) ) - - call mpi_irecv( COORD_x, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,2), ierr ) - - call mpi_irecv( COORD_y, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,3), ierr ) - - call mpi_irecv( COORD_z, buffer(nProcs-1), MPI_DOUBLE, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,4), ierr ) - - call mpi_irecv( i_v, buffer(nProcs-1), MPI_INT, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,5), ierr ) - - call mpi_irecv( j_v, buffer(nProcs-1), MPI_INT, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,6), ierr ) - - call mpi_irecv( k_v, buffer(nProcs-1), MPI_INT, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,7), ierr ) - - call mpi_irecv( eID, buffer(nProcs-1), MPI_INT, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,8), ierr ) - - call mpi_irecv( partition, buffer(nProcs-1), MPI_INT, nProcs-1, & - MPI_ANY_TAG, MPI_COMM_WORLD, RootBandrecv_req(nProcs-1,9), ierr ) - - call mpi_waitall(9, RootBandrecv_req(nProcs-1,:), array_of_statuses, ierr) - - do i = 1, buffer(nProcs-1) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% index = i+BandPoints_All% buffer(nProcs-1) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% coords(1) = COORD_x(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% coords(2) = COORD_y(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% coords(3) = COORD_z(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% local_Position(1) = i_v(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% local_Position(2) = j_v(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% local_Position(3) = k_v(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% element_index = eID(i) - BandPoints_All% x(i+BandPoints_All% buffer(nProcs-1))% partition = partition(i) - end do - - deallocate( COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition ) - - end do - - deallocate(buffer,RootBandrecv_req) - - end if -#endif - - end subroutine RootrecvBandPoint - - - subroutine RootSendBandPoint( BandPoints ) - - implicit none - !-arguments---------------------------------------------------------------------- - type(PointLinkedList), intent(inout) :: BandPoints -#ifdef _HAS_MPI_ - !-local-variables---------------------------------------------------------------- - integer :: ObjsSize, i, ierr, & - array_of_statuses(MPI_STATUS_SIZE,9), & - RootBandsend_req(9) - type(point_type), pointer :: p - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: i_v, j_v, k_v, eID, partition - - if( MPI_Process% isRoot ) return - - ObjsSize = BandPoints% NumOfPoints - - call mpi_isend( ObjsSize, 1, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(1), ierr ) ! - - allocate( COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize) ) - - p => BandPoints% head - - do i = 1, ObjsSize - COORD_x(i) = p% coords(1) - COORD_y(i) = p% coords(2) - COORD_z(i) = p% coords(3) - i_v(i) = p% local_Position(1) - j_v(i) = p% local_Position(2) - k_v(i) = p% local_Position(3) - eID(i) = p% element_index - partition(i) = p% partition - p => p% next - end do - - call mpi_isend( COORD_x, ObjsSize, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(2), ierr ) - - call mpi_isend( COORD_y, ObjsSize, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(3), ierr ) - - call mpi_isend( COORD_z, ObjsSize, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(4), ierr ) - - call mpi_isend( i_v, ObjsSize, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(5), ierr ) - - call mpi_isend( j_v, ObjsSize, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(6), ierr ) - - call mpi_isend( k_v, ObjsSize, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(7), ierr ) - - call mpi_isend( eID, ObjsSize, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(8), ierr ) - - call mpi_isend( partition, ObjsSize, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, RootBandsend_req(9), ierr ) - - call mpi_waitall(9, RootBandsend_req, array_of_statuses, ierr) - - deallocate( COORD_x, & - COORD_y, & - COORD_z, & - i_v, & - j_v, & - k_v, & - eID, & - partition ) -#endif - - end subroutine RootSendBandPoint - - subroutine recvBandPointPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables------------------------------------------------------------------- - integer :: ObjsSize, ierr, i, & - array_of_statuses(MPI_STATUS_SIZE,9), & - Bandrecv_req(9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: indeces, i_v, j_v, k_v, eID, partition - - if( MPI_Process% isRoot ) return - - ObjsSize = BandPoints_ALL% NumOfObjs - - allocate( indeces(ObjsSize), & - COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize) ) - - call mpi_irecv( indeces, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(1), ierr ) - - call mpi_irecv( COORD_x, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(2), ierr ) - - call mpi_irecv( COORD_y, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(3), ierr ) - - call mpi_irecv( COORD_z, ObjsSize, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(4), ierr ) - - call mpi_irecv( i_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(5), ierr ) - - call mpi_irecv( j_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(6), ierr ) - - call mpi_irecv( k_v, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(7), ierr ) - - call mpi_irecv( eID, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(8), ierr ) - - call mpi_irecv( partition, ObjsSize, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Bandrecv_req(9), ierr ) - - call mpi_waitall(9, Bandrecv_req, array_of_statuses, ierr) - - do i = 1, ObjsSize - BandPoints_All% x(i)% index = indeces(i) - BandPoints_All% x(i)% coords(1) = COORD_x(i) - BandPoints_All% x(i)% coords(2) = COORD_y(i) - BandPoints_All% x(i)% coords(3) = COORD_z(i) - BandPoints_All% x(i)% local_Position(1) = i_v(i) - BandPoints_All% x(i)% local_Position(2) = j_v(i) - BandPoints_All% x(i)% local_Position(3) = k_v(i) - BandPoints_All% x(i)% element_index = eID(i) - BandPoints_All% x(i)% partition = partition(i) - end do - - deallocate( indeces, COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition ) -#endif - - end subroutine recvBandPointPartition - - subroutine sendBandPointPartition() - - implicit none - -#ifdef _HAS_MPI_ - !-local-variables-------------------------------------------------------------------------- - integer :: ObjsSize, nProcs, msg, ierr, & - array_of_statuses(MPI_STATUS_SIZE,9) - real(kind=RP), dimension(:), allocatable :: COORD_x, COORD_y, COORD_z - integer, dimension(:), allocatable :: indeces, i_v, j_v, k_v, eID, partition - integer, dimension(:,:), allocatable :: Bandsend_req - integer :: i - - ObjsSize = BandPoints_ALL% NumOfObjs - - allocate( indeces(ObjsSize), & - COORD_x(ObjsSize), & - COORD_y(ObjsSize), & - COORD_z(ObjsSize), & - i_v(ObjsSize), & - j_v(ObjsSize), & - k_v(ObjsSize), & - eID(ObjsSize), & - partition(ObjsSize), & - Bandsend_req(MPI_Process% nProcs-1,9) ) - - indeces = BandPoints_ALL% x(:)% index - COORD_x = BandPoints_ALL% x(:)% coords(1) - COORD_y = BandPoints_ALL% x(:)% coords(2) - COORD_z = BandPoints_ALL% x(:)% coords(3) - i_v = BandPoints_ALL% x(:)% local_Position(1) - j_v = BandPoints_ALL% x(:)% local_Position(2) - k_v = BandPoints_ALL% x(:)% local_Position(3) - eID = BandPoints_ALL% x(:)% element_index - partition = BandPoints_ALL% x(:)% partition - - do nProcs = 2, MPI_Process% nProcs - - call mpi_isend( indeces, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,1), ierr ) - - call mpi_isend( COORD_x, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,2), ierr ) - - call mpi_isend( COORD_y, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,3), ierr ) - - call mpi_isend( COORD_z, ObjsSize, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,4), ierr ) - - call mpi_isend( i_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,5), ierr ) - - call mpi_isend( j_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,6), ierr ) - - call mpi_isend( k_v, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,7), ierr ) - - call mpi_isend( eID, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,8), ierr ) - - call mpi_isend( partition, ObjsSize, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - Bandsend_req(nProcs-1,9), ierr ) - - call mpi_waitall( 9, Bandsend_req(nProcs-1,:), array_of_statuses, ierr ) - - end do - - deallocate( indeces, COORD_x, COORD_y, COORD_z, i_v, j_v, k_v, eID, partition, Bandsend_req ) -#endif - - end subroutine sendBandPointPartition - - - - - - - subroutine recvGeom() - - implicit none -#ifdef _HAS_MPI_ - real(kind=rp), dimension(:), allocatable :: Dist, ranks - logical, dimension(:), allocatable :: forcingPoints - integer :: NumOfObjs, Distrecv_req(2), & - ierr, array_of_statuses(MPI_STATUS_SIZE,2) - - if( MPI_Process% isRoot ) return - - allocate( Dist(BandPoints_ALL% NumOfObjs), & - ranks(BandPoints_ALL% NumOfObjs) ) - - NumOfObjs = BandPoints_ALL% NumOfObjs - - call mpi_irecv( Dist, NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Distrecv_req(1), ierr ) - call mpi_irecv( ranks, NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, Distrecv_req(2), ierr ) - - call mpi_waitall(2, Distrecv_req, array_of_statuses, ierr ) - - BandPoints_ALL% x(:)% Dist = Dist - BandPoints_ALL% x(:)% rank = ranks - - deallocate( Dist, ranks ) -#endif - - end subroutine recvGeom - - - subroutine sendGeom() - - implicit none -#ifdef _HAS_MPI_ - real(kind=rp), dimension(:), allocatable :: Dist, ranks - logical, dimension(:), allocatable :: forcingPoints - integer, dimension(:,:), allocatable :: ranksend_req - integer :: NumOfObjs, nProcs, & - ierr, array_of_statuses(MPI_STATUS_SIZE,2) - - if( .not. MPI_Process% isRoot ) return - - allocate( ranksend_req(MPI_Process% nProcs-1,2), & - Dist(BandPoints_ALL% NumOfObjs), & - ranks(BandPoints_ALL% NumOfObjs) ) - - Dist = BandPoints_ALL% x(:)% Dist - ranks = BandPoints_ALL% x(:)% rank - NumOfObjs = BandPoints_ALL% NumOfObjs - - do nProcs = 2, MPI_Process% nProcs - call mpi_isend( Dist, NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - ranksend_req(nProcs-1,1), ierr ) - - call mpi_isend( ranks, NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - ranksend_req(nProcs-1,2), ierr ) - - call mpi_waitall(2, ranksend_req(nProcs-1,:), array_of_statuses, ierr ) - - end do - - deallocate( ranksend_req, Dist, ranks ) -#endif - - end subroutine sendGeom - - - - subroutine recvIP_NearestPoints( IP_NearestPoints ) - - implicit none - !-arguments--------------------------------------------------- - integer, dimension(:,:), intent(inout) :: IP_NearestPoints -#ifdef _HAS_MPI_ - integer, dimension(:), allocatable :: IP_NP - integer :: IP_NPrecv_req(1), index, i, NumOfObjs, & - ierr, array_of_statuses(MPI_STATUS_SIZE,1) - - if( MPI_Process% isRoot ) return - - NumOfObjs = size(IP_NearestPoints,1)*size(IP_NearestPoints,2) - - allocate( IP_NP(NumOfObjs) ) - - call mpi_irecv( IP_NP, NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, IP_NPrecv_req(1), ierr ) - - call mpi_waitall(1, IP_NPrecv_req, array_of_statuses, ierr ) - - - do i = 1, size(IP_NearestPoints,2) - index = (i-1)*size(IP_NearestPoints,1) - IP_NearestPoints(:,i) = IP_NP(index+1:index+size(IP_NearestPoints,1)) - end do - - deallocate( IP_NP ) -#endif - - end subroutine recvIP_NearestPoints - - - subroutine sendIP_NearestPoints( IP_NearestPoints ) - - implicit none - - integer, dimension(:,:), intent(in) :: IP_NearestPoints - !-local-variables--------------------------------------------- -#ifdef _HAS_MPI_ - integer, dimension(:), allocatable :: IP_NP - integer, dimension(:,:), allocatable :: IP_NPsend_req - integer :: NumOfObjs, nProcs, i, j, index, & - ierr, array_of_statuses(MPI_STATUS_SIZE,1) - - if( .not. MPI_Process% isRoot ) return - - NumOfObjs = size(IP_NearestPoints,1)*size(IP_NearestPoints,2) - - allocate( IP_NPsend_req(MPI_Process% nProcs-1,1), & - IP_NP(NumOfObjs) ) - - do i = 1, size(IP_NearestPoints,2) - index = (i-1)*size(IP_NearestPoints,1) - IP_NP(index+1:index+size(IP_NearestPoints,1)) = IP_NearestPoints(:,i) - end do - - do nProcs = 2, MPI_Process% nProcs - call mpi_isend( IP_NP, NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, & - IP_NPsend_req(nProcs-1,1), ierr ) - - call mpi_waitall(1, IP_NPsend_req(nProcs-1,:), array_of_statuses, ierr ) - - end do - - deallocate( IP_NPsend_req, IP_NP ) -#endif - - end subroutine sendIP_NearestPoints - - -end module MPI_IBMUtilities +#include "Includes.h" +module MPI_IBMUtilities + + use SMConstants + use Utilities + use TessellationTypes + use OrientedBoundingBox + use MPI_Process_info +#ifdef _HAS_MPI_ + use mpi +#endif + + implicit none + + private + public :: IBMpoints + public :: recvOBB, sendOBB + public :: SendSTL2Partitions, receiveSTLpartitions + public :: GetBRvertices + public :: getmaskcandidates + public :: RecvPointsListRoot, SendPointsList2Root + public :: RecvPointsListPartitions, SendPointsList2partitions + public :: recvPointsMaskRoot, sendPointsMask2Root + public :: recvPointsMaskPartitions, sendPointsMask2Partitions + public :: recvNormalsRoot, sendNormals2Root + public :: recvDistancesANDNormalspartitions, sendDistanceANDNormals2partitions + public :: recvScalarPlotRoot, sendScalarPlotRoot + public :: recvVectorPlotRoot, sendVectorPlotRoot + + type IBMpoints + + type(point_type), allocatable :: x(:) + real(kind=RP), allocatable :: Q(:,:), U_x(:,:), U_y(:,:), U_z(:,:) + integer :: LocNumOfObjs, NumOfObjs + + end type + + type(IBMpoints), public :: Mask + +contains + + subroutine recvOBB( STLNum ) + use MPI_Process_Info + implicit none + !-arguments----------------------------------------------------------------- + integer, intent(in) :: STLNum +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------------------- + real(kind=RP) :: vertex_x(8), vertex_y(8), vertex_z(8), & + angle, center(2), CloudCenter(NDIM), & + R1(NDIM), R2(NDIM), R3(NDIM), Length, & + Width, nMax, nMin + integer :: ierr, recv_req(13), array_of_statuses(MPI_STATUS_SIZE,13) + + if( MPI_Process% isRoot ) return + + call mpi_irecv( vertex_x, 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(1), ierr ) + + call mpi_irecv( vertex_y, 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(2), ierr ) + + call mpi_irecv( vertex_z, 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(3), ierr ) + + call mpi_irecv( angle, 1, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(4), ierr ) + + call mpi_irecv( center, 2, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(5), ierr ) + + call mpi_irecv( CloudCenter, NDIM, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(6), ierr ) + + call mpi_irecv( R1, NDIM, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(7), ierr ) + + call mpi_irecv( R2, NDIM, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(8), ierr ) + + call mpi_irecv( R3, NDIM, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(9), ierr ) + + call mpi_irecv( Length, 1, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(10), ierr ) + + call mpi_irecv( Width, 1, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(11), ierr ) + + call mpi_irecv( nMax, 1, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(12), ierr ) + + call mpi_irecv( nMin, 1, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(13), ierr ) + + call mpi_waitall(13, recv_req, array_of_statuses, ierr) + + OBB(STLNum)% LocVertices(1,:) = vertex_x + OBB(STLNum)% LocVertices(2,:) = vertex_y + OBB(STLNum)% LocVertices(3,:) = vertex_z + OBB(STLNum)% MBR% angle = angle + OBB(STLNum)% MBR% center = center + OBB(STLNum)% CloudCenter = CloudCenter + OBB(STLNum)% R(:,1) = R1 + OBB(STLNum)% R(:,2) = R2 + OBB(STLNum)% R(:,3) = R3 + OBB(STLNum)% MBR% Length = Length + OBB(STLNum)% MBR% Width = Width + OBB(STLNum)% nMax = nMax + OBB(STLNum)% nMin = nMin + + OBB(STLNum)% invR(:,1) = OBB(STLNum)% R(1,:) + OBB(STLNum)% invR(:,2) = OBB(STLNum)% R(2,:) + OBB(STLNum)% invR(:,3) = OBB(STLNum)% R(3,:) + + OBB(STLNum)% MBR% t1 = OBB(STLNum)% R(1,:) + OBB(STLNum)% MBR% t2 = OBB(STLNum)% R(2,:) + OBB(STLNum)% MBR% normal = OBB(STLNum)% R(3,:) +#endif + end subroutine recvOBB + + subroutine sendOBB( STLNum ) + use MPI_Process_Info + implicit none + !-arguments---------------------------------------------------------- + integer, intent(in) :: STLNum +#ifdef _HAS_MPI_ + !-local-variables---------------------------------------------------- + real(kind=RP) :: vertex_x(8), vertex_y(8), vertex_z(8), & + angle, center(2), CloudCenter(NDIM), & + R1(NDIM), R2(NDIM), R3(NDIM), Length, & + Width, nMax, nMin + integer, allocatable :: send_req(:,:) + integer :: array_of_statuses(MPI_STATUS_SIZE,13), & + nProcs, ierr + + allocate(send_req(MPI_Process% nProcs-1,13)) + + vertex_x = OBB(STLNum)% LocVertices(1,:) + vertex_y = OBB(STLNum)% LocVertices(2,:) + vertex_z = OBB(STLNum)% LocVertices(3,:) + angle = OBB(STLNum)% MBR% angle + center = OBB(STLNum)% MBR% center + CloudCenter = OBB(STLNum)% CloudCenter + R1 = OBB(STLNum)% R(:,1) + R2 = OBB(STLNum)% R(:,2) + R3 = OBB(STLNum)% R(:,3) + Length = OBB(STLNum)% MBR% Length + Width = OBB(STLNum)% MBR% Width + nMax = OBB(STLNum)% nMax + nMin = OBB(STLNum)% nMin + + + do nProcs = 2, MPI_Process% nProcs + + call mpi_isend(vertex_x, 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,1), ierr ) + + call mpi_isend(vertex_y, 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,2), ierr ) + + call mpi_isend(vertex_z, 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,3), ierr ) + + call mpi_isend(angle, 1, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,4), ierr ) + + call mpi_isend(center, 2, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,5), ierr ) + + call mpi_isend(CloudCenter, NDIM, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,6), ierr ) + + call mpi_isend(R1, NDIM, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,7), ierr ) + + call mpi_isend(R2, NDIM, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,8), ierr ) + + call mpi_isend(R3, NDIM, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,9), ierr ) + + call mpi_isend(Length, 1, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,10), ierr ) + + call mpi_isend(Width, 1, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,11), ierr ) + + call mpi_isend(nMax, 1, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,12), ierr ) + + call mpi_isend(nMin, 1, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,13), ierr ) + + call mpi_waitall(13, send_req(nProcs-1,:), array_of_statuses, ierr) + + end do + + deallocate(send_req) +#endif + end subroutine sendOBB + + subroutine GetVertices( vertices, axis, SplittingPlanes ) + + implicit none + !-arguments----------------------------------------------------------- + real(kind=RP), intent(inout) :: vertices(:,:) + real(kind=RP), intent(in) :: SplittingPlanes(2) + integer, intent(in) :: axis + !-local-variables----------------------------------------------------- + integer :: v_indeces(4,2) + + if( axis .eq. 1 ) then + v_indeces(:,1) = (/1,4,8,5/) + v_indeces(:,2) = (/2,3,7,6/) + elseif( axis .eq. 2 ) then + v_indeces(:,1) = (/1,5,6,2/) + v_indeces(:,2) = (/4,8,7,3/) + else + v_indeces(:,1) = (/1,2,3,4/) + v_indeces(:,2) = (/5,6,7,8/) + end if + + vertices(axis,v_indeces(:,1)) = SplittingPlanes(1) + vertices(axis,v_indeces(:,2)) = SplittingPlanes(2) + + end subroutine GetVertices + + subroutine SendSTL2Partitions( rootSTL, STLNum, rootVertices, rootAxis ) + implicit none + !-arguments--------------------------------------------------------------------- + type(STLfile), intent(inout) :: rootSTL + integer, intent(in) :: STLNum + real(kind=RP), intent(inout) :: rootVertices(:,:) + integer, intent(inout) :: rootAxis + !-local-variables--------------------------------------------------------------- + integer :: maxvec(1) +#ifdef _HAS_MPI_ + real(kind=RP), allocatable :: locVertices(:,:,:) , Bar(:), coord(:), & + normals_x(:), normals_y(:), normals_z(:), & + vertices_x(:,:), vertices_y(:,:), & + vertices_z(:,:) + real(kind=RP) :: SplittingPlanes(2), kdtreevertices(NDIM,8) + integer :: NumOfObjs, NumOfObjsPP, NumOfObjsPartion, & + start_index, final_index, i, j, & + nProcs, ierr, & + array_of_statuses(MPI_STATUS_SIZE,17) + integer, allocatable :: SortedIndex(:), send_req(:,:) +#endif + maxvec = maxloc((/ OBB(STLNum)% MBR% Length,OBB(STLNum)% MBR% Width,abs(OBB(STLNum)% nMax) + abs(OBB(STLNum)% nMin) /)) + rootAxis = maxvec(1) +#ifdef _HAS_MPI_ + rootSTL% partition = MPI_Process% rank + + NumOfObjs = size(rootSTL% ObjectsList) + + allocate( Bar(NumOfObjs), & + coord(NumOfObjs), & + SortedIndex(NumOfObjs), & + normals_x(NumOfObjs), & + normals_y(NumOfObjs), & + normals_z(NumOfObjs), & + vertices_x(NumOfObjs,3), & + vertices_y(NumOfObjs,3), & + vertices_z(NumOfObjs,3), & + locVertices(8,NDIM,MPI_Process% nProcs), & + send_req(MPI_Process% nProcs-1,17) ) + + do i = 1, NumOfObjs + Bar(i) = 0.0_RP + SortedIndex(i) = rootSTL% ObjectsList(i)% index + do j = 1, size(rootSTL% ObjectsList(i)% vertices) + Bar(i) = Bar(i) + rootSTL% ObjectsList(i)% vertices(j)% coords(rootAxis) + end do + Bar(i) = Bar(i)/size(rootSTL% ObjectsList(i)% vertices) + end do +!$omp parallel +!$omp single + call sort( Bar, SortedIndex, coord, coord, coord, 1, NumOfObjs ) +!$omp end single +!$omp end parallel + deallocate(Bar,coord) + + NumOfObjsPP = NumOfObjs/MPI_Process% nProcs + + start_index = 0; final_index = 0 + + do nProcs = 1, MPI_Process% nProcs + start_index = final_index + final_index = start_index + NumOfObjsPP + + if( nProcs .eq. MPI_Process% nProcs ) final_index = NumOfObjs + + SplittingPlanes(1) = huge(1.0_RP) + SplittingPlanes(2) = -huge(1.0_RP) + + do i = 1, (final_index-start_index) + do j = 1, 3 + SplittingPlanes(1) = min(SplittingPlanes(1),rootSTL% ObjectsList(SortedIndex(start_index+i))% vertices(j)% coords(rootAxis)) + SplittingPlanes(2) = max(SplittingPlanes(2),rootSTL% ObjectsList(SortedIndex(start_index+i))% vertices(j)% coords(rootAxis)) + vertices_x(start_index+i,j) = rootSTL% ObjectsList(SortedIndex(start_index+i))% vertices(j)% coords(1) + vertices_y(start_index+i,j) = rootSTL% ObjectsList(SortedIndex(start_index+i))% vertices(j)% coords(2) + vertices_z(start_index+i,j) = rootSTL% ObjectsList(SortedIndex(start_index+i))% vertices(j)% coords(3) + end do + normals_x(start_index+i) = rootSTL% ObjectsList(SortedIndex(start_index+i))% normal(1) + normals_y(start_index+i) = rootSTL% ObjectsList(SortedIndex(start_index+i))% normal(2) + normals_z(start_index+i) = rootSTL% ObjectsList(SortedIndex(start_index+i))% normal(3) + end do + + kdtreevertices = OBB(STLNum)% LocVertices + + call GetVertices( kdtreevertices, rootAxis, SplittingPlanes ) + + do j = 1, 8 + locVertices(j,:,nProcs) = kdtreevertices(:,j) + end do + + if( rootSTL% show ) call DescribeSTLPartitions(nProcs-1,(final_index-start_index)) + + end do + + start_index = NumOfObjsPP; final_index = NumOfObjsPP + + do nProcs = 2, MPI_Process% nProcs + + start_index = final_index + 1 + final_index = (start_index-1) + NumOfObjsPP + + if( nProcs .eq. MPI_Process% nProcs ) final_index = NumOfObjs + + NumOfObjsPartion = (final_index-start_index) + 1 + + call mpi_isend(NumOfObjsPartion, 1, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,1), ierr ) + + call mpi_wait(send_req(nProcs-1,1),MPI_STATUS_IGNORE,ierr) + + call mpi_isend(normals_x(start_index:final_index), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,2), ierr ) + + call mpi_isend(normals_y(start_index:final_index), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,3), ierr ) + + call mpi_isend(normals_z(start_index:final_index), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,4), ierr ) + + call mpi_isend(vertices_x(start_index:final_index,1), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,5), ierr ) + + call mpi_isend(vertices_y(start_index:final_index,1), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,6), ierr ) + + call mpi_isend(vertices_z(start_index:final_index,1), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,7), ierr ) + + call mpi_isend(vertices_x(start_index:final_index,2), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,8), ierr ) + + call mpi_isend(vertices_y(start_index:final_index,2), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,9), ierr ) + + call mpi_isend(vertices_z(start_index:final_index,2), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,10), ierr ) + + call mpi_isend(vertices_x(start_index:final_index,3), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,11), ierr ) + + call mpi_isend(vertices_y(start_index:final_index,3), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,12), ierr ) + + call mpi_isend(vertices_z(start_index:final_index,3), NumOfObjsPartion, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,13), ierr ) + + call mpi_isend(locVertices(:,1,nProcs), 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,14), ierr ) + + call mpi_isend(locVertices(:,2,nProcs), 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,15), ierr ) + + call mpi_isend(locVertices(:,3,nProcs), 8, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,16), ierr ) + + call mpi_isend(rootAxis, 1, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,17), ierr ) + + call mpi_waitall(17, send_req(nProcs-1,:), array_of_statuses, ierr) + + end do + + call rootSTL% destroy() + + allocate(rootSTL% ObjectsList(NumOfObjsPP)) + + do i = 1, NumOfObjsPP + allocate(rootSTL% ObjectsList(i)% vertices(NDIM)) + rootSTL% ObjectsList(i)% normal(1) = normals_x(i) + rootSTL% ObjectsList(i)% normal(2) = normals_y(i) + rootSTL% ObjectsList(i)% normal(3) = normals_z(i) + do j = 1, NDIM + rootSTL% ObjectsList(i)% vertices(j)% coords(1) = vertices_x(i,j) + rootSTL% ObjectsList(i)% vertices(j)% coords(2) = vertices_y(i,j) + rootSTL% ObjectsList(i)% vertices(j)% coords(3) = vertices_z(i,j) + end do + rootSTL% ObjectsList(i)% index = i + end do + + rootSTL% NumOfObjs = NumOfObjsPP + + do j = 1, 8 + rootVertices(:,j) = locVertices(j,:,1) + end do + + deallocate(send_req, locVertices, vertices_x, vertices_y, vertices_z, normals_x, normals_y, normals_z) +#else + if( rootSTL% show ) call rootSTL% Describe( rootSTL% filename ) +#endif + + end subroutine SendSTL2Partitions + + + subroutine receiveSTLpartitions( partitionSTL, STLNum, partitionVertex, partitionAxis ) + implicit none + !-arguments----------------------------------------------------- + type(STLfile), intent(inout) :: partitionSTL + integer, intent(in) :: STLNum + real(kind=RP), intent(inout) :: partitionVertex(:,:) + integer, intent(inout) :: partitionAxis +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------- + real(kind=RP), allocatable :: normals_x(:), normals_y(:), normals_z(:), & + vertices_x(:,:), vertices_y(:,:), & + vertices_z(:,:), locVertices(:,:) + integer :: NumOfObjs, ierr, recv_req(17), i, j, & + array_of_statuses(MPI_STATUS_SIZE,17) + + if( MPI_Process% isRoot ) return + + partitionSTL% partition = MPI_Process% rank + + call mpi_irecv( partitionSTL% NumOfObjs, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(1), ierr ) + + call mpi_wait(recv_req(1), MPI_STATUS_IGNORE, ierr) + + NumOfObjs = partitionSTL% NumOfObjs + + allocate( normals_x(NumOfObjs), & + normals_y(NumOfObjs), & + normals_z(NumOfObjs), & + vertices_x(NumOfObjs,NDIM), & + vertices_y(NumOfObjs,NDIM), & + vertices_z(NumOfObjs,NDIM), & + locVertices(8,NDIM) ) + + call mpi_irecv( normals_x, NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(2), ierr ) + + call mpi_irecv( normals_y, NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(3), ierr ) + + call mpi_irecv( normals_z, NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(4), ierr ) + + call mpi_irecv( vertices_x(:,1), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(5), ierr ) + + call mpi_irecv( vertices_y(:,1), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(6), ierr ) + + call mpi_irecv( vertices_z(:,1), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(7), ierr ) + + call mpi_irecv( vertices_x(:,2), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(8), ierr ) + + call mpi_irecv( vertices_y(:,2), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(9), ierr ) + + call mpi_irecv( vertices_z(:,2), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(10), ierr ) + + call mpi_irecv( vertices_x(:,3), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(11), ierr ) + + call mpi_irecv( vertices_y(:,3), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(12), ierr ) + + call mpi_irecv( vertices_z(:,3), NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(13), ierr ) + + call mpi_irecv( locVertices(:,1), 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(14), ierr ) + + call mpi_irecv( locVertices(:,2), 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(15), ierr ) + + call mpi_irecv( locVertices(:,3), 8, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(16), ierr ) + + call mpi_irecv( partitionAxis, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(17), ierr ) + + call mpi_waitall(17, recv_req, array_of_statuses, ierr) + + allocate(partitionSTL% ObjectsList(NumOfObjs)) + + do i = 1, NumOfObjs + partitionSTL% ObjectsList(i)% NumOfVertices = 3 + allocate(partitionSTL% ObjectsList(i)% vertices(3)) + do j = 1, partitionSTL% ObjectsList(i)% NumOfVertices + partitionSTL% ObjectsList(i)% vertices(j)% coords(1) = vertices_x(i,j) + partitionSTL% ObjectsList(i)% vertices(j)% coords(2) = vertices_y(i,j) + partitionSTL% ObjectsList(i)% vertices(j)% coords(3) = vertices_z(i,j) + end do + partitionSTL% ObjectsList(i)% normal(1) = normals_x(i) + partitionSTL% ObjectsList(i)% normal(2) = normals_y(i) + partitionSTL% ObjectsList(i)% normal(3) = normals_z(i) + partitionSTL% ObjectsList(i)% index = i + end do + + partitionVertex(1,:) = locVertices(:,1) + partitionVertex(2,:) = locVertices(:,2) + partitionVertex(3,:) = locVertices(:,3) + + deallocate( normals_x, & + normals_y, & + normals_z, & + vertices_x, & + vertices_y, & + vertices_z, & + locVertices ) +#endif + end subroutine receiveSTLpartitions + + subroutine GetBRvertices( vertices, BandRegionCoeff, axis, STLNum, BRvertices ) + + implicit none + !-arguments--------------------------------------------- + real(kind=RP), intent(in) :: vertices(:,:), & + BandRegionCoeff + integer, intent(in) :: axis, STLNum + real(kind=RP), intent(out) :: BRvertices(NDIM,8) + !-local-variables--------------------------------------- + integer :: v_indeces(4,2) + + if( axis .eq. 1 ) then + v_indeces(:,1) = (/1,4,8,5/) + v_indeces(:,2) = (/2,3,7,6/) + elseif( axis .eq. 2 ) then + v_indeces(:,1) = (/1,5,6,2/) + v_indeces(:,2) = (/4,8,7,3/) + else + v_indeces(:,1) = (/1,2,3,4/) + v_indeces(:,2) = (/5,6,7,8/) + end if + + BRvertices = BandRegionCoeff*OBB(STLNum)% LocVertices + + if( MPI_Process% rank .ne. 0 ) then + BRvertices(axis,v_indeces(:,1)) = vertices(axis,v_indeces(:,1)) + end if + if( MPI_Process% rank .ne. (MPI_Process% nProcs-1) ) then + BRvertices(axis,v_indeces(:,2)) = vertices(axis,v_indeces(:,2)) + end if + + end subroutine GetBRvertices + + + subroutine GetMaskCandidates( elements, no_of_elements, no_of_DoFs, STLNum, NumOfSTL ) + use ElementClass + implicit none + !-arguments---------------------------------------------------------------- + type(element), intent(inout) :: elements(:) + integer, intent(in) :: no_of_elements, no_of_DoFs, & + STLNum, NumOfSTL + !-local-variables----------------------------------------------------------- + type(point_type), allocatable :: x(:) + integer :: eID, i, j, k, ierr + + allocate(x(no_of_DoFs)) + Mask% LocNumOfObjs = 0 + + do eID = 1, no_of_elements + if( .not. allocated(elements(eID)% isInsideBody) ) then + call elements(eID)% ConstructIBM(elements(eID)% Nxyz(1), elements(eID)% Nxyz(2), elements(eID)% Nxyz(3), NumOfSTL ) + end if + + do k = 0, elements(eID)% Nxyz(3); do j = 0, elements(eID)% Nxyz(2) ; do i = 0, elements(eID)% Nxyz(1) + + if( elements(eID)% isInsideBody(i,j,k) ) cycle + + elements(eID)% isInsideBody(i,j,k) = OBB(STLNum)% isPointInside( coords = elements(eID)% geom% x(:,i,j,k) ) + + if( elements(eID)% isInsideBody(i,j,k) ) then + Mask% LocNumOfObjs = Mask% LocNumOfObjs + 1 + x(Mask% LocNumOfObjs)% coords = elements(eID)% geom% x(:,i,j,k) + x(Mask% LocNumOfObjs)% local_Position = (/i,j,k/) + x(Mask% LocNumOfObjs)% element_index = eID + x(Mask% LocNumOfObjs)% partition = MPI_Process% rank + end if + end do; end do; end do + + end do +#ifdef _HAS_MPI_ + call mpi_allreduce(Mask% LocNumOfObjs, Mask% NumOfObjs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD, ierr) +#else + Mask% NumOfObjs = Mask% LocNumOfObjs +#endif + allocate(Mask% x(Mask% NumOfObjs)) + + do i = 1, Mask% LocNumOfObjs + Mask% x(i)% coords = x(i)% coords + Mask% x(i)% local_Position = x(i)% local_Position + Mask% x(i)% element_index = x(i)% element_index + Mask% x(i)% partition = x(i)% partition + Mask% x(i)% index = i + end do + + deallocate(x) + + end subroutine GetMaskCandidates + + + subroutine RecvPointsListpartitions( PointsList ) + implicit none + !-arguments----------------------------------------------------------------- + type(IBMpoints), intent(inout) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------------------- + real(kind=RP), allocatable :: coords(:,:) + integer, allocatable :: local_position(:,:), element_index(:), & + partition(:), indeces(:) + integer :: i, nProcs, ierr, recv_req(9), & + array_of_statuses(MPI_STATUS_SIZE,9) + + if( MPI_Process% isRoot ) return + + allocate( coords(PointsList% NumOfObjs,NDIM), & + local_position(PointsList% NumOfObjs,NDIM), & + element_index(PointsList% NumOfObjs), & + partition(PointsList% NumOfObjs), & + indeces(PointsList% NumOfObjs) ) + + call mpi_irecv( coords(:,1), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(1), ierr ) + + call mpi_irecv( coords(:,2), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(2), ierr ) + + call mpi_irecv( coords(:,3), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(3), ierr ) + + call mpi_irecv( local_position(:,1), PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(4), ierr ) + + call mpi_irecv( local_position(:,2), PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(5), ierr ) + + call mpi_irecv( local_position(:,3), PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(6), ierr ) + + call mpi_irecv( element_index, PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(7), ierr ) + + call mpi_irecv( partition, PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(8), ierr ) + + call mpi_irecv( indeces, PointsList% NumOfObjs, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(9), ierr ) + + call mpi_waitall(9, recv_req, array_of_statuses, ierr) + + do i = 1, PointsList% NumOfObjs + PointsList% x(i)% coords = coords(i,:) + PointsList% x(i)% local_position = local_position(i,:) + PointsList% x(i)% element_index = element_index(i) + PointsList% x(i)% partition = partition(i) + PointsList% x(i)% index = indeces(i) + end do + + deallocate( coords, & + local_position, & + element_index, & + partition, & + indeces ) +#endif + end subroutine RecvPointsListpartitions + + + subroutine SendPointsList2partitions( PointsList ) + implicit none + !-arguments---------------------------------------------------------------- + type(IBMPoints), intent(inout) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables---------------------------------------------------------- + real(kind=RP), allocatable :: coords(:,:), normals(:,:), Dist(:) + integer, allocatable :: local_position(:,:), element_index(:), & + partition(:), indeces(:), send_req(:,:) + integer :: i, nProcs, ierr, & + array_of_statuses(MPI_STATUS_SIZE,9) + + allocate( coords(PointsList% NumOfObjs,NDIM), & + local_position(PointsList% NumOfObjs,NDIM), & + element_index(PointsList% NumOfObjs), & + partition(PointsList% NumOfObjs), & + indeces(PointsList% NumOfObjs), & + send_req(MPI_Process% nProcs-1,9) ) + + do i = 1, PointsList% NumOfObjs + coords(i,:) = PointsList% x(i)% coords + local_position(i,:) = PointsList% x(i)% local_position + element_index(i) = PointsList% x(i)% element_index + partition(i) = PointsList% x(i)% partition + indeces(i) = PointsList% x(i)% index + end do + + do nProcs = 2, MPI_Process% nProcs + + call mpi_isend( coords(:,1), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,1), ierr ) + + call mpi_isend( coords(:,2), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,2), ierr ) + + call mpi_isend( coords(:,3), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,3), ierr ) + + call mpi_isend( local_position(:,1), PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,4), ierr ) + + call mpi_isend( local_position(:,2), PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,5), ierr ) + + call mpi_isend( local_position(:,3), PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,6), ierr ) + + call mpi_isend( element_index, PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,7), ierr ) + + call mpi_isend( partition, PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,8), ierr ) + + call mpi_isend( indeces, PointsList% NumOfObjs, MPI_INT, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,9), ierr ) + + call mpi_waitall(9, send_req(nProcs-1,:), array_of_statuses, ierr) + + end do + + deallocate( coords, & + local_position, & + element_index, & + partition, & + indeces, & + send_req ) +#endif + end subroutine SendPointsList2partitions + + subroutine RecvPointsListRoot( PointsList ) + implicit none + !-arguments------------------------------------------------------------------------- + type(IBMPoints), intent(inout) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables------------------------------------------------------------------- + real(kind=RP), allocatable :: coords(:,:), normals_x(:,:), normals_y(:,:), & + normals_z(:,:) + integer, allocatable :: local_position(:,:), element_index(:), & + partition(:), recv_req(:,:) + integer :: i, LocNumOfObjs, start_index, final_index, ierr, & + rank, nProcs, array_of_statuses(MPI_STATUS_SIZE,9) + + allocate( coords(PointsList% NumOfObjs,NDIM), & + local_position(PointsList% NumOfObjs,NDIM), & + element_index(PointsList% NumOfObjs), & + partition(PointsList% NumOfObjs), & + recv_req(MPI_Process% nProcs-1,9) ) + + start_index = PointsList% LocNumOfObjs; final_index = PointsList% LocNumOfObjs + + do nProcs = 2, MPI_Process% nProcs + + call mpi_irecv( LocNumOfObjs, 1, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,1), ierr ) + + call mpi_wait(recv_req(nProcs-1,1), MPI_STATUS_IGNORE, ierr) + + if( LocNumOfObjs .eq. 0 ) cycle + + call mpi_irecv( coords(1:LocNumOfObjs,1), LocNumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,2), ierr ) + + call mpi_irecv( coords(1:LocNumOfObjs,2), LocNumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,3), ierr ) + + call mpi_irecv( coords(1:LocNumOfObjs,3), LocNumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,4), ierr ) + + call mpi_irecv( local_position(1:LocNumOfObjs,1), LocNumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,5), ierr ) + + call mpi_irecv( local_position(1:LocNumOfObjs,2), LocNumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,6), ierr ) + + call mpi_irecv( local_position(1:LocNumOfObjs,3), LocNumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,7), ierr ) + + call mpi_irecv( element_index(1:LocNumOfObjs), LocNumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,8), ierr ) + + call mpi_irecv( partition(1:LocNumOfObjs), LocNumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,9), ierr ) + + call mpi_waitall(9, recv_req(nProcs-1,:), array_of_statuses, ierr) + + start_index = final_index + final_index = start_index + LocNumOfObjs + + do i = 1, LocNumOfObjs + PointsList% x(start_index+i)% coords = coords(i,:) + PointsList% x(start_index+i)% local_position = local_position(i,:) + PointsList% x(start_index+i)% element_index = element_index(i) + PointsList% x(start_index+i)% partition = partition(i) + PointsList% x(start_index+i)% index = start_index + i + end do + + end do + + deallocate( coords, & + local_position, & + element_index, & + partition, & + recv_req ) +#endif + end subroutine RecvPointsListRoot + + + subroutine sendPointsList2Root( PointsList ) + implicit none + !-arguments----------------------------- + type(IBMPoints), intent(inout) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables-------------- + real(kind=RP), allocatable :: coords(:,:), normals_x(:), normals_y(:), & + normals_z(:) + integer, allocatable :: local_position(:,:), element_index(:), & + partition(:) + integer :: i, send_req(9), ierr, & + array_of_statuses(MPI_STATUS_SIZE,9) + + if( MPI_Process% isRoot ) return + + call mpi_isend( PointsList% LocNumOfObjs, 1, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(1), ierr ) + + call mpi_wait(send_req(1), MPI_STATUS_IGNORE, ierr) + + if( PointsList% LocNumOfObjs .eq. 0 ) return + + allocate( coords(PointsList% LocNumOfObjs,NDIM), & + local_position(PointsList% LocNumOfObjs,NDIM), & + element_index(PointsList% LocNumOfObjs), & + partition(PointsList% LocNumOfObjs) ) + + do i = 1, PointsList% LocNumOfObjs + coords(i,:) = PointsList% x(i)% coords + local_position(i,:) = PointsList% x(i)% local_position + element_index(i) = PointsList% x(i)% element_index + partition(i) = PointsList% x(i)% partition + end do + + call mpi_isend( coords(:,1), PointsList% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(2), ierr ) + + call mpi_isend( coords(:,2), PointsList% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(3), ierr ) + + call mpi_isend( coords(:,3), PointsList% LocNumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(4), ierr ) + + call mpi_isend( local_position(:,1), PointsList% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(5), ierr ) + + call mpi_isend( local_position(:,2), PointsList% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(6), ierr ) + + call mpi_isend( local_position(:,3), PointsList% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(7), ierr ) + + call mpi_isend( element_index, PointsList% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(8), ierr ) + + call mpi_isend( partition, PointsList% LocNumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(9), ierr ) + + call mpi_waitall(9, send_req, array_of_statuses, ierr) + + deallocate( coords, & + local_position, & + element_index, & + partition ) +#endif + end subroutine sendPointsList2Root + + + + subroutine recvPointsMaskRoot() + implicit none + !-local-variables-------------------------------------------------- + integer :: i +#ifdef _HAS_MPI_ + integer :: nProcs, ierr, recv_req, & + status(MPI_STATUS_SIZE) + integer, allocatable :: NumOfIntersectionsLoc(:), & + NumOfIntersections(:) + + allocate( NumOfIntersectionsLoc(Mask% NumOfObjs), & + NumOfIntersections(Mask% NumOfObjs) ) + + NumOfIntersections = 0 + + do nProcs = 2, MPI_Process% nProcs + + call mpi_irecv( NumOfIntersectionsLoc, Mask% NumOfObjs, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req, ierr ) + + call mpi_wait(recv_req, status, ierr) + + NumOfIntersections = NumOfIntersections + NumOfIntersectionsLoc + + end do + + do i = 1, Mask% NumOfObjs + Mask% x(i)% NumOfIntersections = Mask% x(i)% NumOfIntersections + NumOfIntersections(i) + Mask% x(i)% isInsideBody = .false. + if(mod(Mask% x(i)% NumOfIntersections,2) .ne. 0 ) Mask% x(i)% isInsideBody = .true. + end do + + deallocate(NumOfIntersections,NumOfIntersectionsLoc) +#else + do i = 1, Mask% NumOfObjs + Mask% x(i)% isInsideBody = .false. + if(mod(Mask% x(i)% NumOfIntersections,2) .ne. 0 ) Mask% x(i)% isInsideBody = .true. + end do +#endif + end subroutine recvPointsMaskRoot + + subroutine sendPointsMask2Root() + implicit none +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------------------- + integer :: ierr, send_req, i, & + status(MPI_STATUS_SIZE) + integer, allocatable :: NumOfIntersectionsLoc(:) + + if( MPI_Process% isRoot ) return + + allocate( NumOfIntersectionsLoc(Mask% NumOfObjs) ) + + do i = 1, Mask% NumOfObjs + NumOfIntersectionsLoc(i) = Mask% x(i)% NumOfIntersections + end do + + call mpi_isend( NumOfIntersectionsLoc, Mask% NumOfObjs, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req, ierr ) + + call mpi_wait(send_req, status, ierr) + + deallocate( NumOfIntersectionsLoc ) +#endif + end subroutine sendPointsMask2Root + + + subroutine recvPointsMaskPartitions() + implicit none +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------------------- + integer :: ierr, i, recv_req, & + status(MPI_STATUS_SIZE) + logical, allocatable :: isInsideBody(:) + + if( MPI_Process% isRoot ) return + + allocate( isInsideBody(Mask% NumOfObjs) ) + + call mpi_irecv( isInsideBody, Mask% NumOfObjs, MPI_LOGICAL, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req, ierr ) + + call mpi_wait(recv_req, status, ierr) + + do i = 1, Mask% NumOfObjs + Mask% x(i)% isInsideBody = isInsideBody(i) + end do + + deallocate( isInsideBody ) +#endif + end subroutine recvPointsMaskPartitions + + subroutine sendPointsMask2Partitions() + implicit none +#ifdef _HAS_MPI_ + !-local-variables----------------------------------------------------------------------------- + integer :: nProcs, ierr, i, & + statuses(MPI_STATUS_SIZE) + integer :: send_req + logical, allocatable :: isInsideBody(:) + + allocate( isInsideBody(Mask% NumOfObjs) ) + + do i = 1, Mask% NumOfObjs + isInsideBody(i) = Mask% x(i)% isInsideBody + end do + + do nProcs = 2, MPI_Process% nProcs + + call mpi_isend( isInsideBody, Mask% NumOfObjs, MPI_LOGICAL, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req, ierr ) + + call mpi_wait(send_req, statuses, ierr ) + + end do + + deallocate( isInsideBody ) +#endif + end subroutine sendPointsMask2Partitions + + subroutine recvNormalsRoot( PointsList, ranks ) + implicit none + !-arguments------------------------------------------------------------------------- + type(IBMPoints), intent(inout) :: PointsList + real(kind=RP), intent(in) :: ranks(:) + !-local-variables------------------------------------------------------------------- +#ifdef _HAS_MPI_ + real(kind=RP), allocatable :: normals_x(:,:), normals_y(:,:), normals_z(:,:) + integer, allocatable :: recv_req(:,:) + integer :: i, ierr, rank, nProcs, & + array_of_statuses(MPI_STATUS_SIZE,3) + + allocate( normals_x(PointsList% NumOfObjs,MPI_Process% nProcs-1), & + normals_y(PointsList% NumOfObjs,MPI_Process% nProcs-1), & + normals_z(PointsList% NumOfObjs,MPI_Process% nProcs-1), & + recv_req(MPI_Process% nProcs-1,3) ) + + do nProcs = 2, MPI_Process% nProcs + + call mpi_irecv( normals_x(:,nProcs-1), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,1), ierr ) + + call mpi_irecv( normals_y(:,nProcs-1), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,2), ierr ) + + call mpi_irecv( normals_z(:,nProcs-1), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,3), ierr ) + + call mpi_waitall(3, recv_req(nProcs-1,:), array_of_statuses, ierr ) + + end do + + do i = 1, PointsList% NumOfObjs + rank = ranks(i) + if( rank .eq. 0 ) cycle + PointsList% x(i)% normal(1) = normals_x(i,rank) + PointsList% x(i)% normal(2) = normals_y(i,rank) + PointsList% x(i)% normal(3) = normals_z(i,rank) + end do + + deallocate( normals_x, & + normals_y, & + normals_z, & + recv_req ) +#endif + end subroutine recvNormalsRoot + + subroutine sendNormals2Root( PointsList ) + implicit none + !-arguments----------------------------------------------------------------- + type(IBMPoints), intent(in) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables---------------------------------------------------------- + real(kind=RP), allocatable :: normals(:,:) + integer :: send_req(3), ierr, i, & + array_of_statuses(MPI_STATUS_SIZE,3) + + if( MPI_Process% isRoot ) return + + allocate(normals(PointsList% NumOfObjs,NDIM)) + + do i = 1, PointsList% NumOfObjs + normals(i,:) = PointsList% x(i)% normal + end do + + call mpi_isend( normals(:,1), PointsList% NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(1), ierr ) + + call mpi_isend( normals(:,2), PointsList% NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(2), ierr ) + + call mpi_isend( normals(:,3), PointsList% NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(3), ierr ) + + call mpi_waitall(3, send_req, array_of_statuses, ierr) + + deallocate(normals) +#endif + end subroutine sendNormals2Root + + subroutine recvDistancesANDNormalspartitions( PointsList ) + implicit none + !-arguments------------------------------------------------------------------------------ + type(IBMPoints), intent(inout) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables------------------------------------------------------------------------ + real(kind=RP), allocatable :: normals(:,:), Dist(:) + integer :: i, ierr, recv_req(4), & + array_of_statuses(MPI_STATUS_SIZE,4) + + if( MPI_Process% isRoot ) return + + allocate( normals(PointsList% NumOfObjs,NDIM), & + Dist(PointsList% NumOfObjs) ) + + call mpi_irecv( normals(:,1), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(1), ierr ) + + call mpi_irecv( normals(:,2), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(2), ierr ) + + call mpi_irecv( normals(:,3), PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(3), ierr ) + + call mpi_irecv( Dist, PointsList% NumOfObjs, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(4), ierr ) + + call mpi_waitall(4, recv_req, array_of_statuses, ierr) + + do i = 1, PointsList% NumOfObjs + PointsList% x(i)% normal = normals(i,:) + PointsList% x(i)% Dist = Dist(i) + end do + + deallocate( normals, & + Dist ) +#endif + end subroutine recvDistancesANDNormalspartitions + + subroutine sendDistanceANDNormals2partitions( PointsList ) + implicit none + !-arguments------------------------------------------------------------------------------ + type(IBMPoints), intent(in) :: PointsList +#ifdef _HAS_MPI_ + !-local-variables------------------------------------------------------------------------ + real(kind=RP), allocatable :: normals(:,:), Dist(:) + integer, allocatable :: send_req(:,:) + integer :: i, ierr, nProcs, array_of_statuses(MPI_STATUS_SIZE,4) + + allocate( normals(PointsList% NumOfObjs,NDIM), & + Dist(PointsList% NumOfObjs), & + send_req(MPI_Process% nProcs-1,4) ) + + do i = 1, PointsList% NumOfObjs + normals(i,:) = PointsList% x(i)% normal + Dist(i) = PointsList% x(i)% Dist + end do + + do nProcs = 2, MPI_Process% nProcs + + call mpi_isend( normals(:,1), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,1), ierr ) + + call mpi_isend( normals(:,2), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,2), ierr ) + + call mpi_isend( normals(:,3), PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,3), ierr ) + + call mpi_isend( Dist, PointsList% NumOfObjs, MPI_DOUBLE, nProcs-1, DEFAULT_TAG, MPI_COMM_WORLD, send_req(nProcs-1,4), ierr ) + + call mpi_waitall(4, send_req(nProcs-1,:), array_of_statuses, ierr) + + end do + + deallocate( normals, & + Dist, & + send_req ) +#endif + end subroutine sendDistanceANDNormals2partitions + + + subroutine recvScalarPlotRoot( ObjectsList, STLNum, rootScalar, x, y, z, scalar ) + + implicit none + type(Object_type), intent(in) :: ObjectsList(:) + integer, intent(in) :: STLNum + real(kind=RP), intent(in) :: rootScalar(:,:) + real(kind=RP), allocatable, intent(inout) :: x(:), y(:), z(:), scalar(:) + !-local-variables------------------------------------------------------------------- + real(kind=RP) :: coords(NDIM) + integer :: i, j, k, rootNumOfObjs +#ifdef _HAS_MPI_ + integer :: ierr, nProcs, rank, ObjsSize, start_index, & + final_index, array_of_statuses(MPI_STATUS_SIZE,4) + integer, allocatable :: recv_req(:,:), recv_Firstreq(:), NumOfObjs(:) + real(kind=RP), allocatable :: COORD_x(:), COORD_y(:), COORD_z(:), state(:) +#endif + if( .not. MPI_Process% isRoot ) return + + rootNumOfObjs = 3*size(ObjectsList) +#ifdef _HAS_MPI_ + + allocate( NumOfObjs(MPI_Process% nProcs-1), & + recv_Firstreq(MPI_Process% nProcs-1) ) + + do nProcs = 2, MPI_Process% nProcs + + call mpi_irecv( ObjsSize, 1, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_Firstreq(nProcs-1), ierr ) + call mpi_wait( recv_Firstreq(nProcs-1), MPI_STATUS_IGNORE, ierr ) + + NumOfObjs(nProcs-1) = ObjsSize + + end do + + deallocate(recv_Firstreq) + + allocate( x(rootNumOfObjs+sum(NumOfObjs)), & + y(rootNumOfObjs+sum(NumOfObjs)), & + z(rootNumOfObjs+sum(NumOfObjs)), & + scalar(rootNumOfObjs+sum(NumOfObjs)), & + COORD_x(sum(NumOfObjs)), & + COORD_y(sum(NumOfObjs)), & + COORD_z(sum(NumOfObjs)), & + state(sum(NumOfObjs)), & + recv_req(MPI_Process% nProcs-1,4) ) + + do nProcs = 2, MPI_Process% nProcs + + start_index = sum(NumOfObjs(1:nProcs-2)) + 1 + final_index = (start_index-1) + NumOfObjs(nProcs-1) + + call mpi_irecv( COORD_x(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,1), ierr ) + + call mpi_irecv( COORD_y(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,2), ierr ) + + call mpi_irecv( COORD_z(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,3), ierr ) + + call mpi_irecv( state(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,4), ierr ) + + call mpi_waitall(4, recv_req(nProcs-1,:), array_of_statuses, ierr) + + end do + do i = 1, sum(NumOfObjs) + x(rootNumOfObjs+i) = COORD_x(i) + y(rootNumOfObjs+i) = COORD_y(i) + z(rootNumOfObjs+i) = COORD_z(i) + scalar(rootNumOfObjs+i) = state(i) + end do + + deallocate( NumOfObjs, COORD_x, COORD_y, COORD_z, state, recv_req ) +#else + allocate( x(rootNumOfObjs), & + y(rootNumOfObjs), & + z(rootNumOfObjs), & + scalar(rootNumOfObjs) ) +#endif + k = 0 + do i = 1, size(ObjectsList) + do j = 1, size(ObjectsList(i)% vertices) + call OBB(STLNum)% ChangeRefFrame(ObjectsList(i)% vertices(j)% coords,GLOBAL,coords) + k = k + 1 + x(k) = coords(1) + y(k) = coords(2) + z(k) = coords(3) + scalar(k) = Rootscalar(i,j) + end do + end do + + end subroutine recvScalarPlotRoot + + subroutine sendScalarPlotRoot( ObjectsList, STLNum, partitionScalar ) + implicit none + + !-arguments------------------------------------------------------------------------- + type(Object_type), intent(in) :: ObjectsList(:) + integer, intent(in) :: STLNum + real(kind=RP), intent(in) :: partitionScalar(:,:) +#ifdef _HAS_MPI_ + !-local-variables------------------------------------------------------------------- + integer :: ierr, i, j, k, NumOfObjs, status(MPI_STATUS_SIZE), & + array_of_statuses(MPI_STATUS_SIZE,4), & + send_Firstreq, send_req(4) + real(kind=RP) :: coords(NDIM) + real(kind=RP), allocatable :: COORD_x(:), COORD_y(:), COORD_z(:), state(:) + + if( MPI_Process% isRoot ) return + + NumOfObjs = 3*size(ObjectsList) + + call mpi_isend( NumOfObjs, 1, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_Firstreq, ierr ) + + call mpi_wait(send_Firstreq, status, ierr) + + allocate( COORD_x(NumOfObjs), & + COORD_y(NumOfObjs), & + COORD_z(NumOfObjs), & + state(NumOfObjs) ) + + k = 0 + do i = 1, size(ObjectsList) + do j = 1, size(ObjectsList(i)% vertices) + call OBB(STLNum)% ChangeRefFrame(ObjectsList(i)% vertices(j)% coords,GLOBAL,coords) + k = k + 1 + COORD_x(k) = coords(1) + COORD_y(k) = coords(2) + COORD_z(k) = coords(3) + state(k) = partitionScalar(i,j) + end do + end do + + call mpi_isend( COORD_x, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(1), ierr ) + + call mpi_isend( COORD_y, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(2), ierr ) + + call mpi_isend( COORD_z, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(3), ierr ) + + call mpi_isend( state, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(4), ierr ) + + call mpi_waitall( 4, send_req, array_of_statuses, ierr ) + + deallocate( COORD_x, COORD_y, COORD_z, state ) +#endif + end subroutine sendScalarPlotRoot + + + subroutine recvVectorPlotRoot( ObjectsList, STLNum, rootVector, x, y, z, vector_x, vector_y, vector_z ) + + implicit none + type(Object_type), intent(in) :: ObjectsList(:) + integer, intent(in) :: STLNum + real(kind=RP), intent(in) :: rootVector(:,:,:) + real(kind=RP), allocatable, intent(inout) :: x(:), y(:), z(:), vector_x(:), & + vector_y(:), vector_z(:) + !-local-variables------------------------------------------------------------------- + real(kind=RP) :: coords(NDIM) + integer :: i, j, k, rootNumOfObjs +#ifdef _HAS_MPI_ + integer :: ierr, nProcs, rank, ObjsSize, start_index, & + final_index, array_of_statuses(MPI_STATUS_SIZE,6) + integer, allocatable :: recv_req(:,:), recv_Firstreq(:), NumOfObjs(:) + real(kind=RP), allocatable :: COORD_x(:), COORD_y(:), COORD_z(:), state_x(:), & + state_y(:), state_z(:) +#endif + if( .not. MPI_Process% isRoot ) return + + rootNumOfObjs = 3*size(ObjectsList) +#ifdef _HAS_MPI_ + + allocate( NumOfObjs(MPI_Process% nProcs-1), & + recv_Firstreq(MPI_Process% nProcs-1) ) + + NumOfObjs = 0 + + do nProcs = 2, MPI_Process% nProcs + + call mpi_irecv( ObjsSize, 1, MPI_INT, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_Firstreq(nProcs-1), ierr ) + call mpi_wait( recv_Firstreq(nProcs-1), MPI_STATUS_IGNORE, ierr ) + + NumOfObjs(nProcs-1) = ObjsSize + + end do + + deallocate(recv_Firstreq) + + allocate( x(rootNumOfObjs+sum(NumOfObjs)), & + y(rootNumOfObjs+sum(NumOfObjs)), & + z(rootNumOfObjs+sum(NumOfObjs)), & + vector_x(rootNumOfObjs+sum(NumOfObjs)), & + vector_y(rootNumOfObjs+sum(NumOfObjs)), & + vector_z(rootNumOfObjs+sum(NumOfObjs)), & + COORD_x(sum(NumOfObjs)), & + COORD_y(sum(NumOfObjs)), & + COORD_z(sum(NumOfObjs)), & + state_x(sum(NumOfObjs)), & + state_y(sum(NumOfObjs)), & + state_z(sum(NumOfObjs)), & + recv_req(MPI_Process% nProcs-1,6) ) + + do nProcs = 2, MPI_Process% nProcs + + start_index = sum(NumOfObjs(1:nProcs-2)) + 1 + final_index = (start_index-1) + NumOfObjs(nProcs-1) + + call mpi_irecv( COORD_x(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,1), ierr ) + + call mpi_irecv( COORD_y(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,2), ierr ) + + call mpi_irecv( COORD_z(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,3), ierr ) + + call mpi_irecv( state_x(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,4), ierr ) + + call mpi_irecv( state_y(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,5), ierr ) + + call mpi_irecv( state_z(start_index:final_index), NumOfObjs(nProcs-1), MPI_DOUBLE, nProcs-1, MPI_ANY_TAG, MPI_COMM_WORLD, recv_req(nProcs-1,6), ierr ) + + call mpi_waitall(6, recv_req(nProcs-1,:), array_of_statuses, ierr) + + end do + + do i = 1, sum(NumOfObjs) + x(rootNumOfObjs+i) = COORD_x(i) + y(rootNumOfObjs+i) = COORD_y(i) + z(rootNumOfObjs+i) = COORD_z(i) + vector_x(rootNumOfObjs+i) = state_x(i) + vector_y(rootNumOfObjs+i) = state_y(i) + vector_z(rootNumOfObjs+i) = state_z(i) + end do + + deallocate( NumOfObjs, COORD_x, COORD_y, COORD_z, state_x, state_y, state_z, recv_req ) +#else + allocate( x(rootNumOfObjs), & + y(rootNumOfObjs), & + z(rootNumOfObjs), & + vector_x(rootNumOfObjs), & + vector_y(rootNumOfObjs), & + vector_z(rootNumOfObjs) ) +#endif + k = 0 + do i = 1, size(ObjectsList) + do j = 1, size(ObjectsList(i)% vertices) + call OBB(STLNum)% ChangeRefFrame(ObjectsList(i)% vertices(j)% coords,GLOBAL,coords) + k = k + 1 + x(k) = coords(1) + y(k) = coords(2) + z(k) = coords(3) + vector_x(k) = rootVector(1,i,j) + vector_y(k) = rootVector(2,i,j) + vector_z(k) = rootVector(3,i,j) + end do + end do + + end subroutine recvVectorPlotRoot + + subroutine sendVectorPlotRoot( ObjectsList, STLNum, partitionVector ) + implicit none + + !-arguments------------------------------------------------------------------------- + type(Object_type), intent(in) :: ObjectsList(:) + integer, intent(in) :: STLNum + real(kind=RP), intent(in) :: partitionVector(:,:,:) +#ifdef _HAS_MPI_ + !-local-variables------------------------------------------------------------------- + integer :: ierr, i, j, k, NumOfObjs, status(MPI_STATUS_SIZE), & + array_of_statuses(MPI_STATUS_SIZE,6), & + send_Firstreq, send_req(6) + real(kind=RP) :: coords(NDIM) + real(kind=RP), allocatable :: COORD_x(:), COORD_y(:), COORD_z(:), state_x(:), & + state_y(:), state_z(:) + + if( MPI_Process% isRoot ) return + + NumOfObjs = 3*size(ObjectsList) + + call mpi_isend( NumOfObjs, 1, MPI_INT, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_Firstreq, ierr ) + + call mpi_wait(send_Firstreq, status, ierr) + + allocate( COORD_x(NumOfObjs), & + COORD_y(NumOfObjs), & + COORD_z(NumOfObjs), & + state_x(NumOfObjs), & + state_y(NumOfObjs), & + state_z(NumOfObjs) ) + + k = 0 + do i = 1, size(ObjectsList) + do j = 1, size(ObjectsList(i)% vertices) + call OBB(STLNum)% ChangeRefFrame(ObjectsList(i)% vertices(j)% coords,GLOBAL,coords) + k = k + 1 + COORD_x(k) = coords(1) + COORD_y(k) = coords(2) + COORD_z(k) = coords(3) + state_x(k) = partitionVector(1,i,j) + state_y(k) = partitionVector(2,i,j) + state_z(k) = partitionVector(3,i,j) + end do + end do + + call mpi_isend( COORD_x, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(1), ierr ) + + call mpi_isend( COORD_y, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(2), ierr ) + + call mpi_isend( COORD_z, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(3), ierr ) + + call mpi_isend( state_x, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(4), ierr ) + + call mpi_isend( state_y, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(5), ierr ) + + call mpi_isend( state_z, NumOfObjs, MPI_DOUBLE, 0, DEFAULT_TAG, MPI_COMM_WORLD, send_req(6), ierr ) + + call mpi_waitall( 6, send_req, array_of_statuses, ierr ) + + deallocate( COORD_x, COORD_y, COORD_z, state_x, state_y, state_z ) +#endif + end subroutine sendVectorPlotRoot + +end module MPI_IBMUtilities diff --git a/Solver/src/libs/mesh/MappedGeometry.f90 b/Solver/src/libs/mesh/MappedGeometry.f90 index d75e79f23..9b8b2c710 100644 --- a/Solver/src/libs/mesh/MappedGeometry.f90 +++ b/Solver/src/libs/mesh/MappedGeometry.f90 @@ -27,7 +27,8 @@ Module MappedGeometryClass REAL(KIND=RP), DIMENSION(:,:,:,:) , ALLOCATABLE :: x ! Position of points in absolute coordinates REAL(KIND=RP), DIMENSION(:,:,:) , ALLOCATABLE :: jacobian, invJacobian ! Mapping Jacobian and 1/Jacobian real(kind=RP) :: volume - real(kind=RP), dimension(:,:,:), allocatable :: dWall ! Minimum distance to the nearest wall + real(kind=RP), dimension(:,:,:), allocatable :: dWall ! Minimum distance to the nearest wall + real(kind=RP), dimension(:,:,:,:), allocatable :: normal ! Wall normal, needed for IB real(kind=RP), dimension(:,:,:,:) , allocatable :: ncXi, ncEta, ncZeta ! Normals at the complementary grid nodes real(kind=RP), dimension(:,:,:,:) , allocatable :: t1cXi, t1cEta, t1cZeta ! Tangent vector 1 at the complementary grid nodes real(kind=RP), dimension(:,:,:,:) , allocatable :: t2cXi, t2cEta, t2cZeta ! Tangent vector 2 at the complementary grid nodes @@ -164,6 +165,7 @@ pure SUBROUTINE DestructMappedGeometry(self) safedeallocate( self % JfcXi ) safedeallocate( self % JfcEta ) safedeallocate( self % JfcZeta ) + safedeallocate( self % normal ) END SUBROUTINE DestructMappedGeometry ! diff --git a/Solver/src/libs/mesh/OrientedBoundingBox.f90 b/Solver/src/libs/mesh/OrientedBoundingBox.f90 index f3134d124..7008d658e 100644 --- a/Solver/src/libs/mesh/OrientedBoundingBox.f90 +++ b/Solver/src/libs/mesh/OrientedBoundingBox.f90 @@ -1,1306 +1,1286 @@ -#include "Includes.h" -module OrientedBoundingBox - - use SMConstants - use Utilities - use TessellationTypes - - implicit none - - integer, parameter :: TASK_THRESHOLD = 10000 - real(kind=RP), parameter :: SAFETY_FACTOR = 0.001_RP - - public OBB - -! -! ************************************************** -! Main type for the Convex Hull computations -! ************************************************** - - type Hull_type - - type(point_type), dimension(:), allocatable :: Points - integer :: NumOfPoints - - contains - procedure :: ComputeExtremePoint => Hull_ComputeExtremePoint - - end type -! -! ************************************************** -! Main type for a rectangle -! ************************************************** - type rectangle - - real(kind=rp), dimension(2,4) :: Vertices - real(kind=rp), dimension(2) :: Center - real(kind=rp), dimension(NDIM) :: normal, t1, t2 - real(kind=rp) :: Length, Width, Angle - - contains - procedure :: ComputeVertices - - end type -! -! ************************************************** -! Main type for the Oriented Bounding Box computations -! ************************************************** - type OBB_type - - type(point_type), dimension(:), allocatable :: Points, HullPoints - type(rectangle) :: MBR - real(kind=rp), dimension(NDIM,8) :: vertices, LocVertices - real(kind=rp), dimension(NDIM,NDIM) :: R, invR - real(kind=rp), dimension(NDIM) :: CloudCenter, LocFrameCenter - real(kind=rp) :: nMin, nMax - integer :: NumOfPoints, center, left, right - character(len=LINE_LENGTH) :: filename - logical :: verbose - - contains - procedure :: construct => OBB_construct - procedure :: ReadStorePoints => OBB_ReadStorePoints - procedure :: ComputeAngle => OBB_ComputeAngle - procedure :: SortingNodes => OBB_SortingNodes - procedure :: isPointInside => OBB_isPointInside - procedure :: ChangeObjsRefFrame => OBB_ChangeObjsRefFrame - procedure :: STL_rotate => OBB_STL_rotate - procedure :: STL_translate => OBB_STL_translate - procedure :: ChangeRefFrame - procedure :: ComputeRotationMatrix - procedure :: plot => OBB_plot - procedure :: isInsidePolygon => OBB_isInsidePolygon - - end type - - type(OBB_type), allocatable :: OBB(:) - -contains -! -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the determinant of a 3x3 Matrix. -! ------------------------------------------------- - - function Determinant( Mat ) result( det ) - - implicit none - !-arguments----------------------------- - real(kind=rp), dimension(:,:), intent(in) :: Mat - !-local-variables------------------------- - real(kind=rp) :: det - - det = Mat(1,1)*( Mat(2,2)*Mat(3,3) - Mat(2,3)*Mat(3,2) ) - & - Mat(1,2)*( Mat(2,1)*Mat(3,3) - Mat(2,3)*Mat(3,1) ) + & - Mat(1,3)*( Mat(2,1)*Mat(3,2) - Mat(2,2)*Mat(3,1) ) - - end function Determinant -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the eigenvalues & eigenvectors of a 3x3 matrix. -! For details, see https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf . -! ------------------------------------------------- - - subroutine ComputeEigenStructure( A, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) - use MappedGeometryClass - implicit none - !-arguments---------------------------------------------- - real(kind=rp), dimension(:,:), intent(in) :: A - real(kind=rp), intent(out) :: EigenVal - real(kind=rp), dimension(NDIM), intent(out) :: EigenVec1, EigenVec2, EigenVec3 - !-local-variables------------------------------------------ - real(kind=rp), dimension(NDIM,NDIM) :: Ident, B, EigenVecs - real(kind=rp), dimension(NDIM) :: EigenVals - real(kind=rp) :: p1, p2, p, q, r, phi - integer :: i - integer, dimension(1) :: min_loc, max_loc - - p1 = POW2( A(1,2) ) + POW2( A(1,3) ) + POW2( A(2,3) ) - -! -! Diagonal Matrix -! -------------- - if( AlmostEqual(p1,0.0_RP) ) then - EigenVals(1) = A(1,1) - EigenVals(2) = A(2,2) - EigenVals(3) = A(3,3) - min_loc = minloc(EigenVals) - max_loc = maxloc(EigenVals) - EigenVal = EigenVals(min_loc(1)) - EigenVec1 = 0.0_RP; EigenVec2 = 0.0_RP; EigenVec3 = 0.0_RP - EigenVec3(min_loc(1)) = 1.0_RP - EigenVec1(max_loc(1)) = 1.0_RP - EigenVals(min_loc(1)) = huge(1.0_RP) - min_loc = minloc(EigenVals) - EigenVec2(min_loc(1)) = 1.0_RP - return - end if - - q = 0._RP; Ident = 0._RP - - do i = 1, NDIM - q = q + A(i,i) - Ident(i,i) = 1.0_RP - end do - - q = q/3.0_RP - - p2 = POW2( A(1,1) - q ) + POW2( A(2,2) - q ) + POW2( A(3,3) - q ) + 2.0_RP*p1 - - p = sqrt(p2/6.0_RP) !sqrt{ [tr(A-qI)^2]/6 } -! -! Matrix B has the same eigenstraucture of A since it's translated by a factor = q -! ---------------------------------------------------------------------- - B = ( 1.0_RP/p ) * ( A - q * Ident ) - - r = Determinant(B)/2.0_RP - - if( r <= -1.0_RP ) then - phi = PI/3.0_RP - elseif( r >= 1 ) then - phi = 0.0_RP - else - phi = acos(r)/3.0_RP - end if -! -! Ordered eigen values \lambda_1 > \lambda_2 > \lambda_3 -! - EigenVals(1) = q + 2.0_RP * p * cos(phi) - EigenVals(3) = q + 2.0_RP * p * cos(phi + 2.0_RP/3.0_RP*PI ) - EigenVals(2) = 3.0_RP * q - EigenVals(1) - Eigenvals(3) - - ! (A - \lambda_i I)· v_i = 0 ==> v_i*· (A - \lambda_i I)e_j = 0 with e_j unit basis vector - ! v_i = (A^j - \lambda_i e_j) x (A^k - \lambda_i e_k) - ! v_j = (A^i - \lambda_j e_i) x (A^k - \lambda_j e_k) - ! v_k = v_i x v_j - - call vcross( A(:,2)-EigenVals(1)*(/ 0.0_RP,1.0_RP,0.0_RP /), & - A(:,3)-EigenVals(1)*(/ 0.0_RP,0.0_RP,1.0_RP /), & - EigenVecs(:,1) ) - call vcross( A(:,1)-EigenVals(2)*(/ 1.0_RP,0.0_RP,0.0_RP /), & - A(:,3)-EigenVals(2)*(/ 0.0_RP,0.0_RP,1.0_RP /), & - EigenVecs(:,2) ) - call vcross( EigenVecs(:,1),EigenVecs(:,2), EigenVecs(:,3)) - - - EigenVecs(:,1) = EigenVecs(:,1)/norm2(EigenVecs(:,1)) - EigenVecs(:,2) = EigenVecs(:,2)/norm2(EigenVecs(:,2)) - EigenVecs(:,3) = EigenVecs(:,3)/norm2(EigenVecs(:,3)) - -! -! Saving the last eigenvalue -! ------------------------ - EigenVal = EigenVals(3) - -! -! Saving the Eigenvectors -! ------------------------ - EigenVec1 = EigenVecs(:,1); EigenVec2 = EigenVecs(:,2); EigenVec3 = EigenVecs(:,3) - - end subroutine ComputeEigenStructure -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------------------------------------- -! Subroutine that computes the vertices of a rectangle -! ------------------------------------------------------------------------------------------- - subroutine ComputeVertices( this ) - - implicit none - !-arguments---------------------- - class(rectangle), intent(inout) :: this - - this% vertices(:,1) = 0.5_RP*(/ -this% Length, -this% Width /) - this% vertices(:,2) = 0.5_RP*(/ this% Length, -this% Width /) - this% vertices(:,3) = 0.5_RP*(/ this% Length, this% Width /) - this% vertices(:,4) = 0.5_RP*(/ -this% Length, this% Width /) - - end subroutine ComputeVertices -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------------------------------------- -! Subroutine for reading the nodes coming from a .dat file. In the future it will a .stl/.obj file -! ------------------------------------------------------------------------------------------- - subroutine OBB_ReadStorePoints( this, stl ) - - implicit none - !-arguments---------------------- - class(OBB_type), intent(inout) :: this - type(STLfile), intent(in) :: stl - !-local.variables------------------- - integer :: i, j, n - - this% NumOfPoints = 3*stl% NumOfObjs - - allocate(this% Points(this% NumOfPoints)) - - n = 0 - - associate( Objs => stl% ObjectsList ) - - do i = 1, stl% NumOfObjs - do j = 1, Objs(i)% NumOfVertices - n = n + 1 - this% Points(n)% coords = Objs(i)% vertices(j)% coords - this% Points(n)% index = n - end do - end do - - end associate - - this% filename = stl% filename - - end subroutine OBB_ReadStorePoints -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------------------------------------- -! Subroutine for plotting the OBB -! ------------------------------------------------------------------------------------------- - subroutine OBB_plot( this ) - use PhysicsStorage - use MPI_Process_Info - implicit none - !-arguments-------------------------- - class(OBB_type), intent(inout) :: this - !-local-variables---------------------- - integer :: i, funit - - if( .not. MPI_Process% isRoot ) return - - funit = UnusedUnit() - - open(funit,file='IBM/OrientedBoundingBox_'//trim(this% filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "OrientedBoudingBox"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' - - do i = 1, 8 - write(funit,'(3E13.5)') Lref*this% vertices(1,i), Lref*this% vertices(2,i), Lref*this% vertices(3,i) - end do - - write(funit,'(4i2)') 1, 2, 3, 4 - write(funit,'(4i2)') 1, 5, 8, 4 - write(funit,'(4i2)') 5, 6, 7, 8 - write(funit,'(4i2)') 2, 3, 7, 6 - write(funit,'(4i2)') 4, 8, 7, 3 - write(funit,'(4i2)') 1, 2, 6, 5 - - close(unit=funit) - - end subroutine OBB_plot - - subroutine ChangeRefFrame(this, v, FRAME, vNew) - - implicit none - !-arguments---------------------------------------------------- - class(OBB_type), intent(inout) :: this - real(kind=rp), dimension(:), intent(in) :: v - character(len=*), intent(in) :: FRAME - real(kind=rp), dimension(NDIM), intent(out) :: vNew - !-local-variables---------------------------------------------- - real(kind=rp), dimension(NDIM) :: b - real(kind=rp), dimension(NDIM,NDIM) :: R, invR - - R = 0.0_RP - R(NDIM,NDIM) = 1.0_RP - R(1,1) = cos(this% MBR% Angle); R(2,2) = R(1,1) - R(1,2) = -sin(this% MBR% Angle); R(2,1) = -R(1,2) - - invR(:,1) = R(1,:) - invR(:,2) = R(2,:) - invR(:,3) = R(3,:) - - select case( trim(FRAME) ) - - case('local') - - b = matmul( this% invR,(v - this% CloudCenter)) - b(1:2) = b(1:2) - this% MBR% Center - vNew = matmul(invR,b) - - case('global') - - b = matmul(R,v) - b(1:2) = b(1:2) + this% MBR% center - vNew = this% CloudCenter + matmul(this% R,b) - - end select - - end subroutine ChangeRefFrame -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes a rotation Matrix assuming a starting orthonormal -! base (1,0,0);(0,1,0);(0,0,1) and the final orthonormal one u, v, w -! ------------------------------------------------- - subroutine ComputeRotationMatrix( this, u, v, w ) - - implicit none - !-arguments------------------------------------------------ - class(OBB_type), intent(inout) :: this - real(kind=rp), dimension(NDIM), intent(in) :: u, v, w - - this% R(:,1) = (/ u(1), u(2), u(3) /) - this% R(:,2) = (/ v(1), v(2), v(3) /) - this% R(:,3) = (/ w(1), w(2), w(3) /) - - this% invR(:,1) = this% R(1,:) - this% invR(:,2) = this% R(2,:) - this% invR(:,3) = this% R(3,:) - - end subroutine ComputeRotationMatrix -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the Oriented Bounding Box. -! ------------------------------------------------- - subroutine OBB_construct( this, stl, isPlot ) - - implicit none - !-arguments------------------------------- - class(OBB_type), intent(inout) :: this - type(STLfile), intent(in) :: stl - logical, intent(in) :: isPlot - !-local-variables------------------------- - type(Hull_type) :: Hull - real(kind=rp) :: EigenVal - integer :: i -! -! Reading the data -! --------------- - call this% ReadStorePoints( stl ) -! -! Computing center of the points cloud -! --------------------------------- - this% CloudCenter = ComputeCentroid( this ) - -! -! Diagonalization of the cloud -! ------------------------- - call PointsCloudDiagonalization( this, EigenVal, this% MBR% t1, this% MBR% t2, this% MBR% normal ) - -! -! Computing rotation matrix -! ------------------------ - call this% ComputeRotationMatrix( this% MBR% t1, this% MBR% t2, this% MBR% normal ) - -! -! Point projection -! --------------- - call ProjectPointsOnPlane( this ) - -! -! Computing convex hull -! --------------------- - call ConvexHull( Hull, this ) - -! -! Minimum Bounding Rectangle -! --------------------------- - call RotatingCalipers( Hull, this% MBR% Width, this% MBR% Length, this% MBR% Angle, this% MBR% Center ) - -! -! Setting vertices of the MBR -! ----------------------------- - call this% MBR% ComputeVertices() - -! -! Extrusion -! --------- - call ExtrudeMBR( this ) - - if( isPlot ) call this% plot() - - allocate( this% HullPoints(Hull% NumOfPoints) ) - - do i = 1, Hull% NumOfPoints - this% HullPoints(i) = Hull% Points(i) - end do - - deallocate(this% Points, Hull% Points) - - end subroutine OBB_construct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function computes the orientation of the rotation of 2D points. -! Rotation := 1 -> Clockwise -! Rotation := 2 -> Counterclockwise -! Rotation := 0 -> Aligned -! ------------------------------------------------- - - integer function RotationType( Point1, Point2, Point3 ) result( Rotation ) - - implicit none - !-arguments----------------------------------- - type(point_type), intent(in) :: Point1, Point2, Point3 - !-local-variables------------------------------- - real(kind=rp), dimension(NDIM-1) :: b, c - real(kind=rp) :: angle - - b = Point3% coords(1:2) - Point2% coords(1:2); c = Point2% coords(1:2) - Point1% coords(1:2) - - angle = b(1)*c(2) - b(2)*c(1) - - if( AlmostEqual(angle,0.0_RP) ) then - Rotation = 0 - elseif( angle .gt. 0.0_RP ) then - Rotation = 1 - else - Rotation = 2 - end if - - end function RotationType -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------------- -! This function returns the index of the left most point of a cloud. -! ------------------------------------------------------------------- - - subroutine OBB_ComputeAngle( this, LowestIndex ) - - implicit none - !-arguments------------------------ - class(OBB_type), intent(inout) :: this - integer, intent(in) :: LowestIndex - !-local-variables-------------------- - real(kind=rp), dimension(NDIM) :: v - integer :: i -! -! had point is always the first, thus it has the lower possible angle, i.e. theta < 0 -! ---------------------------------------------------------------------- - -!$omp parallel shared(this, LowestIndex) -!$omp do schedule(runtime) private(i,v) - do i = 1, this% NumOfPoints - if( i .eq. LowestIndex ) then - this% Points(i)% theta = -2.0_RP - cycle - end if - v = this% Points(i)% coords-this% Points(LowestIndex)% coords - this% Points(i)% theta = acos(v(1)/norm2(v(1:2))) - if( almostEqual(norm2(v(1:2)), 0.0_RP) ) this% Points(i)% theta = -1.0_RP - end do -!$omp end do -!$omp end parallel - - end subroutine OBB_ComputeAngle -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------------------------ -! This function returns the index of the left most point of a cloud. -! ------------------------------------------------------------------ - - subroutine Hull_ComputeExtremePoint( this, OBB, LowestIndex ) - - implicit none - !-arguments------------------------ - class(Hull_type), intent(inout) :: this - class(OBB_type), intent(inout) :: OBB - integer, intent(out) :: LowestIndex - !-local-variables-------------------- - type(point_type) :: LowestPoint - integer :: i - - LowestPoint = OBB% Points(1) - - do i = 2, OBB% NumOfPoints - if( OBB% Points(i)% coords(2) .lt. LowestPoint% coords(2) ) then - LowestPoint = OBB% Points(i) - elseif( AlmostEqual( OBB% Points(i)% coords(2), LowestPoint% coords(2)) ) then - if( OBB% Points(i)% coords(1) .lt. LowestPoint% coords(1) ) then - LowestPoint = OBB% Points(i) - end if - end if - end do - - LowestIndex = LowestPoint% index - - end subroutine Hull_ComputeExtremePoint -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine orders the nodes according to the angle theta -! ------------------------------------------------ - - subroutine OBB_SortingNodes( this, left, right ) - use StopwatchClass - implicit none - !-arguments-------------------------------------------------------------- - class(OBB_type), intent(inout) :: this - integer, intent(in) :: left, right - !-local-variables-------------------------------------------------------- - integer :: i - -!$omp parallel shared(this,left, right) -!$omp single - call sort( this% Points(:)% theta, this% Points(:)% index, this% Points(:)% coords(1), & - this% Points(:)% coords(2), this% Points(:)% coords(3), left, right ) -!$omp end single -!$omp end parallel - - do i = 1, this% NumOfPoints-1 - if( almostEqual(this% Points(i+1)% theta, this% Points(i)% theta) ) this% Points(i+1)% delete = .true. - end do - - end subroutine OBB_SortingNodes -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine sort the elements of a from the lowest to the grates. b saves the old indeces. -! ------------------------------------------------ - recursive subroutine sort( a, b, coordx, coordy, coordz, left, right ) - - implicit none - !-arguments------------------------------------------------- - real(kind=rp), dimension(:), intent(inout) :: a - integer, dimension(:), intent(inout) :: b - real(kind=rp), dimension(:), intent(inout) :: coordx, coordy, coordz - integer, intent(in) :: left, right - !-local-variables------------------------------------------- - real(kind=rp) :: x, t - integer :: i, j, ind, left_cycle, & - right_cycle - - if( left .ge. right ) return - - x = a( (left + right)/2 ) - - i = left; j = right - - do - do while( a(i) .lt. x ) - i = i+1 - end do - do while( x .lt. a(j) ) - j = j-1 - end do - if( i .ge. j ) exit - t = a(i); a(i) = a(j); a(j) = t - ind = b(i); b(i) = b(j); b(j) = ind - t = coordx(i); coordx(i) = coordx(j); coordx(j) = t - t = coordy(i); coordy(i) = coordy(j); coordy(j) = t - t = coordz(i); coordz(i) = coordz(j); coordz(j) = t - - i = i+1 - j = j-1 - end do - - left_cycle = (i-1)-left - right_cycle = right-(j+1) - -!~ if( left .lt. i-1 ) then -!$omp task shared(a,b,coordx,coordy,coordz,left,i) if(left_cycle > TASK_THRESHOLD) - call sort( a, b, coordx, coordy, coordz, left, i-1 ) -!$omp end task -!~ !$omp taskwait -!~ end if -!~ if( j+1 .lt. right ) then -!$omp task shared(a,b,coordx,coordy,coordz,j,right) if(right_cycle > TASK_THRESHOLD) - call sort( a, b, coordx, coordy, coordz, j+1, right ) -!$omp end task -!$omp taskwait -!~ end if - end subroutine sort -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function computes the Centroid of the points cloud. -! ------------------------------------------------- - - function ComputeCentroid( OBB ) result( CloudCenter ) - - implicit none - !-arguments----------------------------------- - type(OBB_type), intent(in) :: OBB - !-local-variables------------------------------- - real(kind=rp), dimension(NDIM) :: CloudCenter - integer :: i - - CloudCenter = 0.0_RP - - do i = 1, OBB% NumOfPoints - CloudCenter = CloudCenter + OBB% Points(i)% coords - end do - - CloudCenter = CloudCenter/OBB% NumOfPoints - - end function ComputeCentroid -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the covariance matrix of a clouds of points given its center. -! ------------------------------------------------- - - subroutine CovarianceMatrix( OBB, CovMat ) - - implicit none - !-arguments---------------------------------------------- - type(OBB_type), intent(in) :: OBB - real(kind=rp), dimension(NDIM,NDIM), intent(out) :: CovMat - !-local-variables---------------------------------------------- - real(kind=rp), dimension(NDIM) :: d - integer :: i, j, k - - CovMat = 0.0_RP - - do i = 1, OBB% NumOfPoints - d = OBB% Points(i)% coords - OBB% CloudCenter - do k = 1, NDIM; do j = 1, NDIM - CovMat(k,j) = CovMat(k,j) + d(k) * d(j) - end do; end do - end do - - CovMat = CovMat/OBB% NumOfPoints - - end subroutine CovarianceMatrix -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the projection of the points cloud on a plane defined by a normal vector. -! ------------------------------------------------- - - subroutine ProjectPointsOnPlane( OBB ) - use MappedGeometryClass - implicit none - !-arguments---------------------------------------------------------- - type(OBB_type), intent(inout) :: OBB - !-local-variables------------------------------------------------------ - real(kind=rp), dimension(NDIM) :: d - real(kind=rp) :: N_point - integer :: i -! -! Initialization of nMin and nMax, i.e. of the min and max normal distance of the cloud w.r.t -! the projection plane -! ------------------------------------------------------------------------------- - OBB% nMax = -huge(1.0_RP); OBB% nMin = huge(1.0_RP) - - do i = 1, OBB% NumOfPoints - d = OBB% Points(i)% coords - OBB% CloudCenter - N_Point = vdot( d, OBB% MBR% normal ) - OBB% Points(i)% coords = (/ vdot(d, OBB% MBR% t1), vdot(d, OBB% MBR% t2), 0.0_RP /) - OBB% nMax = max(OBB% nMax,N_point) - OBB% nMin = min(OBB% nMin,N_point) - end do - - OBB% nMax = (1.0_RP+SAFETY_FACTOR)*OBB% nMax - OBB% nMin = (1.0_RP+SAFETY_FACTOR)*OBB% nMin - - end subroutine ProjectPointsOnPlane -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the eigenstructure of the OBB. -! ------------------------------------------------- - - subroutine PointsCloudDiagonalization( OBB, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) - - implicit none - !-arguments--------------------------------------------- - type(OBB_type), intent(in) :: OBB - real(kind=rp), intent(out) :: EigenVal - real(kind=rp), dimension(NDIM), intent(out) :: EigenVec1, EigenVec2, EigenVec3 - !-local-variables---------------------------- - real(kind=rp), dimension(NDIM,NDIM) :: CovMat - - call CovarianceMatrix( OBB, CovMat ) - - call ComputeEigenStructure( CovMat, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) - - end subroutine PointsCloudDiagonalization -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the Convex Hull of a set of points. -! The points are ordered according to the value of the x-coord. -! ------------------------------------------------- - - subroutine ConvexHull( Hull, OBB ) - - implicit none - !-arguments------------------------------------------------ - type(Hull_type), intent(inout) :: Hull - type(OBB_type), intent(inout) :: OBB - !-local-variables-------------------------------------------- - type(point_type) ,pointer :: p, p1 - integer :: i, LowestIndex, start - type(PointLinkedList) :: convPoints - -! -! Compute Left most point & set Hull's head -! ----------------------------------------- - call Hull% ComputeExtremePoint( OBB, LowestIndex ) - -! -! Compute the angles -! ------------------ - call OBB% ComputeAngle( LowestIndex ) - -! -! Sorting points according to their angle -! --------------------------------------- - call OBB% SortingNodes(1, OBB% NumOfPoints ) - - convPoints = PointLinkedList() - call convPoints% add( OBB% Points(1) ) - - !Check duplicate - if( almostEqual(OBB% Points(1)% coords(1), OBB% Points(2)% coords(1)) .and. & - almostEqual(OBB% Points(1)% coords(2), OBB% Points(2)% coords(2)) ) OBB% Points(2)% delete = .true. - - do i = 2, OBB% NumOfPoints - if( .not. OBB% Points(i)% delete ) then - call convPoints% add( OBB% Points(i) ) - start = i+1 - exit - end if - end do - - Hull% NumOfPoints = 2 - - p => convPoints% head - p1 => convPoints% head% next - - do i = start, OBB% NumOfPoints - if( OBB% Points(i)% delete ) cycle - do while( RotationType(p, p1, OBB% Points(i) ) .eq. 1 ) - p => p% prev; p1 => p1% prev - call convPoints% RemoveLast() - Hull% NumOfPoints = Hull% NumOfPoints - 1 - end do - call convPoints% add( OBB% Points(i) ) - p1 => convPoints% head% prev; p => p1% prev - Hull% NumOfPoints = Hull% NumOfPoints + 1 - end do - - allocate(Hull% Points(Hull% NumOfPoints)) - - p => convPoints% head - - do i = 1, Hull% NumOfPoints - Hull% Points(i) = p - p => p% next - end do - - call convPoints% destruct() - - end subroutine ConvexHull -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the 2-pi normalized-angle between 2 vectors. -! ------------------------------------------------- - real(kind=rp) function ComputingAngle( a, b ) result( Angle ) - - implicit none - !-arguments------------------------------------ - real(kind=rp), dimension(:), intent(in) :: a, b - !-local-variables------------------------------ - real(kind=rp) :: theta1, theta2 - - theta1 = atan2( a(2), a(1) ) - theta2 = atan2( b(2), b(1) ) - - Angle = theta2 - theta1 - - Angle = mod(Angle+2.0_RP*PI, 2.0_RP*PI) - - end function ComputingAngle -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine counterclockwise-rotates 2D vector. -! ------------------------------------------------- - subroutine RotateVector( RotVec, theta ) - - implicit none - !-arguments------------------------------------------ - real(kind=rp), dimension(:), intent(inout) :: RotVec - real(kind=rp), intent(in) :: theta - !-local-variables------------------------------------ - real(kind=rp), dimension(size(RotVec)) :: TempVec -! -! Temporary vector -! ---------------- - TempVec = RotVec - - RotVec(1) = TempVec(1)*cos(theta) - TempVec(2)*sin(theta) - RotVec(2) = TempVec(1)*sin(theta) + TempVec(2)*cos(theta) - - end subroutine RotateVector -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine the parameter t_s use for defining the position of the point S on a line. -! x_s = x_p + t_s(x_q-x_p) -! y_s = y_p + t_s(y_q-y_p) -! ------------------------------------------------- - function CurvAbscissa( p1, p2, p3 ) result( t ) - - implicit none - !-arguments-------------------------------- - type(point_type), intent(in) :: p1, p2, p3 - !-local-variables-------------------------- - real(kind=rp) :: t - - t = ( p3% coords(1) - p1% coords(1) )*( p2% coords(1) - p1% coords(1) ) + & - ( p3% coords(2) - p1% coords(2) )*( p2% coords(2) - p1% coords(2) ) - - t = t/( POW2(p2% coords(1) - p1% coords(1)) + POW2(p2% coords(2) - p1% coords(2)) ) - - end function CurvAbscissa -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the distance of a point (p3) from a line defined by -! the points p1 and p2 -! ------------------------------------------------- - real(kind=rp) function ComputeWidth( p1, p2, p3 ) result( width ) - - implicit none - !-arguments-------------------------------- - type(point_type), intent(in) :: p1, p2, p3 - !-local-variables-------------------------- - real(kind=rp), dimension(NDIM-1) :: vec - real(kind=rp) :: t -! -! Computing t-values for the point p3 -! -------------------------------- - t = CurvAbscissa( p1, p2, p3 ) - -! -! Position of the projection of p3 point on the line p1-p2 -! ------------------------------------------------ - vec = p1% coords(1:2) + t *( p2% coords(1:2)- p1% coords(1:2) ) - -! -! Computing the distance -! --------------------- - width = norm2( p3% coords(1:2) - vec(1:2) ) - - end function ComputeWidth -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine computes the rotating calipers method. -! ------------------------------------------------- - subroutine RotatingCalipers( Hull, rectWidth, rectLength, rectAngle, rectCenter ) - - implicit none - !-arguments----------------------------------------------------------------- - type(Hull_type), intent(inout) :: Hull - real(kind=rp), dimension(:), intent(out) :: rectCenter - real(kind=rp), intent(out) :: rectWidth, rectLength, rectAngle - !-local-variables------------------------------------------------------------- - real(kind=rp), dimension(NDIM-1) :: Caliper1, Caliper2, v1, v2, PointMin, PointMax - integer, dimension(1) :: loc, MinIndex, MaxIndex - real(kind=rp) :: RotAngle, width, minwidth, theta1, theta2, dtheta - real(kind=rp), dimension(Hull% NumOfPoints) :: x, y - integer :: indexMin1, indexMin2, indexMax1, indexMax2 -! -! Initialization -! ------------ - minwidth = huge(1.0_RP); rectAngle = 0.0_RP; RotAngle = 0.0_RP -! -! Initializing caliper -! ---------------- - Caliper1 = (/ 1.0_RP, 0.0_RP/) - Caliper2 = (/ -1.0_RP, 0.0_RP/) - - MinIndex = minloc(Hull% Points(:)% coords(2)) - MaxIndex = maxloc(Hull% Points(:)% coords(2)) - - indexMin1 = MinIndex(1); indexMax1 = MaxIndex(1) - - do while( RotAngle .lt. PI ) - - indexMin2 = mod(indexMin1, Hull% NumOfPoints) + 1 - indexMax2 = mod(indexMax1, Hull% NumOfPoints) + 1 - -! -! Looping Counterclockwise from y-min point (p1) -! and from y-max point (p2). -! ------------------------------------------- - v1 = Hull% Points(indexMin2)% coords(1:2) - Hull% Points(indexMin1)% coords(1:2) - v2 = Hull% Points(indexMax2)% coords(1:2) - Hull% Points(indexMax1)% coords(1:2) - -! -! Computing the angles between calipers and vectors v1,v2 -! --------------------------------------------------- - theta1 = ComputingAngle( Caliper1, v1 ) - theta2 = ComputingAngle( Caliper2, v2 ) - - dtheta = min(theta1,theta2) - loc = minloc((/ theta1,theta2 /)) - call RotateVector(Caliper1, dtheta) - call RotateVector(Caliper2, dtheta) - - RotAngle = RotAngle + dtheta - - if( loc(1) .eq. 1 ) then - width = ComputeWidth( Hull% Points(indexMin1), Hull% Points(indexMin2), Hull% Points(indexMax1) ) - indexMin1 = mod(indexMin1, Hull% NumOfPoints) + 1 - else - width = ComputeWidth( Hull% Points(indexMax1), Hull% Points(indexMax2), Hull% Points(indexMin1) ) - indexMax1 = mod(indexMax1, Hull% NumOfPoints) + 1 - end if - - if( width .lt. minwidth ) then - minwidth = width - rectAngle = RotAngle - end if - - end do - - rectCenter(1) = sum(Hull% Points(:)% coords(1))/Hull% NumOfPoints - rectCenter(2) = sum(Hull% Points(:)% coords(2))/Hull% NumOfPoints - -! -! Initialization of the extreme points -! --------------------------------------- - PointMax = -huge(1.0_RP); PointMin = huge(1.0_RP) -! -! ClockWise rotation looking for extreme points -! --------------------------------------------- - - x = (Hull% Points(:)% coords(1)-rectCenter(1))*cos(rectAngle) + & - (Hull% Points(:)% coords(2)-rectCenter(2))*sin(rectAngle) - y = -(Hull% Points(:)% coords(1)-rectCenter(1))*sin(rectAngle) + & - (Hull% Points(:)% coords(2)-rectCenter(2))*cos(rectAngle) - - PointMax(1) = maxval(x) - PointMax(2) = maxval(y) - PointMin(1) = minval(x) - PointMin(2) = minval(y) - -! -! Minimum Bounding Rectangle properties -! ------------------------------------- - rectLength = PointMax(1) - PointMin(1); - rectWidth = PointMax(2) - PointMin(2); - - !Safety factor - rectLength = (1.0_RP+SAFETY_FACTOR)*rectLength - rectWidth = (1.0_RP+SAFETY_FACTOR)*rectWidth - - rectCenter = 0.5_RP* (/ PointMax(1) + PointMin(1),PointMax(2) + PointMin(2) /) - - call RotateVector(rectCenter,rectAngle) - - rectCenter(1) = rectCenter(1) + sum(Hull% Points(:)% coords(1))/Hull% NumOfPoints - rectCenter(2) = rectCenter(2) + sum(Hull% Points(:)% coords(2))/Hull% NumOfPoints - - end subroutine RotatingCalipers -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine extrude the minimum bounding rectangle to get the full OBB. -! MBR -> Minimum Bounding Rectangle -! MRB := ( rectWidth, rectLength, rectAngle, rectCenter ) -! ------------------------------------------------- - subroutine ExtrudeMBR( OBB ) - - implicit none - !-arguments------------------------------------------------- - type(OBB_type), intent(inout) :: OBB - !-local-variables------------------------------------------- - integer :: i -! -! Extrusion -! --------- - - do i = 1, 4 - call OBB% ChangeRefFrame((/ OBB% MBR% vertices(1,i), OBB% MBR% vertices(2,i), OBB% nMin /), 'global', OBB% vertices(:,i) ) - call OBB% ChangeRefFrame((/ OBB% MBR% vertices(1,i), OBB% MBR% vertices(2,i), OBB% nMax /), 'global', OBB% vertices(:,i+4) ) - OBB% LocVertices(:,i) = (/ OBB% MBR% vertices(:,i), OBB% nMin /) - OBB% LocVertices(:,i+4) = (/ OBB% MBR% vertices(:,i), OBB% nMax /) - end do - - OBB% LocFrameCenter = OBB% CloudCenter + matmul(OBB% R, (/ OBB% MBR% Center,0.0_RP/)) - - end subroutine ExtrudeMBR -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function check if a point is inside the OBB or not -! ------------------------------------------------- - function OBB_isPointInside( this, coords, coeff ) result( isInsideOBB ) - - implicit none - !-arguments------------------------------------ - class(OBB_type), intent(inout) :: this - real(kind=rp), dimension(:), intent(in) :: coords - real(kind=rp), intent(in) :: coeff - logical :: isInsideOBB - !-local-variables-------------------------------- - real(kind=rp), dimension(NDIM) :: Point - real(kind=rp) :: Multcoeff - - optional :: coeff - - if( present(coeff) ) then - Multcoeff = coeff - else - Multcoeff = 1.0_RP - end if - - call this% ChangeRefFrame(coords, 'local', Point) - - isInsideOBB = .false. - - !check x y z - if( isInsideBox(Point, Multcoeff*this% LocVertices) ) isInsideOBB = .true. - - end function OBB_isPointInside - - - subroutine OBB_ChangeObjsRefFrame( this, objs ) - - implicit none - !-arguments--------------------------------------------- - class(OBB_type), intent(inout) :: this - type(Object_type), dimension(:), intent(inout) :: objs - !-local-variables--------------------------------------- - integer :: i, j -!$omp parallel shared(this,objs,i) -!$omp do schedule(runtime) private(j) - do i = 1, size(objs) - do j = 1, size(objs(i)% vertices) - call this% ChangeRefFrame( objs(i)% vertices(j)% coords, 'local', objs(i)% vertices(j)% coords ) - end do - end do -!$omp end do -!$omp end parallel - - end subroutine OBB_ChangeObjsRefFrame - - - subroutine OBB_STL_rotate( this, stl ) - - implicit none - !-arguments----------------------------- - class(OBB_type), intent(inout):: this - type(STLfile), intent(inout):: stl - !-local-variables----------------------- - real(kind=RP) :: meanCoords(NDIM), meanCoordsNew(NDIM), shiftVec(NDIM) - integer :: i, j, NumOfPoints - - meanCoords = 0.0_RP; meanCoordsNew = 0.0_RP; NumOfPoints = 0 - -!$omp parallel shared(this,stl,meanCoords,meanCoordsNew,NumOfPoints,i) -!$omp do schedule(runtime) private(j) - do i = 1, stl% NumOfObjs - do j = 1, size(stl% ObjectsList(i)% vertices) - call this% ChangeRefFrame( stl% ObjectsList(i)% vertices(j)% coords, 'global', & - stl% ObjectsList(i)% vertices(j)% coords ) -!$omp critical - meanCoords = meanCoords + stl% ObjectsList(i)% vertices(j)% coords - NumOfPoints = NumOfPoints + 1 -!$omp end critical - stl% ObjectsList(i)% vertices(j)% coords = matmul( stl% rotationMatrix, stl% ObjectsList(i)% vertices(j)% coords ) -!$omp critical - meanCoordsNew = meanCoordsNew + stl% ObjectsList(i)% vertices(j)% coords -!$omp end critical - end do - end do -!$omp end do -!$omp end parallel - - meanCoords = meanCoords/NumOfPoints; meanCoordsNew = meanCoordsNew/NumOfPoints - - shiftVec = meanCoordsNew - meanCoords -!$omp parallel shared(i,shiftVec) -!$omp do schedule(runtime) private(j) - do i = 1, stl% NumOfObjs - do j = 1, size(stl% ObjectsList(j)% vertices) - stl% ObjectsList(i)% vertices(j)% coords = stl% ObjectsList(i)% vertices(j)% coords - shiftVec - end do - end do -!$omp end do -!$omp end parallel - end subroutine OBB_STL_rotate - - subroutine OBB_STL_translate( this, stl ) - - implicit none - !-arguments----------------------------- - class(OBB_type), intent(inout):: this - type(STLfile), intent(inout):: stl - !-local-variables----------------------- - real(kind=RP) :: meanCoords(NDIM) - integer :: i, j, NumOfPoints - - meanCoords = 0.0_RP; NumOfPoints = 0 - -!$omp parallel shared(this,stl,meanCoords,NumOfPoints,i) -!$omp do schedule(runtime) private(j) - do i = 1, stl% NumOfObjs - do j = 1, size(stl% ObjectsList(i)% vertices) - call this% ChangeRefFrame( stl% ObjectsList(i)% vertices(j)% coords, 'global', & - stl% ObjectsList(i)% vertices(j)% coords ) - stl% ObjectsList(i)% vertices(j)% coords(stl% motionAxis) = stl% ObjectsList(i)% vertices(j)% coords(stl% motionAxis) + stl% ds -!$omp critical - meanCoords = meanCoords + stl% ObjectsList(i)% vertices(j)% coords - NumOfPoints = NumOfPoints + 1 -!$omp end critical - end do - end do -!$omp end do -!$omp end parallel - - end subroutine OBB_STL_translate - -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This function check if a point is inside a generic box -! ------------------------------------------------- - - logical function isInsideBox( Point, vertices, equal ) result( isInside ) - - implicit none - - real(kind=rp), dimension(:), intent(in) :: Point - real(kind=rp), dimension(:,:), intent(in) :: vertices - logical, intent(in) :: equal - - optional :: equal - - isInside = .false. - - if( present(equal) .and. .not. equal ) then - if( (Point(1) > vertices(1,1) .and. Point(1) < vertices(1,7)) .and. & - (Point(2) > vertices(2,1) .and. Point(2) < vertices(2,7)) .and. & - (Point(3) > vertices(3,1) .and. Point(3) < vertices(3,7)) ) then - isInside = .true. - end if - return - end if - - if( (Point(1) >= vertices(1,1) .and. Point(1) <= vertices(1,7)) .and. & - (Point(2) >= vertices(2,1) .and. Point(2) <= vertices(2,7)) .and. & - (Point(3) >= vertices(3,1) .and. Point(3) <= vertices(3,7)) ) isInside = .true. - - end function isInsideBox - - - - logical function OBB_isInsidePolygon( OBB, Point ) result( isInside ) - use MappedGeometryClass - implicit none - - class(OBB_type), intent(inout) :: OBB - real(kind=rp), dimension(:), intent(in) :: Point - !-local-variables------------------------------------------ - real(kind=rp) :: d(NDIM), coords(NDIM), v1(NDIM-1), v2(NDIM-1), & - v3(NDIM-1), v4(NDIM-1), length, N_Point - logical :: Intersection - integer :: NumOfIntersections, i - real(kind=rp), parameter :: coeff = 1.15_RP - - d = Point - OBB% CloudCenter - N_Point = vdot( d, OBB% MBR% normal ) - coords = (/ vdot(d, OBB% MBR% t1), vdot(d, OBB% MBR% t2), 0.0_RP /) - - length = maxval(abs(OBB% HullPoints(:)% coords(1))) - - v1 = coords(1:2) - v2 = coords(1:2); v2(1) = v2(1) + 1000_RP*length - - NumOfIntersections = 0 - - do i = 1, size(OBB% HullPoints)-1 - - v3 = OBB% HullPoints(i+1)% coords(1:NDIM-1) - v4 = OBB% HullPoints(i)% coords(1:NDIM-1) - - Intersection = TwoD_RayTracing( v1, v2, coeff*v3, coeff*v4 ) - - if( Intersection ) NumOfIntersections = NumOfIntersections + 1 - - end do - - if( mod(NumOfIntersections,2) .eq. 0 ) then - isInside = .false. - else - isInside = .true. - end if - - if( N_Point .gt. coeff*OBB% nMax .or. N_Point .lt. coeff*OBB% nMin ) then - isInside = .false. - end if - - end function OBB_isInsidePolygon - - - logical function TwoD_RayTracing( v1, v2, v3, v4 ) result( Intersection ) - - implicit none - !-arguments-------------------------------------------------------- - real(kind=rp), dimension(NDIM-1), intent(in) :: v1, v2, v3, v4 - !-local-varirables------------------------------------------------ - real(kind=rp) :: a1, a2, b1, b2, c1, c2, d1, d2 - - Intersection = .false. - - a1 = v2(2) - v1(2) - b1 = v1(1) - v2(1) - c1 = (v2(1)*v1(2)) - (v1(1)*v2(2)) - - d1 = a1*v3(1) + b1*v3(2) + c1 - d2 = a1*v4(1) + b1*v4(2) + c1 - - if( d1 * d2 > 0.0_RP ) then - Intersection = .false. - return - end if - - a2 = v4(2) - v3(2) - b2 = v3(1) - v4(1) - c2 = (v4(1)*v3(2)) - (v3(1)*v4(2)) - - d1 = a2*v1(1) + b2*v1(2) + c2 - d2 = a2*v2(1) + b2*v2(2) + c2 - - if( d1 * d2 > 0.0_RP ) then - Intersection = .false. - return - end if - - if( AlmostEqual( ((a1*b2) - (a2*b1)) ,0.0_RP) )then - Intersection = .false. - return - end if - - Intersection = .true. - - end function TwoD_RayTracing - -end module OrientedBoundingBox +#include "Includes.h" +module OrientedBoundingBox + + use SMConstants + use Utilities + use TessellationTypes + + implicit none + + integer, parameter :: TASK_THRESHOLD = 10000, LOCAL = 0, GLOBAL =1 + real(kind=RP), parameter :: SAFETY_FACTOR = 0.001_RP + + public :: OBB, sortReal, ElementOBBintersect, LOCAL, GLOBAL + +! +! ************************************************** +! Main type for the Convex Hull computations +! ************************************************** + + type Hull_type + + type(point_type), dimension(:), allocatable :: Points + integer :: NumOfPoints + + end type +! +! ************************************************** +! Main type for a rectangle +! ************************************************** + type rectangle + + real(kind=rp), dimension(2,4) :: Vertices + real(kind=rp), dimension(2) :: Center + real(kind=rp), dimension(NDIM) :: normal, t1, t2 + real(kind=rp) :: Length, Width, Angle + + contains + procedure :: ComputeVertices + + end type +! +! ************************************************** +! Main type for the Oriented Bounding Box computations +! ************************************************** + type OBB_type + + type(point_type), dimension(:), allocatable :: Points, HullPoints + type(rectangle) :: MBR + real(kind=rp), dimension(NDIM,8) :: vertices, LocVertices + real(kind=rp), dimension(NDIM,NDIM) :: R, invR + real(kind=rp), dimension(NDIM) :: CloudCenter, LocFrameCenter + real(kind=rp) :: nMin, nMax + integer :: NumOfPoints, center, left, right + character(len=LINE_LENGTH) :: filename + logical :: verbose + + contains + procedure :: construct => OBB_construct + procedure :: ReadStorePoints => OBB_ReadStorePoints + procedure :: ComputeAngle => OBB_ComputeAngle + procedure :: SortingNodes => OBB_SortingNodes + procedure :: isPointInside => OBB_isPointInside + procedure :: ChangeObjsRefFrame => OBB_ChangeObjsRefFrame + procedure :: STL_rotate => OBB_STL_rotate + procedure :: STL_translate => OBB_STL_translate + procedure :: ChangeRefFrame + procedure :: ComputeRotationMatrix + procedure :: plot => OBB_plot + end type + + type(OBB_type), allocatable :: OBB(:) + +contains +! +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the determinant of a 3x3 Matrix. +! ------------------------------------------------- + + function Determinant( Mat ) result( det ) + + implicit none + !-arguments----------------------------- + real(kind=rp), dimension(:,:), intent(in) :: Mat + !-local-variables------------------------- + real(kind=rp) :: det + + det = Mat(1,1)*( Mat(2,2)*Mat(3,3) - Mat(2,3)*Mat(3,2) ) - & + Mat(1,2)*( Mat(2,1)*Mat(3,3) - Mat(2,3)*Mat(3,1) ) + & + Mat(1,3)*( Mat(2,1)*Mat(3,2) - Mat(2,2)*Mat(3,1) ) + + end function Determinant +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the eigenvalues & eigenvectors of a 3x3 matrix. +! For details, see https://www.geometrictools.com/Documentation/RobustEigenSymmetric3x3.pdf . +! ------------------------------------------------- + + subroutine ComputeEigenStructure( A, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) + use MappedGeometryClass + implicit none + !-arguments---------------------------------------------- + real(kind=rp), dimension(:,:), intent(in) :: A + real(kind=rp), intent(out) :: EigenVal + real(kind=rp), dimension(NDIM), intent(out) :: EigenVec1, EigenVec2, EigenVec3 + !-local-variables------------------------------------------ + real(kind=rp), dimension(NDIM,NDIM) :: Ident, B, EigenVecs + real(kind=rp), dimension(NDIM) :: EigenVals + real(kind=rp) :: p1, p2, p, q, r, phi + integer :: i + integer, dimension(1) :: min_loc, max_loc + + p1 = POW2( A(1,2) ) + POW2( A(1,3) ) + POW2( A(2,3) ) + +! +! Diagonal Matrix +! -------------- + if( AlmostEqual(p1,0.0_RP) ) then + EigenVals(1) = A(1,1) + EigenVals(2) = A(2,2) + EigenVals(3) = A(3,3) + min_loc = minloc(EigenVals) + max_loc = maxloc(EigenVals) + EigenVal = EigenVals(min_loc(1)) + EigenVec1 = 0.0_RP; EigenVec2 = 0.0_RP; EigenVec3 = 0.0_RP + EigenVec3(min_loc(1)) = 1.0_RP + EigenVec1(max_loc(1)) = 1.0_RP + EigenVals(min_loc(1)) = huge(1.0_RP) + min_loc = minloc(EigenVals) + EigenVec2(min_loc(1)) = 1.0_RP + return + end if + + q = 0._RP; Ident = 0._RP + + do i = 1, NDIM + q = q + A(i,i) + Ident(i,i) = 1.0_RP + end do + + q = q/3.0_RP + + p2 = POW2( A(1,1) - q ) + POW2( A(2,2) - q ) + POW2( A(3,3) - q ) + 2.0_RP*p1 + + p = sqrt(p2/6.0_RP) !sqrt{ [tr(A-qI)^2]/6 } +! +! Matrix B has the same eigenstraucture of A since it's translated by a factor = q +! ---------------------------------------------------------------------- + B = ( 1.0_RP/p ) * ( A - q * Ident ) + + r = Determinant(B)/2.0_RP + + if( r <= -1.0_RP ) then + phi = PI/3.0_RP + elseif( r >= 1 ) then + phi = 0.0_RP + else + phi = acos(r)/3.0_RP + end if +! +! Ordered eigen values \lambda_1 > \lambda_2 > \lambda_3 +! + EigenVals(1) = q + 2.0_RP * p * cos(phi) + EigenVals(3) = q + 2.0_RP * p * cos(phi + 2.0_RP/3.0_RP*PI ) + EigenVals(2) = 3.0_RP * q - EigenVals(1) - Eigenvals(3) + + ! (A - \lambda_i I)· v_i = 0 ==> v_i*· (A - \lambda_i I)e_j = 0 with e_j unit basis vector + ! v_i = (A^j - \lambda_i e_j) x (A^k - \lambda_i e_k) + ! v_j = (A^i - \lambda_j e_i) x (A^k - \lambda_j e_k) + ! v_k = v_i x v_j + + call vcross( A(:,2)-EigenVals(1)*(/ 0.0_RP,1.0_RP,0.0_RP /), & + A(:,3)-EigenVals(1)*(/ 0.0_RP,0.0_RP,1.0_RP /), & + EigenVecs(:,1) ) + call vcross( A(:,1)-EigenVals(2)*(/ 1.0_RP,0.0_RP,0.0_RP /), & + A(:,3)-EigenVals(2)*(/ 0.0_RP,0.0_RP,1.0_RP /), & + EigenVecs(:,2) ) + call vcross( EigenVecs(:,1),EigenVecs(:,2), EigenVecs(:,3)) + + + EigenVecs(:,1) = EigenVecs(:,1)/norm2(EigenVecs(:,1)) + EigenVecs(:,2) = EigenVecs(:,2)/norm2(EigenVecs(:,2)) + EigenVecs(:,3) = EigenVecs(:,3)/norm2(EigenVecs(:,3)) + +! +! Saving the last eigenvalue +! ------------------------ + EigenVal = EigenVals(3) + +! +! Saving the Eigenvectors +! ------------------------ + EigenVec1 = EigenVecs(:,1); EigenVec2 = EigenVecs(:,2); EigenVec3 = EigenVecs(:,3) + + end subroutine ComputeEigenStructure +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------------------------------- +! Subroutine that computes the vertices of a rectangle +! ------------------------------------------------------------------------------------------- + subroutine ComputeVertices( this ) + + implicit none + !-arguments---------------------- + class(rectangle), intent(inout) :: this + + this% vertices(:,1) = 0.5_RP*(/ -this% Length, -this% Width /) + this% vertices(:,2) = 0.5_RP*(/ this% Length, -this% Width /) + this% vertices(:,3) = 0.5_RP*(/ this% Length, this% Width /) + this% vertices(:,4) = 0.5_RP*(/ -this% Length, this% Width /) + + end subroutine ComputeVertices +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------------------------------- +! Subroutine for reading the nodes coming from a .dat file. In the future it will a .stl/.obj file +! ------------------------------------------------------------------------------------------- + subroutine OBB_ReadStorePoints( this, stl ) + + implicit none + !-arguments---------------------- + class(OBB_type), intent(inout) :: this + type(STLfile), intent(in) :: stl + !-local.variables------------------- + integer :: i, j, n + + this% NumOfPoints = 3*stl% NumOfObjs + + allocate(this% Points(this% NumOfPoints)) + + n = 0 + + associate( Objs => stl% ObjectsList ) + + do i = 1, stl% NumOfObjs + do j = 1, Objs(i)% NumOfVertices + n = n + 1 + this% Points(n)% coords = Objs(i)% vertices(j)% coords + this% Points(n)% index = n + end do + end do + + end associate + + end subroutine OBB_ReadStorePoints +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------------------------------- +! Subroutine for plotting the OBB +! ------------------------------------------------------------------------------------------- + subroutine OBB_plot( this ) + use PhysicsStorage + use MPI_Process_Info + implicit none + !-arguments-------------------------- + class(OBB_type), intent(inout) :: this + !-local-variables---------------------- + integer :: i, funit + + if( .not. MPI_Process% isRoot ) return + + funit = UnusedUnit() + + open(funit,file='IBM/OrientedBoundingBox_'//trim(this% filename)//'.tec', status='unknown') + + write(funit,"(a28)") 'TITLE = "OrientedBoudingBox"' + write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' + write(funit,"(a69)") 'ZONE NODES=8, ELEMENTS = 6, DATAPACKING=POINT, ZONETYPE=FETETRAHEDRON' + + do i = 1, 8 + write(funit,'(3E13.5)') Lref*this% vertices(1,i), Lref*this% vertices(2,i), Lref*this% vertices(3,i) + end do + + write(funit,'(4i2)') 1, 2, 3, 4 + write(funit,'(4i2)') 1, 5, 8, 4 + write(funit,'(4i2)') 5, 6, 7, 8 + write(funit,'(4i2)') 2, 3, 7, 6 + write(funit,'(4i2)') 4, 8, 7, 3 + write(funit,'(4i2)') 1, 2, 6, 5 + + close(unit=funit) + + end subroutine OBB_plot + + subroutine ChangeRefFrame(this, v, FRAME, vNew) + + implicit none + !-arguments---------------------------------------------------- + class(OBB_type), intent(inout) :: this + real(kind=rp), dimension(:), intent(in) :: v + integer, intent(in) :: FRAME + real(kind=rp), dimension(NDIM), intent(out) :: vNew + !-local-variables---------------------------------------------- + real(kind=rp), dimension(NDIM) :: b + real(kind=rp), dimension(NDIM,NDIM) :: T, invT + + T = 0.0_RP + T(NDIM,NDIM) = 1.0_RP + T(1,1) = cos(this% MBR% Angle); T(2,2) = T(1,1) + T(1,2) = sin(this% MBR% Angle); T(2,1) = -T(1,2) + + invT(:,1) = T(1,:) + invT(:,2) = T(2,:) + invT(:,3) = T(3,:) + + select case( FRAME ) + + case(LOCAL) + +!~ b = matmul( this% invR,(v - this% CloudCenter)) +!~ b(1:2) = b(1:2) - this% MBR% Center +!~ vNew = matmul(invR,b) + b = matmul( this% R,(v - this% CloudCenter)) + b(1:2) = b(1:2) - this% MBR% Center + vNew = matmul(T,b) + + case(GLOBAL) + +!~ b = matmul(R,v) +!~ b(1:2) = b(1:2) + this% MBR% center +!~ vNew = this% CloudCenter + matmul(this% R,b) + b = matmul(invT,v) + b(1:2) = b(1:2) + this% MBR% center + vNew = this% CloudCenter + matmul(this% invR,b) + + end select + + end subroutine ChangeRefFrame +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes a rotation Matrix assuming a starting orthonormal +! base (1,0,0);(0,1,0);(0,0,1) and the final orthonormal one u, v, w +! ------------------------------------------------- + subroutine ComputeRotationMatrix( this, u, v, w ) + + implicit none + !-arguments------------------------------------------------ + class(OBB_type), intent(inout) :: this + real(kind=rp), dimension(NDIM), intent(in) :: u, v, w + + this% R(1,:) = (/ u(1), u(2), u(3) /) + this% R(2,:) = (/ v(1), v(2), v(3) /) + this% R(3,:) = (/ w(1), w(2), w(3) /) + + this% invR(:,1) = this% R(1,:) + this% invR(:,2) = this% R(2,:) + this% invR(:,3) = this% R(3,:) + + end subroutine ComputeRotationMatrix +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the Oriented Bounding Box. +! ------------------------------------------------- + subroutine OBB_construct( this, stl, isPlot, AAB ) + + implicit none + !-arguments----------------------------------- + class(OBB_type), intent(inout) :: this + type(STLfile), intent(in) :: stl + logical, intent(in) :: isPlot, AAB + !-local-variables----------------------------- + type(Hull_type) :: Hull + real(kind=rp) :: EigenVal + integer :: i +! +! Reading the data +! --------------- + call this% ReadStorePoints( stl ) +! +! Computing center of the points cloud +! --------------------------------- + this% CloudCenter = ComputeCentroid( this ) + + if( AAB ) then + this% MBR% t1 = (/ 1.0_RP, 0.0_RP, 0.0_RP /) + this% MBR% t2 = (/ 0.0_RP, 1.0_RP, 0.0_RP /) + this% MBR% normal = (/ 0.0_RP, 0.0_RP, 1.0_RP /) + else +! +! Diagonalization of the cloud +! ------------------------- + call PointsCloudDiagonalization( this, EigenVal, this% MBR% t1, this% MBR% t2, this% MBR% normal ) + end if +! +! Computing rotation matrix +! ------------------------ + call this% ComputeRotationMatrix( this% MBR% t1, this% MBR% t2, this% MBR% normal ) + +! +! Point projection +! --------------- + call ProjectPointsOnPlane( this ) + +! +! Computing convex hull +! --------------------- + call ConvexHull( Hull, this ) + +! +! Minimum Bounding Rectangle +! --------------------------- + call RotatingCalipers( Hull, this% MBR% Width, this% MBR% Length, this% MBR% Angle, this% MBR% Center, AAB ) + +! +! Setting vertices of the MBR +! ----------------------------- + call this% MBR% ComputeVertices() + +! +! Extrusion +! --------- + call ExtrudeMBR( this ) + + if( isPlot ) call this% plot() + + if(allocated(this% HullPoints)) deallocate(this% HullPoints) + allocate( this% HullPoints(Hull% NumOfPoints) ) + + do i = 1, Hull% NumOfPoints + this% HullPoints(i) = Hull% Points(i) + end do + + deallocate(this% Points, Hull% Points) + + end subroutine OBB_construct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This function computes the orientation of the rotation of 2D points. +! Rotation := 1 -> Clockwise +! Rotation := 2 -> Counterclockwise +! Rotation := 0 -> Aligned +! ------------------------------------------------- + + integer function RotationType( Point1, Point2, Point3 ) result( Rotation ) + + implicit none + !-arguments----------------------------------- + type(point_type), intent(in) :: Point1, Point2, Point3 + !-local-variables------------------------------- + real(kind=rp), dimension(NDIM-1) :: b, c + real(kind=rp) :: angle + + b = Point3% coords(1:2) - Point2% coords(1:2); c = Point2% coords(1:2) - Point1% coords(1:2) + + angle = b(1)*c(2) - b(2)*c(1) + + if( AlmostEqual(angle,0.0_RP) ) then + Rotation = 0 + elseif( angle .gt. 0.0_RP ) then + Rotation = 1 + else + Rotation = 2 + end if + + end function RotationType +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------- +! This function returns the index of the left most point of a cloud. +! ------------------------------------------------------------------- + + subroutine OBB_ComputeAngle( this, LowestIndex ) + + implicit none + !-arguments------------------------ + class(OBB_type), intent(inout) :: this + integer, intent(in) :: LowestIndex + !-local-variables-------------------- + real(kind=rp), dimension(NDIM) :: v + integer :: i + +!$omp parallel shared(this, LowestIndex,i) +!$omp do schedule(runtime) private(v) + do i = 1, this% NumOfPoints + if( i .eq. LowestIndex ) then + this% Points(i)% theta = -2.0_RP + cycle + end if + v = this% Points(i)% coords-this% Points(LowestIndex)% coords + if( almostEqual(norm2(v(1:2)),0.0_RP) ) then + this% Points(i)% theta = -1.0_RP + cycle + end if + this% Points(i)% theta = acos(v(1)/norm2(v(1:2))) + end do +!$omp end do +!$omp end parallel + + end subroutine OBB_ComputeAngle +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------------------------ +! This function returns the index of the left most point of a cloud. +! ------------------------------------------------------------------ + + subroutine ComputeHullExtremePoint( OBB, LowestIndex ) + + implicit none + !-arguments------------------------ + class(OBB_type), intent(inout) :: OBB + integer, intent(out) :: LowestIndex + !-local-variables-------------------- + type(point_type) :: LowestPoint + integer :: i + + LowestPoint = OBB% Points(1) + + do i = 2, OBB% NumOfPoints + if( OBB% Points(i)% coords(2) .lt. LowestPoint% coords(2) ) then + LowestPoint = OBB% Points(i) + elseif( AlmostEqual( OBB% Points(i)% coords(2), LowestPoint% coords(2)) ) then + if( OBB% Points(i)% coords(1) .lt. LowestPoint% coords(1) ) then + LowestPoint = OBB% Points(i) + end if + end if + end do + + LowestIndex = LowestPoint% index + + end subroutine ComputeHullExtremePoint +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine orders the nodes according to the angle theta +! ------------------------------------------------ + + subroutine OBB_SortingNodes( this, left, right ) + use StopwatchClass + implicit none + !-arguments-------------------------------------------------------------- + class(OBB_type), intent(inout) :: this + integer, intent(in) :: left, right + !-local-variables-------------------------------------------------------- + integer :: i + +!$omp parallel shared(this,left, right) +!$omp single + call sort( this% Points(:)% theta, this% Points(:)% index, this% Points(:)% coords(1), & + this% Points(:)% coords(2), this% Points(:)% coords(3), left, right ) +!$omp end single +!$omp end parallel + + do i = 1, this% NumOfPoints-1 + if( almostEqual(this% Points(i+1)% theta, this% Points(i)% theta) ) this% Points(i+1)% delete = .true. + end do + + end subroutine OBB_SortingNodes +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine sort the elements of a from the lowest to the grates. b saves the old indeces. +! ------------------------------------------------ + recursive subroutine sort( a, b, coordx, coordy, coordz, left, right ) + + implicit none + !-arguments------------------------------------------------- + real(kind=rp), dimension(:), intent(inout) :: a + integer, dimension(:), intent(inout) :: b + real(kind=rp), dimension(:), intent(inout) :: coordx, coordy, coordz + integer, intent(in) :: left, right + !-local-variables------------------------------------------- + real(kind=rp) :: x, t + integer :: i, j, ind, left_cycle, & + right_cycle + + if( left .ge. right ) return + + x = a( (left + right)/2 ) + + i = left; j = right + + do + do while( a(i) .lt. x ) + i = i+1 + end do + do while( x .lt. a(j) ) + j = j-1 + end do + if( i .ge. j ) exit + t = a(i); a(i) = a(j); a(j) = t + ind = b(i); b(i) = b(j); b(j) = ind + t = coordx(i); coordx(i) = coordx(j); coordx(j) = t + t = coordy(i); coordy(i) = coordy(j); coordy(j) = t + t = coordz(i); coordz(i) = coordz(j); coordz(j) = t + + i = i+1 + j = j-1 + end do + + left_cycle = (i-1)-left + right_cycle = right-(j+1) +!$omp task shared(a,b,coordx,coordy,coordz,left,i) if(left_cycle > TASK_THRESHOLD) + call sort( a, b, coordx, coordy, coordz, left, i-1 ) +!$omp end task + +!$omp task shared(a,b,coordx,coordy,coordz,j,right) if(right_cycle > TASK_THRESHOLD) + call sort( a, b, coordx, coordy, coordz, j+1, right ) +!$omp end task +!$omp taskwait + end subroutine sort +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine sort the elements of a from the lowest to the grates. b saves the old indeces. +! ------------------------------------------------ + recursive subroutine sortReal(a, left, right) + + implicit none + !-arguments------------------------------------------------- + real(kind=rp), dimension(:), intent(inout) :: a + integer, intent(in) :: left, right + !-local-variables------------------------------------------- + real(kind=rp) :: x, t + integer :: i, j, left_cycle, right_cycle + + if( left .ge. right ) return + + x = a( (left + right)/2 ) + + i = left; j = right + + do + do while( a(i) .lt. x ) + i = i+1 + end do + do while( x .lt. a(j) ) + j = j-1 + end do + if( i .ge. j ) exit + t = a(i); a(i) = a(j); a(j) = t + i = i+1 + j = j-1 + end do + + left_cycle = (i-1)-left + right_cycle = right-(j+1) + +!$omp task shared(a,left,i) if(left_cycle > TASK_THRESHOLD) + call sortReal( a, left, i-1 ) +!$omp end task + +!$omp task shared(a,j,right) if(right_cycle > TASK_THRESHOLD) + call sortReal( a, j+1, right ) +!$omp end task +!$omp taskwait + + end subroutine sortReal + +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This function computes the Centroid of the points cloud. +! ------------------------------------------------- + + function ComputeCentroid( OBB ) result( CloudCenter ) + + implicit none + !-arguments----------------------------------- + type(OBB_type), intent(in) :: OBB + !-local-variables------------------------------- + real(kind=rp), dimension(NDIM) :: CloudCenter + integer :: i + + CloudCenter = 0.0_RP + + do i = 1, OBB% NumOfPoints + CloudCenter = CloudCenter + OBB% Points(i)% coords + end do + + CloudCenter = CloudCenter/OBB% NumOfPoints + + end function ComputeCentroid +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the covariance matrix of a clouds of points given its center. +! ------------------------------------------------- + + subroutine CovarianceMatrix( OBB, CovMat ) + + implicit none + !-arguments---------------------------------------------- + type(OBB_type), intent(in) :: OBB + real(kind=rp), dimension(NDIM,NDIM), intent(out) :: CovMat + !-local-variables---------------------------------------------- + real(kind=rp), dimension(NDIM) :: d + integer :: i, j, k + + CovMat = 0.0_RP + + do i = 1, OBB% NumOfPoints + d = OBB% Points(i)% coords - OBB% CloudCenter + do k = 1, NDIM; do j = 1, NDIM + CovMat(k,j) = CovMat(k,j) + d(k) * d(j) + end do; end do + end do + + CovMat = CovMat/OBB% NumOfPoints + + end subroutine CovarianceMatrix +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the projection of the points cloud on a plane defined by a normal vector. +! ------------------------------------------------- + + subroutine ProjectPointsOnPlane( OBB ) + use MappedGeometryClass + implicit none + !-arguments---------------------------------------------------------- + type(OBB_type), intent(inout) :: OBB + !-local-variables------------------------------------------------------ + real(kind=rp), dimension(NDIM) :: d + real(kind=rp) :: N_point + integer :: i +! +! Initialization of nMin and nMax, i.e. of the min and max normal distance of the cloud w.r.t +! the projection plane +! ------------------------------------------------------------------------------- + OBB% nMax = -huge(1.0_RP); OBB% nMin = huge(1.0_RP) + + do i = 1, OBB% NumOfPoints + d = OBB% Points(i)% coords - OBB% CloudCenter + N_Point = vdot( d, OBB% MBR% normal ) + OBB% Points(i)% coords = (/ vdot(d, OBB% MBR% t1), vdot(d, OBB% MBR% t2), 0.0_RP /) + OBB% nMax = max(OBB% nMax,N_point) + OBB% nMin = min(OBB% nMin,N_point) + end do + + OBB% nMax = (1.0_RP+SAFETY_FACTOR)*OBB% nMax + OBB% nMin = (1.0_RP+SAFETY_FACTOR)*OBB% nMin + + end subroutine ProjectPointsOnPlane +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the eigenstructure of the OBB. +! ------------------------------------------------- + + subroutine PointsCloudDiagonalization( OBB, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) + + implicit none + !-arguments--------------------------------------------- + type(OBB_type), intent(in) :: OBB + real(kind=rp), intent(out) :: EigenVal + real(kind=rp), dimension(NDIM), intent(out) :: EigenVec1, EigenVec2, EigenVec3 + !-local-variables---------------------------- + real(kind=rp), dimension(NDIM,NDIM) :: CovMat + + call CovarianceMatrix( OBB, CovMat ) + + call ComputeEigenStructure( CovMat, EigenVal, EigenVec1, EigenVec2, EigenVec3 ) + + end subroutine PointsCloudDiagonalization +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the Convex Hull of a set of points. +! The points are ordered according to the value of the x-coord. +! ------------------------------------------------- + + subroutine ConvexHull( Hull, OBB ) + + implicit none + !-arguments------------------------------------------------ + type(Hull_type), intent(inout) :: Hull + type(OBB_type), intent(inout) :: OBB + !-local-variables-------------------------------------------- + type(point_type) ,pointer :: p, p1 + integer :: i, LowestIndex, start + type(PointLinkedList) :: convPoints +! +! Compute Left most point & set Hull's head +! ----------------------------------------- + call ComputeHullExtremePoint( OBB, LowestIndex ) + +! +! Compute the angles +! ------------------ + call OBB% ComputeAngle( LowestIndex ) + +! +! Sorting points according to their angle +! --------------------------------------- + call OBB% SortingNodes(1, OBB% NumOfPoints ) + + convPoints = PointLinkedList() + call convPoints% add( OBB% Points(1) ) + + !Check duplicate + if( almostEqual(OBB% Points(1)% coords(1), OBB% Points(2)% coords(1)) .and. & + almostEqual(OBB% Points(1)% coords(2), OBB% Points(2)% coords(2)) ) OBB% Points(2)% delete = .true. + + do i = 2, OBB% NumOfPoints + if( .not. OBB% Points(i)% delete ) then + call convPoints% add( OBB% Points(i) ) + start = i+1 + exit + end if + end do + + Hull% NumOfPoints = 2 + + p => convPoints% head + p1 => convPoints% head% next + + do i = start, OBB% NumOfPoints + if( OBB% Points(i)% delete ) cycle + do while( RotationType(p, p1, OBB% Points(i) ) .eq. 1 ) + p => p% prev; p1 => p1% prev + call convPoints% RemoveLast() + Hull% NumOfPoints = Hull% NumOfPoints - 1 + end do + call convPoints% add( OBB% Points(i) ) + p1 => convPoints% head% prev; p => p1% prev + Hull% NumOfPoints = Hull% NumOfPoints + 1 + end do + + allocate(Hull% Points(Hull% NumOfPoints)) + + p => convPoints% head + + do i = 1, Hull% NumOfPoints + Hull% Points(i) = p + p => p% next + end do + + call convPoints% destruct() + + end subroutine ConvexHull +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the 2-pi normalized-angle between 2 vectors. +! ------------------------------------------------- + real(kind=rp) function ComputingAngle( a, b ) result( Angle ) + + implicit none + !-arguments------------------------------------ + real(kind=rp), dimension(:), intent(in) :: a, b + !-local-variables------------------------------ + real(kind=rp) :: theta1, theta2 + + theta1 = atan2( a(2), a(1) ) + theta2 = atan2( b(2), b(1) ) + + Angle = theta2 - theta1 + + Angle = mod(Angle+2.0_RP*PI, 2.0_RP*PI) + + end function ComputingAngle +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine counterclockwise-rotates 2D vector. +! ------------------------------------------------- + subroutine RotateVector( RotVec, theta ) + + implicit none + !-arguments------------------------------------------ + real(kind=rp), dimension(:), intent(inout) :: RotVec + real(kind=rp), intent(in) :: theta + !-local-variables------------------------------------ + real(kind=rp), dimension(size(RotVec)) :: TempVec +! +! Temporary vector +! ---------------- + TempVec = RotVec + + RotVec(1) = TempVec(1)*cos(theta) - TempVec(2)*sin(theta) + RotVec(2) = TempVec(1)*sin(theta) + TempVec(2)*cos(theta) + + end subroutine RotateVector +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine the parameter t_s use for defining the position of the point S on a line. +! x_s = x_p + t_s(x_q-x_p) +! y_s = y_p + t_s(y_q-y_p) +! ------------------------------------------------- + function CurvAbscissa( p1, p2, p3 ) result( t ) + + implicit none + !-arguments-------------------------------- + type(point_type), intent(in) :: p1, p2, p3 + !-local-variables-------------------------- + real(kind=rp) :: t + + t = ( p3% coords(1) - p1% coords(1) )*( p2% coords(1) - p1% coords(1) ) + & + ( p3% coords(2) - p1% coords(2) )*( p2% coords(2) - p1% coords(2) ) + + t = t/( POW2(p2% coords(1) - p1% coords(1)) + POW2(p2% coords(2) - p1% coords(2)) ) + + end function CurvAbscissa +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the distance of a point (p3) from a line defined by +! the points p1 and p2 +! ------------------------------------------------- + real(kind=rp) function ComputeWidth( p1, p2, p3 ) result( width ) + + implicit none + !-arguments-------------------------------- + type(point_type), intent(in) :: p1, p2, p3 + !-local-variables-------------------------- + real(kind=rp), dimension(NDIM-1) :: vec + real(kind=rp) :: t +! +! Computing t-values for the point p3 +! -------------------------------- + t = CurvAbscissa( p1, p2, p3 ) + +! +! Position of the projection of p3 point on the line p1-p2 +! ------------------------------------------------ + vec = p1% coords(1:2) + t *( p2% coords(1:2)- p1% coords(1:2) ) + +! +! Computing the distance +! --------------------- + width = norm2( p3% coords(1:2) - vec(1:2) ) + + end function ComputeWidth +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine computes the rotating calipers method. +! ------------------------------------------------- + subroutine RotatingCalipers( Hull, rectWidth, rectLength, rectAngle, rectCenter, AAB ) + + implicit none + !-arguments----------------------------------------------------------------- + type(Hull_type), intent(inout) :: Hull + real(kind=rp), dimension(:), intent(out) :: rectCenter + real(kind=rp), intent(out) :: rectWidth, rectLength, rectAngle + logical, intent(in) :: AAB + !-local-variables------------------------------------------------------------- + real(kind=rp), dimension(NDIM-1) :: Caliper1, Caliper2, v1, v2, PointMin, PointMax + integer, dimension(1) :: loc, MinIndex, MaxIndex + real(kind=rp) :: RotAngle, width, minwidth, theta1, theta2, dtheta + real(kind=rp), dimension(Hull% NumOfPoints) :: x, y + integer :: indexMin1, indexMin2, indexMax1, indexMax2 + + if( AAB ) then + rectAngle = 0.0_RP + else + + minwidth = huge(1.0_RP); rectAngle = 0.0_RP; RotAngle = 0.0_RP + + Caliper1 = (/ 1.0_RP, 0.0_RP/) + Caliper2 = (/ -1.0_RP, 0.0_RP/) + + MinIndex = minloc(Hull% Points(:)% coords(2)) + MaxIndex = maxloc(Hull% Points(:)% coords(2)) + + indexMin1 = MinIndex(1); indexMax1 = MaxIndex(1) + + do while( RotAngle .lt. PI ) + + indexMin2 = mod(indexMin1, Hull% NumOfPoints) + 1 + indexMax2 = mod(indexMax1, Hull% NumOfPoints) + 1 + +! +! Looping Counterclockwise from y-min point (p1) +! and from y-max point (p2). +! ------------------------------------------- + v1 = Hull% Points(indexMin2)% coords(1:2) - Hull% Points(indexMin1)% coords(1:2) + v2 = Hull% Points(indexMax2)% coords(1:2) - Hull% Points(indexMax1)% coords(1:2) + +! +! Computing the angles between calipers and vectors v1,v2 +! --------------------------------------------------- + theta1 = ComputingAngle( Caliper1, v1 ) + theta2 = ComputingAngle( Caliper2, v2 ) + + dtheta = min(theta1,theta2) + loc = minloc((/ theta1,theta2 /)) + call RotateVector(Caliper1, dtheta) + call RotateVector(Caliper2, dtheta) + + RotAngle = RotAngle + dtheta + + if( loc(1) .eq. 1 ) then + width = ComputeWidth( Hull% Points(indexMin1), Hull% Points(indexMin2), Hull% Points(indexMax1) ) + indexMin1 = mod(indexMin1, Hull% NumOfPoints) + 1 + else + width = ComputeWidth( Hull% Points(indexMax1), Hull% Points(indexMax2), Hull% Points(indexMin1) ) + indexMax1 = mod(indexMax1, Hull% NumOfPoints) + 1 + end if + + if( width .lt. minwidth ) then + minwidth = width + rectAngle = RotAngle + end if + + end do + + end if + + rectCenter(1) = sum(Hull% Points(:)% coords(1))/Hull% NumOfPoints + rectCenter(2) = sum(Hull% Points(:)% coords(2))/Hull% NumOfPoints + +! +! Initialization of the extreme points +! --------------------------------------- + PointMax = -huge(1.0_RP); PointMin = huge(1.0_RP) +! +! ClockWise rotation looking for extreme points +! --------------------------------------------- + + x = (Hull% Points(:)% coords(1)-rectCenter(1))*cos(rectAngle) + & + (Hull% Points(:)% coords(2)-rectCenter(2))*sin(rectAngle) + y = -(Hull% Points(:)% coords(1)-rectCenter(1))*sin(rectAngle) + & + (Hull% Points(:)% coords(2)-rectCenter(2))*cos(rectAngle) + + PointMax(1) = maxval(x) + PointMax(2) = maxval(y) + PointMin(1) = minval(x) + PointMin(2) = minval(y) + +! +! Minimum Bounding Rectangle properties +! ------------------------------------- + rectLength = PointMax(1) - PointMin(1); + rectWidth = PointMax(2) - PointMin(2); + + !Safety factor + rectLength = (1.0_RP+SAFETY_FACTOR)*rectLength + rectWidth = (1.0_RP+SAFETY_FACTOR)*rectWidth + + rectCenter = 0.5_RP* (/ PointMax(1) + PointMin(1),PointMax(2) + PointMin(2) /) + + call RotateVector(rectCenter,rectAngle) + + rectCenter(1) = rectCenter(1) + sum(Hull% Points(:)% coords(1))/Hull% NumOfPoints + rectCenter(2) = rectCenter(2) + sum(Hull% Points(:)% coords(2))/Hull% NumOfPoints + + end subroutine RotatingCalipers +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine extrude the minimum bounding rectangle to get the full OBB. +! MBR -> Minimum Bounding Rectangle +! MRB := ( rectWidth, rectLength, rectAngle, rectCenter ) +! ------------------------------------------------- + subroutine ExtrudeMBR( OBB ) + + implicit none + !-arguments------------------------------------------------- + type(OBB_type), intent(inout) :: OBB + !-local-variables------------------------------------------- + integer :: i +! +! Extrusion +! --------- + + do i = 1, 4 + call OBB% ChangeRefFrame((/ OBB% MBR% vertices(1,i), OBB% MBR% vertices(2,i), OBB% nMin /), GLOBAL, OBB% vertices(:,i) ) + call OBB% ChangeRefFrame((/ OBB% MBR% vertices(1,i), OBB% MBR% vertices(2,i), OBB% nMax /), GLOBAL, OBB% vertices(:,i+4) ) + OBB% LocVertices(:,i) = (/ OBB% MBR% vertices(:,i), OBB% nMin /) + OBB% LocVertices(:,i+4) = (/ OBB% MBR% vertices(:,i), OBB% nMax /) + end do + + OBB% LocFrameCenter = OBB% CloudCenter + matmul(OBB% R, (/ OBB% MBR% Center,0.0_RP/)) + + end subroutine ExtrudeMBR +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This function check if a point is inside the OBB or not +! ------------------------------------------------- + function OBB_isPointInside( this, coords, coeff ) result( isInsideOBB ) + + implicit none + !-arguments------------------------------------ + class(OBB_type), intent(inout) :: this + real(kind=rp), dimension(:), intent(in) :: coords + real(kind=rp), intent(in) :: coeff + logical :: isInsideOBB + !-local-variables-------------------------------- + real(kind=rp), dimension(NDIM) :: Point + real(kind=rp) :: Multcoeff + + optional :: coeff + + if( present(coeff) ) then + Multcoeff = coeff + else + Multcoeff = 1.0_RP + end if + + call this% ChangeRefFrame(coords, LOCAL, Point) + + isInsideOBB = .false. + + !check x y z + if( isInsideBox(Point, Multcoeff*this% LocVertices) ) isInsideOBB = .true. + + end function OBB_isPointInside + + + subroutine OBB_ChangeObjsRefFrame( this, objs, FRAME ) + + implicit none + !-arguments--------------------------------------------- + class(OBB_type), intent(inout) :: this + type(Object_type), intent(inout) :: objs(:) + integer, intent(in) :: FRAME + !-local-variables--------------------------------------- + integer :: i, j + +!$omp parallel +!$omp do schedule(runtime) private(j) + do i = 1, size(objs) + do j = 1, size(objs(i)% vertices) + call this% ChangeRefFrame( objs(i)% vertices(j)% coords, FRAME, objs(i)% vertices(j)% coords ) + end do + end do +!$omp end do +!$omp end parallel + + end subroutine OBB_ChangeObjsRefFrame + + subroutine OBB_STL_rotate( this, stl ) + + implicit none + !-arguments----------------------------- + class(OBB_type), intent(inout):: this + type(STLfile), intent(inout):: stl + !-local-variables----------------------- + real(kind=RP) :: meanCoords(NDIM), meanCoordsNew(NDIM), shiftVec(NDIM) + integer :: i, j, NumOfPoints + + NumOfPoints = 3*stl% NumOfObjs; meanCoordsNew = 0.0_RP; meanCoords = 0.0_RP +!$omp parallel +!$omp do schedule(runtime) private(j) + do i = 1, stl% NumOfObjs + do j = 1, stl% ObjectsList(i)% NumOfVertices +!$omp critical + meanCoords = meanCoords + stl% ObjectsList(i)% vertices(j)% coords +!$omp end critical + stl% ObjectsList(i)% vertices(j)% coords = matmul( stl% rotationMatrix, stl% ObjectsList(i)% vertices(j)% coords ) +!$omp critical + meanCoordsNew = meanCoordsNew + stl% ObjectsList(i)% vertices(j)% coords +!$omp end critical + end do + end do +!$omp end do +!$omp end parallel + + meanCoords = meanCoords/NumOfPoints; meanCoordsNew = meanCoordsNew/NumOfPoints + + shiftVec = meanCoordsNew - meanCoords +!!$omp parallel +!!$omp do schedule(runtime) private(j) + do i = 1, stl% NumOfObjs + do j = 1, stl% ObjectsList(i)% NumOfVertices + stl% ObjectsList(i)% vertices(j)% coords = stl% ObjectsList(i)% vertices(j)% coords - shiftVec + end do + end do +!!$omp end do +!!$omp end parallel + end subroutine OBB_STL_rotate + + subroutine OBB_STL_translate( this, stl ) + + implicit none + !-arguments----------------------------- + class(OBB_type), intent(inout):: this + type(STLfile), intent(inout):: stl + !-local-variables----------------------- + real(kind=RP) :: meanCoords(NDIM) + integer :: i, j, NumOfPoints + + meanCoords = 0.0_RP; NumOfPoints = 0 + +!$omp parallel shared(this,stl,meanCoords,NumOfPoints,i) +!$omp do schedule(runtime) private(j) + do i = 1, stl% NumOfObjs + do j = 1, size(stl% ObjectsList(i)% vertices) + stl% ObjectsList(i)% vertices(j)% coords(stl% motionAxis) = stl% ObjectsList(i)% vertices(j)% coords(stl% motionAxis) + stl% ds +!$omp critical + meanCoords = meanCoords + stl% ObjectsList(i)% vertices(j)% coords + NumOfPoints = NumOfPoints + 1 +!$omp end critical + end do + end do +!$omp end do +!$omp end parallel + + end subroutine OBB_STL_translate + +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This function check if a point is inside a generic box +! ------------------------------------------------- + + logical function isInsideBox( Point, vertices, equal ) result( isInside ) + + implicit none + + real(kind=rp), dimension(:), intent(in) :: Point + real(kind=rp), dimension(:,:), intent(in) :: vertices + logical, intent(in) :: equal + + optional :: equal + + isInside = .false. + + if( present(equal) ) then + if( .not. equal ) then + if( (Point(1) > vertices(1,1) .and. Point(1) < vertices(1,7)) .and. & + (Point(2) > vertices(2,1) .and. Point(2) < vertices(2,7)) .and. & + (Point(3) > vertices(3,1) .and. Point(3) < vertices(3,7)) ) then + isInside = .true. + end if + return + end if + end if + + if( (Point(1) >= vertices(1,1) .and. Point(1) <= vertices(1,7)) .and. & + (Point(2) >= vertices(2,1) .and. Point(2) <= vertices(2,7)) .and. & + (Point(3) >= vertices(3,1) .and. Point(3) <= vertices(3,7)) ) isInside = .true. + + end function isInsideBox + + logical function ElementOBBintersect( corners, coeff, STLNum ) result( intersect ) + + implicit none + !-arguments---------------------------------------------- + real(kind=RP), intent(in) :: corners(NDIM,8), coeff + integer, intent(in) :: STLNum + !-local-variables---------------------------------- + real(kind=RP) :: Loccorners(NDIM,8), LocVertices(NDIM,8) + integer :: i + + intersect = .false. + + do i = 1, 8 + call OBB(STLNum)% ChangeRefFrame(corners(:,i),LOCAL,Loccorners(:,i)) + end do + + LocVertices = coeff*OBB(STLNum)% LocVertices + + if( (maxval(Loccorners(1,:)) >= minval(LocVertices(1,:)) .and. maxval(LocVertices(1,:)) >= minval(Loccorners(1,:)) ) .and. & + (maxval(Loccorners(2,:)) >= minval(LocVertices(2,:)) .and. maxval(LocVertices(2,:)) >= minval(Loccorners(2,:)) ) .and. & + (maxval(Loccorners(3,:)) >= minval(LocVertices(3,:)) .and. maxval(LocVertices(3,:)) >= minval(Loccorners(3,:)) ) ) then + intersect = .true. + end if + + end function ElementOBBintersect + +end module OrientedBoundingBox \ No newline at end of file diff --git a/Solver/src/libs/mesh/Read_GMSH.f90 b/Solver/src/libs/mesh/Read_GMSH.f90 index be703b5ce..dbdc74c69 100644 --- a/Solver/src/libs/mesh/Read_GMSH.f90 +++ b/Solver/src/libs/mesh/Read_GMSH.f90 @@ -54,6 +54,8 @@ MODULE Read_GMSH private public ConstructMesh_FromGMSHFile_v4_, ConstructMesh_FromGMSHFile_v2_, CheckGMSHversion, NumOfElems_GMSH_v4, NumOfElems_GMSH_v2 + public MSH_node_block_t, MSH_point_t, MSH_element_block_t, EL_MAX_ORDER, SUPPORTED_EL_TYPES, ReorderElement, MSH_LEN + ! ! ------------------------------------------------ ! Local temporary element storage. diff --git a/Solver/src/libs/mesh/TessellationTypes.f90 b/Solver/src/libs/mesh/TessellationTypes.f90 index 2d3d2d0c1..ac35b5c56 100644 --- a/Solver/src/libs/mesh/TessellationTypes.f90 +++ b/Solver/src/libs/mesh/TessellationTypes.f90 @@ -1,838 +1,1281 @@ - -#include "Includes.h" -module TessellationTypes - - use SMConstants - use Utilities - use IntegerDataLinkedList - use ParamfileRegions , only: readValueInRegion - - implicit none - -! -! ************************************************** -! Main type for a list of points -! ************************************************** - type PointLinkedList - - class(point_type), pointer :: head => null() - integer :: NumOfPoints - - contains - procedure :: add => PointLinkedList_add - procedure :: remove => PointLinkedList_Remove - procedure :: removeLast => PointLinkedList_RemoveLast - procedure :: destruct => PointLinkedList_Destruct - - end type PointLinkedList - -! -! ************************************************** -! Main type for a generic point point -! ************************************************** - type point_type - - class(point_type), pointer :: next => null(), prev => null() - - real(kind=rp), dimension(NDIM) :: coords, ImagePoint_coords, normal - real(kind=rp) :: theta, dist, Rank - integer :: index, element_index, & - Translate = 0, partition, objIndex - integer, dimension(NDIM) :: local_Position - logical :: delete = .false., isInsideBody = .false., & - forcingPoint = .false. - - contains - procedure :: copy => point_type_copy - - end type - -! -! ************************************************** -! Main type for a list of points -! ************************************************** - type ObjectLinkedList - - class(object_type), pointer :: head => null() - - contains - procedure :: add => ObjectLinkedList_add - procedure :: destruct => ObjectLinkedList_Destruct - - end type ObjectLinkedList - -! -! ************************************************** -! Main type for a generic object -! ************************************************** - type Object_type - - class(Object_type), pointer :: next => null(), prev => null() - - type(point_type), dimension(:), allocatable :: vertices - real(kind=rp), dimension(NDIM) :: normal, tangent, coords - integer :: index, NumOfVertices - integer, dimension(2) :: partition - logical :: ComputeIntegrals = .true. - - contains - procedure :: copy => object_type_copy - procedure :: build => object_type_build - procedure :: destruct => object_type_destruct - - end type Object_type - -! -! ************************************************** -! Main type for a STL file reader -! ************************************************** - type STLfile - - type(Object_type), dimension(:), allocatable :: ObjectsList - integer :: NumOfObjs, partition, & - motionAxis, body - real(kind=RP) :: angularVelocity, ds, & - Velocity, & - rotationMatrix(NDIM,NDIM) - logical :: move - character(len=LINE_LENGTH) :: filename, motionType - - contains - procedure :: ReadTessellation - procedure :: getRotationaMatrix => STLfile_getRotationaMatrix - procedure :: getDisplacement => STLfile_getDisplacement - procedure :: destroy => STLfile_destroy - procedure :: Describe => Describe_STLfile - procedure :: plot => STLfile_plot - procedure :: DescribePartitions => DescribePartitions_STLfile - - end type - - interface PointLinkedList - module procedure :: PointLinkedList_Construct - end interface - - interface ObjectLinkedList - module procedure :: ObjectLinkedList_Construct - end interface - - character(len=8) :: ROTATION = "rotation" - character(len=6) :: LINEAR = "linear" - - contains -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine initializes a points list -! ------------------------------------------------ - function PointLinkedList_Construct( ) - - implicit none - - type(PointLinkedList) :: PointLinkedList_Construct - - PointLinkedList_Construct% head => null() - - end function PointLinkedList_Construct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine adds a point to a points list -! ------------------------------------------------ - subroutine PointLinkedList_Add( this, point ) - - implicit none - - class(PointLinkedList) :: this - type(point_type) :: point - - type(point_type), pointer :: current => null(), currentNext => null() - - if( .not. associated(this% head) ) then - allocate(this% head) - call this% head% copy(point) - this% head% next => this% head - this% head% prev => this% head - return - else - current => this% head% prev - currentNext => current% next - allocate(currentNext) - call currentNext% copy(point) - currentNext% next => this% head - currentNext% prev => current - nullify(current% next) - current% next => currentNext - nullify(this% head% prev) - this% head% prev => currentNext - end if - - nullify(current, currentNext) - - end subroutine PointLinkedList_Add -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine deletes the point p from a points list -! ------------------------------------------------ - subroutine PointLinkedList_Remove( this, p ) - - implicit none - !-arguments-------------------------------------------------------------- - class(PointLinkedList), intent(inout) :: this - type(point_type), target, intent(inout) :: p - !-local-variables-------------------------------------------------------- - type(point_type), pointer :: dataNext => null(), dataPrev => null(), & - dataDel => null() - - dataDel => p - - dataPrev => p% prev; dataNext => p% next - - if( associated(dataDel, this% head) ) then - ERROR stop ":: Head of list can't be deleted here!" - return - end if - - dataPrev% next => null() - dataPrev% next => dataNext - dataNext% prev => null() - dataNext% prev => dataPrev - - nullify(dataPrev, dataNext) - - end subroutine PointLinkedList_Remove -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine deletes the last point from a points list -! ------------------------------------------------ - subroutine PointLinkedList_RemoveLast( this ) - - implicit none - - class(PointLinkedList), intent(inout) :: this - - type(point_type), pointer :: data => null(), dataPrev => null() - - data => this% head% prev - - if( associated(data, this% head) ) then - ERROR stop ":: Head of list can't be deleted here!" - return - end if - - dataPrev => data% prev - - deallocate(data) - - dataPrev% next => null() - dataPrev% next => this% head - this% head% prev => null() - this% head% prev => dataPrev - - nullify(dataPrev) - - end subroutine PointLinkedList_RemoveLast -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine deletes a point from a points list -! ------------------------------------------------ - subroutine PointLinkedList_Destruct( this ) - - implicit none - - class(PointLinkedList), intent(inout) :: this - - class(point_type), pointer :: current, next - integer :: i - - if( this% NumOfPoints .eq. 0 ) return - - current => this% head - next => current% next - - do i = 1, this% NumOfPoints - deallocate(current) - current => next - next => current% next - end do - - this% NumOfPoints = 0 - - end subroutine PointLinkedList_Destruct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine copies a point -! ------------------------------------------------ - - subroutine point_type_copy( this, point ) - - implicit none - - class(point_type), intent(inout) :: this - type(point_type), intent(in) :: point - - this% coords = point% coords - this% ImagePoint_coords = point% ImagePoint_coords - this% theta = point% theta - this% index = point% index - this% element_index = point% element_index - this% local_position = point% local_position - this% Translate = point% Translate - this% partition = point% partition - - end subroutine point_type_copy -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine initializes an objects list -! ------------------------------------------------ - function ObjectLinkedList_Construct( ) - - implicit none - - type(ObjectLinkedList) :: ObjectLinkedList_Construct - - ObjectLinkedList_Construct% head => null() - - end function ObjectLinkedList_Construct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine adds an object to an objects list -! ------------------------------------------------ - - subroutine ObjectLinkedList_Add( this, object ) - - implicit none - - class(ObjectLinkedList) :: this - type(Object_type) :: object - - type(object_type), pointer :: current => null(), currentNext => null() - - - if( .not. associated(this% head) ) then - allocate(this% head) - call this% head% copy(object) - this% head% next => this% head - this% head% prev => this% head - return - else - current => this% head% prev - currentNext => current% next - allocate(currentNext) - call currentNext% copy(object) - currentNext% next => this% head - currentNext% prev => current - nullify(current% next) - current% next => currentNext - nullify(this% head% prev) - this% head% prev => currentNext - end if - - nullify(current, currentNext) - - end subroutine ObjectLinkedList_Add -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine destroys an objects list -! ------------------------------------------------ - subroutine ObjectLinkedList_Destruct( this ) - - implicit none - - class(ObjectLinkedList), intent(inout) :: this - - type(object_type), pointer :: data => null(), dataPrev => null() - - if( .not. associated(this% head) ) return - - data => this% head% prev - - if( .not. associated(data, this% head) ) then - do - dataPrev => data% prev - call data% destruct() - deallocate(data) - data => dataPrev - if( associated(data, this% head) ) exit - end do - end if - - deallocate(data) - - nullify(dataPrev) - - end subroutine ObjectLinkedList_Destruct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine builds an object -! ----------------------------------------------- - subroutine object_type_build( this, Points, normal, NumOfVertices, index, computeIntegrals ) - - implicit none - !-arguments--------------------------- - class(Object_type), intent(inout) :: this - real(kind=RP), dimension(:,:), intent(in) :: Points - real(kind=RP), dimension(:), intent(in) :: normal - integer, intent(in) :: NumOfVertices, index - logical, intent(in) :: computeIntegrals - !-local-variables----------------------- - integer :: i - - if( allocated(this% vertices) ) deallocate(this% vertices) - allocate(this% vertices(NumOfVertices)) - - do i = 1, NumOfVertices - this% vertices(i)% coords = Points(:,i) - end do - - this% index = index - this% normal = normal - this% computeIntegrals = computeIntegrals - this% NumOfVertices = NumOfVertices - - end subroutine object_type_build -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine copies an object -! ----------------------------------------------- - subroutine object_type_copy( this, Object ) - - implicit none - !-arguments--------------------------- - class(Object_type), intent(inout) :: this - type(Object_type), intent(in) :: Object - !-local-variables----------------------- - integer :: i - - allocate(this% vertices(Object% NumOfVertices)) - - do i = 1, Object% NumOfVertices - call this% vertices(i)% copy(Object% vertices(i)) - end do - - this% index = Object% index - this% normal = Object% normal - this% computeIntegrals = Object% computeIntegrals - this% NumOfVertices = Object% NumOfVertices - this% partition = Object% partition - - end subroutine object_type_copy -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine copies an object -! ----------------------------------------------- - subroutine object_type_destruct( this ) - - implicit none - !-arguments--------------------------- - class(Object_type), intent(inout) :: this - - deallocate(this% vertices) - - this% index = 0 - this% normal = 0.0_RP - this% NumOfVertices = 0 - - end subroutine object_type_destruct -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine adds an object to a list of objects -! ----------------------------------------------- - subroutine addObj( ObjList, Object ) - - implicit none - !-arguments---------------------------------------------------- - type(Object_type), target, intent(inout) :: ObjList - type(Object_type), intent(in) :: Object - !-local-variables---------------------------------------------- - type(Object_type), pointer :: Obj=>null(), Objprev => null() - - if( .not. associated(ObjList% next)) then - call ObjList% copy( Object ) - ObjList% next => ObjList - ObjList% prev => ObjList - return - end if - - Obj => ObjList% prev -! -! previous point -! ------------ - Objprev => ObjList% prev - - Obj => Obj% next - allocate(Obj) - - Obj% next => ObjList - Obj% prev => Objprev - - Objprev% next => Obj - - call Obj% copy( Object ) - - ObjList% prev => null() - ObjList% prev => Obj - - if( associated(Obj% prev, ObjList) ) then - ObjList% next => Obj - end if - - nullify(Obj, Objprev) - - end subroutine addObj -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine describes the .stl file -! ----------------------------------------------- - subroutine Describe_STLfile( this, filename ) - use Headers - use MPI_Process_Info - use PhysicsStorage - implicit none - !-arguments-------------------------------- - class(STLfile), intent(inout) :: this - character(len=*), intent(in) :: filename - !-local-variables-------------------------- - - if( MPI_Process% isRoot) then - - write(STD_OUT,'(/)') - call Section_Header("Reading stl file") - write(STD_OUT,'(/)') - call SubSection_Header('Stl file "' // trim(fileName) // '"') - - write(STD_OUT,'(30X,A,A32,I10)') "->" , "Number of objects: " , this% NumOfObjs - write(STD_OUT,'(30X,A,A32,I10)') "->" , "Number of stored points: " , 3*this% NumOfObjs - if( this% move ) then - write(STD_OUT,'(30X,A,A32,A10)') "->" , "Motion: " , this% motionType - if( this% motionType .eq. ROTATION ) then - write(STD_OUT,'(30X,A,A32,F10.3,A)') "->" , "Angular Velocity: " , this% angularVelocity/timeref, " rad/s." - elseif( this% motionType .eq. LINEAR ) then - write(STD_OUT,'(30X,A,A32,F10.3,A)') "->" , "Translation Velocity: " , this% Velocity*(Lref/timeref), " m/s." - end if - write(STD_OUT,'(30X,A,A32,I10)') "->" , "Axis of motion: " , this% motionAxis - end if - - end if - - end subroutine Describe_STLfile -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine describes the .stl file -! ----------------------------------------------- - subroutine DescribePartitions_STLfile( this ) - use Headers - use MPI_Process_Info - implicit none - !-arguments-------------------------------- - class(STLfile), intent(inout) :: this - !-local-variables-------------------------- - character(len=LINE_LENGTH) :: myString - - write(myString,'(i100)') this% partition - - if( this% partition .eq. 1 ) then - write(STD_OUT,'(/)') - call Section_Header("stl partitions") - write(STD_OUT,'(/)') - end if - - call SubSection_Header('partition ' // trim(adjustl(myString))) - write(STD_OUT,'(30X,A,A32,I10)') "->" , "Number of objects: " , this% NumOfObjs - write(STD_OUT,'(30X,A,A32,I10)') "->" , "Number of stored points: " , 3*this% NumOfObjs - - end subroutine DescribePartitions_STLfile -! -!///////////////////////////////////////////////////////////////////////////////////////////// -! -! ------------------------------------------------- -! This subroutine reads the .stl file -! ----------------------------------------------- - subroutine ReadTessellation( this, filename ) - use PhysicsStorage - implicit none - !-arguments-------------------------------- - class(STLfile), intent(inout) :: this - character(len=*), intent(in) :: filename - !-local-variables--------------------------- - integer :: i, j, funit, NumOfTri, fileStat, NumOfVertices - integer*2 :: padding - real*4, dimension(3) :: norm, vertex - character(len=80) :: header - - NumOfVertices = 3 - - this% partition = 1 - - funit = UnusedUnit() - open(unit=funit,file='MESH/'//trim(filename)//'.stl',status='old',access='stream',form='unformatted', iostat=fileStat) - - if( fileStat .ne. 0 ) then - print *, "Read Tessellation: file '",trim(filename),"' not found" - error stop - end if - - this% filename = filename - - read(funit) header - read(funit) NumOfTri - - this% NumOfObjs = NumOfTri - - allocate(this% ObjectsList(NumOfTri)) - - associate( Objs => this% ObjectsList ) - - do i = 1, NumOfTri - read(funit) norm(1), norm(2), norm(3) - Objs(i)% normal = norm - allocate(Objs(i)% vertices(NumOfVertices)) - do j = 1, NumOfVertices - read(funit) vertex(1), vertex(2), vertex(3) - Objs(i)% vertices(j)% coords = vertex/Lref - end do - read(funit) padding - Objs(i)% index = i - Objs(i)% NumOfVertices = NumOfVertices - Objs(i)% partition = 1 - end do - - end associate - - close(unit=funit) - - call this% describe( filename ) - - end subroutine ReadTessellation - - subroutine STLfile_GetMotionInfo( this, STLfilename, NumOfSTL ) - use FileReadingUtilities - use FTValueDictionaryClass - use PhysicsStorage - implicit none - !-arguments------------------------------------------ - type(STLfile), intent(inout) :: this - character(len=*), intent(in) :: STLfilename - integer, intent(in) :: NumOfSTL - !-local-arguments------------------------------------ - integer :: i - integer, allocatable :: motionAxis_STL - real(kind=RP), allocatable :: angularVelocity_STL, Velocity_STL - character(len=LINE_LENGTH) :: in_label, paramFile, & - motion_STL, STL_name - - this% move = .false. - - do i = 1, NumOfSTL - - write(in_label , '(A,I0)') "#define stl motion ", i - - call get_command_argument(1, paramFile) - call readValueInRegion ( trim ( paramFile ) , "stl name" , STL_name , in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ) , "type" , motion_STL , in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ) , "angular velocity" , angularVelocity_STL, in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ) , "velocity" , Velocity_STL , in_label, "#end" ) - call readValueInRegion ( trim ( paramFile ) , "motion axis" , motionAxis_STL , in_label, "#end" ) - - if( trim(STLfilename) .ne. trim(STL_name) ) cycle - - this% move = .true. - - select case( trim(motion_STL) ) - case( "rotation" ) - this% motionType = ROTATION - case( "linear" ) - this% motionType = LINEAR - case default - print *, "STLfile_GetMotionInfo: motion not recognized. Available motions are ", ROTATION,"and",LINEAR,"." - error stop - end select - - if( allocated(angularVelocity_STL) ) then - this% angularVelocity = angularVelocity_STL*timeref - elseif( this% motionType .eq. ROTATION ) then - print *, "STLfile_GetMotionInfo: 'angular velocity' must be specified for ", ROTATION, " motion." - error stop - end if - - if( allocated(Velocity_STL) ) then - this% Velocity = Velocity_STL/(Lref/timeref) - elseif( this% motionType .eq. LINEAR ) then - print *, "STLfile_GetMotionInfo: 'velocity' must be specified for ", LINEAR, " motion." - error stop - end if - - if( allocated(motionAxis_STL) ) then - this% motionAxis = motionAxis_STL - if( this% motionAxis .gt. 3 .or. this% motionAxis .lt. 1 ) then - print *, "STLfile_GetMotionInfo: 'motion axis' =", this% motionAxis, " not valid:" - print *, "select 1 for x-axis, 2 for y-axis or 3 for z-axis." - error stop - end if - elseif( this% move ) then - print *, "STLfile_GetMotionInfo: 'motion axis' must be specified." - error stop - end if - - return - - end do - - end subroutine STLfile_GetMotionInfo - - subroutine STLfile_getRotationaMatrix( this, dt ) - - implicit none - !-arguments----------------------------- - class(STLfile), intent(inout):: this - real(kind=RP), intent(in) :: dt - !-local-variables----------------------- - real(kind=RP) :: theta - - theta = this% angularVelocity * dt - - this% rotationMatrix = 0.0_RP - - select case( this% motionAxis ) - case( IX ) - this% rotationMatrix(1,1) = 1.0_RP - this% rotationMatrix(2,2) = cos(theta) - this% rotationMatrix(2,3) = -sin(theta) - this% rotationMatrix(3,2) = sin(theta) - this% rotationMatrix(3,3) = cos(theta) - case( IY ) - this% rotationMatrix(2,2) = 1.0_RP - this% rotationMatrix(1,1) = cos(theta) - this% rotationMatrix(1,3) = sin(theta) - this% rotationMatrix(3,1) = -sin(theta) - this% rotationMatrix(3,3) = cos(theta) - case( IZ ) - this% rotationMatrix(3,3) = 1.0_RP - this% rotationMatrix(1,1) = cos(theta) - this% rotationMatrix(1,2) = -sin(theta) - this% rotationMatrix(2,1) = sin(theta) - this% rotationMatrix(2,2) = cos(theta) - end select - - end subroutine STLfile_getRotationaMatrix - - subroutine STLfile_getDisplacement( this, dt ) - - implicit none - !-arguments----------------------------- - class(STLfile), intent(inout):: this - real(kind=RP), intent(in) :: dt - - this% ds = this% Velocity * dt - - end subroutine STLfile_getDisplacement - - subroutine STLfile_destroy( this ) - - implicit none - !-arguments------------------------------ - class(STLfile), intent(inout) :: this - !-local-variables------------------------ - integer :: i - - do i = 1, this% NumOfObjs - deallocate(this% ObjectsList(i)% vertices) - end do - - deallocate(this% ObjectsList) - - end subroutine STLfile_destroy - - subroutine STLfile_plot( this, timestep ) - use MPI_Process_Info - implicit none - !-arguments---------------------------------------------- - class(STLfile), intent(inout) :: this - integer, intent(in) :: timestep - !-local-variables---------------------------------------- - character(len=LINE_LENGTH) :: filename, myString - integer :: i, j, funit - - if( .not. MPI_Process% isRoot ) return - - funit = UnusedUnit() - - write(myString,'(i100)') timestep - - filename = trim(this% filename)//'_'//trim(adjustl(myString)) - - open(funit,file='IBM/'//trim(filename)//'.tec', status='unknown') - - write(funit,"(a28)") 'TITLE = "Partition objects"' - write(funit,"(a25)") 'VARIABLES = "x", "y", "z"' - - do i = 1, SIZE(this% ObjectsList) - write(funit,"(a66)") 'ZONE NODES=3, ELEMENTS = 1, DATAPACKING=POINT, ZONETYPE=FETRIANGLE' - do j = 1, this% ObjectsList(i)% NumOfVertices - write(funit,'(3E13.5)') this% ObjectsList(i)% vertices(j)% coords(1), & - this% ObjectsList(i)% vertices(j)% coords(2), & - this% ObjectsList(i)% vertices(j)% coords(3) - end do - write(funit,'(3i2)') 1, 2, 3 - end do - - close(funit) - - end subroutine STLfile_plot - - -!////////////////////////////////////////////// - - subroutine TecFileHeader( FileName, Title, I, J, K, funit, DATAPACKING, ZONETYPE, NO ) - - implicit none - - character(len=*), intent(in) :: FileName, Title, DATAPACKING - integer, intent(in) :: I, J, K - character(len=*), optional :: ZONETYPE - logical, optional :: NO - integer, intent(out) :: funit - - funit = UnusedUnit() - - open(funit,file=trim(FileName)//'.tec', status='unknown') - - write(funit,"(A9,A,A)") 'TITLE = "',trim(Title),'"' - write(funit,"(A23)") 'VARIABLES = "x","y","z"' - if( present(ZONETYPE) ) then - write(funit,"(A7,I0,A3,I0,A3,I0,A14,A,A11,A)") 'ZONE I=',I,',J=',J,',K=',K,', DATAPACKING=',trim(DATAPACKING),', ZONETYPE=',trim(ZONETYPE) - else - write(funit,"(A7,I0,A3,I0,A3,I0,A14,A)") 'ZONE I=',I,',J=',J,',K=',K,', DATAPACKING=',trim(DATAPACKING) - end if - - end subroutine TecFileHeader - -end module TessellationTypes +#include "Includes.h" +module TessellationTypes + + use SMConstants + use Utilities + use IntegerDataLinkedList + use ParamfileRegions , only: readValueInRegion + + implicit none + + public :: DescribeSTLPartitions + + integer, parameter :: FORCING_POINT = 1, NOT_FORCING_POINT = 0 + integer, parameter :: POINT_ON_PLANE = 0, POINT_IN_FRONT_PLANE = 1, POINT_BEHIND_PLANE = 2, NumOfVertices = 3 + +! +! ************************************************** +! Main type for a list of points +! ************************************************** + type PointLinkedList + + class(point_type), pointer :: head => null() + integer :: NumOfPoints + + contains + procedure :: add => PointLinkedList_add + procedure :: remove => PointLinkedList_Remove + procedure :: removeLast => PointLinkedList_RemoveLast + procedure :: destruct => PointLinkedList_Destruct + + end type PointLinkedList + +! +! ************************************************** +! Main type for a generic point point +! ************************************************** + type point_type + + class(point_type), pointer :: next => null(), prev => null() + + real(kind=rp), dimension(NDIM) :: coords, ImagePoint_coords, normal, xi + real(kind=rp) :: theta, dist, Rank + integer :: index, element_index, NumOfIntersections, & + Translate = 0, partition, objIndex, isForcingPoint, & + STLNum, element_in + integer, dimension(NDIM) :: local_Position + logical :: delete = .false., isInsideBody = .false., & + forcingPoint = .false., isInsideBox = .false. + real(kind=RP), allocatable :: invPhi(:,:), b(:) + integer, allocatable :: nearestPoints(:) + + contains + procedure :: copy => point_type_copy + + end type + +! +! ************************************************** +! Main type for a list of points +! ************************************************** + type ObjectLinkedList + + class(object_type), pointer :: head => null() + integer :: NumOfObjs + + contains + procedure :: add => ObjectLinkedList_add + procedure :: destruct => ObjectLinkedList_Destruct + + end type ObjectLinkedList + +! +! ************************************************** +! Main type for a generic object +! ************************************************** + type Object_type + + class(Object_type), pointer :: next => null(), prev => null() + + type(point_type), dimension(:), allocatable :: vertices + real(kind=rp), dimension(NDIM) :: normal, tangent, coords + integer :: index, NumOfVertices + integer, dimension(2) :: partition + + contains + procedure :: copy => object_type_copy + procedure :: build => object_type_build + procedure :: destruct => object_type_destruct + + end type Object_type + +! +! ************************************************** +! Main type for a STL file reader +! ************************************************** + type STLfile + + type(Object_type), dimension(:), allocatable :: ObjectsList + integer :: NumOfObjs, partition, & + motionAxis, body, & + NumOfObjs_OLD + real(kind=RP) :: angularVelocity, ds, & + Velocity, & + rotationMatrix(NDIM,NDIM) + logical :: move, show + character(len=LINE_LENGTH) :: filename, motionType + + contains + procedure :: ReadTessellation + procedure :: getRotationaMatrix => STLfile_getRotationaMatrix + procedure :: getDisplacement => STLfile_getDisplacement + procedure :: Clip => STL_Clip + procedure :: updateNormals => STL_updateNormals + procedure :: destroy => STLfile_destroy + procedure :: Describe => Describe_STLfile + procedure :: plot => STLfile_plot + + end type + + + + type ObjsDataLinkedList_t + type(ObjData_t), pointer :: head => null() + integer :: no_of_entries = 0 + contains + procedure :: Add => ObjsDataLinkedList_Add + procedure :: check => CheckObj + procedure :: Destruct => ObjsDataLinkedList_Destruct + end type ObjsDataLinkedList_t + + type ObjData_t + integer :: value + type(ObjData_t), pointer :: next + end type ObjData_t + + + type ObjsRealDataLinkedList_t + class(ObjRealData_t), pointer :: head => NULL() + integer :: no_of_entries = 0 + contains + procedure :: Add => ObjsRealDataLinkedList_Add + procedure :: check => CheckReal + procedure :: Destruct => ObjsRealDataLinkedList_Destruct + end type ObjsRealDataLinkedList_t + + type ObjRealData_t + real(kind=RP) :: value + class(ObjRealData_t), pointer :: next + end type ObjRealData_t + + + + interface ObjsDataLinkedList_t + module procedure ConstructObjsDataLinkedList + end interface + + interface ObjsRealDataLinkedList_t + module procedure ConstructObjsRealDataLinkedList + end interface + + + + + + + + interface PointLinkedList + module procedure :: PointLinkedList_Construct + end interface + + interface ObjectLinkedList + module procedure :: ObjectLinkedList_Construct + end interface + + character(len=8) :: ROTATION = "rotation" + character(len=6) :: LINEAR = "linear" + + contains + + function ConstructObjsDataLinkedList( ) + implicit none + type(ObjsDataLinkedList_t) :: ConstructObjsDataLinkedList + + ConstructObjsDataLinkedList% head => null() + ConstructObjsDataLinkedList% no_of_entries = 0 + + end function ConstructObjsDataLinkedList + + function ConstructObjsRealDataLinkedList( ) + implicit none + type(ObjsRealDataLinkedList_t) :: ConstructObjsRealDataLinkedList + + ConstructObjsRealDataLinkedList% head => null() + ConstructObjsRealDataLinkedList% no_of_entries = 0 + + end function ConstructObjsRealDataLinkedList + + subroutine ObjsDataLinkedList_Add( this, value ) + implicit none + !-arguments---------------------------------------------- + class(ObjsDataLinkedList_t), intent(inout) :: this + integer, intent(in) :: value + !-local-variables---------------------------------------- + type(ObjData_t), pointer :: current + integer :: i + + if ( this% no_of_entries .eq. 0 ) then + allocate( this% head ) + this% head% value = value + this% no_of_entries = 1 + else + current => this% head + do i = 1, this% no_of_entries-1 + current => current% next + end do + allocate(current% next) + current% next% value = value + this% no_of_entries = this% no_of_entries + 1 + end if + + end subroutine ObjsDataLinkedList_Add + + subroutine ObjsRealDataLinkedList_Add( this, value ) + implicit none + !-arguments--------------------------------------------- + class(ObjsRealDataLinkedList_t), intent(inout) :: this + real(kind=RP), intent(in) :: value + !-local-variables--------------------------------------- + type(ObjRealData_t), pointer :: current + integer :: i + + if ( this% no_of_entries .eq. 0 ) then + allocate( this% head ) + this% head% value = value + this% no_of_entries = 1 + else + current => this% head + do i = 1, this% no_of_entries-1 + current => current% next + end do + allocate(current% next) + current% next% value = value + this% no_of_entries = this% no_of_entries + 1 + end if + + end subroutine ObjsRealDataLinkedList_Add + + logical function CheckObj( this, value ) result( found ) + implicit none + !-arguments--------------------------------------------- + class(ObjsDataLinkedList_t), intent(inout) :: this + integer, intent(in) :: value + !-local-variables--------------------------------------- + type(ObjData_t), pointer :: current + integer :: i + + found = .false. + + if( this% no_of_entries .eq.0 ) return + + current => this% head + + do i = 1, this% no_of_entries + if( current% value .eq. value ) then + found = .true. + exit + end if + current => current% next + end do + + end function CheckObj + + logical function CheckReal( this, value ) result( found ) + implicit none + !-arguments---------------------------------------------- + class(ObjsRealDataLinkedList_t), intent(inout) :: this + real(kind=RP), intent(in) :: value + !-local-variables---------------------------------------- + type(ObjRealData_t), pointer :: current + integer :: i + + found = .false. + + if( this% no_of_entries .eq.0 ) return + + current => this% head + + do i = 1, this% no_of_entries + if( almostEqual(current% value,value) ) then + found = .true. + exit + end if + current => current% next + end do + + end function CheckReal + + elemental subroutine ObjsDataLinkedList_Destruct(this) + implicit none + !-arguments--------------------------------------------- + class(ObjsDataLinkedList_t), intent(inout) :: this + !-local-variables--------------------------------------- + type(ObjData_t), pointer :: data, nextdata + integer :: i + + data => this% head + do i = 1, this% no_of_entries + nextdata => data% next + + deallocate(data) + data => nextdata + end do + + this% no_of_entries = 0 + + end subroutine ObjsDataLinkedList_Destruct + + elemental subroutine ObjsRealDataLinkedList_Destruct(this) + implicit none + !-arguments--------------------------------------------- + class(ObjsRealDataLinkedList_t), intent(inout) :: this + !-local-variables--------------------------------------- + type(ObjRealData_t), pointer :: data, nextdata + integer :: i + + data => this% head + do i = 1, this% no_of_entries + nextdata => data% next + + deallocate(data) + data => nextdata + end do + + this% no_of_entries = 0 + + end subroutine ObjsRealDataLinkedList_Destruct + +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine initializes a points list +! ------------------------------------------------ + function PointLinkedList_Construct( ) + + implicit none + + type(PointLinkedList) :: PointLinkedList_Construct + + PointLinkedList_Construct% head => null() + + end function PointLinkedList_Construct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine adds a point to a points list +! ------------------------------------------------ + subroutine PointLinkedList_Add( this, point ) + implicit none + !-arguments----------------------------------- + class(PointLinkedList) :: this + type(point_type) :: point + !-local-variables----------------------------- + type(point_type), pointer :: current, & + currentNext + + if( .not. associated(this% head) ) then + allocate(this% head) + call this% head% copy(point) + this% head% next => this% head + this% head% prev => this% head + else + current => this% head% prev + currentNext => current% next + allocate(currentNext) + call currentNext% copy(point) + currentNext% next => this% head + currentNext% prev => current + nullify(current% next) + current% next => currentNext + nullify(this% head% prev) + this% head% prev => currentNext + end if + + nullify(current, currentNext) + + end subroutine PointLinkedList_Add +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine deletes the point p from a points list +! ------------------------------------------------ + subroutine PointLinkedList_Remove( this, p ) + implicit none + !-arguments-------------------------------------------------------------- + class(PointLinkedList), intent(inout) :: this + type(point_type), target, intent(inout) :: p + !-local-variables-------------------------------------------------------- + type(point_type), pointer :: dataNext => null(), dataPrev => null(), & + dataDel => null() + + dataDel => p + + dataPrev => p% prev; dataNext => p% next + + if( associated(dataDel, this% head) ) then + ERROR stop ":: Head of list can't be deleted here!" + return + end if + + dataPrev% next => null() + dataPrev% next => dataNext + dataNext% prev => null() + dataNext% prev => dataPrev + + nullify(dataPrev, dataNext) + + end subroutine PointLinkedList_Remove +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine deletes the last point from a points list +! ------------------------------------------------ + subroutine PointLinkedList_RemoveLast( this ) + implicit none + !-arguments-------------------------------------------------------- + class(PointLinkedList), intent(inout) :: this + !-local-variables-------------------------------------------------- + type(point_type), pointer :: data => null(), dataPrev => null() + + data => this% head% prev + + if( associated(data, this% head) ) then + ERROR stop ":: Head of list can't be deleted here!" + return + end if + + dataPrev => data% prev + + deallocate(data) + + dataPrev% next => null() + dataPrev% next => this% head + this% head% prev => null() + this% head% prev => dataPrev + + nullify(dataPrev) + + end subroutine PointLinkedList_RemoveLast +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine deletes a point from a points list +! ------------------------------------------------ + subroutine PointLinkedList_Destruct( this ) + implicit none + !-arguments-------------------------------------- + class(PointLinkedList), intent(inout) :: this + !-local-variables-------------------------------- + class(point_type), pointer :: current, next + integer :: i + + if( this% NumOfPoints .eq. 0 ) return + + current => this% head + next => current% next + + do i = 2, this% NumOfPoints + deallocate(current) + current => next + next => current% next + end do + + this% NumOfPoints = 0 + + end subroutine PointLinkedList_Destruct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine copies a point +! ------------------------------------------------ + + subroutine point_type_copy( this, point ) + implicit none + !-arguments------------------------------- + class(point_type), intent(inout) :: this + type(point_type), intent(in) :: point + + this% coords = point% coords + this% ImagePoint_coords = point% ImagePoint_coords + this% theta = point% theta + this% index = point% index + this% element_index = point% element_index + this% local_position = point% local_position + this% Translate = point% Translate + this% partition = point% partition + + end subroutine point_type_copy +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine initializes an objects list +! ------------------------------------------------ + function ObjectLinkedList_Construct( ) + implicit none + !-local-variables------------------------------------- + type(ObjectLinkedList) :: ObjectLinkedList_Construct + + ObjectLinkedList_Construct% head => null() + ObjectLinkedList_Construct% NumOfObjs = 0 + + end function ObjectLinkedList_Construct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine adds an object to an objects list +! ------------------------------------------------ + + subroutine ObjectLinkedList_Add( this, object ) + implicit none + !arguemnts-------------------------------------------- + class(ObjectLinkedList) :: this + type(Object_type) :: object + !-local-variables------------------------------------- + type(object_type), pointer :: current => null(), & + currentNext => null() + + if( .not. associated(this% head) ) then + allocate(this% head) + call this% head% copy(object) + this% head% next => this% head + this% head% prev => this% head + else + current => this% head% prev + currentNext => current% next + allocate(currentNext) + call currentNext% copy(object) + currentNext% next => this% head + currentNext% prev => current + nullify(current% next) + current% next => currentNext + nullify(this% head% prev) + this% head% prev => currentNext + nullify(current, currentNext) + end if + + this% NumOfObjs = this% NumOfObjs + 1 + + end subroutine ObjectLinkedList_Add +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine destroys an objects list +! ------------------------------------------------ + subroutine ObjectLinkedList_Destruct( this ) + implicit none + !arguemnts---------------------------------------- + class(ObjectLinkedList), intent(inout) :: this + !-local-variables--------------------------------- + type(object_type), pointer :: data => null(), & + dataPrev => null() + + if( .not. associated(this% head) ) return + + data => this% head% prev + + if( .not. associated(data, this% head) ) then + do + dataPrev => data% prev + call data% destruct() + deallocate(data) + data => dataPrev + if( associated(data, this% head) ) exit + end do + end if + + deallocate(data) + + this% NumOfObjs = this% NumOfObjs - 1 + + nullify(dataPrev) + + end subroutine ObjectLinkedList_Destruct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine builds an object +! ----------------------------------------------- + subroutine object_type_build( this, Points, normal, NumOfVertices, index ) + implicit none + !-arguments--------------------------- + class(Object_type), intent(inout) :: this + real(kind=RP), intent(in) :: Points(:,:) + real(kind=RP), intent(in) :: normal(:) + integer, intent(in) :: NumOfVertices, index + !-local-variables-------------------------------------- + integer :: i + + if( allocated(this% vertices) ) deallocate(this% vertices) + allocate(this% vertices(NumOfVertices)) + + do i = 1, NumOfVertices + this% vertices(i)% coords = Points(:,i) + end do + + this% index = index + this% normal = normal + this% NumOfVertices = NumOfVertices + + end subroutine object_type_build +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine copies an object +! ----------------------------------------------- + subroutine object_type_copy( this, Object ) + + implicit none + !-arguments--------------------------- + class(Object_type), intent(inout) :: this + type(Object_type), intent(in) :: Object + !-local-variables----------------------- + integer :: i + + allocate(this% vertices(Object% NumOfVertices)) + + do i = 1, Object% NumOfVertices + call this% vertices(i)% copy(Object% vertices(i)) + end do + + this% index = Object% index + this% normal = Object% normal + this% NumOfVertices = Object% NumOfVertices + this% partition = Object% partition + + end subroutine object_type_copy +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine copies an object +! ----------------------------------------------- + subroutine object_type_destruct( this ) + + implicit none + !-arguments--------------------------- + class(Object_type), intent(inout) :: this + + deallocate(this% vertices) + + this% index = 0 + this% normal = 0.0_RP + this% NumOfVertices = 0 + + end subroutine object_type_destruct +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine adds an object to a list of objects +! ----------------------------------------------- + subroutine addObj( ObjList, Object ) + + implicit none + !-arguments---------------------------------------------------- + type(Object_type), target, intent(inout) :: ObjList + type(Object_type), intent(in) :: Object + !-local-variables---------------------------------------------- + type(Object_type), pointer :: Obj=>null(), Objprev => null() + + if( .not. associated(ObjList% next)) then + call ObjList% copy( Object ) + ObjList% next => ObjList + ObjList% prev => ObjList + return + end if + + Obj => ObjList% prev +! +! previous point +! ------------ + Objprev => ObjList% prev + + Obj => Obj% next + allocate(Obj) + + Obj% next => ObjList + Obj% prev => Objprev + + Objprev% next => Obj + + call Obj% copy( Object ) + + ObjList% prev => null() + ObjList% prev => Obj + + if( associated(Obj% prev, ObjList) ) then + ObjList% next => Obj + end if + + nullify(Obj, Objprev) + + end subroutine addObj +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine describes the .stl file +! ----------------------------------------------- + subroutine Describe_STLfile( this, filename ) + use Headers + use MPI_Process_Info + use PhysicsStorage + implicit none + !-arguments----------------------------------- + class(STLfile), intent(inout) :: this + character(len=*), intent(in) :: filename + + if( MPI_Process% isRoot) then + + write(STD_OUT,'(/)') + call Section_Header("Reading stl file") + write(STD_OUT,'(/)') + call SubSection_Header('Stl file "' // trim(fileName) // '"') + + write(STD_OUT,'(30X,A,A35,I10)') "->" , "Number of objects: " , this% NumOfObjs + if( this% move ) then + write(STD_OUT,'(30X,A,A35,A10)') "->" , "Motion: " , this% motionType + if( this% motionType .eq. ROTATION ) then + write(STD_OUT,'(30X,A,A35,F10.3,A)') "->" , "Angular Velocity: " , abs(this% angularVelocity), " rad/s." + elseif( this% motionType .eq. LINEAR ) then + write(STD_OUT,'(30X,A,A35,F10.3,A)') "->" , "Translation Velocity: " , this% Velocity*(Lref/timeref), " m/s." + end if + write(STD_OUT,'(30X,A,A35,I10)') "->" , "Axis of motion: " , this% motionAxis + end if + + end if + + end subroutine Describe_STLfile +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine describes the .stl file +! ----------------------------------------------- + subroutine DescribeSTLPartitions( partition, NumOfObjs ) + use Headers + use MPI_Process_Info + implicit none + !-arguments-------------------------------- + integer, intent(in) :: partition, NumOfObjs + !-local-variables-------------------------- + character(len=LINE_LENGTH) :: myString + + write(myString,'(i100)') partition+1 + + if( partition .eq. 0 ) then + write(STD_OUT,'(/)') + call Section_Header("stl partitions") + write(STD_OUT,'(/)') + end if + + call SubSection_Header('partition ' // trim(adjustl(myString))) + write(STD_OUT,'(30X,A,A32,I10)') "->" , "Number of objects: " , NumOfObjs + + end subroutine DescribeSTLPartitions +! +!///////////////////////////////////////////////////////////////////////////////////////////// +! +! ------------------------------------------------- +! This subroutine reads the .stl file +! ----------------------------------------------- + subroutine ReadTessellation( this, filename ) + use PhysicsStorage + implicit none + !-arguments--------------------------------------- + class(STLfile), intent(inout) :: this + character(len=*), intent(in) :: filename + !-local-variables--------------------------------- + integer :: i, j, funit, NumOfTri, & + fileStat, NumOfVertices + integer*2 :: padding + real*4, dimension(3) :: norm, vertex + character(len=80) :: header + + NumOfVertices = 3 + + this% partition = 1 + + funit = UnusedUnit() + open(unit=funit,file='MESH/'//trim(filename)//'.stl',status='old',access='stream',form='unformatted', iostat=fileStat) + + if( fileStat .ne. 0 ) then + print *, "Read Tessellation: file '",trim(filename),"' not found" + error stop + end if + + this% filename = filename + + read(funit) header + read(funit) NumOfTri + + this% NumOfObjs = NumOfTri + + allocate(this% ObjectsList(NumOfTri)) + + associate( Objs => this% ObjectsList ) + + do i = 1, NumOfTri + read(funit) norm(1), norm(2), norm(3) + Objs(i)% normal = norm + allocate(Objs(i)% vertices(NumOfVertices)) + do j = 1, NumOfVertices + read(funit) vertex(1), vertex(2), vertex(3) + Objs(i)% vertices(j)% coords = vertex!/Lref -> always 1 + end do + read(funit) padding + Objs(i)% index = i + Objs(i)% NumOfVertices = NumOfVertices + Objs(i)% partition = 1 + end do + + end associate + + close(unit=funit) + + end subroutine ReadTessellation + + subroutine STLfile_plot( this, iter ) + use MPI_Process_Info + use PhysicsStorage + implicit none + !-arguments---------------------------------------------- + class(STLfile), intent(inout) :: this + integer, intent(in) :: iter + !-local-variables---------------------------------------- + character(len=LINE_LENGTH) :: filename + integer :: i, j, funit + integer*2 :: padding = 0 + real*4, dimension(3) :: norm, vertex + character(len=80) :: header = repeat(' ',80) + + funit = UnusedUnit() + + write(filename,'(A,A,I10.10)') trim(this% filename),'_', iter + + open(funit,file='MESH/'//trim(filename)//'.stl', status='unknown',access='stream',form='unformatted') + + write(funit) header, this% NumOfObjs + + do i = 1, this% NumOfObjs + norm = this% ObjectsList(i)% normal + write(funit) norm(1), norm(2), norm(3) + do j = 1, size(this% ObjectsList(i)% vertices) + vertex = this% ObjectsList(i)% vertices(j)% coords * Lref + write(funit) vertex(1), vertex(2), vertex(3) + end do + write(funit) padding + end do + + close(funit) + + end subroutine STLfile_plot + + subroutine STLfile_GetMotionInfo( this, STLfilename, NumOfSTL ) + use FileReadingUtilities + use FTValueDictionaryClass + use PhysicsStorage + implicit none + !-arguments------------------------------------------------------- + type(STLfile), intent(inout) :: this + character(len=*), intent(in) :: STLfilename + integer, intent(in) :: NumOfSTL + !-local-arguments------------------------------------------------- + integer :: i + integer, allocatable :: motionAxis_STL + real(kind=RP), allocatable :: angularVelocity_STL, Velocity_STL + character(len=LINE_LENGTH) :: in_label, paramFile, & + motion_STL, STL_name + + this% move = .false. + + do i = 1, NumOfSTL + + write(in_label , '(A,I0)') "#define stl motion ", i + + call get_command_argument(1, paramFile) + call readValueInRegion ( trim ( paramFile ) , "stl name" , STL_name , in_label, "#end" ) + call readValueInRegion ( trim ( paramFile ) , "type" , motion_STL , in_label, "#end" ) + call readValueInRegion ( trim ( paramFile ) , "angular velocity" , angularVelocity_STL, in_label, "#end" ) + call readValueInRegion ( trim ( paramFile ) , "velocity" , Velocity_STL , in_label, "#end" ) + call readValueInRegion ( trim ( paramFile ) , "motion axis" , motionAxis_STL , in_label, "#end" ) + + if( trim(STLfilename) .ne. trim(STL_name) ) cycle + + this% move = .true. + + select case( trim(motion_STL) ) + case( "rotation" ) + this% motionType = ROTATION + case( "linear" ) + this% motionType = LINEAR + case default + print *, "STLfile_GetMotionInfo: motion not recognized. Available motions are ", ROTATION,"and",LINEAR,"." + error stop + end select + + if( allocated(angularVelocity_STL) ) then + this% angularVelocity = angularVelocity_STL + elseif( this% motionType .eq. ROTATION ) then + print *, "STLfile_GetMotionInfo: 'angular velocity' must be specified for ", ROTATION, " motion." + error stop + end if + + if( allocated(Velocity_STL) ) then + this% Velocity = Velocity_STL + elseif( this% motionType .eq. LINEAR ) then + print *, "STLfile_GetMotionInfo: 'velocity' must be specified for ", LINEAR, " motion." + error stop + end if + + if( allocated(motionAxis_STL) ) then + this% motionAxis = motionAxis_STL + if( this% motionAxis .gt. 3 .or. this% motionAxis .lt. 1 ) then + print *, "STLfile_GetMotionInfo: 'motion axis' =", this% motionAxis, " not valid:" + print *, "select 1 for x-axis, 2 for y-axis or 3 for z-axis." + error stop + end if + elseif( this% move ) then + print *, "STLfile_GetMotionInfo: 'motion axis' must be specified." + error stop + end if + + return + + end do + + end subroutine STLfile_GetMotionInfo + + subroutine STLfile_getRotationaMatrix( this, dt, angle ) + use PhysicsStorage + use FluidData + implicit none + !-arguments----------------------------- + class(STLfile), intent(inout):: this + real(kind=RP), intent(in) :: dt + real(kind=RP), optional, intent(in) :: angle + !-local-variables----------------------- + real(kind=RP) :: time, theta + + if( present(angle) ) then + + this% rotationMatrix = 0.0_RP + theta = PI/180.0_RP*angle + + select case( this% motionAxis ) + case( IX ) + this% rotationMatrix(1,1) = 1.0_RP + this% rotationMatrix(2,2) = cos(theta) + this% rotationMatrix(2,3) = -sin(theta) + this% rotationMatrix(3,2) = sin(theta) + this% rotationMatrix(3,3) = cos(theta) + case( IY ) + this% rotationMatrix(2,2) = 1.0_RP + this% rotationMatrix(1,1) = cos(theta) + this% rotationMatrix(1,3) = sin(theta) + this% rotationMatrix(3,1) = -sin(theta) + this% rotationMatrix(3,3) = cos(theta) + case( IZ ) + this% rotationMatrix(3,3) = 1.0_RP + this% rotationMatrix(1,1) = cos(theta) + this% rotationMatrix(1,2) = -sin(theta) + this% rotationMatrix(2,1) = sin(theta) + this% rotationMatrix(2,2) = cos(theta) + end select + return + end if + +#if defined(NAVIERSTOKES) + time = dt * Lref/refValues%V + + theta = this% angularVelocity * time + + this% rotationMatrix = 0.0_RP + + select case( this% motionAxis ) + case( IX ) + this% rotationMatrix(1,1) = 1.0_RP + this% rotationMatrix(2,2) = cos(theta) + this% rotationMatrix(2,3) = -sin(theta) + this% rotationMatrix(3,2) = sin(theta) + this% rotationMatrix(3,3) = cos(theta) + case( IY ) + this% rotationMatrix(2,2) = 1.0_RP + this% rotationMatrix(1,1) = cos(theta) + this% rotationMatrix(1,3) = sin(theta) + this% rotationMatrix(3,1) = -sin(theta) + this% rotationMatrix(3,3) = cos(theta) + case( IZ ) + this% rotationMatrix(3,3) = 1.0_RP + this% rotationMatrix(1,1) = cos(theta) + this% rotationMatrix(1,2) = -sin(theta) + this% rotationMatrix(2,1) = sin(theta) + this% rotationMatrix(2,2) = cos(theta) + end select +#endif + end subroutine STLfile_getRotationaMatrix + + subroutine STLfile_getDisplacement( this, dt ) + implicit none + !-arguments----------------------------- + class(STLfile), intent(inout):: this + real(kind=RP), intent(in) :: dt + + this% ds = this% Velocity * dt + + end subroutine STLfile_getDisplacement + + subroutine STL_updateNormals( this ) + use MappedGeometryClass + implicit none + !-arguments------------------------------------ + class(STLfile), intent(inout):: this + !-local-variables------------------------------ + real(kind=rp) :: du(NDIM), dv(NDIM), dw(NDIM) + integer :: i +!$omp parallel +!$omp do schedule(runtime) private(du,dv,dw) + do i = 1, this% NumOfObjs + du = this% ObjectsList(i)% vertices(2)% coords - this% ObjectsList(i)% vertices(1)% coords + dw = this% ObjectsList(i)% vertices(3)% coords - this% ObjectsList(i)% vertices(1)% coords + call vcross(du,dw,dv) + this% ObjectsList(i)% normal = dv/norm2(dv) + end do +!$omp end do +!$omp end parallel + end subroutine STL_updateNormals + + subroutine STLfile_destroy( this ) + + implicit none + !-arguments------------------------------ + class(STLfile), intent(inout) :: this + !-local-variables------------------------ + integer :: i + + do i = 1, this% NumOfObjs + deallocate(this% ObjectsList(i)% vertices) + end do + + deallocate(this% ObjectsList) + + end subroutine STLfile_destroy +!////////////////////////////////////////////// +! +! Procedures form STL triangles splitting +! +!////////////////////////////////////////////// +! SPLITTING TRIANGLES + subroutine STL_Clip( this, minplane, maxplane, axis ) + implicit none + !-arguments-------------------------------------------------------------------- + class(STLfile), intent(inout) :: this + real(kind=RP), intent(in) :: minplane, maxplane + integer, intent(in) :: axis + !-local-variables-------------------------------------------------------------- + type(ObjectLinkedList) :: ObjectsLinkedList, ObjectsLinkedListFinal + type(object_type), pointer :: obj + real(kind=RP) :: minplane_point(NDIM), maxplane_point(NDIM), & + minplane_normal(NDIM), maxplane_normal(NDIM), & + Objmax, Objmin, vertices(NDIM,3) + integer :: i, j + + minplane_point = 0.0_RP + maxplane_point = 0.0_RP + minplane_normal = 0.0_RP + maxplane_normal = 0.0_RP + + minplane_point(axis) = minplane + maxplane_point(axis) = maxplane + minplane_normal(axis) = -1.0_RP + maxplane_normal(axis) = 1.0_RP + + ObjectsLinkedList = ObjectLinkedList_Construct() + ObjectsLinkedListFinal = ObjectLinkedList_Construct() + + do i = 1, this% NumOfObjs + call ClipPloy( this% ObjectsList(i), maxplane_normal, maxplane_point, ObjectsLinkedList ) + end do + + obj => ObjectsLinkedList% head + + do i = 1, ObjectsLinkedList% NumOfObjs + call ClipPloy( obj, minplane_normal, minplane_point, ObjectsLinkedListFinal ) + obj => obj% next + end do + + call ObjectsLinkedList% destruct() + + call this% destroy() + + this% partition = 1 + this% NumOfObjs = ObjectsLinkedListFinal% NumOfObjs + + allocate(this% ObjectsList(this% NumOfObjs)) + + obj => ObjectsLinkedListFinal% head + + do i = 1, this% NumOfObjs + allocate(this% ObjectsList(i)% vertices(obj% NumOfVertices)) + do j = 1, obj% NumOfVertices + this% ObjectsList(i)% vertices(j)% coords = obj% vertices(j)% coords + end do + this% ObjectsList(i)% normal = obj% normal + this% ObjectsList(i)% index = i + this% ObjectsList(i)% NumOfVertices = obj% NumOfVertices + this% ObjectsList(i)% partition = 1 + obj => obj% next + end do + + call ObjectsLinkedListFinal% destruct() + + call this% describe(this% filename) + + call this% plot(0) + + end subroutine STL_Clip + + + subroutine ClipPloy( obj, plane_normal, plane_point, ObjectsLinkedList ) + use MappedGeometryClass + implicit none + !-arguments-------------------------------------------------------------------- + type(object_type), intent(in) :: obj + real(kind=rp), intent(in) :: plane_normal(:), plane_point(:) + type(ObjectLinkedList), intent(inout) :: ObjectsLinkedList + !-local-variables-------------------------------------------------------------- + real(kind=RP) :: PointFront(NDIM,4), PointBack(NDIM,4) + type(object_type) :: objBack + real(kind=RP) :: PointA(NDIM), PointB(NDIM), Point_inters(NDIM), v(NDIM),u(NDIM),W(NDIM) + integer :: PointA_Is, PointB_Is, n_front, n_back, i + + n_front = 0; n_back = 0 + + pointA = obj% vertices(obj% NumOfVertices)% coords + + PointA_Is = Point_wrt_Plane( plane_normal, plane_point, pointA ) + + do i = 1, obj% NumOfVertices + PointB = obj% vertices(i)% coords + PointB_Is = Point_wrt_Plane( plane_normal, plane_point, pointB ) + if( PointB_Is .eq. POINT_IN_FRONT_PLANE ) then + if( PointA_Is .eq. POINT_BEHIND_PLANE ) then + Point_inters = EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) + n_front = n_front + 1 + n_back = n_back + 1 + PointFront(:,n_front) = Point_Inters + PointBack(:,n_back) = Point_Inters + end if + n_front = n_front + 1 + PointFront(:,n_front) = PointB + elseif( PointB_Is .eq. POINT_BEHIND_PLANE ) then + if( PointA_Is .eq. POINT_IN_FRONT_PLANE ) then + Point_inters = EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) + n_front = n_front + 1 + n_back = n_back + 1 + PointFront(:,n_front) = Point_Inters + PointBack(:,n_back) = Point_Inters + elseif( PointA_Is .eq. POINT_ON_PLANE ) then + n_back = n_back + 1 + PointBack(:,n_back) = PointA + end if + n_back = n_back + 1 + PointBack(:,n_back) = PointB + else + n_front = n_front + 1 + PointFront(:,n_front) = PointB + if( PointA_Is .eq. POINT_BEHIND_PLANE ) then + n_back = n_back + 1 + PointBack(:,n_back) = PointB + end if + end if + PointA = PointB + PointA_Is = PointB_Is + end do + + ! take only back elements !! + if( n_back .eq. 3 ) then + call objBack% build( PointBack(:,1:n_back), obj% normal, obj% NumOfVertices, obj% index ) + call ObjectsLinkedList% add(objBack) + call objBack% destruct() + elseif( n_back .eq. 4 ) then + call objBack% build( PointBack(:,1:n_back-1), obj% normal, obj% NumOfVertices, obj% index ) + call ObjectsLinkedList% add(objBack) + call objBack% destruct() + call objBack% build( PointBack(:,(/n_back-1,n_back,1/)), obj% normal, obj% NumOfVertices, obj% index ) + call ObjectsLinkedList% add(objBack) + call objBack% destruct() + elseif( n_back .eq. 0 ) then + else + print *, "ClipPloy:: wrong number of vertices: ", n_back + error stop + end if + + end subroutine ClipPloy + + integer function Point_wrt_Plane( plane_normal, plane_point, point ) result( PointIs ) + use MappedGeometryClass + implicit none + !-arguments----------------------------------------------------------------- + real(kind=RP), dimension(:), intent(in) :: plane_normal, plane_point, point + !-local-variables----------------------------------------------------------- + real(kind=RP) :: d, eps + + d = dot_product(plane_normal,point) - dot_product(plane_normal,plane_point) + + if( d > EPSILON(eps) ) then + PointIs = POINT_IN_FRONT_PLANE + elseif( d < -EPSILON(eps) ) then + PointIs = POINT_BEHIND_PLANE + else + PointIs = POINT_ON_PLANE + end if + + end function Point_wrt_Plane + + function EdgePlaneIntersection( plane_normal, plane_point, PointA, PointB ) result( Point_inters ) + use MappedGeometryClass + implicit none + !-arguments----------------------------------------------------------------- + real(kind=RP), intent(in) :: plane_normal(:), plane_point(:), & + PointA(:), PointB(:) + real(kind=RP) :: Point_inters(NDIM) + !-local-variables----------------------------------------------------------- + real(kind=RP) :: B_A(NDIM), d, t + + B_A = PointB - PointA + + d = dot_product(plane_normal,plane_point) + + t = ( d - dot_product(plane_normal,PointA) )/dot_product(plane_normal,B_A) + + Point_inters = PointA + t*B_A + + end function EdgePlaneIntersection +!////////////////////////////////////////////// + + subroutine TecFileHeader( FileName, Title, I, J, K, funit, DATAPACKING, ZONETYPE ) + + implicit none + !-arguments------------------------------------------------------ + character(len=*), intent(in) :: FileName, Title, DATAPACKING + integer, intent(in) :: I, J, K + character(len=*), optional :: ZONETYPE + integer, intent(out) :: funit + + funit = UnusedUnit() + + open(funit,file=trim(FileName)//'.tec', status='unknown') + + write(funit,"(A9,A,A)") 'TITLE = "',trim(Title),'"' + write(funit,"(A23)") 'VARIABLES = "x","y","z"' + if( present(ZONETYPE) ) then + write(funit,"(A7,I0,A3,I0,A3,I0,A14,A,A11,A)") 'ZONE I=',I,',J=',J,',K=',K,', DATAPACKING=',trim(DATAPACKING),', ZONETYPE=',trim(ZONETYPE) + else + write(funit,"(A7,I0,A3,I0,A3,I0,A14,A)") 'ZONE I=',I,',J=',J,',K=',K,', DATAPACKING=',trim(DATAPACKING) + end if + + end subroutine TecFileHeader + +end module TessellationTypes diff --git a/Solver/src/libs/monitors/Monitors.f90 b/Solver/src/libs/monitors/Monitors.f90 index 83f4731a7..f20d93404 100644 --- a/Solver/src/libs/monitors/Monitors.f90 +++ b/Solver/src/libs/monitors/Monitors.f90 @@ -190,7 +190,7 @@ subroutine Monitor_WriteLabel ( self ) ! Write surface monitors labels ! ----------------------------- do i = 1 , self % no_of_surfaceMonitors - call self % surfaceMonitors(i) % WriteLabel + if( .not. self % surfaceMonitors(i) % IBM ) call self % surfaceMonitors(i) % WriteLabel end do call self % stats % WriteLabel @@ -317,7 +317,7 @@ subroutine Monitor_WriteValues ( self ) ! Print surface monitors ! ---------------------- do i = 1 , self % no_of_surfaceMonitors - call self % surfaceMonitors(i) % WriteValues ( self % bufferLine ) + if( .not. self % surfaceMonitors(i) % IBM ) call self % surfaceMonitors(i) % WriteValues ( self % bufferLine ) end do call self % stats % WriteValue @@ -337,7 +337,7 @@ subroutine Monitor_WriteValues ( self ) end subroutine Monitor_WriteValues - subroutine Monitor_UpdateValues ( self, mesh, t , iter, maxResiduals ) + subroutine Monitor_UpdateValues ( self, mesh, t , iter, maxResiduals, Autosave ) ! ! *************************************************************** ! This subroutine updates the values for the residuals, @@ -352,6 +352,7 @@ subroutine Monitor_UpdateValues ( self, mesh, t , iter, maxResiduals ) real(kind=RP) :: t integer :: iter real(kind=RP) :: maxResiduals(NCONS) + logical :: Autosave ! ! --------------- ! Local variables @@ -394,7 +395,13 @@ subroutine Monitor_UpdateValues ( self, mesh, t , iter, maxResiduals ) ! Update surface monitors ! ----------------------- do i = 1 , self % no_of_surfaceMonitors - call self % surfaceMonitors(i) % Update( mesh , self % bufferLine ) + if( self% surfaceMonitors(i)% IBM ) then + if( Autosave ) then + call self % surfaceMonitors(i) % Update( mesh , self % bufferLine, iter, t ) + end if + else + call self % surfaceMonitors(i) % Update( mesh , self % bufferLine, iter ) + endif end do ! ! Update statistics @@ -489,7 +496,7 @@ subroutine Monitor_WriteToFile ( self , mesh, force) #if defined(NAVIERSTOKES) do i = 1 , self % no_of_surfaceMonitors - call self % surfaceMonitors(i) % WriteToFile ( self % iter , self % t , self % bufferLine ) + if( .not. self % surfaceMonitors(i) % IBM ) call self % surfaceMonitors(i) % WriteToFile ( self % iter , self % t , self % bufferLine ) end do #endif ! @@ -671,4 +678,4 @@ end subroutine getNoOfMonitors end module MonitorsClass ! !/////////////////////////////////////////////////////////////////////////////////// -! +! \ No newline at end of file diff --git a/Solver/src/libs/monitors/SurfaceIntegrals.f90 b/Solver/src/libs/monitors/SurfaceIntegrals.f90 index df0086aec..18856a4a0 100644 --- a/Solver/src/libs/monitors/SurfaceIntegrals.f90 +++ b/Solver/src/libs/monitors/SurfaceIntegrals.f90 @@ -13,10 +13,10 @@ module SurfaceIntegrals use mpi #endif implicit none - + private - public SURFACE, TOTAL_FORCE, PRESSURE_FORCE, VISCOUS_FORCE, MASS_FLOW, FLOW_RATE - public ScalarSurfaceIntegral, VectorSurfaceIntegral + public SURFACE, TOTAL_FORCE, PRESSURE_FORCE, VISCOUS_FORCE, MASS_FLOW, FLOW_RATE, PRESSURE_DISTRIBUTION + public ScalarSurfaceIntegral, VectorSurfaceIntegral, ScalarDataReconstruction, VectorDataReconstruction integer, parameter :: SURFACE = 1 integer, parameter :: TOTAL_FORCE = 2 @@ -24,6 +24,7 @@ module SurfaceIntegrals integer, parameter :: VISCOUS_FORCE = 4 integer, parameter :: MASS_FLOW = 5 integer, parameter :: FLOW_RATE = 6 + integer, parameter :: PRESSURE_DISTRIBUTION = 7 integer, parameter :: USER_DEFINED = 99 ! ! ======== @@ -36,7 +37,7 @@ module SurfaceIntegrals ! !//////////////////////////////////////////////////////////////////////////////////////// ! - function ScalarSurfaceIntegral(mesh, zoneID, integralType) result(val) + function ScalarSurfaceIntegral(mesh, zoneID, integralType, iter) result(val) ! ! ----------------------------------------------------------- ! This function computes scalar integrals, that is, those @@ -51,26 +52,19 @@ function ScalarSurfaceIntegral(mesh, zoneID, integralType) result(val) implicit none class(HexMesh), intent(inout), target :: mesh integer, intent(in) :: zoneID - integer, intent(in) :: integralType + integer, intent(in) :: integralType, iter real(kind=RP) :: val, localval ! ! --------------- ! Local variables ! --------------- ! - integer :: zonefID, fID, eID, fIDs(6), ierr + integer :: zonefID, fID, eID, fIDs(6), ierr class(Element), pointer :: elements(:) ! ! Initialization -! -------------- +! -------------- val = 0.0_RP - - - if( mesh% IBM% active ) then - val = ScalarDataReconstruction( mesh% IBM, mesh% elements, integralType, zoneID ) - return - end if - ! ! Loop the zone to get faces and elements ! --------------------------------------- @@ -106,7 +100,7 @@ function ScalarSurfaceIntegral(mesh, zoneID, integralType) result(val) ! Loop the zone to get faces and elements ! --------------------------------------- !$omp do private(fID) reduction(+:val) schedule(runtime) - do zonefID = 1, mesh % zones(zoneID) % no_of_faces + do zonefID = 1, mesh % zones(zoneID) % no_of_faces ! ! Face global ID ! -------------- @@ -166,7 +160,7 @@ function ScalarSurfaceIntegral_Face(f, integralType) result(val) ! ! *********************************** ! Computes the mass-flow integral -! I = \int rho \vec{v}·\vec{n}dS +! I = \int rho \vec{v}·\vec{n}dS ! *********************************** ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -180,11 +174,11 @@ function ScalarSurfaceIntegral_Face(f, integralType) result(val) end do ; end do - case ( FLOW_RATE ) + case ( FLOW_RATE ) ! ! *********************************** ! Computes the flow integral -! val = \int \vec{v}·\vec{n}dS +! val = \int \vec{v}·\vec{n}dS ! *********************************** ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -194,14 +188,14 @@ function ScalarSurfaceIntegral_Face(f, integralType) result(val) val = val + (1.0_RP / Q(IRHO,i,j))*(Q(IRHOU,i,j) * f % geom % normal(1,i,j) & + Q(IRHOV,i,j) * f % geom % normal(2,i,j) & + Q(IRHOW,i,j) * f % geom % normal(3,i,j) ) & - * spAxi % w(i) * spAeta % w(j) * f % geom % jacobian(i,j) + * spAxi % w(i) * spAeta % w(j) * f % geom % jacobian(i,j) end do ; end do case ( PRESSURE_FORCE ) ! ! *********************************** ! Computes the pressure integral -! val = \int pdS +! val = \int pdS ! *********************************** ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -209,14 +203,14 @@ function ScalarSurfaceIntegral_Face(f, integralType) result(val) ! Compute the integral ! -------------------- p = Pressure(Q(:,i,j)) - val = val + p * spAxi % w(i) * spAeta % w(j) * f % geom % jacobian(i,j) + val = val + p * spAxi % w(i) * spAeta % w(j) * f % geom % jacobian(i,j) end do ; end do case ( USER_DEFINED ) ! TODO end select end associate - + nullify (spAxi, spAeta) end function ScalarSurfaceIntegral_Face ! @@ -226,7 +220,7 @@ end function ScalarSurfaceIntegral_Face ! !//////////////////////////////////////////////////////////////////////////////////////// ! - function VectorSurfaceIntegral(mesh, zoneID, integralType) result(val) + function VectorSurfaceIntegral(mesh, zoneID, integralType, iter) result(val) ! ! ----------------------------------------------------------- ! This function computes scalar integrals, that is, those @@ -242,9 +236,9 @@ function VectorSurfaceIntegral(mesh, zoneID, integralType) result(val) use mpi #endif implicit none - class(HexMesh), intent(inout), target :: mesh + class(HexMesh), intent(inout), target :: mesh integer, intent(in) :: zoneID - integer, intent(in) :: integralType + integer, intent(in) :: integralType, iter real(kind=RP) :: val(NDIM) real(kind=RP) :: localVal(NDIM) real(kind=RP) :: valx, valy, valz @@ -257,17 +251,11 @@ function VectorSurfaceIntegral(mesh, zoneID, integralType) result(val) class(Element), pointer :: elements(:) ! ! Initialization -! -------------- +! -------------- val = 0.0_RP valx = 0.0_RP valy = 0.0_RP valz = 0.0_RP - - if( mesh% IBM% active ) then - val = VectorDataReconstruction( mesh% IBM, mesh% elements, integralType, zoneID ) - return - end if - ! ! ************************* ! Perform the interpolation @@ -305,7 +293,7 @@ function VectorSurfaceIntegral(mesh, zoneID, integralType) result(val) ! Loop the zone to get faces and elements ! --------------------------------------- !$omp do private(fID,localVal) reduction(+:valx,valy,valz) schedule(runtime) - do zonefID = 1, mesh % zones(zoneID) % no_of_faces + do zonefID = 1, mesh % zones(zoneID) % no_of_faces ! ! Face global ID ! -------------- @@ -356,7 +344,7 @@ function VectorSurfaceIntegral_Face(f, integralType) result(val) associate( Q => f % storage(1) % Q, & U_x => f % storage(1) % U_x, & U_y => f % storage(1) % U_y, & - U_z => f % storage(1) % U_z ) + U_z => f % storage(1) % U_z ) select case ( integralType ) case ( SURFACE ) ! @@ -373,8 +361,8 @@ function VectorSurfaceIntegral_Face(f, integralType) result(val) case ( TOTAL_FORCE ) ! ! ************************************************ -! Computes the total force experienced by the zone -! F = \int p \vec{n}ds - \int tau'·\vec{n}ds +! Computes the total force experienced by the zone +! F = \int p \vec{n}ds - \int tau'·\vec{n}ds ! ************************************************ ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -389,11 +377,11 @@ function VectorSurfaceIntegral_Face(f, integralType) result(val) end do ; end do - case ( PRESSURE_FORCE ) + case ( PRESSURE_FORCE ) ! ! **************************************************** -! Computes the pressure forces experienced by the zone -! F = \int p \vec{n}ds +! Computes the pressure forces experienced by the zone +! F = \int p \vec{n}ds ! **************************************************** ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -407,11 +395,11 @@ function VectorSurfaceIntegral_Face(f, integralType) result(val) end do ; end do - case ( VISCOUS_FORCE ) + case ( VISCOUS_FORCE ) ! ! ************************************************ -! Computes the total force experienced by the zone -! F = - \int tau'·\vec{n}ds +! Computes the total force experienced by the zone +! F = - \int tau'·\vec{n}ds ! ************************************************ ! do j = 0, f % Nf(2) ; do i = 0, f % Nf(1) @@ -430,7 +418,7 @@ function VectorSurfaceIntegral_Face(f, integralType) result(val) end associate nullify (spAxi, spAeta) end function VectorSurfaceIntegral_Face - + ! !//////////////////////////////////////////////////////////////////////////////////////// ! @@ -438,8 +426,8 @@ end function VectorSurfaceIntegral_Face ! ! SURFACE INTEGRALS ! -!//////////////////////////////////////////////////////////////////////////////////////// - function ScalarDataReconstruction( IBM, elements, integralType, STLNum ) result(val) +!//////////////////////////////////////////////////////////////////////////////////////// + subroutine ScalarDataReconstruction( IBM, elements, STLNum, integralType, iter ) use TessellationTypes use MappedGeometryClass use IBMClass @@ -456,97 +444,69 @@ function ScalarDataReconstruction( IBM, elements, integralType, STLNum ) result( ! in the form: ! val = \int \vec{v}·\vec{n}dS ! The data at the boundary point (BP) is computed through a Inverse Distance Weight -! procedure. To do that the closest n points to the BP are selected using a Nearest -! Neighbor Algorithm and their distance is stored in the vector Dist. -! The surface integal is computed on the triangles the body is made of. The BP point -! are computed using a linear map for each triangle. +! procedure. ! ----------------------------------------------------------------------------------------- implicit none - !-arguments--------------------------------------------------------------------------------- - type(IBM_type), intent(inout) :: IBM - type(element), dimension(:), intent(in) :: elements - integer, intent(in) :: integralType, STLNum - real(kind=rp) :: val - !-local-variables--------------------------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: Point - real(kind=rp) :: LowerBound, IDW_Value, & - ObjIntegral, & - Dist, LocalVal - real(kind=rp), dimension(:,:), allocatable :: bpQ - integer :: i, j, k, ierr + !-arguments-------------------------------------------------------- + type(IBM_type), intent(inout) :: IBM + type(element), intent(in) :: elements(:) + integer, intent(in) :: integralType, STLNum, iter + !-local-variables------------------------------------------------- + real(kind=rp) :: Dist + real(kind=rp), allocatable :: InterpolatedValue(:,:) + integer :: i, j, k + + if( .not. IBM% Integral(STLNum)% compute ) return + + allocate( InterpolatedValue(size(IBM% root(STLNum)% ObjectsList),3) ) - val = 0.0_RP - - allocate( bpQ(NCONS,BandPoints_ALL% NumOfObjs) ) - - call IBM% BandPoint_state(elements, bpQ) - -!$omp parallel shared(IBM,val,bpQ,integralType,STLNum,i) -!$omp do schedule(runtime) private(j,k,Point,IDW_Value,ObjIntegral,LowerBound,Dist) + call IBM% BandPoint_state(elements, STLNum, .false.) +!$omp parallel +!$omp do schedule(runtime) private(j,k,Dist) do i = 1, size(IBM% root(STLNum)% ObjectsList) - - if( IBM% root(STLNum)% ObjectsList(i)% ComputeIntegrals ) then - - ObjIntegral = 0.0_RP - - if( integralType .eq. SURFACE ) then - ObjIntegral = 1.0_RP - else - do j = 1, IBM% Integral(STLNum)% n_of_Q_points - - if( .not. IBM% Integral(STLNum)% ListComputed ) then - - call OBB(STLNum)% ChangeRefFrame(IBM% Integral(STLNum)% IntegObjs(i)% x(:,j), 'global', Point) - LowerBound = -huge(1.0_RP) - - do k = 1, IBM% kdtree_n_of_interPoints - call MinimumDistancePoints( Point, IBM% rootPoints, Dist, LowerBound, k, & - IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j) ) - LowerBound = POW2(Dist) - end do - - end if - - IDW_Value = IDWScalarValue( Point, IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j), & - IBM% root(STLNum)% ObjectsList(i)% normal, & - bpQ(:,IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j)), & - integralType ) - - ObjIntegral = ObjIntegral + IBM% Integral(STLNum)% weights(j) * IDW_Value - - end do - end if - -!$omp critical - val = val + IBM% Integral(STLNum)% IntegObjs(i)% Area * ObjIntegral -!$omp end critical - end if - - end do -!$omp end do -!$omp end parallel - + do j = 1, size(IBM% root(STLNum)% ObjectsList(i)% vertices) + if( .not. IBM% Integral(STLNum)% ListComputed ) then + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints = 0 + do k = 1, IBM% NumOfInterPoints + call MinimumDistancePoints( IBM% root(STLNum)% ObjectsList(i)% vertices(j)% coords, & + IBM% rootPoints(STLNum), IBM% BandRegion(STLNum), Dist, k, & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints ) + end do + + call GetMatrixInterpolationSystem( IBM% root(STLNum)% ObjectsList(i)% vertices(j)% coords, & + IBM% BandRegion(STLNum)% x(IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi, & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% b, IBM% InterpolationType ) + + end if + + InterpolatedValue(i,j) = InterpolatedScalarValue( Q = IBM% BandRegion(STLNum)% Q(:,IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + invPhi = IBM% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi, & + b = IBM% root(STLNum)% ObjectsList(i)% vertices(j)% b, & + normal = IBM% root(STLNum)% ObjectsList(i)% normal, & + integralType = integralType ) + end do + end do +!$omp end do +!$omp end parallel if( IBM% stl(STLNum)% move ) then IBM% Integral(STLNum)% ListComputed = .false. - else + else IBM% Integral(STLNum)% ListComputed = .true. - end if + end if -#ifdef _HAS_MPI_ - localVal = val - call mpi_allreduce(localVal, val, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - - deallocate(bpQ) - - end function ScalarDataReconstruction + call GenerateScalarmonitorTECfile( IBM% root(STLNum)% ObjectsList, InterpolatedValue, STLNum, integralType, iter ) + + deallocate(InterpolatedValue) + + end subroutine ScalarDataReconstruction ! !//////////////////////////////////////////////////////////////////////////////////////// ! ! VECTOR INTEGRALS ! -!//////////////////////////////////////////////////////////////////////////////////////// - function VectorDataReconstruction( IBM, elements, integralType, STLNum ) result(val) +!//////////////////////////////////////////////////////////////////////////////////////// + subroutine VectorDataReconstruction( IBM, elements, STLNum, integralType, iter ) use TessellationTypes use MappedGeometryClass use IBMClass @@ -557,118 +517,84 @@ function VectorDataReconstruction( IBM, elements, integralType, STLNum ) result( use omp_lib #ifdef _HAS_MPI_ use mpi -#endif +#endif ! ! ----------------------------------------------------------------------------------------- ! This function computes Vector integrals, that is, those ! in the form: ! val = \int \vec{v}·\vec{n}dS ! The data at the boundary point (BP) is computed through a Inverse Distance Weight -! procedure. To do that the closest n points to the BP are selected using a Nearest -! Neighbor Algorithm and their distance is stored in the vector Dist. -! The surface integal is computed on the triangles the body is made of. The BP point -! are computed using a linear map for each triangle. +! procedure. ! ----------------------------------------------------------------------------------------- implicit none !-arguments--------------------------------------------------------------------------------- - type(IBM_type), intent(inout) :: IBM - type(element), dimension(:), intent(in) :: elements - integer, intent(in) :: integralType, STLNum - real(kind=rp), dimension(NDIM) :: val + type(IBM_type), intent(inout) :: IBM + type(element), intent(in) :: elements(:) + integer, intent(in) :: integralType, STLNum, iter !-local-variables--------------------------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: IDW_Value, ObjIntegral, & - localVal, Point, & - tau_w - real(kind=rp) :: LowerBound, Dist - integer :: i, j, k, symPlaneIndex, & - ierr - real(kind=RP), dimension(:,:), allocatable :: bpQ, bpU_x, bpU_y, bpU_z + real(kind=rp) :: Dist, LocNormal(NDIM), v(NDIM), w(NDIM) + integer :: i, j, k + real(kind=RP), allocatable :: IntegratedValue(:,:,:) + if( .not. IBM% Integral(STLNum)% compute ) return - real(kind=rp) :: newdist - integer :: l - - val = 0.0_RP - - allocate( bpQ(NCONS,BandPoints_ALL% NumOfObjs), & - bpU_x(NCONS,BandPoints_ALL% NumOfObjs), & - bpU_y(NCONS,BandPoints_ALL% NumOfObjs), & - bpU_z(NCONS,BandPoints_ALL% NumOfObjs) ) - - call IBM% BandPoint_state(elements, bpQ, bpU_x, bpU_y, bpU_z) + allocate( IntegratedValue(NDIM,size(IBM% root(STLNum)% ObjectsList),3) ) -!$omp parallel shared(IBM,val,bpQ,bpU_x,bpU_y,bpU_z,integralType,STLNum,i) -!$omp do schedule(runtime) private(j,k,Point,IDW_Value,ObjIntegral,LowerBound,Dist,tau_w) + call IBM% BandPoint_state( elements, STLNum, .true. ) +!$omp parallel +!$omp do schedule(runtime) private(j,k,Dist,v,w,LocNormal) do i = 1, size(IBM% root(STLNum)% ObjectsList) + do j = 1, size(IBM% root(STLNum)% ObjectsList(i)% vertices) + if( .not. IBM% Integral(STLNum)% ListComputed ) then + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints = 0 + do k = 1, IBM% NumOfInterPoints + if( IBM% Wallfunction ) then + v = IBM% root(STLNum)% ObjectsList(i)% vertices(2)% coords-IBM% root(STLNum)% ObjectsList(i)% vertices(1)% coords + w = IBM% root(STLNum)% ObjectsList(i)% vertices(3)% coords-IBM% root(STLNum)% ObjectsList(i)% vertices(1)% coords + + LocNormal(1) = v(2)*w(3) - v(3)*w(2); LocNormal(2) = v(3)*w(1) - v(1)*w(3); LocNormal(3) = v(1)*w(2) - v(2)*w(1) + LocNormal = LocNormal/norm2(LocNormal) + call MinimumDistancePoints( IBM% root(STLNum)% ObjectsList(i)% vertices(j)% coords + IBM% IP_Distance*LocNormal, & + IBM% rootPoints(STLNum), IBM% BandRegion(STLNum), Dist, k, & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints ) + else + call MinimumDistancePoints( IBM% root(STLNum)% ObjectsList(i)% vertices(j)% coords, & + IBM% rootPoints(STLNum), IBM% BandRegion(STLNum), Dist, k, & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints ) + end if + end do - if( IBM% root(STLNum)% ObjectsList(i)% ComputeIntegrals ) then - - ObjIntegral = 0.0_RP - - do j = 1, IBM% Integral(STLNum)% n_of_Q_points - - if( .not. IBM% Integral(STLNum)% ListComputed ) then - - call OBB(STLNum)% ChangeRefFrame(IBM% Integral(STLNum)% IntegObjs(i)% x(:,j), 'global', Point) - LowerBound = -huge(1.0_RP) - - IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j) = 0 - - do k = 1, IBM% kdtree_n_of_interPoints - call MinimumDistancePoints( Point, IBM% rootPoints, Dist, LowerBound, k, & - IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j) ) - LowerBound = POW2(Dist) - end do - - end if - - !should be performed at each iteration? i.e. does the yplus change at each iteration? -!~ if( IBM% Wallfunction ) then -!~ IBM% Integral(STLNum)% NearestPointsTurbulence(IBM% root(STLNum)% ObjectsList(i)% index)% PointsIndex(:,l) = 0 -!~ call GetIDW_value( Point, normal, Qtmp(:,IBM% Integral(STLNum)% NearestPoints(IBM% root(STLNum)% ObjectsList(i)% index)% PointsIndex(:,l)), & -!~ IBM% Integral(STLNum)% NearestPoints(IBM% root(STLNum)% ObjectsList(i)% index)% PointsIndex(:,l), Q_Point ) -!~ call GetIBM_WallShearStress( Point, Q_Point, IBM% root(STLNum)% ObjectsList(i), IBM% rootPoints, STLNum, & -!~ IBM% Integral(STLNum)% NearestPointsTurbulence(IBM% root(STLNum)% ObjectsList(i)% index)% PointsIndex(:,l), & -!~ Qtmp, tau_w ) -!~ else - tau_w = 0.0_RP -!~ end if - - IDW_Value = IDWVectorValue( Point, IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j), & - IBM% root(STLNum)% ObjectsList(i)% normal, & - bpQ(:,IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j)), & - bpU_x(:,IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j)), & - bpU_y(:,IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j)), & - bpU_z(:,IBM% Integral(STLNum)% IntegObjs(i)% PointsIndex(:,j)), & - tau_w, IBM% Wallfunction, integralType ) - - ObjIntegral = ObjIntegral + IBM% Integral(STLNum)% weights(j) * IDW_Value - - end do - -!$omp critical - val = val + IBM% Integral(STLNum)% IntegObjs(i)% Area * ObjIntegral -!$omp end critical - - end if - end do -!$omp end do + call GetMatrixInterpolationSystem( IBM% root(STLNum)% ObjectsList(i)% vertices(j)% coords, & + IBM% BandRegion(STLNum)% x(IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi, & + IBM% root(STLNum)% ObjectsList(i)% vertices(j)% b, IBM% InterpolationType ) + end if + + IntegratedValue(:,i,j) = IntegratedVectorValue( Q = IBM% BandRegion(STLNum)%Q(:,IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + U_x = IBM% BandRegion(STLNum)%U_x(:,IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + U_y = IBM% BandRegion(STLNum)%U_y(:,IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + U_z = IBM% BandRegion(STLNum)%U_z(:,IBM% root(STLNum)% ObjectsList(i)% vertices(j)% nearestPoints), & + invPhi = IBM% root(STLNum)% ObjectsList(i)% vertices(j)% invPhi, & + b = IBM% root(STLNum)% ObjectsList(i)% vertices(j)% b, & + normal = IBM% root(STLNum)% ObjectsList(i)% normal, & + y = IBM% IP_Distance, & + Wallfunction = IBM% Wallfunction, & + integralType = integralType ) + end do + end do +!$omp end do !$omp end parallel - if( IBM% stl(STLNum)% move ) then IBM% Integral(STLNum)% ListComputed = .false. else IBM% Integral(STLNum)% ListComputed = .true. end if - -#ifdef _HAS_MPI_ - localVal = val - call mpi_allreduce(localVal, val, NDIM, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD, ierr) -#endif - - deallocate(bpQ, bpU_x, bpU_y, bpU_z) - end function VectorDataReconstruction + call GenerateVectormonitorTECfile( IBM% root(STLNum)% ObjectsList, IntegratedValue, STLNum, integralType, iter ) + + deallocate(IntegratedValue) + + end subroutine VectorDataReconstruction ! !//////////////////////////////////////////////////////////////////////////////////////// ! @@ -677,244 +603,285 @@ end function VectorDataReconstruction ! SCALAR INTERPOLATION ! !//////////////////////////////////////////////////////////////////////////////////////// - function IDWScalarValue( Point, PointsIndex, normal, Q, integralType ) result( outvalue ) - use TessellationTypes - use MappedGeometryClass - use KDClass - use MPI_IBMUtilities + function InterpolatedScalarValue( Q, invPhi, b, normal, integralType ) result( outvalue ) + use IBMClass implicit none ! ! ----------------------------------------------------------- -! This function computes the IDW interpolat for a scalar -! quantity in the point "Point". +! This function computes the IDW interpolat for a scalar +! quantity in the point "Point". ! Available scalars are: ! Mass flow ! Flow rate ! Pressure ! ----------------------------------------------------------- !-arguments-------------------------------------------------------------- - integer, dimension(:), intent(in) :: PointsIndex - real(kind=rp), dimension(NDIM), intent(in) :: Point, normal - real(kind=rp), dimension(:,:), intent(in) :: Q - integer, intent(in) :: integralType - real(kind=rp) :: outvalue + real(kind=rp), intent(in) :: Q(:,:), invPhi(:,:), b(:), & + normal(:) + integer, intent(in) :: integralType + real(kind=rp) :: outvalue !-local-variables-------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: DistanceNormal - real(kind=rp) :: sqrd1, d1, d2, num, den, P, & - tau(NDIM,NDIM), distanceSqr - integer :: i, k + real(kind=rp) :: Qi(NCONS), P + integer :: i - num = 0.0_RP; den = 0.0_RP + outvalue = 0.0_RP select case( integralType ) - + case( MASS_FLOW ) - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) - - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do - - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) - - num = num - (1.0_RP / Q(1,i))*(Q(2,i)*normal(1) + Q(3,i)*normal(2) + Q(4,i)*normal(3))/d1 - den = den + 1.0_RP/d1 - - end do + do i = 1, NCONS + Qi(i) = GetInterpolatedValue( Q(i,:), invPhi, b ) + end do + + outvalue = - (1.0_RP / Qi(IRHO))*(Qi(IRHOU)*normal(1) + Qi(IRHOV)*normal(2) + Qi(IRHOW)*normal(3)) case ( FLOW_RATE ) - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) - - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do - - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) + do i = 1, NCONS + Qi(i) = GetInterpolatedValue( Q(i,:), invPhi, b ) + end do + + outvalue = - (Qi(IRHOU)*normal(1) + Qi(IRHOV)*normal(2) + Qi(IRHOW)*normal(3)) - num = num - (Q(2,i)*normal(1) + Q(3,i)*normal(2) + Q(4,i)*normal(3))/d1 - den = den + 1.0_RP/d1 - - end do - - case( PRESSURE_FORCE ) + case( PRESSURE_DISTRIBUTION ) - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) - - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do - - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) - - P = pressure( Q(:,i) ) - - num = num - P/d1 - den = den + 1.0_RP/d1 - - end do - - case ( USER_DEFINED ) ! TODO + do i = 1, NCONS + Qi(i) = GetInterpolatedValue( Q(i,:), invPhi, b ) + end do + + outvalue = pressure(Qi) + case ( USER_DEFINED ) ! TODO end select - - outvalue = num/den - - end function IDWScalarValue + + end function InterpolatedScalarValue ! !//////////////////////////////////////////////////////////////////////////////////////// ! ! VECTOR INTERPOLATION ! !//////////////////////////////////////////////////////////////////////////////////////// - function IDWVectorValue( Point, PointsIndex, normal, Q, U_x, U_y, U_z, tau_w, Wallfunction, integralType ) result( outvalue ) - use TessellationTypes - use MappedGeometryClass - use KDClass - use MPI_IBMUtilities + function IntegratedVectorValue( Q, U_x, U_y, U_z, invPhi, b, normal, y, Wallfunction, integralType ) result( outvalue ) use IBMClass + use VariableConversion + use FluidData +#if defined(NAVIERSTOKES) + use WallFunctionBC +#endif implicit none ! ! ----------------------------------------------------------- -! This function computes the IDW interpolat for a vector -! quantity in the point "Point". +! This function computes the IDW interpolat for a vector +! quantity in the point "Point". ! Available scalars are: ! Total force ! Pressure force ! Viscous force -! ----------------------------------------------------------- - !-arguments-------------------------------------------------------------- - integer, dimension(:), intent(in) :: PointsIndex - real(kind=rp), dimension(NDIM), intent(in) :: Point, normal, tau_w - real(kind=rp), dimension(:,:), intent(in) :: Q, U_x, U_y, U_z - integer, intent(in) :: integralType - logical, intent(in) :: Wallfunction - real(kind=rp), dimension(NDIM) :: outvalue - !-local-variables-------------------------------------------------------- - real(kind=rp), dimension(NDIM) :: DistanceNormal, num - real(kind=rp) :: sqrd1, d1, d2, den, P, tau(NDIM,NDIM), & - num1, distanceSqr - integer :: i, k - - num = 0.0_RP; den = 0.0_RP; outvalue = 0.0_RP +! ----------------------------------------------------------- + !-arguments----------------------------------------------------------------- + real(kind=rp), intent(in) :: Q(:,:), U_x(:,:), U_y(:,:), & + U_z(:,:), normal(:), invPhi(:,:), & + b(:) + real(kind=rp), intent(in) :: y + logical, intent(in) :: Wallfunction + integer, intent(in) :: integralType + real(kind=rp) :: outvalue(NDIM) + !-local-variables----------------------------------------------------------- + integer :: i + real(kind=rp) :: viscStress(NDIM), U(NDIM), U_t(NDIM), tangent(NDIM), & + Qi(NCONS), U_xi(NCONS), U_yi(NCONS), U_zi(NCONS), & + tau(NDIM,NDIM), P, T, T_w, rho_w, mu, nu, u_II, u_tau, & + tau_w, kappa_ + outvalue = 0.0_RP + select case( integralType ) - + case ( TOTAL_FORCE ) - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) + do i = 1, NCONS + Qi(i) = GetInterpolatedValue( Q(i,:), invPhi, b ) + end do - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do + P = pressure(Qi) - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) + if( Wallfunction ) then +#if defined(NAVIERSTOKES) + T = Temperature(Qi) + call get_laminar_mu_kappa(Qi,mu,kappa_) + nu = mu/Qi(IRHO) + + U = Qi(IRHOU:IRHOW)/Qi(IRHO) + U_t = U - ( dot_product(U,normal) * normal ) + + tangent = U_t/norm2(U_t) - P = pressure( Q(:,i) ) + u_II = dot_product(U,tangent) - if( Wallfunction ) then - num = num + (-P * normal)/d1 - else - call getStressTensor(Q(:,i), U_x(:,i), U_y(:,i), U_z(:,i), tau) - num = num + (-P * normal + matmul(tau,normal))/d1 - end if - - den = den + 1.0_RP/d1 - - end do + u_tau = u_tau_f( u_II, y, nu, u_tau0=0.1_RP ) - if( Wallfunction ) then - outvalue = num/den + tau_w + T_w = T + (dimensionless% Pr)**(1._RP/3._RP)/(2.0_RP*thermodynamics% cp) * POW2(u_II) + T_w = T_w * refvalues% T + rho_w = P*refvalues% p/(thermodynamics% R * T_w) + rho_w = rho_w/refvalues% rho +#endif + tau_w = rho_w*POW2(u_tau) + + viscStress = tau_w*tangent else - outvalue = num/den + do i = 1, NCONS + U_xi(i) = GetInterpolatedValue( U_x(i,:), invPhi, b ) + U_yi(i) = GetInterpolatedValue( U_y(i,:), invPhi, b ) + U_zi(i) = GetInterpolatedValue( U_z(i,:), invPhi, b ) + end do + + call getStressTensor(Qi, U_xi, U_yi, U_zi, tau) + + viscStress = matmul(tau,normal) end if + + outvalue = -P * normal + viscStress case( PRESSURE_FORCE ) - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) + do i = 1, NCONS + Qi(i) = GetInterpolatedValue( Q(i,:), invPhi, b ) + end do - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do + P = pressure(Qi) + + outvalue = -P * normal + + case( VISCOUS_FORCE ) - sqrd1 = distanceSqr - POW2(d2) - - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) - - P = pressure( Q(:,i) ) + if( Wallfunction ) then +#if defined(NAVIERSTOKES) + T = Temperature(Qi) + call get_laminar_mu_kappa(Qi,mu,kappa_) + nu = mu/Qi(IRHO) + + U = Qi(IRHOU:IRHOW)/Qi(IRHO) + U_t = U - ( dot_product(U,normal) * normal ) + + tangent = U_t/norm2(U_t) - num = num - P*normal/d1 - den = den + 1.0_RP/d1 + u_II = dot_product(U,tangent) - end do + u_tau = u_tau_f( u_II, y, nu, u_tau0=0.1_RP ) - outvalue = num/den - - case( VISCOUS_FORCE ) - - if( Wallfunction ) then - outvalue = tau_w - return - end if - - do i = 1, size(PointsIndex) - - DistanceNormal = BandPoints_ALL% x(PointsIndex(i))% coords - Point - d2 = vDot(DistanceNormal, normal) + T_w = T + (dimensionless% Pr)**(1._RP/3._RP)/(2.0_RP*thermodynamics% cp) * POW2(u_II) + T_w = T_w * refvalues% T + rho_w = P*refvalues% p/(thermodynamics% R * T_w) + rho_w = rho_w/refvalues% rho +#endif + tau_w = rho_w*POW2(u_tau) - distanceSqr = 0.0_RP - do k = 1, NDIM - distanceSqr = distanceSqr + POW2(BandPoints_ALL% x(PointsIndex(i))% coords(k) - Point(k)) - end do - - sqrd1 = distanceSqr - POW2(d2) - if( AlmostEqual(sqrd1,0.0_RP) ) sqrd1 = 0.0_RP - d1 = sqrt(sqrd1) + viscStress = tau_w*tangent + else + do i = 1, NCONS + U_xi(i) = GetInterpolatedValue( U_x(i,:), invPhi, b ) + U_yi(i) = GetInterpolatedValue( U_y(i,:), invPhi, b ) + U_zi(i) = GetInterpolatedValue( U_z(i,:), invPhi, b ) + end do - call getStressTensor(Q(:,i), U_x(:,i), U_y(:,i), U_z(:,i), tau) + call getStressTensor(Qi, U_xi, U_yi, U_zi, tau) - num = num + matmul(tau,normal)/d1 - den = den + 1.0_RP/d1 - - end do + viscStress = matmul(tau,normal) + end if - outvalue = num/den + outvalue = viscStress - case ( USER_DEFINED ) ! TODO + case ( USER_DEFINED ) ! TODO end select + + end function IntegratedVectorValue - end function IDWVectorValue + subroutine GenerateScalarmonitorTECfile( ObjectsList, scalarState, STLNum, integralType, iter ) + use MPI_Process_Info + use TessellationTypes + use MPI_IBMUtilities + use IBMClass + implicit none + !-arguments------------------------------------------------------- + type(Object_type), intent(in) :: ObjectsList(:) + real(kind=RP), intent(in) :: scalarState(:,:) + integer, intent(in) :: STLNum, integralType, iter + !-local-variables------------------------------------------------- + real(kind=RP), allocatable :: x(:), y(:), z(:), scalar(:) + character(len=LINE_LENGTH) :: FileName, FinalName + + if( MPI_Process% doMPIAction ) then + call sendScalarPlotRoot( ObjectsList, STLNum, scalarState ) + end if + if( MPI_Process% isRoot ) then + call recvScalarPlotRoot( ObjectsList, STLNum, scalarState, x, y, z, scalar ) + end if + + if( .not. MPI_Process% isRoot ) return + + select case(integralType) + case( MASS_FLOW ) + FileName = 'MASS_FLOW_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLScalarTEC( x, y, z, scalar, STLNum, FinalName, 'MASS FLOW', '"x","y","z","MassFlow"' ) + case( FLOW_RATE ) + FileName = 'FLOW_RATE_FORCE_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLScalarTEC( x, y, z, scalar, STLNum, FinalName, 'FLOW RATE', '"x","y","z","FlowRate"' ) + case( PRESSURE_DISTRIBUTION ) + FileName = 'PRESSURE_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLScalarTEC( x, y, z, scalar, STLNum, FinalName, 'PRESSURE DISTRIBUTION', '"x","y","z","Pressure"' ) + end select + + deallocate(x, y, z, scalar) + + end subroutine GenerateScalarmonitorTECfile + + subroutine GenerateVectormonitorTECfile( ObjectsList, vectorState, STLNum, integralType, iter ) + use MPI_Process_Info + use TessellationTypes + use MPI_IBMUtilities + use IBMClass + implicit none + !-arguments--------------------------------------------------------- + type(Object_type), intent(in) :: ObjectsList(:) + real(kind=RP), intent(in) :: vectorState(:,:,:) + integer, intent(in) :: STLNum, integralType, iter + !-local-variables--------------------------------------------------- + real(kind=RP), allocatable :: x(:), y(:), z(:), vector_x(:), & + vector_y(:), vector_z(:) + character(len=LINE_LENGTH) :: FileName, FinalName + + if( MPI_Process% doMPIAction ) then + call sendVectorPlotRoot( ObjectsList, STLNum, vectorState ) + end if + if( MPI_Process% isRoot ) then + call recvVectorPlotRoot( ObjectsList, STLNum, vectorState, x, y, z, vector_x, vector_y, vector_z ) + end if + + if( .not. MPI_Process% isRoot ) return + + select case(integralType) + case( TOTAL_FORCE ) + FileName = 'TOTAL_FORCE_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLvectorTEC( x, y, z, vector_x, vector_y, vector_z, STLNum, FinalName, 'TOTAL FORCE', '"x","y","z","Ftot_x","Ftot_y","Ftot_z"' ) + case( PRESSURE_FORCE ) + FileName = 'PRESSURE_FORCE_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLvectorTEC( x, y, z, vector_x, vector_y, vector_z, STLNum, FinalName, 'PRESSURE FORCE', '"x","y","z","Fpres_x","Fpres_y","Fpres_z"' ) + case( VISCOUS_FORCE ) + FileName = 'VISCOUS_FORCE_' + write(FinalName,'(A,A,I10.10,A)') trim(FileName),trim(OBB(STLNum)% FileName)//'_',iter,'.tec' + call STLvectorTEC( x, y, z, vector_x, vector_y, vector_z, STLNum, FinalName, 'VISCOUS FORCE', '"x","y","z","Fvisc_x","Fvisc_y","Fvisc_z"' ) + end select + + deallocate(x, y, z, vector_x, vector_y, vector_z) + + end subroutine GenerateVectormonitorTECfile end module SurfaceIntegrals -#endif +#endif \ No newline at end of file diff --git a/Solver/src/libs/monitors/SurfaceMonitor.f90 b/Solver/src/libs/monitors/SurfaceMonitor.f90 index a2741038f..45bfe5ebc 100644 --- a/Solver/src/libs/monitors/SurfaceMonitor.f90 +++ b/Solver/src/libs/monitors/SurfaceMonitor.f90 @@ -22,7 +22,7 @@ module SurfaceMonitorClass ! type SurfaceMonitor_t logical :: active - logical :: isDimensionless + logical :: isDimensionless, IBM = .false. integer :: ID real(kind=RP) :: direction(NDIM) integer :: marker @@ -81,7 +81,7 @@ subroutine SurfaceMonitor_Initialization( self , mesh , ID, solution_file , Firs character(len=STR_LEN_MONITORS) :: directionName integer, allocatable :: marker character(len=STR_LEN_MONITORS) :: markerName - integer :: pos, i + integer :: pos, i, STLNum integer :: fID integer :: zoneID real(kind=RP) :: directionValue(NDIM) @@ -109,17 +109,26 @@ subroutine SurfaceMonitor_Initialization( self , mesh , ID, solution_file , Firs ! Get the surface marker ! ---------------------- self % marker = -1 - do zoneID = 1, size(mesh % zones) - if ( trim(mesh % zones(zoneID) % name) .eq. trim(markerName) ) then - self % marker = zoneID - exit - end if - end do - if( mesh% IBM% active ) then - do i = 1, size(mesh% IBM% STLfilename) - if( trim(mesh% IBM% STLfilename(i)) .eq. trim(markerName) ) then - self% marker = i + do STLNum = 1, mesh% IBM% NumOfSTL + if( trim(mesh% IBM% STLfilename(STLNum)) .eq. trim(markerName) ) then + if( .not. mesh% IBM% ComputeBandRegion ) then + write(*,'(A)') "Warning: for surface monitors with IBM, 'band region' must be set '.true.'" + error stop + end if + if( mesh% IBM% Integral(STLNum)% constructed ) exit + call mesh% IBM% SetIntegration( STLNum ) + mesh% IBM% Integral(STLNum)% ListComputed = .false. + mesh% IBM% Integral(STLNum)% compute = .true. + self% marker = STLNum + self% IBM = .true. + exit + end if + end do + else + do zoneID = 1, size(mesh % zones) + if ( trim(mesh % zones(zoneID) % name) .eq. trim(markerName) ) then + self % marker = zoneID exit end if end do @@ -130,6 +139,8 @@ subroutine SurfaceMonitor_Initialization( self , mesh , ID, solution_file , Firs write(*,'(A,I0)') "Warning: Marker not specified for surface monitor ", self % ID write(*,'(A,I0,A)') " Surface monitor ", self % ID, " disabled." end if + + if( self% IBM ) return ! ! Select the variable from the available list, and compute auxiliary variables if needed @@ -302,7 +313,7 @@ subroutine SurfaceMonitor_Initialization( self , mesh , ID, solution_file , Firs end if end subroutine SurfaceMonitor_Initialization - subroutine SurfaceMonitor_Update ( self, mesh, bufferPosition ) + subroutine SurfaceMonitor_Update ( self, mesh, bufferPosition, iter, t ) ! ! ******************************************************************* ! This subroutine updates the monitor value computing it from @@ -311,51 +322,80 @@ subroutine SurfaceMonitor_Update ( self, mesh, bufferPosition ) ! ******************************************************************* ! use SurfaceIntegrals + use IBMClass implicit none class ( SurfaceMonitor_t ) :: self class ( HexMesh ) :: mesh - integer :: bufferPosition + integer :: bufferPosition, iter real(kind=RP) :: F(NDIM) + real(kind=RP), optional :: t + + if( self% IBM ) then + select case (trim(self% variable)) + case ("mass-flow") + call ScalarDataReconstruction( mesh% IBM, mesh% elements, self% marker, MASS_FLOW, iter ) + + case ("flow") + call ScalarDataReconstruction( mesh% IBM, mesh% elements, self% marker, FLOW_RATE, iter) + + case ("pressure-force") + call VectorDataReconstruction( mesh% IBM, mesh% elements, self% marker, PRESSURE_FORCE, iter) + + case ("viscous-force") + call VectorDataReconstruction( mesh% IBM, mesh% elements, self% marker, VISCOUS_FORCE, iter) + + case ("force") + call VectorDataReconstruction( mesh% IBM, mesh% elements, self% marker, TOTAL_FORCE, iter) + + case("pressure","pressure-average") + call ScalarDataReconstruction( mesh% IBM, mesh% elements, self% marker, PRESSURE_DISTRIBUTION, iter) + + end select + + if( present(t) ) call WriteTimeFile( t, self% marker ) + + return + end if select case ( trim ( self % variable ) ) case ("mass-flow") - self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, MASS_FLOW) + self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, MASS_FLOW, iter) case ("flow") - self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, FLOW_RATE) + self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, FLOW_RATE, iter) case ("pressure-force") - F = VectorSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE, iter) F = refValues % rho * POW2(refValues % V) * POW2(Lref) * F self % values(bufferPosition) = dot_product(F, self % direction) case ("viscous-force") - F = VectorSurfaceIntegral(mesh, self % marker, VISCOUS_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, VISCOUS_FORCE, iter) F = refValues % rho * POW2(refValues % V) * POW2(Lref) * F self % values(bufferPosition) = dot_product(F, self % direction) case ("force") - F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE, iter) F = refValues % rho * POW2(refValues % V) * POW2(Lref) * F self % values(bufferPosition) = dot_product(F, self % direction) case ("lift") - F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE, iter) F = 2.0_RP * POW2(Lref) * F / self % referenceSurface self % values(bufferPosition) = dot_product(F, self % direction) case ("drag") if (flowIsNavierStokes) then - F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, TOTAL_FORCE, iter) else - F = VectorSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE) + F = VectorSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE, iter) end if F = 2.0_RP * POW2(Lref) * F / self % referenceSurface self % values(bufferPosition) = dot_product(F, self % direction) case ("pressure-average") - self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE) / ScalarSurfaceIntegral(mesh, self % marker, SURFACE) + self % values(bufferPosition) = ScalarSurfaceIntegral(mesh, self % marker, PRESSURE_FORCE, iter) / ScalarSurfaceIntegral(mesh, self % marker, SURFACE, iter) end select @@ -470,4 +510,3 @@ elemental subroutine SurfaceMonitor_Assign(to, from) end subroutine SurfaceMonitor_Assign #endif end module SurfaceMonitorClass - diff --git a/Solver/src/libs/physics/common/FreeSlipWallBC.f90 b/Solver/src/libs/physics/common/FreeSlipWallBC.f90 index 081b59a07..dceb5355d 100644 --- a/Solver/src/libs/physics/common/FreeSlipWallBC.f90 +++ b/Solver/src/libs/physics/common/FreeSlipWallBC.f90 @@ -311,7 +311,7 @@ subroutine FreeSlipWallBC_FlowGradVars(self, x, t, nHat, Q, U, GetGradients) Q_aux(IRHOU:IRHOW) = Q(IRHOU:IRHOW) Q_aux(IRHOE) = Q(IRHOE) + self % wallType*(Q(IRHO)*self % eWall+0.5_RP*(POW2(Q(IRHOU))+POW2(Q(IRHOV))+POW2(Q(IRHOW)))/Q(IRHO)-Q(IRHOE)) #if defined(SPALARTALMARAS) - Q_aux(IRHOTHETA)= Q(IRHOTHETA) + Q_aux(IRHOTHETA)= Q(IRHOTHETA) #endif call GetGradients(NCONS, NGRAD, Q_aux, U) @@ -588,4 +588,4 @@ subroutine FreeSlipWallBC_ChemPotNeumann(self, x, t, nHat, Q, U_x, U_y, U_z, flu end subroutine FreeSlipWallBC_ChemPotNeumann #endif -end module FreeSlipWallBCClass +end module FreeSlipWallBCClass \ No newline at end of file diff --git a/Solver/src/libs/physics/common/NoSlipWallBC.f90 b/Solver/src/libs/physics/common/NoSlipWallBC.f90 index 0c8caba1b..c194bc5d7 100644 --- a/Solver/src/libs/physics/common/NoSlipWallBC.f90 +++ b/Solver/src/libs/physics/common/NoSlipWallBC.f90 @@ -283,7 +283,7 @@ subroutine NoSlipWallBC_FlowState(self, x, t, nHat, Q) #if defined (SPALARTALMARAS) Q(IRHOTHETA) = -Q(IRHOTHETA) #endif - Q(IRHOU:IRHOW) = -Q(IRHOU:IRHOW) + Q(IRHOU:IRHOW) = 2.0_RP * Q(IRHO)*self % vWall - Q(IRHOU:IRHOW) ! This boundary condition should be ! --------------------------------- !Q(IRHOU:IRHOW) = Q(IRHOU:IRHOW) - 2.0_RP * sum(Q(IRHOU:IRHOW)*nHat)*nHat @@ -583,4 +583,4 @@ subroutine NoSlipWallBC_ChemPotNeumann(self, x, t, nHat, Q, U_x, U_y, U_z, flux) end subroutine NoSlipWallBC_ChemPotNeumann #endif -end module NoSlipWallBCClass +end module NoSlipWallBCClass \ No newline at end of file diff --git a/Solver/src/libs/physics/common/OutflowBC.f90 b/Solver/src/libs/physics/common/OutflowBC.f90 index 3f0d5aa86..f730001b0 100644 --- a/Solver/src/libs/physics/common/OutflowBC.f90 +++ b/Solver/src/libs/physics/common/OutflowBC.f90 @@ -374,8 +374,8 @@ end subroutine OutflowBC_FlowNeumann ! !//////////////////////////////////////////////////////////////////////////// ! -! Subroutines for the Multiphase solver -! ------------------------------------- +! Subroutines for the Multiphase solver +! ------------------------------------- ! !//////////////////////////////////////////////////////////////////////////// ! @@ -495,4 +495,4 @@ subroutine OutflowBC_ChemPotNeumann(self, x, t, nHat, Q, U_x, U_y, U_z, flux) end subroutine OutflowBC_ChemPotNeumann #endif -end module OutflowBCClass +end module OutflowBCClass \ No newline at end of file diff --git a/Solver/src/libs/physics/common/Physics.f90 b/Solver/src/libs/physics/common/Physics.f90 index f4ef90953..4851c46ec 100644 --- a/Solver/src/libs/physics/common/Physics.f90 +++ b/Solver/src/libs/physics/common/Physics.f90 @@ -2,7 +2,7 @@ module Physics #if defined(NAVIERSTOKES) && (!(SPALARTALMARAS)) use Physics_NS #elif defined(NAVIERSTOKES) && (SPALARTALMARAS) - use Physics_NSSA + use Physics_NSSA #elif defined(INCNS) use Physics_iNS #elif defined(MULTIPHASE) @@ -13,4 +13,4 @@ module Physics #endif implicit none -end module Physics +end module Physics \ No newline at end of file diff --git a/Solver/src/libs/physics/navierstokes/Physics_NS.f90 b/Solver/src/libs/physics/navierstokes/Physics_NS.f90 index 654a50614..7131c9f01 100644 --- a/Solver/src/libs/physics/navierstokes/Physics_NS.f90 +++ b/Solver/src/libs/physics/navierstokes/Physics_NS.f90 @@ -560,13 +560,13 @@ end subroutine GuermondPopovFlux_ENTROPY ! d f_i(2) | ! df_dgradq(2,4,j,i) = ---------- | ! d(∇q)_j(4) |q=cons, -! where (∇q)_j = dq/dx_j +! where (∇q)_j = dq/dx_j ! -! Following Hartmann's notation, G_{ij} = df_dgradq(:,:,j,i). --> R. Hartmann. "Discontinuous Galerkin methods for compressible flows: higher order accuracy, error estimation and adaptivity". 2005. +! Following Hartmann's notation, G_{ij} = df_dgradq(:,:,j,i). --> R. Hartmann. "Discontinuous Galerkin methods for compressible flows: higher order accuracy, error estimation and adaptivity". 2005. ! ! 2. Jacobian with respect to the conserved variables: df/dq ! -! df_dq := df/d(∇q) +! df_dq := df/d(∇q) ! d f_i(2) | ! df_dq(2,4,i) = -------- | ! dq(4) |∇q=cons @@ -958,4 +958,4 @@ SUBROUTINE ComputeEigenvaluesForState( Q, eigen ) end associate - END SUBROUTINE ComputeEigenvaluesForState + END SUBROUTINE ComputeEigenvaluesForState \ No newline at end of file diff --git a/Solver/src/libs/physics/spallartalmaras/Physics_NSSA.f90 b/Solver/src/libs/physics/spallartalmaras/Physics_NSSA.f90 index be46db4af..19b59be4c 100644 --- a/Solver/src/libs/physics/spallartalmaras/Physics_NSSA.f90 +++ b/Solver/src/libs/physics/spallartalmaras/Physics_NSSA.f90 @@ -560,13 +560,13 @@ end subroutine GuermondPopovFlux_ENTROPY ! d f_i(2) | ! df_dgradq(2,4,j,i) = ---------- | ! d(∇q)_j(4) |q=cons, -! where (∇q)_j = dq/dx_j +! where (∇q)_j = dq/dx_j ! -! Following Hartmann's notation, G_{ij} = df_dgradq(:,:,j,i). --> R. Hartmann. "Discontinuous Galerkin methods for compressible flows: higher order accuracy, error estimation and adaptivity". 2005. +! Following Hartmann's notation, G_{ij} = df_dgradq(:,:,j,i). --> R. Hartmann. "Discontinuous Galerkin methods for compressible flows: higher order accuracy, error estimation and adaptivity". 2005. ! ! 2. Jacobian with respect to the conserved variables: df/dq ! -! df_dq := df/d(∇q) +! df_dq := df/d(∇q) ! d f_i(2) | ! df_dq(2,4,i) = -------- | ! dq(4) |∇q=cons @@ -722,4 +722,4 @@ SUBROUTINE ComputeEigenvaluesForStateSA( Q, eigen ) end associate END SUBROUTINE ComputeEigenvaluesForStateSA -! ///////////////////////////////////////////////////////////////////// +! ///////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/Solver/src/libs/sources/Makefile b/Solver/src/libs/sources/Makefile index 97fd27244..60a0022e3 100644 --- a/Solver/src/libs/sources/Makefile +++ b/Solver/src/libs/sources/Makefile @@ -1,160 +1,160 @@ -################################################# -# Mesh Makefile # -################################################# -INSTALL_DIR?=./ -FFLAGS?=-cpp -ffree-line-length-0 -AR?=ar -ARFLAGS?=cr -RANLIB?=ranlib -MOD_FLAG?=-J - -LIBOBJS_NS = ./build_ns/ActuatorLine.o \ - ./build_ns/mkl_dfti.o \ - ./build_ns/TripForceClass.o - -LIBOBJS_NSSA = ./build_nssa/ActuatorLine.o \ - ./build_nssa/mkl_dfti.o \ - ./build_nssa/TripForceClass.o - -LIBOBJS_iNS = ./build_ins/ActuatorLine.o - -LIBOBJS_CH = ./build_ch/ActuatorLine.o - -LIBOBJS_MU = ./build_mu/ActuatorLine.o - -LIB = sources - -############################################ -# MAIN COMPILATION RULES # -############################################ -.DEFAULT_GOAL:=all - -all: lib$(LIB)_ch.a lib$(LIB)_ins.a lib$(LIB)_ns.a lib$(LIB)_nssa.a lib$(LIB)_mu.a - -./build_ns/%.o: %.f90 - @echo - @echo $< - $(FC) $(FFLAGS) -DNAVIERSTOKES -I./include_ns $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ns -c $< -o $@ $(MOD_FLAG) ./include_ns - -./build_nssa/%.o: %.f90 - @echo - @echo $< - $(FC) $(FFLAGS) -DNAVIERSTOKES -DSPALARTALMARAS -I./include_nssa $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_nssa -c $< -o $@ $(MOD_FLAG) ./include_nssa - -./build_ins/%.o: %.f90 - @echo - @echo $< - $(FC) $(FFLAGS) -DINCNS -I./include_ins $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ins -c $< -o $@ $(MOD_FLAG) ./include_ins - -./build_ch/%.o: %.f90 - @echo - @echo $< - $(FC) $(FFLAGS) -DCAHNHILLIARD -I./include_ch $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ch -c $< -o $@ $(MOD_FLAG) ./include_ch - -./build_mu/%.o: %.f90 - @echo - @echo $< - $(FC) $(FFLAGS) -DMULTIPHASE -DCAHNHILLIARD -I./include_mu $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_mu -c $< -o $@ $(MOD_FLAG) ./include_mu - -lib$(LIB)_ns.a: header mkdirs $(LIBOBJS_NS) - @echo - @echo "---------------------------------" - @echo "| Linking library" $@ "|" - @echo "---------------------------------" - @$(RM) $@ - $(AR) $(ARFLAGS) $@ $(LIBOBJS_NS) - @$(RANLIB) $@ - -lib$(LIB)_nssa.a: header mkdirs $(LIBOBJS_NSSA) - @echo - @echo "---------------------------------" - @echo "| Linking library" $@ "|" - @echo "---------------------------------" - @$(RM) $@ - $(AR) $(ARFLAGS) $@ $(LIBOBJS_NSSA) - @$(RANLIB) $@ - -lib$(LIB)_ins.a: header mkdirs $(LIBOBJS_iNS) - @echo - @echo "---------------------------------" - @echo "| Linking library" $@ "|" - @echo "---------------------------------" - @$(RM) $@ - $(AR) $(ARFLAGS) $@ $(LIBOBJS_iNS) - @$(RANLIB) $@ - -lib$(LIB)_ch.a: header mkdirs $(LIBOBJS_CH) - @echo - @echo "---------------------------------" - @echo "| Linking library" $@ "|" - @echo "---------------------------------" - @$(RM) $@ - $(AR) $(ARFLAGS) $@ $(LIBOBJS_CH) - @$(RANLIB) $@ - -lib$(LIB)_mu.a: header mkdirs $(LIBOBJS_MU) - @echo - @echo "---------------------------------" - @echo "| Linking library" $@ "|" - @echo "---------------------------------" - @$(RM) $@ - $(AR) $(ARFLAGS) $@ $(LIBOBJS_MU) - @$(RANLIB) $@ - -install: all - cp -p lib$(LIB)_ns.a $(INSTALL_DIR)/lib/ - cp -p lib$(LIB)_nssa.a $(INSTALL_DIR)/lib/ - cp -p lib$(LIB)_ins.a $(INSTALL_DIR)/lib/ - cp -p lib$(LIB)_ch.a $(INSTALL_DIR)/lib/ - cp -p lib$(LIB)_mu.a $(INSTALL_DIR)/lib/ - cp -p ./include_ns/*.mod $(INSTALL_DIR)/include_ns/ - cp -p ./include_nssa/*.mod $(INSTALL_DIR)/include_nssa/ - cp -p ./include_ins/*.mod $(INSTALL_DIR)/include_ins/ - cp -p ./include_ch/*.mod $(INSTALL_DIR)/include_ch/ - cp -p ./include_mu/*.mod $(INSTALL_DIR)/include_mu/ - @echo - @echo - -install-mu: lib$(LIB)_mu.a - cp -p lib$(LIB)_mu.a $(INSTALL_DIR)/lib/ - cp -p ./include_mu/*.mod $(INSTALL_DIR)/include_mu/ - @echo - @echo - -install-ns: lib$(LIB)_ns.a - cp -p lib$(LIB)_ns.a $(INSTALL_DIR)/lib/ - cp -p ./include_ns/*.mod $(INSTALL_DIR)/include_ns/ - @echo - @echo - -install-nssa: lib$(LIB)_nssa.a - cp -p lib$(LIB)_nssa.a $(INSTALL_DIR)/lib/ - cp -p ./include_nssa/*.mod $(INSTALL_DIR)/include_nssa/ - @echo - @echo - - -header: FORCE - @echo - @echo "================================" - @echo ">> Building Source terms " - @echo "================================" - @echo - @echo - -mkdirs: FORCE - @mkdir -p ./include_ns ./include_nssa ./include_ins ./include_ch ./include_mu - @mkdir -p ./build_ns ./build_nssa ./build_ins ./build_ch ./build_mu - -clean: FORCE - $(RM) lib$(LIB)_ns.a lib$(LIB)_nssa.a lib$(LIB)_ins.a lib$(LIB)_ch.a lib$(LIB)_mu.a - $(RM) ./build_ns/*.o ./include_ns/*.mod - $(RM) ./build_nssa/*.o ./include_nssa/*.mod - $(RM) ./build_ins/*.o ./include_ins/*.mod - $(RM) ./build_ch/*.o ./include_ch/*.mod - $(RM) ./build_mu/*.o ./include_mu/*.mod - -############################################# -# Dummy procedure to force a rule # -############################################# -FORCE: +################################################# +# Mesh Makefile # +################################################# +INSTALL_DIR?=./ +FFLAGS?=-cpp -ffree-line-length-0 +AR?=ar +ARFLAGS?=cr +RANLIB?=ranlib +MOD_FLAG?=-J + +LIBOBJS_NS = ./build_ns/ActuatorLine.o \ + ./build_ns/mkl_dfti.o \ + ./build_ns/TripForceClass.o + +LIBOBJS_NSSA = ./build_nssa/ActuatorLine.o \ + ./build_nssa/mkl_dfti.o \ + ./build_nssa/TripForceClass.o + +LIBOBJS_iNS = ./build_ins/ActuatorLine.o + +LIBOBJS_CH = ./build_ch/ActuatorLine.o + +LIBOBJS_MU = ./build_mu/ActuatorLine.o + +LIB = sources + +############################################ +# MAIN COMPILATION RULES # +############################################ +.DEFAULT_GOAL:=all + +all: lib$(LIB)_ch.a lib$(LIB)_ins.a lib$(LIB)_ns.a lib$(LIB)_nssa.a lib$(LIB)_mu.a + +./build_ns/%.o: %.f90 + @echo + @echo $< + $(FC) $(FFLAGS) -DNAVIERSTOKES -I./include_ns $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ns -c $< -o $@ $(MOD_FLAG) ./include_ns + +./build_nssa/%.o: %.f90 + @echo + @echo $< + $(FC) $(FFLAGS) -DNAVIERSTOKES -DSPALARTALMARAS -I./include_nssa $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_nssa -c $< -o $@ $(MOD_FLAG) ./include_nssa + +./build_ins/%.o: %.f90 + @echo + @echo $< + $(FC) $(FFLAGS) -DINCNS -I./include_ins $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ins -c $< -o $@ $(MOD_FLAG) ./include_ins + +./build_ch/%.o: %.f90 + @echo + @echo $< + $(FC) $(FFLAGS) -DCAHNHILLIARD -I./include_ch $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_ch -c $< -o $@ $(MOD_FLAG) ./include_ch + +./build_mu/%.o: %.f90 + @echo + @echo $< + $(FC) $(FFLAGS) -DMULTIPHASE -DCAHNHILLIARD -I./include_mu $(MACROS) $(EXTLIB_INC) $(INCLUDE) $(INCLUDE)_mu -c $< -o $@ $(MOD_FLAG) ./include_mu + +lib$(LIB)_ns.a: header mkdirs $(LIBOBJS_NS) + @echo + @echo "---------------------------------" + @echo "| Linking library" $@ "|" + @echo "---------------------------------" + @$(RM) $@ + $(AR) $(ARFLAGS) $@ $(LIBOBJS_NS) + @$(RANLIB) $@ + +lib$(LIB)_nssa.a: header mkdirs $(LIBOBJS_NSSA) + @echo + @echo "---------------------------------" + @echo "| Linking library" $@ "|" + @echo "---------------------------------" + @$(RM) $@ + $(AR) $(ARFLAGS) $@ $(LIBOBJS_NSSA) + @$(RANLIB) $@ + +lib$(LIB)_ins.a: header mkdirs $(LIBOBJS_iNS) + @echo + @echo "---------------------------------" + @echo "| Linking library" $@ "|" + @echo "---------------------------------" + @$(RM) $@ + $(AR) $(ARFLAGS) $@ $(LIBOBJS_iNS) + @$(RANLIB) $@ + +lib$(LIB)_ch.a: header mkdirs $(LIBOBJS_CH) + @echo + @echo "---------------------------------" + @echo "| Linking library" $@ "|" + @echo "---------------------------------" + @$(RM) $@ + $(AR) $(ARFLAGS) $@ $(LIBOBJS_CH) + @$(RANLIB) $@ + +lib$(LIB)_mu.a: header mkdirs $(LIBOBJS_MU) + @echo + @echo "---------------------------------" + @echo "| Linking library" $@ "|" + @echo "---------------------------------" + @$(RM) $@ + $(AR) $(ARFLAGS) $@ $(LIBOBJS_MU) + @$(RANLIB) $@ + +install: all + cp -p lib$(LIB)_ns.a $(INSTALL_DIR)/lib/ + cp -p lib$(LIB)_nssa.a $(INSTALL_DIR)/lib/ + cp -p lib$(LIB)_ins.a $(INSTALL_DIR)/lib/ + cp -p lib$(LIB)_ch.a $(INSTALL_DIR)/lib/ + cp -p lib$(LIB)_mu.a $(INSTALL_DIR)/lib/ + cp -p ./include_ns/*.mod $(INSTALL_DIR)/include_ns/ + cp -p ./include_nssa/*.mod $(INSTALL_DIR)/include_nssa/ + cp -p ./include_ins/*.mod $(INSTALL_DIR)/include_ins/ + cp -p ./include_ch/*.mod $(INSTALL_DIR)/include_ch/ + cp -p ./include_mu/*.mod $(INSTALL_DIR)/include_mu/ + @echo + @echo + +install-mu: lib$(LIB)_mu.a + cp -p lib$(LIB)_mu.a $(INSTALL_DIR)/lib/ + cp -p ./include_mu/*.mod $(INSTALL_DIR)/include_mu/ + @echo + @echo + +install-ns: lib$(LIB)_ns.a + cp -p lib$(LIB)_ns.a $(INSTALL_DIR)/lib/ + cp -p ./include_ns/*.mod $(INSTALL_DIR)/include_ns/ + @echo + @echo + +install-nssa: lib$(LIB)_nssa.a + cp -p lib$(LIB)_nssa.a $(INSTALL_DIR)/lib/ + cp -p ./include_nssa/*.mod $(INSTALL_DIR)/include_nssa/ + @echo + @echo + + +header: FORCE + @echo + @echo "================================" + @echo ">> Building Source terms " + @echo "================================" + @echo + @echo + +mkdirs: FORCE + @mkdir -p ./include_ns ./include_nssa ./include_ins ./include_ch ./include_mu + @mkdir -p ./build_ns ./build_nssa ./build_ins ./build_ch ./build_mu + +clean: FORCE + $(RM) lib$(LIB)_ns.a lib$(LIB)_nssa.a lib$(LIB)_ins.a lib$(LIB)_ch.a lib$(LIB)_mu.a + $(RM) ./build_ns/*.o ./include_ns/*.mod + $(RM) ./build_nssa/*.o ./include_nssa/*.mod + $(RM) ./build_ins/*.o ./include_ins/*.mod + $(RM) ./build_ch/*.o ./include_ch/*.mod + $(RM) ./build_mu/*.o ./include_mu/*.mod + +############################################# +# Dummy procedure to force a rule # +############################################# +FORCE: \ No newline at end of file diff --git a/Solver/src/libs/timeintegrator/AnisFASMultigridClass.f90 b/Solver/src/libs/timeintegrator/AnisFASMultigridClass.f90 index a212638e2..92a60114b 100644 --- a/Solver/src/libs/timeintegrator/AnisFASMultigridClass.f90 +++ b/Solver/src/libs/timeintegrator/AnisFASMultigridClass.f90 @@ -444,18 +444,13 @@ recursive subroutine ConstructFASInOneDirection(Solver, lvl, controlVariables,Di call Child_p % MGStorage(Dir) % p_sem % mesh % storage % PointStorage -!~ Child_p % MGStorage(Dir) % p_sem % mesh % IBM % active = .false. - Child_p% MGStorage(Dir)% p_sem% mesh% IBM% active = Solver% MGStorage(Dir)% p_sem% mesh% IBM% active - if( Child_p% MGStorage(Dir)% p_sem% mesh% IBM% active ) then - Child_p% MGStorage(Dir)% p_sem% mesh% IBM% lvl = lvl - call Child_p% MGStorage(Dir)% p_sem% mesh% IBM% copyKDtree( Solver% MGStorage(Dir)% p_sem% mesh% IBM% root ) - - call Child_p% MGStorage(Dir)% p_sem% mesh% IBM% build( Child_p% MGStorage(Dir)% p_sem% mesh% elements, & - Child_p% MGStorage(Dir)% p_sem% mesh% no_of_elements, & - Child_p% MGStorage(Dir)% p_sem% mesh% NDOF, & - Child_p% MGStorage(Dir)% p_sem% mesh% child ) - - end if +! if( Solver% MGStorage(Dir) % p_sem% mesh% IBM% active ) & +! call Child_p% MGStorage(Dir) % p_sem% mesh% IBM% copy( Solver% MGStorage(Dir) % p_sem% mesh% IBM, lvl ) + +! call Child_p % MGStorage(Dir) % p_sem % construct (controlVariables = controlVariables, & +! Nx_ = N2xAll, Ny_ = N2yAll, Nz_ = N2zAll, & +! success = success, & +! ChildSem = .TRUE. ) !New> @@ -860,4 +855,4 @@ end subroutine FinalizeDestruction !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! -end module AnisFASMultigridClass +end module AnisFASMultigridClass \ No newline at end of file diff --git a/Solver/src/libs/timeintegrator/ExplicitMethods.f90 b/Solver/src/libs/timeintegrator/ExplicitMethods.f90 index 29c33f918..3b00f179a 100644 --- a/Solver/src/libs/timeintegrator/ExplicitMethods.f90 +++ b/Solver/src/libs/timeintegrator/ExplicitMethods.f90 @@ -68,22 +68,6 @@ SUBROUTINE TakeRK3Step( mesh, particles, t, deltaT, ComputeTimeDerivative, dt_ve INTEGER :: i, j, k, id if (present(dt_vec)) then - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - if( mesh% IBM% TimePenal ) mesh% IBM% penalization(id) = 0.5_RP*dt_vec(id) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if do k = 1,3 tk = t + b(k)*deltaT @@ -108,41 +92,8 @@ SUBROUTINE TakeRK3Step( mesh, particles, t, deltaT, ComputeTimeDerivative, dt_ve end do ! k - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if - else - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then - if( mesh% IBM% TimePenal ) mesh% IBM% penalization = 0.5_RP*deltaT -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if - do k = 1,3 tk = t + b(k)*deltaT call ComputeTimeDerivative( mesh, particles, tk, CTD_IGNORE_MODE) @@ -166,21 +117,6 @@ SUBROUTINE TakeRK3Step( mesh, particles, t, deltaT, ComputeTimeDerivative, dt_ve end do ! k - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if end if ! ! To obtain the updated residuals @@ -222,23 +158,6 @@ SUBROUTINE TakeRK5Step( mesh, particles, t, deltaT, ComputeTimeDerivative , dt_v if (present(dt_vec)) then - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - if( mesh% IBM% TimePenal ) mesh% IBM% penalization(id) = 0.5_RP*dt_vec(id) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if DO k = 1, N_STAGES @@ -263,41 +182,8 @@ SUBROUTINE TakeRK5Step( mesh, particles, t, deltaT, ComputeTimeDerivative , dt_v !$omp end parallel do END DO - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if else - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then - if( mesh% IBM% TimePenal ) mesh% IBM% penalization = 0.5_RP*deltaT -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if DO k = 1, N_STAGES @@ -322,22 +208,6 @@ SUBROUTINE TakeRK5Step( mesh, particles, t, deltaT, ComputeTimeDerivative , dt_v !$omp end parallel do END DO - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if end if @@ -602,23 +472,6 @@ SUBROUTINE TakeRKOptStep( mesh, particles, t, deltaT, ComputeTimeDerivative , N_ tk = t + deltaT if (present(dt_vec)) then - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - if( mesh% IBM% TimePenal ) mesh% IBM% penalization(id) = 0.5_RP*dt_vec(id) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if DO k = 1, N_STAGES @@ -642,41 +495,8 @@ SUBROUTINE TakeRKOptStep( mesh, particles, t, deltaT, ComputeTimeDerivative , N_ !$omp end parallel do END DO - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if else - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then - if( mesh% IBM% TimePenal ) mesh% IBM% penalization = 0.5_RP*deltaT -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if DO k = 1, N_STAGES @@ -700,22 +520,6 @@ SUBROUTINE TakeRKOptStep( mesh, particles, t, deltaT, ComputeTimeDerivative , N_ !$omp end parallel do END DO - - if( mesh% IBM% active ) then - if( mesh% IBM% semiImplicit ) then -!$omp parallel do schedule(runtime) - do id = 1, SIZE( mesh % elements ) - do i = 0, mesh% elements(id)% Nxyz(1); do j = 0, mesh% elements(id)% Nxyz(2); do k = 0, mesh% elements(id)% Nxyz(3) - if( mesh% elements(id)% isInsideBody(i,j,k) ) then - associate( Q => mesh% elements(id)% storage% Q(:,i,j,k) ) - call mesh% IBM% GetSemiImplicitStep( id, 0.5_RP*deltaT, Q ) - end associate - end if - end do; end do; end do - end do -!$omp end parallel do - end if - end if end if @@ -784,4 +588,4 @@ End Subroutine checkForNan ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! -END MODULE ExplicitMethods +END MODULE ExplicitMethods \ No newline at end of file diff --git a/Solver/src/libs/timeintegrator/FASMultigridClass.f90 b/Solver/src/libs/timeintegrator/FASMultigridClass.f90 index 82814bd56..b6b796b3d 100644 --- a/Solver/src/libs/timeintegrator/FASMultigridClass.f90 +++ b/Solver/src/libs/timeintegrator/FASMultigridClass.f90 @@ -84,8 +84,6 @@ module FASMultigridClass procedure :: destruct procedure :: SetPreviousSolution => FAS_SetPreviousSolution ! For implicit smoothing, it's necessary to store the previous solution(s) in all levels procedure :: TakePseudoStep ! solve for Dual Time Stepping - procedure :: SetIBM => FAS_SetIBM - procedure :: updateMovingBodyIBM => FAS_updateMovingBodyIBM end type FASMultigrid_t ! @@ -629,7 +627,8 @@ recursive subroutine RecursiveConstructor(Solver, N1x, N1y, N1z, lvl, controlVar END DO END DO END IF -#endif! +#endif +! ! ------------------------------------------- ! Assemble Jacobian for implicit smoothing ! ------------------------------------------- @@ -719,16 +718,12 @@ recursive subroutine RecursiveConstructor(Solver, N1x, N1y, N1z, lvl, controlVar ! setting the IBM level & saving the KDtree - Child_p% p_sem% mesh% IBM% active = Solver% p_sem% mesh% IBM% active - if( Child_p% p_sem% mesh% IBM% active ) then - Child_p% p_sem% mesh% IBM% lvl = lvl - call Child_p% p_sem% mesh% IBM% copyKDtree( Solver% p_sem% mesh% IBM% root ) - end if - + if( Solver% p_sem% mesh% IBM% active ) call Child_p% p_sem% mesh% IBM% copy( Solver% p_sem% mesh% IBM, lvl ) + call Child_p % p_sem % construct (controlVariables = controlVariables, & Nx_ = N2xAll, Ny_ = N2yAll, Nz_ = N2zAll, & success = success, & - ChildSem = .TRUE. ) + ChildSem = .TRUE. ) if (.NOT. success) ERROR STOP "Multigrid: Problem creating coarse solver." @@ -881,6 +876,10 @@ subroutine TakePseudoStep(this, timestep, t, ComputeTimeDerivative, ComputeTimeD end if end do + if( this% p_sem% mesh% IBM% active ) then + if( any(this% p_sem% mesh% IBM% stl(:)% move) .and. MGlevels-1 > 1 ) call FAS_movingIBM( this% child, dt, MGlevels-1 ) + end if + do i = 1, tau_maxit call this % solve(i, tk, ComputeTimeDerivative, ComputeTimeDerivativeIsolated) @@ -981,14 +980,6 @@ recursive subroutine FASVCycle(this,t,lvl,MGlevels, ComputeTimeDerivative, Compu ! Taking care of Jacobian (for implicit residual relaxation) ! ---------------------------------------------------------- call FAS_ComputeAndFactorizeJacobian(this, lvl, t, invdt, ComputeTimeDerivative, ComputeTimeDerivativeIsolated) - -! -! Setting up the IBM before the pre-smooth procedure -! --------------------------------------------------- - if( this% p_sem% mesh% IBM% active ) then - if( lvl .eq. MGlevels ) call this% SetIBM( this% p_sem% mesh% IBM% penalization ) -!~ if( any(this% p_sem% mesh% IBM% stl(:)% move) ) call this% updateMovingBodyIBM( fasvcycle_dt, lvl ) - end if ! ! ------------------------------------------------------- @@ -1266,7 +1257,7 @@ subroutine MGRestrictToChild(this,lvl,t, ComputeTimeDerivative) !$omp end do !$omp end parallel - if( Child_p% p_sem% mesh% IBM% active ) call Child_p% SetIBM( this% p_sem% mesh% IBM% penalization ) + if( Child_p% p_sem% mesh% IBM% TimePenal ) Child_p% p_sem% mesh% IBM% penalization = dt ! ! ------------------------------------------- @@ -1381,32 +1372,64 @@ subroutine Smooth(this,SmoothSweeps,t, ComputeTimeDerivative) error stop "FASMultigrid :: LTS needs cfd & dcfl." end if - if( this% p_sem% mesh% IBM% active ) call this% SetIBM( this% p_sem% mesh% IBM% penalization ) + if( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt select case (Smoother) ! Euler Smoother case (Euler_SMOOTHER) do sweep = 1, SmoothSweeps + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeExplicitEulerStep ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dt_vec=this % lts_dt, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK3 smoother case (RK3_SMOOTHER) do sweep = 1, SmoothSweeps + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRK3Step ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dt_vec=this % lts_dt, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK5 smoother case (RK5_SMOOTHER) do sweep = 1, SmoothSweeps + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRK5Step ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dt_vec=this % lts_dt, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK5 smoother opt for Steady State case (RKOpt_SMOOTHER) do sweep = 1, SmoothSweeps + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRKOptStep ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, N_STAGES=erk_order, dt_vec=this % lts_dt, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do case default error stop "FASMultigrid :: No smoother defined for the multigrid." @@ -1417,29 +1440,69 @@ subroutine Smooth(this,SmoothSweeps,t, ComputeTimeDerivative) case (Euler_SMOOTHER) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + + if ( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeExplicitEulerStep ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK3 smoother case (RK3_SMOOTHER) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + + if ( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRK3Step ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK5 smoother case (RK5_SMOOTHER) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + + if ( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRK5Step ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! RK Opt smoother case (RKOpt_SMOOTHER) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + + if ( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if + call TakeRKOptStep ( mesh=this % p_sem % mesh, particles=this % p_sem % particles, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, N_STAGES=erk_order, dts=DualTimeStepping, global_dt=dt ) + + if( this% p_sem% mesh% IBM% semiImplicit ) then + call this% p_sem% mesh% IBM% SemiImplicitCorrection( this% p_sem% mesh% elements, dt ) + end if end do ! ! Implicit smoothers @@ -1452,6 +1515,7 @@ subroutine Smooth(this,SmoothSweeps,t, ComputeTimeDerivative) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + if( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt call TakeSGSStep ( this=this, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) end do @@ -1462,6 +1526,7 @@ subroutine Smooth(this,SmoothSweeps,t, ComputeTimeDerivative) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + if( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt call TakeILUStep ( this=this, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) end do @@ -1472,6 +1537,7 @@ subroutine Smooth(this,SmoothSweeps,t, ComputeTimeDerivative) do sweep = 1, SmoothSweeps if (Compute_dt) call MaxTimeStep(self=this % p_sem, cfl=smoother_cfl, dcfl=smoother_dcfl, MaxDt=smoother_dt ) + if( this% p_sem% mesh% IBM% TimePenal ) this% p_sem% mesh% IBM% penalization = dt call TakeBIRK5Step ( this=this, t=t, deltaT=smoother_dt, & ComputeTimeDerivative=ComputeTimeDerivative, dts=DualTimeStepping, global_dt=dt ) end do @@ -1868,64 +1934,25 @@ end subroutine FAS_ComputeAndFactorizeJacobian ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! - subroutine FAS_SetIBM( this, dt ) - implicit none - !-arguments------------------------------------------ - class(FASMultigrid_t), intent(inout) :: this - real(kind=rp), intent(in) :: dt(:) - !-local-variables------------------------------------ - real(kind=rp) :: MaxDt - - ! Updating the IBM penalization - if (DualTimeStepping) then - if( this% p_sem% mesh% IBM% TimePenal ) call MaxTimeStep(self=this% p_sem, cfl=p_cfl, dcfl=p_dcfl, MaxDt = MaxDt, MaxDtVec = this% p_sem% mesh% IBM% penalization ) - else - if ( Compute_dt .and. this% p_sem% mesh% IBM% TimePenal ) then - call MaxTimeStep(self=this% p_sem, cfl=cfl, dcfl=dcfl, MaxDt=MaxDt ) - this% p_sem% mesh% IBM% penalization = MaxDt - elseif( this% p_sem% mesh% IBM% TimePenal ) then - this% p_sem% mesh% IBM% penalization = dt - end if - end if - - end subroutine FAS_SetIBM - - recursive subroutine recursive_IBM_KDtreedestroy( Solver, lvl ) - - implicit none - !-arguments---------------------------------------- - type(FASMultigrid_t), target :: Solver - integer, intent(in) :: lvl - !-local-variables----------------------------------- - type(FASMultigrid_t), pointer :: Child_p - - if( lvl > 1 ) call recursive_IBM_KDtreedestroy( Solver% Child, lvl-1 ) - - call Solver% p_sem% mesh% IBM% DestroyKDtree() - end subroutine recursive_IBM_KDtreedestroy - - - subroutine FAS_updateMovingBodyIBM( this, dt, lvl ) + recursive subroutine FAS_MovingIBM( Solver, dt, lvl ) implicit none !-arguments------------------------------------------ - class(FASMultigrid_t), intent(inout) :: this - real(kind=RP), intent(in) :: dt - integer, intent(in) :: lvl - !-local-variables------------------------------------ - type(FASMultigrid_t), pointer :: Child_p - - if( lvl > 1 ) then - Child_p => this% Child - call child_p% p_sem% mesh% IBM% MoveBody( child_p% p_sem% mesh% elements, & - child_p% p_sem% mesh% no_of_elements, & - child_p% p_sem% mesh% NDOF, child_p% p_sem% mesh% child, dt ) - end if + type(FASMultigrid_t), intent(inout) :: Solver + real(kind=RP), intent(in) :: dt + integer, intent(in) :: lvl + + call Solver% p_sem% mesh% IBM% MoveBody( Solver% p_sem% mesh% elements, & + Solver% p_sem% mesh% no_of_elements, & + Solver% p_sem% mesh% NDOF, & + .true., dt ) + + if( lvl > 1 ) call FAS_movingIBM( Solver% Child, dt, lvl-1 ) - end subroutine FAS_updateMovingBodyIBM + end subroutine FAS_MovingIBM ! !/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ! -end module FASMultigridClass +end module FASMultigridClass \ No newline at end of file diff --git a/Solver/src/libs/timeintegrator/LinearSolvers/MatrixFreeGMRESClass.f90 b/Solver/src/libs/timeintegrator/LinearSolvers/MatrixFreeGMRESClass.f90 index 566293673..2ed65143c 100644 --- a/Solver/src/libs/timeintegrator/LinearSolvers/MatrixFreeGMRESClass.f90 +++ b/Solver/src/libs/timeintegrator/LinearSolvers/MatrixFreeGMRESClass.f90 @@ -422,11 +422,13 @@ SUBROUTINE SetOperatorDt(this, dt) ! Modify for matrix peconditioners... CLASS(MatFreeGMRES_t), INTENT(INOUT) :: this REAL(KIND=RP) , INTENT(IN) :: dt !------------------------------------------------ - + REAL(KIND=RP) :: shift + this % dtsolve = dt if (this % Preconditioner == PC_BlockJacobi) then - call this % BlockA % shift( MatrixShift(dt) ) + shift = MatrixShift(dt) + call this % BlockA % shift( shift ) call this % BlockA % FactorizeBlocks_LU(this % BlockPreco) end if @@ -440,11 +442,13 @@ SUBROUTINE ReSetOperatorDt(this, dt) ! Modify for matrix peconditioners... CLASS(MatFreeGMRES_t), INTENT(INOUT) :: this REAL(KIND=RP) , INTENT(IN) :: dt !------------------------------------------------ + REAL(KIND=RP) :: shift this % dtsolve = dt if (this % Preconditioner == PC_BlockJacobi) then - call this % BlockA % shift( MatrixShift(dt) ) + shift = MatrixShift(dt) + call this % BlockA % shift( shift ) call this % BlockA % FactorizeBlocks_LU(this % BlockPreco) end if @@ -805,4 +809,4 @@ subroutine GMRES_SetMatrixAction(this,MatrixAx) end subroutine GMRES_SetMatrixAction -end module MatrixFreeGMRESClass +end module MatrixFreeGMRESClass \ No newline at end of file diff --git a/Solver/src/libs/timeintegrator/TimeIntegrator.f90 b/Solver/src/libs/timeintegrator/TimeIntegrator.f90 index 842e18b99..21aee8ee3 100644 --- a/Solver/src/libs/timeintegrator/TimeIntegrator.f90 +++ b/Solver/src/libs/timeintegrator/TimeIntegrator.f90 @@ -397,8 +397,6 @@ subroutine IntegrateInTime( self, sem, controlVariables, monitors, ComputeTimeDe ! Set up mask's coefficient for IBM ! ---------------------------------- ! - - if( sem % mesh% IBM% active .and. sem % mesh% IBM% TimePenal ) then if ( self % Compute_dt ) then call MaxTimeStep( self=sem, cfl=self % cfl, dcfl=self % dcfl, MaxDt= dt ) @@ -429,7 +427,7 @@ subroutine IntegrateInTime( self, sem, controlVariables, monitors, ComputeTimeDe call ComputeTimeDerivative(sem % mesh, sem % particles, t, CTD_IGNORE_MODE) maxResidual = ComputeMaxResiduals(sem % mesh) sem % maxResidual = maxval(maxResidual) - call Monitors % UpdateValues( sem % mesh, t, sem % numberOfTimeSteps, maxResidual ) + call Monitors % UpdateValues( sem % mesh, t, sem % numberOfTimeSteps, maxResidual, .false. ) call self % Display(sem % mesh, monitors, sem % numberOfTimeSteps) if (self % pAdaptator % adaptation_mode == ADAPT_DYNAMIC_TIME .and. & @@ -547,7 +545,9 @@ subroutine IntegrateInTime( self, sem, controlVariables, monitors, ComputeTimeDe CASE (ROSENBROCK_SOLVER) call RosenbrockSolver % TakeStep (sem, t , dt , ComputeTimeDerivative) CASE (EXPLICIT_SOLVER) + if( sem% mesh% IBM% active ) call sem% mesh% IBM% SemiImplicitCorrection( sem% mesh% elements, dt ) CALL self % RKStep ( sem % mesh, sem % particles, t, dt, ComputeTimeDerivative) + if( sem% mesh% IBM% active ) call sem% mesh% IBM% SemiImplicitCorrection( sem% mesh% elements, dt ) case (FAS_SOLVER) if (self % integratorType .eq. STEADY_STATE) then ! call FASSolver % solve(k, t, ComputeTimeDerivative) @@ -587,7 +587,7 @@ subroutine IntegrateInTime( self, sem, controlVariables, monitors, ComputeTimeDe ! ! Update monitors ! --------------- - call Monitors % UpdateValues( sem % mesh, t, k+1, maxResidual ) + call Monitors % UpdateValues( sem % mesh, t, k+1, maxResidual, self% autosave% Autosave(k+1) ) ! ! Exit if the target is reached ! ----------------------------- @@ -913,4 +913,4 @@ end function TimeIntegrator_CorrectDt ! !///////////////////////////////////////////////////////////////////////////////////////////// ! -END MODULE TimeIntegratorClass +END MODULE TimeIntegratorClass \ No newline at end of file diff --git a/Solver/test/CahnHilliard/outdated/Pipe/Pipe.control b/Solver/test/CahnHilliard/outdated/Pipe/Pipe.control index 82b9d3d73..d369997dd 100644 --- a/Solver/test/CahnHilliard/outdated/Pipe/Pipe.control +++ b/Solver/test/CahnHilliard/outdated/Pipe/Pipe.control @@ -1,40 +1,40 @@ -Flow equations = "NS" -mesh file name = "MESH/test_pipe_100el.mesh" -Polynomial order = 5 -Number of time steps = 10000 -Output Interval = 10 -Convergence tolerance = 1.d-10 -riemann solver = standard roe -discretization nodes = Gauss-Lobatto -time integration = imex - -#define Jacobian - type = 1 -#end - -dt = 5.0e-4 -mach number = 0.1 -viscous discretization = ip -cahn-hilliard discretization = ip -inviscid discretization = split-form -averaging = Pirozzoli -density ratio (rho2/rho1) = 0.3d0 -viscosity ratio (mu2/mu1) = 1.0d0 -interior penalty variant = sipg -Reynolds number = 10000.0 -interface width (dimensionless) = 0.2d0 -peclet number = 1.0d0 ! 5.0d0 -wall contact angle = 0.0d0 !-0.11d0 -capilar number = 10.0d300 -AOA theta = 0.0 -AOA phi = 90.0 -autosave mode = iteration -autosave interval = 50 -solution file name = "RESULTS/test_pipe.hsol" -save gradients with solution = .true. -restart = .false. -restart file name = "RESULTS/test_pipe_0000000005.hsol" -Number of boundaries = 3 -pipe 0.0 NoSlipAdiabaticWall -inlet 0.0 periodic+ -outlet 1.0 periodic- +Flow equations = "NS" +mesh file name = "MESH/test_pipe_100el.mesh" +Polynomial order = 5 +Number of time steps = 10000 +Output Interval = 10 +Convergence tolerance = 1.d-10 +riemann solver = standard roe +discretization nodes = Gauss-Lobatto +time integration = imex + +#define Jacobian + type = 1 +#end + +dt = 5.0e-4 +mach number = 0.1 +viscous discretization = ip +cahn-hilliard discretization = ip +inviscid discretization = split-form +averaging = Pirozzoli +density ratio (rho2/rho1) = 0.3d0 +viscosity ratio (mu2/mu1) = 1.0d0 +interior penalty variant = sipg +Reynolds number = 10000.0 +interface width (dimensionless) = 0.2d0 +peclet number = 1.0d0 ! 5.0d0 +wall contact angle = 0.0d0 !-0.11d0 +capilar number = 10.0d300 +AOA theta = 0.0 +AOA phi = 90.0 +autosave mode = iteration +autosave interval = 50 +solution file name = "RESULTS/test_pipe.hsol" +save gradients with solution = .true. +restart = .false. +restart file name = "RESULTS/test_pipe_0000000005.hsol" +Number of boundaries = 3 +pipe 0.0 NoSlipAdiabaticWall +inlet 0.0 periodic+ +outlet 1.0 periodic- diff --git a/Solver/test/Euler/outdated/TestEulerJacobians/Makefile b/Solver/test/Euler/outdated/TestEulerJacobians/Makefile index 3c7cf61f4..d1a5a7bb9 100644 --- a/Solver/test/Euler/outdated/TestEulerJacobians/Makefile +++ b/Solver/test/Euler/outdated/TestEulerJacobians/Makefile @@ -5,14 +5,14 @@ ## libproblemfile.so with user specific procedures, such as initial ## and boundary conditions or solution checks. ## -## Usage: -## -> cd $(CASE_DIR)/SETUP -## -> make COMPILER=gfortran/ifort MODE=RELEASE/DEBUG COMM=SERIAL/PARALLEL -## -> cd $(CASE_DIR) -## -> ldd ./HORSES3D (to check whether the solver points -## to the default library (found in -## $HOME_DIR) or to the local library, -## ./SETUP/libproblemfile.so) +## Usage: +## -> cd $(CASE_DIR)/SETUP +## -> make COMPILER=gfortran/ifort MODE=RELEASE/DEBUG COMM=SERIAL/PARALLEL +## -> cd $(CASE_DIR) +## -> ldd ./HORSES3D (to check whether the solver points +## to the default library (found in +## $HOME_DIR) or to the local library, +## ./SETUP/libproblemfile.so) ## ##################################################################### HOME_DIR=../../.. @@ -85,5 +85,4 @@ endif all: - $(FC) -I$(HORSESINC) -I$(NSINC) -o TestJacobians src/main.f90 $(HORSESLIB) - + $(FC) -I$(HORSESINC) -I$(NSINC) -o TestJacobians src/main.f90 $(HORSESLIB) diff --git a/Solver/test/NavierStokes/IBM_Cylinder/IBM/cylinder.stl b/Solver/test/NavierStokes/IBM_Cylinder/IBM/cylinder.stl new file mode 100644 index 0000000000000000000000000000000000000000..905c608e45e35f1f4f10d605f2dd3046690fea43 GIT binary patch literal 39884 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 literal 0 HcmV?d00001 diff --git a/Solver/test/NavierStokes/IBM_Cylinder/IBMCylinder.control b/Solver/test/NavierStokes/IBM_Cylinder/IBMCylinder.control new file mode 100644 index 000000000..93fe882d4 --- /dev/null +++ b/Solver/test/NavierStokes/IBM_Cylinder/IBMCylinder.control @@ -0,0 +1,65 @@ +/* Control file for the implicit Navier-Stokes solver */ +Flow equations = "NS" +mesh file name = "../../TestMeshes/IBMCylinder.msh" + +!--STL +stl file name = "cylinder" + +Polynomial order = 3 +Number of time steps = 20 +Output Interval = 5 +autosave mode = "iteration" +autosave interval = 50 + +mach number = 0.2d0 +Reynolds number = 40.0d0 + + +solution file name = "RESULTS/IBMCylinder.hsol" +save gradients with soluton = .false. +restart = .false. +restart file name = "RESULTS/IBMCylinder_0001140000.hsol" +riemann solver = "lax-friedrichs" + +viscous discretization = "BR1" + +autosave mode = "iteration" +autosave interval = 10000 + +convergence tolerance = 1.0d-12 +cfl = 0.1d0 +dcfl = 0.1d0 + + +#define IBM + name = Cylinder + active = .true. + describe = .true. + number of objects = 3 + number of interpolation points = 15 + plot mask = .true. +#end + +#define boundary inlet + type = InFlow +#end + +#define boundary outlet + type = OutFlow +#end + +#define boundary up + type = FreeSlipWall +#end + +#define boundary down + type = FreeSlipWall +#end + +#define boundary walls + type = FreeSlipWall +#end + +#define boundary cylinder + type = NoSlipWall +#end diff --git a/Solver/test/NavierStokes/IBM_Cylinder/MESH/cylinder.stl b/Solver/test/NavierStokes/IBM_Cylinder/MESH/cylinder.stl new file mode 100644 index 0000000000000000000000000000000000000000..905c608e45e35f1f4f10d605f2dd3046690fea43 GIT binary patch literal 39884 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 literal 0 HcmV?d00001 diff --git a/Solver/test/NavierStokes/IBM_Cylinder/SETUP/ProblemFile.f90 b/Solver/test/NavierStokes/IBM_Cylinder/SETUP/ProblemFile.f90 new file mode 100644 index 000000000..f8b4d4000 --- /dev/null +++ b/Solver/test/NavierStokes/IBM_Cylinder/SETUP/ProblemFile.f90 @@ -0,0 +1,629 @@ +! +!//////////////////////////////////////////////////////////////////////// +! +! The Problem File contains user defined procedures +! that are used to "personalize" i.e. define a specific +! problem to be solved. These procedures include initial conditions, +! exact solutions (e.g. for tests), etc. and allow modifications +! without having to modify the main code. +! +! The procedures, *even if empty* that must be defined are +! +! UserDefinedSetUp +! UserDefinedInitialCondition(mesh) +! UserDefinedPeriodicOperation(mesh) +! UserDefinedFinalize(mesh) +! UserDefinedTermination +! +!//////////////////////////////////////////////////////////////////////// +! +#include "Includes.h" +module ProblemFileFunctions + implicit none + + abstract interface + subroutine UserDefinedStartup_f + end subroutine UserDefinedStartup_f + + SUBROUTINE UserDefinedFinalSetup_f(mesh & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + ) + USE HexMeshClass + use FluidData + IMPLICIT NONE + CLASS(HexMesh) :: mesh +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + END SUBROUTINE UserDefinedFinalSetup_f + + subroutine UserDefinedInitialCondition_f(mesh & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + ) + use smconstants + use physicsstorage + use hexmeshclass + use fluiddata + implicit none + class(hexmesh) :: mesh +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + end subroutine UserDefinedInitialCondition_f +#ifdef FLOW + subroutine UserDefinedState_f(x, t, nHat, Q, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP) :: x(NDIM) + real(kind=RP) :: t + real(kind=RP) :: nHat(NDIM) + real(kind=RP) :: Q(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedState_f + + subroutine UserDefinedGradVars_f(x, t, nHat, Q, U, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: t + real(kind=RP), intent(in) :: nHat(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(inout) :: U(NGRAD) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedGradVars_f + + + subroutine UserDefinedNeumann_f(x, t, nHat, Q, U_x, U_y, U_z, flux, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: t + real(kind=RP), intent(in) :: nHat(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(in) :: U_x(NGRAD) + real(kind=RP), intent(in) :: U_y(NGRAD) + real(kind=RP), intent(in) :: U_z(NGRAD) + real(kind=RP), intent(inout) :: flux(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedNeumann_f + +#endif +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedPeriodicOperation_f(mesh, time, dt, Monitors) + use SMConstants + USE HexMeshClass + use MonitorsClass + IMPLICIT NONE + CLASS(HexMesh) :: mesh + REAL(KIND=RP) :: time + REAL(KIND=RP) :: dt + type(Monitor_t), intent(in) :: monitors + END SUBROUTINE UserDefinedPeriodicOperation_f +! +!//////////////////////////////////////////////////////////////////////// +! +#ifdef FLOW + subroutine UserDefinedSourceTermNS_f(x, Q, time, S, thermodynamics_, dimensionless_, refValues_ & +#ifdef CAHNHILLIARD +,multiphase_ & +#endif +) + use SMConstants + USE HexMeshClass + use FluidData + use PhysicsStorage + IMPLICIT NONE + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(in) :: time + real(kind=RP), intent(inout) :: S(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + end subroutine UserDefinedSourceTermNS_f +#endif +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedFinalize_f(mesh, time, iter, maxResidual & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + , monitors, & + elapsedTime, & + CPUTime ) + use SMConstants + USE HexMeshClass + use FluidData + use MonitorsClass + IMPLICIT NONE + CLASS(HexMesh) :: mesh + REAL(KIND=RP) :: time + integer :: iter + real(kind=RP) :: maxResidual +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + type(Monitor_t), intent(in) :: monitors + real(kind=RP), intent(in) :: elapsedTime + real(kind=RP), intent(in) :: CPUTime + END SUBROUTINE UserDefinedFinalize_f + + SUBROUTINE UserDefinedTermination_f + implicit none + END SUBROUTINE UserDefinedTermination_f + end interface + +end module ProblemFileFunctions + + SUBROUTINE UserDefinedStartup +! +! -------------------------------- +! Called before any other routines +! -------------------------------- +! + IMPLICIT NONE + END SUBROUTINE UserDefinedStartup +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedFinalSetup(mesh & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + ) +! +! ---------------------------------------------------------------------- +! Called after the mesh is read in to allow mesh related initializations +! or memory allocations. +! ---------------------------------------------------------------------- +! + USE HexMeshClass + use PhysicsStorage + use FluidData + IMPLICIT NONE + CLASS(HexMesh) :: mesh +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + END SUBROUTINE UserDefinedFinalSetup +! +!//////////////////////////////////////////////////////////////////////// +! + subroutine UserDefinedInitialCondition(mesh & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + ) +! +! ------------------------------------------------ +! called to set the initial condition for the flow +! - by default it sets an uniform initial +! condition. +! ------------------------------------------------ +! + use smconstants + use physicsstorage + use hexmeshclass + use fluiddata + implicit none + class(hexmesh) :: mesh +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif +! +! --------------- +! local variables +! --------------- +! + integer :: eid, i, j, k + real(kind=RP) :: qq, u, v, w, p +#if defined(NAVIERSTOKES) + real(kind=RP) :: Q(NCONS), phi, theta +#endif + +! +! --------------------------------------- +! Navier-Stokes default initial condition +! --------------------------------------- +! +#if defined(NAVIERSTOKES) + associate ( gammaM2 => dimensionless_ % gammaM2, & + gamma => thermodynamics_ % gamma ) + theta = refvalues_ % AOAtheta*(pi/180.0_RP) + phi = refvalues_ % AOAphi*(pi/180.0_RP) + + do eID = 1, mesh % no_of_elements + associate( Nx => mesh % elements(eID) % Nxyz(1), & + ny => mesh % elemeNts(eID) % nxyz(2), & + Nz => mesh % elements(eID) % Nxyz(3) ) + do k = 0, Nz; do j = 0, Ny; do i = 0, Nx + qq = 1.0_RP + u = qq*cos(theta)*cos(phi) + v = qq*sin(theta)*cos(phi) + w = qq*sin(phi) + + q(1) = 1.0_RP + p = 1.0_RP/(gammaM2) + q(2) = q(1)*u + q(3) = q(1)*v + q(4) = q(1)*w + q(5) = p/(gamma - 1._RP) + 0.5_RP*q(1)*(u**2 + v**2 + w**2) + + mesh % elements(eID) % storage % q(:,i,j,k) = q + end do; end do; end do + end associate + end do + + end associate +#endif +! +! ------------------------------------------------------ +! Incompressible Navier-Stokes default initial condition +! ------------------------------------------------------ +! +#if defined(INCNS) + do eID = 1, mesh % no_of_elements + associate( Nx => mesh % elements(eID) % Nxyz(1), & + ny => mesh % elemeNts(eID) % nxyz(2), & + Nz => mesh % elements(eID) % Nxyz(3) ) + do k = 0, Nz; do j = 0, Ny; do i = 0, Nx + mesh % elements(eID) % storage % q(:,i,j,k) = [1.0_RP, 1.0_RP,0.0_RP,0.0_RP,0.0_RP] + end do; end do; end do + end associate + end do +#endif + +! +! --------------------------------------- +! Cahn-Hilliard default initial condition +! --------------------------------------- +! +#ifdef CAHNHILLIARD + call random_seed() + + do eid = 1, mesh % no_of_elements + associate( Nx => mesh % elements(eid) % Nxyz(1), & + Ny => mesh % elements(eid) % Nxyz(2), & + Nz => mesh % elements(eid) % Nxyz(3) ) + associate(e => mesh % elements(eID) % storage) + call random_number(e % c) + e % c = 2.0_RP * (e % c - 0.5_RP) + end associate + end associate + end do +#endif + + end subroutine UserDefinedInitialCondition +#ifdef FLOW + subroutine UserDefinedState1(x, t, nHat, Q, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: t + real(kind=RP), intent(in) :: nHat(NDIM) + real(kind=RP), intent(inout) :: Q(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedState1 + + subroutine UserDefinedGradVars1(x, t, nHat, Q, U, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: t + real(kind=RP), intent(in) :: nHat(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(inout) :: U(NGRAD) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedGradVars1 + + subroutine UserDefinedNeumann1(x, t, nHat, Q, U_x, U_y, U_z, flux, thermodynamics_, dimensionless_, refValues_) + use SMConstants + use PhysicsStorage + use FluidData + implicit none + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: t + real(kind=RP), intent(in) :: nHat(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(in) :: U_x(NGRAD) + real(kind=RP), intent(in) :: U_y(NGRAD) + real(kind=RP), intent(in) :: U_z(NGRAD) + real(kind=RP), intent(inout) :: flux(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ + end subroutine UserDefinedNeumann1 +#endif +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedPeriodicOperation(mesh, time, dt, Monitors) +! +! ---------------------------------------------------------- +! Called before every time-step to allow periodic operations +! to be performed +! ---------------------------------------------------------- +! + use SMConstants + USE HexMeshClass + use MonitorsClass + IMPLICIT NONE + CLASS(HexMesh) :: mesh + REAL(KIND=RP) :: time + REAL(KIND=RP) :: dt + type(Monitor_t), intent(in) :: monitors + + END SUBROUTINE UserDefinedPeriodicOperation +! +!//////////////////////////////////////////////////////////////////////// +! +#ifdef FLOW + subroutine UserDefinedSourceTermNS(x, Q, time, S, thermodynamics_, dimensionless_, refValues_ & +#ifdef CAHNHILLIARD +, multiphase_ & +#endif +) +! +! -------------------------------------------- +! Called to apply source terms to the equation +! -------------------------------------------- +! + use SMConstants + USE HexMeshClass + use PhysicsStorage + use FluidData + IMPLICIT NONE + real(kind=RP), intent(in) :: x(NDIM) + real(kind=RP), intent(in) :: Q(NCONS) + real(kind=RP), intent(in) :: time + real(kind=RP), intent(inout) :: S(NCONS) + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif +! +! --------------- +! Local variables +! --------------- +! + integer :: i, j, k, eID +! +! Usage example +! ------------- +! S(:) = x(1) + x(2) + x(3) + time + + end subroutine UserDefinedSourceTermNS +#endif +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedFinalize(mesh, time, iter, maxResidual & +#ifdef FLOW + , thermodynamics_ & + , dimensionless_ & + , refValues_ & +#endif +#ifdef CAHNHILLIARD + , multiphase_ & +#endif + , monitors, & + elapsedTime, & + CPUTime ) +! +! -------------------------------------------------------- +! Called after the solution computed to allow, for example +! error tests to be performed +! -------------------------------------------------------- +! + use SMConstants + use FTAssertions + USE HexMeshClass + use PhysicsStorage + use FluidData + use MonitorsClass + IMPLICIT NONE + CLASS(HexMesh) :: mesh + REAL(KIND=RP) :: time + integer :: iter + real(kind=RP) :: maxResidual +#ifdef FLOW + type(Thermodynamics_t), intent(in) :: thermodynamics_ + type(Dimensionless_t), intent(in) :: dimensionless_ + type(RefValues_t), intent(in) :: refValues_ +#endif +#ifdef CAHNHILLIARD + type(Multiphase_t), intent(in) :: multiphase_ +#endif + type(Monitor_t), intent(in) :: monitors + real(kind=RP), intent(in) :: elapsedTime + real(kind=RP), intent(in) :: CPUTime +! +! --------------- +! Local variables +! --------------- +! + CHARACTER(LEN=29) :: testName = "IBM Cylinder" + REAL(KIND=RP) :: maxError + REAL(KIND=RP), ALLOCATABLE :: QExpected(:,:,:,:) + INTEGER :: eID + INTEGER :: i, j, k, N + TYPE(FTAssertionsManager), POINTER :: sharedManager + LOGICAL :: success +! +! ----------------------------------------------------------------------------------------- +! Expected solutions. +! InnerCylinder 0.0 NoSlipAdiabaticWall +! Front 0.0 Inflow +! bottom 0.0 FreeSlipWall +! top 0.0 FreeSlipWall +! Back 0.0 Inflow +! Left 0.0 Inflow +! Right 0.0 OutflowSpecifyP +! ----------------------------------------------------------------------------------------- +! +! +! ------------------------------------------------ +! Expected Solutions: Wall conditions on the sides +! Number of iterations are for CFL of 0.3, for +! the roe solver and mach = 0.3 +! ------------------------------------------------ +! +#if defined(NAVIERSTOKES) + INTEGER :: iterations(3:7) = [20, 0, 0, 0, 0] + + real(kind=RP), parameter :: residuals(5) = [ 1.2223517957664467E+02_RP, & + 6.7711555047253364E+02_RP, & + 1.0571976691827385E+02_RP, & + 6.0391096545765535E+01_RP, & + 6.3046070987611856E+03_RP] + +! + N = mesh % elements(1) % Nxyz(1) ! This works here because all the elements have the same order in all directions + + CALL initializeSharedAssertionsManager + sharedManager => sharedAssertionsManager() + + CALL FTAssertEqual(expectedValue = residuals(1)+1.0_RP, & + actualValue = monitors % residuals % values(1,1)+1.0_RP, & + tol = 1.d-11, & + msg = "Continuity residual") + + CALL FTAssertEqual(expectedValue = residuals(2)+1.0_RP, & + actualValue = monitors % residuals % values(2,1)+1.0_RP, & + tol = 1.d-11, & + msg = "X-Momentum residual") + + CALL FTAssertEqual(expectedValue = residuals(3)+1.0_RP, & + actualValue = monitors % residuals % values(3,1)+1.0_RP, & + tol = 1.d-11, & + msg = "Y-Momentum residual") + + CALL FTAssertEqual(expectedValue = residuals(4)+1.0_RP, & + actualValue = monitors % residuals % values(4,1)+1.0_RP, & + tol = 1.d-11, & + msg = "Z-Momentum residual") + + CALL FTAssertEqual(expectedValue = residuals(5)+1.0_RP, & + actualValue = monitors % residuals % values(5,1)+1.0_RP, & + tol = 1.d-11, & + msg = "Energy residual") + + + CALL FTAssertEqual(expectedValue = iterations(N), & + actualValue = iter, & + msg = "Number of time steps to tolerance") + + + CALL sharedManager % summarizeAssertions(title = testName,iUnit = 6) + + IF ( sharedManager % numberOfAssertionFailures() == 0 ) THEN + WRITE(6,*) testName, " ... Passed" + WRITE(6,*) "This test case has no expected solution yet, only checks the residual after 20 iterations." + ELSE + WRITE(6,*) testName, " ... Failed" + WRITE(6,*) "NOTE: Failure is expected when the max eigenvalue procedure is changed." + WRITE(6,*) " If that is done, re-compute the expected values and modify this procedure" + STOP 99 + END IF + WRITE(6,*) + + CALL finalizeSharedAssertionsManager + CALL detachSharedAssertionsManager +#endif + + + END SUBROUTINE UserDefinedFinalize +! +!//////////////////////////////////////////////////////////////////////// +! + SUBROUTINE UserDefinedTermination +! +! ----------------------------------------------- +! Called at the the end of the main driver after +! everything else is done. +! ----------------------------------------------- +! + IMPLICIT NONE + END SUBROUTINE UserDefinedTermination \ No newline at end of file diff --git a/Solver/test/TestMeshes/IBMCylinder.msh b/Solver/test/TestMeshes/IBMCylinder.msh new file mode 100644 index 000000000..1040a6e04 --- /dev/null +++ b/Solver/test/TestMeshes/IBMCylinder.msh @@ -0,0 +1,42998 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$PhysicalNames +6 +2 27 "walls" +2 28 "inlet" +2 29 "outlet" +2 30 "up" +2 31 "down" +3 32 "fluid" +$EndPhysicalNames +$Entities +8 12 6 1 +1 -10 -10 0.001 0 +2 -10 10 0.001 0 +3 20 10 0.001 0 +4 20 -10 0.001 0 +5 -10 -10 0.102 0 +6 -10 10 0.102 0 +10 20 10 0.102 0 +14 20 -10 0.102 0 +1 -10 -10 0.001 -10 10 0.001 0 2 1 -2 +2 -10 10 0.001 20 10 0.001 0 2 2 -3 +3 20 -10 0.001 20 10 0.001 0 2 3 -4 +4 -10 -10 0.001 20 -10 0.001 0 2 4 -1 +6 -10 -10 0.102 -10 10 0.102 0 2 5 -6 +7 -10 10 0.102 20 10 0.102 0 2 6 -10 +8 20 -10 0.102 20 10 0.102 0 2 10 -14 +9 -10 -10 0.102 20 -10 0.102 0 2 14 -5 +11 -10 -10 0.001000000000000001 -10 -10 0.102 0 2 1 -5 +12 -10 10 0.001000000000000001 -10 10 0.102 0 2 2 -6 +16 20 10 0.001000000000000001 20 10 0.102 0 2 3 -10 +20 20 -10 0.001000000000000001 20 -10 0.102 0 2 4 -14 +1 -10 -10 0.001 20 10 0.001 1 27 4 1 2 3 4 +13 -10 -10 0.001000000000000001 -10 10 0.102 1 28 4 1 12 -6 -11 +17 -10 10 0.001000000000000001 20 10 0.102 1 30 4 2 16 -7 -12 +21 20 -10 0.001000000000000001 20 10 0.102 1 29 4 3 20 -8 -16 +25 -10 -10 0.001000000000000001 20 -10 0.102 1 31 4 4 11 -9 -20 +26 -10 -10 0.102 20 10 0.102 1 27 4 6 7 8 9 +1 -10 -10 0.001000000000000001 20 10 0.102 1 32 6 -1 26 13 17 21 25 +$EndEntities +$Nodes +23 12278 1 12278 +0 1 0 1 +1 +-10 -10 0.001 +0 2 0 1 +2 +-10 10 0.001 +0 3 0 1 +3 +20 10 0.001 +0 4 0 1 +4 +20 -10 0.001 +0 5 0 1 +5 +-10 -10 0.102 +0 6 0 1 +6 +-10 10 0.102 +0 10 0 1 +7 +20 10 0.102 +0 14 0 1 +8 +20 -10 0.102 +1 1 0 19 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +-10 -8.999999999998767 0.001 +-10 -7.999999999997533 0.001 +-10 -6.99999999999852 0.001 +-10 -6.000000000001727 0.001 +-10 -5.000000000004932 0.001 +-10 -4.000000000008139 0.001 +-10 -3.000000000011345 0.001 +-10 -2.000000000014481 0.001 +-10 -1.000000000013525 0.001 +-10 -1.229061297181033e-11 0.001 +-10 0.999999999988944 0.001 +-10 1.999999999990173 0.001 +-10 2.99999999999141 0.001 +-10 3.999999999992642 0.001 +-10 4.999999999993875 0.001 +-10 5.99999999999511 0.001 +-10 6.99999999999633 0.001 +-10 7.999999999997552 0.001 +-10 8.999999999998778 0.001 +1 2 0 29 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +-8.999999999998209 10 0.001 +-7.999999999996418 10 0.001 +-6.999999999994627 10 0.001 +-5.999999999993576 10 0.001 +-4.999999999994746 10 0.001 +-3.999999999995913 10 0.001 +-2.999999999997082 10 0.001 +-1.999999999998298 10 0.001 +-1.000000000002126 10 0.001 +-6.259881502046483e-12 10 0.001 +0.9999999999896083 10 0.001 +1.999999999985477 10 0.001 +2.999999999981341 10 0.001 +3.999999999977211 10 0.001 +4.999999999973427 10 0.001 +5.999999999974873 10 0.001 +6.999999999976669 10 0.001 +7.999999999978463 10 0.001 +8.999999999980258 10 0.001 +9.999999999982052 10 0.001 +10.99999999998385 10 0.001 +11.99999999998564 10 0.001 +12.99999999998743 10 0.001 +13.99999999998923 10 0.001 +14.99999999999103 10 0.001 +15.99999999999282 10 0.001 +16.99999999999462 10 0.001 +17.99999999999641 10 0.001 +18.99999999999821 10 0.001 +1 3 0 19 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +20 8.999999999998767 0.001 +20 7.999999999997533 0.001 +20 6.99999999999852 0.001 +20 6.000000000001727 0.001 +20 5.000000000004932 0.001 +20 4.000000000008139 0.001 +20 3.000000000011345 0.001 +20 2.000000000014481 0.001 +20 1.000000000013525 0.001 +20 1.229061297181033e-11 0.001 +20 -0.999999999988944 0.001 +20 -1.999999999990173 0.001 +20 -2.99999999999141 0.001 +20 -3.999999999992642 0.001 +20 -4.999999999993875 0.001 +20 -5.99999999999511 0.001 +20 -6.99999999999633 0.001 +20 -7.999999999997552 0.001 +20 -8.999999999998778 0.001 +1 4 0 29 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +103 +104 +18.99999999999864 -10 0.001 +17.99999999999727 -10 0.001 +16.99999999999591 -10 0.001 +15.99999999999455 -10 0.001 +14.99999999999318 -10 0.001 +13.99999999999182 -10 0.001 +12.99999999999046 -10 0.001 +11.99999999998919 -10 0.001 +10.99999999999315 -10 0.001 +9.999999999997705 -10 0.001 +9.000000000002265 -10 0.001 +8.000000000006825 -10 0.001 +7.000000000011385 -10 0.001 +6.000000000015945 -10 0.001 +5.000000000020156 -10 0.001 +4.000000000019138 -10 0.001 +3.000000000017771 -10 0.001 +2.000000000016403 -10 0.001 +1.000000000015039 -10 0.001 +1.367084223602433e-11 -10 0.001 +-0.9999999999876934 -10 0.001 +-1.999999999989065 -10 0.001 +-2.999999999990433 -10 0.001 +-3.999999999991793 -10 0.001 +-4.999999999993165 -10 0.001 +-5.999999999994532 -10 0.001 +-6.9999999999959 -10 0.001 +-7.999999999997264 -10 0.001 +-8.999999999998632 -10 0.001 +1 6 0 19 +105 +106 +107 +108 +109 +110 +111 +112 +113 +114 +115 +116 +117 +118 +119 +120 +121 +122 +123 +-10 -8.999999999998767 0.102 +-10 -7.999999999997533 0.102 +-10 -6.99999999999852 0.102 +-10 -6.000000000001727 0.102 +-10 -5.000000000004932 0.102 +-10 -4.000000000008139 0.102 +-10 -3.000000000011345 0.102 +-10 -2.000000000014481 0.102 +-10 -1.000000000013525 0.102 +-10 -1.229061297181033e-11 0.102 +-10 0.999999999988944 0.102 +-10 1.999999999990173 0.102 +-10 2.99999999999141 0.102 +-10 3.999999999992642 0.102 +-10 4.999999999993875 0.102 +-10 5.99999999999511 0.102 +-10 6.99999999999633 0.102 +-10 7.999999999997552 0.102 +-10 8.999999999998778 0.102 +1 7 0 29 +124 +125 +126 +127 +128 +129 +130 +131 +132 +133 +134 +135 +136 +137 +138 +139 +140 +141 +142 +143 +144 +145 +146 +147 +148 +149 +150 +151 +152 +-8.999999999998209 10 0.102 +-7.999999999996418 10 0.102 +-6.999999999994627 10 0.102 +-5.999999999993576 10 0.102 +-4.999999999994746 10 0.102 +-3.999999999995913 10 0.102 +-2.999999999997082 10 0.102 +-1.999999999998298 10 0.102 +-1.000000000002126 10 0.102 +-6.259881502046483e-12 10 0.102 +0.9999999999896083 10 0.102 +1.999999999985477 10 0.102 +2.999999999981341 10 0.102 +3.999999999977211 10 0.102 +4.999999999973427 10 0.102 +5.999999999974873 10 0.102 +6.999999999976669 10 0.102 +7.999999999978463 10 0.102 +8.999999999980258 10 0.102 +9.999999999982052 10 0.102 +10.99999999998385 10 0.102 +11.99999999998564 10 0.102 +12.99999999998743 10 0.102 +13.99999999998923 10 0.102 +14.99999999999103 10 0.102 +15.99999999999282 10 0.102 +16.99999999999462 10 0.102 +17.99999999999641 10 0.102 +18.99999999999821 10 0.102 +1 8 0 19 +153 +154 +155 +156 +157 +158 +159 +160 +161 +162 +163 +164 +165 +166 +167 +168 +169 +170 +171 +20 8.999999999998767 0.102 +20 7.999999999997533 0.102 +20 6.99999999999852 0.102 +20 6.000000000001727 0.102 +20 5.000000000004932 0.102 +20 4.000000000008139 0.102 +20 3.000000000011345 0.102 +20 2.000000000014481 0.102 +20 1.000000000013525 0.102 +20 1.229061297181033e-11 0.102 +20 -0.999999999988944 0.102 +20 -1.999999999990173 0.102 +20 -2.99999999999141 0.102 +20 -3.999999999992642 0.102 +20 -4.999999999993875 0.102 +20 -5.99999999999511 0.102 +20 -6.99999999999633 0.102 +20 -7.999999999997552 0.102 +20 -8.999999999998778 0.102 +1 9 0 29 +172 +173 +174 +175 +176 +177 +178 +179 +180 +181 +182 +183 +184 +185 +186 +187 +188 +189 +190 +191 +192 +193 +194 +195 +196 +197 +198 +199 +200 +18.99999999999864 -10 0.102 +17.99999999999727 -10 0.102 +16.99999999999591 -10 0.102 +15.99999999999455 -10 0.102 +14.99999999999318 -10 0.102 +13.99999999999182 -10 0.102 +12.99999999999046 -10 0.102 +11.99999999998919 -10 0.102 +10.99999999999315 -10 0.102 +9.999999999997705 -10 0.102 +9.000000000002265 -10 0.102 +8.000000000006825 -10 0.102 +7.000000000011385 -10 0.102 +6.000000000015945 -10 0.102 +5.000000000020156 -10 0.102 +4.000000000019138 -10 0.102 +3.000000000017771 -10 0.102 +2.000000000016403 -10 0.102 +1.000000000015039 -10 0.102 +1.367084223602433e-11 -10 0.102 +-0.9999999999876934 -10 0.102 +-1.999999999989065 -10 0.102 +-2.999999999990433 -10 0.102 +-3.999999999991793 -10 0.102 +-4.999999999993165 -10 0.102 +-5.999999999994532 -10 0.102 +-6.9999999999959 -10 0.102 +-7.999999999997264 -10 0.102 +-8.999999999998632 -10 0.102 +2 1 0 6039 +201 +202 +203 +204 +205 +206 +207 +208 +209 +210 +211 +212 +213 +214 +215 +216 +217 +218 +219 +220 +221 +222 +223 +224 +225 +226 +227 +228 +229 +230 +231 +232 +233 +234 +235 +236 +237 +238 +239 +240 +241 +242 +243 +244 +245 +246 +247 +248 +249 +250 +251 +252 +253 +254 +255 +256 +257 +258 +259 +260 +261 +262 +263 +264 +265 +266 +267 +268 +269 +270 +271 +272 +273 +274 +275 +276 +277 +278 +279 +280 +281 +282 +283 +284 +285 +286 +287 +288 +289 +290 +291 +292 +293 +294 +295 +296 +297 +298 +299 +300 +301 +302 +303 +304 +305 +306 +307 +308 +309 +310 +311 +312 +313 +314 +315 +316 +317 +318 +319 +320 +321 +322 +323 +324 +325 +326 +327 +328 +329 +330 +331 +332 +333 +334 +335 +336 +337 +338 +339 +340 +341 +342 +343 +344 +345 +346 +347 +348 +349 +350 +351 +352 +353 +354 +355 +356 +357 +358 +359 +360 +361 +362 +363 +364 +365 +366 +367 +368 +369 +370 +371 +372 +373 +374 +375 +376 +377 +378 +379 +380 +381 +382 +383 +384 +385 +386 +387 +388 +389 +390 +391 +392 +393 +394 +395 +396 +397 +398 +399 +400 +401 +402 +403 +404 +405 +406 +407 +408 +409 +410 +411 +412 +413 +414 +415 +416 +417 +418 +419 +420 +421 +422 +423 +424 +425 +426 +427 +428 +429 +430 +431 +432 +433 +434 +435 +436 +437 +438 +439 +440 +441 +442 +443 +444 +445 +446 +447 +448 +449 +450 +451 +452 +453 +454 +455 +456 +457 +458 +459 +460 +461 +462 +463 +464 +465 +466 +467 +468 +469 +470 +471 +472 +473 +474 +475 +476 +477 +478 +479 +480 +481 +482 +483 +484 +485 +486 +487 +488 +489 +490 +491 +492 +493 +494 +495 +496 +497 +498 +499 +500 +501 +502 +503 +504 +505 +506 +507 +508 +509 +510 +511 +512 +513 +514 +515 +516 +517 +518 +519 +520 +521 +522 +523 +524 +525 +526 +527 +528 +529 +530 +531 +532 +533 +534 +535 +536 +537 +538 +539 +540 +541 +542 +543 +544 +545 +546 +547 +548 +549 +550 +551 +552 +553 +554 +555 +556 +557 +558 +559 +560 +561 +562 +563 +564 +565 +566 +567 +568 +569 +570 +571 +572 +573 +574 +575 +576 +577 +578 +579 +580 +581 +582 +583 +584 +585 +586 +587 +588 +589 +590 +591 +592 +593 +594 +595 +596 +597 +598 +599 +600 +601 +602 +603 +604 +605 +606 +607 +608 +609 +610 +611 +612 +613 +614 +615 +616 +617 +618 +619 +620 +621 +622 +623 +624 +625 +626 +627 +628 +629 +630 +631 +632 +633 +634 +635 +636 +637 +638 +639 +640 +641 +642 +643 +644 +645 +646 +647 +648 +649 +650 +651 +652 +653 +654 +655 +656 +657 +658 +659 +660 +661 +662 +663 +664 +665 +666 +667 +668 +669 +670 +671 +672 +673 +674 +675 +676 +677 +678 +679 +680 +681 +682 +683 +684 +685 +686 +687 +688 +689 +690 +691 +692 +693 +694 +695 +696 +697 +698 +699 +700 +701 +702 +703 +704 +705 +706 +707 +708 +709 +710 +711 +712 +713 +714 +715 +716 +717 +718 +719 +720 +721 +722 +723 +724 +725 +726 +727 +728 +729 +730 +731 +732 +733 +734 +735 +736 +737 +738 +739 +740 +741 +742 +743 +744 +745 +746 +747 +748 +749 +750 +751 +752 +753 +754 +755 +756 +757 +758 +759 +760 +761 +762 +763 +764 +765 +766 +767 +768 +769 +770 +771 +772 +773 +774 +775 +776 +777 +778 +779 +780 +781 +782 +783 +784 +785 +786 +787 +788 +789 +790 +791 +792 +793 +794 +795 +796 +797 +798 +799 +800 +801 +802 +803 +804 +805 +806 +807 +808 +809 +810 +811 +812 +813 +814 +815 +816 +817 +818 +819 +820 +821 +822 +823 +824 +825 +826 +827 +828 +829 +830 +831 +832 +833 +834 +835 +836 +837 +838 +839 +840 +841 +842 +843 +844 +845 +846 +847 +848 +849 +850 +851 +852 +853 +854 +855 +856 +857 +858 +859 +860 +861 +862 +863 +864 +865 +866 +867 +868 +869 +870 +871 +872 +873 +874 +875 +876 +877 +878 +879 +880 +881 +882 +883 +884 +885 +886 +887 +888 +889 +890 +891 +892 +893 +894 +895 +896 +897 +898 +899 +900 +901 +902 +903 +904 +905 +906 +907 +908 +909 +910 +911 +912 +913 +914 +915 +916 +917 +918 +919 +920 +921 +922 +923 +924 +925 +926 +927 +928 +929 +930 +931 +932 +933 +934 +935 +936 +937 +938 +939 +940 +941 +942 +943 +944 +945 +946 +947 +948 +949 +950 +951 +952 +953 +954 +955 +956 +957 +958 +959 +960 +961 +962 +963 +964 +965 +966 +967 +968 +969 +970 +971 +972 +973 +974 +975 +976 +977 +978 +979 +980 +981 +982 +983 +984 +985 +986 +987 +988 +989 +990 +991 +992 +993 +994 +995 +996 +997 +998 +999 +1000 +1001 +1002 +1003 +1004 +1005 +1006 +1007 +1008 +1009 +1010 +1011 +1012 +1013 +1014 +1015 +1016 +1017 +1018 +1019 +1020 +1021 +1022 +1023 +1024 +1025 +1026 +1027 +1028 +1029 +1030 +1031 +1032 +1033 +1034 +1035 +1036 +1037 +1038 +1039 +1040 +1041 +1042 +1043 +1044 +1045 +1046 +1047 +1048 +1049 +1050 +1051 +1052 +1053 +1054 +1055 +1056 +1057 +1058 +1059 +1060 +1061 +1062 +1063 +1064 +1065 +1066 +1067 +1068 +1069 +1070 +1071 +1072 +1073 +1074 +1075 +1076 +1077 +1078 +1079 +1080 +1081 +1082 +1083 +1084 +1085 +1086 +1087 +1088 +1089 +1090 +1091 +1092 +1093 +1094 +1095 +1096 +1097 +1098 +1099 +1100 +1101 +1102 +1103 +1104 +1105 +1106 +1107 +1108 +1109 +1110 +1111 +1112 +1113 +1114 +1115 +1116 +1117 +1118 +1119 +1120 +1121 +1122 +1123 +1124 +1125 +1126 +1127 +1128 +1129 +1130 +1131 +1132 +1133 +1134 +1135 +1136 +1137 +1138 +1139 +1140 +1141 +1142 +1143 +1144 +1145 +1146 +1147 +1148 +1149 +1150 +1151 +1152 +1153 +1154 +1155 +1156 +1157 +1158 +1159 +1160 +1161 +1162 +1163 +1164 +1165 +1166 +1167 +1168 +1169 +1170 +1171 +1172 +1173 +1174 +1175 +1176 +1177 +1178 +1179 +1180 +1181 +1182 +1183 +1184 +1185 +1186 +1187 +1188 +1189 +1190 +1191 +1192 +1193 +1194 +1195 +1196 +1197 +1198 +1199 +1200 +1201 +1202 +1203 +1204 +1205 +1206 +1207 +1208 +1209 +1210 +1211 +1212 +1213 +1214 +1215 +1216 +1217 +1218 +1219 +1220 +1221 +1222 +1223 +1224 +1225 +1226 +1227 +1228 +1229 +1230 +1231 +1232 +1233 +1234 +1235 +1236 +1237 +1238 +1239 +1240 +1241 +1242 +1243 +1244 +1245 +1246 +1247 +1248 +1249 +1250 +1251 +1252 +1253 +1254 +1255 +1256 +1257 +1258 +1259 +1260 +1261 +1262 +1263 +1264 +1265 +1266 +1267 +1268 +1269 +1270 +1271 +1272 +1273 +1274 +1275 +1276 +1277 +1278 +1279 +1280 +1281 +1282 +1283 +1284 +1285 +1286 +1287 +1288 +1289 +1290 +1291 +1292 +1293 +1294 +1295 +1296 +1297 +1298 +1299 +1300 +1301 +1302 +1303 +1304 +1305 +1306 +1307 +1308 +1309 +1310 +1311 +1312 +1313 +1314 +1315 +1316 +1317 +1318 +1319 +1320 +1321 +1322 +1323 +1324 +1325 +1326 +1327 +1328 +1329 +1330 +1331 +1332 +1333 +1334 +1335 +1336 +1337 +1338 +1339 +1340 +1341 +1342 +1343 +1344 +1345 +1346 +1347 +1348 +1349 +1350 +1351 +1352 +1353 +1354 +1355 +1356 +1357 +1358 +1359 +1360 +1361 +1362 +1363 +1364 +1365 +1366 +1367 +1368 +1369 +1370 +1371 +1372 +1373 +1374 +1375 +1376 +1377 +1378 +1379 +1380 +1381 +1382 +1383 +1384 +1385 +1386 +1387 +1388 +1389 +1390 +1391 +1392 +1393 +1394 +1395 +1396 +1397 +1398 +1399 +1400 +1401 +1402 +1403 +1404 +1405 +1406 +1407 +1408 +1409 +1410 +1411 +1412 +1413 +1414 +1415 +1416 +1417 +1418 +1419 +1420 +1421 +1422 +1423 +1424 +1425 +1426 +1427 +1428 +1429 +1430 +1431 +1432 +1433 +1434 +1435 +1436 +1437 +1438 +1439 +1440 +1441 +1442 +1443 +1444 +1445 +1446 +1447 +1448 +1449 +1450 +1451 +1452 +1453 +1454 +1455 +1456 +1457 +1458 +1459 +1460 +1461 +1462 +1463 +1464 +1465 +1466 +1467 +1468 +1469 +1470 +1471 +1472 +1473 +1474 +1475 +1476 +1477 +1478 +1479 +1480 +1481 +1482 +1483 +1484 +1485 +1486 +1487 +1488 +1489 +1490 +1491 +1492 +1493 +1494 +1495 +1496 +1497 +1498 +1499 +1500 +1501 +1502 +1503 +1504 +1505 +1506 +1507 +1508 +1509 +1510 +1511 +1512 +1513 +1514 +1515 +1516 +1517 +1518 +1519 +1520 +1521 +1522 +1523 +1524 +1525 +1526 +1527 +1528 +1529 +1530 +1531 +1532 +1533 +1534 +1535 +1536 +1537 +1538 +1539 +1540 +1541 +1542 +1543 +1544 +1545 +1546 +1547 +1548 +1549 +1550 +1551 +1552 +1553 +1554 +1555 +1556 +1557 +1558 +1559 +1560 +1561 +1562 +1563 +1564 +1565 +1566 +1567 +1568 +1569 +1570 +1571 +1572 +1573 +1574 +1575 +1576 +1577 +1578 +1579 +1580 +1581 +1582 +1583 +1584 +1585 +1586 +1587 +1588 +1589 +1590 +1591 +1592 +1593 +1594 +1595 +1596 +1597 +1598 +1599 +1600 +1601 +1602 +1603 +1604 +1605 +1606 +1607 +1608 +1609 +1610 +1611 +1612 +1613 +1614 +1615 +1616 +1617 +1618 +1619 +1620 +1621 +1622 +1623 +1624 +1625 +1626 +1627 +1628 +1629 +1630 +1631 +1632 +1633 +1634 +1635 +1636 +1637 +1638 +1639 +1640 +1641 +1642 +1643 +1644 +1645 +1646 +1647 +1648 +1649 +1650 +1651 +1652 +1653 +1654 +1655 +1656 +1657 +1658 +1659 +1660 +1661 +1662 +1663 +1664 +1665 +1666 +1667 +1668 +1669 +1670 +1671 +1672 +1673 +1674 +1675 +1676 +1677 +1678 +1679 +1680 +1681 +1682 +1683 +1684 +1685 +1686 +1687 +1688 +1689 +1690 +1691 +1692 +1693 +1694 +1695 +1696 +1697 +1698 +1699 +1700 +1701 +1702 +1703 +1704 +1705 +1706 +1707 +1708 +1709 +1710 +1711 +1712 +1713 +1714 +1715 +1716 +1717 +1718 +1719 +1720 +1721 +1722 +1723 +1724 +1725 +1726 +1727 +1728 +1729 +1730 +1731 +1732 +1733 +1734 +1735 +1736 +1737 +1738 +1739 +1740 +1741 +1742 +1743 +1744 +1745 +1746 +1747 +1748 +1749 +1750 +1751 +1752 +1753 +1754 +1755 +1756 +1757 +1758 +1759 +1760 +1761 +1762 +1763 +1764 +1765 +1766 +1767 +1768 +1769 +1770 +1771 +1772 +1773 +1774 +1775 +1776 +1777 +1778 +1779 +1780 +1781 +1782 +1783 +1784 +1785 +1786 +1787 +1788 +1789 +1790 +1791 +1792 +1793 +1794 +1795 +1796 +1797 +1798 +1799 +1800 +1801 +1802 +1803 +1804 +1805 +1806 +1807 +1808 +1809 +1810 +1811 +1812 +1813 +1814 +1815 +1816 +1817 +1818 +1819 +1820 +1821 +1822 +1823 +1824 +1825 +1826 +1827 +1828 +1829 +1830 +1831 +1832 +1833 +1834 +1835 +1836 +1837 +1838 +1839 +1840 +1841 +1842 +1843 +1844 +1845 +1846 +1847 +1848 +1849 +1850 +1851 +1852 +1853 +1854 +1855 +1856 +1857 +1858 +1859 +1860 +1861 +1862 +1863 +1864 +1865 +1866 +1867 +1868 +1869 +1870 +1871 +1872 +1873 +1874 +1875 +1876 +1877 +1878 +1879 +1880 +1881 +1882 +1883 +1884 +1885 +1886 +1887 +1888 +1889 +1890 +1891 +1892 +1893 +1894 +1895 +1896 +1897 +1898 +1899 +1900 +1901 +1902 +1903 +1904 +1905 +1906 +1907 +1908 +1909 +1910 +1911 +1912 +1913 +1914 +1915 +1916 +1917 +1918 +1919 +1920 +1921 +1922 +1923 +1924 +1925 +1926 +1927 +1928 +1929 +1930 +1931 +1932 +1933 +1934 +1935 +1936 +1937 +1938 +1939 +1940 +1941 +1942 +1943 +1944 +1945 +1946 +1947 +1948 +1949 +1950 +1951 +1952 +1953 +1954 +1955 +1956 +1957 +1958 +1959 +1960 +1961 +1962 +1963 +1964 +1965 +1966 +1967 +1968 +1969 +1970 +1971 +1972 +1973 +1974 +1975 +1976 +1977 +1978 +1979 +1980 +1981 +1982 +1983 +1984 +1985 +1986 +1987 +1988 +1989 +1990 +1991 +1992 +1993 +1994 +1995 +1996 +1997 +1998 +1999 +2000 +2001 +2002 +2003 +2004 +2005 +2006 +2007 +2008 +2009 +2010 +2011 +2012 +2013 +2014 +2015 +2016 +2017 +2018 +2019 +2020 +2021 +2022 +2023 +2024 +2025 +2026 +2027 +2028 +2029 +2030 +2031 +2032 +2033 +2034 +2035 +2036 +2037 +2038 +2039 +2040 +2041 +2042 +2043 +2044 +2045 +2046 +2047 +2048 +2049 +2050 +2051 +2052 +2053 +2054 +2055 +2056 +2057 +2058 +2059 +2060 +2061 +2062 +2063 +2064 +2065 +2066 +2067 +2068 +2069 +2070 +2071 +2072 +2073 +2074 +2075 +2076 +2077 +2078 +2079 +2080 +2081 +2082 +2083 +2084 +2085 +2086 +2087 +2088 +2089 +2090 +2091 +2092 +2093 +2094 +2095 +2096 +2097 +2098 +2099 +2100 +2101 +2102 +2103 +2104 +2105 +2106 +2107 +2108 +2109 +2110 +2111 +2112 +2113 +2114 +2115 +2116 +2117 +2118 +2119 +2120 +2121 +2122 +2123 +2124 +2125 +2126 +2127 +2128 +2129 +2130 +2131 +2132 +2133 +2134 +2135 +2136 +2137 +2138 +2139 +2140 +2141 +2142 +2143 +2144 +2145 +2146 +2147 +2148 +2149 +2150 +2151 +2152 +2153 +2154 +2155 +2156 +2157 +2158 +2159 +2160 +2161 +2162 +2163 +2164 +2165 +2166 +2167 +2168 +2169 +2170 +2171 +2172 +2173 +2174 +2175 +2176 +2177 +2178 +2179 +2180 +2181 +2182 +2183 +2184 +2185 +2186 +2187 +2188 +2189 +2190 +2191 +2192 +2193 +2194 +2195 +2196 +2197 +2198 +2199 +2200 +2201 +2202 +2203 +2204 +2205 +2206 +2207 +2208 +2209 +2210 +2211 +2212 +2213 +2214 +2215 +2216 +2217 +2218 +2219 +2220 +2221 +2222 +2223 +2224 +2225 +2226 +2227 +2228 +2229 +2230 +2231 +2232 +2233 +2234 +2235 +2236 +2237 +2238 +2239 +2240 +2241 +2242 +2243 +2244 +2245 +2246 +2247 +2248 +2249 +2250 +2251 +2252 +2253 +2254 +2255 +2256 +2257 +2258 +2259 +2260 +2261 +2262 +2263 +2264 +2265 +2266 +2267 +2268 +2269 +2270 +2271 +2272 +2273 +2274 +2275 +2276 +2277 +2278 +2279 +2280 +2281 +2282 +2283 +2284 +2285 +2286 +2287 +2288 +2289 +2290 +2291 +2292 +2293 +2294 +2295 +2296 +2297 +2298 +2299 +2300 +2301 +2302 +2303 +2304 +2305 +2306 +2307 +2308 +2309 +2310 +2311 +2312 +2313 +2314 +2315 +2316 +2317 +2318 +2319 +2320 +2321 +2322 +2323 +2324 +2325 +2326 +2327 +2328 +2329 +2330 +2331 +2332 +2333 +2334 +2335 +2336 +2337 +2338 +2339 +2340 +2341 +2342 +2343 +2344 +2345 +2346 +2347 +2348 +2349 +2350 +2351 +2352 +2353 +2354 +2355 +2356 +2357 +2358 +2359 +2360 +2361 +2362 +2363 +2364 +2365 +2366 +2367 +2368 +2369 +2370 +2371 +2372 +2373 +2374 +2375 +2376 +2377 +2378 +2379 +2380 +2381 +2382 +2383 +2384 +2385 +2386 +2387 +2388 +2389 +2390 +2391 +2392 +2393 +2394 +2395 +2396 +2397 +2398 +2399 +2400 +2401 +2402 +2403 +2404 +2405 +2406 +2407 +2408 +2409 +2410 +2411 +2412 +2413 +2414 +2415 +2416 +2417 +2418 +2419 +2420 +2421 +2422 +2423 +2424 +2425 +2426 +2427 +2428 +2429 +2430 +2431 +2432 +2433 +2434 +2435 +2436 +2437 +2438 +2439 +2440 +2441 +2442 +2443 +2444 +2445 +2446 +2447 +2448 +2449 +2450 +2451 +2452 +2453 +2454 +2455 +2456 +2457 +2458 +2459 +2460 +2461 +2462 +2463 +2464 +2465 +2466 +2467 +2468 +2469 +2470 +2471 +2472 +2473 +2474 +2475 +2476 +2477 +2478 +2479 +2480 +2481 +2482 +2483 +2484 +2485 +2486 +2487 +2488 +2489 +2490 +2491 +2492 +2493 +2494 +2495 +2496 +2497 +2498 +2499 +2500 +2501 +2502 +2503 +2504 +2505 +2506 +2507 +2508 +2509 +2510 +2511 +2512 +2513 +2514 +2515 +2516 +2517 +2518 +2519 +2520 +2521 +2522 +2523 +2524 +2525 +2526 +2527 +2528 +2529 +2530 +2531 +2532 +2533 +2534 +2535 +2536 +2537 +2538 +2539 +2540 +2541 +2542 +2543 +2544 +2545 +2546 +2547 +2548 +2549 +2550 +2551 +2552 +2553 +2554 +2555 +2556 +2557 +2558 +2559 +2560 +2561 +2562 +2563 +2564 +2565 +2566 +2567 +2568 +2569 +2570 +2571 +2572 +2573 +2574 +2575 +2576 +2577 +2578 +2579 +2580 +2581 +2582 +2583 +2584 +2585 +2586 +2587 +2588 +2589 +2590 +2591 +2592 +2593 +2594 +2595 +2596 +2597 +2598 +2599 +2600 +2601 +2602 +2603 +2604 +2605 +2606 +2607 +2608 +2609 +2610 +2611 +2612 +2613 +2614 +2615 +2616 +2617 +2618 +2619 +2620 +2621 +2622 +2623 +2624 +2625 +2626 +2627 +2628 +2629 +2630 +2631 +2632 +2633 +2634 +2635 +2636 +2637 +2638 +2639 +2640 +2641 +2642 +2643 +2644 +2645 +2646 +2647 +2648 +2649 +2650 +2651 +2652 +2653 +2654 +2655 +2656 +2657 +2658 +2659 +2660 +2661 +2662 +2663 +2664 +2665 +2666 +2667 +2668 +2669 +2670 +2671 +2672 +2673 +2674 +2675 +2676 +2677 +2678 +2679 +2680 +2681 +2682 +2683 +2684 +2685 +2686 +2687 +2688 +2689 +2690 +2691 +2692 +2693 +2694 +2695 +2696 +2697 +2698 +2699 +2700 +2701 +2702 +2703 +2704 +2705 +2706 +2707 +2708 +2709 +2710 +2711 +2712 +2713 +2714 +2715 +2716 +2717 +2718 +2719 +2720 +2721 +2722 +2723 +2724 +2725 +2726 +2727 +2728 +2729 +2730 +2731 +2732 +2733 +2734 +2735 +2736 +2737 +2738 +2739 +2740 +2741 +2742 +2743 +2744 +2745 +2746 +2747 +2748 +2749 +2750 +2751 +2752 +2753 +2754 +2755 +2756 +2757 +2758 +2759 +2760 +2761 +2762 +2763 +2764 +2765 +2766 +2767 +2768 +2769 +2770 +2771 +2772 +2773 +2774 +2775 +2776 +2777 +2778 +2779 +2780 +2781 +2782 +2783 +2784 +2785 +2786 +2787 +2788 +2789 +2790 +2791 +2792 +2793 +2794 +2795 +2796 +2797 +2798 +2799 +2800 +2801 +2802 +2803 +2804 +2805 +2806 +2807 +2808 +2809 +2810 +2811 +2812 +2813 +2814 +2815 +2816 +2817 +2818 +2819 +2820 +2821 +2822 +2823 +2824 +2825 +2826 +2827 +2828 +2829 +2830 +2831 +2832 +2833 +2834 +2835 +2836 +2837 +2838 +2839 +2840 +2841 +2842 +2843 +2844 +2845 +2846 +2847 +2848 +2849 +2850 +2851 +2852 +2853 +2854 +2855 +2856 +2857 +2858 +2859 +2860 +2861 +2862 +2863 +2864 +2865 +2866 +2867 +2868 +2869 +2870 +2871 +2872 +2873 +2874 +2875 +2876 +2877 +2878 +2879 +2880 +2881 +2882 +2883 +2884 +2885 +2886 +2887 +2888 +2889 +2890 +2891 +2892 +2893 +2894 +2895 +2896 +2897 +2898 +2899 +2900 +2901 +2902 +2903 +2904 +2905 +2906 +2907 +2908 +2909 +2910 +2911 +2912 +2913 +2914 +2915 +2916 +2917 +2918 +2919 +2920 +2921 +2922 +2923 +2924 +2925 +2926 +2927 +2928 +2929 +2930 +2931 +2932 +2933 +2934 +2935 +2936 +2937 +2938 +2939 +2940 +2941 +2942 +2943 +2944 +2945 +2946 +2947 +2948 +2949 +2950 +2951 +2952 +2953 +2954 +2955 +2956 +2957 +2958 +2959 +2960 +2961 +2962 +2963 +2964 +2965 +2966 +2967 +2968 +2969 +2970 +2971 +2972 +2973 +2974 +2975 +2976 +2977 +2978 +2979 +2980 +2981 +2982 +2983 +2984 +2985 +2986 +2987 +2988 +2989 +2990 +2991 +2992 +2993 +2994 +2995 +2996 +2997 +2998 +2999 +3000 +3001 +3002 +3003 +3004 +3005 +3006 +3007 +3008 +3009 +3010 +3011 +3012 +3013 +3014 +3015 +3016 +3017 +3018 +3019 +3020 +3021 +3022 +3023 +3024 +3025 +3026 +3027 +3028 +3029 +3030 +3031 +3032 +3033 +3034 +3035 +3036 +3037 +3038 +3039 +3040 +3041 +3042 +3043 +3044 +3045 +3046 +3047 +3048 +3049 +3050 +3051 +3052 +3053 +3054 +3055 +3056 +3057 +3058 +3059 +3060 +3061 +3062 +3063 +3064 +3065 +3066 +3067 +3068 +3069 +3070 +3071 +3072 +3073 +3074 +3075 +3076 +3077 +3078 +3079 +3080 +3081 +3082 +3083 +3084 +3085 +3086 +3087 +3088 +3089 +3090 +3091 +3092 +3093 +3094 +3095 +3096 +3097 +3098 +3099 +3100 +3101 +3102 +3103 +3104 +3105 +3106 +3107 +3108 +3109 +3110 +3111 +3112 +3113 +3114 +3115 +3116 +3117 +3118 +3119 +3120 +3121 +3122 +3123 +3124 +3125 +3126 +3127 +3128 +3129 +3130 +3131 +3132 +3133 +3134 +3135 +3136 +3137 +3138 +3139 +3140 +3141 +3142 +3143 +3144 +3145 +3146 +3147 +3148 +3149 +3150 +3151 +3152 +3153 +3154 +3155 +3156 +3157 +3158 +3159 +3160 +3161 +3162 +3163 +3164 +3165 +3166 +3167 +3168 +3169 +3170 +3171 +3172 +3173 +3174 +3175 +3176 +3177 +3178 +3179 +3180 +3181 +3182 +3183 +3184 +3185 +3186 +3187 +3188 +3189 +3190 +3191 +3192 +3193 +3194 +3195 +3196 +3197 +3198 +3199 +3200 +3201 +3202 +3203 +3204 +3205 +3206 +3207 +3208 +3209 +3210 +3211 +3212 +3213 +3214 +3215 +3216 +3217 +3218 +3219 +3220 +3221 +3222 +3223 +3224 +3225 +3226 +3227 +3228 +3229 +3230 +3231 +3232 +3233 +3234 +3235 +3236 +3237 +3238 +3239 +3240 +3241 +3242 +3243 +3244 +3245 +3246 +3247 +3248 +3249 +3250 +3251 +3252 +3253 +3254 +3255 +3256 +3257 +3258 +3259 +3260 +3261 +3262 +3263 +3264 +3265 +3266 +3267 +3268 +3269 +3270 +3271 +3272 +3273 +3274 +3275 +3276 +3277 +3278 +3279 +3280 +3281 +3282 +3283 +3284 +3285 +3286 +3287 +3288 +3289 +3290 +3291 +3292 +3293 +3294 +3295 +3296 +3297 +3298 +3299 +3300 +3301 +3302 +3303 +3304 +3305 +3306 +3307 +3308 +3309 +3310 +3311 +3312 +3313 +3314 +3315 +3316 +3317 +3318 +3319 +3320 +3321 +3322 +3323 +3324 +3325 +3326 +3327 +3328 +3329 +3330 +3331 +3332 +3333 +3334 +3335 +3336 +3337 +3338 +3339 +3340 +3341 +3342 +3343 +3344 +3345 +3346 +3347 +3348 +3349 +3350 +3351 +3352 +3353 +3354 +3355 +3356 +3357 +3358 +3359 +3360 +3361 +3362 +3363 +3364 +3365 +3366 +3367 +3368 +3369 +3370 +3371 +3372 +3373 +3374 +3375 +3376 +3377 +3378 +3379 +3380 +3381 +3382 +3383 +3384 +3385 +3386 +3387 +3388 +3389 +3390 +3391 +3392 +3393 +3394 +3395 +3396 +3397 +3398 +3399 +3400 +3401 +3402 +3403 +3404 +3405 +3406 +3407 +3408 +3409 +3410 +3411 +3412 +3413 +3414 +3415 +3416 +3417 +3418 +3419 +3420 +3421 +3422 +3423 +3424 +3425 +3426 +3427 +3428 +3429 +3430 +3431 +3432 +3433 +3434 +3435 +3436 +3437 +3438 +3439 +3440 +3441 +3442 +3443 +3444 +3445 +3446 +3447 +3448 +3449 +3450 +3451 +3452 +3453 +3454 +3455 +3456 +3457 +3458 +3459 +3460 +3461 +3462 +3463 +3464 +3465 +3466 +3467 +3468 +3469 +3470 +3471 +3472 +3473 +3474 +3475 +3476 +3477 +3478 +3479 +3480 +3481 +3482 +3483 +3484 +3485 +3486 +3487 +3488 +3489 +3490 +3491 +3492 +3493 +3494 +3495 +3496 +3497 +3498 +3499 +3500 +3501 +3502 +3503 +3504 +3505 +3506 +3507 +3508 +3509 +3510 +3511 +3512 +3513 +3514 +3515 +3516 +3517 +3518 +3519 +3520 +3521 +3522 +3523 +3524 +3525 +3526 +3527 +3528 +3529 +3530 +3531 +3532 +3533 +3534 +3535 +3536 +3537 +3538 +3539 +3540 +3541 +3542 +3543 +3544 +3545 +3546 +3547 +3548 +3549 +3550 +3551 +3552 +3553 +3554 +3555 +3556 +3557 +3558 +3559 +3560 +3561 +3562 +3563 +3564 +3565 +3566 +3567 +3568 +3569 +3570 +3571 +3572 +3573 +3574 +3575 +3576 +3577 +3578 +3579 +3580 +3581 +3582 +3583 +3584 +3585 +3586 +3587 +3588 +3589 +3590 +3591 +3592 +3593 +3594 +3595 +3596 +3597 +3598 +3599 +3600 +3601 +3602 +3603 +3604 +3605 +3606 +3607 +3608 +3609 +3610 +3611 +3612 +3613 +3614 +3615 +3616 +3617 +3618 +3619 +3620 +3621 +3622 +3623 +3624 +3625 +3626 +3627 +3628 +3629 +3630 +3631 +3632 +3633 +3634 +3635 +3636 +3637 +3638 +3639 +3640 +3641 +3642 +3643 +3644 +3645 +3646 +3647 +3648 +3649 +3650 +3651 +3652 +3653 +3654 +3655 +3656 +3657 +3658 +3659 +3660 +3661 +3662 +3663 +3664 +3665 +3666 +3667 +3668 +3669 +3670 +3671 +3672 +3673 +3674 +3675 +3676 +3677 +3678 +3679 +3680 +3681 +3682 +3683 +3684 +3685 +3686 +3687 +3688 +3689 +3690 +3691 +3692 +3693 +3694 +3695 +3696 +3697 +3698 +3699 +3700 +3701 +3702 +3703 +3704 +3705 +3706 +3707 +3708 +3709 +3710 +3711 +3712 +3713 +3714 +3715 +3716 +3717 +3718 +3719 +3720 +3721 +3722 +3723 +3724 +3725 +3726 +3727 +3728 +3729 +3730 +3731 +3732 +3733 +3734 +3735 +3736 +3737 +3738 +3739 +3740 +3741 +3742 +3743 +3744 +3745 +3746 +3747 +3748 +3749 +3750 +3751 +3752 +3753 +3754 +3755 +3756 +3757 +3758 +3759 +3760 +3761 +3762 +3763 +3764 +3765 +3766 +3767 +3768 +3769 +3770 +3771 +3772 +3773 +3774 +3775 +3776 +3777 +3778 +3779 +3780 +3781 +3782 +3783 +3784 +3785 +3786 +3787 +3788 +3789 +3790 +3791 +3792 +3793 +3794 +3795 +3796 +3797 +3798 +3799 +3800 +3801 +3802 +3803 +3804 +3805 +3806 +3807 +3808 +3809 +3810 +3811 +3812 +3813 +3814 +3815 +3816 +3817 +3818 +3819 +3820 +3821 +3822 +3823 +3824 +3825 +3826 +3827 +3828 +3829 +3830 +3831 +3832 +3833 +3834 +3835 +3836 +3837 +3838 +3839 +3840 +3841 +3842 +3843 +3844 +3845 +3846 +3847 +3848 +3849 +3850 +3851 +3852 +3853 +3854 +3855 +3856 +3857 +3858 +3859 +3860 +3861 +3862 +3863 +3864 +3865 +3866 +3867 +3868 +3869 +3870 +3871 +3872 +3873 +3874 +3875 +3876 +3877 +3878 +3879 +3880 +3881 +3882 +3883 +3884 +3885 +3886 +3887 +3888 +3889 +3890 +3891 +3892 +3893 +3894 +3895 +3896 +3897 +3898 +3899 +3900 +3901 +3902 +3903 +3904 +3905 +3906 +3907 +3908 +3909 +3910 +3911 +3912 +3913 +3914 +3915 +3916 +3917 +3918 +3919 +3920 +3921 +3922 +3923 +3924 +3925 +3926 +3927 +3928 +3929 +3930 +3931 +3932 +3933 +3934 +3935 +3936 +3937 +3938 +3939 +3940 +3941 +3942 +3943 +3944 +3945 +3946 +3947 +3948 +3949 +3950 +3951 +3952 +3953 +3954 +3955 +3956 +3957 +3958 +3959 +3960 +3961 +3962 +3963 +3964 +3965 +3966 +3967 +3968 +3969 +3970 +3971 +3972 +3973 +3974 +3975 +3976 +3977 +3978 +3979 +3980 +3981 +3982 +3983 +3984 +3985 +3986 +3987 +3988 +3989 +3990 +3991 +3992 +3993 +3994 +3995 +3996 +3997 +3998 +3999 +4000 +4001 +4002 +4003 +4004 +4005 +4006 +4007 +4008 +4009 +4010 +4011 +4012 +4013 +4014 +4015 +4016 +4017 +4018 +4019 +4020 +4021 +4022 +4023 +4024 +4025 +4026 +4027 +4028 +4029 +4030 +4031 +4032 +4033 +4034 +4035 +4036 +4037 +4038 +4039 +4040 +4041 +4042 +4043 +4044 +4045 +4046 +4047 +4048 +4049 +4050 +4051 +4052 +4053 +4054 +4055 +4056 +4057 +4058 +4059 +4060 +4061 +4062 +4063 +4064 +4065 +4066 +4067 +4068 +4069 +4070 +4071 +4072 +4073 +4074 +4075 +4076 +4077 +4078 +4079 +4080 +4081 +4082 +4083 +4084 +4085 +4086 +4087 +4088 +4089 +4090 +4091 +4092 +4093 +4094 +4095 +4096 +4097 +4098 +4099 +4100 +4101 +4102 +4103 +4104 +4105 +4106 +4107 +4108 +4109 +4110 +4111 +4112 +4113 +4114 +4115 +4116 +4117 +4118 +4119 +4120 +4121 +4122 +4123 +4124 +4125 +4126 +4127 +4128 +4129 +4130 +4131 +4132 +4133 +4134 +4135 +4136 +4137 +4138 +4139 +4140 +4141 +4142 +4143 +4144 +4145 +4146 +4147 +4148 +4149 +4150 +4151 +4152 +4153 +4154 +4155 +4156 +4157 +4158 +4159 +4160 +4161 +4162 +4163 +4164 +4165 +4166 +4167 +4168 +4169 +4170 +4171 +4172 +4173 +4174 +4175 +4176 +4177 +4178 +4179 +4180 +4181 +4182 +4183 +4184 +4185 +4186 +4187 +4188 +4189 +4190 +4191 +4192 +4193 +4194 +4195 +4196 +4197 +4198 +4199 +4200 +4201 +4202 +4203 +4204 +4205 +4206 +4207 +4208 +4209 +4210 +4211 +4212 +4213 +4214 +4215 +4216 +4217 +4218 +4219 +4220 +4221 +4222 +4223 +4224 +4225 +4226 +4227 +4228 +4229 +4230 +4231 +4232 +4233 +4234 +4235 +4236 +4237 +4238 +4239 +4240 +4241 +4242 +4243 +4244 +4245 +4246 +4247 +4248 +4249 +4250 +4251 +4252 +4253 +4254 +4255 +4256 +4257 +4258 +4259 +4260 +4261 +4262 +4263 +4264 +4265 +4266 +4267 +4268 +4269 +4270 +4271 +4272 +4273 +4274 +4275 +4276 +4277 +4278 +4279 +4280 +4281 +4282 +4283 +4284 +4285 +4286 +4287 +4288 +4289 +4290 +4291 +4292 +4293 +4294 +4295 +4296 +4297 +4298 +4299 +4300 +4301 +4302 +4303 +4304 +4305 +4306 +4307 +4308 +4309 +4310 +4311 +4312 +4313 +4314 +4315 +4316 +4317 +4318 +4319 +4320 +4321 +4322 +4323 +4324 +4325 +4326 +4327 +4328 +4329 +4330 +4331 +4332 +4333 +4334 +4335 +4336 +4337 +4338 +4339 +4340 +4341 +4342 +4343 +4344 +4345 +4346 +4347 +4348 +4349 +4350 +4351 +4352 +4353 +4354 +4355 +4356 +4357 +4358 +4359 +4360 +4361 +4362 +4363 +4364 +4365 +4366 +4367 +4368 +4369 +4370 +4371 +4372 +4373 +4374 +4375 +4376 +4377 +4378 +4379 +4380 +4381 +4382 +4383 +4384 +4385 +4386 +4387 +4388 +4389 +4390 +4391 +4392 +4393 +4394 +4395 +4396 +4397 +4398 +4399 +4400 +4401 +4402 +4403 +4404 +4405 +4406 +4407 +4408 +4409 +4410 +4411 +4412 +4413 +4414 +4415 +4416 +4417 +4418 +4419 +4420 +4421 +4422 +4423 +4424 +4425 +4426 +4427 +4428 +4429 +4430 +4431 +4432 +4433 +4434 +4435 +4436 +4437 +4438 +4439 +4440 +4441 +4442 +4443 +4444 +4445 +4446 +4447 +4448 +4449 +4450 +4451 +4452 +4453 +4454 +4455 +4456 +4457 +4458 +4459 +4460 +4461 +4462 +4463 +4464 +4465 +4466 +4467 +4468 +4469 +4470 +4471 +4472 +4473 +4474 +4475 +4476 +4477 +4478 +4479 +4480 +4481 +4482 +4483 +4484 +4485 +4486 +4487 +4488 +4489 +4490 +4491 +4492 +4493 +4494 +4495 +4496 +4497 +4498 +4499 +4500 +4501 +4502 +4503 +4504 +4505 +4506 +4507 +4508 +4509 +4510 +4511 +4512 +4513 +4514 +4515 +4516 +4517 +4518 +4519 +4520 +4521 +4522 +4523 +4524 +4525 +4526 +4527 +4528 +4529 +4530 +4531 +4532 +4533 +4534 +4535 +4536 +4537 +4538 +4539 +4540 +4541 +4542 +4543 +4544 +4545 +4546 +4547 +4548 +4549 +4550 +4551 +4552 +4553 +4554 +4555 +4556 +4557 +4558 +4559 +4560 +4561 +4562 +4563 +4564 +4565 +4566 +4567 +4568 +4569 +4570 +4571 +4572 +4573 +4574 +4575 +4576 +4577 +4578 +4579 +4580 +4581 +4582 +4583 +4584 +4585 +4586 +4587 +4588 +4589 +4590 +4591 +4592 +4593 +4594 +4595 +4596 +4597 +4598 +4599 +4600 +4601 +4602 +4603 +4604 +4605 +4606 +4607 +4608 +4609 +4610 +4611 +4612 +4613 +4614 +4615 +4616 +4617 +4618 +4619 +4620 +4621 +4622 +4623 +4624 +4625 +4626 +4627 +4628 +4629 +4630 +4631 +4632 +4633 +4634 +4635 +4636 +4637 +4638 +4639 +4640 +4641 +4642 +4643 +4644 +4645 +4646 +4647 +4648 +4649 +4650 +4651 +4652 +4653 +4654 +4655 +4656 +4657 +4658 +4659 +4660 +4661 +4662 +4663 +4664 +4665 +4666 +4667 +4668 +4669 +4670 +4671 +4672 +4673 +4674 +4675 +4676 +4677 +4678 +4679 +4680 +4681 +4682 +4683 +4684 +4685 +4686 +4687 +4688 +4689 +4690 +4691 +4692 +4693 +4694 +4695 +4696 +4697 +4698 +4699 +4700 +4701 +4702 +4703 +4704 +4705 +4706 +4707 +4708 +4709 +4710 +4711 +4712 +4713 +4714 +4715 +4716 +4717 +4718 +4719 +4720 +4721 +4722 +4723 +4724 +4725 +4726 +4727 +4728 +4729 +4730 +4731 +4732 +4733 +4734 +4735 +4736 +4737 +4738 +4739 +4740 +4741 +4742 +4743 +4744 +4745 +4746 +4747 +4748 +4749 +4750 +4751 +4752 +4753 +4754 +4755 +4756 +4757 +4758 +4759 +4760 +4761 +4762 +4763 +4764 +4765 +4766 +4767 +4768 +4769 +4770 +4771 +4772 +4773 +4774 +4775 +4776 +4777 +4778 +4779 +4780 +4781 +4782 +4783 +4784 +4785 +4786 +4787 +4788 +4789 +4790 +4791 +4792 +4793 +4794 +4795 +4796 +4797 +4798 +4799 +4800 +4801 +4802 +4803 +4804 +4805 +4806 +4807 +4808 +4809 +4810 +4811 +4812 +4813 +4814 +4815 +4816 +4817 +4818 +4819 +4820 +4821 +4822 +4823 +4824 +4825 +4826 +4827 +4828 +4829 +4830 +4831 +4832 +4833 +4834 +4835 +4836 +4837 +4838 +4839 +4840 +4841 +4842 +4843 +4844 +4845 +4846 +4847 +4848 +4849 +4850 +4851 +4852 +4853 +4854 +4855 +4856 +4857 +4858 +4859 +4860 +4861 +4862 +4863 +4864 +4865 +4866 +4867 +4868 +4869 +4870 +4871 +4872 +4873 +4874 +4875 +4876 +4877 +4878 +4879 +4880 +4881 +4882 +4883 +4884 +4885 +4886 +4887 +4888 +4889 +4890 +4891 +4892 +4893 +4894 +4895 +4896 +4897 +4898 +4899 +4900 +4901 +4902 +4903 +4904 +4905 +4906 +4907 +4908 +4909 +4910 +4911 +4912 +4913 +4914 +4915 +4916 +4917 +4918 +4919 +4920 +4921 +4922 +4923 +4924 +4925 +4926 +4927 +4928 +4929 +4930 +4931 +4932 +4933 +4934 +4935 +4936 +4937 +4938 +4939 +4940 +4941 +4942 +4943 +4944 +4945 +4946 +4947 +4948 +4949 +4950 +4951 +4952 +4953 +4954 +4955 +4956 +4957 +4958 +4959 +4960 +4961 +4962 +4963 +4964 +4965 +4966 +4967 +4968 +4969 +4970 +4971 +4972 +4973 +4974 +4975 +4976 +4977 +4978 +4979 +4980 +4981 +4982 +4983 +4984 +4985 +4986 +4987 +4988 +4989 +4990 +4991 +4992 +4993 +4994 +4995 +4996 +4997 +4998 +4999 +5000 +5001 +5002 +5003 +5004 +5005 +5006 +5007 +5008 +5009 +5010 +5011 +5012 +5013 +5014 +5015 +5016 +5017 +5018 +5019 +5020 +5021 +5022 +5023 +5024 +5025 +5026 +5027 +5028 +5029 +5030 +5031 +5032 +5033 +5034 +5035 +5036 +5037 +5038 +5039 +5040 +5041 +5042 +5043 +5044 +5045 +5046 +5047 +5048 +5049 +5050 +5051 +5052 +5053 +5054 +5055 +5056 +5057 +5058 +5059 +5060 +5061 +5062 +5063 +5064 +5065 +5066 +5067 +5068 +5069 +5070 +5071 +5072 +5073 +5074 +5075 +5076 +5077 +5078 +5079 +5080 +5081 +5082 +5083 +5084 +5085 +5086 +5087 +5088 +5089 +5090 +5091 +5092 +5093 +5094 +5095 +5096 +5097 +5098 +5099 +5100 +5101 +5102 +5103 +5104 +5105 +5106 +5107 +5108 +5109 +5110 +5111 +5112 +5113 +5114 +5115 +5116 +5117 +5118 +5119 +5120 +5121 +5122 +5123 +5124 +5125 +5126 +5127 +5128 +5129 +5130 +5131 +5132 +5133 +5134 +5135 +5136 +5137 +5138 +5139 +5140 +5141 +5142 +5143 +5144 +5145 +5146 +5147 +5148 +5149 +5150 +5151 +5152 +5153 +5154 +5155 +5156 +5157 +5158 +5159 +5160 +5161 +5162 +5163 +5164 +5165 +5166 +5167 +5168 +5169 +5170 +5171 +5172 +5173 +5174 +5175 +5176 +5177 +5178 +5179 +5180 +5181 +5182 +5183 +5184 +5185 +5186 +5187 +5188 +5189 +5190 +5191 +5192 +5193 +5194 +5195 +5196 +5197 +5198 +5199 +5200 +5201 +5202 +5203 +5204 +5205 +5206 +5207 +5208 +5209 +5210 +5211 +5212 +5213 +5214 +5215 +5216 +5217 +5218 +5219 +5220 +5221 +5222 +5223 +5224 +5225 +5226 +5227 +5228 +5229 +5230 +5231 +5232 +5233 +5234 +5235 +5236 +5237 +5238 +5239 +5240 +5241 +5242 +5243 +5244 +5245 +5246 +5247 +5248 +5249 +5250 +5251 +5252 +5253 +5254 +5255 +5256 +5257 +5258 +5259 +5260 +5261 +5262 +5263 +5264 +5265 +5266 +5267 +5268 +5269 +5270 +5271 +5272 +5273 +5274 +5275 +5276 +5277 +5278 +5279 +5280 +5281 +5282 +5283 +5284 +5285 +5286 +5287 +5288 +5289 +5290 +5291 +5292 +5293 +5294 +5295 +5296 +5297 +5298 +5299 +5300 +5301 +5302 +5303 +5304 +5305 +5306 +5307 +5308 +5309 +5310 +5311 +5312 +5313 +5314 +5315 +5316 +5317 +5318 +5319 +5320 +5321 +5322 +5323 +5324 +5325 +5326 +5327 +5328 +5329 +5330 +5331 +5332 +5333 +5334 +5335 +5336 +5337 +5338 +5339 +5340 +5341 +5342 +5343 +5344 +5345 +5346 +5347 +5348 +5349 +5350 +5351 +5352 +5353 +5354 +5355 +5356 +5357 +5358 +5359 +5360 +5361 +5362 +5363 +5364 +5365 +5366 +5367 +5368 +5369 +5370 +5371 +5372 +5373 +5374 +5375 +5376 +5377 +5378 +5379 +5380 +5381 +5382 +5383 +5384 +5385 +5386 +5387 +5388 +5389 +5390 +5391 +5392 +5393 +5394 +5395 +5396 +5397 +5398 +5399 +5400 +5401 +5402 +5403 +5404 +5405 +5406 +5407 +5408 +5409 +5410 +5411 +5412 +5413 +5414 +5415 +5416 +5417 +5418 +5419 +5420 +5421 +5422 +5423 +5424 +5425 +5426 +5427 +5428 +5429 +5430 +5431 +5432 +5433 +5434 +5435 +5436 +5437 +5438 +5439 +5440 +5441 +5442 +5443 +5444 +5445 +5446 +5447 +5448 +5449 +5450 +5451 +5452 +5453 +5454 +5455 +5456 +5457 +5458 +5459 +5460 +5461 +5462 +5463 +5464 +5465 +5466 +5467 +5468 +5469 +5470 +5471 +5472 +5473 +5474 +5475 +5476 +5477 +5478 +5479 +5480 +5481 +5482 +5483 +5484 +5485 +5486 +5487 +5488 +5489 +5490 +5491 +5492 +5493 +5494 +5495 +5496 +5497 +5498 +5499 +5500 +5501 +5502 +5503 +5504 +5505 +5506 +5507 +5508 +5509 +5510 +5511 +5512 +5513 +5514 +5515 +5516 +5517 +5518 +5519 +5520 +5521 +5522 +5523 +5524 +5525 +5526 +5527 +5528 +5529 +5530 +5531 +5532 +5533 +5534 +5535 +5536 +5537 +5538 +5539 +5540 +5541 +5542 +5543 +5544 +5545 +5546 +5547 +5548 +5549 +5550 +5551 +5552 +5553 +5554 +5555 +5556 +5557 +5558 +5559 +5560 +5561 +5562 +5563 +5564 +5565 +5566 +5567 +5568 +5569 +5570 +5571 +5572 +5573 +5574 +5575 +5576 +5577 +5578 +5579 +5580 +5581 +5582 +5583 +5584 +5585 +5586 +5587 +5588 +5589 +5590 +5591 +5592 +5593 +5594 +5595 +5596 +5597 +5598 +5599 +5600 +5601 +5602 +5603 +5604 +5605 +5606 +5607 +5608 +5609 +5610 +5611 +5612 +5613 +5614 +5615 +5616 +5617 +5618 +5619 +5620 +5621 +5622 +5623 +5624 +5625 +5626 +5627 +5628 +5629 +5630 +5631 +5632 +5633 +5634 +5635 +5636 +5637 +5638 +5639 +5640 +5641 +5642 +5643 +5644 +5645 +5646 +5647 +5648 +5649 +5650 +5651 +5652 +5653 +5654 +5655 +5656 +5657 +5658 +5659 +5660 +5661 +5662 +5663 +5664 +5665 +5666 +5667 +5668 +5669 +5670 +5671 +5672 +5673 +5674 +5675 +5676 +5677 +5678 +5679 +5680 +5681 +5682 +5683 +5684 +5685 +5686 +5687 +5688 +5689 +5690 +5691 +5692 +5693 +5694 +5695 +5696 +5697 +5698 +5699 +5700 +5701 +5702 +5703 +5704 +5705 +5706 +5707 +5708 +5709 +5710 +5711 +5712 +5713 +5714 +5715 +5716 +5717 +5718 +5719 +5720 +5721 +5722 +5723 +5724 +5725 +5726 +5727 +5728 +5729 +5730 +5731 +5732 +5733 +5734 +5735 +5736 +5737 +5738 +5739 +5740 +5741 +5742 +5743 +5744 +5745 +5746 +5747 +5748 +5749 +5750 +5751 +5752 +5753 +5754 +5755 +5756 +5757 +5758 +5759 +5760 +5761 +5762 +5763 +5764 +5765 +5766 +5767 +5768 +5769 +5770 +5771 +5772 +5773 +5774 +5775 +5776 +5777 +5778 +5779 +5780 +5781 +5782 +5783 +5784 +5785 +5786 +5787 +5788 +5789 +5790 +5791 +5792 +5793 +5794 +5795 +5796 +5797 +5798 +5799 +5800 +5801 +5802 +5803 +5804 +5805 +5806 +5807 +5808 +5809 +5810 +5811 +5812 +5813 +5814 +5815 +5816 +5817 +5818 +5819 +5820 +5821 +5822 +5823 +5824 +5825 +5826 +5827 +5828 +5829 +5830 +5831 +5832 +5833 +5834 +5835 +5836 +5837 +5838 +5839 +5840 +5841 +5842 +5843 +5844 +5845 +5846 +5847 +5848 +5849 +5850 +5851 +5852 +5853 +5854 +5855 +5856 +5857 +5858 +5859 +5860 +5861 +5862 +5863 +5864 +5865 +5866 +5867 +5868 +5869 +5870 +5871 +5872 +5873 +5874 +5875 +5876 +5877 +5878 +5879 +5880 +5881 +5882 +5883 +5884 +5885 +5886 +5887 +5888 +5889 +5890 +5891 +5892 +5893 +5894 +5895 +5896 +5897 +5898 +5899 +5900 +5901 +5902 +5903 +5904 +5905 +5906 +5907 +5908 +5909 +5910 +5911 +5912 +5913 +5914 +5915 +5916 +5917 +5918 +5919 +5920 +5921 +5922 +5923 +5924 +5925 +5926 +5927 +5928 +5929 +5930 +5931 +5932 +5933 +5934 +5935 +5936 +5937 +5938 +5939 +5940 +5941 +5942 +5943 +5944 +5945 +5946 +5947 +5948 +5949 +5950 +5951 +5952 +5953 +5954 +5955 +5956 +5957 +5958 +5959 +5960 +5961 +5962 +5963 +5964 +5965 +5966 +5967 +5968 +5969 +5970 +5971 +5972 +5973 +5974 +5975 +5976 +5977 +5978 +5979 +5980 +5981 +5982 +5983 +5984 +5985 +5986 +5987 +5988 +5989 +5990 +5991 +5992 +5993 +5994 +5995 +5996 +5997 +5998 +5999 +6000 +6001 +6002 +6003 +6004 +6005 +6006 +6007 +6008 +6009 +6010 +6011 +6012 +6013 +6014 +6015 +6016 +6017 +6018 +6019 +6020 +6021 +6022 +6023 +6024 +6025 +6026 +6027 +6028 +6029 +6030 +6031 +6032 +6033 +6034 +6035 +6036 +6037 +6038 +6039 +6040 +6041 +6042 +6043 +6044 +6045 +6046 +6047 +6048 +6049 +6050 +6051 +6052 +6053 +6054 +6055 +6056 +6057 +6058 +6059 +6060 +6061 +6062 +6063 +6064 +6065 +6066 +6067 +6068 +6069 +6070 +6071 +6072 +6073 +6074 +6075 +6076 +6077 +6078 +6079 +6080 +6081 +6082 +6083 +6084 +6085 +6086 +6087 +6088 +6089 +6090 +6091 +6092 +6093 +6094 +6095 +6096 +6097 +6098 +6099 +6100 +6101 +6102 +6103 +6104 +6105 +6106 +6107 +6108 +6109 +6110 +6111 +6112 +6113 +6114 +6115 +6116 +6117 +6118 +6119 +6120 +6121 +6122 +6123 +6124 +6125 +6126 +6127 +6128 +6129 +6130 +6131 +6132 +6133 +6134 +6135 +6136 +6137 +6138 +6139 +6140 +6141 +6142 +6143 +6144 +6145 +6146 +6147 +6148 +6149 +6150 +6151 +6152 +6153 +6154 +6155 +6156 +6157 +6158 +6159 +6160 +6161 +6162 +6163 +6164 +6165 +6166 +6167 +6168 +6169 +6170 +6171 +6172 +6173 +6174 +6175 +6176 +6177 +6178 +6179 +6180 +6181 +6182 +6183 +6184 +6185 +6186 +6187 +6188 +6189 +6190 +6191 +6192 +6193 +6194 +6195 +6196 +6197 +6198 +6199 +6200 +6201 +6202 +6203 +6204 +6205 +6206 +6207 +6208 +6209 +6210 +6211 +6212 +6213 +6214 +6215 +6216 +6217 +6218 +6219 +6220 +6221 +6222 +6223 +6224 +6225 +6226 +6227 +6228 +6229 +6230 +6231 +6232 +6233 +6234 +6235 +6236 +6237 +6238 +6239 +9.545241594889406 0.2826905789312277 0.001 +-0.2341598795305072 0.2304464446628514 0.001 +4.702790840103074 -4.120870626435569 0.001 +4.710041598394258 3.842095245107387 0.001 +3.67839197267467 0.06330762691502217 0.001 +1.780765682645565 2.64889714281597 0.001 +1.729380341795453 0.5924853168403524 0.001 +1.139595618380878 -2.6208970158134 0.001 +-2.988909952287409 4.951884770115252 0.001 +3.062129538508073 1.549216084095788 0.001 +2.774813125510342 0.5398369013259863 0.001 +-4.378974986868921 -3.601044102604422 0.001 +0.5382465719268232 1.621973680373222 0.001 +3.533862340825488 0.8788218261235607 0.001 +2.307435708602201 1.220827521125297 0.001 +2.351948511267773 -1.25189866524679 0.001 +0.9385414426515716 -0.6811088726847727 0.001 +-1.360375594610724 -1.913316662274912 0.001 +0.7664442821932504 0.2790168349191206 0.001 +1.419238984445374 -0.1217365854861272 0.001 +2.23012604830976 -0.00724416636831227 0.001 +2.969225691780323 -0.1792061824590916 0.001 +3.756824994247889 -1.276762323853328 0.001 +5.87373615042538 -0.5278237427513124 0.001 +1.274876282710428 0.3753368699282685 0.001 +4.713575557403539 0.671101842836047 0.001 +3.275050221468228 0.4087052582802696 0.001 +2.224444518312041 0.4914333384519612 0.001 +0.2779784452624462 -0.3283493252960548 0.001 +1.378929702849055 1.462147461002324 0.001 +0.9099516667745422 0.9608698243773598 0.001 +0.2418727593947951 0.7462883050091391 0.001 +0.6376091824243267 0.6578654077662255 0.001 +0.3579800228648623 0.3657399268856993 0.001 +0.514407409808924 1.05428469637998 0.001 +-1.425487665056884 1.398061321852379 0.001 +0.6001872452532148 0.4370836139894506 0.001 +0.5431465588966385 0.2024674249918214 0.001 +0.68181859391343 0.8889490397545015 0.001 +0.7432721137683456 1.128814557239894 0.001 +0.4172267159764814 0.5890372694157866 0.001 +0.1808771992495055 0.5106863614308589 0.001 +-0.2292133170429983 0.7580484986561224 0.001 +0.005038758277410904 1.231365478437024 0.001 +0.4662626474233119 0.8183991281263372 0.001 +0.2870188967735396 0.9806766761112249 0.001 +1.003193811395863 0.6017026072813365 0.001 +1.369005974038803 0.892966459968898 0.001 +0.7969780069280321 0.4978031524953285 0.001 +0.9998117440089095 0.372302660260952 0.001 +1.011377953514181 -0.05696274235110702 0.001 +0.7428404843519426 0.007066013836496481 0.001 +0.9491105066722645 0.1417959839422555 0.001 +0.8489047606382046 0.7582407093512631 0.001 +-0.2696402937997802 4.251728966753187 0.001 +0.3284716512274575 1.273793007929489 0.001 +0.09179164555382452 0.2047372917848992 0.001 +0.3239533071543413 0.112266207637293 0.001 +0.4979972306899047 -0.04798407791782094 0.001 +0.1923457004216322 0.3386912067584698 0.001 +-0.04380630655499768 0.4049061788864061 0.001 +4.115374495701731 1.916513761775596 0.001 +1.79949661257948 0.1809073157937176 0.001 +1.82594484447191 -0.3566136489998594 0.001 +3.224361294361987 3.219548575004239 0.001 +1.176818033806411 1.048786770524653 0.001 +1.297265913700089 0.6453475714787557 0.001 +1.84435118656226 1.086606188808986 0.001 +1.218241500546658 0.1233654601012986 0.001 +0.956960977024798 1.207767884347243 0.001 +2.46156361146421 6.739251988283599 0.001 +3.703494268298194 0.473141334574515 0.001 +3.12556428146484 0.7811198525939167 0.001 +2.690989479113246 1.013817737398247 0.001 +2.644970706738678 0.1029472376578678 0.001 +9.024051818731163 3.471012867134486 0.001 +0.003798389442935719 0.9105818196363474 0.001 +-0.02660233289445403 0.6731553941689696 0.001 +0.1498778605679961 0.8754665593599095 0.001 +2.539070707923843 -0.2504685709348499 0.001 +13.94430373860618 -3.757576159801484 0.001 +0.6900369650876965 0.1547031365582113 0.001 +-2.5073393415234 0.05787385086452831 0.001 +14.30137744729102 3.295092863579012 0.001 +1.886540366102484 1.604690510923723 0.001 +4.117635641190483 0.8983729859400994 0.001 +4.255158406155313 0.2562411928067914 0.001 +4.246457483503089 -0.5403183573212093 0.001 +3.483324589173649 -0.6699603032936206 0.001 +2.91877977638128 -0.7950774001936144 0.001 +-0.1629276247325238 -0.1841754126199107 0.001 +0.1165524853051736 -0.0815547500611023 0.001 +0.3068919790407711 -0.08264844236705451 0.001 +0.1713425405385597 0.06368075527074657 0.001 +-0.01441582082309819 0.05127807925387841 0.001 +0.1390895919147285 0.6503271522468216 0.001 +0.8829410267989066 -0.001529582185950085 0.001 +0.8333044010391947 -0.2398631470168419 0.001 +-0.8806491613339007 -6.265651897680293 0.001 +0.4555490720434495 0.09406400509075409 0.001 +0.04669586497467693 0.5248518196921285 0.001 +-0.1032486689765396 0.5491811661765325 0.001 +3.304585158654175 0.01164557562554475 0.001 +2.033166933468377 0.7962562836558905 0.001 +-1.502002593693517 0.3514513064390139 0.001 +0.05548351271765826 0.7714848642095619 0.001 +-0.09590684449254024 0.7922326916401036 0.001 +0.7714448728999204 0.6318765484989759 0.001 +0.4015166810830433 0.2132176348307657 0.001 +2.976617211266006 0.2130595873209531 0.001 +2.397869162142678 0.8102932830023961 0.001 +0.8631773110722473 0.3820108535684766 0.001 +0.4978079691825564 0.6970739752995512 0.001 +0.2809044259241627 0.6144009794567685 0.001 +0.4041478089838781 0.9484863298298518 0.001 +0.3643402782397492 1.088374542087114 0.001 +0.4884695736889352 0.3346264416295001 0.001 +8.039784494369011 -3.138207334536254 0.001 +0.6140634831660555 0.0317486217180535 0.001 +0.6474468091759762 -0.1242676555571925 0.001 +0.6347453898142759 0.301897987648204 0.001 +0.5487892914338893 0.5629910400275159 0.001 +0.5951678057722544 0.7961960716741571 0.001 +5.000831787155806 -1.799682199495471 0.001 +0.3112426740452984 0.4804276023280427 0.001 +0.3250370924002047 0.8549746009781448 0.001 +0.5517442666394526 0.9248221512643297 0.001 +0.6317923296291594 1.021536863115879 0.001 +0.7867053143743805 0.9833705299800772 0.001 +0.4594345994326337 0.450311679345383 0.001 +0.2023191295387604 0.1933918547612086 0.001 +0.954497685138146 0.4802476007649761 0.001 +1.114003221221827 0.4879112740080628 0.001 +0.3763376793609362 0.7050108332559835 0.001 +0.05924495792097439 0.3332550783368373 0.001 +0.6739992983560781 0.5389121090975353 0.001 +3.782657627105922 1.391442212235506 0.001 +2.872899017786772 -2.947813023722173 0.001 +0.8185140266579567 0.1125205290845859 0.001 +0.7176595814612815 0.4053389217553788 0.001 +-0.254095124626143 0.9766565626767704 0.001 +-0.1353464587706053 0.6686346715773552 0.001 +0.7079098658757679 0.7601450746844431 0.001 +0.9207591157021171 0.2707037860840775 0.001 +1.051840942261846 0.2380279196190689 0.001 +2.460424290829014 1.802475065627041 0.001 +0.6122002068587409 1.164192748862527 0.001 +0.8202642283319053 0.8752835333444091 0.001 +0.8786235222218026 1.092608667791609 0.001 +0.9626798876053645 0.7151412663510441 0.001 +0.9313841155202213 0.8526242370813494 0.001 +1.071442203836982 0.6952982591032959 0.001 +3.21614931757 1.182784049894373 0.001 +0.8846266073865956 0.6002059027550405 0.001 +1.015794161848863 0.9202417099457869 0.001 +2.113746571866641 0.2441337300716595 0.001 +-0.3725688018276706 -1.302687403286011 0.001 +0.3731087763993322 0.007839809774635585 0.001 +-5.919691707701194 2.179073382425941 0.001 +1.586475769351917 0.3495607257980259 0.001 +4.775466758893864 1.362173272875314 0.001 +2.498232631999234 0.3950254663942266 0.001 +1.183688358393392 0.882016335335172 0.001 +3.831742014385249 0.7921486673776135 0.001 +0.1061820217304531 1.069838696795837 0.001 +0.243220393044422 1.11532376843428 0.001 +3.521171507527834 1.976621998941025 0.001 +1.000135394890352 0.05593915212697478 0.001 +0.09812167888499677 0.4375799248206891 0.001 +1.412927095861137 -0.695182915048754 0.001 +1.161658792692221 -0.3437847407408329 0.001 +0.2962113575206623 0.2711715643960498 0.001 +0.2097552620246202 -0.032472945560238 0.001 +0.01243278684180257 -0.2680681946325446 0.001 +0.08962320115262197 0.9744593308891264 0.001 +-0.02647582728575406 1.042012900661626 0.001 +1.64587523495835 0.8574848182986369 0.001 +1.53599896251379 1.116692541546261 0.001 +4.048673379682724 0.5103454056104311 0.001 +3.892333913412678 0.2734402203275821 0.001 +4.033579906726795 -0.0729953092871011 0.001 +4.602934743250575 -0.2097488232083037 0.001 +2.983407490831704 1.091899761355918 0.001 +3.495720054530524 0.2893334222975612 0.001 +3.048717486706999 0.5481386073330361 0.001 +3.46179429304479 0.6284085104977681 0.001 +6.871291043172909 6.616354722548346 0.001 +2.249476032721894 -0.4011430926139443 0.001 +1.949670830324538 -0.8419762063160697 0.001 +1.361115695703721 -1.520527912968183 0.001 +7.551451542413793 1.207356200769607 0.001 +1.941027685138627 0.4742642303934176 0.001 +0.6277051527193717 -0.4144346640528506 0.001 +-0.3504827283744349 0.4910995598517309 0.001 +6.551962658938231 -6.356366645697777 0.001 +2.317131617111424 -5.748320026019953 0.001 +16.19914921506512 -0.3940942701423877 0.001 +0.1846959274534177 0.9985000007241981 0.001 +5.831147433315875 0.7006033926035701 0.001 +0.4831947269249201 1.185144327426701 0.001 +2.862029577024769 0.8084421023249391 0.001 +2.353823269482138 0.2096941599875754 0.001 +3.733436759556081 -0.3186468616449984 0.001 +0.4045835337604914 -0.0747162183195384 0.001 +0.248657871811493 0.4305323488348587 0.001 +11.50183430646482 6.217609558274917 0.001 +1.231546471597875 -0.09631929320653523 0.001 +10.61751250861 -6.343992601308511 0.001 +1.035007395914449 0.1311321297676953 0.001 +3.765449878041141 1.099781382251639 0.001 +0.8342930831226344 0.2183608944711258 0.001 +0.07149182499367593 0.1017868554881978 0.001 +-0.02607883060343155 0.1585234052956138 0.001 +-0.06898422404134351 0.291434002695444 0.001 +0.1623767425942105 0.7856303431958622 0.001 +-0.1981269111036293 0.1011644891017405 0.001 +-0.9926650758122558 -0.1462150957443756 0.001 +1.576031801807118 0.1176030947664589 0.001 +-0.4043686670332863 2.06602046629413 0.001 +0.6598832901348471 2.81583379180575 0.001 +2.807252985126521 1.326161891709985 0.001 +-0.04099387188089736 -0.09850901605875989 0.001 +0.5494260059528409 0.1018625220643302 0.001 +16.30033327205565 6.472707848324681 0.001 +-6.012980294511872 6.462194768032569 0.001 +3.522444225349052 1.156418747243326 0.001 +3.440806151386326 1.503768053985886 0.001 +3.251841321008214 -0.2961968998297126 0.001 +0.07393303582162176 0.0163155582802131 0.001 +2.558159572318314 0.6340179377572953 0.001 +2.076179017647165 1.051155296033791 0.001 +3.491656359334111 -0.1098650759991722 0.001 +0.9976923074542693 1.067559185903111 0.001 +1.484113116878738 0.5461882644352749 0.001 +2.784418987083074 0.3055051108121987 0.001 +0.2501539682114602 0.9011084636731475 0.001 +0.2773368034803274 0.03733743787558015 0.001 +1.105919820867226 0.5947237012047963 0.001 +1.039953977847311 0.5262379799792765 0.001 +1.777133710823279 4.452466371025528 0.001 +16.6572181772387 -6.637201268369739 0.001 +2.011436021563809 0.02829262046023539 0.001 +-6.8521440252273 -6.599413884207391 0.001 +1.168316138125923 0.7800359788717633 0.001 +0.1417341159465966 0.2679649888079567 0.001 +4.037157445431952 1.215008078456058 0.001 +2.456892817312513 -0.005857195753493993 0.001 +0.8865945194286173 0.6767526086149255 0.001 +1.146431548738299 0.3359801156458725 0.001 +0.6880047350632739 0.2290313715898906 0.001 +-0.696577135611668 7.300785572835866 0.001 +3.309018121630301 0.9375947974043938 0.001 +6.4020163942391 3.321872406979205 0.001 +4.862346133366618 -0.9194526198435711 0.001 +1.011985129380145 1.625503647643805 0.001 +0.8091447431662664 1.437349345537731 0.001 +1.791911747367279 0.3577530691665053 0.001 +0.2844555687469261 0.3477511322791802 0.001 +2.457476618009053 1.060864771168741 0.001 +0.07081724777764541 0.8534565422207125 0.001 +-6.676247046417888 -1.277238613486827 0.001 +2.519969974471607 -0.7817581655142855 0.001 +4.928560240732721 2.547843929965819 0.001 +0.8289945760298716 1.235499253960877 0.001 +2.857713468893325 0.02636603763583467 0.001 +1.126234819230722 0.005619420174188119 0.001 +0.06540185461667508 0.6838264271801666 0.001 +3.223807817986168 0.6141401988597974 0.001 +-0.02384772672902783 0.7508269090034001 0.001 +0.01616777174233122 0.2570531359505739 0.001 +12.41413174147546 -1.06014468441982 0.001 +0.09025674791122849 1.705998964917274 0.001 +1.71983893182651 -0.08387554169994368 0.001 +1.621761446320531 -0.3252361514820335 0.001 +0.1189446520912754 0.5736419570720116 0.001 +0.2249770385456122 0.1224159467916719 0.001 +0.1458608075696008 0.1451465436087749 0.001 +1.423982660828702 2.129594809424976 0.001 +0.2143038361627992 0.6690680703577732 0.001 +0.3963403796251093 0.7985428835695054 0.001 +3.089936106903142 2.10355260927216 0.001 +0.4864251490991824 0.2582562811730776 0.001 +3.188688891091392 0.226325630367735 0.001 +3.286878268696194 4.784303036496691 0.001 +-0.02618334546819684 0.5825758384881192 0.001 +1.020766720771056 0.4373808455731468 0.001 +1.693537492358454 1.403315604984223 0.001 +1.993672520249531 1.28445978020038 0.001 +6.861610871644724 -1.995939806130309 0.001 +0.6923907208606354 0.05698746561132781 0.001 +-0.04252246690645865 0.5016130664031049 0.001 +-0.1005937458632175 0.4559344520813097 0.001 +-0.1269384338558633 0.3673158613316858 0.001 +-0.01021826287103217 0.8280956162748641 0.001 +-0.1082999510837758 0.8883242091360971 0.001 +-0.06675436086931714 0.9713546117261009 0.001 +-0.3672537653208753 -0.8916838532281113 0.001 +0.7924167682556692 0.3568718955368065 0.001 +1.241565495807484 1.295732252447808 0.001 +0.7466319297697886 0.8314431969373625 0.001 +0.05042991450318384 0.6188573177216881 0.001 +0.8664041731855998 0.4587969146068457 0.001 +0.3814574027533528 0.1394035046122545 0.001 +0.7570211188189818 0.2001178284279225 0.001 +4.038171191814163 2.61278347623382 0.001 +1.858284670150309 0.8122885656011772 0.001 +0.5904380908982589 -0.05150700697412955 0.001 +0.6753633768373005 -0.02772870130814288 0.001 +0.744182312423373 -0.08617207409338301 0.001 +0.8187473862732964 -0.05361172425241049 0.001 +0.9185719183698781 -0.09279113633272251 0.001 +0.9850678839557622 -0.265678303608353 0.001 +2.22454615089982 0.7091392221107736 0.001 +2.622077839614273 0.8284369890417427 0.001 +0.8397350390038938 0.3026104792270878 0.001 +3.882643576129421 0.03830704991526454 0.001 +-0.1364411486567469 0.2024163052948284 0.001 +0.3983484256803907 0.512554213330553 0.001 +2.271337763589365 0.9986643801976915 0.001 +0.3279903715058683 0.2026514518867864 0.001 +3.640281429912874 0.7128648838879952 0.001 +0.6085772237355617 0.1513008525403492 0.001 +0.9210986073535556 1.038788414463189 0.001 +3.08297869210813 0.031974753844703 0.001 +0.4684498383534705 0.165785520023788 0.001 +-0.1063920340758614 -0.007915214098120574 0.001 +-0.2934324275448884 -0.05767553277476882 0.001 +0.4300898648888773 1.03353195649975 0.001 +0.1236962113437936 1.212217478252748 0.001 +0.4138444805169562 0.8775612861215433 0.001 +0.7504387250474313 0.5738243492343041 0.001 +0.4803958713278981 0.9088438780526973 0.001 +0.2165704502580713 0.8326192879768465 0.001 +0.8215552278850374 0.03277704161717998 0.001 +5.324993621319206 0.1590520187939465 0.001 +0.861623049605349 1.008212400447853 0.001 +0.5789616398347743 0.3544259397054795 0.001 +0.5286964012067976 0.7599441166564416 0.001 +0.5594426120075241 0.6425796308778389 0.001 +0.4858205274156369 0.6179553867179681 0.001 +3.095897012094796 -1.523050714006116 0.001 +4.150681537059036 -2.364988100695203 0.001 +0.4931213335624987 0.0442257600262279 0.001 +0.1911803015170718 0.5777087814773297 0.001 +0.2668681530169529 0.5445434789381578 0.001 +0.3399490683090743 0.926541903402531 0.001 +0.4466134994391938 0.7422789043414657 0.001 +0.8916377064732072 0.08199123790399938 0.001 +0.5608157240025917 0.2924249717751403 0.001 +0.4351690606739492 0.3836002854888164 0.001 +0.5332194272757221 0.8541759221465451 0.001 +0.4685464449648508 0.5353302577166424 0.001 +0.7066377500317126 0.9658109551257783 0.001 +0.5794625006127102 1.00385585431538 0.001 +0.5799014860738502 1.078746331725292 0.001 +4.346348091804557 0.6224713825939464 0.001 +1.333226707965364 1.086731833301193 0.001 +0.3583883057908251 0.6305080065322795 0.001 +2.075810719280748 -0.2081366471158571 0.001 +0.03031646632534023 -0.05765940162269034 0.001 +0.7134221209316376 1.049522565359095 0.001 +0.808594478348529 1.067019589170051 0.001 +0.5307812373097772 0.4068864826839531 0.001 +0.6352342179182866 0.9480623906702399 0.001 +0.66837802008573 0.4545491052605374 0.001 +0.9336771347764435 0.4037323104949567 0.001 +0.5734304854263127 0.7156700961826472 0.001 +0.3312718577453445 0.5527668061398257 0.001 +-1.433266459620679 3.213700303479298 0.001 +0.7915050001440387 0.7223955355151988 0.001 +0.9791404457292856 0.2777177567093849 0.001 +0.4170850260253945 0.291226389596318 0.001 +0.3050193623363815 0.693027148280385 0.001 +16.80331119733105 -3.123360041409959 0.001 +3.476954036982294 0.09899996190265446 0.001 +2.518144188505129 1.295196235014592 0.001 +13.6671168745314 -7.071241885295381 0.001 +0.7181893090857718 0.6911297899440325 0.001 +0.5449278644079321 0.4909565567714965 0.001 +0.6164001101285973 0.8738603142546131 0.001 +0.4805658658617523 0.9840825977739533 0.001 +0.0220987289908682 0.4551416288699208 0.001 +-0.8432424850080404 0.8050497341616916 0.001 +0.710804715333283 0.3269194721864904 0.001 +-0.009362076234954522 0.3404900041781114 0.001 +0.3693339456388063 0.4347642072148999 0.001 +-3.152890242165177 2.106169986279163 0.001 +0.6193436518097347 0.5894070070603833 0.001 +0.4380360759074043 0.6546265619633813 0.001 +0.6101083844410659 0.5090951470461353 0.001 +1.421583787839635 0.2357986016924487 0.001 +-0.1913650899279741 1.195508294458751 0.001 +0.3130773365412053 0.7813808745149866 0.001 +0.6753936781560967 0.8226981328413665 0.001 +0.6832266918532401 0.6071987372546896 0.001 +0.6225606638433505 0.2281739449282696 0.001 +-3.340154820960894 -7.135730425634269 0.001 +0.7457643691252254 0.9237081737109157 0.001 +0.6355063317838213 0.7341451074565573 0.001 +0.9868245660288101 0.9841311223006202 0.001 +4.367661669608585 1.157795345471968 0.001 +0.01415106611134925 0.9742667257182411 0.001 +10.74834835250192 -3.288201000157785 0.001 +2.682141008588539 -0.09794137025915031 0.001 +0.9843761706014313 0.2037574363743817 0.001 +0.4498568586212285 -0.0007710576612446222 0.001 +0.6421403004959257 0.379368806939438 0.001 +0.2975788128089086 1.062252242556866 0.001 +0.9552242053369255 -0.01956853014014048 0.001 +2.38607706543896 -0.2082996618149958 0.001 +3.326447242418097 0.7638416547499259 0.001 +4.635356628674811 0.2222341719263668 0.001 +0.1277295832763881 0.3698503926097203 0.001 +-0.008464663648790605 -0.03390028919913818 0.001 +0.9449507138986346 0.5606750457554953 0.001 +3.925488606104029 0.9658487704193898 0.001 +3.861112426094385 0.6022109516795278 0.001 +3.95880266568118 0.6999082052174781 0.001 +0.7246792810430345 0.4997435136256106 0.001 +7.428553904315998 -0.5181577583602763 0.001 +4.326028258096382 -1.241290929926241 0.001 +5.177400574893204 1.107219181826152 0.001 +-0.1441097979182403 1.045989792131464 0.001 +-0.3731712552316382 -4.055997673074705 0.001 +0.1458729856722264 0.003832151281109395 0.001 +2.837100390664869 -0.4962753859965465 0.001 +3.111342931082484 0.3534451560307262 0.001 +1.073219593451983 0.9976793119612627 0.001 +0.2217806025959881 0.267226447913409 0.001 +0.3423815871611074 -1.165507501858395 0.001 +0.4986336499760846 -2.257945153578914 0.001 +0.8117632902222656 0.4344476126185522 0.001 +3.713502135039549 0.9046993247675382 0.001 +0.8263035595869006 0.9542021176898391 0.001 +1.936875010190475 0.9556302004023891 0.001 +4.27132535815101 1.51523467270933 0.001 +2.210125734511803 -2.153507365173072 0.001 +3.721961618563927 0.2559534231332306 0.001 +4.863043106254446 1.964618840335043 0.001 +1.505638682538069 0.7500481200410267 0.001 +0.1598966473923256 0.7119773703042254 0.001 +0.8100919010155363 1.1577331927267 0.001 +1.090330286706311 1.19158300962145 0.001 +0.7472124809413794 0.115266100077598 0.001 +0.03689542640636753 1.048207577796548 0.001 +0.6579250732715741 1.107134661485972 0.001 +0.931705702654222 0.3372648058353817 0.001 +0.8850637226651327 0.8960407084616717 0.001 +0.8703507097423062 0.819610170839283 0.001 +0.9850370588625176 0.7858306579633554 0.001 +3.891236304319387 -7.509524862974732 0.001 +0.8690140908821105 0.1550630717953946 0.001 +0.9200891796648151 0.7771519897017398 0.001 +1.384484756906863 0.04661439992214395 0.001 +-3.871655261207544 7.182573757981117 0.001 +1.006295834862953 0.6660627396354792 0.001 +-7.183604136195631 -3.710685154747266 0.001 +0.9988117208615576 0.8503097685892008 0.001 +1.019520807722705 0.7484128440620711 0.001 +0.1761435341970177 0.4514522109850322 0.001 +3.456193212488631 0.4333004207005674 0.001 +1.072009281742462 0.06218978880915594 0.001 +1.050010969231527 0.002536730963754318 0.001 +1.102895074738425 -0.08182714276505487 0.001 +0.3084515950446253 0.4110909833252891 0.001 +4.016914113340159 -0.4023810752077084 0.001 +3.832130842553529 -0.7370777413732035 0.001 +4.288183387932376 -0.2614871027411423 0.001 +6.330064102854079 1.574663235548834 0.001 +3.763810078407198 -0.1009185643980371 0.001 +4.95396399411025 5.554316251414537 0.001 +0.7732544723069349 0.7875112326400627 0.001 +0.9553568416763011 0.918388463162805 0.001 +13.82109894736417 7.589907611954125 0.001 +2.913009843471644 0.419987750041161 0.001 +0.1754244568786227 1.076847134135189 0.001 +2.142787943383561 1.518960066775199 0.001 +0.9308631772702853 0.6309904228865153 0.001 +0.8159118133453216 0.5831737121219205 0.001 +3.122099688135381 0.9641799655641883 0.001 +0.2389401779979483 1.041233587497697 0.001 +2.36864126683174 0.5943422051883221 0.001 +0.1079749935559381 0.5069961432934954 0.001 +1.093123384367193 0.7639185793436426 0.001 +-0.04120054299823474 0.2200507751009823 0.001 +5.708506020684922 -2.922341761316508 0.001 +4.294586283161202 0.02029510675296404 0.001 +0.1919167355360943 0.9375272291253897 0.001 +-0.1467208597862421 0.2846586432494385 0.001 +4.034022434490109 0.1647443929090915 0.001 +1.942773230190835 0.6408381851959406 0.001 +3.182451058453921 -0.1369138002966545 0.001 +9.255069870082391 7.652017418382917 0.001 +0.6983847181074337 1.25951204398232 0.001 +0.5470867815304512 1.383337116325736 0.001 +2.237370978341182 0.346391171559256 0.001 +0.3683771101129509 0.08112290557771425 0.001 +3.341710093575391 0.2070339407606151 0.001 +2.908639346422417 0.6454137332829371 0.001 +3.040060842151824 1.341035784663239 0.001 +0.8608466245584034 0.5243163221145862 0.001 +-1.234579676190918 -1.064808744374931 0.001 +2.333420571205235 3.606216231349733 0.001 +2.444035673966291 2.404076992873675 0.001 +1.93114110287636 0.2837098614624907 0.001 +-8.117657483906935 3.986057956351082 0.001 +1.189425451741866 0.2258405296293634 0.001 +2.533932102869053 0.2442035278031675 0.001 +-0.7570853173947566 0.2786634382580758 0.001 +2.860657571526084 0.9749703168239373 0.001 +2.814475318625488 1.130611456616036 0.001 +1.074949287090628 0.3846481305542466 0.001 +1.062637667282633 0.3130531693096817 0.001 +0.07776022964388654 0.2674216939264721 0.001 +1.890633909626783 -0.1079859595092171 0.001 +2.089663029292339 0.6071013453137422 0.001 +0.9138015966505368 0.2103584708707113 0.001 +0.2145252337382935 0.03032038499504149 0.001 +0.04229911256147934 0.387153875102913 0.001 +-0.08531412364236166 0.09426736773646126 0.001 +0.3792488605600965 -0.2012189213984078 0.001 +0.3118851486338721 -0.0200988828646123 0.001 +0.2635765442905281 0.1704839415429548 0.001 +-0.2252456723952244 1.503749726478208 0.001 +1.50831787429121 0.966134824645253 0.001 +1.664815898365358 1.030318009285744 0.001 +1.686152731711639 1.211400295125598 0.001 +3.84493597831485 0.4290470030860775 0.001 +1.418713400409179 0.4417550554777842 0.001 +0.7208061893513573 2.223939051019213 0.001 +-0.5451080899832086 1.238596514088054 0.001 +6.147266993302895 5.156362895483361 0.001 +0.1032957458452353 0.7432014502887616 0.001 +0.6333732940337666 0.08988055665177248 0.001 +1.731140687170062 -0.582667182341016 0.001 +3.31649950122531 -1.114651733082012 0.001 +2.22035574229688 0.1298157463845387 0.001 +0.3552390811388301 0.2653798268461474 0.001 +-0.4832459432290848 -0.3981488813135729 0.001 +1.081647817892387 0.9350966815433832 0.001 +-3.252130414575802 -1.979731885448271 0.001 +-2.297007640702064 -3.73047415255522 0.001 +5.148502394623584 -0.3623520918079346 0.001 +1.059172355476481 0.6281189287811042 0.001 +0.7226666147740051 -0.2056187170113969 0.001 +1.373185647154092 3.45718034887184 0.001 +0.8435502540490358 0.6483068807352366 0.001 +0.02966032908729054 0.1593580418082243 0.001 +-0.05611454083683597 1.143075312728539 0.001 +0.006643547010611812 1.117834009356842 0.001 +2.521113024662105 0.928854410015296 0.001 +1.661569490450103 0.2245042147981357 0.001 +0.5598501096967938 0.0178732416395853 0.001 +0.9424070218501449 0.04746697185846652 0.001 +-0.1648553163145043 0.5967781705231867 0.001 +-0.1812971459228972 0.5167100724946601 0.001 +4.013311591233019 0.3457383555553338 0.001 +2.670063656957798 0.4224794623922613 0.001 +2.809174269676074 -0.26141131222097 0.001 +1.640754173183843 0.5002008535426977 0.001 +0.1226576778839118 1.017806015134026 0.001 +3.890964319465242 7.749833684478759 0.001 +1.602262262317148 1.625080776085776 0.001 +2.202275232468081 2.07225680569689 0.001 +1.345517244572579 -7.594074047159917 0.001 +0.9876771717398388 0.1093853411573145 0.001 +3.069315908926806 -0.3746964319040745 0.001 +2.358597161776465 0.385836593359113 0.001 +3.663999171731336 1.265687045520197 0.001 +5.82207238853548 2.452839433738457 0.001 +0.09259273921229833 0.816972999402371 0.001 +2.805640213325909 0.1944959149367614 0.001 +1.547375329993946 -0.05095203482697967 0.001 +2.967911143716971 0.9144960693115618 0.001 +-0.07042820796802579 0.6943781896328259 0.001 +2.166570361459491 0.8604457355116465 0.001 +1.070130017252392 1.070406445345593 0.001 +-4.93322035483675 0.05516050309388981 0.001 +1.781484580112286 0.9530576373062108 0.001 +1.277362564907913 -1.014613959543452 0.001 +-0.3947269378136846 0.1194655534313916 0.001 +8.563007191270545 -7.354820995996203 0.001 +17.31130734158497 4.751318238143331 0.001 +2.108909479801355 0.3981140034303575 0.001 +0.004681357498590255 0.1041207755480318 0.001 +14.23312869205125 0.6930019319540071 0.001 +-0.4397204446380869 0.8840642047046186 0.001 +1.159284785290799 0.6376908486975824 0.001 +2.74395847053772 0.6847008952018024 0.001 +9.361579221936243 1.750637650546234 0.001 +0.2373286657514068 0.4848539339492959 0.001 +1.277135277589852 0.5043918118212112 0.001 +2.164976590255586 -4.023462281448667 0.001 +1.624888939549177 0.7137082426321985 0.001 +0.1095635024332771 0.05859624041487515 0.001 +-5.169577338749918 4.356164389776706 0.001 +1.10574604677984 0.174973481843354 0.001 +4.509490052485618 -0.5098664295985201 0.001 +0.05851821062078411 0.9171615069351228 0.001 +-7.618247427369718 0.9257904238277535 0.001 +0.8719696717276331 -0.04374336247848974 0.001 +0.8537542913728038 -0.1142953337507809 0.001 +0.7943748458465898 -0.1134640176221008 0.001 +3.440027339430864 1.017910310013027 0.001 +3.611409762111041 1.001286966866649 0.001 +0.1932423247328348 0.3909539802378968 0.001 +1.102103005474307 0.1135275433856397 0.001 +0.1058233167246604 0.9094695042657621 0.001 +2.009032410874325 -0.5198468611273472 0.001 +1.13931014531885 -0.2259927599925733 0.001 +0.275604230323588 -0.04517618347897098 0.001 +3.267183144915609 -0.5511731484034901 0.001 +1.277453576141232 0.9891966005825668 0.001 +1.356405919168926 -0.2888186226226871 0.001 +3.353911497658226 -0.1060685431631067 0.001 +1.100780903104701 0.6417603683191471 0.001 +-0.1914298867612651 0.8323797205953855 0.001 +7.59660819182325 2.061114367529969 0.001 +-0.1414692983752143 -0.08999287217071136 0.001 +2.628457802632352 1.146457576350247 0.001 +0.267718000817153 0.2311650531222283 0.001 +0.3337791900372278 0.3121335805249371 0.001 +1.256647428087852 2.686902601265027 0.001 +0.6845218017253645 1.181915896362285 0.001 +6.015576662343444 -4.813380257827073 0.001 +3.222629406554702 1.444645279088859 0.001 +1.31349546963253 1.76351600226762 0.001 +3.877121188288403 1.105699466652442 0.001 +4.386999142381039 0.916434029049163 0.001 +4.662906927460824 1.013984083813809 0.001 +8.44622991755096 -2.261849345032855 0.001 +0.8342855738789655 0.7137976920027048 0.001 +0.1558192712297561 0.20759713850508 0.001 +2.637661365750963 0.2951731749770819 0.001 +1.417568196290293 1.248824392548493 0.001 +0.5329227749810657 -0.1275694551152238 0.001 +0.4663236016461764 -0.1008594929125164 0.001 +1.873981271613917 -1.332874841967225 0.001 +5.621209890345053 3.3664900201194 0.001 +-0.1935051707044139 0.4241227509618524 0.001 +13.64226802380546 5.17247452801674 0.001 +1.853076645651677 0.01532705588772626 0.001 +0.1560860613154256 -0.05059024897486783 0.001 +0.006616882361785006 0.2140511872271583 0.001 +0.1154091567024896 0.3057207375386665 0.001 +3.752780255185742 1.660896731466163 0.001 +0.122258565045327 -0.6296779221854707 0.001 +3.899329369344859 -0.232567163530499 0.001 +0.4112330209607618 0.05745855296353646 0.001 +0.1382664486323045 0.9589867515206922 0.001 +4.177694824371113 0.444952250537724 0.001 +4.4192168224895 0.4134752101203714 0.001 +3.617941320433976 -0.08810514358964024 0.001 +0.3825811926974361 -0.05057029485831507 0.001 +0.9117025108399013 -0.4547305006432302 0.001 +17.99607541704449 7.852901244696347 0.001 +1.834429195074738 0.4868093016432652 0.001 +-0.4094884499194347 3.237621624665906 0.001 +-0.1231696172322805 0.04487506176880268 0.001 +4.062158075466237 1.052165962793585 0.001 +2.759090395944626 1.683684252470291 0.001 +0.9780735281950811 -0.1374992455835924 0.001 +0.9035204255367258 -0.1716854202562942 0.001 +0.2790164321654959 0.817535784598855 0.001 +3.537728756171956 -0.3714758068724711 0.001 +0.0475571343255318 0.05891417558940554 0.001 +-7.946272250178267 8.028185943308573 0.001 +4.044521107678271 1.452839897821567 0.001 +0.04189606100320797 -0.161918478997273 0.001 +0.2598233409957599 1.237158814649115 0.001 +-0.08514320890394854 -0.05139876623542005 0.001 +6.45116471758303 0.004703951720473439 0.001 +1.049133321481179 0.5812256160536171 0.001 +0.6587471475109785 0.1982963681657506 0.001 +0.01153389161912415 0.008865751025928124 0.001 +3.04152109488601 0.6817132266467025 0.001 +-0.05398215864426881 0.8803376867031455 0.001 +0.2779538714202706 0.08291106449116793 0.001 +0.7652628299330915 -0.04521619285608935 0.001 +8.465173576041254 -5.747350841890242 0.001 +17.94592041475416 -1.326501054767576 0.001 +0.760348680912445 0.06940579966608451 0.001 +3.160727514746794 0.512488171808355 0.001 +3.343427033927681 0.5221680725900849 0.001 +3.550439349555713 0.537446516340445 0.001 +0.0004728748793384752 5.614245807285279 0.001 +6.242472152783628 -1.473342940829477 0.001 +3.636604163370888 0.3531947418508319 0.001 +-0.1427361864594418 0.7281414896365253 0.001 +2.333819673871587 0.06982757325789207 0.001 +-0.1500180260938048 -0.4789248686383922 0.001 +0.2220676404202451 0.9730401311549173 0.001 +0.750204542683824 0.4431584178719414 0.001 +1.165800238791272 0.4155840024008198 0.001 +0.03842478705734206 0.831766338424353 0.001 +-0.07197382292622118 -0.2182584475535583 0.001 +3.813109654814343 0.1719004086395952 0.001 +3.59928803203619 -2.054014614822401 0.001 +0.9845931965930221 1.417125934544902 0.001 +3.126492021833384 1.111531974554701 0.001 +0.5362156820315965 1.129821019287587 0.001 +0.4566322543030004 1.085805565523571 0.001 +1.541013555151001 1.321382187591956 0.001 +3.498832686896726 0.7597082349970671 0.001 +1.078549249374045 0.4568053046996572 0.001 +1.324742429346784 0.7794501129716567 0.001 +14.82205651419165 -2.116714047412077 0.001 +-2.450728823243587 1.138341513412894 0.001 +0.2906433341798037 0.9180511268936968 0.001 +0.9468401305691477 1.121780547343705 0.001 +0.8937880354458051 1.166636097919858 0.001 +1.026736642630985 1.149599528200701 0.001 +3.374338981649014 1.307895390187883 0.001 +4.12781356392169 3.531796811926712 0.001 +0.4963898968843765 0.1244390029573741 0.001 +12.4584157535254 -5.501461653592888 0.001 +0.8057122591915246 0.1739277001975109 0.001 +2.476743630637828 0.5222659937071364 0.001 +-1.700874503373687 -7.922694487005769 0.001 +1.029705510706959 0.1865402179730565 0.001 +10.47438515311901 4.119000391415637 0.001 +0.8049994921679535 -1.464224879456778 0.001 +11.74668360542321 -8.439080873638806 0.001 +1.026483453368625 1.014813917979608 0.001 +2.501131950909748 0.7737241924936191 0.001 +3.978732877449243 0.8198125608058999 0.001 +0.7860780127252768 0.2418543746689789 0.001 +1.543562091455842 7.987673843455681 0.001 +3.31598853841861 1.768070598990835 0.001 +18.0882948383992 -8.144480384249178 0.001 +2.779232541331206 -0.1205776335031207 0.001 +2.516525761174431 -0.1310095236176868 0.001 +0.329911289066076 0.04824172960126474 0.001 +-8.203877409039741 -7.773202962248998 0.001 +0.8707415808980448 0.2532231155180106 0.001 +0.4431749851157582 -0.05230047770022216 0.001 +0.1677080273096354 0.8321084861311243 0.001 +1.127534773221099 0.05675666648349172 0.001 +4.144195727228904 0.6061842311967155 0.001 +1.115583107347717 0.2814355327499539 0.001 +0.9640141892050086 -0.06508550014956532 0.001 +3.587586404320655 0.1805007724072993 0.001 +4.437525395389772 2.263273912404054 0.001 +-0.09895942901285866 0.1509191432722836 0.001 +2.062939849044084 0.9070402736006736 0.001 +0.5710811650359613 0.0634798115841889 0.001 +0.9896420282818622 0.5340830780660391 0.001 +-0.2165546942460186 -0.004982818845890139 0.001 +1.385831268718267 0.6659827141497019 0.001 +-1.305727174764556 5.886041295811151 0.001 +1.233979963141056 1.148393954277777 0.001 +0.9192167968690219 0.5119582212076415 0.001 +0.3584534324942013 -0.08956420183964987 0.001 +0.01751057686113435 0.7122014789802744 0.001 +0.2383863750954976 0.3296237261882428 0.001 +17.78876253858568 -4.980983400443452 0.001 +2.132200180661866 1.212095069643237 0.001 +0.1167237447562953 0.100462466574172 0.001 +-0.08070799825374815 0.8459457124580861 0.001 +0.6868895553633365 -0.07703352862736301 0.001 +1.933619711387674 1.067725914373212 0.001 +1.119951603266482 0.8327464302373715 0.001 +3.246236360679539 0.8291557331652154 0.001 +2.763495608200504 0.8929029760943593 0.001 +0.8213660271921805 0.8289807051582693 0.001 +3.911816296200408 -0.08247685552242931 0.001 +0.8420263407869157 -0.008004038407792204 0.001 +3.813207673900577 1.226739572382449 0.001 +3.457467926344751 -5.089113920538485 0.001 +2.590407875509312 -3.773697584811146e-05 0.001 +15.0517918561404 -8.009059623644493 0.001 +0.8914059217261093 0.3360507725621934 0.001 +-0.06526654290704989 0.3675288858965818 0.001 +-0.09807255575729364 0.4061928631704594 0.001 +0.9234564835077773 0.7219099131420911 0.001 +0.7207526612009348 -0.03847241260609766 0.001 +1.162591552268018 0.9588657603056012 0.001 +-0.14163906361093 0.1256669382131727 0.001 +3.173509273933499 0.08620112259662176 0.001 +0.2444932953689665 0.3794329329474367 0.001 +2.712585844795151 0.01311475951534288 0.001 +0.3317725566828455 0.7344540558401619 0.001 +0.9662699594144761 0.6708944093239602 0.001 +17.95759767969664 0.508360389760326 0.001 +2.223919681446599 -0.1612891216067973 0.001 +3.734144587253842 0.6080207198484823 0.001 +-0.5813013475601602 -0.06574047638613512 0.001 +-0.08582475812001711 1.03263831962337 0.001 +-0.1482570195250348 0.9806646204331915 0.001 +0.1940954295308157 0.7503603510977396 0.001 +0.07439066135625975 0.3995203238893672 0.001 +1.298359772806207 0.2597182485557937 0.001 +5.320173329626217 2.239198365470833 0.001 +0.2655423001031275 0.4457958398490731 0.001 +5.725764899135998 1.364302658532327 0.001 +4.042047378275342 -1.68772869497727 0.001 +0.6233387482952296 -0.2169082860101351 0.001 +0.1160933479358346 0.6908154107869655 0.001 +-5.263619253167153 -8.030392734536061 0.001 +1.952349821145596 0.1182375361693645 0.001 +-0.0451181254069619 0.1152606390933411 0.001 +0.4191671195333728 0.1751812285770236 0.001 +0.7127055909601967 0.2766090913822119 0.001 +1.095752061910868 0.5297238951719078 0.001 +2.397363816437335 0.9474050525858436 0.001 +15.71781580004198 4.546496042258526 0.001 +0.5522753194297292 0.1506388951345133 0.001 +0.06205383178073873 1.098051066807105 0.001 +0.01936450874355546 0.7795839932131695 0.001 +0.0373023810644531 0.5812442420670937 0.001 +0.2036770383049763 0.8648964009260844 0.001 +-0.3277773014485897 0.8715859145648429 0.001 +3.366757344566021 0.3486123654991681 0.001 +0.4554984969228951 0.3291903660924601 0.001 +12.04908639723953 8.125460511674257 0.001 +2.627967499835542 0.5509128738354072 0.001 +11.28438242973396 0.8926677626105644 0.001 +-0.1111553058679763 0.2239522869275282 0.001 +-5.429861906041353 7.963858174727184 0.001 +10.66059634207139 -1.162147260755226 0.001 +4.009131492183151 0.05734922308276107 0.001 +2.2172548653461 1.102205357991778 0.001 +2.317740463058115 1.065290690155991 0.001 +0.6918452315361403 0.01697103971236499 0.001 +0.2208916691633447 -0.09479774578856426 0.001 +0.2665122309793693 -0.1397690257137075 0.001 +0.392963073831383 1.164311138896172 0.001 +0.09435648822037968 -0.02400201075203708 0.001 +8.379968261528074 5.462139454724824 0.001 +2.356709711140949 -0.3692965862017636 0.001 +1.039985512365602 0.9703669157290626 0.001 +0.7822331215392089 -0.008891940395341271 0.001 +15.51595007972947 8.23201000086309 0.001 +2.09876221292117 -0.05176794751646244 0.001 +2.224725033629841 -0.6480593970836278 0.001 +3.409648031396691 2.515491972963483 0.001 +0.01201789971116034 0.3073491285788075 0.001 +0.7038009500948492 -0.1317389881286793 0.001 +0.7461289880536222 -0.156914456667726 0.001 +-4.603511398975031 -5.689757762631887 0.001 +1.651032989843505 -0.9414336891506566 0.001 +0.132995566320461 -0.1645605755482376 0.001 +3.331487256536834 1.06869553582689 0.001 +1.533778810143937 0.229581636865536 0.001 +0.6003315469415333 3.896158311178005 0.001 +0.5019734805415845 -3.10507339835827 0.001 +-2.12615297592788 8.411457386688051 0.001 +-0.07895713259300315 0.7435996928815372 0.001 +0.9872521505552203 0.4060088737583655 0.001 +2.455759129631088 0.1294936041762245 0.001 +0.6213740299720886 0.001135467762167243 0.001 +0.9370804392925335 0.09375303073746198 0.001 +0.2435080645837658 0.5906617723152344 0.001 +0.7075451023383876 0.1879424172972358 0.001 +2.33523712902683 1.397319573840133 0.001 +2.391231016494592 1.191441354350071 0.001 +0.08803078555440697 0.6682784417978705 0.001 +0.9924224693015679 0.1560964285215383 0.001 +0.1877579200242524 0.2798100259501438 0.001 +1.073139235352344 1.285276486607838 0.001 +15.54709974096637 -4.943897667446352 0.001 +3.402627363427701 0.8999088394172907 0.001 +-0.04703938422883431 0.9252112737490158 0.001 +-8.239409800741765 5.87763663231477 0.001 +2.893474262559709 0.2837979519381891 0.001 +0.8873218070811286 0.4174023553792407 0.001 +0.09793517227865373 0.6019741279863169 0.001 +0.4272117288017454 0.4369549677786779 0.001 +0.842444954974388 0.07599411712490708 0.001 +-8.284595689782501 -5.412866284623754 0.001 +0.5212705564526081 0.2553697091574746 0.001 +0.009141188667966996 0.5257057838184931 0.001 +5.841178516484325 -8.058137124131866 0.001 +3.454044839613553 -0.01804618192721889 0.001 +0.7964542217385833 0.3222704413409687 0.001 +0.174267201570601 0.6386515495774712 0.001 +2.345845209638782 -0.06341942148824467 0.001 +2.076228782266468 0.1070466611139976 0.001 +2.56196638064025 1.489492724911802 0.001 +-0.03071251894910215 1.001697897579474 0.001 +-0.05252239377945341 0.5294634816071737 0.001 +0.5342722477455578 0.9570461689820668 0.001 +2.567833904979812 1.038518321449628 0.001 +4.169545139441173 -0.9022596767599762 0.001 +2.803997723088185 0.4385519595087248 0.001 +-0.0738018278085007 0.5065733443858438 0.001 +-0.07074984578955927 0.4527051946946904 0.001 +3.933221130436341 2.264969157625278 0.001 +5.085127358082101 0.648538872933386 0.001 +1.834852297409225 1.259343814546742 0.001 +3.749139286296574 0.3596339491539444 0.001 +0.251806748089617 0.6675168874712141 0.001 +0.2423131647813842 2.064439637848061 0.001 +5.689629719801377 8.288504096195577 0.001 +0.7464977748931594 0.3565269331556846 0.001 +0.6337617117989018 0.4284758221478286 0.001 +1.909151790671186 0.3808982921214223 0.001 +0.7942064808665422 0.9480974023804288 0.001 +0.07363456717467649 0.569591192853053 0.001 +0.4043659624336551 -0.1529969209889306 0.001 +0.1407930017372872 0.403873814109912 0.001 +0.4680970158756881 0.04714987585656191 0.001 +-0.1845056099417252 0.9155578139189305 0.001 +0.05332683308253549 1.167647563561034 0.001 +1.035857019128919 0.09138188380420199 0.001 +0.4158328931349832 0.8188209498603918 0.001 +2.943767760308052 -0.03218208651282353 0.001 +-0.07743896918990319 1.09770009100073 0.001 +-0.03840751099398192 0.7848940820681063 0.001 +-0.3203664686107701 0.379648965467106 0.001 +3.810787842982993 0.9905374155562416 0.001 +0.1998034379960109 0.1619025865584338 0.001 +2.886950206578982 0.5315341368412511 0.001 +0.2010275208624362 0.0714269441614109 0.001 +0.7429389346029155 0.6048022406878968 0.001 +0.6349581416170673 -0.05594593835077277 0.001 +-8.077365134210581 -2.53665376135692 0.001 +0.448358923806999 0.5135610890811245 0.001 +0.9601956212523538 0.9544968386074496 0.001 +0.3171090569332475 1.023375554537219 0.001 +0.4014525433275019 0.627038387088293 0.001 +0.006694919693828592 0.6226046139337277 0.001 +0.1877677351123035 0.241907535118553 0.001 +1.062693300494224 -0.04132800768247764 0.001 +0.6544457596425639 0.2597179004159865 0.001 +2.528042630204499 -1.842409196565382 0.001 +2.759561375618245 2.604358220550892 0.001 +0.1672302653577033 0.5532215557743342 0.001 +0.3862478529416752 0.5524952023691095 0.001 +0.2869908954860885 0.887471169188493 0.001 +0.6322395853496341 0.7892000879010153 0.001 +-2.524589161430049 -5.714775771593049 0.001 +3.795095216084081 0.0185646909103318 0.001 +1.079667820726985 0.5023688711196836 0.001 +7.577537977563544 8.254669631122571 0.001 +3.595387390871595 -0.9323753346623339 0.001 +0.08557932743593304 1.009112294677859 0.001 +0.3711754077058074 0.1824649398162965 0.001 +0.9964716981486417 0.007050424836126295 0.001 +5.061561884953592 -2.274806129501789 0.001 +3.242167208924133 1.021018315618163 0.001 +0.5159161200501641 0.4416300434882661 0.001 +4.198669630590524 1.122066101886263 0.001 +0.3981936305825647 1.048434699145322 0.001 +0.3676114395913437 0.9542803664983736 0.001 +-8.253859871653644 2.070752205780556 0.001 +4.473016385776827 -0.8360023377330316 0.001 +0.3509579858852883 0.8857373258617054 0.001 +0.5268872791400719 0.8872273839029859 0.001 +0.4509230463983823 0.2171143502320102 0.001 +0.144168221703724 0.4832953524021563 0.001 +0.4518664399006695 0.8652029912716455 0.001 +0.8856622222020861 1.001246663990771 0.001 +-5.020412369122488 -1.727316088252273 0.001 +0.2443389898420575 -0.01069249745049922 0.001 +0.7446938604253162 0.1540323892911564 0.001 +0.5439410105205489 -0.06895690697783041 0.001 +0.1415903366161667 1.144376359418446 0.001 +0.6081968518176099 0.9098532570496645 0.001 +0.7080033727526438 0.4498255110760974 0.001 +0.505413713785268 0.2079213263016218 0.001 +0.9572543130804562 0.2521550945213925 0.001 +4.881633434136773 -0.01998575769139319 0.001 +0.3246977758250172 0.3774090409107407 0.001 +0.4865652582403861 0.7690195947389656 0.001 +0.5949794247235604 0.1132717048879464 0.001 +0.4154363354955532 1.078391890281734 0.001 +2.579973161642793 -0.4828981147080799 0.001 +1.781217641473256 1.98248225325221 0.001 +12.77896717234479 -2.860750598201857 0.001 +1.032298039180018 0.4078984273874409 0.001 +1.036239893006279 -4.179849245290449 0.001 +3.616198771354316 0.8270328083553382 0.001 +-0.06181201424567001 0.6651954147684296 0.001 +0.7098541855806068 0.8076147276374445 0.001 +0.8131782309276303 1.023609817019542 0.001 +0.4080979474655527 0.1060296874696288 0.001 +1.182179974818877 1.514805485380158 0.001 +0.5871971612858484 0.6755322487742762 0.001 +0.6811342929128995 1.059579104366451 0.001 +0.5453803860533276 0.3263947074099058 0.001 +0.5376915283630722 0.6089995660367977 0.001 +0.6218188902495538 1.078795774316589 0.001 +0.2472898693952864 0.7053837934996412 0.001 +0.4627788368202647 0.5949344510146284 0.001 +0.5199434347272875 0.8161628637225742 0.001 +0.5563596039787768 1.035671265326484 0.001 +0.4345840225088147 0.9077014204351804 0.001 +1.858951663771347 0.6693354622438452 0.001 +0.8847577177634206 1.048355673359114 0.001 +0.5762496769538256 -0.1214971968963013 0.001 +0.3262974195428529 0.9719242514776024 0.001 +0.8304888763185097 0.3527652560822701 0.001 +0.8505773822371527 1.056879920384367 0.001 +0.8313951636790265 1.104635961420215 0.001 +0.3287128134228649 -0.1387636842312214 0.001 +0.01467005226959777 0.4898086993084276 0.001 +0.1355991585068126 0.5962696041633755 0.001 +0.694609082329827 0.7168114171986462 0.001 +0.9948508287961906 0.4839634689216623 0.001 +4.125588664292176 0.7405697718855759 0.001 +1.029059625245627 0.2761840284088407 0.001 +0.4148672293526671 0.7075033435013386 0.001 +0.34625432363617 0.5152554134431175 0.001 +0.04818695167968282 0.7382048651712179 0.001 +1.125166258562937 0.7154455739339839 0.001 +2.103409324763498 0.7100332819659479 0.001 +0.9119354580546236 -0.04572865749358977 0.001 +0.5208969862099493 0.1563505365734493 0.001 +0.477727081998003 0.7356561468999501 0.001 +0.6117222616044531 1.121527888705928 0.001 +0.6025165678737475 1.038404448583336 0.001 +0.659360985108022 0.9796551745702485 0.001 +0.4669423974874284 1.020062730543645 0.001 +0.5014031003623381 0.6455653622973694 0.001 +0.3111513541423445 0.594716243629306 0.001 +0.7146328723675974 0.8772450274969769 0.001 +0.7658927269411163 0.8766009817460616 0.001 +2.412361846877851 0.3137200392925203 0.001 +0.4712589515100387 0.4117879700799647 0.001 +0.347495092307858 1.066037946139727 0.001 +0.3359694572469732 1.09302642254323 0.001 +0.0301002327529837 0.8724692552456296 0.001 +2.541221952441215 -7.905508842949613 0.001 +0.5325329672742938 0.6936283336528224 0.001 +0.5357420101358432 0.3632967580238665 0.001 +0.1232705593213659 0.2238982739827368 0.001 +0.5699558001288616 0.3969458022807193 0.001 +0.348745668613817 0.6654217667618368 0.001 +0.4372149845209066 0.1364689664502466 0.001 +4.532157916553106 1.69151292235863 0.001 +0.1581088099994874 -0.1100277966270174 0.001 +0.4809065583802304 0.3738460123098902 0.001 +0.5664942588808637 0.7543196766538086 0.001 +0.6849093091630547 1.011192046782846 0.001 +0.733148909774412 0.986396933684843 0.001 +0.5885518448507504 0.9699885724279509 0.001 +0.6878064010307697 0.9397569236273605 0.001 +3.647133083701039 -0.1848166501742454 0.001 +0.298441725582768 0.5330693416295458 0.001 +0.2853631042060159 0.5666585821973225 0.001 +1.218144625510936 0.0169723444543484 0.001 +0.5083918847874586 0.282781064547345 0.001 +0.5910700637052477 0.3090175124080414 0.001 +1.386868920031964 0.5575678964382218 0.001 +0.5174538787109467 0.5769570963848845 0.001 +0.5580551018850743 0.8049500925331099 0.001 +0.7657849504896606 1.028440320559245 0.001 +3.341047063553487 0.6448134766630853 0.001 +0.5803885348759866 0.5486550411541794 0.001 +0.4578843147288351 0.9328501040136998 0.001 +12.97890588208397 3.396210654426669 0.001 +-0.0144060450350288 0.4490165520312403 0.001 +0.5303519747684411 0.7255584555341631 0.001 +0.4258424367830221 0.7926293560109982 0.001 +0.8091503498031607 0.6702736117052203 0.001 +0.3043275210359546 0.6337099772833624 0.001 +0.3673702533209334 0.311141314741833 0.001 +3.095081706694943 -0.1037715500180562 0.001 +-0.2890336771421049 -2.182234490574724 0.001 +0.7403959269221574 0.7254616766734218 0.001 +3.179235149212964 0.3387024047934309 0.001 +1.603855639824226 -0.1925618772521805 0.001 +0.5164139594156437 0.5271813699368965 0.001 +1.078617087765571 2.019470575164002 0.001 +0.9079132016036425 0.3791450627357604 0.001 +3.942238354703125 0.1513467586940846 0.001 +0.5814852055691658 0.1960311021146663 0.001 +4.436119278292753 0.1965066302352522 0.001 +-2.086953920399566 2.236310982542306 0.001 +-2.97177936636579 3.301675654380886 0.001 +0.8964290315632359 0.6343894594137619 0.001 +0.1182934033693755 0.8628745486461531 0.001 +0.4072734773065879 -0.02721799454944669 0.001 +3.406896571234533 -0.2448390678469274 0.001 +0.493479731265721 0.4919715769364478 0.001 +0.2122309801005343 0.5486625987636702 0.001 +0.2329249249899455 0.6161063151350813 0.001 +2.91713105221846 1.20725643209398 0.001 +0.619184890835857 -0.7976485176008624 0.001 +0.7916825529915944 0.5457570561220318 0.001 +0.7619342596660773 0.6788531357676219 0.001 +0.6100901166812336 0.9918836346380471 0.001 +0.3304674301662673 0.2403266691962891 0.001 +3.586108941984929 0.04055193570183697 0.001 +0.3845330215764559 0.9265122831785744 0.001 +1.605343745859053 0.6005858019572984 0.001 +0.9357461754090362 0.9835523534506462 0.001 +1.778738691169073 0.2295891112421587 0.001 +5.707043873898095 -2.322398709678944 0.001 +0.6119068411783571 0.4647541029315673 0.001 +0.445694673978365 0.6222915425282568 0.001 +0.6047273247205123 0.3885208199788732 0.001 +0.562920502796406 0.8856175232041417 0.001 +0.5717345661600348 0.2439130901066075 0.001 +0.6469065699112746 0.8937949239704577 0.001 +2.356125684699313 0.7153178141211005 0.001 +18.26967726024188 5.936191139829474 0.001 +0.4901797429802636 0.8591254569974189 0.001 +0.7436375950177588 1.208956320945203 0.001 +0.7002465140150556 0.5711815584543696 0.001 +0.5858833890125665 0.8399899552258399 0.001 +-0.01330095297900872 0.2975965814157023 0.001 +-4.595494057120941 5.569136530070042 0.001 +-0.2215165355254179 0.3538361568924884 0.001 +7.457213701913715 4.533055471461389 0.001 +0.6114432897032983 0.6307568217401809 0.001 +0.6561830552949405 0.04097286777707449 0.001 +4.186293233307018 1.312910472299433 0.001 +0.6237538391962607 0.831789702121943 0.001 +0.9622050396151233 1.032583522483741 0.001 +0.6088969223304412 0.2797351845204296 0.001 +0.5451717027862493 0.4377192389697387 0.001 +-0.1045363648084554 0.9340396568606257 0.001 +1.191020068847308 -0.6339972416388847 0.001 +-0.1088024527300128 0.3155290223708724 0.001 +0.5058935341903369 0.9330312745805976 0.001 +-0.03968899990490184 0.7055484946513085 0.001 +0.412261643270052 0.4746451023585438 0.001 +1.001333696460203 0.564418383112146 0.001 +0.5623664074195636 0.5197321457434819 0.001 +0.4389390797673426 0.5429291304432327 0.001 +3.288802346367641 0.1227212910906179 0.001 +0.7435154446948109 0.9560523034631625 0.001 +3.818417949337376 -0.5317407688829444 0.001 +0.4043608258085645 0.3452953651738866 0.001 +0.2493623866697199 0.7929886981516383 0.001 +4.154535892618282 0.06629959744572773 0.001 +0.6008361676424835 0.746301794969555 0.001 +0.6546963592529274 0.5825746748349311 0.001 +3.093520592412481 0.2408365420983552 0.001 +3.202737025779733 0.7435431732507256 0.001 +1.271063148305069 -0.2196479888404583 0.001 +0.5094663814502463 0.08208570872585166 0.001 +0.5911717945454582 0.6019311154568102 0.001 +2.286651614399895 0.86348364206021 0.001 +6.532329823197732 -1.003092504240107 0.001 +2.628349455189968 -0.9927122909370028 0.001 +2.984315037714991 -1.130701716428963 0.001 +0.356616993138393 0.7685522911444991 0.001 +0.3716925598952007 0.593661459148487 0.001 +0.4473274454519504 0.9878011490720264 0.001 +3.623118520405615 1.129223617456931 0.001 +2.278810170157742 2.918066326944719 0.001 +1.097344616991903 0.2155340348523151 0.001 +0.6814759040160805 0.6461703902787866 0.001 +0.4671804283467598 0.2937746901001389 0.001 +0.6651166096866117 0.8597567338001059 0.001 +0.4788373141339974 -0.002306592284798803 0.001 +0.855699753539124 0.4121999205877696 0.001 +0.5782751385564017 0.4771825480267348 0.001 +0.6823510885721067 0.3754683595121198 0.001 +4.154660525336753 -0.2345495500631528 0.001 +0.5269364317429233 1.019804012975863 0.001 +0.4587317816528858 0.7097765057132795 0.001 +1.936557160269518 0.8163464362161712 0.001 +3.1133075844912 -0.2791603037577972 0.001 +0.6836181313063522 0.296462810733947 0.001 +-2.141056214724164 -1.468530101152089 0.001 +3.141774343799283 0.6126044746031988 0.001 +0.3873891023788766 0.4000068367737178 0.001 +0.9693598626803414 0.3339997112802719 0.001 +0.9111276772544937 0.4552502024966612 0.001 +0.4710909869264943 0.6536248809092542 0.001 +1.323348366321442 -0.03639189166045147 0.001 +0.1562496916644581 -0.3021031993558241 0.001 +0.827907553029279 0.4687106852960954 0.001 +1.00769135672669 0.2333904794663685 0.001 +0.2742691186734523 0.3155901321134848 0.001 +3.886384303676329 0.6978144496682367 0.001 +5.824618467696966 0.09801509281178977 0.001 +0.7590398941807741 0.394813621575876 0.001 +0.7799317441120256 0.1371319608127403 0.001 +2.605004278205587 0.6955659518996903 0.001 +6.519957719808422 0.79654354145415 0.001 +0.7029261894750874 0.1056451501948568 0.001 +0.6520348376823577 0.615043611449875 0.001 +1.72588531754401 0.8087109996957847 0.001 +1.494556147135366 0.01352315771318777 0.001 +0.8188865864748828 0.9885274472248893 0.001 +0.7620759123147651 0.3158706829678329 0.001 +-0.3577208941842511 1.181214869880611 0.001 +0.272523975123021 0.1251018447199438 0.001 +-0.08310507573617015 0.1930848929147403 0.001 +0.001152467676093018 -0.06865522351982851 0.001 +0.01724134191695813 -0.1102729118578529 0.001 +0.0715904403538692 -0.1196685673419667 0.001 +0.3596141586272884 0.4772754249289652 0.001 +0.05305311937503931 0.2324961233577783 0.001 +0.7149452363869567 0.9287169499607804 0.001 +0.2678044146547383 -0.07601225366798345 0.001 +2.116556181543042 1.79824714964254 0.001 +4.927981388374888 1.558116937883166 0.001 +5.473149077951028 -1.0717192548324 0.001 +0.3827021684707229 0.6706278433574978 0.001 +-0.01907556909505837 0.9527310852852293 0.001 +0.426777083094028 0.2631510888410954 0.001 +0.6423016729923517 0.5459656553081362 0.001 +2.632056381856315 0.9602656418876491 0.001 +0.2861518992062558 1.102822195269843 0.001 +2.120979429269985 -3.046175593428934 0.001 +3.083580421436705 3.714839256105568 0.001 +0.6583678494306052 0.3253292699740366 0.001 +0.2112130205130872 0.7033664232159483 0.001 +0.9663556432839489 0.4370126706777318 0.001 +0.1369487109919134 1.46453870772363 0.001 +0.8017168259941588 0.07700456338693405 0.001 +-0.8367697493325562 -3.108352509036747 0.001 +0.6406322598040952 0.1380580617972031 0.001 +0.2532708011085542 0.8576182304538867 0.001 +0.2762366898234471 0.3965963153449032 0.001 +0.697693379320117 0.8477575404123699 0.001 +15.59212638861789 1.975431304067094 0.001 +1.278524409813104 0.8606242399105715 0.001 +4.673034114649298 -5.054131283983663 0.001 +-0.06830504393599093 0.5807229334664569 0.001 +2.34903103532068 1.637788222406826 0.001 +0.3478493436520532 0.8106985602956966 0.001 +0.6136345700108443 0.7034689930228042 0.001 +12.9049337565403 2.099350007938687 0.001 +-1.555330225495244 4.431607063086831 0.001 +0.2782238677015986 0.7411697447278288 0.001 +-0.05318741031273556 0.3228067779140913 0.001 +0.1648870540241262 1.047344951653374 0.001 +1.730437721725341 0.4898738761477661 0.001 +0.1220375213700526 0.185577185178309 0.001 +0.7690011421175262 0.5232392803518704 0.001 +3.019572260654398 1.867492411477637 0.001 +1.539044420989764 0.8589058955411705 0.001 +-0.03294303778444866 0.6177451827178454 0.001 +0.9250919439058864 1.073143761012975 0.001 +0.912100101098875 1.13052677616466 0.001 +2.245429052204594 -1.010954390058926 0.001 +1.044756586997775 0.03691694847242628 0.001 +-0.008247588026420012 0.4151878362873772 0.001 +1.336896672962908 0.1477950655136267 0.001 +1.730464320175995 -0.1889116316594668 0.001 +1.480350700109986 0.3039243185278653 0.001 +10.16931638258717 -4.451643246090582 0.001 +0.9667470152261646 0.3693400471766933 0.001 +0.8505603832033302 0.1197318267652604 0.001 +-0.04965332207718895 0.06911866670210486 0.001 +2.017230314896796 0.3206465050485028 0.001 +1.419372977735886 0.9719150487230006 0.001 +3.942726253619311 1.329407322295156 0.001 +3.687766446133841 0.7644939522063116 0.001 +0.9619884246261804 1.068365946184463 0.001 +2.286495609986726 0.6122804642126185 0.001 +2.34655636274122 0.5022947198047646 0.001 +4.455904628703259 3.095548391343112 0.001 +3.634476600225027 1.461888031312468 0.001 +0.9049908023961726 0.1160724690472079 0.001 +2.041065687645184 -0.3882381634147458 0.001 +0.8825374242601399 0.1968746250828307 0.001 +1.464196704288294 0.1787705980463584 0.001 +1.055415135523014 0.3602792256347273 0.001 +1.06112790258839 1.028622779799711 0.001 +0.2805902164212682 0.4977495364880919 0.001 +2.148475309670681 0.9870478167556673 0.001 +0.668838001453254 0.4245171034824563 0.001 +14.57266433410239 -6.266484392918422 0.001 +0.06515505711592758 0.4292826512041749 0.001 +0.6731588784773789 0.6842843550386539 0.001 +6.779060078027076 -3.495126472568568 0.001 +3.958829875661274 0.5080463928901606 0.001 +0.9561713956030126 0.5885821454059659 0.001 +0.7089916501933861 0.5322613557546068 0.001 +0.8674240375847265 0.9848046936225945 0.001 +0.6698017578982713 0.7853474722837959 0.001 +10.21123261345024 8.317735918788379 0.001 +-0.235633425014404 0.663116373717672 0.001 +0.01364969303993683 1.023924581898869 0.001 +0.01172726163351467 1.068591619298826 0.001 +0.1779820482935793 0.008946052518915962 0.001 +5.977628669159311 1.768775369061408 0.001 +3.887717390944062 0.9092318561759132 0.001 +-0.8657372811836016 1.630978862200474 0.001 +2.887392269463332 0.1635925924203501 0.001 +0.2484463977734324 0.9398180858149512 0.001 +0.1569860895693981 0.9245949910007989 0.001 +0.9456032132080398 0.28412983889692 0.001 +1.228035874951855 0.2975769902712795 0.001 +0.8037006308736437 0.7436300595332577 0.001 +3.383452061136722 0.079563893237414 0.001 +1.056093792074626 -0.1032715229954035 0.001 +1.127393952564334 -0.1422872049359835 0.001 +0.6947187015835544 0.5024653478548541 0.001 +0.9928694519501617 1.101338754389172 0.001 +0.885227860163878 0.286658227827173 0.001 +0.8234806647741602 0.4026656542046909 0.001 +-0.08331590012991782 1.28251263224974 0.001 +-0.2730441066435888 1.320467977205973 0.001 +0.1498147353228326 0.3406108738312058 0.001 +0.4665945441645294 1.059531744034885 0.001 +4.520545972557373 4.949640788424868 0.001 +3.635586753016156 5.855454388658346 0.001 +0.01431863745556023 2.631124790007747 0.001 +0.8942951482743051 0.8169663796570107 0.001 +3.852075951314722 -3.19091121097627 0.001 +3.099733893338311 -3.658283891925805 0.001 +-1.291097496442739 2.345103223709073 0.001 +0.8661937644357173 0.7288494033137187 0.001 +2.712083732179924 1.124974457011607 0.001 +1.067359193061921 0.1753728863363881 0.001 +0.1947679400556671 0.7930345394333608 0.001 +2.160475856386416 0.4935591427603302 0.001 +2.437291752927037 0.7234966787739197 0.001 +3.951146680462486 1.670609207184752 0.001 +2.154862303474564 0.04433618738383958 0.001 +3.297668588864891 0.2803375636505154 0.001 +-0.3969796151927921 0.6186747262722961 0.001 +-0.5501038909971956 0.4898496345590248 0.001 +0.05961053364064677 -0.02183041575882852 0.001 +0.1439356247149477 0.5212070577891441 0.001 +0.8999700567376221 0.8481574663318435 0.001 +0.8844813469935036 0.9304661331708257 0.001 +0.8475552566796501 0.904898907486735 0.001 +2.682133463090947 1.25447294894414 0.001 +0.3355521551358787 0.4423286370604539 0.001 +1.538865017638769 0.4331800950133401 0.001 +-0.06179107367455115 -0.008917276436356909 0.001 +0.9003878173327542 0.5545227565772134 0.001 +1.143654138994823 1.122039034123457 0.001 +3.176395392749722 -2.168335086745063 0.001 +8.408969348481252 0.2293957761738318 0.001 +3.456079622290875 0.179228995133819 0.001 +0.7507707928859683 1.075992851182967 0.001 +0.7040463901896417 1.082693669340202 0.001 +0.6858987060230712 1.13864506717061 0.001 +0.7330448302010163 0.6339879661826551 0.001 +0.2658146548311308 1.023786830187037 0.001 +-0.231331919437646 1.069564677740164 0.001 +0.781029269847019 1.099889651588475 0.001 +0.3541646923833268 0.3996813085438806 0.001 +-3.266713022353968 0.4496521538313465 0.001 +9.66423111847287 -8.218960607740962 0.001 +0.1798063821042042 0.6729671851943889 0.001 +0.8451699518440539 0.5732243760557223 0.001 +0.71921427528644 -0.3801379317639285 0.001 +2.238266901487239 0.2476142680649086 0.001 +7.239616869356635 -8.063135525446087 0.001 +0.5017202972747284 -0.08136358956556707 0.001 +-5.601191191611653 -3.833998868802495 0.001 +1.498590906682764 -0.2177213778670891 0.001 +-0.03714470039224333 0.01850115369014412 0.001 +0.2936702614032248 0.1559956401614808 0.001 +15.88438371889848 -2.242161065250387 0.001 +0.9222663503652009 0.922069333943514 0.001 +1.008004108524291 0.3326273681660733 0.001 +1.082422570037913 0.3401196613038098 0.001 +1.103034717852983 -0.03303700440293646 0.001 +1.161720993299124 -0.06333312766627429 0.001 +18.29861055551884 3.255058981207484 0.001 +0.7156405399295154 0.03734608165277622 0.001 +2.604799975562064 1.393932874349325 0.001 +-0.08763811103482773 -0.09677748293856836 0.001 +-1.750578572483549 -0.3090420484370635 0.001 +4.845270691342968 -0.3574684540361061 0.001 +7.266913312909063 -4.747437072863518 0.001 +0.7628191973570911 0.481468857889918 0.001 +9.73051534140933 5.682768923463311 0.001 +1.045540379627103 1.083640148710514 0.001 +2.979573636429407 0.2994758608021709 0.001 +-8.300834028166094 -0.5482613332291245 0.001 +4.185700527202277 -0.1048746664478994 0.001 +1.017377761293705 0.7755394650259327 0.001 +2.543856315496217 0.1029076255980172 0.001 +-0.01622080481322628 1.087506612507764 0.001 +0.967296802880842 0.7639512113638616 0.001 +0.03339159969887516 0.3465938205527651 0.001 +-0.01648247257093823 0.3847515630087116 0.001 +3.042801507512205 0.4455128955257832 0.001 +0.9279699177496383 0.002189749300555373 0.001 +0.8985302419908214 0.05057798627768578 0.001 +0.7572900293044951 0.7560112826919309 0.001 +0.9439566728715805 0.8037112450613304 0.001 +-6.00863633774731 0.1061628271423925 0.001 +2.032573368568273 1.184109579798224 0.001 +0.3697466704474341 -0.6356703536983073 0.001 +0.5518320143499125 1.235549071259161 0.001 +1.38988711145893 0.7921520300494985 0.001 +1.032399718293678 0.6921525612456846 0.001 +15.03946627915049 6.349670605740387 0.001 +9.536980950640681 -2.740427566036986 0.001 +3.909979483316622 0.3464135771404566 0.001 +1.337882342778376 0.3331643094346736 0.001 +0.1912545554125717 1.129388524484787 0.001 +2.573700539899557 0.4931491367857356 0.001 +0.02183707509339827 0.9472687425797471 0.001 +0.8533978511744496 0.8671212966775651 0.001 +0.53965566324442 -0.02444191857381613 0.001 +3.799449115625912 0.667132552032227 0.001 +1.558697128371718 1.453047514180241 0.001 +3.394491516619625 1.19457099007171 0.001 +2.69977483677095 -0.7658824274255407 0.001 +0.2021067774655116 1.043519253831255 0.001 +0.7695911078350731 0.5911547026674525 0.001 +-0.1273871880896834 1.111715175291146 0.001 +0.7733353467065127 1.86297812841292 0.001 +0.8787298022844101 0.7970663440671389 0.001 +0.889231415033455 -1.059507893461128 0.001 +2.706396089045454 0.2100805393017364 0.001 +4.63715124818692 -2.052985236169459 0.001 +0.1962239302477234 0.4730227449008995 0.001 +0.9578505496613592 0.1849828553114424 0.001 +0.8795983338028934 -2.049233027098007 0.001 +1.477796483303008 -2.254258126581151 0.001 +3.688486949371848 1.017168639036194 0.001 +0.9295741868001177 0.8765888137247545 0.001 +0.9526241471122464 0.8686637474836658 0.001 +6.672374906819245 2.31982466934955 0.001 +0.8029001354906706 0.9132444303086038 0.001 +-0.104557104212494 0.5838754529706335 0.001 +3.516435638945586 0.3996813621888184 0.001 +0.9962734008478642 0.7069224240174258 0.001 +-2.857868474689667 6.333541234146255 0.001 +0.2576370132614128 1.077657185719439 0.001 +2.005049781376508 -0.05388927168505162 0.001 +1.008702044288296 0.8007200689583858 0.001 +0.9994952522549755 0.8962247662316263 0.001 +0.9920827469926857 0.753191558246035 0.001 +0.9679813275709478 0.02668918368863984 0.001 +0.9610649864282891 0.06800616600603941 0.001 +1.099574715809323 0.8930305040340537 0.001 +-0.01156681418150664 0.8701180158839974 0.001 +18.51314755386365 -6.275336822556814 0.001 +0.9705366194986554 0.8272895339591333 0.001 +4.45537201509852 1.309562168461101 0.001 +0.48763867029358 -5.946427199167061 0.001 +0.4922474000608586 -0.3230069969858104 0.001 +-0.2194794156353727 0.1544627931718091 0.001 +0.1123164832402237 0.02061732440780107 0.001 +3.666101376481083 -0.5308201252389252 0.001 +1.068147597748065 0.7295227003399763 0.001 +4.969350800879315 1.209793429223461 0.001 +1.072351791268953 0.02276873454562089 0.001 +0.04418800586075477 0.9615034298449097 0.001 +0.832093633764629 0.7892570367146304 0.001 +0.9957142990619933 0.9403842793786789 0.001 +0.09399958243792821 1.125526300520572 0.001 +0.1297669674836666 -8.933788866000162 0.001 +1.033774692902809 0.4820216604920846 0.001 +2.599352663484763 2.149138856527391 0.001 +2.964356863236368 -0.5879132364980008 0.001 +0.5508471969963628 1.084851640577373 0.001 +0.5041584619246151 1.091163123452302 0.001 +-0.02739508049842828 1.446488719960157 0.001 +0.2286111663365511 0.1619801085820669 0.001 +1.223743520966383 0.4728341481025958 0.001 +0.9291923304320528 0.6851958113971837 0.001 +-3.168132177035708 -8.143526634138773 0.001 +0.6057665006607462 0.0784293701831429 0.001 +0.9799298447183556 0.640825255354565 0.001 +2.881389371127895 1.047560761381866 0.001 +1.088979736379151 0.7958327175034274 0.001 +1.085180933261575 0.8287644496101413 0.001 +1.135299833674484 0.7705286496242634 0.001 +1.464352720191569 -0.4953237181130306 0.001 +1.313523548991605 -0.4909597217417231 0.001 +2.014388317633717 0.597177544589214 0.001 +0.9227954874489405 0.5871777723974813 0.001 +0.8487296054532667 0.6057787680971524 0.001 +0.1283569314056224 0.7813004526088744 0.001 +-6.84571954165116 -2.372463384879885 0.001 +16.53698173600453 -8.468423244947552 0.001 +0.1324737192732494 0.7488990985495274 0.001 +1.025363365193937 0.8776269945517406 0.001 +0.7408099296039705 0.7981448609935711 0.001 +0.186867117127739 -0.0721393702483433 0.001 +0.3064489892754505 0.07487713385739969 0.001 +3.531260522210959 1.267330126735388 0.001 +0.8388942125964566 -0.183357341467515 0.001 +4.422054604134435 2.020097761347622 0.001 +2.219793933289156 1.361822764317778 0.001 +1.931679627196396 0.5724711516841655 0.001 +-2.043327194682207 -2.795513595197216 0.001 +1.088557986992818 0.2929321730629332 0.001 +0.1552512676990091 8.760100126014191 0.001 +2.789672428538652 1.021042767116238 0.001 +0.2190920181147856 1.081601347252107 0.001 +0.2196887174004901 1.33457584226857 0.001 +4.268982428987345 0.9659412446049355 0.001 +0.9156114583034085 0.1656256694940996 0.001 +15.48944650428619 -3.175582788985542 0.001 +0.3301785110630983 -0.05705607983454802 0.001 +0.4107757033947477 0.01776129962971804 0.001 +0.2467379156270151 0.04695183390554479 0.001 +4.069755240903282 -0.5776858109277163 0.001 +0.3479985956187363 0.1185709592544801 0.001 +2.645204784435004 -0.2243069942813098 0.001 +-0.1336447359505068 -0.05737054221270466 0.001 +-0.2411500732559661 -0.07202010065390546 0.001 +1.99087416500002 0.1989459120728127 0.001 +1.047476658267468 0.6566592383846379 0.001 +1.545824579075672 0.6689256081095127 0.001 +2.949829984322612 1.46869673231898 0.001 +0.1484169231651584 0.0447190364610757 0.001 +0.9825906139851072 -0.03950428097905201 0.001 +0.5654375935885442 4.640696117954913 0.001 +3.880733513820213 -0.4397984246160994 0.001 +4.831083277020658 -1.23704350260242 0.001 +16.54031958635693 0.9914376461960928 0.001 +3.135663988567416 1.267824200411026 0.001 +0.8432079734603961 0.1480785241527083 0.001 +4.242629474845432 -0.3978219561841396 0.001 +0.0619244394819445 0.8227641083284548 0.001 +3.364690295941071 -0.4882472883169712 0.001 +0.2974499186433007 0.2055870868012722 0.001 +0.0930675900450126 0.5333642089799071 0.001 +1.838725198878268 0.9983645993509873 0.001 +1.468565981753992 1.089608888123182 0.001 +-1.396371834442967 -5.106359657284322 0.001 +3.615938092496002 0.5914930016579616 0.001 +3.971371384277913 0.2707297919337315 0.001 +0.09076299985567976 0.3396988450049834 0.001 +5.048737217358035 0.8599581775980515 0.001 +2.839355001661989 0.6946605709176583 0.001 +3.043600517779435 0.9893232646365384 0.001 +4.032251240023252 0.9120391547227957 0.001 +0.5698560900601592 1.114145684501111 0.001 +0.3106008761742069 1.512323365432335 0.001 +4.133963619218822 0.2681588865792331 0.001 +2.596628651533822 -6.615299019979365 0.001 +-0.1562035239258319 -0.3866790373019283 0.001 +2.895714848832472 0.8817289532759083 0.001 +0.3751402903071485 1.283376055054141 0.001 +0.5833787827150518 -0.1845697183536805 0.001 +2.163762215597076 -1.618776352920921 0.001 +1.210272916151146 0.7405030283112828 0.001 +1.953135248906948 -0.2399272718251621 0.001 +3.627371087911663 0.9385886935662111 0.001 +1.793148030785638 2.289394919010895 0.001 +0.3189749168743947 0.8955444616285235 0.001 +-6.329791261915089 -8.356096890127647 0.001 +1.046680406284403 0.4238063669511364 0.001 +14.03205324025292 -0.5986482306877673 0.001 +2.749957238250069 0.8173065718359387 0.001 +0.08305831076108026 1.050485596471145 0.001 +0.6487982818325819 1.160053550418316 0.001 +0.2631023157243332 0.2820162814220684 0.001 +1.863646676086631 1.46363547868388 0.001 +2.340417725133865 0.326655273500338 0.001 +0.9019682980603545 0.2364822883587951 0.001 +2.646224644047636 -0.401628853839437 0.001 +3.857544909836678 1.982352891111596 0.001 +1.566122077841346 1.060949633343642 0.001 +1.600228785870359 0.9471356378427916 0.001 +0.2275038283766376 0.2335311997909467 0.001 +0.8152020730961654 0.6109839705584822 0.001 +0.355335915076981 0.2207566271208816 0.001 +2.597670732281445 4.609336325531268 0.001 +0.1599519861220643 0.3696452808616129 0.001 +4.888033964879316 0.4535054678284071 0.001 +4.900419485248775 -6.148505694148499 0.001 +0.03873402276494201 1.003243588945291 0.001 +1.749677319220625 0.6934525930894178 0.001 +1.694762111014809 -0.3799588455816288 0.001 +0.9440350893541282 0.5154584765986783 0.001 +0.03300387386829504 0.0882558604451049 0.001 +1.073033549301817 0.5661097271547888 0.001 +1.122895975253661 1.031962450031056 0.001 +3.212561316723093 0.9234228556473673 0.001 +1.056984829312878 0.1012171758243352 0.001 +-0.1401122109874581 0.8257489189790651 0.001 +3.811031231677526 -0.9953452382637276 0.001 +3.708952569244723 0.1724428149650128 0.001 +0.4947817989919641 1.134668656386434 0.001 +2.432067851108089 -0.1043028699006817 0.001 +3.290295544016314 -0.07065414314528123 0.001 +0.280938848160873 -0.01430425834028503 0.001 +0.2264092421217185 1.015950016845558 0.001 +3.375741822720868 -0.8400050640906536 0.001 +0.1353009095861752 0.4506119050255529 0.001 +4.2212996741001 -8.324555308948067 0.001 +3.086309068123584 0.8919415930897731 0.001 +-4.941524686143516 2.795740273759077 0.001 +0.3210150967783506 0.01130489528667905 0.001 +0.07344283681976065 -0.06929776898959908 0.001 +0.2157512583735579 0.9062184716405949 0.001 +0.1509415573247308 1.073444446060782 0.001 +2.190474336977743 0.408850118664029 0.001 +4.033136644137432 -1.310653049813715 0.001 +1.250070263734695 1.081967586245362 0.001 +3.268009134548979 -0.2235540577080317 0.001 +2.578548693229704 -1.336152352918889 0.001 +-1.627417487729631 0.8519318233179979 0.001 +1.168646080760123 0.120869806309421 0.001 +0.8789788663213853 0.4960566758004679 0.001 +12.12202259948117 -6.845196818695514 0.001 +0.08849917356887826 0.4684141893489343 0.001 +9.969922763097621 3.245442432984487 0.001 +-6.238452380975549 4.965489841298582 0.001 +1.143813829914478 0.6017974124381729 0.001 +1.992926175547171 0.9856420253271643 0.001 +1.344133478681238 -0.8682344974598966 0.001 +13.82288113703535 -5.457690958137229 0.001 +4.093659292573527 0.822039765727784 0.001 +1.071485310744115 0.2646152571045118 0.001 +-0.06151416398490724 0.2457262564870936 0.001 +3.615373749037249 0.2830862215455995 0.001 +0.926613341139597 1.302046465936464 0.001 +0.176485267102463 0.03845140717141533 0.001 +0.2813351970871163 0.7671610984927969 0.001 +-0.0492702265324898 -0.1801977892318443 0.001 +0.7821464615043515 0.8272167022367868 0.001 +3.390493829736503 0.7262353270608548 0.001 +3.795520577327077 0.2887067013909681 0.001 +0.1289791356077253 0.8139424067865717 0.001 +12.87303237553794 0.7639087839588956 0.001 +2.618977865562189 0.2236783182782389 0.001 +0.2380702575504079 -0.06129731074359912 0.001 +1.728130391898113 0.1367579481024129 0.001 +1.01974889125945 -0.03177026231575229 0.001 +3.772213810975809 0.8662972044095065 0.001 +0.2947100195940962 1.152266898287213 0.001 +2.250394947805162 0.7687446758177736 0.001 +1.000238753336568 -0.114882925766265 0.001 +0.0169911838263856 -0.03405875806966454 0.001 +-0.8545258042076687 -0.7122612591050955 0.001 +0.2006404630803381 0.4354297654814122 0.001 +12.98095284322565 9.087216711348669 0.001 +1.320013895720325 0.463404232729869 0.001 +0.9176019837063401 0.2963937687756935 0.001 +1.764520832008831 1.011467038230485 0.001 +2.138797442942669 0.3249521468489829 0.001 +3.269758402573616 2.070506749322449 0.001 +1.933180547645977 1.210272419563201 0.001 +1.043344648682136 0.9051839068413002 0.001 +0.6247987166053846 0.1888130292496926 0.001 +0.224770500682347 0.5220521187616016 0.001 +0.6596996465088992 0.09022858099800006 0.001 +1.810836007724953 -0.07076797835680795 0.001 +1.82245099426875 0.8907396895644879 0.001 +0.04544395975664286 0.1845309521825256 0.001 +2.737958614091403 8.175200266189826 0.001 +3.16522340253673 0.4103847787881878 0.001 +-8.526540318005264 -4.262353059386077 0.001 +4.976372028691885 3.276937026144728 0.001 +0.4495390831932441 -0.08267525156158857 0.001 +3.415657825569568 1.100562092082842 0.001 +12.03555430746091 4.803327316399032 0.001 +3.424523419722397 0.8259435286666179 0.001 +3.856463491221135 1.049007134499309 0.001 +2.950334582244849 1.003216305628903 0.001 +1.682868492422797 0.2991444052036364 0.001 +2.570343557107975 0.3197840143614615 0.001 +3.308289636915112 -1.425870276453644 0.001 +4.442904295395113 -1.63170639251484 0.001 +0.6765744385361018 -0.1737559242798148 0.001 +2.69316377691516 0.6058832314873603 0.001 +0.3904195493590595 0.04881538601545085 0.001 +-0.05215436073468871 0.8129234646708823 0.001 +1.32925770961725 -0.1349742184363648 0.001 +4.110048487838413 0.009592544029036981 0.001 +-0.0388433494815289 0.1869903220722174 0.001 +1.20707854264729 0.3551646955385214 0.001 +1.924092929121419 -0.02410524764467045 0.001 +4.512736542360448 -0.007002086195714474 0.001 +4.66553106570335 0.0007968935916348469 0.001 +5.365268886390241 -0.7335284384690738 0.001 +-6.379667587043922 3.017831608070959 0.001 +7.513711754769714 2.889905989822728 0.001 +1.0386041866267 1.216224940708003 0.001 +1.072087213281205 0.2014505927896456 0.001 +12.76258115637707 5.812522176177646 0.001 +-0.01435348086336867 0.244349705833109 0.001 +1.617547070654517 6.125143508290731 0.001 +1.173225891331794 7.173331038974051 0.001 +3.527665713779987 -0.05708333276469349 0.001 +5.620371791716641 2.777336479744881 0.001 +0.1862403139978319 0.9686289460989892 0.001 +5.523090917208815 -4.1766741388129 0.001 +1.048485514798969 1.05765784603899 0.001 +1.136217924920205 -0.1064247711622665 0.001 +5.271137883611464 4.892953838080411 0.001 +0.2954120788581108 0.2373240708012624 0.001 +3.788929628316717 -0.2418815585243445 0.001 +3.361719724635384 0.4538011812707315 0.001 +3.260520067173825 0.4878086198636023 0.001 +3.455856177803036 0.559435702520983 0.001 +1.605280382360407 -1.429135704300452 0.001 +0.842000900413469 -0.07557033934062507 0.001 +1.602598849210799 0.01365453775859432 0.001 +1.690898742155926 -1.963415198226957 0.001 +-9.079173596684074 4.949027381331151 0.001 +0.1431388611793234 0.2992360451958994 0.001 +1.598509302101065 0.7901412942380133 0.001 +1.436736808507252 0.8978082193220343 0.001 +2.772384029928864 3.348079182517669 0.001 +2.077294661822002 1.464863311523112 0.001 +-0.04701046877678752 -0.05511503176760194 0.001 +3.011061094647436 1.172873750338429 0.001 +1.222658907532557 -3.287911216192172 0.001 +1.695417144313179 0.923389830374561 0.001 +-0.1095921474767321 0.2823329905274962 0.001 +1.715085628311754 1.102226153002197 0.001 +0.7636296465003881 -0.07649311599870534 0.001 +3.975633713167402 1.030024897246611 0.001 +1.706992194885321 3.057618676936276 0.001 +-0.09616503654990793 0.6626757349089527 0.001 +4.564153477796779 0.6748571298946232 0.001 +4.345204716640544 -3.153767061411539 0.001 +0.0564556880438731 0.3608630475395637 0.001 +2.273201538829197 -0.308537263914608 0.001 +2.173806370045667 -0.2625642971376081 0.001 +0.01167106968381271 0.1439554068659226 0.001 +0.9403034562192659 0.2267058069744267 0.001 +0.2099132190387972 0.3012113418564452 0.001 +2.773475424308497 -0.059234538761926 0.001 +4.572395551521375 0.4189300698281964 0.001 +3.976826447272209 0.4248377967460615 0.001 +4.053447309660055 0.4264424258323565 0.001 +3.537858263576088 0.9751061146756352 0.001 +0.3341970704861619 0.2858541982009603 0.001 +0.399147407878955 0.2704151963335782 0.001 +-6.937087903608831 -5.259730573332032 0.001 +3.527690438285621 -2.555651182082451 0.001 +0.222961233065847 0.7692113319499981 0.001 +4.08229657479184 0.6562098588512902 0.001 +3.365708099329813 -0.03509297942145686 0.001 +1.076083421363175 0.5986125514218522 0.001 +0.7966452729335289 0.2080335005476572 0.001 +2.870401863461716 -0.2015040916559531 0.001 +18.55619916480617 1.753050005139899 0.001 +7.227423349722627 -1.277581834718821 0.001 +-0.1409993484272377 0.5030605825983656 0.001 +2.691285211956015 1.900837552231647 0.001 +2.824913573882655 0.2515542997117159 0.001 +0.24329383425416 0.1981140437165191 0.001 +3.310535398301742 0.8634044287191951 0.001 +3.704042101580082 -0.02682616317125796 0.001 +0.02083779937872367 0.7533133195945592 0.001 +7.157396090317134 5.461888430232446 0.001 +-6.90902828832728 8.63675649185998 0.001 +2.811535217298311 0.6376583333473858 0.001 +2.441197248619818 0.5885772868668873 0.001 +1.171404265775272 0.8407233814646713 0.001 +10.95795190029371 7.263070638883065 0.001 +4.107587480270688 1.651173375764796 0.001 +0.3047134181709817 -0.04986948034415671 0.001 +2.352052620279658 -0.5682774551840342 0.001 +1.600384005353974 1.110930976359036 0.001 +3.00408142226222 0.6072981182276337 0.001 +1.123975500475538 0.3805819211737846 0.001 +3.135022687800062 -0.8316398558806688 0.001 +0.1098205736757257 0.2741257331422018 0.001 +0.07377343749499682 0.06864655686084807 0.001 +5.538711759087412 0.6795894049986128 0.001 +3.279458551893016 0.6928899668071908 0.001 +2.607385671727636 -2.412501287031538 0.001 +1.14083699449442 0.5523785609558923 0.001 +7.506155948358166 0.3087220619367232 0.001 +-8.532270180990942 -7.115818785533156 0.001 +0.7057462668182128 -0.5071718377126113 0.001 +0.7979521172622774 0.02599527684281112 0.001 +0.2274894990464713 -0.2566350338094208 0.001 +4.698814197673271 -0.7778206823966978 0.001 +4.657175826366347 -1.086738357311388 0.001 +0.8954250326991376 0.7512272413877497 0.001 +8.647654823070134 8.848187442036458 0.001 +1.843853245928442 0.2047041013825436 0.001 +10.2756432230136 1.066854966832745 0.001 +0.6560052012431141 0.2287593692559383 0.001 +15.69309565476478 3.247003172986346 0.001 +0.8848685983465832 -0.07215427551149109 0.001 +0.8994080604401686 -0.1199049557862984 0.001 +0.9309725970992576 -0.139093134121041 0.001 +1.433055240539219 1.167450583500043 0.001 +2.611753170078909 0.3777283333515154 0.001 +1.98820392787496 0.3989790479924019 0.001 +2.45256669911959 -0.2354189981848506 0.001 +2.849536954470446 0.3615448898562587 0.001 +0.8088724410751471 -0.09234787872149253 0.001 +1.01876983929663 -0.3758549974095974 0.001 +4.309341422618008 0.5038026942319085 0.001 +0.8345294927637049 0.4910280537720081 0.001 +0.6444555158497693 0.06264349800843752 0.001 +2.129406509584879 0.7881110745084852 0.001 +0.07524271776160241 -0.4671473341263537 0.001 +2.720010302585718 0.102459125522707 0.001 +0.8465779256895763 0.1789953354549754 0.001 +0.08239393177637819 0.3142553804055803 0.001 +3.716447901315542 1.177096997759426 0.001 +8.808651229484754 1.470268429791586 0.001 +0.07778349759089967 0.8923991067502524 0.001 +3.418873463027559 0.2552777349503222 0.001 +0.1034912085165073 -0.1233240530462745 0.001 +5.506801414958638 -0.02688877765807064 0.001 +2.0579217907482 0.6715688911719935 0.001 +0.1170202345603345 0.9477716818644681 0.001 +3.972588880805548 -0.001284914767295959 0.001 +2.463888956521933 0.4521000943525904 0.001 +11.91232692106796 -3.960815520984757 0.001 +0.1507958062361596 0.9953131205768713 0.001 +0.07423139461633743 0.728716305832232 0.001 +-4.600291614791531 1.095832678647493 0.001 +0.5441863787915655 0.04522738954281338 0.001 +2.698698420406886 0.3606589206378588 0.001 +2.036083661119695 0.5061723473781032 0.001 +-0.1197266916257326 -0.1486160214825683 0.001 +1.983555799473675 0.8929138254878782 0.001 +1.080737130172945 1.117246768334351 0.001 +3.576368632012724 -0.2577819000198922 0.001 +0.583882995916873 0.002418173639772113 0.001 +0.3910666618892163 -0.1247423202964995 0.001 +3.322939330920671 1.616913202744754 0.001 +3.829391654089304 0.3572568710536465 0.001 +0.8024631434530087 0.4638822837083322 0.001 +-4.021233217650055 -4.881137888062975 0.001 +2.549875912989206 0.8383696540325295 0.001 +-0.0573384311107983 1.044118140120752 0.001 +1.192996158914254 2.438730280070367 0.001 +-0.07422995858574609 0.1257176860792869 0.001 +2.561297574159695 -0.06536842140395616 0.001 +2.205645496835844 0.6286217015963467 0.001 +1.836606519551759 -0.5170677989365616 0.001 +7.976654826050311 -6.576206954044835 0.001 +-0.1077431810253512 0.9900082418663598 0.001 +2.216263125248199 0.04506763538858317 0.001 +2.274621845558767 0.1390639907689313 0.001 +8.078119756327197 7.001084448934379 0.001 +6.390471076109172 4.229528723511261 0.001 +4.053738506280697 -0.2120861637563042 0.001 +2.876430513125451 -0.06193077136089523 0.001 +-0.9163264642450334 3.770419776371124 0.001 +2.294169916538022 -0.1085567534248991 0.001 +1.756989170712777 1.534805205664463 0.001 +0.4760215258185586 -0.06957936099140646 0.001 +0.08838805533245324 0.933747769392432 0.001 +0.4116756150201494 2.437682630177095 0.001 +0.114256079774139 0.9917911681456787 0.001 +4.212482276196911 0.8229859121579015 0.001 +0.7818313013233175 0.10188502567661 0.001 +0.8520406499319974 1.137363420811144 0.001 +1.754950616364096 -0.01149718298360021 0.001 +8.335655525915213 -0.7137389659953379 0.001 +9.42338019643503 -0.9281051266002136 0.001 +4.778308451182659 2.321377397333774 0.001 +0.5196892371433504 0.1327458988302782 0.001 +0.05151024790629837 0.1374297256750632 0.001 +4.003577698892448 1.114601600251464 0.001 +1.858830784704252 0.3186958050952117 0.001 +4.478262528547448 0.5419407051844729 0.001 +2.471868009578501 0.8348065984556132 0.001 +1.420568272771647 -0.02869179038791184 0.001 +0.1435983005072514 0.6833193172256277 0.001 +-2.294407631801676 0.6281662523021617 0.001 +2.26668014993825 0.4001166313933679 0.001 +1.888692894539394 0.09698391914478618 0.001 +18.77485885888504 -0.4574202248208545 0.001 +14.32896052654207 4.543890881117773 0.001 +3.706775286166087 -0.142413078726484 0.001 +2.004733927256451 -1.099212054336636 0.001 +1.663434287210853 -0.03048956332592886 0.001 +4.322228377494606 0.1073099798174515 0.001 +2.885700584316905 5.309288061770789 0.001 +2.951950196541309 0.4850967357912629 0.001 +4.374107336567844 -0.4473520279789311 0.001 +3.163174843994554 0.6735488230318837 0.001 +18.39935821116038 8.819918796828613 0.001 +1.506834676695919 -0.1269843581262955 0.001 +3.955884919223427 1.517434446421946 0.001 +1.430314928713199 0.4979517980667115 0.001 +-0.1403954169285577 0.6251095307416438 0.001 +-0.1330678077039541 -7.374591037017708 0.001 +-0.06954515310034921 0.8998462364732579 0.001 +2.385471242756622 2.029808890197279 0.001 +1.789693645658925 0.05713362318199238 0.001 +-2.134806866512697 -6.743702149963386 0.001 +2.393475022392963 0.2319711457322413 0.001 +3.515656635112242 1.046785681743151 0.001 +0.02693902058912954 -1.037254256236084 0.001 +0.4903486783261886 -0.1208647464030579 0.001 +0.450356923491031 -0.1679851903730172 0.001 +0.4329341492323227 -0.2254296525882081 0.001 +0.8181357391790303 -0.1309588285530715 0.001 +-0.05325765279696354 0.1445783548757144 0.001 +0.1401394726766035 0.8442747276552991 0.001 +-8.508778486043147 6.73229960732881 0.001 +-0.1277858074047348 0.7828407514326617 0.001 +-8.477808572602193 8.500491431818837 0.001 +-0.06730661815326101 1.005755199027713 0.001 +4.958950346068173 7.034657186629697 0.001 +0.1156568158492961 0.3881272217105695 0.001 +0.211553338801212 0.3565264689383658 0.001 +0.8063634542577656 0.2895465004906883 0.001 +0.6470248386920597 0.009951230950740951 0.001 +1.45721243320981 -8.753375979762577 0.001 +3.758250608962962 0.4347887352206275 0.001 +3.579418109539794 2.321921860915418 0.001 +0.9737100951333315 1.139408027109056 0.001 +8.963650642633961 2.390381711063897 0.001 +-5.513339173739405 -1.043843062043333 0.001 +4.31885477996471 4.32957031737121 0.001 +15.62302104323294 0.7753092550977299 0.001 +9.151885630570197 -6.625934907162693 0.001 +1.839660072534854 0.5799542683731472 0.001 +-5.174965780229613 -6.706059635250174 0.001 +0.9147469543321721 0.6632458086238798 0.001 +14.81281839346224 9.105045538677755 0.001 +0.7808947827900204 0.8659207485396537 0.001 +0.07308330205395114 0.5198790445339855 0.001 +1.095490013139303 0.4106766722044185 0.001 +1.115502281044137 0.4532510242366365 0.001 +3.092292459858895 0.5038846543823753 0.001 +-0.2464389130827981 0.5535097458982829 0.001 +3.72013836050863 -6.372659900924077 0.001 +0.1252880442264057 -0.03116088172393906 0.001 +-0.258632660012671 -0.1390646098156773 0.001 +1.093493104271692 3.105036942563427 0.001 +9.369213839334375 4.615445170313 0.001 +1.612297664329284 -0.7829706864026086 0.001 +2.475803803542663 0.9617312778341021 0.001 +0.0049345009859168 0.07740193513267092 0.001 +0.08387387498643811 0.2394590926388323 0.001 +0.0858231305957933 0.7778904601445036 0.001 +-0.1526638589703385 0.437831552601693 0.001 +-0.1528685429690753 0.4700596038791449 0.001 +3.646487690409794 -0.7135159778948811 0.001 +2.648339192718336 1.077820148161387 0.001 +2.867772352841472 1.268260627867545 0.001 +0.4862588128828645 0.07141791971203591 0.001 +3.760076622934633 3.113157069412225 0.001 +6.305639293551526 -2.651731164957837 0.001 +1.625832534156999 0.1384651645680529 0.001 +0.9037775081491231 -0.3316391567286103 0.001 +0.02579641824351393 0.119885918951136 0.001 +0.1750737831979176 0.9043037785473585 0.001 +0.2198122142111708 0.458149971170646 0.001 +1.069710584528195 -0.9511826640943808 0.001 +1.07869581977594 0.1305731003489375 0.001 +0.009228217846738865 0.03776135531946626 0.001 +3.68501328612592 1.557776453031974 0.001 +0.5842556042824472 0.02939720175019245 0.001 +-0.9343163581291798 -1.410686907110179 0.001 +3.204276011616312 -0.448747341714425 0.001 +1.259596772734346 0.1884359067250415 0.001 +1.076214751828096 0.9642737648546089 0.001 +0.1040638850112229 3.142742325917115 0.001 +0.003944738718325887 0.1716712976430363 0.001 +0.1726528270784032 -0.01929260579649044 0.001 +0.6078838115205959 -0.06886301964306868 0.001 +1.829049312384779 -0.1652431900797177 0.001 +-4.809011412838701 6.886934360033298 0.001 +0.7074098848909199 -0.01016718380412453 0.001 +0.7588331659460976 1.154910227018142 0.001 +-4.134171713767011 3.773279190754464 0.001 +3.766840359481972 0.08728929531007466 0.001 +-0.02288307812657009 1.145373301266487 0.001 +3.613153466241 -0.3215063934202074 0.001 +5.988260028967236 -0.9836818077646048 0.001 +2.200430112421274 2.380667863884326 0.001 +-7.159071127966816 1.980983700000972 0.001 +5.132902899665972 1.368295995755352 0.001 +17.27287840484848 -0.5719373039505038 0.001 +4.572988904467905 1.514437297001805 0.001 +3.370302466619445 0.986787920391662 0.001 +-0.07164673464800103 0.3907891740596569 0.001 +1.382320119080159 2.371674475152178 0.001 +4.780872428785203 8.986570757493622 0.001 +0.3291564609677861 0.08882658473841927 0.001 +-3.093312272683506 -3.06195414669849 0.001 +0.132506570337072 0.07486945672312108 0.001 +-0.1467540739977832 0.5535046328263986 0.001 +1.105822828712903 4.110413918614207 0.001 +0.2432928567588123 0.9925219031747201 0.001 +4.14055791822791 0.5035045583312373 0.001 +-0.1159421860941776 0.7038603357076085 0.001 +2.167050859448653 -0.08722190554688654 0.001 +-0.6605579635898478 5.71772990790663 0.001 +1.451574113995184 1.208062097639363 0.001 +5.316865937666648 -1.241635080599139 0.001 +5.365642457714056 -1.485098735902821 0.001 +1.009607402354129 0.1361195061166632 0.001 +3.066784769955076 1.069648165650152 0.001 +1.102085674203523 0.8675186229456808 0.001 +1.132096365765127 0.8593367533438228 0.001 +-0.4012631851968769 2.836735189836059 0.001 +1.006666621770162 0.0785417657775675 0.001 +18.3478758444762 -2.303427308071874 0.001 +0.11794193520535 1.050809357620107 0.001 +0.8472681251424561 0.3294061029380581 0.001 +0.7361306078848358 0.300500339021985 0.001 +-0.08672916834752614 1.060317592169496 0.001 +1.74733770209569 0.8533471395648931 0.001 +0.3601264606422262 -0.01777089718421692 0.001 +3.047206142900687 0.8149117475583166 0.001 +0.2853459108066799 0.8540771934379947 0.001 +0.1582793444386992 0.09234452726080705 0.001 +4.638865572755668 1.177344811097419 0.001 +0.07442773303268399 0.1675034126500341 0.001 +1.010764546452972 0.9871220949052386 0.001 +2.736008525732494 -0.1655027896484928 0.001 +-8.458404123124547 1.156324578629342 0.001 +0.2506703028538199 0.09910763929519496 0.001 +1.902491584099176 0.7495833127893857 0.001 +3.30463447434209 1.364078860937723 0.001 +0.358769457729582 1.212088977366963 0.001 +1.410223214421436 1.662554493837044 0.001 +1.521913052304905 1.753423908417415 0.001 +-1.796872615317226 6.993836679127763 0.001 +0.1521318783496501 0.1791054778336886 0.001 +0.3112729752887901 0.9420084579555527 0.001 +2.745755504248336 0.4631077927578691 0.001 +0.8448960380958077 -0.04243620121505232 0.001 +0.9641243362894388 0.115024886364604 0.001 +0.6256508811834107 0.1137779248324037 0.001 +0.2445666376526894 1.160892085355809 0.001 +3.724254020293206 0.6817434791508687 0.001 +1.297607527693624 0.05962946948321882 0.001 +3.639270754306635 2.692382978551386 0.001 +1.611174085702104 0.2805250963213708 0.001 +0.2926289845494956 0.3737191792403081 0.001 +0.5665281112988668 -0.07101996211909917 0.001 +-0.1420433786609074 0.3241743856342613 0.001 +2.799758742584411 1.524938892289032 0.001 +0.6414570060426642 1.222720348631222 0.001 +2.959810512869824 0.693779859761432 0.001 +11.21447453307324 -4.809292845952656 0.001 +2.118437233760821 1.130143961588407 0.001 +1.583937092639925 1.250914150220217 0.001 +3.848299704795708 -0.1582873551558372 0.001 +3.132204419480523 0.1800135494065324 0.001 +0.3153282401451036 0.8051338043871766 0.001 +1.002451713822786 1.033053321616521 0.001 +0.9181115003023105 0.06917193691738333 0.001 +5.423221774194125 -3.347049776058564 0.001 +3.460219729501123 0.365957013847052 0.001 +-0.06962722169674572 0.0807038040849057 0.001 +1.559935205125713 0.5233195931393236 0.001 +0.02979967182591976 0.4205273200970327 0.001 +3.161634139521591 0.8555324950818238 0.001 +1.656098489114811 0.5625972128898284 0.001 +-0.1178925016858269 0.8496365687503581 0.001 +1.404986051635311 -0.1963555909349254 0.001 +17.17112126692517 7.652551950080065 0.001 +0.07181736032943101 -2.733396923487588 0.001 +0.6984660903859624 -2.624676124327714 0.001 +0.05608877090220799 0.02678827485872166 0.001 +2.573200625690513 7.266906372626115 0.001 +2.377709550096502 1.029678251369472 0.001 +-0.1424227807650882 0.9129743462169535 0.001 +0.9883935139778741 0.9175748179679974 0.001 +2.851330774816196 0.118263655349439 0.001 +-0.0683283292153461 -0.1282524315235968 0.001 +7.773029896012814 -2.483308276940873 0.001 +0.4787951123543576 1.274826304827564 0.001 +0.7124037662157003 -0.06410692533907583 0.001 +1.030767583511254 0.2131293910417856 0.001 +1.161465048272322 1.184490430998765 0.001 +0.1454535702043719 1.103425168303718 0.001 +2.13096315405369 0.163435001547092 0.001 +0.2117905877062789 0.009951698059438302 0.001 +3.972164990687159 1.175773285883986 0.001 +5.752991176320509 6.132489626785756 0.001 +9.020273374648164 -3.776666175337721 0.001 +5.029787337126852 1.800394563267616 0.001 +4.5088740491463 1.016417821535782 0.001 +1.194303068279116 0.9838853653063754 0.001 +0.5714057159516217 0.0930350714754459 0.001 +4.31896572930741 2.770757911597003 0.001 +8.229734500927401 -9.113062659128451 0.001 +0.08763941270003439 0.03664457733091579 0.001 +16.32674224214815 5.24441899187581 0.001 +4.050200069458363 1.328084720965059 0.001 +18.06733690788482 -9.082560100558654 0.001 +1.01408950700772 0.5077521413543864 0.001 +9.070466516843801 1.068224995101652 0.001 +-6.69299467061216 7.446253842419472 0.001 +-0.1954328404811053 0.7207888731024032 0.001 +-0.03170958614652774 0.09085609215104713 0.001 +2.746927010816142 0.9599460201293565 0.001 +0.3791641247337094 -0.01082053965401426 0.001 +4.307943065509821 -0.1160008942543948 0.001 +0.6856262802359324 0.2630583998324932 0.001 +16.97202972027194 -4.208675579654243 0.001 +18.39700275798727 5.020146427401587 0.001 +-8.501369211592262 -8.640739041357433 0.001 +2.004174446763293 0.09149475594662775 0.001 +0.9979359213943476 0.1853074762165835 0.001 +6.20486828011112 0.337821637597943 0.001 +2.381633607307365 1.278988607468672 0.001 +0.2277370276923405 0.4139316611702551 0.001 +-0.9411580535481847 8.835406033249351 0.001 +2.193753168455655 0.5377108222928014 0.001 +3.960873342445424 0.07763425710528653 0.001 +3.838240464635621 1.136380717073498 0.001 +0.13335933505085 1.083056353405565 0.001 +1.032696544546045 0.6116805557338456 0.001 +7.219984739331464 1.67861204700034 0.001 +4.448951624888161 -0.2954825651377224 0.001 +-0.02439736029553958 0.3131582185401092 0.001 +0.4887237536148485 -0.02214805129761333 0.001 +0.3660747198214513 -0.1498141878040029 0.001 +0.7427454015613459 -0.02597680265306331 0.001 +-0.06530888276066091 0.4271256529522723 0.001 +3.521282842347925 1.418900453554499 0.001 +0.3799350672057012 -0.07262583811503485 0.001 +1.069909060757843 0.5331033481507815 0.001 +0.6555332619920796 0.1694411072061881 0.001 +1.106168025890781 0.04410889559972923 0.001 +0.5409449043032911 0.0730840970473965 0.001 +0.7395726030838741 -0.06387882094952976 0.001 +0.9609979483621254 0.6219382282557234 0.001 +6.129651239619744 -0.1651963545868665 0.001 +1.085018446923471 0.6566915890892717 0.001 +1.106375139709266 0.6941990297279115 0.001 +0.6799490250097093 -0.05371230068472921 0.001 +3.550174207777854 0.8234668199209982 0.001 +0.7852064030503796 1.645247611341367 0.001 +4.838408605704124 0.2695386201195854 0.001 +0.7915960220138774 -0.03416824488950009 0.001 +0.9942269369677574 -0.08679086595043539 0.001 +0.05008436387525525 0.2620998161883235 0.001 +1.133022264947505 0.3041327229670338 0.001 +1.23586658511704 0.8005132504227727 0.001 +0.3624499385414289 0.1261726984107343 0.001 +1.053844488140469 0.4518195429635878 0.001 +-0.3432737566882585 0.2313823419903644 0.001 +1.838862849603315 0.4127481454786903 0.001 +0.0258314056493 0.8970150358863136 0.001 +-0.07876885676130056 0.8774516322372784 0.001 +0.432020987738739 -0.1244513095720868 0.001 +1.097568675835786 0.6208084126426043 0.001 +2.589111981150484 -0.1445644729170801 0.001 +1.169356937752867 0.02722316567646424 0.001 +1.617075252512566 0.4155113147028059 0.001 +1.113442996665048 0.927196188283801 0.001 +-0.1301556075053555 1.022411461858739 0.001 +0.9230267561263192 0.4759390551705369 0.001 +4.219585961631903 2.132567117660415 0.001 +0.9995748076899993 0.4564140058962134 0.001 +1.786241762117928 1.146872338288513 0.001 +0.1250526657254346 0.7171518913758171 0.001 +3.900501893768602 0.774189785222254 0.001 +1.670696539556932 0.651414990980743 0.001 +0.122096778056495 0.1261180704067594 0.001 +1.103614496688372 0.5609428740297038 0.001 +1.638090189027489 -0.4661703652453307 0.001 +3.175564283772456 -0.2330967106994878 0.001 +-0.2279713604530995 1.828992102992892 0.001 +3.025092059648674 -0.04631500529451642 0.001 +19.06534140233368 7.001918126262076 0.001 +0.08561178199307504 1.316084996041511 0.001 +0.0363308753277931 1.071430541297524 0.001 +11.4301223611084 -1.929566992881284 0.001 +-0.1521711817671384 0.08251606820982989 0.001 +-9.089028673767697 3.024997100301494 0.001 +0.09428275736989926 0.08204914807126323 0.001 +3.433173754673323 -0.1168454643996007 0.001 +0.3181588991430486 0.3383741256979128 0.001 +0.7721487744859807 0.1657323356146154 0.001 +1.795221561590693 -2.437981158913304 0.001 +-0.1141737046633597 0.7319343455366298 0.001 +-0.102311376313458 0.7633934128057548 0.001 +0.08924813919363153 0.847754468191793 0.001 +0.3034035314927372 0.4453452138325235 0.001 +-0.03589565256741568 0.3543666288645114 0.001 +3.873977936076091 0.1830239437840211 0.001 +1.662974204582117 -6.497146005749966 0.001 +0.8724411680130985 0.06136567568552823 0.001 +-4.897510789595394 8.868296492710968 0.001 +1.101291113950713 0.7316417641571338 0.001 +0.1238913632373333 0.8839093716835805 0.001 +0.227472761438168 0.947364709935164 0.001 +17.1345523752351 3.187672429319508 0.001 +-0.006198234475187353 -0.000449059101541656 0.001 +0.4797608413978594 0.193525659797623 0.001 +1.076376919443048 0.08506472746897349 0.001 +12.458828677057 -8.754295860175562 0.001 +-0.1839931994860625 1.007703396574963 0.001 +1.02960084546269 0.5574280652545731 0.001 +-0.163212992710462 0.2270011291744308 0.001 +0.04594648912431526 -0.001410330919827415 0.001 +1.870523946314727 3.830830227239666 0.001 +2.625220693716056 0.6266234224534952 0.001 +2.496339014444267 -0.07564795836302363 0.001 +2.640074668662151 0.02693369709847345 0.001 +1.073602567299524 0.8891083210179359 0.001 +0.4704274183626969 0.1201913998050855 0.001 +4.127699488954398 0.1844267507935075 0.001 +0.6843784445546004 0.2033207563716846 0.001 +0.8714319413215639 0.2277066303851443 0.001 +2.933688809973072 0.7626965520366137 0.001 +0.2573329437665508 0.3541228635262583 0.001 +4.119481717669155 -0.7462803167423244 0.001 +0.9484513096568784 -0.1121170235455449 0.001 +4.083466079980652 1.132037958251053 0.001 +1.353447151849019 0.6166261028194362 0.001 +1.333014289227639 0.6997493698452834 0.001 +2.867110908278439 1.594841666099358 0.001 +3.620354978080176 0.09437685924540817 0.001 +-0.5619576489855557 1.471715782216313 0.001 +1.069597660890015 -0.06619160041893174 0.001 +0.8225109140253303 0.7412798034876651 0.001 +3.50587782185451 0.4528051743825706 0.001 +3.763003519530573 -3.89873031695127 0.001 +-2.928071853889662 -0.9846007791445094 0.001 +0.3391234273065936 0.351995614676214 0.001 +-0.0622383971806078 -0.07531793956682629 0.001 +0.05649804706333197 0.4611572974734169 0.001 +0.8025658999968688 -0.06981679282749036 0.001 +0.1907767738697914 0.8413317942954592 0.001 +0.4028691542200549 1.122636196400696 0.001 +0.8278477382541081 0.9249540760366748 0.001 +0.8628310940897781 -0.02468974048912451 0.001 +0.177380281463637 0.4197370069981897 0.001 +0.2902618963853335 0.7959111444124343 0.001 +5.523812067361004 0.3629828928612489 0.001 +0.536989002708111 0.3015213836446123 0.001 +0.3791947397444351 0.2429475054222451 0.001 +0.6599886237913184 -0.08964865223774128 0.001 +1.020117754683893 0.1553249024463913 0.001 +-0.2714249695150477 1.223012899296078 0.001 +-0.0949325098818803 0.9577851679446401 0.001 +4.140254376256892 1.017986507874571 0.001 +2.552724414601029 0.5540607641984664 0.001 +2.132789325441945 1.342238576210709 0.001 +3.394992163030105 -0.3472215772711406 0.001 +5.030496074112714 -0.684749409719198 0.001 +1.185064887070342 -0.1715902172044525 0.001 +0.008566135073397527 1.178807942870714 0.001 +0.9302897421320424 0.4383668631565659 0.001 +-2.248681754245752 -8.910068182673454 0.001 +0.7633219695652415 0.2493197878845796 0.001 +2.249380629489294 1.049423120739424 0.001 +-0.1128715554630765 1.179415398188402 0.001 +0.6680810240013202 0.7455478034950482 0.001 +6.653562219384739 8.658978107032661 0.001 +-1.895538244911479 1.51170036884523 0.001 +0.09967891584846714 0.120665068087365 0.001 +-0.04118320694882693 0.8457445729176769 0.001 +3.978102386470934 -0.1184620829727241 0.001 +3.444490398879676 0.04611583348968618 0.001 +11.70552997159733 3.623679290958752 0.001 +0.7720373429372313 0.4232405075180423 0.001 +0.01397322457446819 0.8210192693167411 0.001 +0.8677016407921224 0.5478408837744326 0.001 +-0.01166703011590611 0.2015558529681549 0.001 +0.03125153092898985 0.6476602488927542 0.001 +1.035816272818916 -0.5539946005315572 0.001 +3.690229250121268 0.4090038060607723 0.001 +0.4761641314822627 0.3147095605372359 0.001 +0.04198906964416949 0.7986154945733985 0.001 +3.662409844497797 -1.624991222717814 0.001 +0.9518617751415069 0.7353494250053682 0.001 +1.390814245051036 0.1716435805291146 0.001 +14.25313119027728 2.014149660570842 0.001 +0.3682606318727701 0.7398289174944398 0.001 +10.54380672773678 -7.485821502421951 0.001 +-0.05526087853872665 0.7368019350100895 0.001 +2.397362949148366 0.07939648332321539 0.001 +2.353204624162661 0.1545574686094459 0.001 +3.594190248084525 1.074047324582463 0.001 +0.02131649662154174 0.2273677008817847 0.001 +3.070299447945628 0.7586618019890338 0.001 +2.821062806761322 0.864279104940662 0.001 +0.9694099617712768 0.5641607562804938 0.001 +2.456401403980266 0.3549363612738444 0.001 +1.136296595841558 0.7432907421672882 0.001 +1.066795307009457 0.2887334012970036 0.001 +1.954529805362723 0.05158930260897202 0.001 +0.2888551906572803 0.01804967495902208 0.001 +0.7500529798604532 0.6456314431395591 0.001 +-0.1966093498877683 1.115146715493546 0.001 +3.152332968031565 1.043839934852607 0.001 +0.1182443284828277 3.64610148058887 0.001 +0.4016352219354131 0.08419159005882604 0.001 +0.4306209456813545 0.08822488160588916 0.001 +-0.01324351291664158 0.1299641097877023 0.001 +-0.280860466986591 0.09427614357602811 0.001 +7.510965049514015 -5.942479906549788 0.001 +-0.02700866735944823 0.8972826437583751 0.001 +2.679774622462805 0.75306769065864 0.001 +0.442625355707605 0.0343960318743764 0.001 +3.573913680411063 1.600112860341606 0.001 +2.717422343841191 1.221380643546162 0.001 +3.104570376240498 1.437302248686865 0.001 +1.876193536952739 0.4388397989157205 0.001 +0.1526672700599503 0.2351015540900229 0.001 +0.1879585877202468 0.2095913830684932 0.001 +3.203425909274579 1.10958668819671 0.001 +1.292883830244974 1.153553908726761 0.001 +1.293979410088293 1.236609744326972 0.001 +-0.09744869996955303 0.3799838021979333 0.001 +-0.09129882935837146 0.3545690189478811 0.001 +0.2859520232028563 0.0652937770187525 0.001 +1.9798451692424 -0.1546068401624337 0.001 +0.2819471305458052 0.9472403105802899 0.001 +0.2033824592471612 0.1300812762538327 0.001 +0.2498215778955682 0.6301027150200044 0.001 +0.1763165942402152 0.8574241961783711 0.001 +-7.20021191213088 -0.3066571214669257 0.001 +0.6651592827668262 0.3928829497309416 0.001 +2.372973510801723 1.106030044595994 0.001 +3.120967123631347 -0.03849545055808173 0.001 +2.106323100999572 0.8407901149836751 0.001 +1.335280805743831 0.9559538348228862 0.001 +2.940562340540467 0.03254617908385803 0.001 +1.115124827341668 0.9641694350163494 0.001 +6.478235401086362 -4.144681968721978 0.001 +11.55683545335532 2.251168058010475 0.001 +0.7218043303591273 0.2186629551980287 0.001 +2.935969459693196 1.334046492117237 0.001 +0.8377515302822197 0.8501643676669274 0.001 +0.01014793977999139 0.68640968386231 0.001 +1.047976835228693 0.9937748363632177 0.001 +1.06885826739451 -1.295669848794873 0.001 +0.3930613063794132 0.3229612465852453 0.001 +1.483964772446767 -0.05257802375855034 0.001 +-1.188308947987982 -0.4011898949967317 0.001 +0.4186735999596238 0.1365269904964183 0.001 +-4.166654648429582 -8.731402074812753 0.001 +4.286565723637103 0.4029704555735201 0.001 +-0.03682184531483801 1.022815722726771 0.001 +1.07998369790665 -0.00574798932780812 0.001 +0.307830721965896 0.7515175331443024 0.001 +1.05347351513402 0.9404981014226064 0.001 +2.299583896077073 0.01618092810708827 0.001 +0.2463589143289147 0.2507918588652284 0.001 +4.4022965604486 -0.5840574064796294 0.001 +0.1178379874929389 0.4781656612322511 0.001 +3.264529358887738 0.2142672921086084 0.001 +-1.199379671356919 -4.005826602022222 0.001 +2.162067817551287 -0.4698564222701359 0.001 +0.3402744422652914 0.6997603248148009 0.001 +14.21515598875796 -8.953494909193015 0.001 +2.07466267503092 1.56725163698059 0.001 +3.014107433337745 0.03265585238149932 0.001 +3.682375673506658 0.3118709257892317 0.001 +15.51516301053081 7.370405066658364 0.001 +18.76326655119191 -4.089790656360871 0.001 +0.9738210150178563 0.6932504176987622 0.001 +-1.640190051039084 -1.316356863801343 0.001 +-1.758702564822201 -0.9375236158388921 0.001 +-1.009321726389485 1.385739932153232 0.001 +0.8610429764759906 0.8025826701661398 0.001 +0.7611165398960137 0.2314177608501332 0.001 +0.2371338556015199 -0.03757009201875584 0.001 +13.54938930695243 -1.705752530514111 0.001 +14.03684816005437 -2.701972069154135 0.001 +0.1800081416829916 1.178510053345477 0.001 +4.334327919257164 1.271728933950043 0.001 +0.9289299521247596 0.2466907838459549 0.001 +10.7227513544533 0.04469426618755323 0.001 +0.8290632615674673 0.01064333254217359 0.001 +2.458278640045799 -0.9217993540350913 0.001 +3.319130048074469 0.5760423610538512 0.001 +3.381838018062533 0.6048302348455104 0.001 +6.107888341146379 1.105890282793254 0.001 +0.1743376480099807 -4.684624621300864 0.001 +0.7245196745420026 0.4274684644268779 0.001 +0.7327709662567685 0.460938993289395 0.001 +0.804224290349813 0.7073894771521666 0.001 +0.6724864487543998 0.1219607483605838 0.001 +0.9432693612515113 -0.1770125416657604 0.001 +0.9069265577311397 -0.2406022374679797 0.001 +3.49299063795257 0.007728526617284699 0.001 +-9.145598731456156 -3.189764252353787 0.001 +0.8210722886084197 0.2552495625180969 0.001 +-0.08836061603321604 0.01542963718491409 0.001 +0.0847623070589892 1.072481987100319 0.001 +1.097617587186248 -0.1172598308939332 0.001 +4.288151304713328 0.7184224658092517 0.001 +0.005778717131926229 0.5691318346823062 0.001 +3.567074503212757 -0.1272941326184948 0.001 +1.465594664568167 0.8254926880070831 0.001 +1.095584688338691 0.1373292883255614 0.001 +-0.8371254679798423 0.5873269671075014 0.001 +-0.355009029130808 1.007881298986574 0.001 +-5.315665718409227 -2.521161687951865 0.001 +0.442184447111228 1.063656053995802 0.001 +3.578878955134863 1.204492153864775 0.001 +2.032971683808952 -0.7079025511246766 0.001 +2.084112938660857 0.03124534186965309 0.001 +-0.1340151661524997 0.4059106017310402 0.001 +1.11849054423885 0.6150670377689207 0.001 +3.572259621843795 3.542965174245261 0.001 +-7.508840253816642 -7.15524761401841 0.001 +0.08159727876217818 -0.2283819511676762 0.001 +5.965745744360772 3.017284883791044 0.001 +0.05405435855337403 0.8951519617623099 0.001 +-7.632077883635701 7.052953970198875 0.001 +0.1291308930725225 -0.05911892022223771 0.001 +-0.1078302648775572 -0.06791243886214512 0.001 +0.2042350331570014 0.2575270761351635 0.001 +-0.186350283639686 -0.1355062914355052 0.001 +1.089633787234486 0.4791424648089747 0.001 +0.04768701694638992 -0.08912230070998632 0.001 +0.04535890683298231 -0.1200849888082171 0.001 +2.337216855822444 1.160777935191008 0.001 +2.24037716086565 1.193495322961195 0.001 +-0.9149071563374825 3.255255412788642 0.001 +0.4086735726768957 -0.05094986513647608 0.001 +1.756678374844929 1.691522470479819 0.001 +0.4679769110330222 0.3517718391063654 0.001 +0.3828616610010578 0.1718916201122353 0.001 +2.202316789367062 0.7550461225788724 0.001 +6.71349450039603 -1.440514806242367 0.001 +0.4080377815292987 0.5368451203914868 0.001 +-0.001961868270944666 0.7957194817514418 0.001 +1.072784821314534 -0.2825475931483747 0.001 +2.905761970306696 -0.1454454216229437 0.001 +0.1934454525418454 -0.1035457327326153 0.001 +0.5848784592243748 0.1399597321092157 0.001 +2.530009100697292 0.04200593277192135 0.001 +0.7212008236207655 0.1336599566298406 0.001 +4.159208239287813 1.190542331801884 0.001 +0.8667910405554382 0.6511501552795522 0.001 +0.9393650055475341 1.163404834716177 0.001 +1.442614158564647 0.6205559981169406 0.001 +1.581893646792831 2.801398101463843 0.001 +-0.03327451214370362 0.2765154692000633 0.001 +0.5539409273307665 -0.04348758918729732 0.001 +0.1125880641691097 0.6670670522344712 0.001 +1.133165441564416 1.071105218808603 0.001 +1.007733013115085 0.286675313347251 0.001 +3.351681620748839 -1.811839066489703 0.001 +0.7272764212917509 1.169761540631802 0.001 +0.7096345313643948 0.2474241318653631 0.001 +0.1284319740084309 -0.1256685843824061 0.001 +0.2728469062668561 0.9016433313803308 0.001 +0.2361447719458401 0.01651510182039855 0.001 +0.6888739844379305 2.488743028396852 0.001 +1.045261522017888 -0.07450418949669996 0.001 +0.2032965421735321 0.9858917471792714 0.001 +0.2185816195884142 0.3366516346426266 0.001 +17.46411803182955 -2.341081899737752 0.001 +0.02921056039717299 1.143448136711142 0.001 +0.03695236423564827 0.6782837384056291 0.001 +2.675944415320773 -0.01523916601351776 0.001 +11.07576671607714 9.104703674955445 0.001 +3.530523956487237 0.2072062546187463 0.001 +1.921536298539283 -0.6166620457152046 0.001 +0.4934828627552688 1.006892621776757 0.001 +1.204452566260945 0.6183292482139346 0.001 +0.06555735917249836 0.9853970567027026 0.001 +2.45136740324621 0.7871787174047018 0.001 +-0.1770514597474498 -1.773081855399414 0.001 +2.722204443460362 0.2959152889842486 0.001 +3.010050116938101 -0.2831375887174507 0.001 +0.2821376823724767 0.4238402738407534 0.001 +2.534358338554026 0.6985122624763684 0.001 +0.171830945455422 0.3201486720144001 0.001 +0.821135809446743 -0.02720038247619262 0.001 +0.2428270213245248 0.8246271603309658 0.001 +1.135872224789976 0.2068655828796444 0.001 +1.129378340641358 0.2533894381635303 0.001 +0.01204597848631628 0.36634587716456 0.001 +19.09355502415901 -7.082251952991026 0.001 +1.482346438950394 -0.333312049173336 0.001 +3.850332218787671 0.1182367703604779 0.001 +0.06048952801111523 0.6589438187369595 0.001 +0.5914442479117271 -0.2977542821324381 0.001 +0.2750545541730346 1.055245306395559 0.001 +3.692558967067942 0.8332442219405798 0.001 +0.4557866277634462 1.16016717329403 0.001 +0.2955779807727067 0.101373130097367 0.001 +0.943439262167181 0.7022732105402651 0.001 +2.77461224902001 0.04904268149647496 0.001 +16.99214475223032 -7.498576259654126 0.001 +0.4185732035661768 0.671805177608309 0.001 +0.05265145857954538 0.8542025915439123 0.001 +0.8734438590974734 -0.1489427766081713 0.001 +-2.22227895519502 3.627373509892029 0.001 +0.01085836405538256 0.8484619530696558 0.001 +0.489333056334335 0.1541675100594304 0.001 +0.2452106989819354 0.461108425923335 0.001 +0.754370694123489 0.09349589123675317 0.001 +1.301693809520356 2.008548308925289 0.001 +1.653251829193063 1.285181235102819 0.001 +2.154524627537794 1.060366085193329 0.001 +3.314734996376977 1.006236904852273 0.001 +2.900188219623692 1.118963229885744 0.001 +0.6593944339344805 3.283764699568919 0.001 +5.491668354651178 -0.4303619729166026 0.001 +-0.07656973421203034 0.7713704778081159 0.001 +2.482266195859062 2.656399399288272 0.001 +1.012674782157274 1.085292317657729 0.001 +0.8242272977752695 0.3261386463514681 0.001 +0.2853587805331372 -0.189343202908084 0.001 +1.104781930867099 0.5111829547112069 0.001 +1.120885545240844 0.521578949157488 0.001 +4.350345739640451 0.3205950908258561 0.001 +0.4641788695080083 0.01482270911149532 0.001 +0.8208156656478118 0.642437341288032 0.001 +0.8197860317132739 0.5617111589604987 0.001 +0.9395618926501634 -0.0672510787111827 0.001 +0.9358968172139746 -0.0441516772575199 0.001 +0.6004403048806817 0.01650167962786038 0.001 +-0.2551095388824996 -0.2457853981179079 0.001 +3.175264169454721 0.5709163389617909 0.001 +0.6866645162422167 1.339706068685797 0.001 +-0.08678158117844934 -0.02975548990126544 0.001 +11.33417427132101 -0.6140885221605632 0.001 +17.51584857162472 -6.18899354022081 0.001 +3.505085044239817 0.683525315430793 0.001 +3.580131503895568 0.7011300267769041 0.001 +0.2063973194452206 0.7382113825474579 0.001 +3.461998620180098 0.9372550624854487 0.001 +17.14534913767889 -9.131285688471621 0.001 +1.727845789156753 1.315845779068636 0.001 +1.807586487989811 1.344037320527967 0.001 +0.339093577916911 0.5803016742791488 0.001 +-2.557607208476997 2.667262679409418 0.001 +2.975653268386233 0.3816921585596961 0.001 +0.3733403114263394 0.7927365037358975 0.001 +0.6372667970190817 -0.02836509248058715 0.001 +0.4820926067837197 0.9517865655051254 0.001 +0.3579245896946361 0.0562521688295274 0.001 +-8.75529074481946 0.3442986683333947 0.001 +0.6798754566623652 0.1830657382901946 0.001 +0.4587893479284712 0.2706498965156429 0.001 +2.277816377483922 1.131699439436627 0.001 +0.8576555358352366 0.7003156470153575 0.001 +0.7401453863484718 0.03899758853479496 0.001 +2.913132100584632 0.2111294460066479 0.001 +0.9321405119872425 -0.02103979522823628 0.001 +2.335853069296609 0.6462933859456808 0.001 +0.2686224775254722 0.6875223222880872 0.001 +0.718912512958984 0.8310137336256412 0.001 +3.502901157875532 0.588836777700754 0.001 +2.058680189491543 -0.1208793475190274 0.001 +-0.0607258861269601 0.09309197193873295 0.001 +0.6670951491372032 0.07035447955435649 0.001 +0.0527105116327152 0.4088933572017129 0.001 +-0.6167903384920612 0.6742732435654595 0.001 +5.60641330986227 2.026735739385316 0.001 +10.66962120698838 -8.970800983724507 0.001 +3.397197484667455 0.1572562220986934 0.001 +0.08179351649319926 0.6384810437918969 0.001 +12.70843463524825 -7.82637649549977 0.001 +2.552659624813565 0.7671951120967287 0.001 +0.5593413225491672 0.1825635606211982 0.001 +5.468915047784696 4.085968362928549 0.001 +0.05105343195475845 0.5590085368964434 0.001 +0.1652721918243622 0.5774672490875227 0.001 +2.13812930749703 -1.384484299765213 0.001 +0.2640116211095803 0.5672430575598275 0.001 +3.145646285930092 0.0189960642653368 0.001 +3.203910183515696 -0.008083864699517282 0.001 +2.448343162388957 0.9133593981701186 0.001 +2.480066277262989 1.42575370049498 0.001 +0.1153827116999538 0.6427610933368115 0.001 +2.483934631507952 -0.3743414375154471 0.001 +1.567091688199889 0.7295423692331361 0.001 +-0.5343575603817223 0.174744961968661 0.001 +0.0643359487095556 0.5931393621449504 0.001 +0.739408371627754 0.2502797756878795 0.001 +-6.189064384720691 -7.455864757235176 0.001 +4.520537022366221 0.3121449395438711 0.001 +1.137894252702346 1.368358784528032 0.001 +0.4384706913862261 1.010752221617784 0.001 +-3.744704621966335 -6.094081169810138 0.001 +0.1249861662963048 0.6183435952407227 0.001 +0.1226372918370108 0.3382449685169315 0.001 +0.4496503874639555 0.4249970065392982 0.001 +0.4194633250756021 0.4119182055319648 0.001 +-0.06121164799467727 0.4861676439531016 0.001 +-0.08311556306885927 0.4718824936196632 0.001 +-0.01499426273430571 0.5424663267683829 0.001 +-1.01532677000881 -9.179913696018797 0.001 +-0.06295765202968119 -0.0324796358606255 0.001 +0.9798667002943178 0.483666072578834 0.001 +0.2557468554305902 -0.1114834065877056 0.001 +0.2928159453125938 -0.1265870838118519 0.001 +0.1604938905390175 -0.07636033646276243 0.001 +0.8477502009847158 0.4485367630290132 0.001 +0.7381019070142942 0.3248294103511205 0.001 +0.8937114331502474 0.3874337204239361 0.001 +1.012428190759876 0.03106754923667809 0.001 +0.3449047511989934 1.042582492652657 0.001 +0.4662619014298653 0.7962705053672706 0.001 +0.1042487708354533 1.032091108291279 0.001 +2.691039215330281 0.8913884241897629 0.001 +1.197972399514879 -0.2687457712411433 0.001 +1.271991559450219 -0.2911783157814329 0.001 +-3.662588731251354 5.557432811955307 0.001 +-4.037326260435868 -2.562408942638417 0.001 +0.183471127940459 0.1441093742253415 0.001 +0.1805985833848784 0.084250285411144 0.001 +0.1918018120521165 0.1075125402410025 0.001 +3.218235269340755 -9.070798722890986 0.001 +-0.04160060664416003 0.04403983442806644 0.001 +-7.211646801051075 3.037717093647709 0.001 +2.567509444082523 1.191676910527699 0.001 +2.175421051302453 2.666388062350173 0.001 +5.382200202952111 1.287131246534302 0.001 +1.188474774846265 1.090499771822115 0.001 +1.418748341679406 0.7176295383801528 0.001 +0.9723826660776368 -3.023677049759394 0.001 +0.4367415802787664 -0.02131127664961514 0.001 +0.8546352207049199 0.2727171394220134 0.001 +0.1008866186330979 0.8885021846791326 0.001 +0.758341482429336 -0.01854846078975033 0.001 +1.15527783684174 1.860657145616988 0.001 +2.721646353549817 0.4058779939741842 0.001 +1.147471520193096 0.511330920328613 0.001 +0.505649405798021 0.8383811847499879 0.001 +-0.1123746451310792 0.1857228806409821 0.001 +0.7307998565730319 0.5826581724122399 0.001 +3.506604314532126 0.1525895226459207 0.001 +4.100296701132763 -0.1523855590490669 0.001 +0.2102091606653054 0.499141345680735 0.001 +3.292364370977032 0.3391966761764995 0.001 +0.4040793715724504 0.4491580456926262 0.001 +-3.913912296696489 2.742431292788284 0.001 +0.2411403061872598 0.5683257344435348 0.001 +1.512911293860677 1.03267351257502 0.001 +-0.05650501937455363 0.5128558272098381 0.001 +-0.08173859970259661 0.5318482444865232 0.001 +0.7344729066360023 0.1781497485540019 0.001 +-0.0478180262921459 0.7607224252213605 0.001 +0.7892517669963151 0.3929453845894618 0.001 +4.030601560673749 0.9960616488644958 0.001 +2.714348017624394 -0.05172863281647736 0.001 +2.99722741119323 0.1622909890170253 0.001 +15.21417480186333 -1.219995982352117 0.001 +3.162590333015863 1.742944414312181 0.001 +3.14970200342366 0.2845516086341741 0.001 +0.8117261705977153 0.1428787352772942 0.001 +0.4255944733939314 0.2043895844178756 0.001 +3.157852221931393 -0.3533559030339926 0.001 +-0.02917517837999695 0.5201937598666334 0.001 +0.2912704032928312 0.6710381246244516 0.001 +0.5070331622457019 0.2381100618543494 0.001 +0.5590099484138189 0.9503522607274276 0.001 +4.04132341301411 0.2639130828935491 0.001 +0.5177590350292781 0.113801171626404 0.001 +-0.9425963156749823 2.093590091239379 0.001 +1.890338389512007 1.835135339606523 0.001 +0.4091751316627352 0.9033061717961035 0.001 +1.519963575225682 0.1658854321362146 0.001 +2.411029529038431 0.5359920665936986 0.001 +-0.2548406458133444 0.46319290726015 0.001 +-7.505686774971021 -9.062801390485259 0.001 +0.909617190375853 0.3590490014775901 0.001 +1.028283236706515 0.07046421782433547 0.001 +0.3560873098137827 0.8622218116853588 0.001 +-0.1038520205193161 0.5192422794847067 0.001 +-0.6012275697632542 6.276638415893459 0.001 +0.2364839230592636 0.8778658945155563 0.001 +0.2734471203525731 0.2538010484499248 0.001 +-0.008661674835433663 -0.0941159307139398 0.001 +0.8496370216097326 0.993593049977333 0.001 +0.5879388696088729 0.7194979617892168 0.001 +2.883065684803463 2.254409533284423 0.001 +3.014674891496205 2.479272999672668 0.001 +0.4240778058997586 0.8467837907982916 0.001 +-0.04482881575032791 0.9516559519374224 0.001 +1.442747945574304 1.337196153897945 0.001 +0.7691416101980812 -0.2102214803596801 0.001 +0.7496789496572343 -0.288500455618484 0.001 +1.57283582280167 -0.6054122380949915 0.001 +-0.02266153001116662 0.4854538265897156 0.001 +6.218119002030538 -9.085120148444995 0.001 +3.066223947595582 0.6320376541153079 0.001 +-0.01468336484702735 0.7735081482046039 0.001 +3.942208828244165 0.9063547889597882 0.001 +0.855890437280703 0.006614628826647038 0.001 +0.09095914724194901 0.3740017448564214 0.001 +1.900281159273051 1.121880687771609 0.001 +0.3526264406982931 0.3031088219608338 0.001 +0.6323775175945323 0.1610043780326842 0.001 +6.470474107233017 -7.37313481360114 0.001 +0.8443046435803876 0.3930862505983776 0.001 +0.2712501914226503 0.3701038354024804 0.001 +0.8828464326476476 0.3698342157008279 0.001 +2.299579959061776 0.9334499319870526 0.001 +0.09935578989156825 0.1765471455409728 0.001 +2.834459228686094 0.4904767142062826 0.001 +2.866504820738461 0.4619812000269318 0.001 +0.1673507602970343 0.2554777787407611 0.001 +0.3894191298207209 0.8435483985895327 0.001 +0.2330665451318799 0.6499064857995103 0.001 +0.3920653513033479 0.8194332803581298 0.001 +0.3767687225449655 0.5268069365448924 0.001 +-0.007976909978035431 0.7194796355064694 0.001 +0.1721573866789538 0.7488902709994538 0.001 +0.9334451472061731 0.3718091226796232 0.001 +0.3763172996418671 1.018127089698591 0.001 +2.367345402088569 0.8949649755119565 0.001 +14.75378762594349 -4.704179938210874 0.001 +0.2141591226031877 0.6328076077812728 0.001 +18.66079583881536 4.225058222707745 0.001 +1.559207607221328 -4.836148826625726 0.001 +3.053129938109404 -0.208384691529691 0.001 +3.129242655775709 -0.1729287827433938 0.001 +14.50848202294949 -7.118670394086966 0.001 +15.55336476928792 -7.192135477194384 0.001 +0.8507166108119032 0.2455153794604115 0.001 +-0.06272998183687706 -1.410088034279033 0.001 +1.706192200516729 0.3909159936894989 0.001 +2.322377582533295 -0.4490697820211529 0.001 +0.5539746551475736 0.2685372138316566 0.001 +-0.001765181517721247 0.2252208832756599 0.001 +6.667865979132167 7.737381080308365 0.001 +-0.01759157565380589 0.924775168926281 0.001 +1.013101080918314 0.4170380884156046 0.001 +0.02877644838669981 0.5440395483736162 0.001 +0.1600656600338363 0.6027908256504404 0.001 +15.63583367904876 5.762325875600417 0.001 +-2.573753505141817 -7.496878651477825 0.001 +0.4460819285117886 0.1731736168720692 0.001 +7.209939167222068 2.440964637751141 0.001 +2.526072631632309 -5.000935280911063 0.001 +0.3553931921523411 0.1776395346438388 0.001 +3.775537799646299 0.2044559765131137 0.001 +0.6776371778465362 -0.1088346953966267 0.001 +0.6961878367316333 -0.102542429342978 0.001 +0.6217976078139198 0.4456850730784399 0.001 +0.7142056097895289 0.3849483897333795 0.001 +0.6361392132570484 0.2761496026733076 0.001 +0.02428051308147598 0.6036038515524071 0.001 +3.354960830008476 1.416563031503708 0.001 +3.658005694134162 0.6588113696874606 0.001 +-0.08054409625053902 0.8105392209275701 0.001 +0.5880457330568891 0.8563409171078034 0.001 +1.909000458288766 1.007889618358583 0.001 +0.7042316032038723 0.8987864513408761 0.001 +15.33078916829487 -8.785510706276085 0.001 +0.9969834907940246 -0.1995341500906191 0.001 +3.284191178611209 -0.1298950988919823 0.001 +0.013142855750781 1.046092135453264 0.001 +0.006245371147556873 0.5930798057488724 0.001 +1.007736744871584 0.3949602297878473 0.001 +0.2327877039758442 0.2946285653855894 0.001 +3.206405732908763 0.1680666167077846 0.001 +17.28211367680283 6.727295997099584 0.001 +-0.1043819555756951 0.4940196206688012 0.001 +3.512272080771842 -1.18297831067692 0.001 +0.8877919599298121 0.5216491161705086 0.001 +-0.01627853743003195 0.6384014586315416 0.001 +3.822263257283353 0.06700843809999593 0.001 +-0.04416183169806068 0.4383249789181748 0.001 +-2.734208671769266 9.025293084874658 0.001 +2.953361220103303 -0.4418098528053309 0.001 +0.03480044716883225 0.7614277667154524 0.001 +-0.08760699867068351 0.4461606689737795 0.001 +-0.1143324998869828 0.4362881855706827 0.001 +0.07230273127929479 0.6700262333022008 0.001 +0.9787853239434997 1.084192134580589 0.001 +-2.195451862798278 5.345233811763675 0.001 +0.525735731805982 0.2216759122030417 0.001 +0.719743840579701 0.1621936180705686 0.001 +4.082120218122067 0.1096190194844091 0.001 +0.7560916647618322 -0.1100170836727307 0.001 +4.749890820170131 -0.1409402334639299 0.001 +0.8649151635986211 1.03692166669686 0.001 +0.1404319511987479 0.114174014394364 0.001 +2.12655422583515 -0.1353962367653284 0.001 +0.820260128028735 0.1950709109180017 0.001 +0.04924799297413568 0.4930366925887499 0.001 +0.159931299160419 0.6608584204884544 0.001 +0.9840355415014461 0.230569238837993 0.001 +0.9385707285800473 0.6563471434982739 0.001 +0.1743791943570236 0.8087931904485706 0.001 +2.510211423787559 0.1615449861116449 0.001 +19.05431902097365 -5.272920594195349 0.001 +0.7345448098531097 0.7707771505169012 0.001 +0.3821653206743367 0.7648600982689948 0.001 +0.3662618180208195 0.1582234221237236 0.001 +3.875568989759535 -1.472913140973763 0.001 +2.505880832168772 0.3096506498697279 0.001 +0.3952584200526059 0.9692047038442796 0.001 +0.384558797369469 0.992685965219654 0.001 +3.028083970687041 -5.969938193510055 0.001 +0.6442087622914582 -1.865362752004867 0.001 +-0.0683587457407433 0.1711484178033995 0.001 +0.7314613376792232 -0.1231602647659058 0.001 +0.9623354369304303 0.1650953642412335 0.001 +1.635341410755579 -0.09398894614099088 0.001 +0.5161601270748353 0.5103175594691355 0.001 +-6.126976891229631 -5.924629770852028 0.001 +1.538209875971184 0.3602943917563904 0.001 +0.8874516470100797 0.6996425838479005 0.001 +1.019138513985089 0.9427341039076355 0.001 +0.1715827015705907 0.5309382129218644 0.001 +0.09703860078243809 0.7218143930597598 0.001 +4.634410624919967 -0.3821570220990961 0.001 +0.1187946836418014 0.590135514859515 0.001 +0.4729862365329607 0.4804450295670629 0.001 +0.8116914379737564 0.339153474342961 0.001 +0.3070119962569137 0.3030081751787435 0.001 +2.919709865539291 0.5861392598521133 0.001 +0.6105923492222275 -0.03790929591188526 0.001 +-0.1043134893918045 1.082899211503881 0.001 +0.1732819637039157 0.4809035310401732 0.001 +-1.382405574698823 -0.05248470832247622 0.001 +-2.815658420276728 7.471643041621971 0.001 +-0.1676985916303961 -0.03986795892206425 0.001 +0.8901379716689423 1.079162609800989 0.001 +12.97925553312449 -4.697142846252773 0.001 +0.7743834508411941 0.9626124317248576 0.001 +0.4558447717556471 0.6711764552593202 0.001 +-9.012297924347882 -1.282837550536056 0.001 +0.6297956870008986 0.5681677380659763 0.001 +0.3405654967483744 1.012386927052692 0.001 +0.4568531137150225 0.8932555000939996 0.001 +0.3924254809491229 1.071945844829447 0.001 +0.7669399790995324 0.9979492455140301 0.001 +0.4266716272153324 0.7600268091468869 0.001 +0.7117385088555013 0.3006691403265535 0.001 +2.294594730731583 0.4725783125828421 0.001 +0.5654886933219851 1.932970757776447 0.001 +0.3355346683195491 0.9487695986390778 0.001 +2.625390415181697 0.4865170984289168 0.001 +0.6243573134862987 0.7566383002038246 0.001 +1.892350572288076 0.6156387801183463 0.001 +0.9617465006813535 1.001306418199879 0.001 +3.053237627460601 0.1816157287548185 0.001 +0.4282407852886615 0.3471627025804236 0.001 +0.5328228085943808 0.4574746655381322 0.001 +0.6795242320845515 0.03715899435074944 0.001 +0.592734275395543 0.5049310184426592 0.001 +0.8885873402224472 -0.0454259711455003 0.001 +0.3260513550804303 1.073109134118117 0.001 +0.3720222247906591 1.043604122654459 0.001 +0.7903196201230621 0.05062455133192747 0.001 +3.182565960985605 0.8010379193232109 0.001 +0.4315423495428966 1.110030110371558 0.001 +1.696061251727263 0.8624383137980656 0.001 +0.8684236062766917 0.4311183769281783 0.001 +3.766613594845723 1.329728368556027 0.001 +2.082292330296704 0.9889521934067845 0.001 +-0.1041055787364548 0.1164483240489803 0.001 +0.6988896563970848 1.06472320731447 0.001 +10.94044483673798 5.276565120062142 0.001 +0.9747701785360682 0.4658258812999376 0.001 +6.340258211383158 2.130702886753329 0.001 +0.03567884452807938 0.4747772961153883 0.001 +-4.306563068554028 -7.682102749422799 0.001 +0.5834573789211343 0.9448250706442776 0.001 +1.157178362340577 1.013112903492683 0.001 +0.4454395556355364 0.3054927302606744 0.001 +0.2166613437872515 0.573107067605545 0.001 +0.562427209013989 0.1301054434370195 0.001 +0.4824816595585775 0.435679389415984 0.001 +2.67929816339908 -0.5602459185494298 0.001 +0.893890374727291 0.2616015868070758 0.001 +-0.006956278094713257 0.5054973265154648 0.001 +0.9329180065347965 0.9609044615310088 0.001 +3.644187545923654 1.047049323058308 0.001 +-1.625450723007889 1.961444265997037 0.001 +0.8397831032480741 0.6704805057331052 0.001 +0.5879043427794379 0.6248467761095071 0.001 +10.38924660042613 -2.414803852537279 0.001 +0.005381226797332524 0.2878599540152078 0.001 +0.9678892058742303 0.534834437456521 0.001 +0.06906770304318859 0.5382039239525879 0.001 +12.99728147048186 -6.188199937794948 0.001 +3.967070825921058 0.7600109080660631 0.001 +0.5733202979314648 0.1619575608946833 0.001 +0.4957325653563662 0.8051176339577228 0.001 +0.3349800403685347 -0.07789292951164729 0.001 +0.5673089996982313 0.7011905120244775 0.001 +0.3128067340142578 0.9938309384915412 0.001 +-7.15400446175333 6.073009010706421 0.001 +0.4643516598005144 0.756108721211048 0.001 +0.3941757261088324 0.1897941836450498 0.001 +0.2513283624908192 0.5137369159564471 0.001 +0.5222748889037205 0.1883261544359729 0.001 +16.89240278751022 -1.512061471493058 0.001 +0.1896597671186015 0.5532385374513867 0.001 +1.0927517121459 -0.05845123115265799 0.001 +0.4217196793770537 1.055975272678149 0.001 +0.9407297540641962 0.9349137113471514 0.001 +0.3347592661864429 0.4898368556302303 0.001 +0.3917631734335186 0.7243168624695414 0.001 +1.551097267359415 0.3074021413363223 0.001 +0.4254913751761661 0.1115247348640755 0.001 +-0.001218730214019128 0.6614791024626283 0.001 +0.6072761948477888 -1.225898222295496 0.001 +-1.253120906180249 -7.075345372808338 0.001 +3.660296034466738 0.2181932337703427 0.001 +0.1846355518699909 0.1777127387094165 0.001 +0.4207014377346592 0.6327975919065824 0.001 +0.4454025054792445 0.7758916174346412 0.001 +-0.0757066782193854 0.3111066307931895 0.001 +4.750267285994717 1.541807923291343 0.001 +3.796402570644546 0.551091157794545 0.001 +0.568402081791601 0.3167986977843757 0.001 +13.66099386681473 3.958839570813757 0.001 +2.024598014918509 0.7335905861984116 0.001 +0.5347909711451013 0.794060491981411 0.001 +0.610636142327458 0.9694524826210841 0.001 +3.741658911205213 0.5478100315819633 0.001 +0.3182983977982368 0.7139378124230606 0.001 +0.7701960283893221 1.046755874115011 0.001 +-0.01141286355044526 1.00066707374973 0.001 +0.6234652546824979 0.8915377759596008 0.001 +0.3548676293267168 0.9826997800976842 0.001 +-0.07252623251460424 0.5522326268206491 0.001 +1.092954712008165 1.04285247074916 0.001 +4.211252026942685 -1.476392391264752 0.001 +0.4399667057685154 0.8858892472994421 0.001 +0.7931287648179741 0.5673442853975278 0.001 +1.96488077063744 0.3462052225404047 0.001 +0.6043827223291421 -0.1448445934799489 0.001 +0.5555387100656526 -0.1535454458423437 0.001 +0.5358687732564068 -0.1791884093087678 0.001 +0.8981808128980862 1.027926755345767 0.001 +0.5328205250123459 0.633369730401292 0.001 +0.4907502156377902 0.5695134391907171 0.001 +0.1134836380091567 -0.004980203604683995 0.001 +0.8471117891154606 1.023608574129925 0.001 +0.6574731944644668 1.028773491038174 0.001 +0.6554952988545508 1.053967938956995 0.001 +6.173860978964959 -2.031151694594543 0.001 +0.2578307301578259 0.8888570199735513 0.001 +0.713759910549026 0.01317926378296077 0.001 +0.5942735566612775 1.060857067018675 0.001 +-0.3978473035203117 -0.009012685006260492 0.001 +-0.1776778628816269 0.3820768668749107 0.001 +0.7845640270540712 0.7406773001864321 0.001 +0.09635189315641481 0.5737889686449514 0.001 +0.03744985590945545 -0.03477202467889838 0.001 +0.3325519262052207 0.4185470240073795 0.001 +2.145874719164466 0.1020743560443534 0.001 +3.764516592905421 0.9206627781193288 0.001 +2.310278466243335 1.734888054702584 0.001 +2.521032435406879 1.101524353852012 0.001 +1.114547027443381 1.10693397271267 0.001 +0.324663272543365 0.5262809225619112 0.001 +8.410847360761233 4.268205619084145 0.001 +2.573963098480274 -3.432302892506175 0.001 +2.690892326779511 0.9561851593280871 0.001 +2.318469143314602 0.5583355207214589 0.001 +0.6192420572292038 -0.1102965129870802 0.001 +0.2444852422368773 0.1470206442593541 0.001 +0.9613679859399624 0.9827113270689787 0.001 +0.4044366127585459 1.025392403619202 0.001 +0.5036761132797584 0.1725467019559127 0.001 +0.3488918343531688 1.766840533909429 0.001 +-5.319585800173673 -9.093910651411024 0.001 +0.7380575661294584 0.8881443068103209 0.001 +0.4190601564843937 0.6061878206026986 0.001 +4.202614904889869 2.369770736111399 0.001 +3.360275035397787 0.9441119485152156 0.001 +0.9052215839912279 1.060003897602506 0.001 +0.9271906682177582 0.537067980488811 0.001 +0.7447803767735535 0.226043865182311 0.001 +0.7647170301193131 0.8474356078527536 0.001 +3.642539153914592 0.01188023211037945 0.001 +0.8684693114073299 0.6247510311999201 0.001 +0.2840486878353781 0.4685575954339609 0.001 +2.168620605937906 -2.50217186371574 0.001 +0.3493780949662143 1.082441938736132 0.001 +0.3792578053467225 0.6178421481570646 0.001 +3.210629802058469 0.461757432282513 0.001 +0.4929813325089886 0.3969462479296928 0.001 +0.62710312749055 0.3993892392381916 0.001 +0.1882223957506411 0.05356805695182126 0.001 +1.073735872701909 -1.079523902642479 0.001 +1.678639928802824 -0.2537378341014319 0.001 +0.4506086978339418 0.8291054942042064 0.001 +2.308781292356902 0.7821609154040066 0.001 +0.2845490345929045 0.5905977526997359 0.001 +0.567414763457049 0.3655940073930306 0.001 +1.025114049449352 9.154663560829269 0.001 +0.4827434702078115 0.1026012751997393 0.001 +2.576035900932989 0.9658646568258552 0.001 +18.87199012861052 0.8845779408573793 0.001 +0.5469505157565668 0.7412015299973487 0.001 +0.8303365181699895 1.042185603559721 0.001 +2.362397337593073 -0.1247827552588138 0.001 +0.5422864017289506 0.9843369537171607 0.001 +0.6552336892355333 1.080550538416591 0.001 +0.9628660092035979 0.4023123780969038 0.001 +1.340596023605223 0.8388759238328187 0.001 +0.5789238537823217 1.033557276746215 0.001 +0.6847489370913387 0.9617183162298251 0.001 +0.6281869131034954 1.047273613473644 0.001 +0.5081209369961454 0.624311402408618 0.001 +2.411160622296618 -0.1524087869754631 0.001 +0.1137497281626444 0.8369279224916115 0.001 +1.034046655490782 -2.300947496335156 0.001 +-1.971802274944594 3.037489991995471 0.001 +3.291579285417607 1.161680969163252 0.001 +0.3866469915300095 0.9427558832190153 0.001 +0.8907359147647081 0.4688697258567157 0.001 +0.4202238501911196 0.5589108349205687 0.001 +2.914620998484202 0.8209986990258499 0.001 +0.4076002456347911 0.9270849820276456 0.001 +0.555494683208795 0.3485353519640378 0.001 +0.7377743097638674 0.3861169005674014 0.001 +-0.07511084533877342 0.2187679906442186 0.001 +1.015684094733957 0.5385667768707094 0.001 +0.7449512523689691 1.048333465636316 0.001 +0.3848739344417416 0.8700480909024089 0.001 +0.6167302981309035 0.8078621346503613 0.001 +0.6338397776153668 0.3234942869699222 0.001 +0.5044249680043533 0.4204047491318554 0.001 +9.499027802444402 -5.874771261418918 0.001 +0.5231962248088053 0.3400868392676545 0.001 +0.5403015104693052 0.8758966663636754 0.001 +0.02991625075917962 0.5083899244600574 0.001 +0.8776641068323892 1.018768946330125 0.001 +3.190203301424923 1.592739564615625 0.001 +0.4982680609915451 0.8861641078936404 0.001 +0.06249562288545189 0.754301691297113 0.001 +0.5109941943235503 0.781972363299376 0.001 +0.5409760082170404 0.9040172371717179 0.001 +0.487671167479295 0.5955897268408916 0.001 +0.5120799937305841 0.6782191104309824 0.001 +0.5913375564730197 0.4079620960153393 0.001 +1.369747399855662 0.2229460255865904 0.001 +1.071755465984831 0.4069579527011815 0.001 +-7.687578000308929 -1.372238190442519 0.001 +0.635725646983577 0.8204859809444738 0.001 +0.08515416387370252 0.418134892341587 0.001 +0.7217820000912752 0.5593864606220016 0.001 +1.205848481354005 0.1750862425479719 0.001 +0.702429406066209 0.8274341947012274 0.001 +0.3693911519666999 1.067148140537784 0.001 +0.3146139408120469 0.6568456737559825 0.001 +0.6052013085005441 0.251217445848302 0.001 +0.963097257674426 0.04742040087700648 0.001 +-7.376941474270764 -2.805913720555618 0.001 +0.006474626767184597 -0.1495312466897489 0.001 +-0.01257442877688395 -0.1995452634062317 0.001 +0.3060826029773195 0.1840844865255711 0.001 +0.4517738274638248 0.531122277605043 0.001 +3.13245940030174 0.5415138131985822 0.001 +0.7928687935045996 0.5245819282884825 0.001 +-0.1392567136922007 2.218693815774226 0.001 +0.5149865184837722 0.3804579441481341 0.001 +0.8388566407198343 1.079604051945976 0.001 +0.8621285846086214 1.088040791948034 0.001 +0.8063359530536031 1.09996877758797 0.001 +0.1136108266947096 0.2495634248331551 0.001 +1.734130221352491 0.2016935612782281 0.001 +0.5025962546161972 0.721291431277489 0.001 +0.7153604839078073 0.7354704537159541 0.001 +0.5051836482251563 0.7417955919131284 0.001 +0.6334975445588281 1.110023575972051 0.001 +0.5607430692900266 1.061466537290483 0.001 +0.5427587777387637 0.5856363348139638 0.001 +0.5453093292756913 0.8267534616003042 0.001 +0.4399098714604188 0.6005413980368944 0.001 +0.6587396103164327 1.00425337756055 0.001 +0.6844976483494208 0.9855690724064229 0.001 +0.7094387607502265 0.988834613859488 0.001 +0.5728844047478854 0.7849756032850272 0.001 +-0.1925650513331931 1.294167291254677 0.001 +1.517589392565703 0.09183385146977402 0.001 +0.3607066687137706 0.9121003483121599 0.001 +0.1879071959089059 0.5365543881970334 0.001 +0.4084642355750039 0.7432365337410203 0.001 +2.189522357171112 5.135255624901665 0.001 +2.311286662434347 -0.8524111743490028 0.001 +0.6686708199184884 0.7140173644116393 0.001 +0.5017184057880653 0.3568083853763345 0.001 +0.6885468176344824 0.4695408389066342 0.001 +0.6505360524304091 0.8370350978413778 0.001 +-0.07257175656000336 0.613884647269769 0.001 +0.7175035658805484 0.7190650384351909 0.001 +0.3260839517417575 0.6205237392402392 0.001 +0.283164467306988 0.5488362013510875 0.001 +-1.418833978358876 -2.688461975659515 0.001 +0.3899782957622961 0.4878453493847084 0.001 +0.5864722394190426 0.6496307232898451 0.001 +9.117023755848047 6.54791090403714 0.001 +0.362596893290089 0.9281643462229031 0.001 +3.971227648854492 -0.2666699887912302 0.001 +0.4357208382828639 0.4628747046202704 0.001 +0.6392510951642592 0.9220802633639157 0.001 +0.1645761638298761 0.9489834701090093 0.001 +0.4878309498726986 0.286426932319938 0.001 +0.4202584384382852 0.4997763952130195 0.001 +0.923785784801091 0.02549273493404027 0.001 +0.6861052184436297 -0.003761818945207556 0.001 +-7.552581808459294 8.94703762625395 0.001 +0.5694229700562852 0.8348447367876533 0.001 +0.5158869019923715 0.4823053982356242 0.001 +0.5248160764586246 0.554048207441032 0.001 +1.344822864952756 0.4034567372277242 0.001 +-9.131120262641847 5.857307033616507 0.001 +0.5785663755318476 1.051457608432732 0.001 +-0.09473775778937944 0.2049904214263396 0.001 +0.4758240109123323 0.8829251379104796 0.001 +0.2978435973296241 0.6157891296884032 0.001 +0.8717625808528157 1.067857072435915 0.001 +2.17642668201925 -0.01430643663615066 0.001 +-0.1392234888799547 0.8850194094955761 0.001 +0.5733504927294855 0.5713561163345994 0.001 +0.5483714770610675 0.7110343480883019 0.001 +-0.08092442250973218 0.6775621824434219 0.001 +0.1627645620378159 0.02414467532546663 0.001 +3.911021685541856 0.4553619166070916 0.001 +-2.045700534029966 -2.056325478835292 0.001 +0.3916591230065953 0.3619841055931325 0.001 +6.833149726935322 1.383779735621835 0.001 +0.2963979358743177 0.048203540476515 0.001 +0.7613848673284634 0.9419457128359647 0.001 +-0.7249064597216905 -0.3250909378443899 0.001 +0.5033403391103873 0.9637617352106007 0.001 +0.641365446239047 0.4713184127739132 0.001 +0.2311888549002015 0.6864092132069265 0.001 +0.3484175908157265 0.6063928505195705 0.001 +2.615998814016147 -0.8393492482650237 0.001 +0.5127656216086572 0.6013748007912157 0.001 +5.004507536854738 2.165862279869893 0.001 +1.051049889089096 -0.1994815749861496 0.001 +0.4675520216656557 0.6312206738036736 0.001 +0.6280197025076938 0.6139810074738812 0.001 +-9.175534132317321 -7.858504138251117 0.001 +0.1824259604820398 0.7741810617136857 0.001 +0.7836168866681293 0.3022847956256606 0.001 +0.2632688409281901 0.5893892610434677 0.001 +0.5151301814190306 0.7100559132433332 0.001 +1.67396096811027 -0.1414556163465008 0.001 +0.4683562380748759 0.845530621667225 0.001 +-5.377228596646064 0.935009002799545 0.001 +0.7260490954796636 0.9643037040814935 0.001 +0.4083375228965886 0.77898449191182 0.001 +0.4125822598118905 0.8032404039639559 0.001 +1.86758070688542 0.1549877168665798 0.001 +0.7723842728208906 0.7127905060527205 0.001 +1.598198958674177 0.2055608183571871 0.001 +4.11153726585469 0.3675630299564051 0.001 +0.7125892076649714 1.016066233661339 0.001 +1.115123333785041 -0.04942602971489059 0.001 +1.13811905685571 -0.03443152016442695 0.001 +1.158795679000858 -0.009037114159541977 0.001 +0.6797158314337437 0.5795213037629422 0.001 +2.994793635870897 -0.1170325620106992 0.001 +0.6131245112035425 0.4182485765709413 0.001 +0.2529667735794026 0.4023931935822035 0.001 +0.4512060798942652 1.044534265441698 0.001 +1.073931715383426 0.2406053206516192 0.001 +1.829175413982391 0.741015911198634 0.001 +0.3143402460084128 1.046704178729381 0.001 +0.2388446794473224 -0.7984197213420903 0.001 +0.7801947121039738 1.017630621984771 0.001 +-0.0951785141963376 0.2657059686059494 0.001 +2.016058785716169 1.038642130131263 0.001 +16.37995809381178 -5.531905515363995 0.001 +0.5246490463721237 0.6571952665886623 0.001 +2.382885444483222 -0.008205296938331066 0.001 +0.9104584465946625 0.9833189040991284 0.001 +1.133550401749712 0.09404676032979477 0.001 +3.974242972528125 -0.07279850976956972 0.001 +1.659450060434714 0.8125890237008051 0.001 +-0.1277869676771587 0.1587598690083813 0.001 +2.755473220355023 0.2420605467927529 0.001 +0.6608918560812393 0.9551889393521575 0.001 +0.7861523138130424 0.6924374789024028 0.001 +0.7776253948959837 0.650992606727637 0.001 +0.5630527166314141 0.6174825679443716 0.001 +3.268545564101757 1.092186937295491 0.001 +0.4312238861134857 0.7258189181226909 0.001 +0.8275196050759621 0.08326357259796734 0.001 +0.816413857390122 0.0605791214771389 0.001 +1.724243865198659 -1.10977401928421 0.001 +0.606805069069127 1.014573171130339 0.001 +0.664897921929443 0.9312725468783514 0.001 +11.55984573535771 -5.823772082241065 0.001 +0.4903622233902539 0.6655464348315389 0.001 +5.167329740557452 -0.01820341243620581 0.001 +0.5841321673840884 0.3779151423971541 0.001 +0.5513173687219113 0.3825650908206556 0.001 +0.6124859367097473 0.6544655225799534 0.001 +0.4326438615719106 0.9307656533771649 0.001 +2.025480713163941 -7.128123636265415 0.001 +0.5753990341725441 0.3390384963141039 0.001 +3.008320263976612 0.1010433320874344 0.001 +3.577812396747438 0.3299439519295102 0.001 +0.4608546288083303 0.3891513933153428 0.001 +0.2631543412506546 0.7245726498762458 0.001 +0.02418281558867876 -0.08129213338437949 0.001 +2.864350259316767 -0.401208373674774 0.001 +2.936625830866715 0.0996547992193709 0.001 +0.3118137130776389 0.2218800258271175 0.001 +0.585010230542235 0.230717326183745 0.001 +0.6336487941261224 0.9977790791856863 0.001 +0.681076758862787 1.082937062483444 0.001 +0.1923887565047437 0.6097826584272926 0.001 +-0.04281716599239768 0.4616805890148795 0.001 +0.7498652985052121 0.8667224008567084 0.001 +0.5869580232435375 0.5259823755398269 0.001 +0.6833907661333484 1.036443750781346 0.001 +1.239194763793119 0.9337278053006055 0.001 +0.7928916506900858 1.038310236155558 0.001 +3.865206676923521 0.5148980405573098 0.001 +3.627060876078147 0.7676331110715611 0.001 +0.8024805861241172 0.7998216488764528 0.001 +0.9129438848019711 0.09115411157452577 0.001 +0.935469373855351 0.1238969370068127 0.001 +0.5478769522011485 0.2410881207200417 0.001 +0.6948150325474949 0.9191322063526439 0.001 +0.2877657708264139 -0.06319573243409886 0.001 +0.1023972317197219 -0.05247115163583606 0.001 +3.75623437604916 1.045868239591481 0.001 +2.315181635112351 -0.1703176862817131 0.001 +0.5933006866842186 0.9877695861816905 0.001 +0.4599470445944372 0.1443290090911535 0.001 +0.6381503885966149 0.4512559049711307 0.001 +0.5063098690994378 0.2657182529808474 0.001 +0.6345870327862256 0.9736427142156974 0.001 +0.77682135484531 1.072516762679818 0.001 +0.5626729086214517 0.72586729769233 0.001 +0.3370453174124936 0.6434061479861048 0.001 +0.217064837255027 0.05500586150324854 0.001 +-0.1656995733405838 0.6477264224787813 0.001 +0.6130843959392762 0.3033692162853412 0.001 +0.3071647892805858 0.5617989007522483 0.001 +1.654655004199962 -1.619516628673369 0.001 +0.5291129052824637 0.931582194851007 0.001 +0.6015827443877807 0.4849986447203767 0.001 +-0.1025353505348745 0.07536863062856489 0.001 +-0.08820756793319054 0.04024520766326504 0.001 +0.7595007414835016 1.26338625457263 0.001 +0.7490078544858011 0.7023578422247853 0.001 +0.464949908675615 0.9958886423945229 0.001 +0.5663649234120738 0.4476198011411929 0.001 +0.5809177370215268 0.8156763024607538 0.001 +0.03532452331858467 1.096137986565521 0.001 +0.3203910518136761 0.5076881517792549 0.001 +0.576271547111584 0.9170714876347528 0.001 +0.2742896054903566 0.102462013571653 0.001 +0.6849790598575387 0.5214192096627639 0.001 +0.4021722270898901 0.6542818932574519 0.001 +0.6093347006417064 0.9438061648736694 0.001 +0.4967994170437461 0.4584304472225326 0.001 +0.3558023967684225 0.242680759706376 0.001 +0.4435135153308552 0.4892214586507888 0.001 +0.9045797458009821 0.4037366882736442 0.001 +0.757083690791411 0.1352696208999934 0.001 +3.2179852333403 0.6836402403863922 0.001 +2.384634164647452 -1.537259914924487 0.001 +0.8560304691246067 0.08656835448070377 0.001 +0.6033539903881006 0.8297762788440193 0.001 +3.357685810811767 0.2728189731772833 0.001 +13.18726993462096 7.314787324694192 0.001 +0.4587316542285946 0.5644429663043038 0.001 +0.7449013837799812 1.015968356410244 0.001 +0.5646414126464018 0.2165414883711235 0.001 +0.6652060673930564 0.8811963044921098 0.001 +0.5936584608053127 0.8804466702552595 0.001 +0.5346871688363709 1.043117436048075 0.001 +0.1410287379142992 0.5746076233986338 0.001 +0.7545696803642844 0.9761561052706113 0.001 +0.7311526807678177 0.9401002735356 0.001 +-0.08366454705114433 0.3314925016189003 0.001 +2.049587468681303 0.1880121224851461 0.001 +2.152959823610979 0.9215053733189844 0.001 +0.4367043850318867 0.6896804463830186 0.001 +0.1500746779697372 0.6275504934149888 0.001 +0.9074894819057294 0.6131108473014856 0.001 +0.5785260819771771 0.4275511962889105 0.001 +6.197869732699559 2.608644333220332 0.001 +0.4601659658424711 0.9616402412405565 0.001 +0.4289983738236762 0.954689775245253 0.001 +0.6733977049686104 1.484903238247894 0.001 +0.5328791280277473 0.533658162169162 0.001 +3.843380690307914 -0.09364051201498419 0.001 +0.4709235856184273 0.5109336690698657 0.001 +0.5386714341290424 0.1694794387324344 0.001 +1.262298629331967 0.5730828001777984 0.001 +0.5389852564190285 0.513233187895099 0.001 +0.9208445852570107 0.7526176972780485 0.001 +0.8321613159457962 1.007278013941787 0.001 +1.158946853592842 0.3729523416269271 0.001 +0.5543024772162155 0.6740608840451444 0.001 +0.8757997911975175 0.1071855213299083 0.001 +17.86996604687802 1.288336794657977 0.001 +0.4987741257074679 0.5392923052846939 0.001 +0.6096282248868242 0.8525687475427464 0.001 +0.5174728416571814 -0.06697324028819215 0.001 +-4.349522305276184 4.612465853611033 0.001 +2.595912105699687 1.644173746744003 0.001 +5.128945541695025 0.3795399560594114 0.001 +0.2754624410349504 0.6436554499174824 0.001 +1.127231960252375 1.235401326569681 0.001 +-0.04909129788126003 1.10835660924863 0.001 +4.018423385697033 6.680506674199997 0.001 +0.907456875848127 1.006085429276936 0.001 +15.01288768421413 3.905979045432016 0.001 +0.3001020511723811 1.085068647992997 0.001 +1.029112231186656 0.2584267358662424 0.001 +0.4656560537931076 0.6170726787103701 0.001 +5.150915095501163 -8.894446918139691 0.001 +0.5559538226578356 0.5412324967330385 0.001 +0.4830659818553301 0.8263088653147146 0.001 +0.1397406845888424 -0.2230650819222973 0.001 +0.5507207252986954 0.7733563489114519 0.001 +0.4409408973859715 0.4015465865809142 0.001 +2.819103334321681 -0.6421207156110077 0.001 +0.2402881066118787 0.9210122578704754 0.001 +1.109308164094023 1.004510011453634 0.001 +1.00681379665379 0.2572932646034111 0.001 +5.665493859216689 1.700505724240549 0.001 +15.67724161876582 9.124029874339298 0.001 +0.07775490937203697 -0.009216675571823605 0.001 +0.224455957224495 0.8544164510532969 0.001 +0.4712897036255861 0.2282806001713615 0.001 +0.3544490711122149 0.540483357963999 0.001 +2.311450858659856 1.012255714694217 0.001 +0.4610481177712247 0.7302847172514992 0.001 +8.37754309720922 1.120414797774353 0.001 +1.219561148719698 -0.2216089485378056 0.001 +0.3432887684142175 0.0227143126008227 0.001 +17.77490414008412 8.798677366368931 0.001 +2.694932896755793 0.5433558162614647 0.001 +0.684036296817997 0.3254065606124139 0.001 +0.4574932276543559 0.9098227674429531 0.001 +0.9857439597573625 0.6668411834093451 0.001 +-4.378628159822901 -1.558893121573167 0.001 +3.639095576909929 8.859720293437992 0.001 +0.5105042721616948 0.8728547027319429 0.001 +0.5169789758052534 0.9943201814609293 0.001 +3.17247330883571 -1.225940835901416 0.001 +3.505638468260431 1.208420857976709 0.001 +0.5666725013931798 0.9763182717368294 0.001 +0.587708044553176 0.7656241223748694 0.001 +0.4342269079355114 0.2274550929759861 0.001 +12.02586974964005 9.081952889361578 0.001 +0.5506388080936885 1.011105833192547 0.001 +0.8756429543944486 0.3158991249599072 0.001 +0.5570228365087267 0.4173012401011435 0.001 +0.7638677360299531 0.6105835720772956 0.001 +5.919154545518338 -5.65139250954265 0.001 +0.315901283753921 1.188285803127285 0.001 +0.5889843581627144 0.4566880412367239 0.001 +0.6837347552343211 1.108778567698242 0.001 +0.5199525465410699 0.05810220498018655 0.001 +2.352903189854443 -0.2799080913315224 0.001 +0.6975324388945061 0.6665978811914325 0.001 +0.6347340161014339 0.6345935706107703 0.001 +0.6175909619208798 0.3677504331917008 0.001 +2.071325861226867 1.258038926100066 0.001 +0.3464278121286651 0.3802264790232065 0.001 +1.267884372785099 0.4422310596035525 0.001 +0.9502547948552597 0.3185086223233868 0.001 +-0.01603440393631069 0.6961270850492343 0.001 +2.888172546060153 2.962651010769073 0.001 +0.25891684828315 0.9639604793886284 0.001 +0.6725974179302925 0.9090438733399741 0.001 +0.1922646281450534 1.096173742130376 0.001 +0.8429774217007987 0.4725273979370614 0.001 +4.314031182872763 -0.7453330934730182 0.001 +-0.005437494289039042 1.953321809076487 0.001 +0.6576330217119678 -0.05730208737726082 0.001 +-0.07041730689038699 0.9524134113841234 0.001 +3.414117062709546 0.4004427826273693 0.001 +1.052600247753635 0.2157759596757235 0.001 +0.3678724200768961 0.5016337621419752 0.001 +0.3485284231861878 0.1446866580076773 0.001 +0.9431597593890602 0.4583987518801097 0.001 +9.863495675448775 -3.56297051283637 0.001 +1.785076598635536 0.5360150297938423 0.001 +3.690486236759548 4.107510405773366 0.001 +0.1185590208670857 0.2049601525023139 0.001 +3.189367083781783 1.356908031238013 0.001 +0.8919478609607265 1.538025874711338 0.001 +-0.3907117965607724 1.301587800957939 0.001 +0.6549959575494654 0.2852630073250831 0.001 +1.734286927864755 0.3329347353776705 0.001 +13.60615280199355 2.700587904343816 0.001 +0.03423439861368655 0.3279347229886208 0.001 +0.013204618704954 0.3256512950906527 0.001 +2.086254112374986 0.350480242617305 0.001 +0.4480485056126515 0.3691374086015445 0.001 +1.030148123565646 0.3864670779851798 0.001 +6.230880082537258 -0.6000638361355288 0.001 +0.08808142827882634 0.9892816149035936 0.001 +0.5107363740109567 -0.01604520501983254 0.001 +-0.1946657855433752 0.1956336877391355 0.001 +3.962684391057995 -2.036449015987574 0.001 +3.955442161384444 0.6578830227428099 0.001 +3.711566116728156 -0.2181372394800407 0.001 +-0.04053086693904052 0.377057474983736 0.001 +0.5267404069048379 0.9139323532461914 0.001 +0.4463473785381983 7.553365630602915 0.001 +0.3619723813908949 0.6853599128360364 0.001 +0.4941604537430579 0.5108541730854863 0.001 +0.4218370567905103 0.3153741497550966 0.001 +0.264067337748414 0.337740914922373 0.001 +0.5796745001628205 0.7367566388747786 0.001 +1.37790785906943 0.5050247610291346 0.001 +0.8171921859546684 0.3108977138000777 0.001 +-0.2382961588636536 -3.114935603900443 0.001 +0.8750781373335413 0.3996216389947302 0.001 +0.3294710020261147 0.4031438556902279 0.001 +0.07709570443266277 0.4491166321001565 0.001 +3.47310430928918 0.8840602577125366 0.001 +0.6668656275695423 0.6287011492451801 0.001 +4.040848713418238 -0.01637496885805443 0.001 +3.357202595627577 0.1432839445419213 0.001 +0.7263682379127919 1.079168506007369 0.001 +-4.849352283369967 -4.384368334707926 0.001 +0.4371922548297201 0.2827389428908042 0.001 +0.4009164871638939 1.347995367557597 0.001 +0.3139510175852198 1.108311558572315 0.001 +7.725527422175231 -7.132330464218416 0.001 +0.5643507606207975 0.8568044979928179 0.001 +0.3994359008481072 0.609920636420162 0.001 +-0.009866537565606317 1.022751616386602 0.001 +0.4810474896231426 0.6369227989579243 0.001 +0.4324685872278988 0.5791688836455016 0.001 +-5.642467457803794 5.66895243799482 0.001 +0.84889954646633 0.3663611137248161 0.001 +4.997968360295976 -7.568361624645184 0.001 +0.7204807058469506 0.6162247397184928 0.001 +0.8064869856578867 0.9686213782370641 0.001 +1.050760853231989 0.5010521568832091 0.001 +0.6248386199945052 0.0216344458191888 0.001 +0.6981356927376468 0.784164366879729 0.001 +-0.05300365998367233 1.201012572031916 0.001 +3.178937712933842 0.9882532104927247 0.001 +0.3268275281850315 0.7694462014636996 0.001 +-9.279818414725007 -5.350819981332364 0.001 +0.9882136457026257 0.3135647520426499 0.001 +3.58309844935158 1.363656672414659 0.001 +0.6099814583883645 0.7769211031882326 0.001 +-0.01071045425284894 0.6033745454118448 0.001 +0.1333217501911275 0.2058220958885142 0.001 +0.9617482709124507 0.2717069510852634 0.001 +0.530407335307474 0.2770402579864965 0.001 +1.922053775981339 0.1967094945304421 0.001 +0.6626862599524763 0.6022188863853948 0.001 +0.5675403155673773 0.5940516038559607 0.001 +1.612234988474885 1.365348784170786 0.001 +0.8437868870518288 0.01712403760960154 0.001 +0.8015184493265124 -0.1644258756462934 0.001 +3.71372154721634 -0.07726994182389135 0.001 +3.918563725852579 0.6370566925137218 0.001 +4.688966890850748 0.8436240979461717 0.001 +0.4861540974668716 0.7161446168269043 0.001 +0.09076253145085006 -0.09615476017944251 0.001 +0.1689227989252995 0.3969314463906198 0.001 +-2.63351977469591 -4.77444222203022 0.001 +0.3696249775154504 0.6510719062320318 0.001 +-0.04461827676867733 0.9815789069243807 0.001 +0.421526056455531 0.9783714786614914 0.001 +0.3776980818379352 0.8998314408545932 0.001 +0.923609215251243 0.5588092288434974 0.001 +0.5305854041960247 0.429856905369273 0.001 +3.400991167648836 -0.1725924392190034 0.001 +1.638689461262288 0.3480213672028014 0.001 +0.597348974066863 0.5799589132800683 0.001 +0.7750227208289664 0.3371554354823186 0.001 +3.220386483354151 0.2792556467313176 0.001 +0.7081539757820207 0.9463069044901693 0.001 +0.6274440044742398 0.2566016008146499 0.001 +3.623151211836341 0.5341004537506667 0.001 +3.875977984551365 0.9500326446004301 0.001 +0.02087829925485253 0.7365629310129148 0.001 +0.1838945406860319 0.6982659011184131 0.001 +0.7061331635960064 0.3572969607550138 0.001 +0.4817327319362373 0.05344926762855026 0.001 +0.6694885960767678 0.02120739391416606 0.001 +0.2734143287157305 0.5217584113408759 0.001 +4.458121514468537 -0.1104219985143261 0.001 +0.3028938801815741 0.8723826400478163 0.001 +0.2984219472687386 0.8998560665547328 0.001 +0.5847397318275561 0.2851897411684125 0.001 +0.5888922605059677 0.6995659783971055 0.001 +0.9896289919689828 0.1276805157640244 0.001 +0.1185691811420912 0.4241643446687783 0.001 +0.6386243890977659 0.8674795928623849 0.001 +-4.829516596695593 7.662263080627789 0.001 +0.5076799572315556 0.9054114827803078 0.001 +0.6551233143484126 0.6400047861482857 0.001 +0.6571383059933216 0.5268197180453241 0.001 +0.6409157630304106 0.5110041053752011 0.001 +-0.07712501246354825 0.6472561361602721 0.001 +-0.0004307015141466957 0.4696851856182925 0.001 +-0.1340253182148941 0.941433151043953 0.001 +0.229841944083144 0.7959676869784791 0.001 +0.5090411782093616 0.3123009512077222 0.001 +0.3962400403954752 0.4235283895724262 0.001 +1.872702976648681 0.9385815267087898 0.001 +0.4275174331144132 0.1545870196796525 0.001 +4.204180356785521 1.454675210874683 0.001 +-1.414350305241415 7.846888797832129 0.001 +0.5330808804949076 -0.08398192891098712 0.001 +15.88621693170133 -4.058522898304736 0.001 +1.222813834211025 -0.4801255325062529 0.001 +-5.987039790522135 9.113196267201738 0.001 +-0.04543935908676337 0.3016260469212114 0.001 +0.3033291376625886 0.5037301117125783 0.001 +0.5582385960777494 -0.006596355033935856 0.001 +0.7000232407975218 0.4250729660613712 0.001 +0.4556740477154292 0.6401379363478281 0.001 +12.27180946663078 2.840557418859738 0.001 +1.673615973218236 0.4482657657520021 0.001 +9.385201745632397 -7.240083785379179 0.001 +1.487493586137887 1.142500747575358 0.001 +0.6571092325420445 0.3017066239993403 0.001 +0.9031776152641242 1.229177370292037 0.001 +17.85607241974578 -3.377528715164409 0.001 +0.9395717600767819 0.06961549197651028 0.001 +1.059957735074927 -0.02340086657214241 0.001 +-0.343049763081839 -0.1022108892958791 0.001 +0.3573268203409495 -0.07303454725908338 0.001 +1.052870598091888 0.3837725844560549 0.001 +1.054737389292409 1.070496339939558 0.001 +0.6598019276567825 0.3540643251915945 0.001 +3.262431733092357 0.5390639667590373 0.001 +2.514617863310249 0.4661033194860932 0.001 +0.3734146361161803 0.3460850006875706 0.001 +0.4386351453077186 0.8098986705291013 0.001 +3.74924698763695 0.7483784300531475 0.001 +3.090674701201602 0.1158336123258001 0.001 +0.1046623845923757 1.16259196036882 0.001 +1.150677128415219 1.669017940083012 0.001 +6.034795373738584 1.447257017153441 0.001 +-0.2514359395940979 0.8699558135432256 0.001 +0.04848067074226248 0.7046875683771447 0.001 +0.6229763812578419 0.4954833836882927 0.001 +0.7692146788155588 0.5469303917995729 0.001 +0.4285502468244611 0.5230534584958632 0.001 +0.9880614329888806 -0.06213434540675546 0.001 +0.2154817431907975 0.1769271043024605 0.001 +0.5551019772934001 0.4685107712953 0.001 +0.6910610380460922 0.8685470154569368 0.001 +1.366685767889713 0.7465959434975237 0.001 +6.689944669720998 -0.3592849021389849 0.001 +0.6799920800073624 0.8437305299418268 0.001 +-3.162244655261833 -0.2492443982847949 0.001 +0.5959944094731395 1.098760162797406 0.001 +0.2932900845487643 -0.03253352332397003 0.001 +2.061483270870525 0.4252870888048218 0.001 +-1.070935574427761 0.1435639559496673 0.001 +0.4358722721018113 0.06332503600818774 0.001 +2.924126764155516 0.3503747259961049 0.001 +0.4124010538845472 1.001858635400448 0.001 +0.8463171978200607 1.173328715841879 0.001 +2.188792190110774 1.668459753950947 0.001 +0.3957615120746539 0.293164801743693 0.001 +0.6000306897357003 -0.6098122742640029 0.001 +9.570036754331293 9.169504340615434 0.001 +0.9057629525665473 0.1898826771306339 0.001 +14.32399445177576 5.799492273143424 0.001 +0.504384729196715 1.031397932941774 0.001 +1.552219568162574 0.01185729919962442 0.001 +2.381414685697068 0.3571947077570308 0.001 +0.3387510371778575 0.2212872510935163 0.001 +0.8282410299057625 -0.8113278777095875 0.001 +0.6130278743182521 0.6093879823594138 0.001 +0.1991363273392572 0.4546337896643377 0.001 +0.9374732712764076 0.2631342932730649 0.001 +4.189254864214776 -4.544544489716917 0.001 +1.781426711197461 0.4274911000554581 0.001 +0.2321592754427002 -0.1223912248607264 0.001 +3.011022096063395 -0.9285226893678058 0.001 +0.6627726950132122 0.5572593596449502 0.001 +4.597701538137096 -2.504407790485223 0.001 +3.530173184153861 0.06865675481031065 0.001 +0.0604382467752777 0.2073073198320571 0.001 +9.249594651979979 -9.220436264807347 0.001 +0.6656466160168818 -0.3059156965640991 0.001 +0.6770557366194444 0.5633058561336807 0.001 +0.2431865214664014 1.018131316967364 0.001 +0.6406266835168742 0.6826059778929066 0.001 +0.5236834198926994 1.171210847792575 0.001 +5.447123579537267 9.034542718117148 0.001 +0.3200461335583349 0.2666284021120016 0.001 +0.6398578694372021 1.128469544738529 0.001 +3.341006698700134 -0.6461668015063164 0.001 +0.100524985579216 -3.937456791368483 0.001 +1.031993901308724 0.1155077838196038 0.001 +1.050075485884488 0.06467637847779817 0.001 +2.788260587480575 -0.1928556748715154 0.001 +0.3992894642155708 0.5810523264327367 0.001 +4.098756796862682 2.931004908778209 0.001 +-0.1698014877389533 0.9513542634722355 0.001 +1.206177226869122 -0.03794634883219339 0.001 +2.524884092988675 -0.171730062833744 0.001 +1.306557405025007 1.587946209093244 0.001 +0.5654668833054692 1.160514415048898 0.001 +-0.04728767836665806 0.5574021816444401 0.001 +0.5778039320699353 0.2615907661877366 0.001 +3.071446640212128 -0.4953760279487325 0.001 +0.721728954419022 0.9503073331515879 0.001 +0.3887211616923854 0.6372358692307576 0.001 +0.5239891526968133 1.076558459325124 0.001 +3.371221549574693 0.008676835925561585 0.001 +4.387596090982791 0.5261110408398593 0.001 +-0.1579887949122073 0.8444338332942116 0.001 +0.3672757054145103 0.8149020998220921 0.001 +0.6406576285708161 0.211878845176519 0.001 +0.8715758884685625 0.9981019216170074 0.001 +3.531816887425418 -0.7890796405917033 0.001 +1.02338043631678 0.5822651265335507 0.001 +2.044075198139473 0.06420653294289522 0.001 +1.084357201006839 1.018325297918306 0.001 +0.008725082664145008 0.8855565145707393 0.001 +0.6169082276230452 0.5294887044958074 0.001 +0.1280111460633878 0.4970920879906946 0.001 +0.9426658476797151 1.052857003559297 0.001 +0.6303618697756048 0.8467058454707415 0.001 +12.60557489678126 5.029885895933434 0.001 +0.4818506307103596 0.9327938281706176 0.001 +0.320987358068988 0.1398674318546672 0.001 +0.7373828018435096 0.6656622729435386 0.001 +0.361359329663983 0.8374969710848517 0.001 +2.021673207240755 -0.3021982036092711 0.001 +3.74012140911055 -0.4545415549451751 0.001 +0.2454727745198411 0.6056352446825938 0.001 +0.6373613984289521 0.6013818666439182 0.001 +2.772023599709395 -1.573236886912564 0.001 +3.873398764537422 1.1872116262955 0.001 +14.68712571221743 8.219656597420201 0.001 +0.381232523078396 0.4628005716627515 0.001 +0.134186585954959 0.926744802662874 0.001 +3.135944497632839 1.900957333512852 0.001 +0.5697686010556403 0.4982281325599959 0.001 +1.283651392763014 0.3145945958476983 0.001 +2.208298168086902 1.031792403861835 0.001 +0.4761296414724717 0.6853497342153865 0.001 +0.8056210442611916 1.120486584404868 0.001 +1.648260717914223 1.858992464633636 0.001 +3.655233890806122 0.9764244466761448 0.001 +4.363980997713039 1.025002659952176 0.001 +3.693148173324025 1.099719357478829 0.001 +0.7634468180517832 0.7338953904406847 0.001 +2.471099497915881 0.6601972114100777 0.001 +0.5400662122833675 1.059606677202101 0.001 +1.765257915265636 -0.8956523077042571 0.001 +0.3012452676916462 0.9606954069233558 0.001 +4.411916239917361 0.05927506966016931 0.001 +3.152435229951639 -0.1014406439971671 0.001 +4.89008467194973 0.6523465288096227 0.001 +0.6481852441233799 0.7697860403269217 0.001 +-1.917811571371946 0.1590074838010251 0.001 +-0.1146979872992435 0.009783954743222554 0.001 +-0.163945873073943 0.02301982918150661 0.001 +-8.869581139177294 7.513143003927482 0.001 +0.6058252447167896 0.5571048940229518 0.001 +0.7995943694496012 1.003308069320908 0.001 +0.7569438570293195 1.101302818554983 0.001 +0.2298768615267036 4.099604152848348 0.001 +1.391736324468097 0.5971961795347753 0.001 +1.021649435875608 0.6411281744321042 0.001 +-0.2916816724956724 -0.3999123349340067 0.001 +1.072159245684815 -0.1363549872614443 0.001 +3.853163807195554 5.175045600512133 0.001 +0.6161970862143331 0.0992577883696934 0.001 +-0.08570847607233764 0.7220099137730377 0.001 +-0.1426619158419975 -0.2831299526771269 0.001 +-0.8422868514654011 -2.451670897038475 0.001 +-3.080066235078551 1.069440895109087 0.001 +3.869693926492312 1.423972466189034 0.001 +0.3240639914601268 0.1675251023771754 0.001 +0.2219916414526339 0.5970220733329619 0.001 +0.1424807328632578 0.380568232547544 0.001 +0.1916016111290666 0.8201348514759751 0.001 +2.735951191337534 1.05329634981477 0.001 +0.3632074939029817 0.5668602654001612 0.001 +3.918268282276617 0.8389362446165912 0.001 +0.594839414377155 0.3590507670517311 0.001 +0.002078557917604091 0.02341043092806325 0.001 +0.422814166023594 -0.004160484873933651 0.001 +0.9667171609132053 0.298811458775197 0.001 +0.6166246998724542 0.3199538529395807 0.001 +0.9733041044114049 0.004848585707034913 0.001 +3.325460132315422 1.235594296020597 0.001 +1.307397010643 1.03931908952951 0.001 +3.809001372521852 1.043193343169606 0.001 +0.8686600456903728 0.8821331645730921 0.001 +1.357887516634468 0.01060946210195512 0.001 +3.993041799741384 0.1211551592708314 0.001 +1.08609191848743 0.1924430314890936 0.001 +7.056563381948642 3.722230354968169 0.001 +0.962374282513301 1.102079137324663 0.001 +3.324762346051338 0.07066837607587707 0.001 +1.163531821700825 0.07422472775030908 0.001 +-0.1593611033653096 0.1735046519482438 0.001 +0.3620033623576261 -0.1223919361012042 0.001 +0.3428898418860509 -0.09933411054388699 0.001 +1.610969445385069 0.6579828296796028 0.001 +0.2091107732635635 0.2281949919812795 0.001 +3.055353763499809 0.2984944021881398 0.001 +0.1092916942167083 0.152348974754749 0.001 +0.4126710951265324 0.3819402138968835 0.001 +0.7729485325418072 0.3755211733943974 0.001 +1.999831376162814 0.260986001161197 0.001 +0.9383836590870266 1.012145795357261 0.001 +2.414963417637297 0.4748026828781305 0.001 +0.06097601228653744 1.072897195818585 0.001 +3.565189182468795 -0.1900221051672468 0.001 +1.103645199381067 0.0172782554609339 0.001 +0.709537316444267 0.5941818684030731 0.001 +2.384234630743068 0.6789618860246881 0.001 +0.6892497583293887 0.7986653000067001 0.001 +-0.02832921889406538 0.4285125661754672 0.001 +1.282334792336248 -0.07404715042620501 0.001 +1.169979529881985 0.2822333061877162 0.001 +0.6835494049302461 0.3447415773265004 0.001 +-0.01171838087180428 1.064450820549635 0.001 +0.6015052358953255 0.3341394923419554 0.001 +4.404666738786824 -1.021125093337643 0.001 +-0.2710787010057157 0.1791349095487939 0.001 +3.368060082859198 0.8234260770650136 0.001 +1.640475639504796 0.07961834084994139 0.001 +3.221913367398174 -0.09249427294803378 0.001 +2.965743700244408 0.8428615600712605 0.001 +0.7092328286599665 0.4837658888531894 0.001 +1.943747393750218 -0.3015977047566585 0.001 +0.03309797899610727 0.2805133313168173 0.001 +3.273133979568848 0.8869731446544693 0.001 +0.6871990550232043 0.437706959999981 0.001 +0.2999543392336615 0.8330222347801055 0.001 +3.031621232423692 0.2485813760540361 0.001 +0.8804910172459472 0.4491873885541977 0.001 +0.6093646264606126 0.7258095767242263 0.001 +6.757034712457404 0.2922773526367715 0.001 +0.6675502885992001 0.494548497107081 0.001 +-9.153579062138348 2.073314031793636 0.001 +0.9792664288008881 0.3870381033014717 0.001 +0.7513528848315817 0.5024436715765488 0.001 +2.892943634794166 -1.035770279824436 0.001 +-0.02169322664277897 -0.1220544901764465 0.001 +-0.05558985198005048 0.6326157466444061 0.001 +3.954895612126937 0.593492118443145 0.001 +3.934562129632477 0.2350312121702917 0.001 +1.055011997452392 1.122480593574471 0.001 +3.486790397861906 -8.216565159988646 0.001 +0.726066252829821 0.9096376144137868 0.001 +19.15718926665836 -1.582541432325318 0.001 +0.6714832684219646 0.2452501325776451 0.001 +0.3980899345121484 0.6887884099855971 0.001 +0.441527820573725 0.1513590895012093 0.001 +3.239543932043228 0.05349210802610347 0.001 +3.725772934046028 2.140179196179335 0.001 +0.3461569555822281 0.7540974833880052 0.001 +0.8148565134318044 0.3769608103102973 0.001 +2.661208165594069 4.010521761972867 0.001 +2.143356812918896 0.3774105139216504 0.001 +-1.730163521790174 -5.985738853853214 0.001 +2.747308556769777 -0.08600031327156778 0.001 +-0.1532799344015376 0.7065741587998834 0.001 +0.1573879478841028 0.43117500848917 0.001 +4.233541890113673 -0.1793202495721327 0.001 +4.198410285303424 -0.3142897169939097 0.001 +1.897978520072999 0.7941919918571287 0.001 +4.116017771486834 -0.4556202381737861 0.001 +7.172326443132023 9.310356631520973 0.001 +-0.050208987925548 0.598287885717098 0.001 +0.2260866868366446 0.7226417281009526 0.001 +0.6135869137438003 0.6790937093774626 0.001 +0.316290867451532 0.9214611109213243 0.001 +1.017558861542681 1.052097397071084 0.001 +0.06807291893174197 0.841257737135267 0.001 +0.6281105141793463 0.3453302343367624 0.001 +6.008190029176038 7.180077849852452 0.001 +0.3416406781432696 -0.02755693416872895 0.001 +0.6489799765600313 0.4113073722315709 0.001 +0.34510733469139 0.7889648277837541 0.001 +1.871467888330157 -0.04552338141270541 0.001 +0.245554080354668 -0.08598085650604156 0.001 +17.36569613592364 5.836173631882502 0.001 +0.7007980008544464 0.6304791370486262 0.001 +0.9829781222883912 0.2546481439747876 0.001 +0.2882386199055788 1.033662675619224 0.001 +-0.06261513665662177 0.01615458263732846 0.001 +-0.03091110786149448 -0.01296721177300775 0.001 +-0.7767271053033495 5.024812917970479 0.001 +3.515435294614282 -0.5134475004616363 0.001 +0.1727492837993534 -0.1529827304451625 0.001 +2.407644460397207 -0.05236118285636502 0.001 +1.043150697497929 0.1572668791647397 0.001 +0.6459803126371839 0.1111345810905469 0.001 +0.8922925658390131 0.2177233920235548 0.001 +12.90455176226322 -3.822542283558241 0.001 +12.59055398572071 -1.9111757534908 0.001 +1.592499339861197 0.8891573474989114 0.001 +4.209878479302143 0.3698169080647545 0.001 +2.284713794201201 1.305586763609899 0.001 +-8.136851855289397 4.948787319644656 0.001 +-0.04004630798100581 0.6523278448648848 0.001 +-7.741022403725596 -4.681605786599021 0.001 +0.06099267638333397 1.027704490840705 0.001 +0.9614548053317803 0.09090153220290344 0.001 +0.9440985734631732 1.087667037676421 0.001 +0.7927728236057204 0.8888489892473319 0.001 +1.108427112035485 0.3148703848943608 0.001 +0.1185703437467216 0.5512866173429173 0.001 +0.4082242422725355 0.2432333983304124 0.001 +1.021666820379028 -0.01522394806085308 0.001 +1.007406421752013 1.00369399482144 0.001 +1.947861854861296 0.41657267057255 0.001 +2.070012224909703 8.938563963054417 0.001 +2.83881786515065 0.3021052813706673 0.001 +2.67055052360582 0.6740315471819686 0.001 +3.724019852188466 -0.8445014158891876 0.001 +4.000837719624178 0.552929299899685 0.001 +0.4811224922716488 0.02915450141835548 0.001 +0.2036462913305089 0.523673724510083 0.001 +-6.169376170192638 -1.784374276245304 0.001 +0.8928886806924321 -6.868193095806348 0.001 +9.70921073876646 3.838475330766452 0.001 +-7.573776988146172 -5.97463744932609 0.001 +1.040961359930122 0.3349277147067544 0.001 +0.2194496862772029 1.057783903754194 0.001 +0.01218285134568859 0.3948312639989371 0.001 +2.228431455530574 0.1937239778762132 0.001 +0.7408111137328189 0.5212245128348659 0.001 +4.385195281272194 0.7693309133160142 0.001 +0.9862821282619164 0.3520247457739286 0.001 +4.730481845888328 1.762204344880102 0.001 +0.4753529684080645 1.079580514701235 0.001 +1.01485682751838 0.4671989209146707 0.001 +3.969220667225858 -0.5085190892701248 0.001 +-0.01512807503332293 0.9772456810192642 0.001 +2.671532403045363 1.183400031765084 0.001 +2.305861024840466 -8.982195008284949 0.001 +2.989733035526577 1.715926393716626 0.001 +0.7470190043458987 0.4121266929263374 0.001 +0.9434946846349826 0.7806534408106428 0.001 +1.883641153718714 1.039582541608391 0.001 +0.1812337117269331 0.3500850797711466 0.001 +-0.423102225670982 0.3531089525345414 0.001 +3.217415911650354 0.3694777058798999 0.001 +0.3020739534548507 0.1273559893673097 0.001 +0.2694589907343299 0.1493682988892904 0.001 +13.05955634726848 4.588864967865837 0.001 +4.078910955337022 0.9542891562905992 0.001 +0.2635581752189795 -0.02845929769647809 0.001 +3.814265926830577 0.7276635670217674 0.001 +18.04936613274728 -7.021567523480868 0.001 +1.023828660796671 -1.629659460909169 0.001 +2.602697116624411 0.1452280040614979 0.001 +19.08786594400238 2.689290554561351 0.001 +5.626211828960028 0.129499148367249 0.001 +1.930345395075008 -0.416628115291967 0.001 +0.6950019212275681 0.6983882004225058 0.001 +0.1321843918862363 0.1653731169268626 0.001 +-1.659524635506089 2.630195314273397 0.001 +0.9581372576256911 0.6502658856771708 0.001 +2.096067927672278 0.6440860282945555 0.001 +0.8852992818212716 0.9598393409367967 0.001 +0.736209163994864 0.06444244133187876 0.001 +1.570908773894406 -2.855075118159012 0.001 +2.510272961682687 1.004000597546874 0.001 +0.07953452887332418 0.4974149917676443 0.001 +0.494547746535962 1.067728907702558 0.001 +0.8978855950305262 0.797603244920446 0.001 +16.44626543346513 3.911982064913581 0.001 +0.6611628842099594 0.6559465477497232 0.001 +3.658876875795605 0.1552702042398793 0.001 +0.2835155415199789 0.7079542773483415 0.001 +3.717298262736171 1.860730722710765 0.001 +0.3541791158423329 0.3310915020357812 0.001 +0.5994142589336248 0.05165083921239642 0.001 +-0.245347092382279 0.4032809765939014 0.001 +-0.2664454867816818 0.2990449470432139 0.001 +2.776415428634945 0.3701848231511293 0.001 +3.601211404410493 0.8918896455306884 0.001 +1.662131479652241 2.134460841646996 0.001 +0.9876442244730439 0.5842563281973885 0.001 +4.034561693967392 2.07689953429592 0.001 +1.20732264548594 -1.984389604563845 0.001 +0.2325417096249999 1.073372421841713 0.001 +1.082058410597627 0.5225461634085781 0.001 +0.8606035226406092 0.9640944771900369 0.001 +1.254973124501722 -0.03831075312246297 0.001 +4.840740818131553 4.409730410069168 0.001 +0.3740044215679554 0.3810996470511139 0.001 +3.197133754303817 2.720521715614203 0.001 +3.778041138157061 -0.03412098943436199 0.001 +0.7690926635156087 0.4574646910691693 0.001 +0.3544861862706381 -0.4050171947639433 0.001 +0.7254899258031225 0.8505513928831001 0.001 +0.4641871043650745 -0.00947862982235036 0.001 +4.832712773970213 1.023163569568839 0.001 +5.158868585113956 2.374379409371727 0.001 +0.754208987538256 0.2994771163781275 0.001 +0.9914281579396138 0.033728208920191 0.001 +2.616050738056982 0.4297306554691063 0.001 +2.037424452561986 0.8338852778706961 0.001 +0.7102330344669345 0.5103848677000263 0.001 +0.6960025155502851 0.3880199425317242 0.001 +1.415196965732037 0.2961821270750942 0.001 +1.009047435656093 0.2107170859386146 0.001 +0.9862348604805546 1.266122075731118 0.001 +2.861495728236049 1.1697290868191 0.001 +0.6402515353174777 0.7087164121816287 0.001 +4.041494311193134 1.593869199082677 0.001 +2.237413148413779 0.8167113683700686 0.001 +0.003168309117172108 0.9518691991791233 0.001 +0.4210157292885435 -0.09977977321714986 0.001 +0.8264939121721853 0.7640339101731944 0.001 +1.098846364367635 0.243971147202982 0.001 +1.027339669415273 0.3566806478863452 0.001 +1.77210039480945 -0.1306226589102025 0.001 +1.059561042115244 1.521236552507717 0.001 +2.802590121650726 0.748880711965547 0.001 +-0.1167456724833755 0.8071939620088354 0.001 +1.475896808373332 0.238166785086029 0.001 +0.7727738570837809 0.01740623564850253 0.001 +3.145833338697752 0.7257833452183796 0.001 +0.4469903996930459 0.2483446707291128 0.001 +1.901340036316963 0.8856228890440296 0.001 +0.8979755916897179 0.3046345035026929 0.001 +0.9171281223965865 0.8922268940742026 0.001 +0.0648184588908922 0.9384277808174492 0.001 +3.74226474228154 0.9831389097821088 0.001 +3.047452162561706 -2.527905090985741 0.001 +3.854244909886011 1.322306799453943 0.001 +0.8485378851270915 0.9360649929516076 0.001 +1.035866546118817 -0.0447492744386548 0.001 +2.177630004634257 0.6819216984258667 0.001 +-2.534959805694949 1.605737398772185 0.001 +3.411130714166594 0.6606069278381643 0.001 +0.3519682429608108 0.456729704310812 0.001 +0.1328485723155532 0.243274488926537 0.001 +16.86004044950575 1.852738189805878 0.001 +0.9237834321939795 1.802722563982931 0.001 +0.8713820744724003 0.02513703822195088 0.001 +3.149907485666577 0.3217833693277016 0.001 +3.071335238777816 1.187758455702698 0.001 +4.803635333877786 1.192883267971927 0.001 +4.61671061877823 -0.5401141770282798 0.001 +1.077963016501555 0.3629251138368425 0.001 +1.326814969806767 0.5104881947269548 0.001 +1.688583339877039 0.7637278522455238 0.001 +0.7171511840384477 0.6496096114138381 0.001 +3.295093939580829 0.6320403689348588 0.001 +2.390255909563151 1.489162332863939 0.001 +1.075485133964448 0.4722322516111082 0.001 +1.05120090545062 0.5527370537552836 0.001 +-0.02138943504751057 0.4012896464560388 0.001 +-0.03344320689257794 1.057114111794317 0.001 +0.9838830370425173 0.7256404552379531 0.001 +0.1275037588030017 -2.238032279370053 0.001 +2.804040875797136 0.9279601123973833 0.001 +2.690851483158386 -0.3248945393867397 0.001 +0.1838648655581359 1.028661515042598 0.001 +0.8726430569488161 0.9100243390164 0.001 +7.091418053550004 -0.06175530030054128 0.001 +0.942185577527151 2.232111316539971 0.001 +2.373548530391637 0.7562972229515119 0.001 +0.1575578412605942 0.4669371845643123 0.001 +0.2683340863387775 0.005285605319966518 0.001 +10.22736457984733 0.4716507378805077 0.001 +2.601839287593043 0.06610043830336494 0.001 +0.6698794168237182 0.5151834873755199 0.001 +1.45781161486012 -0.8348062860533557 0.001 +3.800536899993751 2.470901769434326 0.001 +0.887312864612782 0.9822720678793544 0.001 +0.6762695936555886 -0.1332834780853081 0.001 +0.6388109294633036 -0.1652273991736719 0.001 +0.6527046535583848 0.803950998549217 0.001 +4.504574169764034 0.8457410481087445 0.001 +0.01051565243881873 -0.0480146080409557 0.001 +5.538122044006658 5.430246019296548 0.001 +0.9811506354251976 1.050143740211801 0.001 +1.038326240672082 -0.1491020500391651 0.001 +0.1879318393162029 1.060808129838798 0.001 +1.943552859066577 2.882449309889859 0.001 +4.130307577762026 -0.3511322259692891 0.001 +0.9271750004570198 1.107610108184102 0.001 +1.527711526028678 0.5907856401649036 0.001 +3.392105280519923 2.173981013874446 0.001 +0.7132213106019163 -0.1699005226962201 0.001 +3.117284524969548 0.42163206503622 0.001 +1.798021871582289 0.6341288813635338 0.001 +0.1487390819457248 1.025144883369215 0.001 +2.570221745737729 0.9073931647948403 0.001 +2.365047246630623 0.2801203673161903 0.001 +0.6871485095608062 0.7701246944100795 0.001 +0.9127164931942437 0.9402455578917226 0.001 +0.903168493904278 0.90958199665185 0.001 +4.624294112368024 2.094410285002808 0.001 +3.666111950961409 0.890737404874239 0.001 +0.9312301830101621 0.1806117386013402 0.001 +-0.04960577112154473 0.6846331712005911 0.001 +-0.4725979879496039 1.094417986395666 0.001 +0.3744118870233577 -0.09474403023497481 0.001 +2.470671658305106 0.05218799233285597 0.001 +-0.1186257025376316 0.3386413498084732 0.001 +-0.03614667667238539 -0.07554382515632987 0.001 +-2.842819871518934 0.4563119840291779 0.001 +8.398981965019662 7.924679880653961 0.001 +1.08551236155302 0.3159677326103564 0.001 +0.2660983466312638 0.8385876398328586 0.001 +0.72858814898281 0.817472327695161 0.001 +5.642801361663867 -0.7442708266478679 0.001 +0.7647651675180861 0.9002943471035462 0.001 +0.9462260142026043 0.02557096821658486 0.001 +-0.02699831029275352 0.07610122870761175 0.001 +-0.1314658472988897 1.378300215601392 0.001 +0.2687795721287944 1.09959919367732 0.001 +0.6892201800269622 0.552307027417637 0.001 +0.254994672972148 0.7775020197889804 0.001 +3.737012878723105 0.03668963987872906 0.001 +0.6715361849210062 -0.9614865135074488 0.001 +2.839454276315361 0.5845136731512508 0.001 +-0.01887167219672858 0.1789899910525548 0.001 +-0.06270158752195024 -0.09917681853492143 0.001 +3.139317323679275 1.190570408002412 0.001 +0.9725055892761925 0.4139129314224162 0.001 +0.2064240327815708 0.9564886723501905 0.001 +3.836869593628915 0.2391209789869078 0.001 +2.941449237696933 0.2533417809466622 0.001 +-0.06101858331693136 0.7961474243955963 0.001 +1.846894844304007 0.3704950116270775 0.001 +0.9185194948625643 0.8291014407566157 0.001 +0.07479526411127085 0.3521330434333086 0.001 +-6.771931854611838 0.5481466952152814 0.001 +2.98165018379834 1.240229535915374 0.001 +16.17049195456953 -7.99540051828455 0.001 +0.8037695519821765 0.7295124716029051 0.001 +19.14494729258787 6.007014963302728 0.001 +0.7545456239349182 0.5892140693629924 0.001 +0.6339682108531193 1.179010064488246 0.001 +3.606994855826736 -0.03424604508523919 0.001 +2.857533177119852 0.1959541222362604 0.001 +0.1867453141019538 0.7190307053126094 0.001 +4.549901401756385 -0.6849363464435801 0.001 +0.9192997913493623 0.3890528741893334 0.001 +0.3326096946365791 0.8792602839281886 0.001 +15.05610682558712 -0.1518387335185105 0.001 +0.1493616480676304 -0.02544399228399958 0.001 +0.3711093287782843 0.4108026613093079 0.001 +4.566155498255304 0.103881941191876 0.001 +2.092137476216811 -0.9322438250577689 0.001 +-6.232042558552201 -3.121393276840883 0.001 +1.372965942733658 -0.07885220712613329 0.001 +16.02163574336995 -3.179589669138043 0.001 +-0.05007129374959893 -0.3705565102613232 0.001 +0.05476146508067699 -0.3250366211247266 0.001 +0.1428216397494047 0.5509737266512128 0.001 +0.05161320488796772 -0.06489491568306853 0.001 +0.7308499405145054 0.7499477360295249 0.001 +0.8943548045462862 0.5779931537741493 0.001 +1.06931101854956 0.04189477708471475 0.001 +1.056269053398635 0.01908268756540491 0.001 +3.797162897657202 0.3973492856929484 0.001 +0.942888862994085 3.693986492682432 0.001 +0.881033946602655 0.8111223744288122 0.001 +0.8220259037262515 0.4544404303873048 0.001 +3.96397903083216 -0.8847769621833059 0.001 +5.796519102543106 -6.604488259955317 0.001 +0.900379469202686 0.8790305588697597 0.001 +13.76298041609218 -6.248570826671699 0.001 +1.027444131621103 0.7914379768855966 0.001 +1.052893281914323 1.008275727224573 0.001 +0.1967226690933665 0.686521594413502 0.001 +0.8691269984458672 0.8497790427370728 0.001 +1.050035527440283 0.7464076054388217 0.001 +3.846769157571012 0.6563119250618203 0.001 +14.36999229382404 -8.006146524605553 0.001 +-0.09510686969211296 0.6291776798441561 0.001 +1.014991171582274 0.1055526229815407 0.001 +0.9738936737743941 0.1869022276365422 0.001 +0.8934103733643783 0.1434398248245093 0.001 +0.9212914989512466 0.1491736225475061 0.001 +0.7510269481226004 0.1738492088607089 0.001 +0.9201725061124884 0.8011322950331329 0.001 +-2.205973662725818 -0.740908991415659 0.001 +1.069124518691783 0.8438550892361824 0.001 +1.129130671501642 -0.07491291141331631 0.001 +2.253737284281337 1.873061814227184 0.001 +-0.002419109425604634 0.3089225171130984 0.001 +3.426291427841881 -2.235819947819429 0.001 +5.252765957689061 0.9034983920323232 0.001 +4.287517005234543 1.080764325968269 0.001 +1.277329193680945 0.1313609586166509 0.001 +1.016677670252828 0.7175526126782685 0.001 +0.2993877123532699 1.014038380210859 0.001 +0.9047422969644147 0.001216277386827737 0.001 +1.097790335363698 -0.1773202569834437 0.001 +-4.335922008456722 6.278561760650421 0.001 +0.252520829028624 0.3050158256472495 0.001 +0.1956265181913092 0.652885643717626 0.001 +3.350599292050251 0.6966519897606167 0.001 +5.786165145306197 1.034462177745067 0.001 +0.1226184405839486 0.04062299941283905 0.001 +0.2738161766382047 1.079726907138213 0.001 +0.6514876991001504 0.4402441944938606 0.001 +1.059039956266681 0.3369463267239932 0.001 +1.418190329857493 5.341385127802514 0.001 +13.56253911329315 1.396513772583325 0.001 +2.126405236478972 -0.3652902501728548 0.001 +-0.1295438766242554 0.2487476461073487 0.001 +0.244757601292791 1.093275850388352 0.001 +0.9150876871448688 0.8636092640434125 0.001 +-0.09662245413092962 0.296807990529518 0.001 +2.281056656220434 2.222882711118725 0.001 +2.685778744110694 1.551632689123826 0.001 +-0.09006168428507896 0.596324412596411 0.001 +0.8005105323580297 0.4130318687547844 0.001 +1.03036714311079 0.8484202575815774 0.001 +2.182570186601174 0.02541407792387352 0.001 +0.4365024153068449 1.084581541976616 0.001 +0.528934267598877 1.099731558977721 0.001 +0.8385308447111354 0.1011010593820644 0.001 +0.8415068073584143 0.8814522160063928 0.001 +0.9670976371986023 0.8051561996466895 0.001 +1.399615359533439 0.3704857090115535 0.001 +1.131356990102174 0.1178523332916928 0.001 +1.708988871533305 -0.4960660216894105 0.001 +0.351081279738373 1.110255182634445 0.001 +2.263882836741821 1.549475432018226 0.001 +0.8361300013537091 0.5391736747198151 0.001 +3.48364909858135 0.5076709295158032 0.001 +1.39018367795742 1.058226400922273 0.001 +2.429429981755311 -0.2899467072881971 0.001 +3.48795754333868 -0.1883645381826874 0.001 +0.8387412650730461 0.974723033946335 0.001 +0.7338100428416863 1.104316925559488 0.001 +0.7094965363236024 1.107890297268796 0.001 +1.615724057134534 0.547669330568566 0.001 +3.476718191384628 1.767465843457223 0.001 +0.9293854923069829 0.9455218797407636 0.001 +3.245992317744431 0.3337983122007906 0.001 +6.773229066776578 4.82946293659868 0.001 +4.091140502492074 -0.06876111702217176 0.001 +2.686543707324174 0.8230179555432824 0.001 +0.2849527456582803 0.2925311580259869 0.001 +15.24680450419198 -2.712058088090726 0.001 +3.122587132793043 6.716064063949587 0.001 +9.164662445307723 -1.988455817032183 0.001 +-3.293067165843052 -4.003132353129846 0.001 +0.8439833348484745 0.05781445229893289 0.001 +3.25486977516817 0.9609815492052216 0.001 +0.0004572921402100565 6.602381463726826 0.001 +0.8302200004702243 0.5926753054335959 0.001 +4.041822954457996 0.5998490881987902 0.001 +1.989474705808302 0.8339038102014207 0.001 +0.2644315366013263 0.7581738215431936 0.001 +2.222315204871744 0.9282546429552098 0.001 +0.937910638890584 0.8660285641518791 0.001 +0.9431035475876133 0.607334201051229 0.001 +1.807910293286049 0.3020347378682837 0.001 +1.284903498883004 0.740682947583839 0.001 +-0.6383829640364588 -4.537764853724988 0.001 +3.145418358801738 0.2334548404578427 0.001 +1.006439751806963 0.7626809232446754 0.001 +3.572225666924855 0.4025308645352859 0.001 +3.984551094042801 0.2009051334161297 0.001 +0.2622469854990243 0.4745136884838578 0.001 +1.095478460536569 0.9471103071345619 0.001 +2.302926160981927 0.7069464054441275 0.001 +0.8920447584052161 0.7252612228188039 0.001 +2.599366023120474 1.101006584675851 0.001 +0.9467850570314552 0.827207256372133 0.001 +1.4317663727571 0.03810236827350488 0.001 +0.8369918633111251 0.378851255724455 0.001 +3.48609833224408 0.8240368215506838 0.001 +-0.09247773982795637 0.908768665998768 0.001 +2.767556379201507 -1.175386369839458 0.001 +4.201980849935211 0.01108952300873672 0.001 +0.8838551248368017 0.8338608280716269 0.001 +1.133881758848639 0.03086826913813885 0.001 +1.399474662105439 0.8510205892899054 0.001 +1.071213687068015 0.8121779944082355 0.001 +1.104378840085047 0.8126092788257357 0.001 +0.6868969957835092 -0.2400819144233756 0.001 +0.9736313149844689 -0.113184939636237 0.001 +2.617736167393622 1.307228325979643 0.001 +0.08640970811223406 -0.1595292148561392 0.001 +1.12248325533627 0.1487328401581187 0.001 +0.03753092391424322 1.025736020858614 0.001 +1.002076429121278 0.7832817632059165 0.001 +3.981811699388471 -2.733306881357258 0.001 +0.9729169482664735 0.8981969120171693 0.001 +4.282089919629701 -2.016128153018615 0.001 +0.9858525174400193 0.7688674351329994 0.001 +1.004958667677176 0.6870666145689248 0.001 +3.461512449372619 -0.0532346229815885 0.001 +0.1610348251276451 0.4982544673228594 0.001 +0.6029924151464006 0.2117044200408913 0.001 +0.8844621797102857 0.8648653639438588 0.001 +8.114330748033945 -1.614649543252393 0.001 +0.2667883591653561 0.2024337397319743 0.001 +0.9079140602713092 1.093129283243383 0.001 +1.525929859085704 0.8064727555268656 0.001 +0.9506478934916017 0.003204465534543384 0.001 +0.725614033080647 0.1105482386572647 0.001 +0.8609211560773871 0.1374545003239725 0.001 +3.143425862697359 0.9091908871213026 0.001 +2.776803567916653 1.078597190707841 0.001 +0.7086529678052388 0.08304438901925873 0.001 +0.04170782604217242 0.9815328274752281 0.001 +0.9500407658038189 0.3532600286403854 0.001 +0.7444378255504795 0.6231859498372705 0.001 +2.588306801114582 0.5921855605992917 0.001 +3.667869279725701 -1.097324537007683 0.001 +1.363345830170167 0.09039361586654843 0.001 +0.4834591527527928 1.045202448143993 0.001 +0.9738145704781153 0.7445998782765401 0.001 +6.186102951743925 -3.194933848092486 0.001 +0.7983336981049377 0.1242896652551767 0.001 +3.860353908992479 1.587409467373581 0.001 +3.848718889431726 1.760213611400385 0.001 +0.7955602192468003 0.5939256634003158 0.001 +1.017548813684963 0.8210154721517877 0.001 +0.8898783447772616 0.6557266510459883 0.001 +1.052372696516745 0.7124958582634633 0.001 +3.573317341258559 0.5858331097410812 0.001 +0.9746876399473988 0.8721137933900098 0.001 +1.111976325286089 -0.1019105681380036 0.001 +1.094831039082582 0.366186267461767 0.001 +0.05638694148720932 0.07890844291793479 0.001 +0.6072465218016648 1.298059183049852 0.001 +2.293295371585505 -0.3583532017983334 0.001 +2.44485159807539 1.231384786057194 0.001 +0.3741742236127205 0.2899522184307457 0.001 +0.9942278719425242 0.8261781130291365 0.001 +1.147601785222259 0.8114236618226971 0.001 +0.8474473579237719 0.6322953480008215 0.001 +3.605296302695558 0.2372353968648445 0.001 +1.463129948706543 0.4367829827248764 0.001 +1.034686977138631 0.730918997087489 0.001 +0.02734315242422215 0.9602698706637747 0.001 +0.5483911493728514 -0.2201050508487613 0.001 +1.467660536909611 0.9355519366754833 0.001 +-0.009556352768029694 1.043595677246205 0.001 +7.055573802253083 -2.776348164151929 0.001 +1.051139540794227 0.4053604591024436 0.001 +7.492210720488833 -1.852579492376267 0.001 +1.905599588205722 -0.189609512843892 0.001 +7.920297748028689 -0.1759503097151347 0.001 +-4.105816015917396 -6.8818042896351 0.001 +3.068724480249143 0.9424448798330451 0.001 +13.53294477936497 0.1151923135346315 0.001 +10.64807324708857 -5.459617765296144 0.001 +0.9656311302349813 0.7839481245279251 0.001 +-5.741994460770059 7.190705089802663 0.001 +15.20607407371061 -5.514079980093651 0.001 +0.02517538458404113 0.1788236539830557 0.001 +0.1529164029871551 0.9026600931406343 0.001 +5.341026205632928 -2.618850466444822 0.001 +9.423856876362386 8.540671032823669 0.001 +1.900818213519341 3.430599251144593 0.001 +0.8245143229652444 0.9064109629983916 0.001 +0.7683953913554461 0.5013766691233781 0.001 +-8.273213104222494 -3.434114609519986 0.001 +1.919955155201265 2.123016830615291 0.001 +1.17306875383233 0.7399099250810132 0.001 +0.9509943190133654 0.8492125756086517 0.001 +3.985442343446798 1.280431545055995 0.001 +0.4058810526799709 -0.3046254462010445 0.001 +5.104010802074273 -4.588022676104059 0.001 +3.159151825752637 -0.6235254176480401 0.001 +1.033075613746212 0.7621947941519132 0.001 +-0.002182348354098283 1.318412106335938 0.001 +0.9980647398595919 0.7717256996241422 0.001 +1.003029906812652 0.7363129674106424 0.001 +14.96114156151822 2.630329278235441 0.001 +4.491413532459988 1.164346273437737 0.001 +0.08839410378120142 1.09678653719928 0.001 +0.112646342980838 1.091488045887723 0.001 +0.9736960632303048 0.8496099313009456 0.001 +2.208337416299585 -1.874515105082226 0.001 +0.8032523405679833 0.7665447027373545 0.001 +0.7505024470872765 0.7776979943224417 0.001 +0.9471993871696274 0.8870308735627496 0.001 +0.6280000874811291 0.04543659574656898 0.001 +4.903917543167893 5.128763443668665 0.001 +3.358242422942163 1.131485375353387 0.001 +4.034153596535857 0.7495704627115213 0.001 +1.075690409160577 0.7793128200192143 0.001 +1.105775614586384 0.7793811982196325 0.001 +1.123225223250051 0.7935652153760372 0.001 +17.97565803655597 2.341648336529556 0.001 +1.091714937530492 0.05672725020035528 0.001 +1.388899941864276 0.9270414109428206 0.001 +0.2411821962713432 0.1749692524032949 0.001 +4.136196073001312 0.8475421240577107 0.001 +-0.5677389568756492 -1.647088175642341 0.001 +-0.7519838440991385 -2.077910556123662 0.001 +2.836892580483553 1.031405085317059 0.001 +1.045816161675618 1.170296937571545 0.001 +-0.06238654060362506 0.1973688111947247 0.001 +-0.4170385447379121 -0.2089583104537486 0.001 +1.913974090772116 1.282422882312915 0.001 +2.195942898138677 1.258757250894561 0.001 +2.064897425054474 -0.4586514581587653 0.001 +3.295295516701146 0.4709589214783186 0.001 +3.427041964237331 0.4836146007971928 0.001 +0.8543687418223984 0.7816045130017196 0.001 +7.623718662365352 6.163125250562452 0.001 +1.053245116143982 0.6051223238577443 0.001 +0.181016778767263 0.878440927158623 0.001 +0.1035196227287858 1.050653280695974 0.001 +0.7453366993193227 0.5507616237197177 0.001 +2.834997306823235 1.816188987041925 0.001 +2.9626714094348 0.5541372274095274 0.001 +0.485075537332673 2.161202196950226 0.001 +1.045341321036662 0.7780431904887083 0.001 +0.2297433040727234 -0.1671508640513041 0.001 +0.3361599224068627 0.4681622798063874 0.001 +1.163151497614791 0.4629095811137579 0.001 +3.857236976108327 -0.3017306018215222 0.001 +0.01370640279417963 1.000960746926534 0.001 +1.057761518554802 0.7950316526178658 0.001 +4.546275255256452 2.451874923593595 0.001 +1.09593813374013 1.133703125160438 0.001 +0.04605639482471898 0.1128660302044482 0.001 +2.937093097454127 -0.2446472167816597 0.001 +1.485606674675858 -0.9994962098999313 0.001 +-1.536485614366047 3.765778686724591 0.001 +4.033590878647944 0.8509271778293269 0.001 +1.255222141608595 1.363102559268429 0.001 +2.134120270831171 0.4458444848717552 0.001 +2.940080520731596 0.1563990526911622 0.001 +-0.1158437707549668 -0.2120221627968276 0.001 +0.8642308916285408 0.5871839128903955 0.001 +0.9887536161115755 0.8044746049007663 0.001 +1.060722605381084 -0.7732338781300508 0.001 +4.274551313890627 5.554075444532761 0.001 +0.7304807639539219 -5.154147674093793 0.001 +0.5669088342426848 1.091117900855007 0.001 +0.296936119757031 0.727717939773073 0.001 +0.1398943568673287 0.3531250455485898 0.001 +0.1089638431616473 0.4584575361601448 0.001 +1.34002475162902 -0.2119789036532587 0.001 +0.4608141942808766 0.06920536919451484 0.001 +1.090039870108545 0.9175394711991809 0.001 +1.457099640813954 -0.1673115560498161 0.001 +0.03990137969898258 0.209930444974149 0.001 +0.5312930761697773 0.003263721743639622 0.001 +5.015036834916328 -0.182639687659688 0.001 +0.9357856282741283 0.9048493691420736 0.001 +1.026963855776734 0.6632469854367778 0.001 +0.4916017984822572 -0.06716085245182403 0.001 +0.8097924547215882 0.2310013256554384 0.001 +0.1152233338090311 0.5284340227640599 0.001 +0.9996758797420029 0.8741587519744586 0.001 +0.9903344025725568 0.9611239489059802 0.001 +3.389199544662802 1.043389189013979 0.001 +-7.032826036858866 -7.585059180683194 0.001 +0.4900285019011279 0.3040896861730855 0.001 +0.8752381741177857 0.1749963891309682 0.001 +2.537869426539895 1.974374017781692 0.001 +3.948791465106741 0.3824965474731948 0.001 +-0.122106386618233 0.4653662462352899 0.001 +2.654756222511405 0.1783501250482139 0.001 +0.1403121786182599 0.3205993820967473 0.001 +0.7004908540241461 -0.03246649297897759 0.001 +0.398579779985769 0.03615659928491974 0.001 +7.18935451264848 -9.098637140095997 0.001 +1.981271346914848 0.5372064794094055 0.001 +0.8564739029471236 1.110731265396449 0.001 +1.038813921405612 0.8096058766670839 0.001 +0.2455845192109051 0.2208793634088747 0.001 +0.08954950112664511 0.2901596464459323 0.001 +2.743688243522254 0.161331419424225 0.001 +0.2579560861416074 0.9131757238206626 0.001 +1.960826895984577 0.6034751305474492 0.001 +5.776867975757035 -1.767278051229351 0.001 +1.950267045715164 -0.08650254453900987 0.001 +3.600267515345602 0.6443207211981876 0.001 +-0.03082622149599065 0.3327555814334582 0.001 +1.479309080942484 0.6895357839762051 0.001 +11.71882179900404 -3.033075584840009 0.001 +1.314799536756759 0.8948484451286757 0.001 +5.767613693732233 -0.2313239080956381 0.001 +1.35504477656695 0.2789627271086078 0.001 +0.9039308852910261 0.2784629192940062 0.001 +-0.3318437947195728 0.7847581397492206 0.001 +1.552227441161119 -0.2699417958215408 0.001 +2.599180577410634 -0.6675145320045951 0.001 +4.711285352461433 -1.729602353591539 0.001 +-4.633948433067326 -0.7328633855929093 0.001 +0.8714735949334442 0.753716461547424 0.001 +-0.7779042340740349 0.01412279302449198 0.001 +0.1308899828631276 0.02763179338103357 0.001 +0.9541245674349345 0.6907040759339811 0.001 +1.05749935158774 0.8617162249606991 0.001 +-0.08360938340052132 0.9802407633899013 0.001 +0.1914403341053656 0.02464879100627148 0.001 +0.8990693365701776 0.4355449223615249 0.001 +1.439992666098825 0.5524858697952081 0.001 +-0.06431659859864505 0.8626048537714395 0.001 +0.885640654320032 1.113983484679977 0.001 +1.626232474985985 1.017680515362204 0.001 +3.450836074715505 1.155508364371019 0.001 +3.847274816876168 0.8692098264379997 0.001 +1.25467245280016 -0.1550500943424542 0.001 +0.3769742874286562 1.128876596432135 0.001 +0.1806647151149265 -0.04376095676682783 0.001 +0.408196821180658 1.220534683075303 0.001 +4.066741204839194 0.8708593147723077 0.001 +16.75976644483909 -2.303117337150079 0.001 +0.2055689048690685 1.073614627337083 0.001 +1.06313371996133 0.7625862301757889 0.001 +1.77010622498807 0.7820617206083372 0.001 +0.8080158944254231 0.09255190608118412 0.001 +9.551971605804113 2.83475230309504 0.001 +1.053007634485324 0.8281333581075284 0.001 +8.75661320886489 -2.977902105722208 0.001 +-0.07699337092894513 0.92367665269883 0.001 +-2.487631006090171 -2.068149217509582 0.001 +2.147247593841278 -0.1892928964324183 0.001 +0.0005193140798308688 0.9359939005809836 0.001 +0.04189060336845413 0.9423376901385623 0.001 +2.191951545341777 0.4682608968815162 0.001 +0.8258598457605693 0.1607345482273219 0.001 +1.498739354429971 0.9077401807597687 0.001 +1.000065401934016 -0.01502227892591405 0.001 +3.255392539943256 -0.0424488580760287 0.001 +0.07601983914470836 -0.04331449468364877 0.001 +-0.7177979302571337 -8.365612538475554 0.001 +0.3156027842911308 2.752780366814154 0.001 +2.241030015198125 0.2993021986863983 0.001 +0.9879043374262491 0.5536267900391783 0.001 +0.781196173051467 0.9263896717134796 0.001 +1.865407385164416 1.185358098587368 0.001 +1.065651601949942 0.648375153250488 0.001 +2.694035711713851 1.303674569613178 0.001 +2.472639733012189 1.60919967132374 0.001 +0.9456572432648169 0.7577261606736656 0.001 +1.315925298657056 0.2049990986888264 0.001 +2.280837314783023 0.3562256165515691 0.001 +0.7832843645791405 1.187642378341696 0.001 +4.797791066558955 2.962186092146989 0.001 +0.8757834835165179 0.2677433533752701 0.001 +18.910495957172 8.170144415236297 0.001 +5.90149307986876 -3.719543065387747 0.001 +0.7843673517505186 0.07407870862331545 0.001 +0.842992826302661 0.7352638824448613 0.001 +10.22297565097026 2.059192191645153 0.001 +-3.6413950831226 1.399887858647026 0.001 +2.663242824875271 -0.1576552230500101 0.001 +5.315213411518084 0.4771491769081484 0.001 +1.049789783115248 0.8831514743528782 0.001 +2.068513716145805 0.3011178391417139 0.001 +1.962499518460837 1.150354939633662 0.001 +0.7132401606816244 0.06055109909372612 0.001 +0.1350531789731657 0.8598401892882636 0.001 +3.733941933115894 0.30339038722029 0.001 +3.334505115220329 0.4037608434968819 0.001 +1.614738128587641 1.064728788643794 0.001 +0.3185870727326933 -0.1118124959759383 0.001 +0.2629534484715512 -0.5174688066326896 0.001 +1.054778570322126 0.08632830690001589 0.001 +4.812771860109997 7.990277622881305 0.001 +3.722895115393277 1.423025815612913 0.001 +3.733723824539322 -0.1757299883689604 0.001 +0.9269349014571366 0.2833311415983742 0.001 +0.781611190343825 0.6181313851259875 0.001 +0.02195276597686929 0.05538054392916354 0.001 +5.105610939146199 2.785432638993807 0.001 +-2.93332681574866 -6.423381650179692 0.001 +-5.542423855038649 3.446206951339404 0.001 +3.096270548674112 1.017866123401269 0.001 +2.17594520593429 0.2614389615968288 0.001 +3.479359607331976 -0.2806402705624858 0.001 +0.8536262070331306 0.5004482632445502 0.001 +1.306116241414401 -1.265781963446586 0.001 +8.917797857841267 -0.2996183827867898 0.001 +1.372758428686551 -0.3991511717716634 0.001 +2.246893836351149 0.4449619037338379 0.001 +-0.1150929792057599 -0.1126901937982479 0.001 +-0.1394277427024346 -0.1218459402000488 0.001 +4.093591445853646 0.5550133167258482 0.001 +0.6941285613923671 0.0369899332070396 0.001 +2.929255039563234 1.067512712569468 0.001 +1.068258053224481 1.04973286897617 0.001 +3.40770115697284 -0.06521992148197432 0.001 +11.08292621402616 8.187096954694319 0.001 +1.002092469778871 -0.1502367210425921 0.001 +0.06611039017773804 0.2500935436442662 0.001 +-0.1165549341337921 0.5617565163609208 0.001 +0.1482490366159679 0.766320658059661 0.001 +0.9889228988168675 0.6823337993927912 0.001 +11.76092381472618 -1.155387620953856 0.001 +7.457062050559963 -3.792026604339941 0.001 +1.056390986395318 0.1947790661206366 0.001 +0.168429048522065 0.6920384026144453 0.001 +-0.4231225930858267 1.674905535607479 0.001 +-0.6551397843087613 1.865265139195138 0.001 +2.769313084128294 0.1066931386565322 0.001 +0.9349885627347502 2.02140312728652 0.001 +1.905668546625684 0.03559674029748415 0.001 +-6.089698038758862 3.941237676087036 0.001 +0.3531780349844413 0.1989776451965355 0.001 +0.1820173061102339 0.4692980367244333 0.001 +1.019855297948127 -0.08207674880574686 0.001 +2.253993171610103 0.6626234053913524 0.001 +1.974428256784921 0.7118899555022118 0.001 +0.09053729110591649 0.006405047032413493 0.001 +0.8760945530899199 0.1298182015486938 0.001 +4.207046588695579 0.6624843317085335 0.001 +14.92426908504133 1.347346746671873 0.001 +3.929345708885863 -0.1559489189525861 0.001 +-8.153012895304897 3.024011731706512 0.001 +0.4991963728635853 0.05734010115582977 0.001 +-9.12478492960464 -0.4926558074373948 0.001 +0.28025961963489 -0.09956995555743091 0.001 +1.010860227768968 0.1945780759832905 0.001 +0.2400977528089661 0.846893288145914 0.001 +-1.978137901467675 0.5273939843894114 0.001 +0.3379674868726524 -0.2582971052832445 0.001 +6.61863439298377 1.781317635710195 0.001 +2.628031917752877 0.8962404804863783 0.001 +-0.27022962513736 9.164148864083025 0.001 +0.5906248138412951 -1.497126393796336 0.001 +10.18705849581743 9.15789103994352 0.001 +0.2139365165817648 0.2863955429177865 0.001 +0.1246910947775826 -0.1055577534242588 0.001 +0.5444636737471912 1.106076300207468 0.001 +2.636146524286952 1.23688595160049 0.001 +4.265093017509242 0.5829861099114271 0.001 +0.04916913332505744 0.3474662557645367 0.001 +0.03559588498816751 0.3657740266751531 0.001 +3.971832824005396 1.847597631832934 0.001 +2.927795169217654 1.956723262381578 0.001 +0.9737860590254716 0.6034644108687185 0.001 +0.2166500392334018 1.027979420230581 0.001 +3.584892377588313 0.9577165899599258 0.001 +5.51686117375233 2.319915195159523 0.001 +-0.1278878468523216 4.887133207121515 0.001 +-0.05026830398646934 -0.2666342078402589 0.001 +3.232982034754838 1.284007756901796 0.001 +-0.2601390681540984 -0.5543183328755564 0.001 +-0.09257908115572344 1.133196829709251 0.001 +-0.04684653167236903 0.1655043521157879 0.001 +3.000474141568927 0.956027077540195 0.001 +1.003205669505218 0.6437102645321031 0.001 +4.275584115697344 1.37237466534871 0.001 +1.024058329186742 0.01247424102252265 0.001 +-9.036212928336694 -2.237854671918158 0.001 +1.793111660041146 0.9875957402398782 0.001 +0.3278933375401609 1.132117390524029 0.001 +1.793899948501971 -0.7454760923735304 0.001 +6.453527784325177 1.207208256151837 0.001 +1.795359345258838 -0.2326695690140921 0.001 +2.253638371414312 4.100596898467798 0.001 +0.2572983249279255 0.07685857695405543 0.001 +-1.130494238415131 0.4954505569755551 0.001 +0.200381120021762 1.01434005533087 0.001 +3.547964085626964 0.6219504933130799 0.001 +0.7181623967867361 0.7837101787281247 0.001 +1.698804696035467 0.03350450932319996 0.001 +1.064839232593804 1.092197481623683 0.001 +0.06571559878284661 0.04819200364471196 0.001 +0.9426858884435789 0.5782040382061548 0.001 +0.8146648221204741 0.5301236224761831 0.001 +0.2191759310527053 1.098521120479661 0.001 +0.2228510239613943 1.124826730053222 0.001 +0.8696982646465512 -0.1896419767682431 0.001 +-0.1143523386627717 0.6096230511356657 0.001 +0.9975095307110657 1.178871246361989 0.001 +1.033746953988669 0.4218494676278737 0.001 +0.9923101209935896 0.4286678372291041 0.001 +2.968716302404715 0.4293550003757747 0.001 +-0.09974026816927881 1.620185402406218 0.001 +2.527877785106086 -0.0225086160855755 0.001 +5.008136770629054 6.213471542912027 0.001 +2.055433397023626 1.111620412941827 0.001 +-6.456997031407678 2.412657158001307 0.001 +1.172394494748936 0.3258904481081248 0.001 +-0.03735591190174326 0.2468849132756653 0.001 +1.375712893005855 1.198917438826835 0.001 +0.1734072351056106 0.9214245246926219 0.001 +1.049775191007416 0.2607378166313416 0.001 +0.8589177482945701 0.2063572288142843 0.001 +1.09710757846364 0.3846514368430432 0.001 +0.9352407857770346 0.4957111860614919 0.001 +1.057192862052581 0.6769436078724419 0.001 +1.885829873345017 0.5298833824745429 0.001 +4.14413677291887 1.092969893556687 0.001 +3.908549847601062 0.09893362007757327 0.001 +0.9594705842035547 -0.0421011406499438 0.001 +2.145625197588348 1.448583172758967 0.001 +-0.4748844712390455 -0.6388659579838701 0.001 +0.8062546833415831 -2.289424258394936 0.001 +0.2602592413042592 1.039378833874737 0.001 +0.6579653984556435 1.134028146529607 0.001 +2.93167947054308 -0.08964369156607412 0.001 +2.882047630015291 0.6197635304227389 0.001 +3.850470130431902 1.08183577890789 0.001 +1.753657873623132 1.082633662756458 0.001 +0.2196608408686617 0.9275971694555023 0.001 +5.245069574269357 -0.8966565965494354 0.001 +3.030923447791216 0.3534979149341146 0.001 +15.04924537957704 -3.719889094318826 0.001 +0.054811177016208 -0.0482462390532161 0.001 +-0.1572170275158886 1.085756822807309 0.001 +-0.474189258830741 -2.605785832585549 0.001 +3.264715686868781 0.7555759095862201 0.001 +0.2007691012670907 0.7642115228817347 0.001 +0.7601766662632714 1.120231294653948 0.001 +0.4701077138027801 -0.04744718731642912 0.001 +14.52277293568374 7.217605910333841 0.001 +3.034622549427062 1.413000694358868 0.001 +-0.08600614451107462 0.5650288140002944 0.001 +2.115325649407072 0.5278915140497917 0.001 +4.327646885032038 1.812434449349412 0.001 +9.924601600865516 -1.6253070158337 0.001 +-0.2796590591324857 -9.397732717202523 0.001 +3.87610624867413 0.3852628064537201 0.001 +0.2139333042770969 -0.06604105990847828 0.001 +0.9993467639076785 0.926889661781191 0.001 +0.1653954037468595 0.3451411672600344 0.001 +1.984702534460045 0.9485319565245975 0.001 +-0.1227721232280325 0.5296530419509877 0.001 +2.899415779317362 -0.3179784196427211 0.001 +-0.05951406827160535 0.3441158393921371 0.001 +0.3744255149019295 0.1019122709206852 0.001 +1.489240618338747 1.553428155127215 0.001 +2.29330424449904 -0.05722668886003852 0.001 +3.305220126482742 -0.397478932436693 0.001 +2.670003834250525 0.2551992991001391 0.001 +2.565963102462091 0.1926564885861305 0.001 +0.4496744300907274 1.468810227064611 0.001 +0.5964576150160968 0.1743332809781168 0.001 +0.08691550966036167 0.6960915394095469 0.001 +12.877276718364 -6.977250768751748 0.001 +3.477643181649933 0.3996441709185395 0.001 +0.8419242461379381 0.8132409569500544 0.001 +2.522890041701315 0.3616239665315013 0.001 +2.152731564347067 0.7346948102723135 0.001 +3.764144344586818 0.8091525896256152 0.001 +-0.02854301828474154 0.8133564855941171 0.001 +0.6186417251274984 0.05661362466569855 0.001 +0.823564751684821 0.5100208953114482 0.001 +-0.6335429247627502 0.915344056725351 0.001 +0.6680703679352704 0.275906174322263 0.001 +0.1277003062851094 0.288251038358341 0.001 +3.452917674831061 1.621585012227307 0.001 +0.06194198456290842 1.127096245305997 0.001 +0.2583725138755838 -0.0551530703351417 0.001 +0.08044881247817129 0.7502545220185061 0.001 +2.808440230471577 0.8092959065873749 0.001 +9.949903505901773 -9.399544936704054 0.001 +0.7432107519329477 0.4884097228983321 0.001 +0.5755977753062119 0.01606251118184551 0.001 +0.3301993022968205 0.07373746112462926 0.001 +4.610078301487755 1.901031389512021 0.001 +3.404617598934899 0.1982854720176314 0.001 +2.371904053000585 0.4367809126583795 0.001 +1.223441222207291 0.06891320298596029 0.001 +1.12377413780465 0.5775337921201846 0.001 +0.971271875151841 0.1408523098329733 0.001 +1.086935800045792 0.7127878220902654 0.001 +10.6236247754604 6.263541963755483 0.001 +3.626575354068403 -0.1231161344848901 0.001 +0.4141572501762228 0.2743437204858771 0.001 +2.239729439980937 1.430709005197718 0.001 +0.13766533418533 0.9458894053632321 0.001 +1.433077198156523 0.1137501363194682 0.001 +1.243532125068795 0.2431577026120025 0.001 +2.010891069985067 1.396873992603242 0.001 +3.22779772726129 2.326074699340669 0.001 +1.692929174310631 1.005413293024843 0.001 +3.452330575667949 -1.017774463039977 0.001 +0.7611827474788043 0.8109355923071695 0.001 +0.7057613772402889 -3.656444243777443 0.001 +0.7709437064080655 0.5698131965915647 0.001 +0.3464526298146673 0.4242103359849069 0.001 +3.939188027158039 4.6774785180925 0.001 +-0.06545486399203854 0.05640453064874891 0.001 +1.271042042165089 1.44061229818775 0.001 +-0.08714135362522304 -0.00792934044434688 0.001 +0.3149752188015055 0.09509942309122454 0.001 +1.879852813984337 -1.693976285949107 0.001 +2.79113707291949 -0.896315649075987 0.001 +-0.05825068890492896 -0.4964336409959536 0.001 +5.807038399109832 4.590560079144033 0.001 +0.04350949207423743 0.4415855600500242 0.001 +4.549263919220973 -1.355655877892338 0.001 +1.461037531979737 1.023776968738463 0.001 +-1.598428116197678 -3.438771938728565 0.001 +0.5016292368092051 -0.1654039861483096 0.001 +3.450111241926225 2.945775032248502 0.001 +5.844078064505243 0.3842128693652803 0.001 +0.1921891714678102 -0.008219213678446045 0.001 +1.004275214279998 -0.03562874937101045 0.001 +3.475585170816619 0.2326197811404312 0.001 +4.187034665414247 0.9279815733334337 0.001 +0.899575934585084 0.494927000199256 0.001 +1.411882242862105 1.113366219124618 0.001 +0.533055887689144 0.1398974410684945 0.001 +0.8242354005478039 1.129664020854721 0.001 +1.215526451782279 1.209240222805539 0.001 +2.824872279366036 1.067090025239715 0.001 +18.15526207119511 6.893363641215572 0.001 +0.7889732144129561 0.4452887084889424 0.001 +-3.44090652938788 8.443587978658368 0.001 +3.794379526088854 0.6079387643694469 0.001 +0.6299814438841103 -0.08118937820844278 0.001 +3.991940309209036 0.6351854935404435 0.001 +4.129837302677916 -1.130067231556588 0.001 +-0.1847270492557863 -0.0835471152995759 0.001 +0.3740277790474548 0.1970680273300387 0.001 +2.42392344406379 1.349946796571632 0.001 +2.213339482893191 0.9881918849341441 0.001 +1.088650722119291 1.097393335974716 0.001 +-2.459627747765941 4.489801598834123 0.001 +0.2447211919000277 -0.1439114847456855 0.001 +8.326621769704252 -4.790989960065061 0.001 +7.985268889866736 1.596658460589147 0.001 +1.083567581334528 0.04332888545590203 0.001 +-0.2500038030729595 0.8115832502254607 0.001 +0.2140579013712695 0.245771984258034 0.001 +2.41775912324884 0.6287213547178493 0.001 +-0.01211529784226479 0.8469410755861411 0.001 +2.408683693762275 -0.5008257614731488 0.001 +1.724042390658716 1.041570145156609 0.001 +2.854165541666817 1.371168958053651 0.001 +1.654918745751148 1.505984790878395 0.001 +1.121146825306726 0.6705822642818282 0.001 +19.18053217404799 -2.838262336230342 0.001 +1.434557223958252 -0.2602869392722829 0.001 +1.107283075668887 0.08165980830648609 0.001 +1.23631110121212 0.869691230880228 0.001 +1.18116523262608 0.9240681374240802 0.001 +3.923793780388848 1.237087158366871 0.001 +2.671129283394841 2.352851342440076 0.001 +1.567590436219799 1.096517156951268 0.001 +0.9422422058762595 0.157454086549357 0.001 +1.932167247230316 -2.102815476561919 0.001 +-0.005516387814192518 0.2662996631201363 0.001 +0.09609405780193664 0.5529446717632198 0.001 +0.9362727513388373 0.2065265308481784 0.001 +-0.08621902650538632 0.2855787399234096 0.001 +1.537685703689272 2.000276829666649 0.001 +1.109544373041126 -0.4385179726634607 0.001 +2.534612708224061 1.37543613670643 0.001 +1.029672348253417 1.103321634282507 0.001 +0.3442589432523902 0.9057996327460526 0.001 +3.910620385119255 -0.6222751895556885 0.001 +1.002288777983424 0.627894150892978 0.001 +-2.685624043502016 -1.633696085407118 0.001 +-3.615681900914202 -1.268262314236794 0.001 +0.0145027282318942 0.9290922076692882 0.001 +0.8136352384857066 0.9347964455557083 0.001 +0.8927377598239081 6.341145943549679 0.001 +2.898132002916467 0.6822044439512805 0.001 +3.298604214998165 0.2375949785459355 0.001 +1.562825756440516 0.1596665678994819 0.001 +0.1618899019301214 1.090326736426184 0.001 +1.030844853643076 1.069744789829642 0.001 +0.4834849260411078 -0.09393691677063741 0.001 +0.7798460282133748 0.7629949861382812 0.001 +4.202760075469825 -5.675209980189988 0.001 +-5.481834835147944 -0.2476076269453159 0.001 +-6.409554203729227 -0.6599216897680774 0.001 +1.096746042307537 0.8458784031394693 0.001 +13.28888887823402 -8.930793336051753 0.001 +3.007041508248768 -1.797736895366189 0.001 +0.7738476664763445 1.34196794259297 0.001 +0.954775158524102 2.482643296794249 0.001 +0.1033746327593233 0.3240951545281063 0.001 +2.649210792788083 0.3440977454091929 0.001 +3.467009082998364 1.071903970693699 0.001 +3.042333408080759 -0.705961595935331 0.001 +0.9134022431320895 0.3213490743067982 0.001 +0.8146369520078537 -0.5916989202480974 0.001 +-0.08519622561254923 -0.07331057980627537 0.001 +-0.2112485407746638 0.2913127148726897 0.001 +3.012656042670847 1.038834094816007 0.001 +0.8532467906874364 0.1597617354209436 0.001 +1.014150960880693 0.4841584525870936 0.001 +0.1433247393081716 0.7044308601480562 0.001 +0.06114455192146122 0.2882013697449132 0.001 +3.992610721647525 0.9506227037917456 0.001 +1.058546370111057 0.4821102950611001 0.001 +2.717051729213285 -0.2463037570621577 0.001 +1.557341529519548 0.9934526465146597 0.001 +-0.1911594495934968 0.2605295941314519 0.001 +2.246888189826957 -0.2418775109592845 0.001 +4.022235569950914 -0.7044222733957309 0.001 +2.557082553035855 -2.808393179793994 0.001 +0.7373528807027195 0.2759078498555894 0.001 +0.280860642563243 0.2194466079489994 0.001 +19.13730597851313 -6.169676652263472 0.001 +2.181139826952092 0.08181820000690274 0.001 +-0.1030654244499786 -0.05034411089719212 0.001 +-0.1149948246861061 -0.02992635013840528 0.001 +5.404028329423874 -1.921900414790332 0.001 +1.990927305681166 0.15377224960741 0.001 +0.1020751189666115 0.4051873712987912 0.001 +0.820986100977851 -0.3194036315436657 0.001 +0.006758978877412116 -0.02038350327133986 0.001 +2.418716517903544 2.199570852458434 0.001 +0.6244743112366559 0.07122016171760119 0.001 +0.1071370316913857 -0.03585024075888306 0.001 +0.095957210169962 0.8674620460937418 0.001 +-0.09725285497673845 1.012539904918818 0.001 +0.03534579715041598 0.244824982023032 0.001 +0.07109115195191125 0.2208046609629167 0.001 +3.035784963629277 3.419206951701624 0.001 +0.2686814127641227 0.9301069920047257 0.001 +0.8548091373781962 0.8331695548894361 0.001 +1.322535894051391 0.3699696602666636 0.001 +16.06621564514002 -1.296368567027585 0.001 +0.7059527959550395 -8.219243169462136 0.001 +2.066754940895384 0.5586245810328226 0.001 +0.2277406689983104 0.1386051314097972 0.001 +0.02489765561329952 -0.01084699805391636 0.001 +1.651579829527118 0.9740267622828884 0.001 +0.9590947919959903 0.2059118334004502 0.001 +1.68744732517677 0.5354063008125864 0.001 +1.957974853399677 1.011049650308211 0.001 +0.3855725206435291 1.096491152274979 0.001 +-0.7897131998034492 1.312474458896984 0.001 +3.646000291230319 1.193315257955487 0.001 +1.551177695225535 -0.4074427341658269 0.001 +0.5690101416994846 0.1090661280299414 0.001 +1.709979933876826 0.2504706536965787 0.001 +-9.154914516903521 6.505624753904888 0.001 +0.6183272339673314 0.1288356399163869 0.001 +18.00140965512085 -0.1275866355852844 0.001 +3.016656137266783 0.7326456427824467 0.001 +9.180153487480528 5.253988561745736 0.001 +3.001031602538147 0.5107033513293502 0.001 +0.2725137634933394 -1.476783752374953 0.001 +0.2948731949148702 0.9364648384995775 0.001 +1.021304626401749 0.899070277963978 0.001 +-0.001494516158670156 0.7419906760354614 0.001 +0.7828336965653969 0.4745191461163989 0.001 +-0.1062330019564871 1.045290350823985 0.001 +3.338594762177834 1.494044833457102 0.001 +5.432655638518479 -4.946722291973101 0.001 +0.3086968052265934 0.03063720490840614 0.001 +0.3225307285006509 -0.03832034334381094 0.001 +0.9751762550583375 0.9319284424844346 0.001 +0.04715571894033386 0.8187647752026357 0.001 +0.2071647311661239 0.8115519888085846 0.001 +6.160440698474705 0.7479647323521614 0.001 +4.367790487850894 -0.03696574809093551 0.001 +0.5651604854531671 0.03836584493285752 0.001 +-2.041877518626519 6.149174581666971 0.001 +3.946747986317458 0.3059003364083053 0.001 +3.381055697858622 0.7675160414585817 0.001 +3.74068277201803 -0.6278059709810043 0.001 +1.984583605881826 1.227146513993489 0.001 +16.28405800974317 -9.089669558627339 0.001 +-0.1576682765648911 0.3446488943923904 0.001 +0.1071686592576072 1.013543259443302 0.001 +0.01239245884047509 0.3447301758543911 0.001 +3.42871718469443 0.130980451985095 0.001 +1.954832941396714 1.510768753236409 0.001 +1.588671999191489 0.4682724981719709 0.001 +3.024245882797904 4.285388766698239 0.001 +1.044405793013742 0.28304737358514 0.001 +1.065467761445992 0.5809722327133872 0.001 +1.078722525027553 0.8676413323985384 0.001 +5.062202693186125 -1.155831759658078 0.001 +0.06521139535367326 0.3802074399934962 0.001 +4.002170283803997 -1.060349988786809 0.001 +3.904395940628845 -1.155553659573544 0.001 +0.5168425682514829 1.114071922878139 0.001 +0.1200664265585572 0.7372317448610586 0.001 +13.8584609933252 8.237758127740433 0.001 +0.234949579107874 0.9619730426624791 0.001 +1.494300014193904 0.4877417445295693 0.001 +2.903031170206073 0.4718215911712703 0.001 +10.14923094214612 4.934383628037676 0.001 +0.9033135455115758 0.6788590773026579 0.001 +1.038600788519212 1.038925250885892 0.001 +0.2581661419663975 0.4915630159061809 0.001 +1.090302264952229 0.5793191438137134 0.001 +0.1722826699619625 1.10346615776584 0.001 +0.9323252467983851 1.138201587885959 0.001 +3.421054410415565 0.962437814268633 0.001 +0.830558154256577 -0.1038174228461473 0.001 +0.8758095661602995 1.393396113862578 0.001 +3.092395843053876 -1.067101533655963 0.001 +0.3038388649891909 0.3594988554141587 0.001 +1.775507916248628 0.1100411245622194 0.001 +0.3142079885286754 -0.06208857028842608 0.001 +0.5342907703724782 -0.05458256252134365 0.001 +7.868553844020114 3.448972081506939 0.001 +2.491485523492662 0.7337311921652481 0.001 +0.6644474364957651 0.146170499089047 0.001 +1.172670486285855 0.5760718023034646 0.001 +0.06660758000074504 1.232051716303874 0.001 +4.025388329757576 0.09555978531209885 0.001 +3.914973052681578 1.016085688826426 0.001 +2.841828829837611 0.9129606228111092 0.001 +3.435889024070867 0.7649563550996683 0.001 +0.3316591768676346 -0.008685208321007169 0.001 +1.575939656683393 -0.1146750198646502 0.001 +0.2704805257645138 0.8721924005531303 0.001 +0.9845325605158667 0.08562720578628397 0.001 +0.9809004392179405 0.06362180550592211 0.001 +-0.2295012218345658 0.1191257824900529 0.001 +0.8226648441899316 0.6951500228540811 0.001 +3.684411338621459 0.5405880963557772 0.001 +0.2032955953360486 0.0404102588545449 0.001 +1.482301274486784 1.389795562815771 0.001 +0.383117989665908 -0.02979000099813501 0.001 +14.81741744967134 -3.035546090052391 0.001 +-0.2924836984159698 0.9437205358135183 0.001 +-0.0979060212254861 -0.1211989354755285 0.001 +-0.08775375395465954 -0.1653595764006857 0.001 +3.801114707117764 0.4860268387106643 0.001 +0.6722255909151852 0.2140875288213048 0.001 +1.083185275732128 0.1572174057136664 0.001 +6.639827511532495 -5.151240233896821 0.001 +2.684479576902222 0.4798367425995158 0.001 +3.671207944405687 -0.3854448983222334 0.001 +1.630036604053968 0.9030929082316623 0.001 +17.88836296532099 3.799363341785821 0.001 +0.8985921507108443 0.1691754691379447 0.001 +1.02965992697434 0.4612669349043041 0.001 +4.608786917996448 1.341256186725314 0.001 +3.115018371677602 0.656137863226029 0.001 +1.271566053454604 -0.002402238785474704 0.001 +0.9872459149074 2.778420316875347 0.001 +-0.01221589547980251 0.3619021746655803 0.001 +1.547643785895126 0.913192149879489 0.001 +1.802658334141641 -0.0003957022692694309 0.001 +4.86473959731787 0.8447216475159244 0.001 +4.197364339080576 0.542156776359489 0.001 +4.066595286058321 -0.2931093126923442 0.001 +3.350175339050861 -0.2719533863021317 0.001 +4.374051148464403 1.653734129828722 0.001 +-3.117217991600541 -9.271740347313264 0.001 +0.8552311266369838 1.324416954617967 0.001 +0.1680715414500256 0.9821644182824063 0.001 +1.89802600943551 0.3281978147534534 0.001 +0.8651086158118791 -0.09214421631135336 0.001 +1.799250131849136 1.047699127643727 0.001 +-0.04634696641014575 0.09212702699045668 0.001 +0.166157649835871 0.04906974916825203 0.001 +9.549528126031657 1.084030402097003 0.001 +13.9140869861516 9.102970939817791 0.001 +7.642841730972102 5.126997569090764 0.001 +0.3345794913059131 0.2651875276186502 0.001 +0.7803971526805219 -0.06481261927976234 0.001 +0.8754735014899712 0.7769313254902892 0.001 +-6.269220298506688 -9.139823127309947 0.001 +3.838944828179024 0.5534278118904045 0.001 +-0.1167170949691761 0.6463618666166616 0.001 +3.036977968857881 1.119253849800987 0.001 +0.9840976232048826 1.010443929199323 0.001 +0.9022988426501316 0.06722739053284486 0.001 +0.9209763753047751 0.04787569609976976 0.001 +-0.09907201121074159 0.8281869087934093 0.001 +2.798787232146514 0.9684919137180558 0.001 +0.9210639611094645 0.229841582274819 0.001 +-5.436953438995262 5.129488258998413 0.001 +2.85407516500111 1.089881506912721 0.001 +0.03277779633486513 0.8513909833618548 0.001 +1.093920847544747 0.6051430455420647 0.001 +4.286924244157871 -0.4625730579231899 0.001 +3.747982597143324 0.5043474665123616 0.001 +0.2219251910470165 -0.01063688301255173 0.001 +7.258027032325053 7.425912023306855 0.001 +2.896760318809356 1.010486380512654 0.001 +0.3883787751957883 0.01085374544572653 0.001 +1.748651954682022 -0.3054065632821345 0.001 +0.2161012252167176 0.4785815641774565 0.001 +4.691581923350848 0.3549424547292721 0.001 +0.910281460604568 0.6948719854025535 0.001 +2.038329207903069 0.3741193287243212 0.001 +-9.036957652096424 -6.135668031556984 0.001 +0.2570621229116505 0.02617266162928248 0.001 +-0.1777705533571452 1.052820758669751 0.001 +-0.2522967992777188 1.016018396424599 0.001 +1.178794738817421 -0.1069628878560721 0.001 +3.671761811862915 -0.272353677697632 0.001 +2.533491704222826 -1.129356490307396 0.001 +4.719253633305502 0.5047364788522679 0.001 +4.243342420543873 1.616216170665106 0.001 +0.3006193062636467 -0.001252675680084632 0.001 +1.778927315069765 1.434361558599243 0.001 +0.1132040592122271 0.7628620002993995 0.001 +3.782945983245873 1.159042913548046 0.001 +3.83255960179465 -2.238104905423749 0.001 +-0.6323619428179394 -1.091067656046435 0.001 +2.02896673779684 1.955717217765281 0.001 +0.4823035519929289 1.105302740814554 0.001 +3.328786744669473 -0.0523666649314122 0.001 +0.7715991263543163 4.187842976580209 0.001 +-0.02018494173536634 1.17388628308086 0.001 +17.16863824370035 0.3952857894763691 0.001 +-0.4251146932182769 -5.513261334416288 0.001 +4.571159280692981 3.436466160212907 0.001 +1.182977848152227 1.136091289110702 0.001 +11.10265002412288 -8.040458383860884 0.001 +12.22249723244122 -0.07144838924153428 0.001 +16.3842113411408 0.4434153815658027 0.001 +1.155962749019048 1.095288339329863 0.001 +-4.96431960655452 3.579010095224228 0.001 +1.223975316448179 1.023635947191556 0.001 +3.142492511988221 0.4764830048548401 0.001 +3.511735562857138 0.3458500904014129 0.001 +0.1951205708639911 0.3068039197246888 0.001 +1.51988864540239 1.071353660528516 0.001 +0.26152584976413 1.122231246830194 0.001 +0.2883972358620501 1.12092513536556 0.001 +1.028535892350487 -0.1121266507814624 0.001 +3.227652512396263 -0.9671436512104086 0.001 +0.2396045006031827 0.3559035389044484 0.001 +0.08775225562041433 0.5148150217258346 0.001 +3.247562527751878 -0.7342656141586635 0.001 +-0.1435911173341028 1.238005764027854 0.001 +-2.101873451360395 1.053627420480245 0.001 +6.961317790660676 -0.7880215876836356 0.001 +0.6969630432577198 0.1292344024176066 0.001 +0.5134219430333444 0.03378427128061304 0.001 +-0.1692300612213269 0.7889633662033344 0.001 +2.446039084339923 0.265876647649706 0.001 +2.179063487906724 -1.184770288813046 0.001 +0.2845155361358275 0.1834740604260852 0.001 +5.00174625186293 0.1470887036739981 0.001 +0.3443892466484533 0.1000482853516195 0.001 +17.25407677312046 -5.55697678926979 0.001 +0.07806819937905946 0.328849474331518 0.001 +9.958223549368551 6.79315031909081 0.001 +4.067355289251948 1.733794069596423 0.001 +0.960737867854406 0.2279968489076696 0.001 +3.900799917726919 -0.02266445484185946 0.001 +10.77883366766435 3.088762583626552 0.001 +-0.3660954656902074 3.719203897534186 0.001 +0.8837670317629155 0.2452365869771006 0.001 +-0.03380252235236425 0.1373910180932817 0.001 +1.351718794670842 -0.5742785020310328 0.001 +0.1953819770982848 0.907655319454683 0.001 +0.9238418163423825 -0.1155324106648538 0.001 +0.1091593725945467 0.03961113475904311 0.001 +1.081354333692239 0.7469670520112024 0.001 +0.2220251590278767 0.4382110866744532 0.001 +2.589456552776012 -0.3553483342248104 0.001 +1.674721878572825 1.073356323488631 0.001 +7.952231418379919 0.7182151045660619 0.001 +-0.04927578687253522 0.9010377953316817 0.001 +2.617983195117673 0.334159078941333 0.001 +11.45241789699508 -7.518549892957406 0.001 +3.900686678397335 1.064670185843338 0.001 +2.235590975539449 -0.06833368909941623 0.001 +0.6479725191340799 0.1854666153807565 0.001 +8.436337416129511 1.988412030602788 0.001 +-5.320858052768 6.128218077813572 0.001 +0.5211304624645685 -0.03581415093338639 0.001 +2.311359102568242 6.01124070687346 0.001 +3.123943537708127 1.349704718026724 0.001 +1.824604107265244 0.2514200212482619 0.001 +0.8167351251538715 -0.07308225763291686 0.001 +2.583336879547612 0.5313957859023157 0.001 +0.4596612563842583 -0.1284201284351683 0.001 +0.8447759503904697 0.5190352195639827 0.001 +6.246983753764515 -1.147599811132669 0.001 +3.939161747935819 0.04064321201233517 0.001 +0.2744962617209862 1.002565445329533 0.001 +0.05910076964328723 0.3094527949634399 0.001 +-0.129497657097224 0.4458473919321518 0.001 +-7.986854653092551 0.05606291099959403 0.001 +0.3220926536110284 0.4597868247829217 0.001 +-0.0940062709063041 0.6867360036535279 0.001 +17.37638384351324 -2.9508946652344 0.001 +-1.700562564167818 9.038108286941494 0.001 +2.380877196193804 -0.6839804109530007 0.001 +3.793068072236235 0.3362504251376951 0.001 +0.397543337923947 -0.09816357720441074 0.001 +2.427191844496146 0.9973205598712119 0.001 +1.08747219676349 0.4360684341807797 0.001 +1.568887432864985 0.3855693914112398 0.001 +-0.09680690358778678 0.8660187235920341 0.001 +2.801115543804018 0.6917637691927464 0.001 +3.564640892352776 1.02414768128466 0.001 +0.1664922186569105 -0.002570001575692345 0.001 +-3.876673981979716 -0.4600044408272073 0.001 +1.495420071376066 3.140086241113878 0.001 +0.961971526821424 -0.8992771510086057 0.001 +-0.04125698821675233 1.080484427157541 0.001 +12.06819480590104 6.94559572417237 0.001 +2.259252896288822 0.07359197537567926 0.001 +0.1700899080846635 0.1935622421304518 0.001 +1.671050482341766 -0.06972978731286794 0.001 +4.338847377791122 -0.3495488353431175 0.001 +16.28879549099322 9.172190332754315 0.001 +5.495387998510115 0.9691880401925629 0.001 +0.01552494191627177 0.1576841196025597 0.001 +7.822262768072631 9.116440559395382 0.001 +13.23195193353691 -0.8837285372913162 0.001 +4.334617902528482 0.4405493282575765 0.001 +2.096344809645871 1.175528008565467 0.001 +3.199579857099807 0.5237798045936487 0.001 +1.757788147768506 0.2788034687902232 0.001 +0.4307010326433389 0.0101583678321193 0.001 +11.02445956357636 -4.166422954571132 0.001 +-0.0903087474885421 0.1760501045908335 0.001 +2.440049795767319 3.253632644425502 0.001 +2.152941490085285 3.104955237617717 0.001 +0.5071689843385094 0.1414635512462539 0.001 +0.1974200698980464 1.231795947790048 0.001 +4.387675892798879 1.473503166993238 0.001 +0.710148621257663 -0.7098561543271943 0.001 +0.9518507542156771 -0.1264859199908421 0.001 +0.009559695112085362 0.8700029154090523 0.001 +4.755121520703134 0.1173991286807623 0.001 +5.90436419021789 -2.62206103384877 0.001 +0.1051582819055565 0.970284211789862 0.001 +0.07792086351361303 0.832428781797702 0.001 +8.420351615473887 -8.18847344844497 0.001 +2.056353972178146 0.6234367881779335 0.001 +-0.2399861581607586 1.159002910157907 0.001 +0.7557378173996958 -0.06281260668275052 0.001 +0.141499106478211 1.055516622279939 0.001 +0.1341584960323866 1.008282833199985 0.001 +3.207856657566794 -7.08130138669203 0.001 +0.6458428174051996 0.08215347540525998 0.001 +1.333611960508051 0.564020346835886 0.001 +2.798579689009994 -4.282093620753803 0.001 +3.340084439071384 -3.105679733897057 0.001 +-0.01364734922103106 0.02198693251844448 0.001 +3.32063824353186 -0.2027372275503608 0.001 +-0.1088289557076632 -0.7124118893814825 0.001 +0.1637479204208084 1.066792987721583 0.001 +0.8308138730823137 0.2796952067591503 0.001 +0.3669226881120374 1.178014065534284 0.001 +0.8337764597492419 0.6232446413600912 0.001 +4.060340701740309 0.03810235581073852 0.001 +-6.620475240054469 9.19568826168369 0.001 +10.09397309145311 -0.4707701311432746 0.001 +-2.740693928416341 0.8285910827520534 0.001 +0.3542330672618237 0.7197075068443169 0.001 +11.0437846506915 1.78105069104048 0.001 +-1.073279177987544 6.596498176124963 0.001 +1.444373539021841 0.7720224355319062 0.001 +1.849022581101379 6.901567680833841 0.001 +1.857976316973264 -0.9861628911114015 0.001 +18.93861591817074 3.494841398816175 0.001 +4.06778929176224 0.2008732308860366 0.001 +3.822972914352555 -1.861809665781567 0.001 +-9.349970692961339 -4.617476688290704 0.001 +2.777533742475987 2.064517425917784 0.001 +3.85899891298795 0.3163753119884456 0.001 +2.825703499684078 -0.03145963611130378 0.001 +4.608174461165564 -0.8917297378771445 0.001 +0.9778141022302633 -0.01729627704637183 0.001 +1.555333953883725 0.05355822287435112 0.001 +-5.141566296960525 1.955628651463879 0.001 +0.4559472594195154 -0.0689210902094254 0.001 +0.2118239836918065 0.8852884939776213 0.001 +0.06700865148520704 0.1913965340098076 0.001 +2.013175168892924 -1.89750135554019 0.001 +3.977795610555122 1.381556208729841 0.001 +0.5751670444143864 -0.03066697347809945 0.001 +0.9767396336749578 1.112558321563429 0.001 +2.049660667313317 -0.01254931529025447 0.001 +2.699251284164127 0.05899668963779558 0.001 +0.5522989061711595 -0.1016737350244588 0.001 +2.333205311191857 -0.1004000436068095 0.001 +-0.1575784817101105 0.7475182837340244 0.001 +0.5905429145187574 1.140782039760506 0.001 +0.8683421700370936 0.3509937660168633 0.001 +1.281104306859074 -0.7784317246613858 0.001 +4.481753013541491 1.860559878926214 0.001 +2.422136568696843 0.1808978705634674 0.001 +-4.347963938630089 1.731578596036539 0.001 +0.1410247242700291 0.2176582534799034 0.001 +1.036957772877162 0.9207098719700483 0.001 +2.324769375255239 0.3730124059200032 0.001 +13.51174394055782 -7.956277644322815 0.001 +2.735826027497825 -0.4570334624661151 0.001 +1.09271673061232 0.463651623816386 0.001 +2.551758716440758 0.4328425014448196 0.001 +2.346643406051356 0.983632365604824 0.001 +1.058849706860124 0.515401675211362 0.001 +0.8616573040256099 -0.05710956302885044 0.001 +2.1828169206852 7.583242278521529 0.001 +16.69398025756643 5.810766475603778 0.001 +-6.27678942529373 -4.507660703748524 0.001 +1.081514235144396 0.8527253777401028 0.001 +3.597870015283258 -0.4500707257451367 0.001 +2.964443005363693 -1.327710370061168 0.001 +-0.1794649504327049 0.5700691146739109 0.001 +1.295608637698779 0.8222447399189901 0.001 +-0.1211454440731769 0.9669290011597307 0.001 +3.421536343894545 -0.004846028627885995 0.001 +2.562348697781716 0.3708205020339976 0.001 +0.8006870417467895 0.8484021108414521 0.001 +2.854747265926271 -2.040670211598954 0.001 +0.4423215094096567 -0.1020571582318014 0.001 +-3.305481993310989 4.057363676131362 0.001 +-0.01970072572257954 0.1041778718449131 0.001 +2.486247035408477 0.09479203160861302 0.001 +5.365304167465182 1.638771460142193 0.001 +0.07234575554867193 0.9627223558246588 0.001 +15.57606914770359 6.749268433547681 0.001 +0.5858001681849424 0.08665910335364142 0.001 +2.427076515537611 1.134349762627452 0.001 +2.341452372688152 0.839906399858523 0.001 +2.758756634713203 1.270183481933101 0.001 +1.213022550510242 0.4136198393617481 0.001 +-0.2980235006025176 0.003423744953673306 0.001 +0.6182757793995839 -0.05394776853376591 0.001 +1.243381250848811 4.649667965190559 0.001 +1.593131517626557 0.8522669303312251 0.001 +3.948452115782176 1.088947029145136 0.001 +0.2927205224448999 0.08677474078644266 0.001 +3.550793665483252 0.264033147587425 0.001 +3.554802216251804 -0.01025478188224853 0.001 +0.2177943782423682 0.7551540516403076 0.001 +0.1480314219151246 0.8247103001011507 0.001 +0.1669775030376758 1.012188146370334 0.001 +1.468055585473809 2.575612944096798 0.001 +0.9778134465212324 0.04865479587426919 0.001 +-0.1129297322877565 -0.09257148527442446 0.001 +5.764424685850865 -1.375598123351543 0.001 +3.064263325839553 -0.3106089656561341 0.001 +2.42187651467489 0.863360806692373 0.001 +15.00187360404622 5.159009722373851 0.001 +-0.1078285840103073 0.7792080510189616 0.001 +1.04079542396714 0.4373963502499113 0.001 +-3.710897161636053 6.3469408152601 0.001 +3.713267455468417 0.1121798290297098 0.001 +3.744799434888268 0.1547995403346629 0.001 +1.715605280094956 0.6458916466417098 0.001 +0.2191651103069843 0.3852670935756001 0.001 +0.0206066798209902 0.1044756479516681 0.001 +2.894759325651555 -0.02494151261247749 0.001 +2.19146393096339 -6.285782495377576 0.001 +2.902996090792718 4.897940413265959 0.001 +1.650671395709871 0.2682557536267269 0.001 +-0.07499425474180507 -3.439480568444865 0.001 +-0.610957009054182 -3.688351287669835 0.001 +-0.2956979478373403 2.505822966246349 0.001 +0.08840841407610958 -0.1143775082910545 0.001 +5.250783405776549 -5.438249621378898 0.001 +2.234506184908847 0.3830887519763776 0.001 +3.092862110516536 0.705395000818776 0.001 +19.12298283608695 1.85711750739693 0.001 +2.117096925975699 0.07321397171953083 0.001 +0.4627554971460579 -0.08566164918352534 0.001 +-0.2016326392376959 0.6166353148261351 0.001 +3.821895138277323 0.9348658181823462 0.001 +2.660424608015397 1.116521335950437 0.001 +3.71423680308029 1.050589364708647 0.001 +1.112836145674154 -0.01749337449527456 0.001 +0.7955912487827355 0.2660414125509746 0.001 +5.105025278163337 -3.761704352185832 0.001 +1.627709967541413 -3.656732593125962 0.001 +-0.2481285888668879 8.067539248275038 0.001 +0.1600121125239042 0.292063254862258 0.001 +2.996296373825137 5.965938213328678 0.001 +1.386785021823992 -0.15185934928068 0.001 +1.895605254849006 1.371306393257354 0.001 +7.53963428184637 -3.247991864873812 0.001 +0.005115000560094602 0.2381760781401191 0.001 +2.943029556867877 0.1932074683293255 0.001 +0.902253926158221 -0.1467080170567915 0.001 +3.48961569635652 0.9943304451029322 0.001 +-2.925731968755168 5.513801878263206 0.001 +2.628847777897169 1.751092824553855 0.001 +1.765521403399583 -0.4384764502277422 0.001 +0.2155961365364484 0.1479303282704672 0.001 +19.11028754325077 9.134039548482312 0.001 +1.649666238633853 1.130475279401027 0.001 +0.9689108769593435 -0.0888290204717169 0.001 +19.2137172728735 5.100725471312911 0.001 +4.016259882912398 1.068023094227333 0.001 +4.109942893887576 -9.091686376247088 0.001 +0.6569847352024841 -0.03835830874077747 0.001 +3.566771711867397 0.9256557906310371 0.001 +2.805839867527907 -0.0792043196175391 0.001 +2.74091400107743 1.013854423368251 0.001 +4.234210525297181 0.1479224417435479 0.001 +4.243406368977258 0.05355349809474558 0.001 +1.054041163998051 0.1239250944732199 0.001 +1.073626091088107 0.1109312270827202 0.001 +0.4285907640057016 -0.07824739243534537 0.001 +3.401852699057313 -0.7115922210299506 0.001 +6.512261072055594 0.4879728235505619 0.001 +3.453367676749294 -0.4285468297424482 0.001 +1.065510364835108 0.4288231327613463 0.001 +0.06851231422683672 0.4799530476962539 0.001 +1.065830383135519 0.911515314241815 0.001 +0.9472164792246056 0.6763502782345248 0.001 +0.7087798517773924 1.217330843942899 0.001 +2.95308366530331 1.147989297378675 0.001 +0.5027736012298522 0.009590032519336151 0.001 +1.125681627025779 0.4146653712687051 0.001 +2.203538339995273 0.301560510270112 0.001 +0.1440876293861239 0.7982942799042685 0.001 +2.76663271802403 -0.0033943490851601 0.001 +2.536619399767722 0.9670410754058516 0.001 +1.231769257940612 0.6878791627284315 0.001 +2.070233219977465 0.7708747541483696 0.001 +2.287309991636779 0.1791670905177943 0.001 +0.148161987140446 0.7317557924614415 0.001 +2.419126558422897 0.3975037920490588 0.001 +0.9677951959119456 0.5041538348790232 0.001 +0.7658118592838056 0.1232654586525004 0.001 +-9.108785678644217 9.113084677771905 0.001 +-0.1322099041075316 0.5867494596745747 0.001 +0.3201000067764773 0.4288722560407595 0.001 +0.783460586142094 0.186558218731377 0.001 +0.3929887282792977 0.02372634803364715 0.001 +-0.01434080636041115 0.08475369977853804 0.001 +-0.01632371512931388 0.2237463981316973 0.001 +5.925618992781781 2.100971225489827 0.001 +7.999032062926092 2.481330301564245 0.001 +0.250069914397675 0.1647068059463729 0.001 +2.358731238935015 1.231339201161859 0.001 +-0.2134271877602616 0.9644418037095595 0.001 +2.596888595960078 0.6529823056816414 0.001 +2.166557638082802 -0.7835544748457716 0.001 +-0.09149087506771368 0.7015246578216481 0.001 +18.24855666562879 -5.695188838569944 0.001 +4.108092045093002 1.260694640395812 0.001 +3.671028931369815 0.2668754606636658 0.001 +3.740920788831473 1.251334137798989 0.001 +4.440843453972343 -3.646846461651705 0.001 +2.858783815660614 0.4206965589547469 0.001 +3.003934543239433 0.6624240704456859 0.001 +2.691837711056669 0.1344790174866951 0.001 +3.577713044363074 -0.607017831684124 0.001 +0.7924177464852251 -0.08018690314056373 0.001 +-5.455663520722304 -5.144695285114577 0.001 +3.196577435158994 1.060344906382867 0.001 +2.268836012813753 0.5245187732697388 0.001 +0.9492929635727755 0.3868374238690861 0.001 +0.8759465858847444 0.5726580636049206 0.001 +1.531434248240484 -5.778318667503312 0.001 +0.6712481837532068 0.001749595339110468 0.001 +0.4183758848866811 1.139583785873976 0.001 +0.1035170297050517 0.2301971976655869 0.001 +8.543630893284675 -6.570786305821056 0.001 +0.9474939707938632 0.4201306642034595 0.001 +-0.1573946993048815 1.150960268572866 0.001 +1.199898284610405 0.5337353367939024 0.001 +0.7311165254012766 0.08787117152551632 0.001 +0.763217597757452 0.1475649760649584 0.001 +1.733719205003426 0.9744016323178115 0.001 +0.2069914892586541 -1.837757785273856 0.001 +5.058063500514232 -1.490894995276705 0.001 +3.541159799206206 1.492011698125944 0.001 +4.392809588597435 -6.863240468121658 0.001 +1.016405497558397 1.316250143011556 0.001 +1.020244554599527 0.04793610126899896 0.001 +-0.1418764069967054 -0.008210329133922771 0.001 +6.483861939356743 5.856134701156571 0.001 +-0.298317976870806 0.7116979183428641 0.001 +3.299800746962942 1.935271837683192 0.001 +-0.07029295583098386 1.026978938062868 0.001 +2.765448572956374 1.174928396447209 0.001 +0.009305120434599147 1.092584224611058 0.001 +0.2388610065081957 0.5390660160376011 0.001 +0.1097449788421023 -0.1014043936852507 0.001 +2.613724760705359 0.759994434994861 0.001 +0.931580182440389 0.3054076583138456 0.001 +0.07118401611401493 0.8043907443893256 0.001 +3.561918401000357 0.1243661575881322 0.001 +0.08256583315099827 0.913176118365631 0.001 +0.2962455369731302 0.326005817445629 0.001 +1.919015353428994 0.6934703057829986 0.001 +3.447424001746128 5.277285171461886 0.001 +3.020447356317436 0.8793293562713154 0.001 +2.237858353189402 0.5758758548607613 0.001 +3.688047163331531 0.3584472918918232 0.001 +2.497835567098125 -0.5791740244473437 0.001 +2.505695796683239 0.8139716143976169 0.001 +0.1113209136456779 0.9294317292449851 0.001 +0.2309935560086095 0.1899307126513409 0.001 +1.040158601566712 0.6345447388244988 0.001 +1.612704598185172 -0.03996172427864306 0.001 +1.110958078890459 0.3477281184152539 0.001 +1.136118545088569 0.985191549573617 0.001 +3.563596433713088 0.762397242845507 0.001 +4.008469655828236 0.4679028211266911 0.001 +4.094726382950271 0.4646798005660625 0.001 +1.124957348381067 0.6419499447070869 0.001 +4.593427006595894 -0.06460244499288892 0.001 +0.3099535286411888 0.2544415831337488 0.001 +-0.1110221466671635 0.911020741272165 0.001 +1.687733562785789 0.1583187458784479 0.001 +2.070108187162858 0.8204522476184928 0.001 +2.87100370355691 0.2332210062070273 0.001 +2.308533966566147 0.2431072240128378 0.001 +0.3962867396874075 0.1203172302225157 0.001 +0.5369958993427659 0.02478345782569445 0.001 +1.253517134284602 -0.37671258725942 0.001 +0.2667439264356894 0.05654848838394949 0.001 +-1.060606170564158 0.9300887287124975 0.001 +-0.1785260919166053 0.1386498777905497 0.001 +-3.83279742483924 9.210724046554937 0.001 +3.314200424781912 0.8209907635752423 0.001 +1.2938110675533 1.107870087432097 0.001 +1.09359954077354 0.9827587803066299 0.001 +3.564319435882368 0.464852618348682 0.001 +5.274384587898627 -0.5618727416623797 0.001 +-1.901204201737277 -4.367490853609495 0.001 +0.4566292143528405 1.113285009182877 0.001 +-8.151723562454267 -6.632348087769511 0.001 +1.365720530263064 2.944878929988904 0.001 +3.04539777881106 -0.139897376064708 0.001 +3.682301918794727 0.7215726189956305 0.001 +0.7428429983637247 0.1349812537142286 0.001 +-0.1283271321727237 1.063754493391566 0.001 +3.839435611015821 -0.03416196576420829 0.001 +3.864481141330955 1.001595597693583 0.001 +0.1207650965717851 0.2636008491888301 0.001 +0.7999202720589089 0.6304573045854034 0.001 +11.48994832118177 -9.067524479607316 0.001 +1.762000956375428 -0.05426101232477989 0.001 +10.07364173583876 -6.753270591760121 0.001 +2.918214310055839 -0.5098721728028119 0.001 +1.122909855427727 1.157962371402686 0.001 +3.917729657528454 1.139241528989214 0.001 +1.845721258794164 -0.1172150120098403 0.001 +0.2606727833901909 0.8041021141615043 0.001 +-0.2969241496079206 1.10685839547577 0.001 +3.228657493698506 -0.1845624041944423 0.001 +0.8950902573519636 -0.09755124662671351 0.001 +0.03458602924486249 0.3071488244333047 0.001 +1.135991538979319 0.8974492682268194 0.001 +1.015824110520666 0.9649390899336939 0.001 +-5.078576655911538 -3.340410796627966 0.001 +3.104821899408622 0.83646431839193 0.001 +2.005464815299138 -0.2254700406590098 0.001 +0.124342677682623 1.064133210747493 0.001 +0.006920191942911961 0.1246574061926201 0.001 +0.352376406396876 0.001146931747833051 0.001 +9.267977387890816 -4.700803747395021 0.001 +0.8871817180958227 -0.02351182057316275 0.001 +14.60992375039109 -5.487622652545477 0.001 +5.266131604503533 1.979790272920746 0.001 +1.995161164090093 0.657989291223954 0.001 +0.7843786284923361 -0.4126013170927025 0.001 +0.9812749668317358 0.1738190836696302 0.001 +17.17781858669362 -8.306870297674148 0.001 +0.8159002181326026 0.7232117284560333 0.001 +2.399034802360982 1.065736040665911 0.001 +5.099989606007928 1.229590960753476 0.001 +3.204413329656884 0.8685170545042553 0.001 +1.833393149173682 1.537568950369231 0.001 +1.871286211914571 0.266236626373978 0.001 +3.65956161035558 0.924686837644067 0.001 +3.091881099493435 0.2000639883593822 0.001 +0.9076132984286798 0.5312952754676094 0.001 +-1.471039596781447 5.168873316396357 0.001 +3.173809657032666 0.6347271403584909 0.001 +3.794576603577561 0.1355804950739097 0.001 +2.743301977729406 0.7504838981079031 0.001 +2.498585829451442 0.5921965980255379 0.001 +0.5299453143248151 0.0919271749049172 0.001 +1.569256135706957 1.155274000866106 0.001 +2.572763992265553 0.03634868733495795 0.001 +4.460811151213805 6.148367494745038 0.001 +-0.1961306315608771 0.4706900148251307 0.001 +1.044669304502476 0.1081173597931055 0.001 +3.303593044814755 0.5094347099826024 0.001 +0.1864068903940235 0.3668713178212563 0.001 +2.446958097791203 -0.05904681325514046 0.001 +-4.888729567242184 -7.546791279840086 0.001 +0.03379031682298694 0.06683694053516044 0.001 +1.043344203612371 -0.0190818019408492 0.001 +1.01031984111285 0.1690176302381581 0.001 +-3.615087627887798 -7.672180757240739 0.001 +0.6679520766284246 1.766157486136674 0.001 +2.722479366496798 1.399976523701456 0.001 +0.02974388937151238 0.1398334722875747 0.001 +4.03634378622997 0.810582124561384 0.001 +12.44229162533721 4.092060595967332 0.001 +-0.7458151095821637 1.13095223356145 0.001 +2.856294285351176 0.6607524572913557 0.001 +3.587398333164792 1.271567572475278 0.001 +5.982404912423897 3.747262249715965 0.001 +-9.06888635142991 3.990705555487627 0.001 +4.443131468096185 0.654425886587213 0.001 +1.363681993302156 1.006397657628979 0.001 +2.296992474346793 -1.38706316639304 0.001 +0.08343986109628079 1.029812308535988 0.001 +1.08521331290898 0.5477767259067753 0.001 +-0.6312907638885448 2.339887421815797 0.001 +0.2988008023414359 0.7752906858378628 0.001 +2.649808430630221 0.5973969920722353 0.001 +0.9144062284791684 -0.06942162970787634 0.001 +3.431936922885869 0.7099875131510908 0.001 +3.644790487914627 0.31690053939005 0.001 +0.3538526970010397 0.287040708065257 0.001 +2.614661892478412 -0.2948512663644779 0.001 +5.005846875942257 1.046914628297569 0.001 +1.486148186266435 0.3820889172579287 0.001 +1.973136018010246 -8.864887946343793e-05 0.001 +3.627898934508412 1.725382213703321 0.001 +2.774959860141843 -0.362260248016908 0.001 +0.1992606759439647 0.414592681219196 0.001 +0.127531290693785 0.05447533752544063 0.001 +3.963738670497062 0.9790476601515032 0.001 +1.425644365391517 0.1939498497423698 0.001 +0.2383203944673397 0.4419056723727797 0.001 +1.689346350560156 0.08991949105236462 0.001 +2.496662253602498 0.8812004158395779 0.001 +2.73052138684303 0.3431957030969256 0.001 +3.782000348761623 -0.1677416348423327 0.001 +1.512520522370264 1.208025380122511 0.001 +4.657866053221469 2.685452076470548 0.001 +0.8126049554333825 8.360504487634797 0.001 +1.17143468874507 2.181464124116285 0.001 +0.5506817759702156 0.06023050780614665 0.001 +4.901579733635208 -2.044713952814343 0.001 +4.765209677042249 -8.282786060796628 0.001 +0.2280224226818927 0.03690838359610953 0.001 +-2.222683164579553 -5.208883890577201 0.001 +4.493497514247815 0.4588535263927234 0.001 +-1.212204553694986 1.776200059923088 0.001 +4.103556579295818 3.161718312005302 0.001 +19.04665287519733 -8.053482431898221 0.001 +0.3557914921146401 -0.04761684264309856 0.001 +1.819662103484878 0.1298927082888618 0.001 +0.05047233770136533 0.1619276321114126 0.001 +4.363296828174851 2.528868606076732 0.001 +8.834296594380106 0.6954183983314514 0.001 +2.618960262358358 -0.06324420865366807 0.001 +0.7924286311410558 0.1548541925267801 0.001 +0.2596335155686315 0.4189080366064669 0.001 +-0.2159055895714689 0.05903885497439344 0.001 +3.497057838738921 1.121888259388215 0.001 +7.120610175151691 3.113319138191311 0.001 +19.02736262275135 -9.03500613205394 0.001 +2.905998336663986 9.309335984949948 0.001 +1.087743248562371 0.6791316433815177 0.001 +0.1631839105933537 0.1205192880728125 0.001 +2.857972499056887 0.8503949745758869 0.001 +7.037012105498256 0.7997988067324202 0.001 +0.9415408181861979 0.2412316695849159 0.001 +18.54850975611566 9.222416502069816 0.001 +4.022889696433434 -0.1319606469268758 0.001 +1.416073730007211 1.879693537617102 0.001 +0.6283829629623143 1.142427360012769 0.001 +1.115339116989319 0.5397426694159991 0.001 +1.093705441844178 0.2703063647607292 0.001 +0.007198449329178688 1.145437428889085 0.001 +2.867270169301488 0.7381142873076647 0.001 +3.31752268602695 -4.411727894958705 0.001 +0.3092675508854561 0.1952841029676818 0.001 +-7.166641504250134 4.955733878023137 0.001 +-0.4491665116044467 0.7434393510864304 0.001 +-0.006438505741147811 0.1506304620215957 0.001 +-0.2901477806396027 0.6101752841604728 0.001 +0.5556088150858602 1.136161601411065 0.001 +-8.830471761065832 -9.313462452768622 0.001 +6.210074908775095 1.809425055788152 0.001 +1.11186406855968 0.7517872351239878 0.001 +-0.3996914313404982 1.421031217589333 0.001 +0.7657037131454636 0.04375583387062054 0.001 +0.06268210057452848 1.00636187140467 0.001 +2.228573492181411 0.8687932252708471 0.001 +13.0322503245323 -0.2882505372135395 0.001 +4.786647983952559 -0.5976063495183199 0.001 +3.030753634406693 0.9279281690124381 0.001 +1.510043185593541 -0.07687037554430579 0.001 +-8.280988251945688 9.12185094177792 0.001 +-9.098203893851036 8.285228311319099 0.001 +0.09629182061035335 0.9528825990533534 0.001 +2.147171509898112 0.5914655454653093 0.001 +-0.02046189445531673 1.114696522926206 0.001 +1.080977311933399 -0.09217198810313264 0.001 +1.033388069280215 0.3114799801779435 0.001 +0.8417816730783095 -1.271546743974047 0.001 +7.019604114993791 -6.720542692882836 0.001 +0.2072239334860926 0.3246842801432488 0.001 +-4.24521376540434 7.98923921138667 0.001 +-0.07407198191970943 0.1478112772840954 0.001 +1.059056683451148 0.981228083620585 0.001 +0.2992368464743578 0.3896316758086741 0.001 +0.8634924846849262 0.294768887163715 0.001 +0.1318428481747092 2.340578453010926 0.001 +19.23583719728535 4.465190715870441 0.001 +0.2208676588790234 0.2070137025853126 0.001 +1.763519884693891 0.9044483639146601 0.001 +0.4158900184984856 -0.1168502932882517 0.001 +2.099163736357074 -0.2846557015951119 0.001 +1.621147795048461 1.186999925298216 0.001 +0.8667258842174134 0.4792914977163515 0.001 +0.3776590307133334 0.2186435662403528 0.001 +-0.06437084868217362 0.2692820146379566 0.001 +5.118844460140902 1.589187661079618 0.001 +2.919509272313613 0.9424853956343588 0.001 +1.757693732460274 0.1563808912788247 0.001 +0.2357310627025397 0.0675427307666461 0.001 +0.02919593049432845 -0.2178752133974168 0.001 +0.09667370353610273 0.1029402911618554 0.001 +3.516453373300016 0.920522240476404 0.001 +0.3045905910792611 -0.1474705055439164 0.001 +1.078573712060819 0.6235309244975512 0.001 +-3.556893948036436 4.809153181534953 0.001 +14.40431479688636 -1.40246839092385 0.001 +2.203858052678682 -0.3359486251115066 0.001 +3.079318175243304 7.474922989277764 0.001 +-6.210903846501404 8.304118340597039 0.001 +0.4322951256838962 9.26055997328319 0.001 +4.130222345010782 0.4284224102606167 0.001 +0.7752686728632985 0.2211593994110467 0.001 +0.1094861238054989 0.7984832780675125 0.001 +2.479309333315364 -0.1207534044193768 0.001 +-0.06431219026370602 0.0399224114409441 0.001 +0.3991677639262476 0.155715577150196 0.001 +2.129495731191326 0.6580702399883979 0.001 +-0.2076902858409785 -6.51104144332006 0.001 +1.082447659292619 0.6430917872980498 0.001 +4.788601462471934 -1.441684232166489 0.001 +1.70698811095161 1.14638104741394 0.001 +0.4657462880685913 -0.02532660456810954 0.001 +1.475837316969075 1.283882725665322 0.001 +-0.005793579140353226 0.8910853316851963 0.001 +3.632480151250005 0.4082784093205417 0.001 +-6.308492018375784 1.392947989905325 0.001 +0.1232742407684176 1.116376462474107 0.001 +-0.06264608511238766 0.7145226597816916 0.001 +0.863454749571359 0.6738868078375569 0.001 +2.561990572037346 1.126754468211726 0.001 +1.739346249695608 0.7478971158967359 0.001 +1.361615535451754 1.327119168879063 0.001 +0.05233600459824576 0.8735480492495583 0.001 +2.487541850800401 1.166184204065217 0.001 +0.9438447175989211 -0.09035956383209461 0.001 +1.53433267766677 -0.1808784045537735 0.001 +0.9114589034683582 0.2539672504872023 0.001 +4.018799250990784 0.6867229661996139 0.001 +0.2267829466176017 0.2480377201096004 0.001 +0.6802931880685628 0.09884796805883134 0.001 +2.19435630839531 0.3400111547024374 0.001 +3.055933182524253 1.259519248420026 0.001 +-0.09747221686172786 0.7475893226760203 0.001 +0.2060666999480562 -0.1365170493082302 0.001 +3.173032222004952 -0.06224160849894073 0.001 +1.352477032159389 0.8043849642906116 0.001 +1.090449491211806 0.03162053109384875 0.001 +0.1510737090619213 0.9677217426795159 0.001 +0.2413017517287364 0.2736240555045394 0.001 +1.03525984236396 0.5043672934300246 0.001 +3.295405439251821 0.1819945947730566 0.001 +3.673071259906119 0.6006250256940242 0.001 +0.4146342884803187 0.03645253303387787 0.001 +3.564632682340046 1.147481893459231 0.001 +0.1321940447998132 0.4718409730429193 0.001 +-0.3083618859567352 0.4422586633048032 0.001 +0.8973230100865422 0.7757181507889706 0.001 +16.16280639010868 1.388702482768717 0.001 +4.017729057666298 0.4014054353768044 0.001 +-0.2478647726953185 -1.076195256265904 0.001 +0.006400785718219905 0.7617837167831385 0.001 +-0.020416038812349 -0.05362654426430444 0.001 +-0.09265890261337158 0.429671583280815 0.001 +0.06682588760703922 0.00236361188929524 0.001 +-7.168959209124123 3.982466777124505 0.001 +0.6579680105882437 -0.009067875199920833 0.001 +3.09690345740373 0.5837624637931004 0.001 +0.8309557103362577 0.1309279139065851 0.001 +0.1082990271395099 0.3550093547534354 0.001 +0.9466030021057139 0.537191622348801 0.001 +8.759114879426681 -1.311131186250384 0.001 +-5.683064893310597 2.898374308209313 0.001 +1.365450257058272 0.452353855860137 0.001 +2.703993082926906 3.701622080289454 0.001 +2.009312918370027 0.4513412890730542 0.001 +-0.05786287481339858 0.1293034197685201 0.001 +2.002088985776495 0.7825560651325025 0.001 +11.2820111057783 4.446118113125941 0.001 +2.10654050505546 0.2884877601542359 0.001 +0.9924233651109132 0.5083702397161859 0.001 +2.527651610225397 0.5067574103976397 0.001 +0.541450472025482 0.121366286540707 0.001 +0.593099613673202 -0.09319402698061087 0.001 +3.999969933735192 -0.1939625970681188 0.001 +-0.1042160616086445 2.857521705886263 0.001 +1.485815163039655 -1.764504961358735 0.001 +0.2882658559312191 0.753271888711904 0.001 +0.3478631959926435 1.157592215505442 0.001 +0.02613807383997682 0.02200396154189104 0.001 +0.3112210990917049 1.36593105967697 0.001 +-0.1818230545776148 0.6697485617953932 0.001 +3.438755143751111 1.392490105143945 0.001 +0.8672592622836574 -0.00504148399016011 0.001 +-0.04099610000797743 -0.03991194268137892 0.001 +0.9000267628755484 0.0262337831868903 0.001 +0.4783679905850332 0.1348574949887317 0.001 +0.7577676556405951 0.6277464768804752 0.001 +1.837564964284542 0.07489642530993301 0.001 +1.65145112627377 0.02363614070894268 0.001 +0.3271278546694113 0.6787992966289451 0.001 +0.4428598174685703 -2.540709963393821 0.001 +0.6738131729456175 0.05085773912519102 0.001 +2.983305443293909 -0.3573199379185554 0.001 +2.788446561753087 0.2656192572410231 0.001 +1.744301541569564 0.04409070882485554 0.001 +5.190804642400563 3.64866610609797 0.001 +1.073759576622783 0.2178590322439956 0.001 +0.7562408130704441 0.4672639797482105 0.001 +0.00354327825289847 0.1904354146180599 0.001 +1.547468660891632 3.9627222889669 0.001 +4.217187901782403 3.972832004748659 0.001 +0.3774637859994802 0.2670093081768528 0.001 +-1.353854705879634 2.865948108538231 0.001 +0.9678011674320508 -0.3252018194243013 0.001 +1.254379322946709 1.675312975474554 0.001 +5.331247563730845 3.052499899337797 0.001 +1.085835890478302 -0.03596746972783302 0.001 +0.1312981333528921 0.6662330806454824 0.001 +0.3100728014344061 0.056911714707371 0.001 +0.1903521169724363 0.4914530602400396 0.001 +0.3347079439421962 0.1292332417333428 0.001 +0.250629008171474 1.063647505581371 0.001 +-8.131807111547751 -9.487649477251578 0.001 +6.913228079528351 2.069475671876246 0.001 +0.272154451401509 0.7860233253830716 0.001 +4.949001631728081 1.37829703095555 0.001 +4.248176971360088 -0.0487122908007098 0.001 +1.162560999600437 -0.8763012821725594 0.001 +0.5911046370121127 1.196069429462685 0.001 +0.9300814514053899 0.5215982749715258 0.001 +2.067420671460214 2.267479197984143 0.001 +1.032262271817635 0.9908839558125424 0.001 +1.158969970862152 0.1621548360186033 0.001 +3.38570849352925 -1.230269952041976 0.001 +0.230440586229909 0.5060075252342343 0.001 +8.464920813794844 2.967879814092882 0.001 +0.5072254275380809 -0.7399827557063686 0.001 +0.4274475346013673 -0.919093384757107 0.001 +3.803069622551758 -0.3771782734551803 0.001 +1.000072996549959 0.9103007390830405 0.001 +3.849330409694679 -0.2096491928331214 0.001 +-5.613299759493463 -8.478674972861716 0.001 +0.1650520737071381 1.124414290622362 0.001 +0.6948322504578097 0.2774929417842114 0.001 +0.8163519116633579 0.4795566756990294 0.001 +0.1848087265093037 0.4347999123468828 0.001 +16.34277917117989 2.564867959524698 0.001 +0.378758543180033 0.06737342376518152 0.001 +4.239419616463829 1.233056530728716 0.001 +4.282368626882652 1.166400806244183 0.001 +17.10059233048319 8.664364987310801 0.001 +16.34401874176172 8.294750992430112 0.001 +0.07979526182556362 0.5541946502552215 0.001 +0.1130967744699387 0.07905748944202665 0.001 +2.945937041682267 0.8802043936243648 0.001 +-1.496438688650889 -0.691136808926298 0.001 +0.4953091606211569 0.2245688019346599 0.001 +2.02331504316779 0.9532163067886713 0.001 +4.185765934321634 1.773156111843342 0.001 +2.754455461102344 0.619169944628334 0.001 +0.6964325621597985 -0.04925553005694659 0.001 +3.076507176799148 1.140871001656005 0.001 +-9.156415314597634 -8.453362343759869 0.001 +2.029743800458998 0.1355592070943537 0.001 +-0.2187620198319163 1.237315730274852 0.001 +0.7508931438922654 2.004475838980466 0.001 +3.493253836286591 -0.03835260114207405 0.001 +1.694155765076869 0.8268087697473488 0.001 +0.08178855500781633 0.1360091916714072 0.001 +3.154594972123371 0.3687827256659342 0.001 +1.745808863959939 -8.093742572639574 0.001 +0.09747486460592066 0.01971127370260271 0.001 +1.867156924790794 -0.2737934205132729 0.001 +4.320848470176943 0.8724354035845852 0.001 +-0.1932341356695847 0.8748026941331771 0.001 +0.0802926403277243 0.08320483520485085 0.001 +1.160199023222881 0.6893408482849893 0.001 +-0.06549765010133327 1.071458000990179 0.001 +-0.1301525861081926 0.9970798939065411 0.001 +0.7073517229286186 5.504791063839988 0.001 +-0.06742104358536351 0.1063329397601299 0.001 +0.1293681779576963 0.9053816989335207 0.001 +0.5036266033557002 0.09832658644504069 0.001 +2.813780316750651 1.220938403711161 0.001 +0.2528105992815072 -0.04001837761581865 0.001 +1.98868270456605 1.702399455471822 0.001 +0.7409457476493492 -0.0425266361354046 0.001 +3.895221986164052 2.837816738842027 0.001 +0.7741521226596736 -0.1371946387584626 0.001 +0.4021541933181625 -0.002429657127525876 0.001 +0.7831035572769106 1.130375900041279 0.001 +2.178216913868863 1.158539234274557 0.001 +1.007301607707842 1.123677793469041 0.001 +2.698890900323214 1.06436796471 0.001 +3.998688702435194 0.8707153514830295 0.001 +-7.171664068826553 8.059269952882783 0.001 +2.539942133671289 -0.100892476751815 0.001 +-0.06011387731507568 0.2281148823818701 0.001 +0.09146350479109078 0.06181523620380244 0.001 +0.773541707273677 0.402664367917674 0.001 +0.05584211717201461 0.8379623110930249 0.001 +0.9133772732377361 0.642425809876351 0.001 +2.301478353337144 -0.2293429323169336 0.001 +17.44713714417787 -1.730925861586963 0.001 +1.636966966574072 0.7534114395798436 0.001 +0.6872184947725788 0.07726236898434803 0.001 +0.0331707516032632 1.122612679306801 0.001 +2.086842473837258 0.4760097057396806 0.001 +1.758561699590273 1.235199470615444 0.001 +0.2214204724149542 0.3113470629403634 0.001 +4.379331023520646 -0.1955687500216877 0.001 +0.7210607363932201 -0.09446457158720806 0.001 +3.647972723564425 -0.06380145347006802 0.001 +0.7161464666158696 1.136681421485523 0.001 +0.1406436979641721 0.1948533024295173 0.001 +1.531398057210525 2.270362838693368 0.001 +1.332592608216592 2.230995046934853 0.001 +1.643745457864599 2.444652976667685 0.001 +1.94495036064394 2.464516800396537 0.001 +0.09847604483891155 0.4876173524320854 0.001 +2.720877194568522 -0.1141203699952114 0.001 +12.00689219953144 -4.964205829344721 0.001 +0.2208778267554869 0.09369249743268693 0.001 +12.99771703432332 8.185437749204585 0.001 +6.383796037545899 -8.423155190448654 0.001 +2.035619870115335 0.9983933198259665 0.001 +0.1546879627892197 0.8105238695289724 0.001 +3.628767463039867 0.470913511357815 0.001 +4.127003817123546 1.525657835013937 0.001 +3.440710535432361 1.258039575742515 0.001 +-2.75114766943835 -2.445857121340366 0.001 +1.136031087925735 0.9416800823977047 0.001 +5.351780368717081 2.568944738321207 0.001 +2.819517183829741 -0.1584442977258507 0.001 +1.095001735179318 1.070280120276516 0.001 +4.183371548312144 -0.655203042345352 0.001 +3.437170449589134 0.3142206347350978 0.001 +3.435079723457033 0.5968587170824255 0.001 +3.401277092810312 0.5395372052990151 0.001 +0.8073584318332838 0.0008197009551854266 0.001 +10.08660376725017 7.464610539721066 0.001 +-8.90990512728205 -4.929023636187241 0.001 +-2.500993793397599 -3.231247182135072 0.001 +0.5974256630844996 -0.01674296711872021 0.001 +1.733959213801605 0.0972737453400912 0.001 +0.1664181900946662 0.1612373469466315 0.001 +-0.03335317500430807 0.8740252836473545 0.001 +1.15167444383397 0.9217574513532645 0.001 +3.912225433181537 0.5528348033352483 0.001 +4.818322516483992 -3.493671817072589 0.001 +2.272134031369437 -0.5371723855395569 0.001 +-0.1266035978418453 0.7578852507654212 0.001 +0.03537735765463286 0.9219460879783935 0.001 +0.8788797688315451 -0.102788270057457 0.001 +0.8764679185395756 -0.1208210219004228 0.001 +0.8455036311896834 -0.1442746959785732 0.001 +0.8344375353530559 0.4239716765580251 0.001 +3.49788718760377 1.313904485685764 0.001 +0.7337601950094814 0.4018818041269823 0.001 +0.4478464913198399 3.619171699764727 0.001 +0.4551068556480757 1.069609338332466 0.001 +3.932500973144009 -0.3519408491210997 0.001 +0.2369338905151844 0.7720486372134798 0.001 +-0.06351667230662422 -0.05386421474842999 0.001 +5.297563202728795 0.6651587213512239 0.001 +2.182233789144249 0.2062714334191303 0.001 +0.06266515234754567 0.5092714398473459 0.001 +0.6384666237036491 0.02933078857045219 0.001 +1.01467089175281 0.6204408513693209 0.001 +-0.03125125555777705 0.2020349614764737 0.001 +2.292146071443362 0.30772650794949 0.001 +0.4497307099708644 0.1978064871726282 0.001 +-3.24389123190611 -5.354292564289935 0.001 +12.284663244067 -6.068814547317556 0.001 +1.801638533144933 0.8346338742038761 0.001 +0.798516241447095 -0.05586752150383924 0.001 +0.6981490730377602 0.7391247020029716 0.001 +1.485256170453597 0.8738898826473374 0.001 +-0.8760440800793861 4.370128815532779 0.001 +1.506968180594729 -0.03007942756769861 0.001 +0.8702545828981054 0.5106039924934013 0.001 +1.104210031861109 0.2964795457185145 0.001 +2.85175323989615 -0.1110246999900076 0.001 +-0.07742607451552019 1.046338095073763 0.001 +0.3667889622437166 -0.03100427016696933 0.001 +18.41027568331003 1.387232031743509 0.001 +3.783291444309864 1.501690367519727 0.001 +0.9903783032503085 0.6182775101317073 0.001 +2.58975376503717 0.2711319462653581 0.001 +0.07418793788001921 0.8716832381808048 0.001 +1.680921829957405 0.7040897224660421 0.001 +-0.06731778371013272 0.8858057881298005 0.001 +17.11224501745462 1.141965218367079 0.001 +4.269233240368242 1.968073289522319 0.001 +0.06993056288090341 0.7114997201755663 0.001 +0.05426165540884884 0.6737726494773814 0.001 +1.303459318371859 0.422537807296554 0.001 +2.361113784168155 1.909977794892129 0.001 +0.4898266743516451 -0.4760939326022094 0.001 +1.352967962602891 1.139559552699053 0.001 +0.06294761369157845 0.2729935090245101 0.001 +4.361444763160406 2.140937847039553 0.001 +0.9168738419943487 0.4203513826242342 0.001 +0.3440163661225319 -0.1698316447397975 0.001 +7.775972034085733 -1.031942696810381 0.001 +11.24512905109559 -6.795679724208243 0.001 +0.4499356857281862 0.1217528069148029 0.001 +-9.268380365994888 -4.042292547212027 0.001 +-0.177910187604303 0.05208076303378784 0.001 +2.276440321210676 0.8227246659766992 0.001 +3.6310383209646 -0.2401980048053208 0.001 +19.44817364417029 -2.129027622827208 0.001 +0.09582203191251426 0.257958622389126 0.001 +15.39784088724527 -6.102410788054541 0.001 +1.533925110224359 -1.200632182651584 0.001 +4.230645181969184 1.048871664964118 0.001 +0.8346064652395275 -0.05557016599742681 0.001 +0.844580284822972 0.03386052188907874 0.001 +16.34366664512707 7.490136209815526 0.001 +3.7279153208328 0.8697801220005434 0.001 +0.1371261352268636 0.09672645244894963 0.001 +1.991859533485584 1.092075707410756 0.001 +3.713970367583428 0.2101919113704058 0.001 +4.241012376825078 0.4740180810927274 0.001 +0.3708666367433315 0.03216916929706139 0.001 +3.564041639674418 -1.38584942866259 0.001 +-0.1879465745228845 0.3178221267502681 0.001 +0.3512449526304603 0.07730291282929164 0.001 +3.690532555210233 0.9453916707352288 0.001 +2.058834012504762 0.2465917164425208 0.001 +1.708855092980798 -0.02045630574430042 0.001 +1.456689827378562 -0.08401574901409964 0.001 +0.7284441558344817 -0.01790073372070527 0.001 +-0.1103742532297375 0.6812718673076141 0.001 +-0.07805321323487513 0.4071572511070914 0.001 +0.24808570313896 0.1224939467827368 0.001 +0.1934639089210203 -0.1991287283255472 0.001 +2.594707733386057 -0.2070080371504824 0.001 +0.1603220576230732 0.8519341090912415 0.001 +0.1713128391371447 0.2236552113510793 0.001 +0.6395091843876779 0.2441797221120305 0.001 +2.128625538216636 0.001323325377523732 0.001 +3.07931291808454 -0.01791354662358156 0.001 +2.990948615281525 0.7883443253955068 0.001 +0.1269477521331449 1.03633280455092 0.001 +3.543172450906926 1.096778638053258 0.001 +0.6902683812109576 0.407304955313657 0.001 +2.43725355511569 -2.137228645060576 0.001 +2.25271593161233 -0.1105470746815352 0.001 +0.4081795407570852 1.10306995493351 0.001 +2.502835033062351 2.943157597987909 0.001 +0.01742124135241305 0.1976465656195421 0.001 +0.2177708798898665 1.002867850577795 0.001 +3.7315273844918 0.4039144367140692 0.001 +0.1421657798952076 -0.07730543127472186 0.001 +0.5584566867816743 0.0841375641654029 0.001 +1.591489629459454 0.0660680828287362 0.001 +0.5273303419407962 -0.01195784495901991 0.001 +15.2885761901772 -1.836319001057704 0.001 +3.346170569042931 0.8774589683130189 0.001 +1.467540829580464 -0.02354103990519206 0.001 +3.816863475401213 1.090251097224256 0.001 +2.257867843818331 0.7302180792349366 0.001 +1.955204554236075 0.7646681691007793 0.001 +0.1342597316202315 -0.09245224024788586 0.001 +0.8752776794620969 1.138911991644845 0.001 +6.041962494051715 0.07649497694265525 0.001 +3.426476659032418 -0.577258999907916 0.001 +2.40609798668239 -1.082306947528671 0.001 +0.5145348623490829 -0.1042401192246691 0.001 +0.1526242176896001 0.06971850200035995 0.001 +0.4943869669088957 -0.2343896705672523 0.001 +-9.243948818669855 1.175016022681055 0.001 +5.013434203780297 -0.4617044362352631 0.001 +0.2597381769379751 0.6100489319709969 0.001 +-0.08751357249533534 0.8945221753377628 0.001 +4.901500312490917 1.704113753023224 0.001 +4.910419253229045 -3.038983400861871 0.001 +3.837289860446817 0.006415769388644056 0.001 +2.657330314147472 0.3752352962956089 0.001 +4.584763833954113 0.5356849964355466 0.001 +1.070160831086005 1.156195524608235 0.001 +0.8082589455746799 0.5450896027963104 0.001 +3.097819822326533 0.2927506911170471 0.001 +4.335895247339076 -7.797723847073482 0.001 +2.312481365835906 0.4210589365275651 0.001 +-0.2356448840218031 0.9219169482928721 0.001 +1.662658469644176 0.6001736709860384 0.001 +-7.222181953103458 -8.161682768613515 0.001 +4.147331113695907 -0.03899005266037307 0.001 +4.336224757388342 0.1830718800169458 0.001 +1.074307927864519 0.6649878368624277 0.001 +11.75238981402743 5.576926499116101 0.001 +-0.03171547033897174 0.7281454009420112 0.001 +0.06049452698916166 1.049802065161938 0.001 +-4.08450265315027 0.5229175031953144 0.001 +2.944103582563161 0.631953758735702 0.001 +2.18420458687844 0.8047788468812787 0.001 +3.579955599757212 -0.07685456332241453 0.001 +12.19546657978786 1.493929212761282 0.001 +0.7766180494643171 -0.0950179014415293 0.001 +0.8385748193398396 0.687628196076831 0.001 +4.081005755092566 -0.02505064677484649 0.001 +2.388971788082201 -0.08397446754149784 0.001 +0.2534346919243357 0.1875838336307969 0.001 +-9.291290655899243 0.5268710799509995 0.001 +1.185306764500302 1.274137063882901 0.001 +0.07053146715311555 -0.09329276416226256 0.001 +0.3320969186914333 0.826552283929831 0.001 +0.1967677087345299 0.890964912185362 0.001 +13.03637123926411 -5.463837490379324 0.001 +13.8830274219798 -4.643740610468245 0.001 +0.1575987613664673 1.274913048633002 0.001 +1.029862508906133 0.2358592132554461 0.001 +8.209607599722865 -3.886426665222428 0.001 +-9.15486173720304 -7.05171792509073 0.001 +4.121635779250591 1.386601190658739 0.001 +0.03812711003173164 0.03976876896744096 0.001 +0.2359889770542574 0.9022986331792748 0.001 +-0.005611760564858109 0.3216231880883049 0.001 +2.936326430216702 0.5233117880187792 0.001 +6.733687825624961 2.765825411980458 0.001 +1.877471028773898 0.2252745383193895 0.001 +-0.1186254775310931 0.09040965385385541 0.001 +3.911820968436528 0.4050057805970585 0.001 +2.467718498946836 -0.1713372277992423 0.001 +1.287237002440871 0.4694326162819881 0.001 +2.636797909206453 1.02227879266016 0.001 +0.08918444789393722 0.3936903576474687 0.001 +0.3148874559611675 0.2814743448540597 0.001 +1.891134821583591 0.9733071990279892 0.001 +1.114542031019183 0.03104215923339855 0.001 +2.478497142431819 0.2137518448477167 0.001 +0.124322874181427 0.9642076692346635 0.001 +0.1355836534148805 0.9797305122173896 0.001 +-3.174741900426802 9.435457964928332 0.001 +1.117485987407033 0.7670117258396041 0.001 +-0.06359343674798006 0.8275708657009317 0.001 +3.676978743749629 -0.1011143621585938 0.001 +4.491452639616183 -0.4128503252104772 0.001 +0.007297512681799978 0.4345773839595006 0.001 +5.333516085835109 -0.2084590444393821 0.001 +-0.08608868632397378 0.238331644775853 0.001 +0.7297847863660001 0.1951068446305429 0.001 +1.831920068026427 0.9426164467973264 0.001 +-0.9260655247059328 2.731581057261709 0.001 +0.2117787038135097 0.7798921680194959 0.001 +11.97919846776175 -7.649443586341611 0.001 +2.304154934234813 0.1066009571128615 0.001 +2.106546069643516 -0.5904677408699885 0.001 +1.989475165385662 0.05845826245312766 0.001 +3.684971059881479 1.344875522356252 0.001 +-0.08116014497958079 0.06276786630965099 0.001 +0.9090798526794867 -0.02230846670286407 0.001 +-6.219345031264798 5.765744154081084 0.001 +1.065767146058279 0.1410704494088919 0.001 +-6.594661598907519 6.662345429582975 0.001 +3.763151208062861 0.2498290254265864 0.001 +0.9513144131750506 0.6346076616424895 0.001 +2.829157066692182 1.444318619815263 0.001 +6.616296053785135 -5.757754206642465 0.001 +0.6996433780294397 0.2098223955752696 0.001 +0.1922485161127504 -0.403436862750608 0.001 +13.67681238002584 6.524647124610429 0.001 +1.098175853739665 0.6617038058427562 0.001 +0.09595448294866261 -0.07451975027818103 0.001 +2.674157614984469 0.3247808289924853 0.001 +4.306255128597233 -2.816688876739206 0.001 +1.249519000087602 0.4124096955381408 0.001 +2 13 0 0 +2 17 0 0 +2 21 0 0 +2 25 0 0 +2 26 0 6039 +6240 +6241 +6242 +6243 +6244 +6245 +6246 +6247 +6248 +6249 +6250 +6251 +6252 +6253 +6254 +6255 +6256 +6257 +6258 +6259 +6260 +6261 +6262 +6263 +6264 +6265 +6266 +6267 +6268 +6269 +6270 +6271 +6272 +6273 +6274 +6275 +6276 +6277 +6278 +6279 +6280 +6281 +6282 +6283 +6284 +6285 +6286 +6287 +6288 +6289 +6290 +6291 +6292 +6293 +6294 +6295 +6296 +6297 +6298 +6299 +6300 +6301 +6302 +6303 +6304 +6305 +6306 +6307 +6308 +6309 +6310 +6311 +6312 +6313 +6314 +6315 +6316 +6317 +6318 +6319 +6320 +6321 +6322 +6323 +6324 +6325 +6326 +6327 +6328 +6329 +6330 +6331 +6332 +6333 +6334 +6335 +6336 +6337 +6338 +6339 +6340 +6341 +6342 +6343 +6344 +6345 +6346 +6347 +6348 +6349 +6350 +6351 +6352 +6353 +6354 +6355 +6356 +6357 +6358 +6359 +6360 +6361 +6362 +6363 +6364 +6365 +6366 +6367 +6368 +6369 +6370 +6371 +6372 +6373 +6374 +6375 +6376 +6377 +6378 +6379 +6380 +6381 +6382 +6383 +6384 +6385 +6386 +6387 +6388 +6389 +6390 +6391 +6392 +6393 +6394 +6395 +6396 +6397 +6398 +6399 +6400 +6401 +6402 +6403 +6404 +6405 +6406 +6407 +6408 +6409 +6410 +6411 +6412 +6413 +6414 +6415 +6416 +6417 +6418 +6419 +6420 +6421 +6422 +6423 +6424 +6425 +6426 +6427 +6428 +6429 +6430 +6431 +6432 +6433 +6434 +6435 +6436 +6437 +6438 +6439 +6440 +6441 +6442 +6443 +6444 +6445 +6446 +6447 +6448 +6449 +6450 +6451 +6452 +6453 +6454 +6455 +6456 +6457 +6458 +6459 +6460 +6461 +6462 +6463 +6464 +6465 +6466 +6467 +6468 +6469 +6470 +6471 +6472 +6473 +6474 +6475 +6476 +6477 +6478 +6479 +6480 +6481 +6482 +6483 +6484 +6485 +6486 +6487 +6488 +6489 +6490 +6491 +6492 +6493 +6494 +6495 +6496 +6497 +6498 +6499 +6500 +6501 +6502 +6503 +6504 +6505 +6506 +6507 +6508 +6509 +6510 +6511 +6512 +6513 +6514 +6515 +6516 +6517 +6518 +6519 +6520 +6521 +6522 +6523 +6524 +6525 +6526 +6527 +6528 +6529 +6530 +6531 +6532 +6533 +6534 +6535 +6536 +6537 +6538 +6539 +6540 +6541 +6542 +6543 +6544 +6545 +6546 +6547 +6548 +6549 +6550 +6551 +6552 +6553 +6554 +6555 +6556 +6557 +6558 +6559 +6560 +6561 +6562 +6563 +6564 +6565 +6566 +6567 +6568 +6569 +6570 +6571 +6572 +6573 +6574 +6575 +6576 +6577 +6578 +6579 +6580 +6581 +6582 +6583 +6584 +6585 +6586 +6587 +6588 +6589 +6590 +6591 +6592 +6593 +6594 +6595 +6596 +6597 +6598 +6599 +6600 +6601 +6602 +6603 +6604 +6605 +6606 +6607 +6608 +6609 +6610 +6611 +6612 +6613 +6614 +6615 +6616 +6617 +6618 +6619 +6620 +6621 +6622 +6623 +6624 +6625 +6626 +6627 +6628 +6629 +6630 +6631 +6632 +6633 +6634 +6635 +6636 +6637 +6638 +6639 +6640 +6641 +6642 +6643 +6644 +6645 +6646 +6647 +6648 +6649 +6650 +6651 +6652 +6653 +6654 +6655 +6656 +6657 +6658 +6659 +6660 +6661 +6662 +6663 +6664 +6665 +6666 +6667 +6668 +6669 +6670 +6671 +6672 +6673 +6674 +6675 +6676 +6677 +6678 +6679 +6680 +6681 +6682 +6683 +6684 +6685 +6686 +6687 +6688 +6689 +6690 +6691 +6692 +6693 +6694 +6695 +6696 +6697 +6698 +6699 +6700 +6701 +6702 +6703 +6704 +6705 +6706 +6707 +6708 +6709 +6710 +6711 +6712 +6713 +6714 +6715 +6716 +6717 +6718 +6719 +6720 +6721 +6722 +6723 +6724 +6725 +6726 +6727 +6728 +6729 +6730 +6731 +6732 +6733 +6734 +6735 +6736 +6737 +6738 +6739 +6740 +6741 +6742 +6743 +6744 +6745 +6746 +6747 +6748 +6749 +6750 +6751 +6752 +6753 +6754 +6755 +6756 +6757 +6758 +6759 +6760 +6761 +6762 +6763 +6764 +6765 +6766 +6767 +6768 +6769 +6770 +6771 +6772 +6773 +6774 +6775 +6776 +6777 +6778 +6779 +6780 +6781 +6782 +6783 +6784 +6785 +6786 +6787 +6788 +6789 +6790 +6791 +6792 +6793 +6794 +6795 +6796 +6797 +6798 +6799 +6800 +6801 +6802 +6803 +6804 +6805 +6806 +6807 +6808 +6809 +6810 +6811 +6812 +6813 +6814 +6815 +6816 +6817 +6818 +6819 +6820 +6821 +6822 +6823 +6824 +6825 +6826 +6827 +6828 +6829 +6830 +6831 +6832 +6833 +6834 +6835 +6836 +6837 +6838 +6839 +6840 +6841 +6842 +6843 +6844 +6845 +6846 +6847 +6848 +6849 +6850 +6851 +6852 +6853 +6854 +6855 +6856 +6857 +6858 +6859 +6860 +6861 +6862 +6863 +6864 +6865 +6866 +6867 +6868 +6869 +6870 +6871 +6872 +6873 +6874 +6875 +6876 +6877 +6878 +6879 +6880 +6881 +6882 +6883 +6884 +6885 +6886 +6887 +6888 +6889 +6890 +6891 +6892 +6893 +6894 +6895 +6896 +6897 +6898 +6899 +6900 +6901 +6902 +6903 +6904 +6905 +6906 +6907 +6908 +6909 +6910 +6911 +6912 +6913 +6914 +6915 +6916 +6917 +6918 +6919 +6920 +6921 +6922 +6923 +6924 +6925 +6926 +6927 +6928 +6929 +6930 +6931 +6932 +6933 +6934 +6935 +6936 +6937 +6938 +6939 +6940 +6941 +6942 +6943 +6944 +6945 +6946 +6947 +6948 +6949 +6950 +6951 +6952 +6953 +6954 +6955 +6956 +6957 +6958 +6959 +6960 +6961 +6962 +6963 +6964 +6965 +6966 +6967 +6968 +6969 +6970 +6971 +6972 +6973 +6974 +6975 +6976 +6977 +6978 +6979 +6980 +6981 +6982 +6983 +6984 +6985 +6986 +6987 +6988 +6989 +6990 +6991 +6992 +6993 +6994 +6995 +6996 +6997 +6998 +6999 +7000 +7001 +7002 +7003 +7004 +7005 +7006 +7007 +7008 +7009 +7010 +7011 +7012 +7013 +7014 +7015 +7016 +7017 +7018 +7019 +7020 +7021 +7022 +7023 +7024 +7025 +7026 +7027 +7028 +7029 +7030 +7031 +7032 +7033 +7034 +7035 +7036 +7037 +7038 +7039 +7040 +7041 +7042 +7043 +7044 +7045 +7046 +7047 +7048 +7049 +7050 +7051 +7052 +7053 +7054 +7055 +7056 +7057 +7058 +7059 +7060 +7061 +7062 +7063 +7064 +7065 +7066 +7067 +7068 +7069 +7070 +7071 +7072 +7073 +7074 +7075 +7076 +7077 +7078 +7079 +7080 +7081 +7082 +7083 +7084 +7085 +7086 +7087 +7088 +7089 +7090 +7091 +7092 +7093 +7094 +7095 +7096 +7097 +7098 +7099 +7100 +7101 +7102 +7103 +7104 +7105 +7106 +7107 +7108 +7109 +7110 +7111 +7112 +7113 +7114 +7115 +7116 +7117 +7118 +7119 +7120 +7121 +7122 +7123 +7124 +7125 +7126 +7127 +7128 +7129 +7130 +7131 +7132 +7133 +7134 +7135 +7136 +7137 +7138 +7139 +7140 +7141 +7142 +7143 +7144 +7145 +7146 +7147 +7148 +7149 +7150 +7151 +7152 +7153 +7154 +7155 +7156 +7157 +7158 +7159 +7160 +7161 +7162 +7163 +7164 +7165 +7166 +7167 +7168 +7169 +7170 +7171 +7172 +7173 +7174 +7175 +7176 +7177 +7178 +7179 +7180 +7181 +7182 +7183 +7184 +7185 +7186 +7187 +7188 +7189 +7190 +7191 +7192 +7193 +7194 +7195 +7196 +7197 +7198 +7199 +7200 +7201 +7202 +7203 +7204 +7205 +7206 +7207 +7208 +7209 +7210 +7211 +7212 +7213 +7214 +7215 +7216 +7217 +7218 +7219 +7220 +7221 +7222 +7223 +7224 +7225 +7226 +7227 +7228 +7229 +7230 +7231 +7232 +7233 +7234 +7235 +7236 +7237 +7238 +7239 +7240 +7241 +7242 +7243 +7244 +7245 +7246 +7247 +7248 +7249 +7250 +7251 +7252 +7253 +7254 +7255 +7256 +7257 +7258 +7259 +7260 +7261 +7262 +7263 +7264 +7265 +7266 +7267 +7268 +7269 +7270 +7271 +7272 +7273 +7274 +7275 +7276 +7277 +7278 +7279 +7280 +7281 +7282 +7283 +7284 +7285 +7286 +7287 +7288 +7289 +7290 +7291 +7292 +7293 +7294 +7295 +7296 +7297 +7298 +7299 +7300 +7301 +7302 +7303 +7304 +7305 +7306 +7307 +7308 +7309 +7310 +7311 +7312 +7313 +7314 +7315 +7316 +7317 +7318 +7319 +7320 +7321 +7322 +7323 +7324 +7325 +7326 +7327 +7328 +7329 +7330 +7331 +7332 +7333 +7334 +7335 +7336 +7337 +7338 +7339 +7340 +7341 +7342 +7343 +7344 +7345 +7346 +7347 +7348 +7349 +7350 +7351 +7352 +7353 +7354 +7355 +7356 +7357 +7358 +7359 +7360 +7361 +7362 +7363 +7364 +7365 +7366 +7367 +7368 +7369 +7370 +7371 +7372 +7373 +7374 +7375 +7376 +7377 +7378 +7379 +7380 +7381 +7382 +7383 +7384 +7385 +7386 +7387 +7388 +7389 +7390 +7391 +7392 +7393 +7394 +7395 +7396 +7397 +7398 +7399 +7400 +7401 +7402 +7403 +7404 +7405 +7406 +7407 +7408 +7409 +7410 +7411 +7412 +7413 +7414 +7415 +7416 +7417 +7418 +7419 +7420 +7421 +7422 +7423 +7424 +7425 +7426 +7427 +7428 +7429 +7430 +7431 +7432 +7433 +7434 +7435 +7436 +7437 +7438 +7439 +7440 +7441 +7442 +7443 +7444 +7445 +7446 +7447 +7448 +7449 +7450 +7451 +7452 +7453 +7454 +7455 +7456 +7457 +7458 +7459 +7460 +7461 +7462 +7463 +7464 +7465 +7466 +7467 +7468 +7469 +7470 +7471 +7472 +7473 +7474 +7475 +7476 +7477 +7478 +7479 +7480 +7481 +7482 +7483 +7484 +7485 +7486 +7487 +7488 +7489 +7490 +7491 +7492 +7493 +7494 +7495 +7496 +7497 +7498 +7499 +7500 +7501 +7502 +7503 +7504 +7505 +7506 +7507 +7508 +7509 +7510 +7511 +7512 +7513 +7514 +7515 +7516 +7517 +7518 +7519 +7520 +7521 +7522 +7523 +7524 +7525 +7526 +7527 +7528 +7529 +7530 +7531 +7532 +7533 +7534 +7535 +7536 +7537 +7538 +7539 +7540 +7541 +7542 +7543 +7544 +7545 +7546 +7547 +7548 +7549 +7550 +7551 +7552 +7553 +7554 +7555 +7556 +7557 +7558 +7559 +7560 +7561 +7562 +7563 +7564 +7565 +7566 +7567 +7568 +7569 +7570 +7571 +7572 +7573 +7574 +7575 +7576 +7577 +7578 +7579 +7580 +7581 +7582 +7583 +7584 +7585 +7586 +7587 +7588 +7589 +7590 +7591 +7592 +7593 +7594 +7595 +7596 +7597 +7598 +7599 +7600 +7601 +7602 +7603 +7604 +7605 +7606 +7607 +7608 +7609 +7610 +7611 +7612 +7613 +7614 +7615 +7616 +7617 +7618 +7619 +7620 +7621 +7622 +7623 +7624 +7625 +7626 +7627 +7628 +7629 +7630 +7631 +7632 +7633 +7634 +7635 +7636 +7637 +7638 +7639 +7640 +7641 +7642 +7643 +7644 +7645 +7646 +7647 +7648 +7649 +7650 +7651 +7652 +7653 +7654 +7655 +7656 +7657 +7658 +7659 +7660 +7661 +7662 +7663 +7664 +7665 +7666 +7667 +7668 +7669 +7670 +7671 +7672 +7673 +7674 +7675 +7676 +7677 +7678 +7679 +7680 +7681 +7682 +7683 +7684 +7685 +7686 +7687 +7688 +7689 +7690 +7691 +7692 +7693 +7694 +7695 +7696 +7697 +7698 +7699 +7700 +7701 +7702 +7703 +7704 +7705 +7706 +7707 +7708 +7709 +7710 +7711 +7712 +7713 +7714 +7715 +7716 +7717 +7718 +7719 +7720 +7721 +7722 +7723 +7724 +7725 +7726 +7727 +7728 +7729 +7730 +7731 +7732 +7733 +7734 +7735 +7736 +7737 +7738 +7739 +7740 +7741 +7742 +7743 +7744 +7745 +7746 +7747 +7748 +7749 +7750 +7751 +7752 +7753 +7754 +7755 +7756 +7757 +7758 +7759 +7760 +7761 +7762 +7763 +7764 +7765 +7766 +7767 +7768 +7769 +7770 +7771 +7772 +7773 +7774 +7775 +7776 +7777 +7778 +7779 +7780 +7781 +7782 +7783 +7784 +7785 +7786 +7787 +7788 +7789 +7790 +7791 +7792 +7793 +7794 +7795 +7796 +7797 +7798 +7799 +7800 +7801 +7802 +7803 +7804 +7805 +7806 +7807 +7808 +7809 +7810 +7811 +7812 +7813 +7814 +7815 +7816 +7817 +7818 +7819 +7820 +7821 +7822 +7823 +7824 +7825 +7826 +7827 +7828 +7829 +7830 +7831 +7832 +7833 +7834 +7835 +7836 +7837 +7838 +7839 +7840 +7841 +7842 +7843 +7844 +7845 +7846 +7847 +7848 +7849 +7850 +7851 +7852 +7853 +7854 +7855 +7856 +7857 +7858 +7859 +7860 +7861 +7862 +7863 +7864 +7865 +7866 +7867 +7868 +7869 +7870 +7871 +7872 +7873 +7874 +7875 +7876 +7877 +7878 +7879 +7880 +7881 +7882 +7883 +7884 +7885 +7886 +7887 +7888 +7889 +7890 +7891 +7892 +7893 +7894 +7895 +7896 +7897 +7898 +7899 +7900 +7901 +7902 +7903 +7904 +7905 +7906 +7907 +7908 +7909 +7910 +7911 +7912 +7913 +7914 +7915 +7916 +7917 +7918 +7919 +7920 +7921 +7922 +7923 +7924 +7925 +7926 +7927 +7928 +7929 +7930 +7931 +7932 +7933 +7934 +7935 +7936 +7937 +7938 +7939 +7940 +7941 +7942 +7943 +7944 +7945 +7946 +7947 +7948 +7949 +7950 +7951 +7952 +7953 +7954 +7955 +7956 +7957 +7958 +7959 +7960 +7961 +7962 +7963 +7964 +7965 +7966 +7967 +7968 +7969 +7970 +7971 +7972 +7973 +7974 +7975 +7976 +7977 +7978 +7979 +7980 +7981 +7982 +7983 +7984 +7985 +7986 +7987 +7988 +7989 +7990 +7991 +7992 +7993 +7994 +7995 +7996 +7997 +7998 +7999 +8000 +8001 +8002 +8003 +8004 +8005 +8006 +8007 +8008 +8009 +8010 +8011 +8012 +8013 +8014 +8015 +8016 +8017 +8018 +8019 +8020 +8021 +8022 +8023 +8024 +8025 +8026 +8027 +8028 +8029 +8030 +8031 +8032 +8033 +8034 +8035 +8036 +8037 +8038 +8039 +8040 +8041 +8042 +8043 +8044 +8045 +8046 +8047 +8048 +8049 +8050 +8051 +8052 +8053 +8054 +8055 +8056 +8057 +8058 +8059 +8060 +8061 +8062 +8063 +8064 +8065 +8066 +8067 +8068 +8069 +8070 +8071 +8072 +8073 +8074 +8075 +8076 +8077 +8078 +8079 +8080 +8081 +8082 +8083 +8084 +8085 +8086 +8087 +8088 +8089 +8090 +8091 +8092 +8093 +8094 +8095 +8096 +8097 +8098 +8099 +8100 +8101 +8102 +8103 +8104 +8105 +8106 +8107 +8108 +8109 +8110 +8111 +8112 +8113 +8114 +8115 +8116 +8117 +8118 +8119 +8120 +8121 +8122 +8123 +8124 +8125 +8126 +8127 +8128 +8129 +8130 +8131 +8132 +8133 +8134 +8135 +8136 +8137 +8138 +8139 +8140 +8141 +8142 +8143 +8144 +8145 +8146 +8147 +8148 +8149 +8150 +8151 +8152 +8153 +8154 +8155 +8156 +8157 +8158 +8159 +8160 +8161 +8162 +8163 +8164 +8165 +8166 +8167 +8168 +8169 +8170 +8171 +8172 +8173 +8174 +8175 +8176 +8177 +8178 +8179 +8180 +8181 +8182 +8183 +8184 +8185 +8186 +8187 +8188 +8189 +8190 +8191 +8192 +8193 +8194 +8195 +8196 +8197 +8198 +8199 +8200 +8201 +8202 +8203 +8204 +8205 +8206 +8207 +8208 +8209 +8210 +8211 +8212 +8213 +8214 +8215 +8216 +8217 +8218 +8219 +8220 +8221 +8222 +8223 +8224 +8225 +8226 +8227 +8228 +8229 +8230 +8231 +8232 +8233 +8234 +8235 +8236 +8237 +8238 +8239 +8240 +8241 +8242 +8243 +8244 +8245 +8246 +8247 +8248 +8249 +8250 +8251 +8252 +8253 +8254 +8255 +8256 +8257 +8258 +8259 +8260 +8261 +8262 +8263 +8264 +8265 +8266 +8267 +8268 +8269 +8270 +8271 +8272 +8273 +8274 +8275 +8276 +8277 +8278 +8279 +8280 +8281 +8282 +8283 +8284 +8285 +8286 +8287 +8288 +8289 +8290 +8291 +8292 +8293 +8294 +8295 +8296 +8297 +8298 +8299 +8300 +8301 +8302 +8303 +8304 +8305 +8306 +8307 +8308 +8309 +8310 +8311 +8312 +8313 +8314 +8315 +8316 +8317 +8318 +8319 +8320 +8321 +8322 +8323 +8324 +8325 +8326 +8327 +8328 +8329 +8330 +8331 +8332 +8333 +8334 +8335 +8336 +8337 +8338 +8339 +8340 +8341 +8342 +8343 +8344 +8345 +8346 +8347 +8348 +8349 +8350 +8351 +8352 +8353 +8354 +8355 +8356 +8357 +8358 +8359 +8360 +8361 +8362 +8363 +8364 +8365 +8366 +8367 +8368 +8369 +8370 +8371 +8372 +8373 +8374 +8375 +8376 +8377 +8378 +8379 +8380 +8381 +8382 +8383 +8384 +8385 +8386 +8387 +8388 +8389 +8390 +8391 +8392 +8393 +8394 +8395 +8396 +8397 +8398 +8399 +8400 +8401 +8402 +8403 +8404 +8405 +8406 +8407 +8408 +8409 +8410 +8411 +8412 +8413 +8414 +8415 +8416 +8417 +8418 +8419 +8420 +8421 +8422 +8423 +8424 +8425 +8426 +8427 +8428 +8429 +8430 +8431 +8432 +8433 +8434 +8435 +8436 +8437 +8438 +8439 +8440 +8441 +8442 +8443 +8444 +8445 +8446 +8447 +8448 +8449 +8450 +8451 +8452 +8453 +8454 +8455 +8456 +8457 +8458 +8459 +8460 +8461 +8462 +8463 +8464 +8465 +8466 +8467 +8468 +8469 +8470 +8471 +8472 +8473 +8474 +8475 +8476 +8477 +8478 +8479 +8480 +8481 +8482 +8483 +8484 +8485 +8486 +8487 +8488 +8489 +8490 +8491 +8492 +8493 +8494 +8495 +8496 +8497 +8498 +8499 +8500 +8501 +8502 +8503 +8504 +8505 +8506 +8507 +8508 +8509 +8510 +8511 +8512 +8513 +8514 +8515 +8516 +8517 +8518 +8519 +8520 +8521 +8522 +8523 +8524 +8525 +8526 +8527 +8528 +8529 +8530 +8531 +8532 +8533 +8534 +8535 +8536 +8537 +8538 +8539 +8540 +8541 +8542 +8543 +8544 +8545 +8546 +8547 +8548 +8549 +8550 +8551 +8552 +8553 +8554 +8555 +8556 +8557 +8558 +8559 +8560 +8561 +8562 +8563 +8564 +8565 +8566 +8567 +8568 +8569 +8570 +8571 +8572 +8573 +8574 +8575 +8576 +8577 +8578 +8579 +8580 +8581 +8582 +8583 +8584 +8585 +8586 +8587 +8588 +8589 +8590 +8591 +8592 +8593 +8594 +8595 +8596 +8597 +8598 +8599 +8600 +8601 +8602 +8603 +8604 +8605 +8606 +8607 +8608 +8609 +8610 +8611 +8612 +8613 +8614 +8615 +8616 +8617 +8618 +8619 +8620 +8621 +8622 +8623 +8624 +8625 +8626 +8627 +8628 +8629 +8630 +8631 +8632 +8633 +8634 +8635 +8636 +8637 +8638 +8639 +8640 +8641 +8642 +8643 +8644 +8645 +8646 +8647 +8648 +8649 +8650 +8651 +8652 +8653 +8654 +8655 +8656 +8657 +8658 +8659 +8660 +8661 +8662 +8663 +8664 +8665 +8666 +8667 +8668 +8669 +8670 +8671 +8672 +8673 +8674 +8675 +8676 +8677 +8678 +8679 +8680 +8681 +8682 +8683 +8684 +8685 +8686 +8687 +8688 +8689 +8690 +8691 +8692 +8693 +8694 +8695 +8696 +8697 +8698 +8699 +8700 +8701 +8702 +8703 +8704 +8705 +8706 +8707 +8708 +8709 +8710 +8711 +8712 +8713 +8714 +8715 +8716 +8717 +8718 +8719 +8720 +8721 +8722 +8723 +8724 +8725 +8726 +8727 +8728 +8729 +8730 +8731 +8732 +8733 +8734 +8735 +8736 +8737 +8738 +8739 +8740 +8741 +8742 +8743 +8744 +8745 +8746 +8747 +8748 +8749 +8750 +8751 +8752 +8753 +8754 +8755 +8756 +8757 +8758 +8759 +8760 +8761 +8762 +8763 +8764 +8765 +8766 +8767 +8768 +8769 +8770 +8771 +8772 +8773 +8774 +8775 +8776 +8777 +8778 +8779 +8780 +8781 +8782 +8783 +8784 +8785 +8786 +8787 +8788 +8789 +8790 +8791 +8792 +8793 +8794 +8795 +8796 +8797 +8798 +8799 +8800 +8801 +8802 +8803 +8804 +8805 +8806 +8807 +8808 +8809 +8810 +8811 +8812 +8813 +8814 +8815 +8816 +8817 +8818 +8819 +8820 +8821 +8822 +8823 +8824 +8825 +8826 +8827 +8828 +8829 +8830 +8831 +8832 +8833 +8834 +8835 +8836 +8837 +8838 +8839 +8840 +8841 +8842 +8843 +8844 +8845 +8846 +8847 +8848 +8849 +8850 +8851 +8852 +8853 +8854 +8855 +8856 +8857 +8858 +8859 +8860 +8861 +8862 +8863 +8864 +8865 +8866 +8867 +8868 +8869 +8870 +8871 +8872 +8873 +8874 +8875 +8876 +8877 +8878 +8879 +8880 +8881 +8882 +8883 +8884 +8885 +8886 +8887 +8888 +8889 +8890 +8891 +8892 +8893 +8894 +8895 +8896 +8897 +8898 +8899 +8900 +8901 +8902 +8903 +8904 +8905 +8906 +8907 +8908 +8909 +8910 +8911 +8912 +8913 +8914 +8915 +8916 +8917 +8918 +8919 +8920 +8921 +8922 +8923 +8924 +8925 +8926 +8927 +8928 +8929 +8930 +8931 +8932 +8933 +8934 +8935 +8936 +8937 +8938 +8939 +8940 +8941 +8942 +8943 +8944 +8945 +8946 +8947 +8948 +8949 +8950 +8951 +8952 +8953 +8954 +8955 +8956 +8957 +8958 +8959 +8960 +8961 +8962 +8963 +8964 +8965 +8966 +8967 +8968 +8969 +8970 +8971 +8972 +8973 +8974 +8975 +8976 +8977 +8978 +8979 +8980 +8981 +8982 +8983 +8984 +8985 +8986 +8987 +8988 +8989 +8990 +8991 +8992 +8993 +8994 +8995 +8996 +8997 +8998 +8999 +9000 +9001 +9002 +9003 +9004 +9005 +9006 +9007 +9008 +9009 +9010 +9011 +9012 +9013 +9014 +9015 +9016 +9017 +9018 +9019 +9020 +9021 +9022 +9023 +9024 +9025 +9026 +9027 +9028 +9029 +9030 +9031 +9032 +9033 +9034 +9035 +9036 +9037 +9038 +9039 +9040 +9041 +9042 +9043 +9044 +9045 +9046 +9047 +9048 +9049 +9050 +9051 +9052 +9053 +9054 +9055 +9056 +9057 +9058 +9059 +9060 +9061 +9062 +9063 +9064 +9065 +9066 +9067 +9068 +9069 +9070 +9071 +9072 +9073 +9074 +9075 +9076 +9077 +9078 +9079 +9080 +9081 +9082 +9083 +9084 +9085 +9086 +9087 +9088 +9089 +9090 +9091 +9092 +9093 +9094 +9095 +9096 +9097 +9098 +9099 +9100 +9101 +9102 +9103 +9104 +9105 +9106 +9107 +9108 +9109 +9110 +9111 +9112 +9113 +9114 +9115 +9116 +9117 +9118 +9119 +9120 +9121 +9122 +9123 +9124 +9125 +9126 +9127 +9128 +9129 +9130 +9131 +9132 +9133 +9134 +9135 +9136 +9137 +9138 +9139 +9140 +9141 +9142 +9143 +9144 +9145 +9146 +9147 +9148 +9149 +9150 +9151 +9152 +9153 +9154 +9155 +9156 +9157 +9158 +9159 +9160 +9161 +9162 +9163 +9164 +9165 +9166 +9167 +9168 +9169 +9170 +9171 +9172 +9173 +9174 +9175 +9176 +9177 +9178 +9179 +9180 +9181 +9182 +9183 +9184 +9185 +9186 +9187 +9188 +9189 +9190 +9191 +9192 +9193 +9194 +9195 +9196 +9197 +9198 +9199 +9200 +9201 +9202 +9203 +9204 +9205 +9206 +9207 +9208 +9209 +9210 +9211 +9212 +9213 +9214 +9215 +9216 +9217 +9218 +9219 +9220 +9221 +9222 +9223 +9224 +9225 +9226 +9227 +9228 +9229 +9230 +9231 +9232 +9233 +9234 +9235 +9236 +9237 +9238 +9239 +9240 +9241 +9242 +9243 +9244 +9245 +9246 +9247 +9248 +9249 +9250 +9251 +9252 +9253 +9254 +9255 +9256 +9257 +9258 +9259 +9260 +9261 +9262 +9263 +9264 +9265 +9266 +9267 +9268 +9269 +9270 +9271 +9272 +9273 +9274 +9275 +9276 +9277 +9278 +9279 +9280 +9281 +9282 +9283 +9284 +9285 +9286 +9287 +9288 +9289 +9290 +9291 +9292 +9293 +9294 +9295 +9296 +9297 +9298 +9299 +9300 +9301 +9302 +9303 +9304 +9305 +9306 +9307 +9308 +9309 +9310 +9311 +9312 +9313 +9314 +9315 +9316 +9317 +9318 +9319 +9320 +9321 +9322 +9323 +9324 +9325 +9326 +9327 +9328 +9329 +9330 +9331 +9332 +9333 +9334 +9335 +9336 +9337 +9338 +9339 +9340 +9341 +9342 +9343 +9344 +9345 +9346 +9347 +9348 +9349 +9350 +9351 +9352 +9353 +9354 +9355 +9356 +9357 +9358 +9359 +9360 +9361 +9362 +9363 +9364 +9365 +9366 +9367 +9368 +9369 +9370 +9371 +9372 +9373 +9374 +9375 +9376 +9377 +9378 +9379 +9380 +9381 +9382 +9383 +9384 +9385 +9386 +9387 +9388 +9389 +9390 +9391 +9392 +9393 +9394 +9395 +9396 +9397 +9398 +9399 +9400 +9401 +9402 +9403 +9404 +9405 +9406 +9407 +9408 +9409 +9410 +9411 +9412 +9413 +9414 +9415 +9416 +9417 +9418 +9419 +9420 +9421 +9422 +9423 +9424 +9425 +9426 +9427 +9428 +9429 +9430 +9431 +9432 +9433 +9434 +9435 +9436 +9437 +9438 +9439 +9440 +9441 +9442 +9443 +9444 +9445 +9446 +9447 +9448 +9449 +9450 +9451 +9452 +9453 +9454 +9455 +9456 +9457 +9458 +9459 +9460 +9461 +9462 +9463 +9464 +9465 +9466 +9467 +9468 +9469 +9470 +9471 +9472 +9473 +9474 +9475 +9476 +9477 +9478 +9479 +9480 +9481 +9482 +9483 +9484 +9485 +9486 +9487 +9488 +9489 +9490 +9491 +9492 +9493 +9494 +9495 +9496 +9497 +9498 +9499 +9500 +9501 +9502 +9503 +9504 +9505 +9506 +9507 +9508 +9509 +9510 +9511 +9512 +9513 +9514 +9515 +9516 +9517 +9518 +9519 +9520 +9521 +9522 +9523 +9524 +9525 +9526 +9527 +9528 +9529 +9530 +9531 +9532 +9533 +9534 +9535 +9536 +9537 +9538 +9539 +9540 +9541 +9542 +9543 +9544 +9545 +9546 +9547 +9548 +9549 +9550 +9551 +9552 +9553 +9554 +9555 +9556 +9557 +9558 +9559 +9560 +9561 +9562 +9563 +9564 +9565 +9566 +9567 +9568 +9569 +9570 +9571 +9572 +9573 +9574 +9575 +9576 +9577 +9578 +9579 +9580 +9581 +9582 +9583 +9584 +9585 +9586 +9587 +9588 +9589 +9590 +9591 +9592 +9593 +9594 +9595 +9596 +9597 +9598 +9599 +9600 +9601 +9602 +9603 +9604 +9605 +9606 +9607 +9608 +9609 +9610 +9611 +9612 +9613 +9614 +9615 +9616 +9617 +9618 +9619 +9620 +9621 +9622 +9623 +9624 +9625 +9626 +9627 +9628 +9629 +9630 +9631 +9632 +9633 +9634 +9635 +9636 +9637 +9638 +9639 +9640 +9641 +9642 +9643 +9644 +9645 +9646 +9647 +9648 +9649 +9650 +9651 +9652 +9653 +9654 +9655 +9656 +9657 +9658 +9659 +9660 +9661 +9662 +9663 +9664 +9665 +9666 +9667 +9668 +9669 +9670 +9671 +9672 +9673 +9674 +9675 +9676 +9677 +9678 +9679 +9680 +9681 +9682 +9683 +9684 +9685 +9686 +9687 +9688 +9689 +9690 +9691 +9692 +9693 +9694 +9695 +9696 +9697 +9698 +9699 +9700 +9701 +9702 +9703 +9704 +9705 +9706 +9707 +9708 +9709 +9710 +9711 +9712 +9713 +9714 +9715 +9716 +9717 +9718 +9719 +9720 +9721 +9722 +9723 +9724 +9725 +9726 +9727 +9728 +9729 +9730 +9731 +9732 +9733 +9734 +9735 +9736 +9737 +9738 +9739 +9740 +9741 +9742 +9743 +9744 +9745 +9746 +9747 +9748 +9749 +9750 +9751 +9752 +9753 +9754 +9755 +9756 +9757 +9758 +9759 +9760 +9761 +9762 +9763 +9764 +9765 +9766 +9767 +9768 +9769 +9770 +9771 +9772 +9773 +9774 +9775 +9776 +9777 +9778 +9779 +9780 +9781 +9782 +9783 +9784 +9785 +9786 +9787 +9788 +9789 +9790 +9791 +9792 +9793 +9794 +9795 +9796 +9797 +9798 +9799 +9800 +9801 +9802 +9803 +9804 +9805 +9806 +9807 +9808 +9809 +9810 +9811 +9812 +9813 +9814 +9815 +9816 +9817 +9818 +9819 +9820 +9821 +9822 +9823 +9824 +9825 +9826 +9827 +9828 +9829 +9830 +9831 +9832 +9833 +9834 +9835 +9836 +9837 +9838 +9839 +9840 +9841 +9842 +9843 +9844 +9845 +9846 +9847 +9848 +9849 +9850 +9851 +9852 +9853 +9854 +9855 +9856 +9857 +9858 +9859 +9860 +9861 +9862 +9863 +9864 +9865 +9866 +9867 +9868 +9869 +9870 +9871 +9872 +9873 +9874 +9875 +9876 +9877 +9878 +9879 +9880 +9881 +9882 +9883 +9884 +9885 +9886 +9887 +9888 +9889 +9890 +9891 +9892 +9893 +9894 +9895 +9896 +9897 +9898 +9899 +9900 +9901 +9902 +9903 +9904 +9905 +9906 +9907 +9908 +9909 +9910 +9911 +9912 +9913 +9914 +9915 +9916 +9917 +9918 +9919 +9920 +9921 +9922 +9923 +9924 +9925 +9926 +9927 +9928 +9929 +9930 +9931 +9932 +9933 +9934 +9935 +9936 +9937 +9938 +9939 +9940 +9941 +9942 +9943 +9944 +9945 +9946 +9947 +9948 +9949 +9950 +9951 +9952 +9953 +9954 +9955 +9956 +9957 +9958 +9959 +9960 +9961 +9962 +9963 +9964 +9965 +9966 +9967 +9968 +9969 +9970 +9971 +9972 +9973 +9974 +9975 +9976 +9977 +9978 +9979 +9980 +9981 +9982 +9983 +9984 +9985 +9986 +9987 +9988 +9989 +9990 +9991 +9992 +9993 +9994 +9995 +9996 +9997 +9998 +9999 +10000 +10001 +10002 +10003 +10004 +10005 +10006 +10007 +10008 +10009 +10010 +10011 +10012 +10013 +10014 +10015 +10016 +10017 +10018 +10019 +10020 +10021 +10022 +10023 +10024 +10025 +10026 +10027 +10028 +10029 +10030 +10031 +10032 +10033 +10034 +10035 +10036 +10037 +10038 +10039 +10040 +10041 +10042 +10043 +10044 +10045 +10046 +10047 +10048 +10049 +10050 +10051 +10052 +10053 +10054 +10055 +10056 +10057 +10058 +10059 +10060 +10061 +10062 +10063 +10064 +10065 +10066 +10067 +10068 +10069 +10070 +10071 +10072 +10073 +10074 +10075 +10076 +10077 +10078 +10079 +10080 +10081 +10082 +10083 +10084 +10085 +10086 +10087 +10088 +10089 +10090 +10091 +10092 +10093 +10094 +10095 +10096 +10097 +10098 +10099 +10100 +10101 +10102 +10103 +10104 +10105 +10106 +10107 +10108 +10109 +10110 +10111 +10112 +10113 +10114 +10115 +10116 +10117 +10118 +10119 +10120 +10121 +10122 +10123 +10124 +10125 +10126 +10127 +10128 +10129 +10130 +10131 +10132 +10133 +10134 +10135 +10136 +10137 +10138 +10139 +10140 +10141 +10142 +10143 +10144 +10145 +10146 +10147 +10148 +10149 +10150 +10151 +10152 +10153 +10154 +10155 +10156 +10157 +10158 +10159 +10160 +10161 +10162 +10163 +10164 +10165 +10166 +10167 +10168 +10169 +10170 +10171 +10172 +10173 +10174 +10175 +10176 +10177 +10178 +10179 +10180 +10181 +10182 +10183 +10184 +10185 +10186 +10187 +10188 +10189 +10190 +10191 +10192 +10193 +10194 +10195 +10196 +10197 +10198 +10199 +10200 +10201 +10202 +10203 +10204 +10205 +10206 +10207 +10208 +10209 +10210 +10211 +10212 +10213 +10214 +10215 +10216 +10217 +10218 +10219 +10220 +10221 +10222 +10223 +10224 +10225 +10226 +10227 +10228 +10229 +10230 +10231 +10232 +10233 +10234 +10235 +10236 +10237 +10238 +10239 +10240 +10241 +10242 +10243 +10244 +10245 +10246 +10247 +10248 +10249 +10250 +10251 +10252 +10253 +10254 +10255 +10256 +10257 +10258 +10259 +10260 +10261 +10262 +10263 +10264 +10265 +10266 +10267 +10268 +10269 +10270 +10271 +10272 +10273 +10274 +10275 +10276 +10277 +10278 +10279 +10280 +10281 +10282 +10283 +10284 +10285 +10286 +10287 +10288 +10289 +10290 +10291 +10292 +10293 +10294 +10295 +10296 +10297 +10298 +10299 +10300 +10301 +10302 +10303 +10304 +10305 +10306 +10307 +10308 +10309 +10310 +10311 +10312 +10313 +10314 +10315 +10316 +10317 +10318 +10319 +10320 +10321 +10322 +10323 +10324 +10325 +10326 +10327 +10328 +10329 +10330 +10331 +10332 +10333 +10334 +10335 +10336 +10337 +10338 +10339 +10340 +10341 +10342 +10343 +10344 +10345 +10346 +10347 +10348 +10349 +10350 +10351 +10352 +10353 +10354 +10355 +10356 +10357 +10358 +10359 +10360 +10361 +10362 +10363 +10364 +10365 +10366 +10367 +10368 +10369 +10370 +10371 +10372 +10373 +10374 +10375 +10376 +10377 +10378 +10379 +10380 +10381 +10382 +10383 +10384 +10385 +10386 +10387 +10388 +10389 +10390 +10391 +10392 +10393 +10394 +10395 +10396 +10397 +10398 +10399 +10400 +10401 +10402 +10403 +10404 +10405 +10406 +10407 +10408 +10409 +10410 +10411 +10412 +10413 +10414 +10415 +10416 +10417 +10418 +10419 +10420 +10421 +10422 +10423 +10424 +10425 +10426 +10427 +10428 +10429 +10430 +10431 +10432 +10433 +10434 +10435 +10436 +10437 +10438 +10439 +10440 +10441 +10442 +10443 +10444 +10445 +10446 +10447 +10448 +10449 +10450 +10451 +10452 +10453 +10454 +10455 +10456 +10457 +10458 +10459 +10460 +10461 +10462 +10463 +10464 +10465 +10466 +10467 +10468 +10469 +10470 +10471 +10472 +10473 +10474 +10475 +10476 +10477 +10478 +10479 +10480 +10481 +10482 +10483 +10484 +10485 +10486 +10487 +10488 +10489 +10490 +10491 +10492 +10493 +10494 +10495 +10496 +10497 +10498 +10499 +10500 +10501 +10502 +10503 +10504 +10505 +10506 +10507 +10508 +10509 +10510 +10511 +10512 +10513 +10514 +10515 +10516 +10517 +10518 +10519 +10520 +10521 +10522 +10523 +10524 +10525 +10526 +10527 +10528 +10529 +10530 +10531 +10532 +10533 +10534 +10535 +10536 +10537 +10538 +10539 +10540 +10541 +10542 +10543 +10544 +10545 +10546 +10547 +10548 +10549 +10550 +10551 +10552 +10553 +10554 +10555 +10556 +10557 +10558 +10559 +10560 +10561 +10562 +10563 +10564 +10565 +10566 +10567 +10568 +10569 +10570 +10571 +10572 +10573 +10574 +10575 +10576 +10577 +10578 +10579 +10580 +10581 +10582 +10583 +10584 +10585 +10586 +10587 +10588 +10589 +10590 +10591 +10592 +10593 +10594 +10595 +10596 +10597 +10598 +10599 +10600 +10601 +10602 +10603 +10604 +10605 +10606 +10607 +10608 +10609 +10610 +10611 +10612 +10613 +10614 +10615 +10616 +10617 +10618 +10619 +10620 +10621 +10622 +10623 +10624 +10625 +10626 +10627 +10628 +10629 +10630 +10631 +10632 +10633 +10634 +10635 +10636 +10637 +10638 +10639 +10640 +10641 +10642 +10643 +10644 +10645 +10646 +10647 +10648 +10649 +10650 +10651 +10652 +10653 +10654 +10655 +10656 +10657 +10658 +10659 +10660 +10661 +10662 +10663 +10664 +10665 +10666 +10667 +10668 +10669 +10670 +10671 +10672 +10673 +10674 +10675 +10676 +10677 +10678 +10679 +10680 +10681 +10682 +10683 +10684 +10685 +10686 +10687 +10688 +10689 +10690 +10691 +10692 +10693 +10694 +10695 +10696 +10697 +10698 +10699 +10700 +10701 +10702 +10703 +10704 +10705 +10706 +10707 +10708 +10709 +10710 +10711 +10712 +10713 +10714 +10715 +10716 +10717 +10718 +10719 +10720 +10721 +10722 +10723 +10724 +10725 +10726 +10727 +10728 +10729 +10730 +10731 +10732 +10733 +10734 +10735 +10736 +10737 +10738 +10739 +10740 +10741 +10742 +10743 +10744 +10745 +10746 +10747 +10748 +10749 +10750 +10751 +10752 +10753 +10754 +10755 +10756 +10757 +10758 +10759 +10760 +10761 +10762 +10763 +10764 +10765 +10766 +10767 +10768 +10769 +10770 +10771 +10772 +10773 +10774 +10775 +10776 +10777 +10778 +10779 +10780 +10781 +10782 +10783 +10784 +10785 +10786 +10787 +10788 +10789 +10790 +10791 +10792 +10793 +10794 +10795 +10796 +10797 +10798 +10799 +10800 +10801 +10802 +10803 +10804 +10805 +10806 +10807 +10808 +10809 +10810 +10811 +10812 +10813 +10814 +10815 +10816 +10817 +10818 +10819 +10820 +10821 +10822 +10823 +10824 +10825 +10826 +10827 +10828 +10829 +10830 +10831 +10832 +10833 +10834 +10835 +10836 +10837 +10838 +10839 +10840 +10841 +10842 +10843 +10844 +10845 +10846 +10847 +10848 +10849 +10850 +10851 +10852 +10853 +10854 +10855 +10856 +10857 +10858 +10859 +10860 +10861 +10862 +10863 +10864 +10865 +10866 +10867 +10868 +10869 +10870 +10871 +10872 +10873 +10874 +10875 +10876 +10877 +10878 +10879 +10880 +10881 +10882 +10883 +10884 +10885 +10886 +10887 +10888 +10889 +10890 +10891 +10892 +10893 +10894 +10895 +10896 +10897 +10898 +10899 +10900 +10901 +10902 +10903 +10904 +10905 +10906 +10907 +10908 +10909 +10910 +10911 +10912 +10913 +10914 +10915 +10916 +10917 +10918 +10919 +10920 +10921 +10922 +10923 +10924 +10925 +10926 +10927 +10928 +10929 +10930 +10931 +10932 +10933 +10934 +10935 +10936 +10937 +10938 +10939 +10940 +10941 +10942 +10943 +10944 +10945 +10946 +10947 +10948 +10949 +10950 +10951 +10952 +10953 +10954 +10955 +10956 +10957 +10958 +10959 +10960 +10961 +10962 +10963 +10964 +10965 +10966 +10967 +10968 +10969 +10970 +10971 +10972 +10973 +10974 +10975 +10976 +10977 +10978 +10979 +10980 +10981 +10982 +10983 +10984 +10985 +10986 +10987 +10988 +10989 +10990 +10991 +10992 +10993 +10994 +10995 +10996 +10997 +10998 +10999 +11000 +11001 +11002 +11003 +11004 +11005 +11006 +11007 +11008 +11009 +11010 +11011 +11012 +11013 +11014 +11015 +11016 +11017 +11018 +11019 +11020 +11021 +11022 +11023 +11024 +11025 +11026 +11027 +11028 +11029 +11030 +11031 +11032 +11033 +11034 +11035 +11036 +11037 +11038 +11039 +11040 +11041 +11042 +11043 +11044 +11045 +11046 +11047 +11048 +11049 +11050 +11051 +11052 +11053 +11054 +11055 +11056 +11057 +11058 +11059 +11060 +11061 +11062 +11063 +11064 +11065 +11066 +11067 +11068 +11069 +11070 +11071 +11072 +11073 +11074 +11075 +11076 +11077 +11078 +11079 +11080 +11081 +11082 +11083 +11084 +11085 +11086 +11087 +11088 +11089 +11090 +11091 +11092 +11093 +11094 +11095 +11096 +11097 +11098 +11099 +11100 +11101 +11102 +11103 +11104 +11105 +11106 +11107 +11108 +11109 +11110 +11111 +11112 +11113 +11114 +11115 +11116 +11117 +11118 +11119 +11120 +11121 +11122 +11123 +11124 +11125 +11126 +11127 +11128 +11129 +11130 +11131 +11132 +11133 +11134 +11135 +11136 +11137 +11138 +11139 +11140 +11141 +11142 +11143 +11144 +11145 +11146 +11147 +11148 +11149 +11150 +11151 +11152 +11153 +11154 +11155 +11156 +11157 +11158 +11159 +11160 +11161 +11162 +11163 +11164 +11165 +11166 +11167 +11168 +11169 +11170 +11171 +11172 +11173 +11174 +11175 +11176 +11177 +11178 +11179 +11180 +11181 +11182 +11183 +11184 +11185 +11186 +11187 +11188 +11189 +11190 +11191 +11192 +11193 +11194 +11195 +11196 +11197 +11198 +11199 +11200 +11201 +11202 +11203 +11204 +11205 +11206 +11207 +11208 +11209 +11210 +11211 +11212 +11213 +11214 +11215 +11216 +11217 +11218 +11219 +11220 +11221 +11222 +11223 +11224 +11225 +11226 +11227 +11228 +11229 +11230 +11231 +11232 +11233 +11234 +11235 +11236 +11237 +11238 +11239 +11240 +11241 +11242 +11243 +11244 +11245 +11246 +11247 +11248 +11249 +11250 +11251 +11252 +11253 +11254 +11255 +11256 +11257 +11258 +11259 +11260 +11261 +11262 +11263 +11264 +11265 +11266 +11267 +11268 +11269 +11270 +11271 +11272 +11273 +11274 +11275 +11276 +11277 +11278 +11279 +11280 +11281 +11282 +11283 +11284 +11285 +11286 +11287 +11288 +11289 +11290 +11291 +11292 +11293 +11294 +11295 +11296 +11297 +11298 +11299 +11300 +11301 +11302 +11303 +11304 +11305 +11306 +11307 +11308 +11309 +11310 +11311 +11312 +11313 +11314 +11315 +11316 +11317 +11318 +11319 +11320 +11321 +11322 +11323 +11324 +11325 +11326 +11327 +11328 +11329 +11330 +11331 +11332 +11333 +11334 +11335 +11336 +11337 +11338 +11339 +11340 +11341 +11342 +11343 +11344 +11345 +11346 +11347 +11348 +11349 +11350 +11351 +11352 +11353 +11354 +11355 +11356 +11357 +11358 +11359 +11360 +11361 +11362 +11363 +11364 +11365 +11366 +11367 +11368 +11369 +11370 +11371 +11372 +11373 +11374 +11375 +11376 +11377 +11378 +11379 +11380 +11381 +11382 +11383 +11384 +11385 +11386 +11387 +11388 +11389 +11390 +11391 +11392 +11393 +11394 +11395 +11396 +11397 +11398 +11399 +11400 +11401 +11402 +11403 +11404 +11405 +11406 +11407 +11408 +11409 +11410 +11411 +11412 +11413 +11414 +11415 +11416 +11417 +11418 +11419 +11420 +11421 +11422 +11423 +11424 +11425 +11426 +11427 +11428 +11429 +11430 +11431 +11432 +11433 +11434 +11435 +11436 +11437 +11438 +11439 +11440 +11441 +11442 +11443 +11444 +11445 +11446 +11447 +11448 +11449 +11450 +11451 +11452 +11453 +11454 +11455 +11456 +11457 +11458 +11459 +11460 +11461 +11462 +11463 +11464 +11465 +11466 +11467 +11468 +11469 +11470 +11471 +11472 +11473 +11474 +11475 +11476 +11477 +11478 +11479 +11480 +11481 +11482 +11483 +11484 +11485 +11486 +11487 +11488 +11489 +11490 +11491 +11492 +11493 +11494 +11495 +11496 +11497 +11498 +11499 +11500 +11501 +11502 +11503 +11504 +11505 +11506 +11507 +11508 +11509 +11510 +11511 +11512 +11513 +11514 +11515 +11516 +11517 +11518 +11519 +11520 +11521 +11522 +11523 +11524 +11525 +11526 +11527 +11528 +11529 +11530 +11531 +11532 +11533 +11534 +11535 +11536 +11537 +11538 +11539 +11540 +11541 +11542 +11543 +11544 +11545 +11546 +11547 +11548 +11549 +11550 +11551 +11552 +11553 +11554 +11555 +11556 +11557 +11558 +11559 +11560 +11561 +11562 +11563 +11564 +11565 +11566 +11567 +11568 +11569 +11570 +11571 +11572 +11573 +11574 +11575 +11576 +11577 +11578 +11579 +11580 +11581 +11582 +11583 +11584 +11585 +11586 +11587 +11588 +11589 +11590 +11591 +11592 +11593 +11594 +11595 +11596 +11597 +11598 +11599 +11600 +11601 +11602 +11603 +11604 +11605 +11606 +11607 +11608 +11609 +11610 +11611 +11612 +11613 +11614 +11615 +11616 +11617 +11618 +11619 +11620 +11621 +11622 +11623 +11624 +11625 +11626 +11627 +11628 +11629 +11630 +11631 +11632 +11633 +11634 +11635 +11636 +11637 +11638 +11639 +11640 +11641 +11642 +11643 +11644 +11645 +11646 +11647 +11648 +11649 +11650 +11651 +11652 +11653 +11654 +11655 +11656 +11657 +11658 +11659 +11660 +11661 +11662 +11663 +11664 +11665 +11666 +11667 +11668 +11669 +11670 +11671 +11672 +11673 +11674 +11675 +11676 +11677 +11678 +11679 +11680 +11681 +11682 +11683 +11684 +11685 +11686 +11687 +11688 +11689 +11690 +11691 +11692 +11693 +11694 +11695 +11696 +11697 +11698 +11699 +11700 +11701 +11702 +11703 +11704 +11705 +11706 +11707 +11708 +11709 +11710 +11711 +11712 +11713 +11714 +11715 +11716 +11717 +11718 +11719 +11720 +11721 +11722 +11723 +11724 +11725 +11726 +11727 +11728 +11729 +11730 +11731 +11732 +11733 +11734 +11735 +11736 +11737 +11738 +11739 +11740 +11741 +11742 +11743 +11744 +11745 +11746 +11747 +11748 +11749 +11750 +11751 +11752 +11753 +11754 +11755 +11756 +11757 +11758 +11759 +11760 +11761 +11762 +11763 +11764 +11765 +11766 +11767 +11768 +11769 +11770 +11771 +11772 +11773 +11774 +11775 +11776 +11777 +11778 +11779 +11780 +11781 +11782 +11783 +11784 +11785 +11786 +11787 +11788 +11789 +11790 +11791 +11792 +11793 +11794 +11795 +11796 +11797 +11798 +11799 +11800 +11801 +11802 +11803 +11804 +11805 +11806 +11807 +11808 +11809 +11810 +11811 +11812 +11813 +11814 +11815 +11816 +11817 +11818 +11819 +11820 +11821 +11822 +11823 +11824 +11825 +11826 +11827 +11828 +11829 +11830 +11831 +11832 +11833 +11834 +11835 +11836 +11837 +11838 +11839 +11840 +11841 +11842 +11843 +11844 +11845 +11846 +11847 +11848 +11849 +11850 +11851 +11852 +11853 +11854 +11855 +11856 +11857 +11858 +11859 +11860 +11861 +11862 +11863 +11864 +11865 +11866 +11867 +11868 +11869 +11870 +11871 +11872 +11873 +11874 +11875 +11876 +11877 +11878 +11879 +11880 +11881 +11882 +11883 +11884 +11885 +11886 +11887 +11888 +11889 +11890 +11891 +11892 +11893 +11894 +11895 +11896 +11897 +11898 +11899 +11900 +11901 +11902 +11903 +11904 +11905 +11906 +11907 +11908 +11909 +11910 +11911 +11912 +11913 +11914 +11915 +11916 +11917 +11918 +11919 +11920 +11921 +11922 +11923 +11924 +11925 +11926 +11927 +11928 +11929 +11930 +11931 +11932 +11933 +11934 +11935 +11936 +11937 +11938 +11939 +11940 +11941 +11942 +11943 +11944 +11945 +11946 +11947 +11948 +11949 +11950 +11951 +11952 +11953 +11954 +11955 +11956 +11957 +11958 +11959 +11960 +11961 +11962 +11963 +11964 +11965 +11966 +11967 +11968 +11969 +11970 +11971 +11972 +11973 +11974 +11975 +11976 +11977 +11978 +11979 +11980 +11981 +11982 +11983 +11984 +11985 +11986 +11987 +11988 +11989 +11990 +11991 +11992 +11993 +11994 +11995 +11996 +11997 +11998 +11999 +12000 +12001 +12002 +12003 +12004 +12005 +12006 +12007 +12008 +12009 +12010 +12011 +12012 +12013 +12014 +12015 +12016 +12017 +12018 +12019 +12020 +12021 +12022 +12023 +12024 +12025 +12026 +12027 +12028 +12029 +12030 +12031 +12032 +12033 +12034 +12035 +12036 +12037 +12038 +12039 +12040 +12041 +12042 +12043 +12044 +12045 +12046 +12047 +12048 +12049 +12050 +12051 +12052 +12053 +12054 +12055 +12056 +12057 +12058 +12059 +12060 +12061 +12062 +12063 +12064 +12065 +12066 +12067 +12068 +12069 +12070 +12071 +12072 +12073 +12074 +12075 +12076 +12077 +12078 +12079 +12080 +12081 +12082 +12083 +12084 +12085 +12086 +12087 +12088 +12089 +12090 +12091 +12092 +12093 +12094 +12095 +12096 +12097 +12098 +12099 +12100 +12101 +12102 +12103 +12104 +12105 +12106 +12107 +12108 +12109 +12110 +12111 +12112 +12113 +12114 +12115 +12116 +12117 +12118 +12119 +12120 +12121 +12122 +12123 +12124 +12125 +12126 +12127 +12128 +12129 +12130 +12131 +12132 +12133 +12134 +12135 +12136 +12137 +12138 +12139 +12140 +12141 +12142 +12143 +12144 +12145 +12146 +12147 +12148 +12149 +12150 +12151 +12152 +12153 +12154 +12155 +12156 +12157 +12158 +12159 +12160 +12161 +12162 +12163 +12164 +12165 +12166 +12167 +12168 +12169 +12170 +12171 +12172 +12173 +12174 +12175 +12176 +12177 +12178 +12179 +12180 +12181 +12182 +12183 +12184 +12185 +12186 +12187 +12188 +12189 +12190 +12191 +12192 +12193 +12194 +12195 +12196 +12197 +12198 +12199 +12200 +12201 +12202 +12203 +12204 +12205 +12206 +12207 +12208 +12209 +12210 +12211 +12212 +12213 +12214 +12215 +12216 +12217 +12218 +12219 +12220 +12221 +12222 +12223 +12224 +12225 +12226 +12227 +12228 +12229 +12230 +12231 +12232 +12233 +12234 +12235 +12236 +12237 +12238 +12239 +12240 +12241 +12242 +12243 +12244 +12245 +12246 +12247 +12248 +12249 +12250 +12251 +12252 +12253 +12254 +12255 +12256 +12257 +12258 +12259 +12260 +12261 +12262 +12263 +12264 +12265 +12266 +12267 +12268 +12269 +12270 +12271 +12272 +12273 +12274 +12275 +12276 +12277 +12278 +9.545241594889406 0.2826905789312277 0.102 +-0.2341598795305072 0.2304464446628514 0.102 +4.702790840103074 -4.120870626435569 0.102 +4.710041598394258 3.842095245107387 0.102 +3.67839197267467 0.06330762691502217 0.102 +1.780765682645565 2.64889714281597 0.102 +1.729380341795453 0.5924853168403524 0.102 +1.139595618380878 -2.6208970158134 0.102 +-2.988909952287409 4.951884770115252 0.102 +3.062129538508073 1.549216084095788 0.102 +2.774813125510342 0.5398369013259863 0.102 +-4.378974986868921 -3.601044102604422 0.102 +0.5382465719268232 1.621973680373222 0.102 +3.533862340825488 0.8788218261235607 0.102 +2.307435708602201 1.220827521125297 0.102 +2.351948511267773 -1.25189866524679 0.102 +0.9385414426515716 -0.6811088726847727 0.102 +-1.360375594610724 -1.913316662274912 0.102 +0.7664442821932504 0.2790168349191206 0.102 +1.419238984445374 -0.1217365854861272 0.102 +2.23012604830976 -0.00724416636831227 0.102 +2.969225691780323 -0.1792061824590916 0.102 +3.756824994247889 -1.276762323853328 0.102 +5.87373615042538 -0.5278237427513124 0.102 +1.274876282710428 0.3753368699282685 0.102 +4.713575557403539 0.671101842836047 0.102 +3.275050221468228 0.4087052582802696 0.102 +2.224444518312041 0.4914333384519612 0.102 +0.2779784452624462 -0.3283493252960548 0.102 +1.378929702849055 1.462147461002324 0.102 +0.9099516667745422 0.9608698243773598 0.102 +0.2418727593947951 0.7462883050091391 0.102 +0.6376091824243267 0.6578654077662255 0.102 +0.3579800228648623 0.3657399268856993 0.102 +0.514407409808924 1.05428469637998 0.102 +-1.425487665056884 1.398061321852379 0.102 +0.6001872452532148 0.4370836139894506 0.102 +0.5431465588966385 0.2024674249918214 0.102 +0.68181859391343 0.8889490397545015 0.102 +0.7432721137683456 1.128814557239894 0.102 +0.4172267159764814 0.5890372694157866 0.102 +0.1808771992495055 0.5106863614308589 0.102 +-0.2292133170429983 0.7580484986561224 0.102 +0.005038758277410904 1.231365478437024 0.102 +0.4662626474233119 0.8183991281263372 0.102 +0.2870188967735396 0.9806766761112249 0.102 +1.003193811395863 0.6017026072813365 0.102 +1.369005974038803 0.892966459968898 0.102 +0.7969780069280321 0.4978031524953285 0.102 +0.9998117440089095 0.372302660260952 0.102 +1.011377953514181 -0.05696274235110702 0.102 +0.7428404843519426 0.007066013836496481 0.102 +0.9491105066722645 0.1417959839422555 0.102 +0.8489047606382046 0.7582407093512631 0.102 +-0.2696402937997802 4.251728966753187 0.102 +0.3284716512274575 1.273793007929489 0.102 +0.09179164555382452 0.2047372917848992 0.102 +0.3239533071543413 0.112266207637293 0.102 +0.4979972306899047 -0.04798407791782094 0.102 +0.1923457004216322 0.3386912067584698 0.102 +-0.04380630655499768 0.4049061788864061 0.102 +4.115374495701731 1.916513761775596 0.102 +1.79949661257948 0.1809073157937176 0.102 +1.82594484447191 -0.3566136489998594 0.102 +3.224361294361987 3.219548575004239 0.102 +1.176818033806411 1.048786770524653 0.102 +1.297265913700089 0.6453475714787557 0.102 +1.84435118656226 1.086606188808986 0.102 +1.218241500546658 0.1233654601012986 0.102 +0.956960977024798 1.207767884347243 0.102 +2.46156361146421 6.739251988283599 0.102 +3.703494268298194 0.473141334574515 0.102 +3.12556428146484 0.7811198525939167 0.102 +2.690989479113246 1.013817737398247 0.102 +2.644970706738678 0.1029472376578678 0.102 +9.024051818731163 3.471012867134486 0.102 +0.003798389442935719 0.9105818196363474 0.102 +-0.02660233289445403 0.6731553941689696 0.102 +0.1498778605679961 0.8754665593599095 0.102 +2.539070707923843 -0.2504685709348499 0.102 +13.94430373860618 -3.757576159801484 0.102 +0.6900369650876965 0.1547031365582113 0.102 +-2.5073393415234 0.05787385086452831 0.102 +14.30137744729102 3.295092863579012 0.102 +1.886540366102484 1.604690510923723 0.102 +4.117635641190483 0.8983729859400994 0.102 +4.255158406155313 0.2562411928067914 0.102 +4.246457483503089 -0.5403183573212093 0.102 +3.483324589173649 -0.6699603032936206 0.102 +2.91877977638128 -0.7950774001936144 0.102 +-0.1629276247325238 -0.1841754126199107 0.102 +0.1165524853051736 -0.0815547500611023 0.102 +0.3068919790407711 -0.08264844236705451 0.102 +0.1713425405385597 0.06368075527074657 0.102 +-0.01441582082309819 0.05127807925387841 0.102 +0.1390895919147285 0.6503271522468216 0.102 +0.8829410267989066 -0.001529582185950085 0.102 +0.8333044010391947 -0.2398631470168419 0.102 +-0.8806491613339007 -6.265651897680293 0.102 +0.4555490720434495 0.09406400509075409 0.102 +0.04669586497467693 0.5248518196921285 0.102 +-0.1032486689765396 0.5491811661765325 0.102 +3.304585158654175 0.01164557562554475 0.102 +2.033166933468377 0.7962562836558905 0.102 +-1.502002593693517 0.3514513064390139 0.102 +0.05548351271765826 0.7714848642095619 0.102 +-0.09590684449254024 0.7922326916401036 0.102 +0.7714448728999204 0.6318765484989759 0.102 +0.4015166810830433 0.2132176348307657 0.102 +2.976617211266006 0.2130595873209531 0.102 +2.397869162142678 0.8102932830023961 0.102 +0.8631773110722473 0.3820108535684766 0.102 +0.4978079691825564 0.6970739752995512 0.102 +0.2809044259241627 0.6144009794567685 0.102 +0.4041478089838781 0.9484863298298518 0.102 +0.3643402782397492 1.088374542087114 0.102 +0.4884695736889352 0.3346264416295001 0.102 +8.039784494369011 -3.138207334536254 0.102 +0.6140634831660555 0.0317486217180535 0.102 +0.6474468091759762 -0.1242676555571925 0.102 +0.6347453898142759 0.301897987648204 0.102 +0.5487892914338893 0.5629910400275159 0.102 +0.5951678057722544 0.7961960716741571 0.102 +5.000831787155806 -1.799682199495471 0.102 +0.3112426740452984 0.4804276023280427 0.102 +0.3250370924002047 0.8549746009781448 0.102 +0.5517442666394526 0.9248221512643297 0.102 +0.6317923296291594 1.021536863115879 0.102 +0.7867053143743805 0.9833705299800772 0.102 +0.4594345994326337 0.450311679345383 0.102 +0.2023191295387604 0.1933918547612086 0.102 +0.954497685138146 0.4802476007649761 0.102 +1.114003221221827 0.4879112740080628 0.102 +0.3763376793609362 0.7050108332559835 0.102 +0.05924495792097439 0.3332550783368373 0.102 +0.6739992983560781 0.5389121090975353 0.102 +3.782657627105922 1.391442212235506 0.102 +2.872899017786772 -2.947813023722173 0.102 +0.8185140266579567 0.1125205290845859 0.102 +0.7176595814612815 0.4053389217553788 0.102 +-0.254095124626143 0.9766565626767704 0.102 +-0.1353464587706053 0.6686346715773552 0.102 +0.7079098658757679 0.7601450746844431 0.102 +0.9207591157021171 0.2707037860840775 0.102 +1.051840942261846 0.2380279196190689 0.102 +2.460424290829014 1.802475065627041 0.102 +0.6122002068587409 1.164192748862527 0.102 +0.8202642283319053 0.8752835333444091 0.102 +0.8786235222218026 1.092608667791609 0.102 +0.9626798876053645 0.7151412663510441 0.102 +0.9313841155202213 0.8526242370813494 0.102 +1.071442203836982 0.6952982591032959 0.102 +3.21614931757 1.182784049894373 0.102 +0.8846266073865956 0.6002059027550405 0.102 +1.015794161848863 0.9202417099457869 0.102 +2.113746571866641 0.2441337300716595 0.102 +-0.3725688018276706 -1.302687403286011 0.102 +0.3731087763993322 0.007839809774635585 0.102 +-5.919691707701194 2.179073382425941 0.102 +1.586475769351917 0.3495607257980259 0.102 +4.775466758893864 1.362173272875314 0.102 +2.498232631999234 0.3950254663942266 0.102 +1.183688358393392 0.882016335335172 0.102 +3.831742014385249 0.7921486673776135 0.102 +0.1061820217304531 1.069838696795837 0.102 +0.243220393044422 1.11532376843428 0.102 +3.521171507527834 1.976621998941025 0.102 +1.000135394890352 0.05593915212697478 0.102 +0.09812167888499677 0.4375799248206891 0.102 +1.412927095861137 -0.695182915048754 0.102 +1.161658792692221 -0.3437847407408329 0.102 +0.2962113575206623 0.2711715643960498 0.102 +0.2097552620246202 -0.032472945560238 0.102 +0.01243278684180257 -0.2680681946325446 0.102 +0.08962320115262197 0.9744593308891264 0.102 +-0.02647582728575406 1.042012900661626 0.102 +1.64587523495835 0.8574848182986369 0.102 +1.53599896251379 1.116692541546261 0.102 +4.048673379682724 0.5103454056104311 0.102 +3.892333913412678 0.2734402203275821 0.102 +4.033579906726795 -0.0729953092871011 0.102 +4.602934743250575 -0.2097488232083037 0.102 +2.983407490831704 1.091899761355918 0.102 +3.495720054530524 0.2893334222975612 0.102 +3.048717486706999 0.5481386073330361 0.102 +3.46179429304479 0.6284085104977681 0.102 +6.871291043172909 6.616354722548346 0.102 +2.249476032721894 -0.4011430926139443 0.102 +1.949670830324538 -0.8419762063160697 0.102 +1.361115695703721 -1.520527912968183 0.102 +7.551451542413793 1.207356200769607 0.102 +1.941027685138627 0.4742642303934176 0.102 +0.6277051527193717 -0.4144346640528506 0.102 +-0.3504827283744349 0.4910995598517309 0.102 +6.551962658938231 -6.356366645697777 0.102 +2.317131617111424 -5.748320026019953 0.102 +16.19914921506512 -0.3940942701423877 0.102 +0.1846959274534177 0.9985000007241981 0.102 +5.831147433315875 0.7006033926035701 0.102 +0.4831947269249201 1.185144327426701 0.102 +2.862029577024769 0.8084421023249391 0.102 +2.353823269482138 0.2096941599875754 0.102 +3.733436759556081 -0.3186468616449984 0.102 +0.4045835337604914 -0.0747162183195384 0.102 +0.248657871811493 0.4305323488348587 0.102 +11.50183430646482 6.217609558274917 0.102 +1.231546471597875 -0.09631929320653523 0.102 +10.61751250861 -6.343992601308511 0.102 +1.035007395914449 0.1311321297676953 0.102 +3.765449878041141 1.099781382251639 0.102 +0.8342930831226344 0.2183608944711258 0.102 +0.07149182499367593 0.1017868554881978 0.102 +-0.02607883060343155 0.1585234052956138 0.102 +-0.06898422404134351 0.291434002695444 0.102 +0.1623767425942105 0.7856303431958622 0.102 +-0.1981269111036293 0.1011644891017405 0.102 +-0.9926650758122558 -0.1462150957443756 0.102 +1.576031801807118 0.1176030947664589 0.102 +-0.4043686670332863 2.06602046629413 0.102 +0.6598832901348471 2.81583379180575 0.102 +2.807252985126521 1.326161891709985 0.102 +-0.04099387188089736 -0.09850901605875989 0.102 +0.5494260059528409 0.1018625220643302 0.102 +16.30033327205565 6.472707848324681 0.102 +-6.012980294511872 6.462194768032569 0.102 +3.522444225349052 1.156418747243326 0.102 +3.440806151386326 1.503768053985886 0.102 +3.251841321008214 -0.2961968998297126 0.102 +0.07393303582162176 0.0163155582802131 0.102 +2.558159572318314 0.6340179377572953 0.102 +2.076179017647165 1.051155296033791 0.102 +3.491656359334111 -0.1098650759991722 0.102 +0.9976923074542693 1.067559185903111 0.102 +1.484113116878738 0.5461882644352749 0.102 +2.784418987083074 0.3055051108121987 0.102 +0.2501539682114602 0.9011084636731475 0.102 +0.2773368034803274 0.03733743787558015 0.102 +1.105919820867226 0.5947237012047963 0.102 +1.039953977847311 0.5262379799792765 0.102 +1.777133710823279 4.452466371025528 0.102 +16.6572181772387 -6.637201268369739 0.102 +2.011436021563809 0.02829262046023539 0.102 +-6.8521440252273 -6.599413884207391 0.102 +1.168316138125923 0.7800359788717633 0.102 +0.1417341159465966 0.2679649888079567 0.102 +4.037157445431952 1.215008078456058 0.102 +2.456892817312513 -0.005857195753493993 0.102 +0.8865945194286173 0.6767526086149255 0.102 +1.146431548738299 0.3359801156458725 0.102 +0.6880047350632739 0.2290313715898906 0.102 +-0.696577135611668 7.300785572835866 0.102 +3.309018121630301 0.9375947974043938 0.102 +6.4020163942391 3.321872406979205 0.102 +4.862346133366618 -0.9194526198435711 0.102 +1.011985129380145 1.625503647643805 0.102 +0.8091447431662664 1.437349345537731 0.102 +1.791911747367279 0.3577530691665053 0.102 +0.2844555687469261 0.3477511322791802 0.102 +2.457476618009053 1.060864771168741 0.102 +0.07081724777764541 0.8534565422207125 0.102 +-6.676247046417888 -1.277238613486827 0.102 +2.519969974471607 -0.7817581655142855 0.102 +4.928560240732721 2.547843929965819 0.102 +0.8289945760298716 1.235499253960877 0.102 +2.857713468893325 0.02636603763583467 0.102 +1.126234819230722 0.005619420174188119 0.102 +0.06540185461667508 0.6838264271801666 0.102 +3.223807817986168 0.6141401988597974 0.102 +-0.02384772672902783 0.7508269090034001 0.102 +0.01616777174233122 0.2570531359505739 0.102 +12.41413174147546 -1.06014468441982 0.102 +0.09025674791122849 1.705998964917274 0.102 +1.71983893182651 -0.08387554169994368 0.102 +1.621761446320531 -0.3252361514820335 0.102 +0.1189446520912754 0.5736419570720116 0.102 +0.2249770385456122 0.1224159467916719 0.102 +0.1458608075696008 0.1451465436087749 0.102 +1.423982660828702 2.129594809424976 0.102 +0.2143038361627992 0.6690680703577732 0.102 +0.3963403796251093 0.7985428835695054 0.102 +3.089936106903142 2.10355260927216 0.102 +0.4864251490991824 0.2582562811730776 0.102 +3.188688891091392 0.226325630367735 0.102 +3.286878268696194 4.784303036496691 0.102 +-0.02618334546819684 0.5825758384881192 0.102 +1.020766720771056 0.4373808455731468 0.102 +1.693537492358454 1.403315604984223 0.102 +1.993672520249531 1.28445978020038 0.102 +6.861610871644724 -1.995939806130309 0.102 +0.6923907208606354 0.05698746561132781 0.102 +-0.04252246690645865 0.5016130664031049 0.102 +-0.1005937458632175 0.4559344520813097 0.102 +-0.1269384338558633 0.3673158613316858 0.102 +-0.01021826287103217 0.8280956162748641 0.102 +-0.1082999510837758 0.8883242091360971 0.102 +-0.06675436086931714 0.9713546117261009 0.102 +-0.3672537653208753 -0.8916838532281113 0.102 +0.7924167682556692 0.3568718955368065 0.102 +1.241565495807484 1.295732252447808 0.102 +0.7466319297697886 0.8314431969373625 0.102 +0.05042991450318384 0.6188573177216881 0.102 +0.8664041731855998 0.4587969146068457 0.102 +0.3814574027533528 0.1394035046122545 0.102 +0.7570211188189818 0.2001178284279225 0.102 +4.038171191814163 2.61278347623382 0.102 +1.858284670150309 0.8122885656011772 0.102 +0.5904380908982589 -0.05150700697412955 0.102 +0.6753633768373005 -0.02772870130814288 0.102 +0.744182312423373 -0.08617207409338301 0.102 +0.8187473862732964 -0.05361172425241049 0.102 +0.9185719183698781 -0.09279113633272251 0.102 +0.9850678839557622 -0.265678303608353 0.102 +2.22454615089982 0.7091392221107736 0.102 +2.622077839614273 0.8284369890417427 0.102 +0.8397350390038938 0.3026104792270878 0.102 +3.882643576129421 0.03830704991526454 0.102 +-0.1364411486567469 0.2024163052948284 0.102 +0.3983484256803907 0.512554213330553 0.102 +2.271337763589365 0.9986643801976915 0.102 +0.3279903715058683 0.2026514518867864 0.102 +3.640281429912874 0.7128648838879952 0.102 +0.6085772237355617 0.1513008525403492 0.102 +0.9210986073535556 1.038788414463189 0.102 +3.08297869210813 0.031974753844703 0.102 +0.4684498383534705 0.165785520023788 0.102 +-0.1063920340758614 -0.007915214098120574 0.102 +-0.2934324275448884 -0.05767553277476882 0.102 +0.4300898648888773 1.03353195649975 0.102 +0.1236962113437936 1.212217478252748 0.102 +0.4138444805169562 0.8775612861215433 0.102 +0.7504387250474313 0.5738243492343041 0.102 +0.4803958713278981 0.9088438780526973 0.102 +0.2165704502580713 0.8326192879768465 0.102 +0.8215552278850374 0.03277704161717998 0.102 +5.324993621319206 0.1590520187939465 0.102 +0.861623049605349 1.008212400447853 0.102 +0.5789616398347743 0.3544259397054795 0.102 +0.5286964012067976 0.7599441166564416 0.102 +0.5594426120075241 0.6425796308778389 0.102 +0.4858205274156369 0.6179553867179681 0.102 +3.095897012094796 -1.523050714006116 0.102 +4.150681537059036 -2.364988100695203 0.102 +0.4931213335624987 0.0442257600262279 0.102 +0.1911803015170718 0.5777087814773297 0.102 +0.2668681530169529 0.5445434789381578 0.102 +0.3399490683090743 0.926541903402531 0.102 +0.4466134994391938 0.7422789043414657 0.102 +0.8916377064732072 0.08199123790399938 0.102 +0.5608157240025917 0.2924249717751403 0.102 +0.4351690606739492 0.3836002854888164 0.102 +0.5332194272757221 0.8541759221465451 0.102 +0.4685464449648508 0.5353302577166424 0.102 +0.7066377500317126 0.9658109551257783 0.102 +0.5794625006127102 1.00385585431538 0.102 +0.5799014860738502 1.078746331725292 0.102 +4.346348091804557 0.6224713825939464 0.102 +1.333226707965364 1.086731833301193 0.102 +0.3583883057908251 0.6305080065322795 0.102 +2.075810719280748 -0.2081366471158571 0.102 +0.03031646632534023 -0.05765940162269034 0.102 +0.7134221209316376 1.049522565359095 0.102 +0.808594478348529 1.067019589170051 0.102 +0.5307812373097772 0.4068864826839531 0.102 +0.6352342179182866 0.9480623906702399 0.102 +0.66837802008573 0.4545491052605374 0.102 +0.9336771347764435 0.4037323104949567 0.102 +0.5734304854263127 0.7156700961826472 0.102 +0.3312718577453445 0.5527668061398257 0.102 +-1.433266459620679 3.213700303479298 0.102 +0.7915050001440387 0.7223955355151988 0.102 +0.9791404457292856 0.2777177567093849 0.102 +0.4170850260253945 0.291226389596318 0.102 +0.3050193623363815 0.693027148280385 0.102 +16.80331119733105 -3.123360041409959 0.102 +3.476954036982294 0.09899996190265446 0.102 +2.518144188505129 1.295196235014592 0.102 +13.6671168745314 -7.071241885295381 0.102 +0.7181893090857718 0.6911297899440325 0.102 +0.5449278644079321 0.4909565567714965 0.102 +0.6164001101285973 0.8738603142546131 0.102 +0.4805658658617523 0.9840825977739533 0.102 +0.0220987289908682 0.4551416288699208 0.102 +-0.8432424850080404 0.8050497341616916 0.102 +0.710804715333283 0.3269194721864904 0.102 +-0.009362076234954522 0.3404900041781114 0.102 +0.3693339456388063 0.4347642072148999 0.102 +-3.152890242165177 2.106169986279163 0.102 +0.6193436518097347 0.5894070070603833 0.102 +0.4380360759074043 0.6546265619633813 0.102 +0.6101083844410659 0.5090951470461353 0.102 +1.421583787839635 0.2357986016924487 0.102 +-0.1913650899279741 1.195508294458751 0.102 +0.3130773365412053 0.7813808745149866 0.102 +0.6753936781560967 0.8226981328413665 0.102 +0.6832266918532401 0.6071987372546896 0.102 +0.6225606638433505 0.2281739449282696 0.102 +-3.340154820960894 -7.135730425634269 0.102 +0.7457643691252254 0.9237081737109157 0.102 +0.6355063317838213 0.7341451074565573 0.102 +0.9868245660288101 0.9841311223006202 0.102 +4.367661669608585 1.157795345471968 0.102 +0.01415106611134925 0.9742667257182411 0.102 +10.74834835250192 -3.288201000157785 0.102 +2.682141008588539 -0.09794137025915031 0.102 +0.9843761706014313 0.2037574363743817 0.102 +0.4498568586212285 -0.0007710576612446222 0.102 +0.6421403004959257 0.379368806939438 0.102 +0.2975788128089086 1.062252242556866 0.102 +0.9552242053369255 -0.01956853014014048 0.102 +2.38607706543896 -0.2082996618149958 0.102 +3.326447242418097 0.7638416547499259 0.102 +4.635356628674811 0.2222341719263668 0.102 +0.1277295832763881 0.3698503926097203 0.102 +-0.008464663648790605 -0.03390028919913818 0.102 +0.9449507138986346 0.5606750457554953 0.102 +3.925488606104029 0.9658487704193898 0.102 +3.861112426094385 0.6022109516795278 0.102 +3.95880266568118 0.6999082052174781 0.102 +0.7246792810430345 0.4997435136256106 0.102 +7.428553904315998 -0.5181577583602763 0.102 +4.326028258096382 -1.241290929926241 0.102 +5.177400574893204 1.107219181826152 0.102 +-0.1441097979182403 1.045989792131464 0.102 +-0.3731712552316382 -4.055997673074705 0.102 +0.1458729856722264 0.003832151281109395 0.102 +2.837100390664869 -0.4962753859965465 0.102 +3.111342931082484 0.3534451560307262 0.102 +1.073219593451983 0.9976793119612627 0.102 +0.2217806025959881 0.267226447913409 0.102 +0.3423815871611074 -1.165507501858395 0.102 +0.4986336499760846 -2.257945153578914 0.102 +0.8117632902222656 0.4344476126185522 0.102 +3.713502135039549 0.9046993247675382 0.102 +0.8263035595869006 0.9542021176898391 0.102 +1.936875010190475 0.9556302004023891 0.102 +4.27132535815101 1.51523467270933 0.102 +2.210125734511803 -2.153507365173072 0.102 +3.721961618563927 0.2559534231332306 0.102 +4.863043106254446 1.964618840335043 0.102 +1.505638682538069 0.7500481200410267 0.102 +0.1598966473923256 0.7119773703042254 0.102 +0.8100919010155363 1.1577331927267 0.102 +1.090330286706311 1.19158300962145 0.102 +0.7472124809413794 0.115266100077598 0.102 +0.03689542640636753 1.048207577796548 0.102 +0.6579250732715741 1.107134661485972 0.102 +0.931705702654222 0.3372648058353817 0.102 +0.8850637226651327 0.8960407084616717 0.102 +0.8703507097423062 0.819610170839283 0.102 +0.9850370588625176 0.7858306579633554 0.102 +3.891236304319387 -7.509524862974732 0.102 +0.8690140908821105 0.1550630717953946 0.102 +0.9200891796648151 0.7771519897017398 0.102 +1.384484756906863 0.04661439992214395 0.102 +-3.871655261207544 7.182573757981117 0.102 +1.006295834862953 0.6660627396354792 0.102 +-7.183604136195631 -3.710685154747266 0.102 +0.9988117208615576 0.8503097685892008 0.102 +1.019520807722705 0.7484128440620711 0.102 +0.1761435341970177 0.4514522109850322 0.102 +3.456193212488631 0.4333004207005674 0.102 +1.072009281742462 0.06218978880915594 0.102 +1.050010969231527 0.002536730963754318 0.102 +1.102895074738425 -0.08182714276505487 0.102 +0.3084515950446253 0.4110909833252891 0.102 +4.016914113340159 -0.4023810752077084 0.102 +3.832130842553529 -0.7370777413732035 0.102 +4.288183387932376 -0.2614871027411423 0.102 +6.330064102854079 1.574663235548834 0.102 +3.763810078407198 -0.1009185643980371 0.102 +4.95396399411025 5.554316251414537 0.102 +0.7732544723069349 0.7875112326400627 0.102 +0.9553568416763011 0.918388463162805 0.102 +13.82109894736417 7.589907611954125 0.102 +2.913009843471644 0.419987750041161 0.102 +0.1754244568786227 1.076847134135189 0.102 +2.142787943383561 1.518960066775199 0.102 +0.9308631772702853 0.6309904228865153 0.102 +0.8159118133453216 0.5831737121219205 0.102 +3.122099688135381 0.9641799655641883 0.102 +0.2389401779979483 1.041233587497697 0.102 +2.36864126683174 0.5943422051883221 0.102 +0.1079749935559381 0.5069961432934954 0.102 +1.093123384367193 0.7639185793436426 0.102 +-0.04120054299823474 0.2200507751009823 0.102 +5.708506020684922 -2.922341761316508 0.102 +4.294586283161202 0.02029510675296404 0.102 +0.1919167355360943 0.9375272291253897 0.102 +-0.1467208597862421 0.2846586432494385 0.102 +4.034022434490109 0.1647443929090915 0.102 +1.942773230190835 0.6408381851959406 0.102 +3.182451058453921 -0.1369138002966545 0.102 +9.255069870082391 7.652017418382917 0.102 +0.6983847181074337 1.25951204398232 0.102 +0.5470867815304512 1.383337116325736 0.102 +2.237370978341182 0.346391171559256 0.102 +0.3683771101129509 0.08112290557771425 0.102 +3.341710093575391 0.2070339407606151 0.102 +2.908639346422417 0.6454137332829371 0.102 +3.040060842151824 1.341035784663239 0.102 +0.8608466245584034 0.5243163221145862 0.102 +-1.234579676190918 -1.064808744374931 0.102 +2.333420571205235 3.606216231349733 0.102 +2.444035673966291 2.404076992873675 0.102 +1.93114110287636 0.2837098614624907 0.102 +-8.117657483906935 3.986057956351082 0.102 +1.189425451741866 0.2258405296293634 0.102 +2.533932102869053 0.2442035278031675 0.102 +-0.7570853173947566 0.2786634382580758 0.102 +2.860657571526084 0.9749703168239373 0.102 +2.814475318625488 1.130611456616036 0.102 +1.074949287090628 0.3846481305542466 0.102 +1.062637667282633 0.3130531693096817 0.102 +0.07776022964388654 0.2674216939264721 0.102 +1.890633909626783 -0.1079859595092171 0.102 +2.089663029292339 0.6071013453137422 0.102 +0.9138015966505368 0.2103584708707113 0.102 +0.2145252337382935 0.03032038499504149 0.102 +0.04229911256147934 0.387153875102913 0.102 +-0.08531412364236166 0.09426736773646126 0.102 +0.3792488605600965 -0.2012189213984078 0.102 +0.3118851486338721 -0.0200988828646123 0.102 +0.2635765442905281 0.1704839415429548 0.102 +-0.2252456723952244 1.503749726478208 0.102 +1.50831787429121 0.966134824645253 0.102 +1.664815898365358 1.030318009285744 0.102 +1.686152731711639 1.211400295125598 0.102 +3.84493597831485 0.4290470030860775 0.102 +1.418713400409179 0.4417550554777842 0.102 +0.7208061893513573 2.223939051019213 0.102 +-0.5451080899832086 1.238596514088054 0.102 +6.147266993302895 5.156362895483361 0.102 +0.1032957458452353 0.7432014502887616 0.102 +0.6333732940337666 0.08988055665177248 0.102 +1.731140687170062 -0.582667182341016 0.102 +3.31649950122531 -1.114651733082012 0.102 +2.22035574229688 0.1298157463845387 0.102 +0.3552390811388301 0.2653798268461474 0.102 +-0.4832459432290848 -0.3981488813135729 0.102 +1.081647817892387 0.9350966815433832 0.102 +-3.252130414575802 -1.979731885448271 0.102 +-2.297007640702064 -3.73047415255522 0.102 +5.148502394623584 -0.3623520918079346 0.102 +1.059172355476481 0.6281189287811042 0.102 +0.7226666147740051 -0.2056187170113969 0.102 +1.373185647154092 3.45718034887184 0.102 +0.8435502540490358 0.6483068807352366 0.102 +0.02966032908729054 0.1593580418082243 0.102 +-0.05611454083683597 1.143075312728539 0.102 +0.006643547010611812 1.117834009356842 0.102 +2.521113024662105 0.928854410015296 0.102 +1.661569490450103 0.2245042147981357 0.102 +0.5598501096967938 0.0178732416395853 0.102 +0.9424070218501449 0.04746697185846652 0.102 +-0.1648553163145043 0.5967781705231867 0.102 +-0.1812971459228972 0.5167100724946601 0.102 +4.013311591233019 0.3457383555553338 0.102 +2.670063656957798 0.4224794623922613 0.102 +2.809174269676074 -0.26141131222097 0.102 +1.640754173183843 0.5002008535426977 0.102 +0.1226576778839118 1.017806015134026 0.102 +3.890964319465242 7.749833684478759 0.102 +1.602262262317148 1.625080776085776 0.102 +2.202275232468081 2.07225680569689 0.102 +1.345517244572579 -7.594074047159917 0.102 +0.9876771717398388 0.1093853411573145 0.102 +3.069315908926806 -0.3746964319040745 0.102 +2.358597161776465 0.385836593359113 0.102 +3.663999171731336 1.265687045520197 0.102 +5.82207238853548 2.452839433738457 0.102 +0.09259273921229833 0.816972999402371 0.102 +2.805640213325909 0.1944959149367614 0.102 +1.547375329993946 -0.05095203482697967 0.102 +2.967911143716971 0.9144960693115618 0.102 +-0.07042820796802579 0.6943781896328259 0.102 +2.166570361459491 0.8604457355116465 0.102 +1.070130017252392 1.070406445345593 0.102 +-4.93322035483675 0.05516050309388981 0.102 +1.781484580112286 0.9530576373062108 0.102 +1.277362564907913 -1.014613959543452 0.102 +-0.3947269378136846 0.1194655534313916 0.102 +8.563007191270545 -7.354820995996203 0.102 +17.31130734158497 4.751318238143331 0.102 +2.108909479801355 0.3981140034303575 0.102 +0.004681357498590255 0.1041207755480318 0.102 +14.23312869205125 0.6930019319540071 0.102 +-0.4397204446380869 0.8840642047046186 0.102 +1.159284785290799 0.6376908486975824 0.102 +2.74395847053772 0.6847008952018024 0.102 +9.361579221936243 1.750637650546234 0.102 +0.2373286657514068 0.4848539339492959 0.102 +1.277135277589852 0.5043918118212112 0.102 +2.164976590255586 -4.023462281448667 0.102 +1.624888939549177 0.7137082426321985 0.102 +0.1095635024332771 0.05859624041487515 0.102 +-5.169577338749918 4.356164389776706 0.102 +1.10574604677984 0.174973481843354 0.102 +4.509490052485618 -0.5098664295985201 0.102 +0.05851821062078411 0.9171615069351228 0.102 +-7.618247427369718 0.9257904238277535 0.102 +0.8719696717276331 -0.04374336247848974 0.102 +0.8537542913728038 -0.1142953337507809 0.102 +0.7943748458465898 -0.1134640176221008 0.102 +3.440027339430864 1.017910310013027 0.102 +3.611409762111041 1.001286966866649 0.102 +0.1932423247328348 0.3909539802378968 0.102 +1.102103005474307 0.1135275433856397 0.102 +0.1058233167246604 0.9094695042657621 0.102 +2.009032410874325 -0.5198468611273472 0.102 +1.13931014531885 -0.2259927599925733 0.102 +0.275604230323588 -0.04517618347897098 0.102 +3.267183144915609 -0.5511731484034901 0.102 +1.277453576141232 0.9891966005825668 0.102 +1.356405919168926 -0.2888186226226871 0.102 +3.353911497658226 -0.1060685431631067 0.102 +1.100780903104701 0.6417603683191471 0.102 +-0.1914298867612651 0.8323797205953855 0.102 +7.59660819182325 2.061114367529969 0.102 +-0.1414692983752143 -0.08999287217071136 0.102 +2.628457802632352 1.146457576350247 0.102 +0.267718000817153 0.2311650531222283 0.102 +0.3337791900372278 0.3121335805249371 0.102 +1.256647428087852 2.686902601265027 0.102 +0.6845218017253645 1.181915896362285 0.102 +6.015576662343444 -4.813380257827073 0.102 +3.222629406554702 1.444645279088859 0.102 +1.31349546963253 1.76351600226762 0.102 +3.877121188288403 1.105699466652442 0.102 +4.386999142381039 0.916434029049163 0.102 +4.662906927460824 1.013984083813809 0.102 +8.44622991755096 -2.261849345032855 0.102 +0.8342855738789655 0.7137976920027048 0.102 +0.1558192712297561 0.20759713850508 0.102 +2.637661365750963 0.2951731749770819 0.102 +1.417568196290293 1.248824392548493 0.102 +0.5329227749810657 -0.1275694551152238 0.102 +0.4663236016461764 -0.1008594929125164 0.102 +1.873981271613917 -1.332874841967225 0.102 +5.621209890345053 3.3664900201194 0.102 +-0.1935051707044139 0.4241227509618524 0.102 +13.64226802380546 5.17247452801674 0.102 +1.853076645651677 0.01532705588772626 0.102 +0.1560860613154256 -0.05059024897486783 0.102 +0.006616882361785006 0.2140511872271583 0.102 +0.1154091567024896 0.3057207375386665 0.102 +3.752780255185742 1.660896731466163 0.102 +0.122258565045327 -0.6296779221854707 0.102 +3.899329369344859 -0.232567163530499 0.102 +0.4112330209607618 0.05745855296353646 0.102 +0.1382664486323045 0.9589867515206922 0.102 +4.177694824371113 0.444952250537724 0.102 +4.4192168224895 0.4134752101203714 0.102 +3.617941320433976 -0.08810514358964024 0.102 +0.3825811926974361 -0.05057029485831507 0.102 +0.9117025108399013 -0.4547305006432302 0.102 +17.99607541704449 7.852901244696347 0.102 +1.834429195074738 0.4868093016432652 0.102 +-0.4094884499194347 3.237621624665906 0.102 +-0.1231696172322805 0.04487506176880268 0.102 +4.062158075466237 1.052165962793585 0.102 +2.759090395944626 1.683684252470291 0.102 +0.9780735281950811 -0.1374992455835924 0.102 +0.9035204255367258 -0.1716854202562942 0.102 +0.2790164321654959 0.817535784598855 0.102 +3.537728756171956 -0.3714758068724711 0.102 +0.0475571343255318 0.05891417558940554 0.102 +-7.946272250178267 8.028185943308573 0.102 +4.044521107678271 1.452839897821567 0.102 +0.04189606100320797 -0.161918478997273 0.102 +0.2598233409957599 1.237158814649115 0.102 +-0.08514320890394854 -0.05139876623542005 0.102 +6.45116471758303 0.004703951720473439 0.102 +1.049133321481179 0.5812256160536171 0.102 +0.6587471475109785 0.1982963681657506 0.102 +0.01153389161912415 0.008865751025928124 0.102 +3.04152109488601 0.6817132266467025 0.102 +-0.05398215864426881 0.8803376867031455 0.102 +0.2779538714202706 0.08291106449116793 0.102 +0.7652628299330915 -0.04521619285608935 0.102 +8.465173576041254 -5.747350841890242 0.102 +17.94592041475416 -1.326501054767576 0.102 +0.760348680912445 0.06940579966608451 0.102 +3.160727514746794 0.512488171808355 0.102 +3.343427033927681 0.5221680725900849 0.102 +3.550439349555713 0.537446516340445 0.102 +0.0004728748793384752 5.614245807285279 0.102 +6.242472152783628 -1.473342940829477 0.102 +3.636604163370888 0.3531947418508319 0.102 +-0.1427361864594418 0.7281414896365253 0.102 +2.333819673871587 0.06982757325789207 0.102 +-0.1500180260938048 -0.4789248686383922 0.102 +0.2220676404202451 0.9730401311549173 0.102 +0.750204542683824 0.4431584178719414 0.102 +1.165800238791272 0.4155840024008198 0.102 +0.03842478705734206 0.831766338424353 0.102 +-0.07197382292622118 -0.2182584475535583 0.102 +3.813109654814343 0.1719004086395952 0.102 +3.59928803203619 -2.054014614822401 0.102 +0.9845931965930221 1.417125934544902 0.102 +3.126492021833384 1.111531974554701 0.102 +0.5362156820315965 1.129821019287587 0.102 +0.4566322543030004 1.085805565523571 0.102 +1.541013555151001 1.321382187591956 0.102 +3.498832686896726 0.7597082349970671 0.102 +1.078549249374045 0.4568053046996572 0.102 +1.324742429346784 0.7794501129716567 0.102 +14.82205651419165 -2.116714047412077 0.102 +-2.450728823243587 1.138341513412894 0.102 +0.2906433341798037 0.9180511268936968 0.102 +0.9468401305691477 1.121780547343705 0.102 +0.8937880354458051 1.166636097919858 0.102 +1.026736642630985 1.149599528200701 0.102 +3.374338981649014 1.307895390187883 0.102 +4.12781356392169 3.531796811926712 0.102 +0.4963898968843765 0.1244390029573741 0.102 +12.4584157535254 -5.501461653592888 0.102 +0.8057122591915246 0.1739277001975109 0.102 +2.476743630637828 0.5222659937071364 0.102 +-1.700874503373687 -7.922694487005769 0.102 +1.029705510706959 0.1865402179730565 0.102 +10.47438515311901 4.119000391415637 0.102 +0.8049994921679535 -1.464224879456778 0.102 +11.74668360542321 -8.439080873638806 0.102 +1.026483453368625 1.014813917979608 0.102 +2.501131950909748 0.7737241924936191 0.102 +3.978732877449243 0.8198125608058999 0.102 +0.7860780127252768 0.2418543746689789 0.102 +1.543562091455842 7.987673843455681 0.102 +3.31598853841861 1.768070598990835 0.102 +18.0882948383992 -8.144480384249178 0.102 +2.779232541331206 -0.1205776335031207 0.102 +2.516525761174431 -0.1310095236176868 0.102 +0.329911289066076 0.04824172960126474 0.102 +-8.203877409039741 -7.773202962248998 0.102 +0.8707415808980448 0.2532231155180106 0.102 +0.4431749851157582 -0.05230047770022216 0.102 +0.1677080273096354 0.8321084861311243 0.102 +1.127534773221099 0.05675666648349172 0.102 +4.144195727228904 0.6061842311967155 0.102 +1.115583107347717 0.2814355327499539 0.102 +0.9640141892050086 -0.06508550014956532 0.102 +3.587586404320655 0.1805007724072993 0.102 +4.437525395389772 2.263273912404054 0.102 +-0.09895942901285866 0.1509191432722836 0.102 +2.062939849044084 0.9070402736006736 0.102 +0.5710811650359613 0.0634798115841889 0.102 +0.9896420282818622 0.5340830780660391 0.102 +-0.2165546942460186 -0.004982818845890139 0.102 +1.385831268718267 0.6659827141497019 0.102 +-1.305727174764556 5.886041295811151 0.102 +1.233979963141056 1.148393954277777 0.102 +0.9192167968690219 0.5119582212076415 0.102 +0.3584534324942013 -0.08956420183964987 0.102 +0.01751057686113435 0.7122014789802744 0.102 +0.2383863750954976 0.3296237261882428 0.102 +17.78876253858568 -4.980983400443452 0.102 +2.132200180661866 1.212095069643237 0.102 +0.1167237447562953 0.100462466574172 0.102 +-0.08070799825374815 0.8459457124580861 0.102 +0.6868895553633365 -0.07703352862736301 0.102 +1.933619711387674 1.067725914373212 0.102 +1.119951603266482 0.8327464302373715 0.102 +3.246236360679539 0.8291557331652154 0.102 +2.763495608200504 0.8929029760943593 0.102 +0.8213660271921805 0.8289807051582693 0.102 +3.911816296200408 -0.08247685552242931 0.102 +0.8420263407869157 -0.008004038407792204 0.102 +3.813207673900577 1.226739572382449 0.102 +3.457467926344751 -5.089113920538485 0.102 +2.590407875509312 -3.773697584811146e-05 0.102 +15.0517918561404 -8.009059623644493 0.102 +0.8914059217261093 0.3360507725621934 0.102 +-0.06526654290704989 0.3675288858965818 0.102 +-0.09807255575729364 0.4061928631704594 0.102 +0.9234564835077773 0.7219099131420911 0.102 +0.7207526612009348 -0.03847241260609766 0.102 +1.162591552268018 0.9588657603056012 0.102 +-0.14163906361093 0.1256669382131727 0.102 +3.173509273933499 0.08620112259662176 0.102 +0.2444932953689665 0.3794329329474367 0.102 +2.712585844795151 0.01311475951534288 0.102 +0.3317725566828455 0.7344540558401619 0.102 +0.9662699594144761 0.6708944093239602 0.102 +17.95759767969664 0.508360389760326 0.102 +2.223919681446599 -0.1612891216067973 0.102 +3.734144587253842 0.6080207198484823 0.102 +-0.5813013475601602 -0.06574047638613512 0.102 +-0.08582475812001711 1.03263831962337 0.102 +-0.1482570195250348 0.9806646204331915 0.102 +0.1940954295308157 0.7503603510977396 0.102 +0.07439066135625975 0.3995203238893672 0.102 +1.298359772806207 0.2597182485557937 0.102 +5.320173329626217 2.239198365470833 0.102 +0.2655423001031275 0.4457958398490731 0.102 +5.725764899135998 1.364302658532327 0.102 +4.042047378275342 -1.68772869497727 0.102 +0.6233387482952296 -0.2169082860101351 0.102 +0.1160933479358346 0.6908154107869655 0.102 +-5.263619253167153 -8.030392734536061 0.102 +1.952349821145596 0.1182375361693645 0.102 +-0.0451181254069619 0.1152606390933411 0.102 +0.4191671195333728 0.1751812285770236 0.102 +0.7127055909601967 0.2766090913822119 0.102 +1.095752061910868 0.5297238951719078 0.102 +2.397363816437335 0.9474050525858436 0.102 +15.71781580004198 4.546496042258526 0.102 +0.5522753194297292 0.1506388951345133 0.102 +0.06205383178073873 1.098051066807105 0.102 +0.01936450874355546 0.7795839932131695 0.102 +0.0373023810644531 0.5812442420670937 0.102 +0.2036770383049763 0.8648964009260844 0.102 +-0.3277773014485897 0.8715859145648429 0.102 +3.366757344566021 0.3486123654991681 0.102 +0.4554984969228951 0.3291903660924601 0.102 +12.04908639723953 8.125460511674257 0.102 +2.627967499835542 0.5509128738354072 0.102 +11.28438242973396 0.8926677626105644 0.102 +-0.1111553058679763 0.2239522869275282 0.102 +-5.429861906041353 7.963858174727184 0.102 +10.66059634207139 -1.162147260755226 0.102 +4.009131492183151 0.05734922308276107 0.102 +2.2172548653461 1.102205357991778 0.102 +2.317740463058115 1.065290690155991 0.102 +0.6918452315361403 0.01697103971236499 0.102 +0.2208916691633447 -0.09479774578856426 0.102 +0.2665122309793693 -0.1397690257137075 0.102 +0.392963073831383 1.164311138896172 0.102 +0.09435648822037968 -0.02400201075203708 0.102 +8.379968261528074 5.462139454724824 0.102 +2.356709711140949 -0.3692965862017636 0.102 +1.039985512365602 0.9703669157290626 0.102 +0.7822331215392089 -0.008891940395341271 0.102 +15.51595007972947 8.23201000086309 0.102 +2.09876221292117 -0.05176794751646244 0.102 +2.224725033629841 -0.6480593970836278 0.102 +3.409648031396691 2.515491972963483 0.102 +0.01201789971116034 0.3073491285788075 0.102 +0.7038009500948492 -0.1317389881286793 0.102 +0.7461289880536222 -0.156914456667726 0.102 +-4.603511398975031 -5.689757762631887 0.102 +1.651032989843505 -0.9414336891506566 0.102 +0.132995566320461 -0.1645605755482376 0.102 +3.331487256536834 1.06869553582689 0.102 +1.533778810143937 0.229581636865536 0.102 +0.6003315469415333 3.896158311178005 0.102 +0.5019734805415845 -3.10507339835827 0.102 +-2.12615297592788 8.411457386688051 0.102 +-0.07895713259300315 0.7435996928815372 0.102 +0.9872521505552203 0.4060088737583655 0.102 +2.455759129631088 0.1294936041762245 0.102 +0.6213740299720886 0.001135467762167243 0.102 +0.9370804392925335 0.09375303073746198 0.102 +0.2435080645837658 0.5906617723152344 0.102 +0.7075451023383876 0.1879424172972358 0.102 +2.33523712902683 1.397319573840133 0.102 +2.391231016494592 1.191441354350071 0.102 +0.08803078555440697 0.6682784417978705 0.102 +0.9924224693015679 0.1560964285215383 0.102 +0.1877579200242524 0.2798100259501438 0.102 +1.073139235352344 1.285276486607838 0.102 +15.54709974096637 -4.943897667446352 0.102 +3.402627363427701 0.8999088394172907 0.102 +-0.04703938422883431 0.9252112737490158 0.102 +-8.239409800741765 5.87763663231477 0.102 +2.893474262559709 0.2837979519381891 0.102 +0.8873218070811286 0.4174023553792407 0.102 +0.09793517227865373 0.6019741279863169 0.102 +0.4272117288017454 0.4369549677786779 0.102 +0.842444954974388 0.07599411712490708 0.102 +-8.284595689782501 -5.412866284623754 0.102 +0.5212705564526081 0.2553697091574746 0.102 +0.009141188667966996 0.5257057838184931 0.102 +5.841178516484325 -8.058137124131866 0.102 +3.454044839613553 -0.01804618192721889 0.102 +0.7964542217385833 0.3222704413409687 0.102 +0.174267201570601 0.6386515495774712 0.102 +2.345845209638782 -0.06341942148824467 0.102 +2.076228782266468 0.1070466611139976 0.102 +2.56196638064025 1.489492724911802 0.102 +-0.03071251894910215 1.001697897579474 0.102 +-0.05252239377945341 0.5294634816071737 0.102 +0.5342722477455578 0.9570461689820668 0.102 +2.567833904979812 1.038518321449628 0.102 +4.169545139441173 -0.9022596767599762 0.102 +2.803997723088185 0.4385519595087248 0.102 +-0.0738018278085007 0.5065733443858438 0.102 +-0.07074984578955927 0.4527051946946904 0.102 +3.933221130436341 2.264969157625278 0.102 +5.085127358082101 0.648538872933386 0.102 +1.834852297409225 1.259343814546742 0.102 +3.749139286296574 0.3596339491539444 0.102 +0.251806748089617 0.6675168874712141 0.102 +0.2423131647813842 2.064439637848061 0.102 +5.689629719801377 8.288504096195577 0.102 +0.7464977748931594 0.3565269331556846 0.102 +0.6337617117989018 0.4284758221478286 0.102 +1.909151790671186 0.3808982921214223 0.102 +0.7942064808665422 0.9480974023804288 0.102 +0.07363456717467649 0.569591192853053 0.102 +0.4043659624336551 -0.1529969209889306 0.102 +0.1407930017372872 0.403873814109912 0.102 +0.4680970158756881 0.04714987585656191 0.102 +-0.1845056099417252 0.9155578139189305 0.102 +0.05332683308253549 1.167647563561034 0.102 +1.035857019128919 0.09138188380420199 0.102 +0.4158328931349832 0.8188209498603918 0.102 +2.943767760308052 -0.03218208651282353 0.102 +-0.07743896918990319 1.09770009100073 0.102 +-0.03840751099398192 0.7848940820681063 0.102 +-0.3203664686107701 0.379648965467106 0.102 +3.810787842982993 0.9905374155562416 0.102 +0.1998034379960109 0.1619025865584338 0.102 +2.886950206578982 0.5315341368412511 0.102 +0.2010275208624362 0.0714269441614109 0.102 +0.7429389346029155 0.6048022406878968 0.102 +0.6349581416170673 -0.05594593835077277 0.102 +-8.077365134210581 -2.53665376135692 0.102 +0.448358923806999 0.5135610890811245 0.102 +0.9601956212523538 0.9544968386074496 0.102 +0.3171090569332475 1.023375554537219 0.102 +0.4014525433275019 0.627038387088293 0.102 +0.006694919693828592 0.6226046139337277 0.102 +0.1877677351123035 0.241907535118553 0.102 +1.062693300494224 -0.04132800768247764 0.102 +0.6544457596425639 0.2597179004159865 0.102 +2.528042630204499 -1.842409196565382 0.102 +2.759561375618245 2.604358220550892 0.102 +0.1672302653577033 0.5532215557743342 0.102 +0.3862478529416752 0.5524952023691095 0.102 +0.2869908954860885 0.887471169188493 0.102 +0.6322395853496341 0.7892000879010153 0.102 +-2.524589161430049 -5.714775771593049 0.102 +3.795095216084081 0.0185646909103318 0.102 +1.079667820726985 0.5023688711196836 0.102 +7.577537977563544 8.254669631122571 0.102 +3.595387390871595 -0.9323753346623339 0.102 +0.08557932743593304 1.009112294677859 0.102 +0.3711754077058074 0.1824649398162965 0.102 +0.9964716981486417 0.007050424836126295 0.102 +5.061561884953592 -2.274806129501789 0.102 +3.242167208924133 1.021018315618163 0.102 +0.5159161200501641 0.4416300434882661 0.102 +4.198669630590524 1.122066101886263 0.102 +0.3981936305825647 1.048434699145322 0.102 +0.3676114395913437 0.9542803664983736 0.102 +-8.253859871653644 2.070752205780556 0.102 +4.473016385776827 -0.8360023377330316 0.102 +0.3509579858852883 0.8857373258617054 0.102 +0.5268872791400719 0.8872273839029859 0.102 +0.4509230463983823 0.2171143502320102 0.102 +0.144168221703724 0.4832953524021563 0.102 +0.4518664399006695 0.8652029912716455 0.102 +0.8856622222020861 1.001246663990771 0.102 +-5.020412369122488 -1.727316088252273 0.102 +0.2443389898420575 -0.01069249745049922 0.102 +0.7446938604253162 0.1540323892911564 0.102 +0.5439410105205489 -0.06895690697783041 0.102 +0.1415903366161667 1.144376359418446 0.102 +0.6081968518176099 0.9098532570496645 0.102 +0.7080033727526438 0.4498255110760974 0.102 +0.505413713785268 0.2079213263016218 0.102 +0.9572543130804562 0.2521550945213925 0.102 +4.881633434136773 -0.01998575769139319 0.102 +0.3246977758250172 0.3774090409107407 0.102 +0.4865652582403861 0.7690195947389656 0.102 +0.5949794247235604 0.1132717048879464 0.102 +0.4154363354955532 1.078391890281734 0.102 +2.579973161642793 -0.4828981147080799 0.102 +1.781217641473256 1.98248225325221 0.102 +12.77896717234479 -2.860750598201857 0.102 +1.032298039180018 0.4078984273874409 0.102 +1.036239893006279 -4.179849245290449 0.102 +3.616198771354316 0.8270328083553382 0.102 +-0.06181201424567001 0.6651954147684296 0.102 +0.7098541855806068 0.8076147276374445 0.102 +0.8131782309276303 1.023609817019542 0.102 +0.4080979474655527 0.1060296874696288 0.102 +1.182179974818877 1.514805485380158 0.102 +0.5871971612858484 0.6755322487742762 0.102 +0.6811342929128995 1.059579104366451 0.102 +0.5453803860533276 0.3263947074099058 0.102 +0.5376915283630722 0.6089995660367977 0.102 +0.6218188902495538 1.078795774316589 0.102 +0.2472898693952864 0.7053837934996412 0.102 +0.4627788368202647 0.5949344510146284 0.102 +0.5199434347272875 0.8161628637225742 0.102 +0.5563596039787768 1.035671265326484 0.102 +0.4345840225088147 0.9077014204351804 0.102 +1.858951663771347 0.6693354622438452 0.102 +0.8847577177634206 1.048355673359114 0.102 +0.5762496769538256 -0.1214971968963013 0.102 +0.3262974195428529 0.9719242514776024 0.102 +0.8304888763185097 0.3527652560822701 0.102 +0.8505773822371527 1.056879920384367 0.102 +0.8313951636790265 1.104635961420215 0.102 +0.3287128134228649 -0.1387636842312214 0.102 +0.01467005226959777 0.4898086993084276 0.102 +0.1355991585068126 0.5962696041633755 0.102 +0.694609082329827 0.7168114171986462 0.102 +0.9948508287961906 0.4839634689216623 0.102 +4.125588664292176 0.7405697718855759 0.102 +1.029059625245627 0.2761840284088407 0.102 +0.4148672293526671 0.7075033435013386 0.102 +0.34625432363617 0.5152554134431175 0.102 +0.04818695167968282 0.7382048651712179 0.102 +1.125166258562937 0.7154455739339839 0.102 +2.103409324763498 0.7100332819659479 0.102 +0.9119354580546236 -0.04572865749358977 0.102 +0.5208969862099493 0.1563505365734493 0.102 +0.477727081998003 0.7356561468999501 0.102 +0.6117222616044531 1.121527888705928 0.102 +0.6025165678737475 1.038404448583336 0.102 +0.659360985108022 0.9796551745702485 0.102 +0.4669423974874284 1.020062730543645 0.102 +0.5014031003623381 0.6455653622973694 0.102 +0.3111513541423445 0.594716243629306 0.102 +0.7146328723675974 0.8772450274969769 0.102 +0.7658927269411163 0.8766009817460616 0.102 +2.412361846877851 0.3137200392925203 0.102 +0.4712589515100387 0.4117879700799647 0.102 +0.347495092307858 1.066037946139727 0.102 +0.3359694572469732 1.09302642254323 0.102 +0.0301002327529837 0.8724692552456296 0.102 +2.541221952441215 -7.905508842949613 0.102 +0.5325329672742938 0.6936283336528224 0.102 +0.5357420101358432 0.3632967580238665 0.102 +0.1232705593213659 0.2238982739827368 0.102 +0.5699558001288616 0.3969458022807193 0.102 +0.348745668613817 0.6654217667618368 0.102 +0.4372149845209066 0.1364689664502466 0.102 +4.532157916553106 1.69151292235863 0.102 +0.1581088099994874 -0.1100277966270174 0.102 +0.4809065583802304 0.3738460123098902 0.102 +0.5664942588808637 0.7543196766538086 0.102 +0.6849093091630547 1.011192046782846 0.102 +0.733148909774412 0.986396933684843 0.102 +0.5885518448507504 0.9699885724279509 0.102 +0.6878064010307697 0.9397569236273605 0.102 +3.647133083701039 -0.1848166501742454 0.102 +0.298441725582768 0.5330693416295458 0.102 +0.2853631042060159 0.5666585821973225 0.102 +1.218144625510936 0.0169723444543484 0.102 +0.5083918847874586 0.282781064547345 0.102 +0.5910700637052477 0.3090175124080414 0.102 +1.386868920031964 0.5575678964382218 0.102 +0.5174538787109467 0.5769570963848845 0.102 +0.5580551018850743 0.8049500925331099 0.102 +0.7657849504896606 1.028440320559245 0.102 +3.341047063553487 0.6448134766630853 0.102 +0.5803885348759866 0.5486550411541794 0.102 +0.4578843147288351 0.9328501040136998 0.102 +12.97890588208397 3.396210654426669 0.102 +-0.0144060450350288 0.4490165520312403 0.102 +0.5303519747684411 0.7255584555341631 0.102 +0.4258424367830221 0.7926293560109982 0.102 +0.8091503498031607 0.6702736117052203 0.102 +0.3043275210359546 0.6337099772833624 0.102 +0.3673702533209334 0.311141314741833 0.102 +3.095081706694943 -0.1037715500180562 0.102 +-0.2890336771421049 -2.182234490574724 0.102 +0.7403959269221574 0.7254616766734218 0.102 +3.179235149212964 0.3387024047934309 0.102 +1.603855639824226 -0.1925618772521805 0.102 +0.5164139594156437 0.5271813699368965 0.102 +1.078617087765571 2.019470575164002 0.102 +0.9079132016036425 0.3791450627357604 0.102 +3.942238354703125 0.1513467586940846 0.102 +0.5814852055691658 0.1960311021146663 0.102 +4.436119278292753 0.1965066302352522 0.102 +-2.086953920399566 2.236310982542306 0.102 +-2.97177936636579 3.301675654380886 0.102 +0.8964290315632359 0.6343894594137619 0.102 +0.1182934033693755 0.8628745486461531 0.102 +0.4072734773065879 -0.02721799454944669 0.102 +3.406896571234533 -0.2448390678469274 0.102 +0.493479731265721 0.4919715769364478 0.102 +0.2122309801005343 0.5486625987636702 0.102 +0.2329249249899455 0.6161063151350813 0.102 +2.91713105221846 1.20725643209398 0.102 +0.619184890835857 -0.7976485176008624 0.102 +0.7916825529915944 0.5457570561220318 0.102 +0.7619342596660773 0.6788531357676219 0.102 +0.6100901166812336 0.9918836346380471 0.102 +0.3304674301662673 0.2403266691962891 0.102 +3.586108941984929 0.04055193570183697 0.102 +0.3845330215764559 0.9265122831785744 0.102 +1.605343745859053 0.6005858019572984 0.102 +0.9357461754090362 0.9835523534506462 0.102 +1.778738691169073 0.2295891112421587 0.102 +5.707043873898095 -2.322398709678944 0.102 +0.6119068411783571 0.4647541029315673 0.102 +0.445694673978365 0.6222915425282568 0.102 +0.6047273247205123 0.3885208199788732 0.102 +0.562920502796406 0.8856175232041417 0.102 +0.5717345661600348 0.2439130901066075 0.102 +0.6469065699112746 0.8937949239704577 0.102 +2.356125684699313 0.7153178141211005 0.102 +18.26967726024188 5.936191139829474 0.102 +0.4901797429802636 0.8591254569974189 0.102 +0.7436375950177588 1.208956320945203 0.102 +0.7002465140150556 0.5711815584543696 0.102 +0.5858833890125665 0.8399899552258399 0.102 +-0.01330095297900872 0.2975965814157023 0.102 +-4.595494057120941 5.569136530070042 0.102 +-0.2215165355254179 0.3538361568924884 0.102 +7.457213701913715 4.533055471461389 0.102 +0.6114432897032983 0.6307568217401809 0.102 +0.6561830552949405 0.04097286777707449 0.102 +4.186293233307018 1.312910472299433 0.102 +0.6237538391962607 0.831789702121943 0.102 +0.9622050396151233 1.032583522483741 0.102 +0.6088969223304412 0.2797351845204296 0.102 +0.5451717027862493 0.4377192389697387 0.102 +-0.1045363648084554 0.9340396568606257 0.102 +1.191020068847308 -0.6339972416388847 0.102 +-0.1088024527300128 0.3155290223708724 0.102 +0.5058935341903369 0.9330312745805976 0.102 +-0.03968899990490184 0.7055484946513085 0.102 +0.412261643270052 0.4746451023585438 0.102 +1.001333696460203 0.564418383112146 0.102 +0.5623664074195636 0.5197321457434819 0.102 +0.4389390797673426 0.5429291304432327 0.102 +3.288802346367641 0.1227212910906179 0.102 +0.7435154446948109 0.9560523034631625 0.102 +3.818417949337376 -0.5317407688829444 0.102 +0.4043608258085645 0.3452953651738866 0.102 +0.2493623866697199 0.7929886981516383 0.102 +4.154535892618282 0.06629959744572773 0.102 +0.6008361676424835 0.746301794969555 0.102 +0.6546963592529274 0.5825746748349311 0.102 +3.093520592412481 0.2408365420983552 0.102 +3.202737025779733 0.7435431732507256 0.102 +1.271063148305069 -0.2196479888404583 0.102 +0.5094663814502463 0.08208570872585166 0.102 +0.5911717945454582 0.6019311154568102 0.102 +2.286651614399895 0.86348364206021 0.102 +6.532329823197732 -1.003092504240107 0.102 +2.628349455189968 -0.9927122909370028 0.102 +2.984315037714991 -1.130701716428963 0.102 +0.356616993138393 0.7685522911444991 0.102 +0.3716925598952007 0.593661459148487 0.102 +0.4473274454519504 0.9878011490720264 0.102 +3.623118520405615 1.129223617456931 0.102 +2.278810170157742 2.918066326944719 0.102 +1.097344616991903 0.2155340348523151 0.102 +0.6814759040160805 0.6461703902787866 0.102 +0.4671804283467598 0.2937746901001389 0.102 +0.6651166096866117 0.8597567338001059 0.102 +0.4788373141339974 -0.002306592284798803 0.102 +0.855699753539124 0.4121999205877696 0.102 +0.5782751385564017 0.4771825480267348 0.102 +0.6823510885721067 0.3754683595121198 0.102 +4.154660525336753 -0.2345495500631528 0.102 +0.5269364317429233 1.019804012975863 0.102 +0.4587317816528858 0.7097765057132795 0.102 +1.936557160269518 0.8163464362161712 0.102 +3.1133075844912 -0.2791603037577972 0.102 +0.6836181313063522 0.296462810733947 0.102 +-2.141056214724164 -1.468530101152089 0.102 +3.141774343799283 0.6126044746031988 0.102 +0.3873891023788766 0.4000068367737178 0.102 +0.9693598626803414 0.3339997112802719 0.102 +0.9111276772544937 0.4552502024966612 0.102 +0.4710909869264943 0.6536248809092542 0.102 +1.323348366321442 -0.03639189166045147 0.102 +0.1562496916644581 -0.3021031993558241 0.102 +0.827907553029279 0.4687106852960954 0.102 +1.00769135672669 0.2333904794663685 0.102 +0.2742691186734523 0.3155901321134848 0.102 +3.886384303676329 0.6978144496682367 0.102 +5.824618467696966 0.09801509281178977 0.102 +0.7590398941807741 0.394813621575876 0.102 +0.7799317441120256 0.1371319608127403 0.102 +2.605004278205587 0.6955659518996903 0.102 +6.519957719808422 0.79654354145415 0.102 +0.7029261894750874 0.1056451501948568 0.102 +0.6520348376823577 0.615043611449875 0.102 +1.72588531754401 0.8087109996957847 0.102 +1.494556147135366 0.01352315771318777 0.102 +0.8188865864748828 0.9885274472248893 0.102 +0.7620759123147651 0.3158706829678329 0.102 +-0.3577208941842511 1.181214869880611 0.102 +0.272523975123021 0.1251018447199438 0.102 +-0.08310507573617015 0.1930848929147403 0.102 +0.001152467676093018 -0.06865522351982851 0.102 +0.01724134191695813 -0.1102729118578529 0.102 +0.0715904403538692 -0.1196685673419667 0.102 +0.3596141586272884 0.4772754249289652 0.102 +0.05305311937503931 0.2324961233577783 0.102 +0.7149452363869567 0.9287169499607804 0.102 +0.2678044146547383 -0.07601225366798345 0.102 +2.116556181543042 1.79824714964254 0.102 +4.927981388374888 1.558116937883166 0.102 +5.473149077951028 -1.0717192548324 0.102 +0.3827021684707229 0.6706278433574978 0.102 +-0.01907556909505837 0.9527310852852293 0.102 +0.426777083094028 0.2631510888410954 0.102 +0.6423016729923517 0.5459656553081362 0.102 +2.632056381856315 0.9602656418876491 0.102 +0.2861518992062558 1.102822195269843 0.102 +2.120979429269985 -3.046175593428934 0.102 +3.083580421436705 3.714839256105568 0.102 +0.6583678494306052 0.3253292699740366 0.102 +0.2112130205130872 0.7033664232159483 0.102 +0.9663556432839489 0.4370126706777318 0.102 +0.1369487109919134 1.46453870772363 0.102 +0.8017168259941588 0.07700456338693405 0.102 +-0.8367697493325562 -3.108352509036747 0.102 +0.6406322598040952 0.1380580617972031 0.102 +0.2532708011085542 0.8576182304538867 0.102 +0.2762366898234471 0.3965963153449032 0.102 +0.697693379320117 0.8477575404123699 0.102 +15.59212638861789 1.975431304067094 0.102 +1.278524409813104 0.8606242399105715 0.102 +4.673034114649298 -5.054131283983663 0.102 +-0.06830504393599093 0.5807229334664569 0.102 +2.34903103532068 1.637788222406826 0.102 +0.3478493436520532 0.8106985602956966 0.102 +0.6136345700108443 0.7034689930228042 0.102 +12.9049337565403 2.099350007938687 0.102 +-1.555330225495244 4.431607063086831 0.102 +0.2782238677015986 0.7411697447278288 0.102 +-0.05318741031273556 0.3228067779140913 0.102 +0.1648870540241262 1.047344951653374 0.102 +1.730437721725341 0.4898738761477661 0.102 +0.1220375213700526 0.185577185178309 0.102 +0.7690011421175262 0.5232392803518704 0.102 +3.019572260654398 1.867492411477637 0.102 +1.539044420989764 0.8589058955411705 0.102 +-0.03294303778444866 0.6177451827178454 0.102 +0.9250919439058864 1.073143761012975 0.102 +0.912100101098875 1.13052677616466 0.102 +2.245429052204594 -1.010954390058926 0.102 +1.044756586997775 0.03691694847242628 0.102 +-0.008247588026420012 0.4151878362873772 0.102 +1.336896672962908 0.1477950655136267 0.102 +1.730464320175995 -0.1889116316594668 0.102 +1.480350700109986 0.3039243185278653 0.102 +10.16931638258717 -4.451643246090582 0.102 +0.9667470152261646 0.3693400471766933 0.102 +0.8505603832033302 0.1197318267652604 0.102 +-0.04965332207718895 0.06911866670210486 0.102 +2.017230314896796 0.3206465050485028 0.102 +1.419372977735886 0.9719150487230006 0.102 +3.942726253619311 1.329407322295156 0.102 +3.687766446133841 0.7644939522063116 0.102 +0.9619884246261804 1.068365946184463 0.102 +2.286495609986726 0.6122804642126185 0.102 +2.34655636274122 0.5022947198047646 0.102 +4.455904628703259 3.095548391343112 0.102 +3.634476600225027 1.461888031312468 0.102 +0.9049908023961726 0.1160724690472079 0.102 +2.041065687645184 -0.3882381634147458 0.102 +0.8825374242601399 0.1968746250828307 0.102 +1.464196704288294 0.1787705980463584 0.102 +1.055415135523014 0.3602792256347273 0.102 +1.06112790258839 1.028622779799711 0.102 +0.2805902164212682 0.4977495364880919 0.102 +2.148475309670681 0.9870478167556673 0.102 +0.668838001453254 0.4245171034824563 0.102 +14.57266433410239 -6.266484392918422 0.102 +0.06515505711592758 0.4292826512041749 0.102 +0.6731588784773789 0.6842843550386539 0.102 +6.779060078027076 -3.495126472568568 0.102 +3.958829875661274 0.5080463928901606 0.102 +0.9561713956030126 0.5885821454059659 0.102 +0.7089916501933861 0.5322613557546068 0.102 +0.8674240375847265 0.9848046936225945 0.102 +0.6698017578982713 0.7853474722837959 0.102 +10.21123261345024 8.317735918788379 0.102 +-0.235633425014404 0.663116373717672 0.102 +0.01364969303993683 1.023924581898869 0.102 +0.01172726163351467 1.068591619298826 0.102 +0.1779820482935793 0.008946052518915962 0.102 +5.977628669159311 1.768775369061408 0.102 +3.887717390944062 0.9092318561759132 0.102 +-0.8657372811836016 1.630978862200474 0.102 +2.887392269463332 0.1635925924203501 0.102 +0.2484463977734324 0.9398180858149512 0.102 +0.1569860895693981 0.9245949910007989 0.102 +0.9456032132080398 0.28412983889692 0.102 +1.228035874951855 0.2975769902712795 0.102 +0.8037006308736437 0.7436300595332577 0.102 +3.383452061136722 0.079563893237414 0.102 +1.056093792074626 -0.1032715229954035 0.102 +1.127393952564334 -0.1422872049359835 0.102 +0.6947187015835544 0.5024653478548541 0.102 +0.9928694519501617 1.101338754389172 0.102 +0.885227860163878 0.286658227827173 0.102 +0.8234806647741602 0.4026656542046909 0.102 +-0.08331590012991782 1.28251263224974 0.102 +-0.2730441066435888 1.320467977205973 0.102 +0.1498147353228326 0.3406108738312058 0.102 +0.4665945441645294 1.059531744034885 0.102 +4.520545972557373 4.949640788424868 0.102 +3.635586753016156 5.855454388658346 0.102 +0.01431863745556023 2.631124790007747 0.102 +0.8942951482743051 0.8169663796570107 0.102 +3.852075951314722 -3.19091121097627 0.102 +3.099733893338311 -3.658283891925805 0.102 +-1.291097496442739 2.345103223709073 0.102 +0.8661937644357173 0.7288494033137187 0.102 +2.712083732179924 1.124974457011607 0.102 +1.067359193061921 0.1753728863363881 0.102 +0.1947679400556671 0.7930345394333608 0.102 +2.160475856386416 0.4935591427603302 0.102 +2.437291752927037 0.7234966787739197 0.102 +3.951146680462486 1.670609207184752 0.102 +2.154862303474564 0.04433618738383958 0.102 +3.297668588864891 0.2803375636505154 0.102 +-0.3969796151927921 0.6186747262722961 0.102 +-0.5501038909971956 0.4898496345590248 0.102 +0.05961053364064677 -0.02183041575882852 0.102 +0.1439356247149477 0.5212070577891441 0.102 +0.8999700567376221 0.8481574663318435 0.102 +0.8844813469935036 0.9304661331708257 0.102 +0.8475552566796501 0.904898907486735 0.102 +2.682133463090947 1.25447294894414 0.102 +0.3355521551358787 0.4423286370604539 0.102 +1.538865017638769 0.4331800950133401 0.102 +-0.06179107367455115 -0.008917276436356909 0.102 +0.9003878173327542 0.5545227565772134 0.102 +1.143654138994823 1.122039034123457 0.102 +3.176395392749722 -2.168335086745063 0.102 +8.408969348481252 0.2293957761738318 0.102 +3.456079622290875 0.179228995133819 0.102 +0.7507707928859683 1.075992851182967 0.102 +0.7040463901896417 1.082693669340202 0.102 +0.6858987060230712 1.13864506717061 0.102 +0.7330448302010163 0.6339879661826551 0.102 +0.2658146548311308 1.023786830187037 0.102 +-0.231331919437646 1.069564677740164 0.102 +0.781029269847019 1.099889651588475 0.102 +0.3541646923833268 0.3996813085438806 0.102 +-3.266713022353968 0.4496521538313465 0.102 +9.66423111847287 -8.218960607740962 0.102 +0.1798063821042042 0.6729671851943889 0.102 +0.8451699518440539 0.5732243760557223 0.102 +0.71921427528644 -0.3801379317639285 0.102 +2.238266901487239 0.2476142680649086 0.102 +7.239616869356635 -8.063135525446087 0.102 +0.5017202972747284 -0.08136358956556707 0.102 +-5.601191191611653 -3.833998868802495 0.102 +1.498590906682764 -0.2177213778670891 0.102 +-0.03714470039224333 0.01850115369014412 0.102 +0.2936702614032248 0.1559956401614808 0.102 +15.88438371889848 -2.242161065250387 0.102 +0.9222663503652009 0.922069333943514 0.102 +1.008004108524291 0.3326273681660733 0.102 +1.082422570037913 0.3401196613038098 0.102 +1.103034717852983 -0.03303700440293646 0.102 +1.161720993299124 -0.06333312766627429 0.102 +18.29861055551884 3.255058981207484 0.102 +0.7156405399295154 0.03734608165277622 0.102 +2.604799975562064 1.393932874349325 0.102 +-0.08763811103482773 -0.09677748293856836 0.102 +-1.750578572483549 -0.3090420484370635 0.102 +4.845270691342968 -0.3574684540361061 0.102 +7.266913312909063 -4.747437072863518 0.102 +0.7628191973570911 0.481468857889918 0.102 +9.73051534140933 5.682768923463311 0.102 +1.045540379627103 1.083640148710514 0.102 +2.979573636429407 0.2994758608021709 0.102 +-8.300834028166094 -0.5482613332291245 0.102 +4.185700527202277 -0.1048746664478994 0.102 +1.017377761293705 0.7755394650259327 0.102 +2.543856315496217 0.1029076255980172 0.102 +-0.01622080481322628 1.087506612507764 0.102 +0.967296802880842 0.7639512113638616 0.102 +0.03339159969887516 0.3465938205527651 0.102 +-0.01648247257093823 0.3847515630087116 0.102 +3.042801507512205 0.4455128955257832 0.102 +0.9279699177496383 0.002189749300555373 0.102 +0.8985302419908214 0.05057798627768578 0.102 +0.7572900293044951 0.7560112826919309 0.102 +0.9439566728715805 0.8037112450613304 0.102 +-6.00863633774731 0.1061628271423925 0.102 +2.032573368568273 1.184109579798224 0.102 +0.3697466704474341 -0.6356703536983073 0.102 +0.5518320143499125 1.235549071259161 0.102 +1.38988711145893 0.7921520300494985 0.102 +1.032399718293678 0.6921525612456846 0.102 +15.03946627915049 6.349670605740387 0.102 +9.536980950640681 -2.740427566036986 0.102 +3.909979483316622 0.3464135771404566 0.102 +1.337882342778376 0.3331643094346736 0.102 +0.1912545554125717 1.129388524484787 0.102 +2.573700539899557 0.4931491367857356 0.102 +0.02183707509339827 0.9472687425797471 0.102 +0.8533978511744496 0.8671212966775651 0.102 +0.53965566324442 -0.02444191857381613 0.102 +3.799449115625912 0.667132552032227 0.102 +1.558697128371718 1.453047514180241 0.102 +3.394491516619625 1.19457099007171 0.102 +2.69977483677095 -0.7658824274255407 0.102 +0.2021067774655116 1.043519253831255 0.102 +0.7695911078350731 0.5911547026674525 0.102 +-0.1273871880896834 1.111715175291146 0.102 +0.7733353467065127 1.86297812841292 0.102 +0.8787298022844101 0.7970663440671389 0.102 +0.889231415033455 -1.059507893461128 0.102 +2.706396089045454 0.2100805393017364 0.102 +4.63715124818692 -2.052985236169459 0.102 +0.1962239302477234 0.4730227449008995 0.102 +0.9578505496613592 0.1849828553114424 0.102 +0.8795983338028934 -2.049233027098007 0.102 +1.477796483303008 -2.254258126581151 0.102 +3.688486949371848 1.017168639036194 0.102 +0.9295741868001177 0.8765888137247545 0.102 +0.9526241471122464 0.8686637474836658 0.102 +6.672374906819245 2.31982466934955 0.102 +0.8029001354906706 0.9132444303086038 0.102 +-0.104557104212494 0.5838754529706335 0.102 +3.516435638945586 0.3996813621888184 0.102 +0.9962734008478642 0.7069224240174258 0.102 +-2.857868474689667 6.333541234146255 0.102 +0.2576370132614128 1.077657185719439 0.102 +2.005049781376508 -0.05388927168505162 0.102 +1.008702044288296 0.8007200689583858 0.102 +0.9994952522549755 0.8962247662316263 0.102 +0.9920827469926857 0.753191558246035 0.102 +0.9679813275709478 0.02668918368863984 0.102 +0.9610649864282891 0.06800616600603941 0.102 +1.099574715809323 0.8930305040340537 0.102 +-0.01156681418150664 0.8701180158839974 0.102 +18.51314755386365 -6.275336822556814 0.102 +0.9705366194986554 0.8272895339591333 0.102 +4.45537201509852 1.309562168461101 0.102 +0.48763867029358 -5.946427199167061 0.102 +0.4922474000608586 -0.3230069969858104 0.102 +-0.2194794156353727 0.1544627931718091 0.102 +0.1123164832402237 0.02061732440780107 0.102 +3.666101376481083 -0.5308201252389252 0.102 +1.068147597748065 0.7295227003399763 0.102 +4.969350800879315 1.209793429223461 0.102 +1.072351791268953 0.02276873454562089 0.102 +0.04418800586075477 0.9615034298449097 0.102 +0.832093633764629 0.7892570367146304 0.102 +0.9957142990619933 0.9403842793786789 0.102 +0.09399958243792821 1.125526300520572 0.102 +0.1297669674836666 -8.933788866000162 0.102 +1.033774692902809 0.4820216604920846 0.102 +2.599352663484763 2.149138856527391 0.102 +2.964356863236368 -0.5879132364980008 0.102 +0.5508471969963628 1.084851640577373 0.102 +0.5041584619246151 1.091163123452302 0.102 +-0.02739508049842828 1.446488719960157 0.102 +0.2286111663365511 0.1619801085820669 0.102 +1.223743520966383 0.4728341481025958 0.102 +0.9291923304320528 0.6851958113971837 0.102 +-3.168132177035708 -8.143526634138773 0.102 +0.6057665006607462 0.0784293701831429 0.102 +0.9799298447183556 0.640825255354565 0.102 +2.881389371127895 1.047560761381866 0.102 +1.088979736379151 0.7958327175034274 0.102 +1.085180933261575 0.8287644496101413 0.102 +1.135299833674484 0.7705286496242634 0.102 +1.464352720191569 -0.4953237181130306 0.102 +1.313523548991605 -0.4909597217417231 0.102 +2.014388317633717 0.597177544589214 0.102 +0.9227954874489405 0.5871777723974813 0.102 +0.8487296054532667 0.6057787680971524 0.102 +0.1283569314056224 0.7813004526088744 0.102 +-6.84571954165116 -2.372463384879885 0.102 +16.53698173600453 -8.468423244947552 0.102 +0.1324737192732494 0.7488990985495274 0.102 +1.025363365193937 0.8776269945517406 0.102 +0.7408099296039705 0.7981448609935711 0.102 +0.186867117127739 -0.0721393702483433 0.102 +0.3064489892754505 0.07487713385739969 0.102 +3.531260522210959 1.267330126735388 0.102 +0.8388942125964566 -0.183357341467515 0.102 +4.422054604134435 2.020097761347622 0.102 +2.219793933289156 1.361822764317778 0.102 +1.931679627196396 0.5724711516841655 0.102 +-2.043327194682207 -2.795513595197216 0.102 +1.088557986992818 0.2929321730629332 0.102 +0.1552512676990091 8.760100126014191 0.102 +2.789672428538652 1.021042767116238 0.102 +0.2190920181147856 1.081601347252107 0.102 +0.2196887174004901 1.33457584226857 0.102 +4.268982428987345 0.9659412446049355 0.102 +0.9156114583034085 0.1656256694940996 0.102 +15.48944650428619 -3.175582788985542 0.102 +0.3301785110630983 -0.05705607983454802 0.102 +0.4107757033947477 0.01776129962971804 0.102 +0.2467379156270151 0.04695183390554479 0.102 +4.069755240903282 -0.5776858109277163 0.102 +0.3479985956187363 0.1185709592544801 0.102 +2.645204784435004 -0.2243069942813098 0.102 +-0.1336447359505068 -0.05737054221270466 0.102 +-0.2411500732559661 -0.07202010065390546 0.102 +1.99087416500002 0.1989459120728127 0.102 +1.047476658267468 0.6566592383846379 0.102 +1.545824579075672 0.6689256081095127 0.102 +2.949829984322612 1.46869673231898 0.102 +0.1484169231651584 0.0447190364610757 0.102 +0.9825906139851072 -0.03950428097905201 0.102 +0.5654375935885442 4.640696117954913 0.102 +3.880733513820213 -0.4397984246160994 0.102 +4.831083277020658 -1.23704350260242 0.102 +16.54031958635693 0.9914376461960928 0.102 +3.135663988567416 1.267824200411026 0.102 +0.8432079734603961 0.1480785241527083 0.102 +4.242629474845432 -0.3978219561841396 0.102 +0.0619244394819445 0.8227641083284548 0.102 +3.364690295941071 -0.4882472883169712 0.102 +0.2974499186433007 0.2055870868012722 0.102 +0.0930675900450126 0.5333642089799071 0.102 +1.838725198878268 0.9983645993509873 0.102 +1.468565981753992 1.089608888123182 0.102 +-1.396371834442967 -5.106359657284322 0.102 +3.615938092496002 0.5914930016579616 0.102 +3.971371384277913 0.2707297919337315 0.102 +0.09076299985567976 0.3396988450049834 0.102 +5.048737217358035 0.8599581775980515 0.102 +2.839355001661989 0.6946605709176583 0.102 +3.043600517779435 0.9893232646365384 0.102 +4.032251240023252 0.9120391547227957 0.102 +0.5698560900601592 1.114145684501111 0.102 +0.3106008761742069 1.512323365432335 0.102 +4.133963619218822 0.2681588865792331 0.102 +2.596628651533822 -6.615299019979365 0.102 +-0.1562035239258319 -0.3866790373019283 0.102 +2.895714848832472 0.8817289532759083 0.102 +0.3751402903071485 1.283376055054141 0.102 +0.5833787827150518 -0.1845697183536805 0.102 +2.163762215597076 -1.618776352920921 0.102 +1.210272916151146 0.7405030283112828 0.102 +1.953135248906948 -0.2399272718251621 0.102 +3.627371087911663 0.9385886935662111 0.102 +1.793148030785638 2.289394919010895 0.102 +0.3189749168743947 0.8955444616285235 0.102 +-6.329791261915089 -8.356096890127647 0.102 +1.046680406284403 0.4238063669511364 0.102 +14.03205324025292 -0.5986482306877673 0.102 +2.749957238250069 0.8173065718359387 0.102 +0.08305831076108026 1.050485596471145 0.102 +0.6487982818325819 1.160053550418316 0.102 +0.2631023157243332 0.2820162814220684 0.102 +1.863646676086631 1.46363547868388 0.102 +2.340417725133865 0.326655273500338 0.102 +0.9019682980603545 0.2364822883587951 0.102 +2.646224644047636 -0.401628853839437 0.102 +3.857544909836678 1.982352891111596 0.102 +1.566122077841346 1.060949633343642 0.102 +1.600228785870359 0.9471356378427916 0.102 +0.2275038283766376 0.2335311997909467 0.102 +0.8152020730961654 0.6109839705584822 0.102 +0.355335915076981 0.2207566271208816 0.102 +2.597670732281445 4.609336325531268 0.102 +0.1599519861220643 0.3696452808616129 0.102 +4.888033964879316 0.4535054678284071 0.102 +4.900419485248775 -6.148505694148499 0.102 +0.03873402276494201 1.003243588945291 0.102 +1.749677319220625 0.6934525930894178 0.102 +1.694762111014809 -0.3799588455816288 0.102 +0.9440350893541282 0.5154584765986783 0.102 +0.03300387386829504 0.0882558604451049 0.102 +1.073033549301817 0.5661097271547888 0.102 +1.122895975253661 1.031962450031056 0.102 +3.212561316723093 0.9234228556473673 0.102 +1.056984829312878 0.1012171758243352 0.102 +-0.1401122109874581 0.8257489189790651 0.102 +3.811031231677526 -0.9953452382637276 0.102 +3.708952569244723 0.1724428149650128 0.102 +0.4947817989919641 1.134668656386434 0.102 +2.432067851108089 -0.1043028699006817 0.102 +3.290295544016314 -0.07065414314528123 0.102 +0.280938848160873 -0.01430425834028503 0.102 +0.2264092421217185 1.015950016845558 0.102 +3.375741822720868 -0.8400050640906536 0.102 +0.1353009095861752 0.4506119050255529 0.102 +4.2212996741001 -8.324555308948067 0.102 +3.086309068123584 0.8919415930897731 0.102 +-4.941524686143516 2.795740273759077 0.102 +0.3210150967783506 0.01130489528667905 0.102 +0.07344283681976065 -0.06929776898959908 0.102 +0.2157512583735579 0.9062184716405949 0.102 +0.1509415573247308 1.073444446060782 0.102 +2.190474336977743 0.408850118664029 0.102 +4.033136644137432 -1.310653049813715 0.102 +1.250070263734695 1.081967586245362 0.102 +3.268009134548979 -0.2235540577080317 0.102 +2.578548693229704 -1.336152352918889 0.102 +-1.627417487729631 0.8519318233179979 0.102 +1.168646080760123 0.120869806309421 0.102 +0.8789788663213853 0.4960566758004679 0.102 +12.12202259948117 -6.845196818695514 0.102 +0.08849917356887826 0.4684141893489343 0.102 +9.969922763097621 3.245442432984487 0.102 +-6.238452380975549 4.965489841298582 0.102 +1.143813829914478 0.6017974124381729 0.102 +1.992926175547171 0.9856420253271643 0.102 +1.344133478681238 -0.8682344974598966 0.102 +13.82288113703535 -5.457690958137229 0.102 +4.093659292573527 0.822039765727784 0.102 +1.071485310744115 0.2646152571045118 0.102 +-0.06151416398490724 0.2457262564870936 0.102 +3.615373749037249 0.2830862215455995 0.102 +0.926613341139597 1.302046465936464 0.102 +0.176485267102463 0.03845140717141533 0.102 +0.2813351970871163 0.7671610984927969 0.102 +-0.0492702265324898 -0.1801977892318443 0.102 +0.7821464615043515 0.8272167022367868 0.102 +3.390493829736503 0.7262353270608548 0.102 +3.795520577327077 0.2887067013909681 0.102 +0.1289791356077253 0.8139424067865717 0.102 +12.87303237553794 0.7639087839588956 0.102 +2.618977865562189 0.2236783182782389 0.102 +0.2380702575504079 -0.06129731074359912 0.102 +1.728130391898113 0.1367579481024129 0.102 +1.01974889125945 -0.03177026231575229 0.102 +3.772213810975809 0.8662972044095065 0.102 +0.2947100195940962 1.152266898287213 0.102 +2.250394947805162 0.7687446758177736 0.102 +1.000238753336568 -0.114882925766265 0.102 +0.0169911838263856 -0.03405875806966454 0.102 +-0.8545258042076687 -0.7122612591050955 0.102 +0.2006404630803381 0.4354297654814122 0.102 +12.98095284322565 9.087216711348669 0.102 +1.320013895720325 0.463404232729869 0.102 +0.9176019837063401 0.2963937687756935 0.102 +1.764520832008831 1.011467038230485 0.102 +2.138797442942669 0.3249521468489829 0.102 +3.269758402573616 2.070506749322449 0.102 +1.933180547645977 1.210272419563201 0.102 +1.043344648682136 0.9051839068413002 0.102 +0.6247987166053846 0.1888130292496926 0.102 +0.224770500682347 0.5220521187616016 0.102 +0.6596996465088992 0.09022858099800006 0.102 +1.810836007724953 -0.07076797835680795 0.102 +1.82245099426875 0.8907396895644879 0.102 +0.04544395975664286 0.1845309521825256 0.102 +2.737958614091403 8.175200266189826 0.102 +3.16522340253673 0.4103847787881878 0.102 +-8.526540318005264 -4.262353059386077 0.102 +4.976372028691885 3.276937026144728 0.102 +0.4495390831932441 -0.08267525156158857 0.102 +3.415657825569568 1.100562092082842 0.102 +12.03555430746091 4.803327316399032 0.102 +3.424523419722397 0.8259435286666179 0.102 +3.856463491221135 1.049007134499309 0.102 +2.950334582244849 1.003216305628903 0.102 +1.682868492422797 0.2991444052036364 0.102 +2.570343557107975 0.3197840143614615 0.102 +3.308289636915112 -1.425870276453644 0.102 +4.442904295395113 -1.63170639251484 0.102 +0.6765744385361018 -0.1737559242798148 0.102 +2.69316377691516 0.6058832314873603 0.102 +0.3904195493590595 0.04881538601545085 0.102 +-0.05215436073468871 0.8129234646708823 0.102 +1.32925770961725 -0.1349742184363648 0.102 +4.110048487838413 0.009592544029036981 0.102 +-0.0388433494815289 0.1869903220722174 0.102 +1.20707854264729 0.3551646955385214 0.102 +1.924092929121419 -0.02410524764467045 0.102 +4.512736542360448 -0.007002086195714474 0.102 +4.66553106570335 0.0007968935916348469 0.102 +5.365268886390241 -0.7335284384690738 0.102 +-6.379667587043922 3.017831608070959 0.102 +7.513711754769714 2.889905989822728 0.102 +1.0386041866267 1.216224940708003 0.102 +1.072087213281205 0.2014505927896456 0.102 +12.76258115637707 5.812522176177646 0.102 +-0.01435348086336867 0.244349705833109 0.102 +1.617547070654517 6.125143508290731 0.102 +1.173225891331794 7.173331038974051 0.102 +3.527665713779987 -0.05708333276469349 0.102 +5.620371791716641 2.777336479744881 0.102 +0.1862403139978319 0.9686289460989892 0.102 +5.523090917208815 -4.1766741388129 0.102 +1.048485514798969 1.05765784603899 0.102 +1.136217924920205 -0.1064247711622665 0.102 +5.271137883611464 4.892953838080411 0.102 +0.2954120788581108 0.2373240708012624 0.102 +3.788929628316717 -0.2418815585243445 0.102 +3.361719724635384 0.4538011812707315 0.102 +3.260520067173825 0.4878086198636023 0.102 +3.455856177803036 0.559435702520983 0.102 +1.605280382360407 -1.429135704300452 0.102 +0.842000900413469 -0.07557033934062507 0.102 +1.602598849210799 0.01365453775859432 0.102 +1.690898742155926 -1.963415198226957 0.102 +-9.079173596684074 4.949027381331151 0.102 +0.1431388611793234 0.2992360451958994 0.102 +1.598509302101065 0.7901412942380133 0.102 +1.436736808507252 0.8978082193220343 0.102 +2.772384029928864 3.348079182517669 0.102 +2.077294661822002 1.464863311523112 0.102 +-0.04701046877678752 -0.05511503176760194 0.102 +3.011061094647436 1.172873750338429 0.102 +1.222658907532557 -3.287911216192172 0.102 +1.695417144313179 0.923389830374561 0.102 +-0.1095921474767321 0.2823329905274962 0.102 +1.715085628311754 1.102226153002197 0.102 +0.7636296465003881 -0.07649311599870534 0.102 +3.975633713167402 1.030024897246611 0.102 +1.706992194885321 3.057618676936276 0.102 +-0.09616503654990793 0.6626757349089527 0.102 +4.564153477796779 0.6748571298946232 0.102 +4.345204716640544 -3.153767061411539 0.102 +0.0564556880438731 0.3608630475395637 0.102 +2.273201538829197 -0.308537263914608 0.102 +2.173806370045667 -0.2625642971376081 0.102 +0.01167106968381271 0.1439554068659226 0.102 +0.9403034562192659 0.2267058069744267 0.102 +0.2099132190387972 0.3012113418564452 0.102 +2.773475424308497 -0.059234538761926 0.102 +4.572395551521375 0.4189300698281964 0.102 +3.976826447272209 0.4248377967460615 0.102 +4.053447309660055 0.4264424258323565 0.102 +3.537858263576088 0.9751061146756352 0.102 +0.3341970704861619 0.2858541982009603 0.102 +0.399147407878955 0.2704151963335782 0.102 +-6.937087903608831 -5.259730573332032 0.102 +3.527690438285621 -2.555651182082451 0.102 +0.222961233065847 0.7692113319499981 0.102 +4.08229657479184 0.6562098588512902 0.102 +3.365708099329813 -0.03509297942145686 0.102 +1.076083421363175 0.5986125514218522 0.102 +0.7966452729335289 0.2080335005476572 0.102 +2.870401863461716 -0.2015040916559531 0.102 +18.55619916480617 1.753050005139899 0.102 +7.227423349722627 -1.277581834718821 0.102 +-0.1409993484272377 0.5030605825983656 0.102 +2.691285211956015 1.900837552231647 0.102 +2.824913573882655 0.2515542997117159 0.102 +0.24329383425416 0.1981140437165191 0.102 +3.310535398301742 0.8634044287191951 0.102 +3.704042101580082 -0.02682616317125796 0.102 +0.02083779937872367 0.7533133195945592 0.102 +7.157396090317134 5.461888430232446 0.102 +-6.90902828832728 8.63675649185998 0.102 +2.811535217298311 0.6376583333473858 0.102 +2.441197248619818 0.5885772868668873 0.102 +1.171404265775272 0.8407233814646713 0.102 +10.95795190029371 7.263070638883065 0.102 +4.107587480270688 1.651173375764796 0.102 +0.3047134181709817 -0.04986948034415671 0.102 +2.352052620279658 -0.5682774551840342 0.102 +1.600384005353974 1.110930976359036 0.102 +3.00408142226222 0.6072981182276337 0.102 +1.123975500475538 0.3805819211737846 0.102 +3.135022687800062 -0.8316398558806688 0.102 +0.1098205736757257 0.2741257331422018 0.102 +0.07377343749499682 0.06864655686084807 0.102 +5.538711759087412 0.6795894049986128 0.102 +3.279458551893016 0.6928899668071908 0.102 +2.607385671727636 -2.412501287031538 0.102 +1.14083699449442 0.5523785609558923 0.102 +7.506155948358166 0.3087220619367232 0.102 +-8.532270180990942 -7.115818785533156 0.102 +0.7057462668182128 -0.5071718377126113 0.102 +0.7979521172622774 0.02599527684281112 0.102 +0.2274894990464713 -0.2566350338094208 0.102 +4.698814197673271 -0.7778206823966978 0.102 +4.657175826366347 -1.086738357311388 0.102 +0.8954250326991376 0.7512272413877497 0.102 +8.647654823070134 8.848187442036458 0.102 +1.843853245928442 0.2047041013825436 0.102 +10.2756432230136 1.066854966832745 0.102 +0.6560052012431141 0.2287593692559383 0.102 +15.69309565476478 3.247003172986346 0.102 +0.8848685983465832 -0.07215427551149109 0.102 +0.8994080604401686 -0.1199049557862984 0.102 +0.9309725970992576 -0.139093134121041 0.102 +1.433055240539219 1.167450583500043 0.102 +2.611753170078909 0.3777283333515154 0.102 +1.98820392787496 0.3989790479924019 0.102 +2.45256669911959 -0.2354189981848506 0.102 +2.849536954470446 0.3615448898562587 0.102 +0.8088724410751471 -0.09234787872149253 0.102 +1.01876983929663 -0.3758549974095974 0.102 +4.309341422618008 0.5038026942319085 0.102 +0.8345294927637049 0.4910280537720081 0.102 +0.6444555158497693 0.06264349800843752 0.102 +2.129406509584879 0.7881110745084852 0.102 +0.07524271776160241 -0.4671473341263537 0.102 +2.720010302585718 0.102459125522707 0.102 +0.8465779256895763 0.1789953354549754 0.102 +0.08239393177637819 0.3142553804055803 0.102 +3.716447901315542 1.177096997759426 0.102 +8.808651229484754 1.470268429791586 0.102 +0.07778349759089967 0.8923991067502524 0.102 +3.418873463027559 0.2552777349503222 0.102 +0.1034912085165073 -0.1233240530462745 0.102 +5.506801414958638 -0.02688877765807064 0.102 +2.0579217907482 0.6715688911719935 0.102 +0.1170202345603345 0.9477716818644681 0.102 +3.972588880805548 -0.001284914767295959 0.102 +2.463888956521933 0.4521000943525904 0.102 +11.91232692106796 -3.960815520984757 0.102 +0.1507958062361596 0.9953131205768713 0.102 +0.07423139461633743 0.728716305832232 0.102 +-4.600291614791531 1.095832678647493 0.102 +0.5441863787915655 0.04522738954281338 0.102 +2.698698420406886 0.3606589206378588 0.102 +2.036083661119695 0.5061723473781032 0.102 +-0.1197266916257326 -0.1486160214825683 0.102 +1.983555799473675 0.8929138254878782 0.102 +1.080737130172945 1.117246768334351 0.102 +3.576368632012724 -0.2577819000198922 0.102 +0.583882995916873 0.002418173639772113 0.102 +0.3910666618892163 -0.1247423202964995 0.102 +3.322939330920671 1.616913202744754 0.102 +3.829391654089304 0.3572568710536465 0.102 +0.8024631434530087 0.4638822837083322 0.102 +-4.021233217650055 -4.881137888062975 0.102 +2.549875912989206 0.8383696540325295 0.102 +-0.0573384311107983 1.044118140120752 0.102 +1.192996158914254 2.438730280070367 0.102 +-0.07422995858574609 0.1257176860792869 0.102 +2.561297574159695 -0.06536842140395616 0.102 +2.205645496835844 0.6286217015963467 0.102 +1.836606519551759 -0.5170677989365616 0.102 +7.976654826050311 -6.576206954044835 0.102 +-0.1077431810253512 0.9900082418663598 0.102 +2.216263125248199 0.04506763538858317 0.102 +2.274621845558767 0.1390639907689313 0.102 +8.078119756327197 7.001084448934379 0.102 +6.390471076109172 4.229528723511261 0.102 +4.053738506280697 -0.2120861637563042 0.102 +2.876430513125451 -0.06193077136089523 0.102 +-0.9163264642450334 3.770419776371124 0.102 +2.294169916538022 -0.1085567534248991 0.102 +1.756989170712777 1.534805205664463 0.102 +0.4760215258185586 -0.06957936099140646 0.102 +0.08838805533245324 0.933747769392432 0.102 +0.4116756150201494 2.437682630177095 0.102 +0.114256079774139 0.9917911681456787 0.102 +4.212482276196911 0.8229859121579015 0.102 +0.7818313013233175 0.10188502567661 0.102 +0.8520406499319974 1.137363420811144 0.102 +1.754950616364096 -0.01149718298360021 0.102 +8.335655525915213 -0.7137389659953379 0.102 +9.42338019643503 -0.9281051266002136 0.102 +4.778308451182659 2.321377397333774 0.102 +0.5196892371433504 0.1327458988302782 0.102 +0.05151024790629837 0.1374297256750632 0.102 +4.003577698892448 1.114601600251464 0.102 +1.858830784704252 0.3186958050952117 0.102 +4.478262528547448 0.5419407051844729 0.102 +2.471868009578501 0.8348065984556132 0.102 +1.420568272771647 -0.02869179038791184 0.102 +0.1435983005072514 0.6833193172256277 0.102 +-2.294407631801676 0.6281662523021617 0.102 +2.26668014993825 0.4001166313933679 0.102 +1.888692894539394 0.09698391914478618 0.102 +18.77485885888504 -0.4574202248208545 0.102 +14.32896052654207 4.543890881117773 0.102 +3.706775286166087 -0.142413078726484 0.102 +2.004733927256451 -1.099212054336636 0.102 +1.663434287210853 -0.03048956332592886 0.102 +4.322228377494606 0.1073099798174515 0.102 +2.885700584316905 5.309288061770789 0.102 +2.951950196541309 0.4850967357912629 0.102 +4.374107336567844 -0.4473520279789311 0.102 +3.163174843994554 0.6735488230318837 0.102 +18.39935821116038 8.819918796828613 0.102 +1.506834676695919 -0.1269843581262955 0.102 +3.955884919223427 1.517434446421946 0.102 +1.430314928713199 0.4979517980667115 0.102 +-0.1403954169285577 0.6251095307416438 0.102 +-0.1330678077039541 -7.374591037017708 0.102 +-0.06954515310034921 0.8998462364732579 0.102 +2.385471242756622 2.029808890197279 0.102 +1.789693645658925 0.05713362318199238 0.102 +-2.134806866512697 -6.743702149963386 0.102 +2.393475022392963 0.2319711457322413 0.102 +3.515656635112242 1.046785681743151 0.102 +0.02693902058912954 -1.037254256236084 0.102 +0.4903486783261886 -0.1208647464030579 0.102 +0.450356923491031 -0.1679851903730172 0.102 +0.4329341492323227 -0.2254296525882081 0.102 +0.8181357391790303 -0.1309588285530715 0.102 +-0.05325765279696354 0.1445783548757144 0.102 +0.1401394726766035 0.8442747276552991 0.102 +-8.508778486043147 6.73229960732881 0.102 +-0.1277858074047348 0.7828407514326617 0.102 +-8.477808572602193 8.500491431818837 0.102 +-0.06730661815326101 1.005755199027713 0.102 +4.958950346068173 7.034657186629697 0.102 +0.1156568158492961 0.3881272217105695 0.102 +0.211553338801212 0.3565264689383658 0.102 +0.8063634542577656 0.2895465004906883 0.102 +0.6470248386920597 0.009951230950740951 0.102 +1.45721243320981 -8.753375979762577 0.102 +3.758250608962962 0.4347887352206275 0.102 +3.579418109539794 2.321921860915418 0.102 +0.9737100951333315 1.139408027109056 0.102 +8.963650642633961 2.390381711063897 0.102 +-5.513339173739405 -1.043843062043333 0.102 +4.31885477996471 4.32957031737121 0.102 +15.62302104323294 0.7753092550977299 0.102 +9.151885630570197 -6.625934907162693 0.102 +1.839660072534854 0.5799542683731472 0.102 +-5.174965780229613 -6.706059635250174 0.102 +0.9147469543321721 0.6632458086238798 0.102 +14.81281839346224 9.105045538677755 0.102 +0.7808947827900204 0.8659207485396537 0.102 +0.07308330205395114 0.5198790445339855 0.102 +1.095490013139303 0.4106766722044185 0.102 +1.115502281044137 0.4532510242366365 0.102 +3.092292459858895 0.5038846543823753 0.102 +-0.2464389130827981 0.5535097458982829 0.102 +3.72013836050863 -6.372659900924077 0.102 +0.1252880442264057 -0.03116088172393906 0.102 +-0.258632660012671 -0.1390646098156773 0.102 +1.093493104271692 3.105036942563427 0.102 +9.369213839334375 4.615445170313 0.102 +1.612297664329284 -0.7829706864026086 0.102 +2.475803803542663 0.9617312778341021 0.102 +0.0049345009859168 0.07740193513267092 0.102 +0.08387387498643811 0.2394590926388323 0.102 +0.0858231305957933 0.7778904601445036 0.102 +-0.1526638589703385 0.437831552601693 0.102 +-0.1528685429690753 0.4700596038791449 0.102 +3.646487690409794 -0.7135159778948811 0.102 +2.648339192718336 1.077820148161387 0.102 +2.867772352841472 1.268260627867545 0.102 +0.4862588128828645 0.07141791971203591 0.102 +3.760076622934633 3.113157069412225 0.102 +6.305639293551526 -2.651731164957837 0.102 +1.625832534156999 0.1384651645680529 0.102 +0.9037775081491231 -0.3316391567286103 0.102 +0.02579641824351393 0.119885918951136 0.102 +0.1750737831979176 0.9043037785473585 0.102 +0.2198122142111708 0.458149971170646 0.102 +1.069710584528195 -0.9511826640943808 0.102 +1.07869581977594 0.1305731003489375 0.102 +0.009228217846738865 0.03776135531946626 0.102 +3.68501328612592 1.557776453031974 0.102 +0.5842556042824472 0.02939720175019245 0.102 +-0.9343163581291798 -1.410686907110179 0.102 +3.204276011616312 -0.448747341714425 0.102 +1.259596772734346 0.1884359067250415 0.102 +1.076214751828096 0.9642737648546089 0.102 +0.1040638850112229 3.142742325917115 0.102 +0.003944738718325887 0.1716712976430363 0.102 +0.1726528270784032 -0.01929260579649044 0.102 +0.6078838115205959 -0.06886301964306868 0.102 +1.829049312384779 -0.1652431900797177 0.102 +-4.809011412838701 6.886934360033298 0.102 +0.7074098848909199 -0.01016718380412453 0.102 +0.7588331659460976 1.154910227018142 0.102 +-4.134171713767011 3.773279190754464 0.102 +3.766840359481972 0.08728929531007466 0.102 +-0.02288307812657009 1.145373301266487 0.102 +3.613153466241 -0.3215063934202074 0.102 +5.988260028967236 -0.9836818077646048 0.102 +2.200430112421274 2.380667863884326 0.102 +-7.159071127966816 1.980983700000972 0.102 +5.132902899665972 1.368295995755352 0.102 +17.27287840484848 -0.5719373039505038 0.102 +4.572988904467905 1.514437297001805 0.102 +3.370302466619445 0.986787920391662 0.102 +-0.07164673464800103 0.3907891740596569 0.102 +1.382320119080159 2.371674475152178 0.102 +4.780872428785203 8.986570757493622 0.102 +0.3291564609677861 0.08882658473841927 0.102 +-3.093312272683506 -3.06195414669849 0.102 +0.132506570337072 0.07486945672312108 0.102 +-0.1467540739977832 0.5535046328263986 0.102 +1.105822828712903 4.110413918614207 0.102 +0.2432928567588123 0.9925219031747201 0.102 +4.14055791822791 0.5035045583312373 0.102 +-0.1159421860941776 0.7038603357076085 0.102 +2.167050859448653 -0.08722190554688654 0.102 +-0.6605579635898478 5.71772990790663 0.102 +1.451574113995184 1.208062097639363 0.102 +5.316865937666648 -1.241635080599139 0.102 +5.365642457714056 -1.485098735902821 0.102 +1.009607402354129 0.1361195061166632 0.102 +3.066784769955076 1.069648165650152 0.102 +1.102085674203523 0.8675186229456808 0.102 +1.132096365765127 0.8593367533438228 0.102 +-0.4012631851968769 2.836735189836059 0.102 +1.006666621770162 0.0785417657775675 0.102 +18.3478758444762 -2.303427308071874 0.102 +0.11794193520535 1.050809357620107 0.102 +0.8472681251424561 0.3294061029380581 0.102 +0.7361306078848358 0.300500339021985 0.102 +-0.08672916834752614 1.060317592169496 0.102 +1.74733770209569 0.8533471395648931 0.102 +0.3601264606422262 -0.01777089718421692 0.102 +3.047206142900687 0.8149117475583166 0.102 +0.2853459108066799 0.8540771934379947 0.102 +0.1582793444386992 0.09234452726080705 0.102 +4.638865572755668 1.177344811097419 0.102 +0.07442773303268399 0.1675034126500341 0.102 +1.010764546452972 0.9871220949052386 0.102 +2.736008525732494 -0.1655027896484928 0.102 +-8.458404123124547 1.156324578629342 0.102 +0.2506703028538199 0.09910763929519496 0.102 +1.902491584099176 0.7495833127893857 0.102 +3.30463447434209 1.364078860937723 0.102 +0.358769457729582 1.212088977366963 0.102 +1.410223214421436 1.662554493837044 0.102 +1.521913052304905 1.753423908417415 0.102 +-1.796872615317226 6.993836679127763 0.102 +0.1521318783496501 0.1791054778336886 0.102 +0.3112729752887901 0.9420084579555527 0.102 +2.745755504248336 0.4631077927578691 0.102 +0.8448960380958077 -0.04243620121505232 0.102 +0.9641243362894388 0.115024886364604 0.102 +0.6256508811834107 0.1137779248324037 0.102 +0.2445666376526894 1.160892085355809 0.102 +3.724254020293206 0.6817434791508687 0.102 +1.297607527693624 0.05962946948321882 0.102 +3.639270754306635 2.692382978551386 0.102 +1.611174085702104 0.2805250963213708 0.102 +0.2926289845494956 0.3737191792403081 0.102 +0.5665281112988668 -0.07101996211909917 0.102 +-0.1420433786609074 0.3241743856342613 0.102 +2.799758742584411 1.524938892289032 0.102 +0.6414570060426642 1.222720348631222 0.102 +2.959810512869824 0.693779859761432 0.102 +11.21447453307324 -4.809292845952656 0.102 +2.118437233760821 1.130143961588407 0.102 +1.583937092639925 1.250914150220217 0.102 +3.848299704795708 -0.1582873551558372 0.102 +3.132204419480523 0.1800135494065324 0.102 +0.3153282401451036 0.8051338043871766 0.102 +1.002451713822786 1.033053321616521 0.102 +0.9181115003023105 0.06917193691738333 0.102 +5.423221774194125 -3.347049776058564 0.102 +3.460219729501123 0.365957013847052 0.102 +-0.06962722169674572 0.0807038040849057 0.102 +1.559935205125713 0.5233195931393236 0.102 +0.02979967182591976 0.4205273200970327 0.102 +3.161634139521591 0.8555324950818238 0.102 +1.656098489114811 0.5625972128898284 0.102 +-0.1178925016858269 0.8496365687503581 0.102 +1.404986051635311 -0.1963555909349254 0.102 +17.17112126692517 7.652551950080065 0.102 +0.07181736032943101 -2.733396923487588 0.102 +0.6984660903859624 -2.624676124327714 0.102 +0.05608877090220799 0.02678827485872166 0.102 +2.573200625690513 7.266906372626115 0.102 +2.377709550096502 1.029678251369472 0.102 +-0.1424227807650882 0.9129743462169535 0.102 +0.9883935139778741 0.9175748179679974 0.102 +2.851330774816196 0.118263655349439 0.102 +-0.0683283292153461 -0.1282524315235968 0.102 +7.773029896012814 -2.483308276940873 0.102 +0.4787951123543576 1.274826304827564 0.102 +0.7124037662157003 -0.06410692533907583 0.102 +1.030767583511254 0.2131293910417856 0.102 +1.161465048272322 1.184490430998765 0.102 +0.1454535702043719 1.103425168303718 0.102 +2.13096315405369 0.163435001547092 0.102 +0.2117905877062789 0.009951698059438302 0.102 +3.972164990687159 1.175773285883986 0.102 +5.752991176320509 6.132489626785756 0.102 +9.020273374648164 -3.776666175337721 0.102 +5.029787337126852 1.800394563267616 0.102 +4.5088740491463 1.016417821535782 0.102 +1.194303068279116 0.9838853653063754 0.102 +0.5714057159516217 0.0930350714754459 0.102 +4.31896572930741 2.770757911597003 0.102 +8.229734500927401 -9.113062659128451 0.102 +0.08763941270003439 0.03664457733091579 0.102 +16.32674224214815 5.24441899187581 0.102 +4.050200069458363 1.328084720965059 0.102 +18.06733690788482 -9.082560100558654 0.102 +1.01408950700772 0.5077521413543864 0.102 +9.070466516843801 1.068224995101652 0.102 +-6.69299467061216 7.446253842419472 0.102 +-0.1954328404811053 0.7207888731024032 0.102 +-0.03170958614652774 0.09085609215104713 0.102 +2.746927010816142 0.9599460201293565 0.102 +0.3791641247337094 -0.01082053965401426 0.102 +4.307943065509821 -0.1160008942543948 0.102 +0.6856262802359324 0.2630583998324932 0.102 +16.97202972027194 -4.208675579654243 0.102 +18.39700275798727 5.020146427401587 0.102 +-8.501369211592262 -8.640739041357433 0.102 +2.004174446763293 0.09149475594662775 0.102 +0.9979359213943476 0.1853074762165835 0.102 +6.20486828011112 0.337821637597943 0.102 +2.381633607307365 1.278988607468672 0.102 +0.2277370276923405 0.4139316611702551 0.102 +-0.9411580535481847 8.835406033249351 0.102 +2.193753168455655 0.5377108222928014 0.102 +3.960873342445424 0.07763425710528653 0.102 +3.838240464635621 1.136380717073498 0.102 +0.13335933505085 1.083056353405565 0.102 +1.032696544546045 0.6116805557338456 0.102 +7.219984739331464 1.67861204700034 0.102 +4.448951624888161 -0.2954825651377224 0.102 +-0.02439736029553958 0.3131582185401092 0.102 +0.4887237536148485 -0.02214805129761333 0.102 +0.3660747198214513 -0.1498141878040029 0.102 +0.7427454015613459 -0.02597680265306331 0.102 +-0.06530888276066091 0.4271256529522723 0.102 +3.521282842347925 1.418900453554499 0.102 +0.3799350672057012 -0.07262583811503485 0.102 +1.069909060757843 0.5331033481507815 0.102 +0.6555332619920796 0.1694411072061881 0.102 +1.106168025890781 0.04410889559972923 0.102 +0.5409449043032911 0.0730840970473965 0.102 +0.7395726030838741 -0.06387882094952976 0.102 +0.9609979483621254 0.6219382282557234 0.102 +6.129651239619744 -0.1651963545868665 0.102 +1.085018446923471 0.6566915890892717 0.102 +1.106375139709266 0.6941990297279115 0.102 +0.6799490250097093 -0.05371230068472921 0.102 +3.550174207777854 0.8234668199209982 0.102 +0.7852064030503796 1.645247611341367 0.102 +4.838408605704124 0.2695386201195854 0.102 +0.7915960220138774 -0.03416824488950009 0.102 +0.9942269369677574 -0.08679086595043539 0.102 +0.05008436387525525 0.2620998161883235 0.102 +1.133022264947505 0.3041327229670338 0.102 +1.23586658511704 0.8005132504227727 0.102 +0.3624499385414289 0.1261726984107343 0.102 +1.053844488140469 0.4518195429635878 0.102 +-0.3432737566882585 0.2313823419903644 0.102 +1.838862849603315 0.4127481454786903 0.102 +0.0258314056493 0.8970150358863136 0.102 +-0.07876885676130056 0.8774516322372784 0.102 +0.432020987738739 -0.1244513095720868 0.102 +1.097568675835786 0.6208084126426043 0.102 +2.589111981150484 -0.1445644729170801 0.102 +1.169356937752867 0.02722316567646424 0.102 +1.617075252512566 0.4155113147028059 0.102 +1.113442996665048 0.927196188283801 0.102 +-0.1301556075053555 1.022411461858739 0.102 +0.9230267561263192 0.4759390551705369 0.102 +4.219585961631903 2.132567117660415 0.102 +0.9995748076899993 0.4564140058962134 0.102 +1.786241762117928 1.146872338288513 0.102 +0.1250526657254346 0.7171518913758171 0.102 +3.900501893768602 0.774189785222254 0.102 +1.670696539556932 0.651414990980743 0.102 +0.122096778056495 0.1261180704067594 0.102 +1.103614496688372 0.5609428740297038 0.102 +1.638090189027489 -0.4661703652453307 0.102 +3.175564283772456 -0.2330967106994878 0.102 +-0.2279713604530995 1.828992102992892 0.102 +3.025092059648674 -0.04631500529451642 0.102 +19.06534140233368 7.001918126262076 0.102 +0.08561178199307504 1.316084996041511 0.102 +0.0363308753277931 1.071430541297524 0.102 +11.4301223611084 -1.929566992881284 0.102 +-0.1521711817671384 0.08251606820982989 0.102 +-9.089028673767697 3.024997100301494 0.102 +0.09428275736989926 0.08204914807126323 0.102 +3.433173754673323 -0.1168454643996007 0.102 +0.3181588991430486 0.3383741256979128 0.102 +0.7721487744859807 0.1657323356146154 0.102 +1.795221561590693 -2.437981158913304 0.102 +-0.1141737046633597 0.7319343455366298 0.102 +-0.102311376313458 0.7633934128057548 0.102 +0.08924813919363153 0.847754468191793 0.102 +0.3034035314927372 0.4453452138325235 0.102 +-0.03589565256741568 0.3543666288645114 0.102 +3.873977936076091 0.1830239437840211 0.102 +1.662974204582117 -6.497146005749966 0.102 +0.8724411680130985 0.06136567568552823 0.102 +-4.897510789595394 8.868296492710968 0.102 +1.101291113950713 0.7316417641571338 0.102 +0.1238913632373333 0.8839093716835805 0.102 +0.227472761438168 0.947364709935164 0.102 +17.1345523752351 3.187672429319508 0.102 +-0.006198234475187353 -0.000449059101541656 0.102 +0.4797608413978594 0.193525659797623 0.102 +1.076376919443048 0.08506472746897349 0.102 +12.458828677057 -8.754295860175562 0.102 +-0.1839931994860625 1.007703396574963 0.102 +1.02960084546269 0.5574280652545731 0.102 +-0.163212992710462 0.2270011291744308 0.102 +0.04594648912431526 -0.001410330919827415 0.102 +1.870523946314727 3.830830227239666 0.102 +2.625220693716056 0.6266234224534952 0.102 +2.496339014444267 -0.07564795836302363 0.102 +2.640074668662151 0.02693369709847345 0.102 +1.073602567299524 0.8891083210179359 0.102 +0.4704274183626969 0.1201913998050855 0.102 +4.127699488954398 0.1844267507935075 0.102 +0.6843784445546004 0.2033207563716846 0.102 +0.8714319413215639 0.2277066303851443 0.102 +2.933688809973072 0.7626965520366137 0.102 +0.2573329437665508 0.3541228635262583 0.102 +4.119481717669155 -0.7462803167423244 0.102 +0.9484513096568784 -0.1121170235455449 0.102 +4.083466079980652 1.132037958251053 0.102 +1.353447151849019 0.6166261028194362 0.102 +1.333014289227639 0.6997493698452834 0.102 +2.867110908278439 1.594841666099358 0.102 +3.620354978080176 0.09437685924540817 0.102 +-0.5619576489855557 1.471715782216313 0.102 +1.069597660890015 -0.06619160041893174 0.102 +0.8225109140253303 0.7412798034876651 0.102 +3.50587782185451 0.4528051743825706 0.102 +3.763003519530573 -3.89873031695127 0.102 +-2.928071853889662 -0.9846007791445094 0.102 +0.3391234273065936 0.351995614676214 0.102 +-0.0622383971806078 -0.07531793956682629 0.102 +0.05649804706333197 0.4611572974734169 0.102 +0.8025658999968688 -0.06981679282749036 0.102 +0.1907767738697914 0.8413317942954592 0.102 +0.4028691542200549 1.122636196400696 0.102 +0.8278477382541081 0.9249540760366748 0.102 +0.8628310940897781 -0.02468974048912451 0.102 +0.177380281463637 0.4197370069981897 0.102 +0.2902618963853335 0.7959111444124343 0.102 +5.523812067361004 0.3629828928612489 0.102 +0.536989002708111 0.3015213836446123 0.102 +0.3791947397444351 0.2429475054222451 0.102 +0.6599886237913184 -0.08964865223774128 0.102 +1.020117754683893 0.1553249024463913 0.102 +-0.2714249695150477 1.223012899296078 0.102 +-0.0949325098818803 0.9577851679446401 0.102 +4.140254376256892 1.017986507874571 0.102 +2.552724414601029 0.5540607641984664 0.102 +2.132789325441945 1.342238576210709 0.102 +3.394992163030105 -0.3472215772711406 0.102 +5.030496074112714 -0.684749409719198 0.102 +1.185064887070342 -0.1715902172044525 0.102 +0.008566135073397527 1.178807942870714 0.102 +0.9302897421320424 0.4383668631565659 0.102 +-2.248681754245752 -8.910068182673454 0.102 +0.7633219695652415 0.2493197878845796 0.102 +2.249380629489294 1.049423120739424 0.102 +-0.1128715554630765 1.179415398188402 0.102 +0.6680810240013202 0.7455478034950482 0.102 +6.653562219384739 8.658978107032661 0.102 +-1.895538244911479 1.51170036884523 0.102 +0.09967891584846714 0.120665068087365 0.102 +-0.04118320694882693 0.8457445729176769 0.102 +3.978102386470934 -0.1184620829727241 0.102 +3.444490398879676 0.04611583348968618 0.102 +11.70552997159733 3.623679290958752 0.102 +0.7720373429372313 0.4232405075180423 0.102 +0.01397322457446819 0.8210192693167411 0.102 +0.8677016407921224 0.5478408837744326 0.102 +-0.01166703011590611 0.2015558529681549 0.102 +0.03125153092898985 0.6476602488927542 0.102 +1.035816272818916 -0.5539946005315572 0.102 +3.690229250121268 0.4090038060607723 0.102 +0.4761641314822627 0.3147095605372359 0.102 +0.04198906964416949 0.7986154945733985 0.102 +3.662409844497797 -1.624991222717814 0.102 +0.9518617751415069 0.7353494250053682 0.102 +1.390814245051036 0.1716435805291146 0.102 +14.25313119027728 2.014149660570842 0.102 +0.3682606318727701 0.7398289174944398 0.102 +10.54380672773678 -7.485821502421951 0.102 +-0.05526087853872665 0.7368019350100895 0.102 +2.397362949148366 0.07939648332321539 0.102 +2.353204624162661 0.1545574686094459 0.102 +3.594190248084525 1.074047324582463 0.102 +0.02131649662154174 0.2273677008817847 0.102 +3.070299447945628 0.7586618019890338 0.102 +2.821062806761322 0.864279104940662 0.102 +0.9694099617712768 0.5641607562804938 0.102 +2.456401403980266 0.3549363612738444 0.102 +1.136296595841558 0.7432907421672882 0.102 +1.066795307009457 0.2887334012970036 0.102 +1.954529805362723 0.05158930260897202 0.102 +0.2888551906572803 0.01804967495902208 0.102 +0.7500529798604532 0.6456314431395591 0.102 +-0.1966093498877683 1.115146715493546 0.102 +3.152332968031565 1.043839934852607 0.102 +0.1182443284828277 3.64610148058887 0.102 +0.4016352219354131 0.08419159005882604 0.102 +0.4306209456813545 0.08822488160588916 0.102 +-0.01324351291664158 0.1299641097877023 0.102 +-0.280860466986591 0.09427614357602811 0.102 +7.510965049514015 -5.942479906549788 0.102 +-0.02700866735944823 0.8972826437583751 0.102 +2.679774622462805 0.75306769065864 0.102 +0.442625355707605 0.0343960318743764 0.102 +3.573913680411063 1.600112860341606 0.102 +2.717422343841191 1.221380643546162 0.102 +3.104570376240498 1.437302248686865 0.102 +1.876193536952739 0.4388397989157205 0.102 +0.1526672700599503 0.2351015540900229 0.102 +0.1879585877202468 0.2095913830684932 0.102 +3.203425909274579 1.10958668819671 0.102 +1.292883830244974 1.153553908726761 0.102 +1.293979410088293 1.236609744326972 0.102 +-0.09744869996955303 0.3799838021979333 0.102 +-0.09129882935837146 0.3545690189478811 0.102 +0.2859520232028563 0.0652937770187525 0.102 +1.9798451692424 -0.1546068401624337 0.102 +0.2819471305458052 0.9472403105802899 0.102 +0.2033824592471612 0.1300812762538327 0.102 +0.2498215778955682 0.6301027150200044 0.102 +0.1763165942402152 0.8574241961783711 0.102 +-7.20021191213088 -0.3066571214669257 0.102 +0.6651592827668262 0.3928829497309416 0.102 +2.372973510801723 1.106030044595994 0.102 +3.120967123631347 -0.03849545055808173 0.102 +2.106323100999572 0.8407901149836751 0.102 +1.335280805743831 0.9559538348228862 0.102 +2.940562340540467 0.03254617908385803 0.102 +1.115124827341668 0.9641694350163494 0.102 +6.478235401086362 -4.144681968721978 0.102 +11.55683545335532 2.251168058010475 0.102 +0.7218043303591273 0.2186629551980287 0.102 +2.935969459693196 1.334046492117237 0.102 +0.8377515302822197 0.8501643676669274 0.102 +0.01014793977999139 0.68640968386231 0.102 +1.047976835228693 0.9937748363632177 0.102 +1.06885826739451 -1.295669848794873 0.102 +0.3930613063794132 0.3229612465852453 0.102 +1.483964772446767 -0.05257802375855034 0.102 +-1.188308947987982 -0.4011898949967317 0.102 +0.4186735999596238 0.1365269904964183 0.102 +-4.166654648429582 -8.731402074812753 0.102 +4.286565723637103 0.4029704555735201 0.102 +-0.03682184531483801 1.022815722726771 0.102 +1.07998369790665 -0.00574798932780812 0.102 +0.307830721965896 0.7515175331443024 0.102 +1.05347351513402 0.9404981014226064 0.102 +2.299583896077073 0.01618092810708827 0.102 +0.2463589143289147 0.2507918588652284 0.102 +4.4022965604486 -0.5840574064796294 0.102 +0.1178379874929389 0.4781656612322511 0.102 +3.264529358887738 0.2142672921086084 0.102 +-1.199379671356919 -4.005826602022222 0.102 +2.162067817551287 -0.4698564222701359 0.102 +0.3402744422652914 0.6997603248148009 0.102 +14.21515598875796 -8.953494909193015 0.102 +2.07466267503092 1.56725163698059 0.102 +3.014107433337745 0.03265585238149932 0.102 +3.682375673506658 0.3118709257892317 0.102 +15.51516301053081 7.370405066658364 0.102 +18.76326655119191 -4.089790656360871 0.102 +0.9738210150178563 0.6932504176987622 0.102 +-1.640190051039084 -1.316356863801343 0.102 +-1.758702564822201 -0.9375236158388921 0.102 +-1.009321726389485 1.385739932153232 0.102 +0.8610429764759906 0.8025826701661398 0.102 +0.7611165398960137 0.2314177608501332 0.102 +0.2371338556015199 -0.03757009201875584 0.102 +13.54938930695243 -1.705752530514111 0.102 +14.03684816005437 -2.701972069154135 0.102 +0.1800081416829916 1.178510053345477 0.102 +4.334327919257164 1.271728933950043 0.102 +0.9289299521247596 0.2466907838459549 0.102 +10.7227513544533 0.04469426618755323 0.102 +0.8290632615674673 0.01064333254217359 0.102 +2.458278640045799 -0.9217993540350913 0.102 +3.319130048074469 0.5760423610538512 0.102 +3.381838018062533 0.6048302348455104 0.102 +6.107888341146379 1.105890282793254 0.102 +0.1743376480099807 -4.684624621300864 0.102 +0.7245196745420026 0.4274684644268779 0.102 +0.7327709662567685 0.460938993289395 0.102 +0.804224290349813 0.7073894771521666 0.102 +0.6724864487543998 0.1219607483605838 0.102 +0.9432693612515113 -0.1770125416657604 0.102 +0.9069265577311397 -0.2406022374679797 0.102 +3.49299063795257 0.007728526617284699 0.102 +-9.145598731456156 -3.189764252353787 0.102 +0.8210722886084197 0.2552495625180969 0.102 +-0.08836061603321604 0.01542963718491409 0.102 +0.0847623070589892 1.072481987100319 0.102 +1.097617587186248 -0.1172598308939332 0.102 +4.288151304713328 0.7184224658092517 0.102 +0.005778717131926229 0.5691318346823062 0.102 +3.567074503212757 -0.1272941326184948 0.102 +1.465594664568167 0.8254926880070831 0.102 +1.095584688338691 0.1373292883255614 0.102 +-0.8371254679798423 0.5873269671075014 0.102 +-0.355009029130808 1.007881298986574 0.102 +-5.315665718409227 -2.521161687951865 0.102 +0.442184447111228 1.063656053995802 0.102 +3.578878955134863 1.204492153864775 0.102 +2.032971683808952 -0.7079025511246766 0.102 +2.084112938660857 0.03124534186965309 0.102 +-0.1340151661524997 0.4059106017310402 0.102 +1.11849054423885 0.6150670377689207 0.102 +3.572259621843795 3.542965174245261 0.102 +-7.508840253816642 -7.15524761401841 0.102 +0.08159727876217818 -0.2283819511676762 0.102 +5.965745744360772 3.017284883791044 0.102 +0.05405435855337403 0.8951519617623099 0.102 +-7.632077883635701 7.052953970198875 0.102 +0.1291308930725225 -0.05911892022223771 0.102 +-0.1078302648775572 -0.06791243886214512 0.102 +0.2042350331570014 0.2575270761351635 0.102 +-0.186350283639686 -0.1355062914355052 0.102 +1.089633787234486 0.4791424648089747 0.102 +0.04768701694638992 -0.08912230070998632 0.102 +0.04535890683298231 -0.1200849888082171 0.102 +2.337216855822444 1.160777935191008 0.102 +2.24037716086565 1.193495322961195 0.102 +-0.9149071563374825 3.255255412788642 0.102 +0.4086735726768957 -0.05094986513647608 0.102 +1.756678374844929 1.691522470479819 0.102 +0.4679769110330222 0.3517718391063654 0.102 +0.3828616610010578 0.1718916201122353 0.102 +2.202316789367062 0.7550461225788724 0.102 +6.71349450039603 -1.440514806242367 0.102 +0.4080377815292987 0.5368451203914868 0.102 +-0.001961868270944666 0.7957194817514418 0.102 +1.072784821314534 -0.2825475931483747 0.102 +2.905761970306696 -0.1454454216229437 0.102 +0.1934454525418454 -0.1035457327326153 0.102 +0.5848784592243748 0.1399597321092157 0.102 +2.530009100697292 0.04200593277192135 0.102 +0.7212008236207655 0.1336599566298406 0.102 +4.159208239287813 1.190542331801884 0.102 +0.8667910405554382 0.6511501552795522 0.102 +0.9393650055475341 1.163404834716177 0.102 +1.442614158564647 0.6205559981169406 0.102 +1.581893646792831 2.801398101463843 0.102 +-0.03327451214370362 0.2765154692000633 0.102 +0.5539409273307665 -0.04348758918729732 0.102 +0.1125880641691097 0.6670670522344712 0.102 +1.133165441564416 1.071105218808603 0.102 +1.007733013115085 0.286675313347251 0.102 +3.351681620748839 -1.811839066489703 0.102 +0.7272764212917509 1.169761540631802 0.102 +0.7096345313643948 0.2474241318653631 0.102 +0.1284319740084309 -0.1256685843824061 0.102 +0.2728469062668561 0.9016433313803308 0.102 +0.2361447719458401 0.01651510182039855 0.102 +0.6888739844379305 2.488743028396852 0.102 +1.045261522017888 -0.07450418949669996 0.102 +0.2032965421735321 0.9858917471792714 0.102 +0.2185816195884142 0.3366516346426266 0.102 +17.46411803182955 -2.341081899737752 0.102 +0.02921056039717299 1.143448136711142 0.102 +0.03695236423564827 0.6782837384056291 0.102 +2.675944415320773 -0.01523916601351776 0.102 +11.07576671607714 9.104703674955445 0.102 +3.530523956487237 0.2072062546187463 0.102 +1.921536298539283 -0.6166620457152046 0.102 +0.4934828627552688 1.006892621776757 0.102 +1.204452566260945 0.6183292482139346 0.102 +0.06555735917249836 0.9853970567027026 0.102 +2.45136740324621 0.7871787174047018 0.102 +-0.1770514597474498 -1.773081855399414 0.102 +2.722204443460362 0.2959152889842486 0.102 +3.010050116938101 -0.2831375887174507 0.102 +0.2821376823724767 0.4238402738407534 0.102 +2.534358338554026 0.6985122624763684 0.102 +0.171830945455422 0.3201486720144001 0.102 +0.821135809446743 -0.02720038247619262 0.102 +0.2428270213245248 0.8246271603309658 0.102 +1.135872224789976 0.2068655828796444 0.102 +1.129378340641358 0.2533894381635303 0.102 +0.01204597848631628 0.36634587716456 0.102 +19.09355502415901 -7.082251952991026 0.102 +1.482346438950394 -0.333312049173336 0.102 +3.850332218787671 0.1182367703604779 0.102 +0.06048952801111523 0.6589438187369595 0.102 +0.5914442479117271 -0.2977542821324381 0.102 +0.2750545541730346 1.055245306395559 0.102 +3.692558967067942 0.8332442219405798 0.102 +0.4557866277634462 1.16016717329403 0.102 +0.2955779807727067 0.101373130097367 0.102 +0.943439262167181 0.7022732105402651 0.102 +2.77461224902001 0.04904268149647496 0.102 +16.99214475223032 -7.498576259654126 0.102 +0.4185732035661768 0.671805177608309 0.102 +0.05265145857954538 0.8542025915439123 0.102 +0.8734438590974734 -0.1489427766081713 0.102 +-2.22227895519502 3.627373509892029 0.102 +0.01085836405538256 0.8484619530696558 0.102 +0.489333056334335 0.1541675100594304 0.102 +0.2452106989819354 0.461108425923335 0.102 +0.754370694123489 0.09349589123675317 0.102 +1.301693809520356 2.008548308925289 0.102 +1.653251829193063 1.285181235102819 0.102 +2.154524627537794 1.060366085193329 0.102 +3.314734996376977 1.006236904852273 0.102 +2.900188219623692 1.118963229885744 0.102 +0.6593944339344805 3.283764699568919 0.102 +5.491668354651178 -0.4303619729166026 0.102 +-0.07656973421203034 0.7713704778081159 0.102 +2.482266195859062 2.656399399288272 0.102 +1.012674782157274 1.085292317657729 0.102 +0.8242272977752695 0.3261386463514681 0.102 +0.2853587805331372 -0.189343202908084 0.102 +1.104781930867099 0.5111829547112069 0.102 +1.120885545240844 0.521578949157488 0.102 +4.350345739640451 0.3205950908258561 0.102 +0.4641788695080083 0.01482270911149532 0.102 +0.8208156656478118 0.642437341288032 0.102 +0.8197860317132739 0.5617111589604987 0.102 +0.9395618926501634 -0.0672510787111827 0.102 +0.9358968172139746 -0.0441516772575199 0.102 +0.6004403048806817 0.01650167962786038 0.102 +-0.2551095388824996 -0.2457853981179079 0.102 +3.175264169454721 0.5709163389617909 0.102 +0.6866645162422167 1.339706068685797 0.102 +-0.08678158117844934 -0.02975548990126544 0.102 +11.33417427132101 -0.6140885221605632 0.102 +17.51584857162472 -6.18899354022081 0.102 +3.505085044239817 0.683525315430793 0.102 +3.580131503895568 0.7011300267769041 0.102 +0.2063973194452206 0.7382113825474579 0.102 +3.461998620180098 0.9372550624854487 0.102 +17.14534913767889 -9.131285688471621 0.102 +1.727845789156753 1.315845779068636 0.102 +1.807586487989811 1.344037320527967 0.102 +0.339093577916911 0.5803016742791488 0.102 +-2.557607208476997 2.667262679409418 0.102 +2.975653268386233 0.3816921585596961 0.102 +0.3733403114263394 0.7927365037358975 0.102 +0.6372667970190817 -0.02836509248058715 0.102 +0.4820926067837197 0.9517865655051254 0.102 +0.3579245896946361 0.0562521688295274 0.102 +-8.75529074481946 0.3442986683333947 0.102 +0.6798754566623652 0.1830657382901946 0.102 +0.4587893479284712 0.2706498965156429 0.102 +2.277816377483922 1.131699439436627 0.102 +0.8576555358352366 0.7003156470153575 0.102 +0.7401453863484718 0.03899758853479496 0.102 +2.913132100584632 0.2111294460066479 0.102 +0.9321405119872425 -0.02103979522823628 0.102 +2.335853069296609 0.6462933859456808 0.102 +0.2686224775254722 0.6875223222880872 0.102 +0.718912512958984 0.8310137336256412 0.102 +3.502901157875532 0.588836777700754 0.102 +2.058680189491543 -0.1208793475190274 0.102 +-0.0607258861269601 0.09309197193873295 0.102 +0.6670951491372032 0.07035447955435649 0.102 +0.0527105116327152 0.4088933572017129 0.102 +-0.6167903384920612 0.6742732435654595 0.102 +5.60641330986227 2.026735739385316 0.102 +10.66962120698838 -8.970800983724507 0.102 +3.397197484667455 0.1572562220986934 0.102 +0.08179351649319926 0.6384810437918969 0.102 +12.70843463524825 -7.82637649549977 0.102 +2.552659624813565 0.7671951120967287 0.102 +0.5593413225491672 0.1825635606211982 0.102 +5.468915047784696 4.085968362928549 0.102 +0.05105343195475845 0.5590085368964434 0.102 +0.1652721918243622 0.5774672490875227 0.102 +2.13812930749703 -1.384484299765213 0.102 +0.2640116211095803 0.5672430575598275 0.102 +3.145646285930092 0.0189960642653368 0.102 +3.203910183515696 -0.008083864699517282 0.102 +2.448343162388957 0.9133593981701186 0.102 +2.480066277262989 1.42575370049498 0.102 +0.1153827116999538 0.6427610933368115 0.102 +2.483934631507952 -0.3743414375154471 0.102 +1.567091688199889 0.7295423692331361 0.102 +-0.5343575603817223 0.174744961968661 0.102 +0.0643359487095556 0.5931393621449504 0.102 +0.739408371627754 0.2502797756878795 0.102 +-6.189064384720691 -7.455864757235176 0.102 +4.520537022366221 0.3121449395438711 0.102 +1.137894252702346 1.368358784528032 0.102 +0.4384706913862261 1.010752221617784 0.102 +-3.744704621966335 -6.094081169810138 0.102 +0.1249861662963048 0.6183435952407227 0.102 +0.1226372918370108 0.3382449685169315 0.102 +0.4496503874639555 0.4249970065392982 0.102 +0.4194633250756021 0.4119182055319648 0.102 +-0.06121164799467727 0.4861676439531016 0.102 +-0.08311556306885927 0.4718824936196632 0.102 +-0.01499426273430571 0.5424663267683829 0.102 +-1.01532677000881 -9.179913696018797 0.102 +-0.06295765202968119 -0.0324796358606255 0.102 +0.9798667002943178 0.483666072578834 0.102 +0.2557468554305902 -0.1114834065877056 0.102 +0.2928159453125938 -0.1265870838118519 0.102 +0.1604938905390175 -0.07636033646276243 0.102 +0.8477502009847158 0.4485367630290132 0.102 +0.7381019070142942 0.3248294103511205 0.102 +0.8937114331502474 0.3874337204239361 0.102 +1.012428190759876 0.03106754923667809 0.102 +0.3449047511989934 1.042582492652657 0.102 +0.4662619014298653 0.7962705053672706 0.102 +0.1042487708354533 1.032091108291279 0.102 +2.691039215330281 0.8913884241897629 0.102 +1.197972399514879 -0.2687457712411433 0.102 +1.271991559450219 -0.2911783157814329 0.102 +-3.662588731251354 5.557432811955307 0.102 +-4.037326260435868 -2.562408942638417 0.102 +0.183471127940459 0.1441093742253415 0.102 +0.1805985833848784 0.084250285411144 0.102 +0.1918018120521165 0.1075125402410025 0.102 +3.218235269340755 -9.070798722890986 0.102 +-0.04160060664416003 0.04403983442806644 0.102 +-7.211646801051075 3.037717093647709 0.102 +2.567509444082523 1.191676910527699 0.102 +2.175421051302453 2.666388062350173 0.102 +5.382200202952111 1.287131246534302 0.102 +1.188474774846265 1.090499771822115 0.102 +1.418748341679406 0.7176295383801528 0.102 +0.9723826660776368 -3.023677049759394 0.102 +0.4367415802787664 -0.02131127664961514 0.102 +0.8546352207049199 0.2727171394220134 0.102 +0.1008866186330979 0.8885021846791326 0.102 +0.758341482429336 -0.01854846078975033 0.102 +1.15527783684174 1.860657145616988 0.102 +2.721646353549817 0.4058779939741842 0.102 +1.147471520193096 0.511330920328613 0.102 +0.505649405798021 0.8383811847499879 0.102 +-0.1123746451310792 0.1857228806409821 0.102 +0.7307998565730319 0.5826581724122399 0.102 +3.506604314532126 0.1525895226459207 0.102 +4.100296701132763 -0.1523855590490669 0.102 +0.2102091606653054 0.499141345680735 0.102 +3.292364370977032 0.3391966761764995 0.102 +0.4040793715724504 0.4491580456926262 0.102 +-3.913912296696489 2.742431292788284 0.102 +0.2411403061872598 0.5683257344435348 0.102 +1.512911293860677 1.03267351257502 0.102 +-0.05650501937455363 0.5128558272098381 0.102 +-0.08173859970259661 0.5318482444865232 0.102 +0.7344729066360023 0.1781497485540019 0.102 +-0.0478180262921459 0.7607224252213605 0.102 +0.7892517669963151 0.3929453845894618 0.102 +4.030601560673749 0.9960616488644958 0.102 +2.714348017624394 -0.05172863281647736 0.102 +2.99722741119323 0.1622909890170253 0.102 +15.21417480186333 -1.219995982352117 0.102 +3.162590333015863 1.742944414312181 0.102 +3.14970200342366 0.2845516086341741 0.102 +0.8117261705977153 0.1428787352772942 0.102 +0.4255944733939314 0.2043895844178756 0.102 +3.157852221931393 -0.3533559030339926 0.102 +-0.02917517837999695 0.5201937598666334 0.102 +0.2912704032928312 0.6710381246244516 0.102 +0.5070331622457019 0.2381100618543494 0.102 +0.5590099484138189 0.9503522607274276 0.102 +4.04132341301411 0.2639130828935491 0.102 +0.5177590350292781 0.113801171626404 0.102 +-0.9425963156749823 2.093590091239379 0.102 +1.890338389512007 1.835135339606523 0.102 +0.4091751316627352 0.9033061717961035 0.102 +1.519963575225682 0.1658854321362146 0.102 +2.411029529038431 0.5359920665936986 0.102 +-0.2548406458133444 0.46319290726015 0.102 +-7.505686774971021 -9.062801390485259 0.102 +0.909617190375853 0.3590490014775901 0.102 +1.028283236706515 0.07046421782433547 0.102 +0.3560873098137827 0.8622218116853588 0.102 +-0.1038520205193161 0.5192422794847067 0.102 +-0.6012275697632542 6.276638415893459 0.102 +0.2364839230592636 0.8778658945155563 0.102 +0.2734471203525731 0.2538010484499248 0.102 +-0.008661674835433663 -0.0941159307139398 0.102 +0.8496370216097326 0.993593049977333 0.102 +0.5879388696088729 0.7194979617892168 0.102 +2.883065684803463 2.254409533284423 0.102 +3.014674891496205 2.479272999672668 0.102 +0.4240778058997586 0.8467837907982916 0.102 +-0.04482881575032791 0.9516559519374224 0.102 +1.442747945574304 1.337196153897945 0.102 +0.7691416101980812 -0.2102214803596801 0.102 +0.7496789496572343 -0.288500455618484 0.102 +1.57283582280167 -0.6054122380949915 0.102 +-0.02266153001116662 0.4854538265897156 0.102 +6.218119002030538 -9.085120148444995 0.102 +3.066223947595582 0.6320376541153079 0.102 +-0.01468336484702735 0.7735081482046039 0.102 +3.942208828244165 0.9063547889597882 0.102 +0.855890437280703 0.006614628826647038 0.102 +0.09095914724194901 0.3740017448564214 0.102 +1.900281159273051 1.121880687771609 0.102 +0.3526264406982931 0.3031088219608338 0.102 +0.6323775175945323 0.1610043780326842 0.102 +6.470474107233017 -7.37313481360114 0.102 +0.8443046435803876 0.3930862505983776 0.102 +0.2712501914226503 0.3701038354024804 0.102 +0.8828464326476476 0.3698342157008279 0.102 +2.299579959061776 0.9334499319870526 0.102 +0.09935578989156825 0.1765471455409728 0.102 +2.834459228686094 0.4904767142062826 0.102 +2.866504820738461 0.4619812000269318 0.102 +0.1673507602970343 0.2554777787407611 0.102 +0.3894191298207209 0.8435483985895327 0.102 +0.2330665451318799 0.6499064857995103 0.102 +0.3920653513033479 0.8194332803581298 0.102 +0.3767687225449655 0.5268069365448924 0.102 +-0.007976909978035431 0.7194796355064694 0.102 +0.1721573866789538 0.7488902709994538 0.102 +0.9334451472061731 0.3718091226796232 0.102 +0.3763172996418671 1.018127089698591 0.102 +2.367345402088569 0.8949649755119565 0.102 +14.75378762594349 -4.704179938210874 0.102 +0.2141591226031877 0.6328076077812728 0.102 +18.66079583881536 4.225058222707745 0.102 +1.559207607221328 -4.836148826625726 0.102 +3.053129938109404 -0.208384691529691 0.102 +3.129242655775709 -0.1729287827433938 0.102 +14.50848202294949 -7.118670394086966 0.102 +15.55336476928792 -7.192135477194384 0.102 +0.8507166108119032 0.2455153794604115 0.102 +-0.06272998183687706 -1.410088034279033 0.102 +1.706192200516729 0.3909159936894989 0.102 +2.322377582533295 -0.4490697820211529 0.102 +0.5539746551475736 0.2685372138316566 0.102 +-0.001765181517721247 0.2252208832756599 0.102 +6.667865979132167 7.737381080308365 0.102 +-0.01759157565380589 0.924775168926281 0.102 +1.013101080918314 0.4170380884156046 0.102 +0.02877644838669981 0.5440395483736162 0.102 +0.1600656600338363 0.6027908256504404 0.102 +15.63583367904876 5.762325875600417 0.102 +-2.573753505141817 -7.496878651477825 0.102 +0.4460819285117886 0.1731736168720692 0.102 +7.209939167222068 2.440964637751141 0.102 +2.526072631632309 -5.000935280911063 0.102 +0.3553931921523411 0.1776395346438388 0.102 +3.775537799646299 0.2044559765131137 0.102 +0.6776371778465362 -0.1088346953966267 0.102 +0.6961878367316333 -0.102542429342978 0.102 +0.6217976078139198 0.4456850730784399 0.102 +0.7142056097895289 0.3849483897333795 0.102 +0.6361392132570484 0.2761496026733076 0.102 +0.02428051308147598 0.6036038515524071 0.102 +3.354960830008476 1.416563031503708 0.102 +3.658005694134162 0.6588113696874606 0.102 +-0.08054409625053902 0.8105392209275701 0.102 +0.5880457330568891 0.8563409171078034 0.102 +1.909000458288766 1.007889618358583 0.102 +0.7042316032038723 0.8987864513408761 0.102 +15.33078916829487 -8.785510706276085 0.102 +0.9969834907940246 -0.1995341500906191 0.102 +3.284191178611209 -0.1298950988919823 0.102 +0.013142855750781 1.046092135453264 0.102 +0.006245371147556873 0.5930798057488724 0.102 +1.007736744871584 0.3949602297878473 0.102 +0.2327877039758442 0.2946285653855894 0.102 +3.206405732908763 0.1680666167077846 0.102 +17.28211367680283 6.727295997099584 0.102 +-0.1043819555756951 0.4940196206688012 0.102 +3.512272080771842 -1.18297831067692 0.102 +0.8877919599298121 0.5216491161705086 0.102 +-0.01627853743003195 0.6384014586315416 0.102 +3.822263257283353 0.06700843809999593 0.102 +-0.04416183169806068 0.4383249789181748 0.102 +-2.734208671769266 9.025293084874658 0.102 +2.953361220103303 -0.4418098528053309 0.102 +0.03480044716883225 0.7614277667154524 0.102 +-0.08760699867068351 0.4461606689737795 0.102 +-0.1143324998869828 0.4362881855706827 0.102 +0.07230273127929479 0.6700262333022008 0.102 +0.9787853239434997 1.084192134580589 0.102 +-2.195451862798278 5.345233811763675 0.102 +0.525735731805982 0.2216759122030417 0.102 +0.719743840579701 0.1621936180705686 0.102 +4.082120218122067 0.1096190194844091 0.102 +0.7560916647618322 -0.1100170836727307 0.102 +4.749890820170131 -0.1409402334639299 0.102 +0.8649151635986211 1.03692166669686 0.102 +0.1404319511987479 0.114174014394364 0.102 +2.12655422583515 -0.1353962367653284 0.102 +0.820260128028735 0.1950709109180017 0.102 +0.04924799297413568 0.4930366925887499 0.102 +0.159931299160419 0.6608584204884544 0.102 +0.9840355415014461 0.230569238837993 0.102 +0.9385707285800473 0.6563471434982739 0.102 +0.1743791943570236 0.8087931904485706 0.102 +2.510211423787559 0.1615449861116449 0.102 +19.05431902097365 -5.272920594195349 0.102 +0.7345448098531097 0.7707771505169012 0.102 +0.3821653206743367 0.7648600982689948 0.102 +0.3662618180208195 0.1582234221237236 0.102 +3.875568989759535 -1.472913140973763 0.102 +2.505880832168772 0.3096506498697279 0.102 +0.3952584200526059 0.9692047038442796 0.102 +0.384558797369469 0.992685965219654 0.102 +3.028083970687041 -5.969938193510055 0.102 +0.6442087622914582 -1.865362752004867 0.102 +-0.0683587457407433 0.1711484178033995 0.102 +0.7314613376792232 -0.1231602647659058 0.102 +0.9623354369304303 0.1650953642412335 0.102 +1.635341410755579 -0.09398894614099088 0.102 +0.5161601270748353 0.5103175594691355 0.102 +-6.126976891229631 -5.924629770852028 0.102 +1.538209875971184 0.3602943917563904 0.102 +0.8874516470100797 0.6996425838479005 0.102 +1.019138513985089 0.9427341039076355 0.102 +0.1715827015705907 0.5309382129218644 0.102 +0.09703860078243809 0.7218143930597598 0.102 +4.634410624919967 -0.3821570220990961 0.102 +0.1187946836418014 0.590135514859515 0.102 +0.4729862365329607 0.4804450295670629 0.102 +0.8116914379737564 0.339153474342961 0.102 +0.3070119962569137 0.3030081751787435 0.102 +2.919709865539291 0.5861392598521133 0.102 +0.6105923492222275 -0.03790929591188526 0.102 +-0.1043134893918045 1.082899211503881 0.102 +0.1732819637039157 0.4809035310401732 0.102 +-1.382405574698823 -0.05248470832247622 0.102 +-2.815658420276728 7.471643041621971 0.102 +-0.1676985916303961 -0.03986795892206425 0.102 +0.8901379716689423 1.079162609800989 0.102 +12.97925553312449 -4.697142846252773 0.102 +0.7743834508411941 0.9626124317248576 0.102 +0.4558447717556471 0.6711764552593202 0.102 +-9.012297924347882 -1.282837550536056 0.102 +0.6297956870008986 0.5681677380659763 0.102 +0.3405654967483744 1.012386927052692 0.102 +0.4568531137150225 0.8932555000939996 0.102 +0.3924254809491229 1.071945844829447 0.102 +0.7669399790995324 0.9979492455140301 0.102 +0.4266716272153324 0.7600268091468869 0.102 +0.7117385088555013 0.3006691403265535 0.102 +2.294594730731583 0.4725783125828421 0.102 +0.5654886933219851 1.932970757776447 0.102 +0.3355346683195491 0.9487695986390778 0.102 +2.625390415181697 0.4865170984289168 0.102 +0.6243573134862987 0.7566383002038246 0.102 +1.892350572288076 0.6156387801183463 0.102 +0.9617465006813535 1.001306418199879 0.102 +3.053237627460601 0.1816157287548185 0.102 +0.4282407852886615 0.3471627025804236 0.102 +0.5328228085943808 0.4574746655381322 0.102 +0.6795242320845515 0.03715899435074944 0.102 +0.592734275395543 0.5049310184426592 0.102 +0.8885873402224472 -0.0454259711455003 0.102 +0.3260513550804303 1.073109134118117 0.102 +0.3720222247906591 1.043604122654459 0.102 +0.7903196201230621 0.05062455133192747 0.102 +3.182565960985605 0.8010379193232109 0.102 +0.4315423495428966 1.110030110371558 0.102 +1.696061251727263 0.8624383137980656 0.102 +0.8684236062766917 0.4311183769281783 0.102 +3.766613594845723 1.329728368556027 0.102 +2.082292330296704 0.9889521934067845 0.102 +-0.1041055787364548 0.1164483240489803 0.102 +0.6988896563970848 1.06472320731447 0.102 +10.94044483673798 5.276565120062142 0.102 +0.9747701785360682 0.4658258812999376 0.102 +6.340258211383158 2.130702886753329 0.102 +0.03567884452807938 0.4747772961153883 0.102 +-4.306563068554028 -7.682102749422799 0.102 +0.5834573789211343 0.9448250706442776 0.102 +1.157178362340577 1.013112903492683 0.102 +0.4454395556355364 0.3054927302606744 0.102 +0.2166613437872515 0.573107067605545 0.102 +0.562427209013989 0.1301054434370195 0.102 +0.4824816595585775 0.435679389415984 0.102 +2.67929816339908 -0.5602459185494298 0.102 +0.893890374727291 0.2616015868070758 0.102 +-0.006956278094713257 0.5054973265154648 0.102 +0.9329180065347965 0.9609044615310088 0.102 +3.644187545923654 1.047049323058308 0.102 +-1.625450723007889 1.961444265997037 0.102 +0.8397831032480741 0.6704805057331052 0.102 +0.5879043427794379 0.6248467761095071 0.102 +10.38924660042613 -2.414803852537279 0.102 +0.005381226797332524 0.2878599540152078 0.102 +0.9678892058742303 0.534834437456521 0.102 +0.06906770304318859 0.5382039239525879 0.102 +12.99728147048186 -6.188199937794948 0.102 +3.967070825921058 0.7600109080660631 0.102 +0.5733202979314648 0.1619575608946833 0.102 +0.4957325653563662 0.8051176339577228 0.102 +0.3349800403685347 -0.07789292951164729 0.102 +0.5673089996982313 0.7011905120244775 0.102 +0.3128067340142578 0.9938309384915412 0.102 +-7.15400446175333 6.073009010706421 0.102 +0.4643516598005144 0.756108721211048 0.102 +0.3941757261088324 0.1897941836450498 0.102 +0.2513283624908192 0.5137369159564471 0.102 +0.5222748889037205 0.1883261544359729 0.102 +16.89240278751022 -1.512061471493058 0.102 +0.1896597671186015 0.5532385374513867 0.102 +1.0927517121459 -0.05845123115265799 0.102 +0.4217196793770537 1.055975272678149 0.102 +0.9407297540641962 0.9349137113471514 0.102 +0.3347592661864429 0.4898368556302303 0.102 +0.3917631734335186 0.7243168624695414 0.102 +1.551097267359415 0.3074021413363223 0.102 +0.4254913751761661 0.1115247348640755 0.102 +-0.001218730214019128 0.6614791024626283 0.102 +0.6072761948477888 -1.225898222295496 0.102 +-1.253120906180249 -7.075345372808338 0.102 +3.660296034466738 0.2181932337703427 0.102 +0.1846355518699909 0.1777127387094165 0.102 +0.4207014377346592 0.6327975919065824 0.102 +0.4454025054792445 0.7758916174346412 0.102 +-0.0757066782193854 0.3111066307931895 0.102 +4.750267285994717 1.541807923291343 0.102 +3.796402570644546 0.551091157794545 0.102 +0.568402081791601 0.3167986977843757 0.102 +13.66099386681473 3.958839570813757 0.102 +2.024598014918509 0.7335905861984116 0.102 +0.5347909711451013 0.794060491981411 0.102 +0.610636142327458 0.9694524826210841 0.102 +3.741658911205213 0.5478100315819633 0.102 +0.3182983977982368 0.7139378124230606 0.102 +0.7701960283893221 1.046755874115011 0.102 +-0.01141286355044526 1.00066707374973 0.102 +0.6234652546824979 0.8915377759596008 0.102 +0.3548676293267168 0.9826997800976842 0.102 +-0.07252623251460424 0.5522326268206491 0.102 +1.092954712008165 1.04285247074916 0.102 +4.211252026942685 -1.476392391264752 0.102 +0.4399667057685154 0.8858892472994421 0.102 +0.7931287648179741 0.5673442853975278 0.102 +1.96488077063744 0.3462052225404047 0.102 +0.6043827223291421 -0.1448445934799489 0.102 +0.5555387100656526 -0.1535454458423437 0.102 +0.5358687732564068 -0.1791884093087678 0.102 +0.8981808128980862 1.027926755345767 0.102 +0.5328205250123459 0.633369730401292 0.102 +0.4907502156377902 0.5695134391907171 0.102 +0.1134836380091567 -0.004980203604683995 0.102 +0.8471117891154606 1.023608574129925 0.102 +0.6574731944644668 1.028773491038174 0.102 +0.6554952988545508 1.053967938956995 0.102 +6.173860978964959 -2.031151694594543 0.102 +0.2578307301578259 0.8888570199735513 0.102 +0.713759910549026 0.01317926378296077 0.102 +0.5942735566612775 1.060857067018675 0.102 +-0.3978473035203117 -0.009012685006260492 0.102 +-0.1776778628816269 0.3820768668749107 0.102 +0.7845640270540712 0.7406773001864321 0.102 +0.09635189315641481 0.5737889686449514 0.102 +0.03744985590945545 -0.03477202467889838 0.102 +0.3325519262052207 0.4185470240073795 0.102 +2.145874719164466 0.1020743560443534 0.102 +3.764516592905421 0.9206627781193288 0.102 +2.310278466243335 1.734888054702584 0.102 +2.521032435406879 1.101524353852012 0.102 +1.114547027443381 1.10693397271267 0.102 +0.324663272543365 0.5262809225619112 0.102 +8.410847360761233 4.268205619084145 0.102 +2.573963098480274 -3.432302892506175 0.102 +2.690892326779511 0.9561851593280871 0.102 +2.318469143314602 0.5583355207214589 0.102 +0.6192420572292038 -0.1102965129870802 0.102 +0.2444852422368773 0.1470206442593541 0.102 +0.9613679859399624 0.9827113270689787 0.102 +0.4044366127585459 1.025392403619202 0.102 +0.5036761132797584 0.1725467019559127 0.102 +0.3488918343531688 1.766840533909429 0.102 +-5.319585800173673 -9.093910651411024 0.102 +0.7380575661294584 0.8881443068103209 0.102 +0.4190601564843937 0.6061878206026986 0.102 +4.202614904889869 2.369770736111399 0.102 +3.360275035397787 0.9441119485152156 0.102 +0.9052215839912279 1.060003897602506 0.102 +0.9271906682177582 0.537067980488811 0.102 +0.7447803767735535 0.226043865182311 0.102 +0.7647170301193131 0.8474356078527536 0.102 +3.642539153914592 0.01188023211037945 0.102 +0.8684693114073299 0.6247510311999201 0.102 +0.2840486878353781 0.4685575954339609 0.102 +2.168620605937906 -2.50217186371574 0.102 +0.3493780949662143 1.082441938736132 0.102 +0.3792578053467225 0.6178421481570646 0.102 +3.210629802058469 0.461757432282513 0.102 +0.4929813325089886 0.3969462479296928 0.102 +0.62710312749055 0.3993892392381916 0.102 +0.1882223957506411 0.05356805695182126 0.102 +1.073735872701909 -1.079523902642479 0.102 +1.678639928802824 -0.2537378341014319 0.102 +0.4506086978339418 0.8291054942042064 0.102 +2.308781292356902 0.7821609154040066 0.102 +0.2845490345929045 0.5905977526997359 0.102 +0.567414763457049 0.3655940073930306 0.102 +1.025114049449352 9.154663560829269 0.102 +0.4827434702078115 0.1026012751997393 0.102 +2.576035900932989 0.9658646568258552 0.102 +18.87199012861052 0.8845779408573793 0.102 +0.5469505157565668 0.7412015299973487 0.102 +0.8303365181699895 1.042185603559721 0.102 +2.362397337593073 -0.1247827552588138 0.102 +0.5422864017289506 0.9843369537171607 0.102 +0.6552336892355333 1.080550538416591 0.102 +0.9628660092035979 0.4023123780969038 0.102 +1.340596023605223 0.8388759238328187 0.102 +0.5789238537823217 1.033557276746215 0.102 +0.6847489370913387 0.9617183162298251 0.102 +0.6281869131034954 1.047273613473644 0.102 +0.5081209369961454 0.624311402408618 0.102 +2.411160622296618 -0.1524087869754631 0.102 +0.1137497281626444 0.8369279224916115 0.102 +1.034046655490782 -2.300947496335156 0.102 +-1.971802274944594 3.037489991995471 0.102 +3.291579285417607 1.161680969163252 0.102 +0.3866469915300095 0.9427558832190153 0.102 +0.8907359147647081 0.4688697258567157 0.102 +0.4202238501911196 0.5589108349205687 0.102 +2.914620998484202 0.8209986990258499 0.102 +0.4076002456347911 0.9270849820276456 0.102 +0.555494683208795 0.3485353519640378 0.102 +0.7377743097638674 0.3861169005674014 0.102 +-0.07511084533877342 0.2187679906442186 0.102 +1.015684094733957 0.5385667768707094 0.102 +0.7449512523689691 1.048333465636316 0.102 +0.3848739344417416 0.8700480909024089 0.102 +0.6167302981309035 0.8078621346503613 0.102 +0.6338397776153668 0.3234942869699222 0.102 +0.5044249680043533 0.4204047491318554 0.102 +9.499027802444402 -5.874771261418918 0.102 +0.5231962248088053 0.3400868392676545 0.102 +0.5403015104693052 0.8758966663636754 0.102 +0.02991625075917962 0.5083899244600574 0.102 +0.8776641068323892 1.018768946330125 0.102 +3.190203301424923 1.592739564615625 0.102 +0.4982680609915451 0.8861641078936404 0.102 +0.06249562288545189 0.754301691297113 0.102 +0.5109941943235503 0.781972363299376 0.102 +0.5409760082170404 0.9040172371717179 0.102 +0.487671167479295 0.5955897268408916 0.102 +0.5120799937305841 0.6782191104309824 0.102 +0.5913375564730197 0.4079620960153393 0.102 +1.369747399855662 0.2229460255865904 0.102 +1.071755465984831 0.4069579527011815 0.102 +-7.687578000308929 -1.372238190442519 0.102 +0.635725646983577 0.8204859809444738 0.102 +0.08515416387370252 0.418134892341587 0.102 +0.7217820000912752 0.5593864606220016 0.102 +1.205848481354005 0.1750862425479719 0.102 +0.702429406066209 0.8274341947012274 0.102 +0.3693911519666999 1.067148140537784 0.102 +0.3146139408120469 0.6568456737559825 0.102 +0.6052013085005441 0.251217445848302 0.102 +0.963097257674426 0.04742040087700648 0.102 +-7.376941474270764 -2.805913720555618 0.102 +0.006474626767184597 -0.1495312466897489 0.102 +-0.01257442877688395 -0.1995452634062317 0.102 +0.3060826029773195 0.1840844865255711 0.102 +0.4517738274638248 0.531122277605043 0.102 +3.13245940030174 0.5415138131985822 0.102 +0.7928687935045996 0.5245819282884825 0.102 +-0.1392567136922007 2.218693815774226 0.102 +0.5149865184837722 0.3804579441481341 0.102 +0.8388566407198343 1.079604051945976 0.102 +0.8621285846086214 1.088040791948034 0.102 +0.8063359530536031 1.09996877758797 0.102 +0.1136108266947096 0.2495634248331551 0.102 +1.734130221352491 0.2016935612782281 0.102 +0.5025962546161972 0.721291431277489 0.102 +0.7153604839078073 0.7354704537159541 0.102 +0.5051836482251563 0.7417955919131284 0.102 +0.6334975445588281 1.110023575972051 0.102 +0.5607430692900266 1.061466537290483 0.102 +0.5427587777387637 0.5856363348139638 0.102 +0.5453093292756913 0.8267534616003042 0.102 +0.4399098714604188 0.6005413980368944 0.102 +0.6587396103164327 1.00425337756055 0.102 +0.6844976483494208 0.9855690724064229 0.102 +0.7094387607502265 0.988834613859488 0.102 +0.5728844047478854 0.7849756032850272 0.102 +-0.1925650513331931 1.294167291254677 0.102 +1.517589392565703 0.09183385146977402 0.102 +0.3607066687137706 0.9121003483121599 0.102 +0.1879071959089059 0.5365543881970334 0.102 +0.4084642355750039 0.7432365337410203 0.102 +2.189522357171112 5.135255624901665 0.102 +2.311286662434347 -0.8524111743490028 0.102 +0.6686708199184884 0.7140173644116393 0.102 +0.5017184057880653 0.3568083853763345 0.102 +0.6885468176344824 0.4695408389066342 0.102 +0.6505360524304091 0.8370350978413778 0.102 +-0.07257175656000336 0.613884647269769 0.102 +0.7175035658805484 0.7190650384351909 0.102 +0.3260839517417575 0.6205237392402392 0.102 +0.283164467306988 0.5488362013510875 0.102 +-1.418833978358876 -2.688461975659515 0.102 +0.3899782957622961 0.4878453493847084 0.102 +0.5864722394190426 0.6496307232898451 0.102 +9.117023755848047 6.54791090403714 0.102 +0.362596893290089 0.9281643462229031 0.102 +3.971227648854492 -0.2666699887912302 0.102 +0.4357208382828639 0.4628747046202704 0.102 +0.6392510951642592 0.9220802633639157 0.102 +0.1645761638298761 0.9489834701090093 0.102 +0.4878309498726986 0.286426932319938 0.102 +0.4202584384382852 0.4997763952130195 0.102 +0.923785784801091 0.02549273493404027 0.102 +0.6861052184436297 -0.003761818945207556 0.102 +-7.552581808459294 8.94703762625395 0.102 +0.5694229700562852 0.8348447367876533 0.102 +0.5158869019923715 0.4823053982356242 0.102 +0.5248160764586246 0.554048207441032 0.102 +1.344822864952756 0.4034567372277242 0.102 +-9.131120262641847 5.857307033616507 0.102 +0.5785663755318476 1.051457608432732 0.102 +-0.09473775778937944 0.2049904214263396 0.102 +0.4758240109123323 0.8829251379104796 0.102 +0.2978435973296241 0.6157891296884032 0.102 +0.8717625808528157 1.067857072435915 0.102 +2.17642668201925 -0.01430643663615066 0.102 +-0.1392234888799547 0.8850194094955761 0.102 +0.5733504927294855 0.5713561163345994 0.102 +0.5483714770610675 0.7110343480883019 0.102 +-0.08092442250973218 0.6775621824434219 0.102 +0.1627645620378159 0.02414467532546663 0.102 +3.911021685541856 0.4553619166070916 0.102 +-2.045700534029966 -2.056325478835292 0.102 +0.3916591230065953 0.3619841055931325 0.102 +6.833149726935322 1.383779735621835 0.102 +0.2963979358743177 0.048203540476515 0.102 +0.7613848673284634 0.9419457128359647 0.102 +-0.7249064597216905 -0.3250909378443899 0.102 +0.5033403391103873 0.9637617352106007 0.102 +0.641365446239047 0.4713184127739132 0.102 +0.2311888549002015 0.6864092132069265 0.102 +0.3484175908157265 0.6063928505195705 0.102 +2.615998814016147 -0.8393492482650237 0.102 +0.5127656216086572 0.6013748007912157 0.102 +5.004507536854738 2.165862279869893 0.102 +1.051049889089096 -0.1994815749861496 0.102 +0.4675520216656557 0.6312206738036736 0.102 +0.6280197025076938 0.6139810074738812 0.102 +-9.175534132317321 -7.858504138251117 0.102 +0.1824259604820398 0.7741810617136857 0.102 +0.7836168866681293 0.3022847956256606 0.102 +0.2632688409281901 0.5893892610434677 0.102 +0.5151301814190306 0.7100559132433332 0.102 +1.67396096811027 -0.1414556163465008 0.102 +0.4683562380748759 0.845530621667225 0.102 +-5.377228596646064 0.935009002799545 0.102 +0.7260490954796636 0.9643037040814935 0.102 +0.4083375228965886 0.77898449191182 0.102 +0.4125822598118905 0.8032404039639559 0.102 +1.86758070688542 0.1549877168665798 0.102 +0.7723842728208906 0.7127905060527205 0.102 +1.598198958674177 0.2055608183571871 0.102 +4.11153726585469 0.3675630299564051 0.102 +0.7125892076649714 1.016066233661339 0.102 +1.115123333785041 -0.04942602971489059 0.102 +1.13811905685571 -0.03443152016442695 0.102 +1.158795679000858 -0.009037114159541977 0.102 +0.6797158314337437 0.5795213037629422 0.102 +2.994793635870897 -0.1170325620106992 0.102 +0.6131245112035425 0.4182485765709413 0.102 +0.2529667735794026 0.4023931935822035 0.102 +0.4512060798942652 1.044534265441698 0.102 +1.073931715383426 0.2406053206516192 0.102 +1.829175413982391 0.741015911198634 0.102 +0.3143402460084128 1.046704178729381 0.102 +0.2388446794473224 -0.7984197213420903 0.102 +0.7801947121039738 1.017630621984771 0.102 +-0.0951785141963376 0.2657059686059494 0.102 +2.016058785716169 1.038642130131263 0.102 +16.37995809381178 -5.531905515363995 0.102 +0.5246490463721237 0.6571952665886623 0.102 +2.382885444483222 -0.008205296938331066 0.102 +0.9104584465946625 0.9833189040991284 0.102 +1.133550401749712 0.09404676032979477 0.102 +3.974242972528125 -0.07279850976956972 0.102 +1.659450060434714 0.8125890237008051 0.102 +-0.1277869676771587 0.1587598690083813 0.102 +2.755473220355023 0.2420605467927529 0.102 +0.6608918560812393 0.9551889393521575 0.102 +0.7861523138130424 0.6924374789024028 0.102 +0.7776253948959837 0.650992606727637 0.102 +0.5630527166314141 0.6174825679443716 0.102 +3.268545564101757 1.092186937295491 0.102 +0.4312238861134857 0.7258189181226909 0.102 +0.8275196050759621 0.08326357259796734 0.102 +0.816413857390122 0.0605791214771389 0.102 +1.724243865198659 -1.10977401928421 0.102 +0.606805069069127 1.014573171130339 0.102 +0.664897921929443 0.9312725468783514 0.102 +11.55984573535771 -5.823772082241065 0.102 +0.4903622233902539 0.6655464348315389 0.102 +5.167329740557452 -0.01820341243620581 0.102 +0.5841321673840884 0.3779151423971541 0.102 +0.5513173687219113 0.3825650908206556 0.102 +0.6124859367097473 0.6544655225799534 0.102 +0.4326438615719106 0.9307656533771649 0.102 +2.025480713163941 -7.128123636265415 0.102 +0.5753990341725441 0.3390384963141039 0.102 +3.008320263976612 0.1010433320874344 0.102 +3.577812396747438 0.3299439519295102 0.102 +0.4608546288083303 0.3891513933153428 0.102 +0.2631543412506546 0.7245726498762458 0.102 +0.02418281558867876 -0.08129213338437949 0.102 +2.864350259316767 -0.401208373674774 0.102 +2.936625830866715 0.0996547992193709 0.102 +0.3118137130776389 0.2218800258271175 0.102 +0.585010230542235 0.230717326183745 0.102 +0.6336487941261224 0.9977790791856863 0.102 +0.681076758862787 1.082937062483444 0.102 +0.1923887565047437 0.6097826584272926 0.102 +-0.04281716599239768 0.4616805890148795 0.102 +0.7498652985052121 0.8667224008567084 0.102 +0.5869580232435375 0.5259823755398269 0.102 +0.6833907661333484 1.036443750781346 0.102 +1.239194763793119 0.9337278053006055 0.102 +0.7928916506900858 1.038310236155558 0.102 +3.865206676923521 0.5148980405573098 0.102 +3.627060876078147 0.7676331110715611 0.102 +0.8024805861241172 0.7998216488764528 0.102 +0.9129438848019711 0.09115411157452577 0.102 +0.935469373855351 0.1238969370068127 0.102 +0.5478769522011485 0.2410881207200417 0.102 +0.6948150325474949 0.9191322063526439 0.102 +0.2877657708264139 -0.06319573243409886 0.102 +0.1023972317197219 -0.05247115163583606 0.102 +3.75623437604916 1.045868239591481 0.102 +2.315181635112351 -0.1703176862817131 0.102 +0.5933006866842186 0.9877695861816905 0.102 +0.4599470445944372 0.1443290090911535 0.102 +0.6381503885966149 0.4512559049711307 0.102 +0.5063098690994378 0.2657182529808474 0.102 +0.6345870327862256 0.9736427142156974 0.102 +0.77682135484531 1.072516762679818 0.102 +0.5626729086214517 0.72586729769233 0.102 +0.3370453174124936 0.6434061479861048 0.102 +0.217064837255027 0.05500586150324854 0.102 +-0.1656995733405838 0.6477264224787813 0.102 +0.6130843959392762 0.3033692162853412 0.102 +0.3071647892805858 0.5617989007522483 0.102 +1.654655004199962 -1.619516628673369 0.102 +0.5291129052824637 0.931582194851007 0.102 +0.6015827443877807 0.4849986447203767 0.102 +-0.1025353505348745 0.07536863062856489 0.102 +-0.08820756793319054 0.04024520766326504 0.102 +0.7595007414835016 1.26338625457263 0.102 +0.7490078544858011 0.7023578422247853 0.102 +0.464949908675615 0.9958886423945229 0.102 +0.5663649234120738 0.4476198011411929 0.102 +0.5809177370215268 0.8156763024607538 0.102 +0.03532452331858467 1.096137986565521 0.102 +0.3203910518136761 0.5076881517792549 0.102 +0.576271547111584 0.9170714876347528 0.102 +0.2742896054903566 0.102462013571653 0.102 +0.6849790598575387 0.5214192096627639 0.102 +0.4021722270898901 0.6542818932574519 0.102 +0.6093347006417064 0.9438061648736694 0.102 +0.4967994170437461 0.4584304472225326 0.102 +0.3558023967684225 0.242680759706376 0.102 +0.4435135153308552 0.4892214586507888 0.102 +0.9045797458009821 0.4037366882736442 0.102 +0.757083690791411 0.1352696208999934 0.102 +3.2179852333403 0.6836402403863922 0.102 +2.384634164647452 -1.537259914924487 0.102 +0.8560304691246067 0.08656835448070377 0.102 +0.6033539903881006 0.8297762788440193 0.102 +3.357685810811767 0.2728189731772833 0.102 +13.18726993462096 7.314787324694192 0.102 +0.4587316542285946 0.5644429663043038 0.102 +0.7449013837799812 1.015968356410244 0.102 +0.5646414126464018 0.2165414883711235 0.102 +0.6652060673930564 0.8811963044921098 0.102 +0.5936584608053127 0.8804466702552595 0.102 +0.5346871688363709 1.043117436048075 0.102 +0.1410287379142992 0.5746076233986338 0.102 +0.7545696803642844 0.9761561052706113 0.102 +0.7311526807678177 0.9401002735356 0.102 +-0.08366454705114433 0.3314925016189003 0.102 +2.049587468681303 0.1880121224851461 0.102 +2.152959823610979 0.9215053733189844 0.102 +0.4367043850318867 0.6896804463830186 0.102 +0.1500746779697372 0.6275504934149888 0.102 +0.9074894819057294 0.6131108473014856 0.102 +0.5785260819771771 0.4275511962889105 0.102 +6.197869732699559 2.608644333220332 0.102 +0.4601659658424711 0.9616402412405565 0.102 +0.4289983738236762 0.954689775245253 0.102 +0.6733977049686104 1.484903238247894 0.102 +0.5328791280277473 0.533658162169162 0.102 +3.843380690307914 -0.09364051201498419 0.102 +0.4709235856184273 0.5109336690698657 0.102 +0.5386714341290424 0.1694794387324344 0.102 +1.262298629331967 0.5730828001777984 0.102 +0.5389852564190285 0.513233187895099 0.102 +0.9208445852570107 0.7526176972780485 0.102 +0.8321613159457962 1.007278013941787 0.102 +1.158946853592842 0.3729523416269271 0.102 +0.5543024772162155 0.6740608840451444 0.102 +0.8757997911975175 0.1071855213299083 0.102 +17.86996604687802 1.288336794657977 0.102 +0.4987741257074679 0.5392923052846939 0.102 +0.6096282248868242 0.8525687475427464 0.102 +0.5174728416571814 -0.06697324028819215 0.102 +-4.349522305276184 4.612465853611033 0.102 +2.595912105699687 1.644173746744003 0.102 +5.128945541695025 0.3795399560594114 0.102 +0.2754624410349504 0.6436554499174824 0.102 +1.127231960252375 1.235401326569681 0.102 +-0.04909129788126003 1.10835660924863 0.102 +4.018423385697033 6.680506674199997 0.102 +0.907456875848127 1.006085429276936 0.102 +15.01288768421413 3.905979045432016 0.102 +0.3001020511723811 1.085068647992997 0.102 +1.029112231186656 0.2584267358662424 0.102 +0.4656560537931076 0.6170726787103701 0.102 +5.150915095501163 -8.894446918139691 0.102 +0.5559538226578356 0.5412324967330385 0.102 +0.4830659818553301 0.8263088653147146 0.102 +0.1397406845888424 -0.2230650819222973 0.102 +0.5507207252986954 0.7733563489114519 0.102 +0.4409408973859715 0.4015465865809142 0.102 +2.819103334321681 -0.6421207156110077 0.102 +0.2402881066118787 0.9210122578704754 0.102 +1.109308164094023 1.004510011453634 0.102 +1.00681379665379 0.2572932646034111 0.102 +5.665493859216689 1.700505724240549 0.102 +15.67724161876582 9.124029874339298 0.102 +0.07775490937203697 -0.009216675571823605 0.102 +0.224455957224495 0.8544164510532969 0.102 +0.4712897036255861 0.2282806001713615 0.102 +0.3544490711122149 0.540483357963999 0.102 +2.311450858659856 1.012255714694217 0.102 +0.4610481177712247 0.7302847172514992 0.102 +8.37754309720922 1.120414797774353 0.102 +1.219561148719698 -0.2216089485378056 0.102 +0.3432887684142175 0.0227143126008227 0.102 +17.77490414008412 8.798677366368931 0.102 +2.694932896755793 0.5433558162614647 0.102 +0.684036296817997 0.3254065606124139 0.102 +0.4574932276543559 0.9098227674429531 0.102 +0.9857439597573625 0.6668411834093451 0.102 +-4.378628159822901 -1.558893121573167 0.102 +3.639095576909929 8.859720293437992 0.102 +0.5105042721616948 0.8728547027319429 0.102 +0.5169789758052534 0.9943201814609293 0.102 +3.17247330883571 -1.225940835901416 0.102 +3.505638468260431 1.208420857976709 0.102 +0.5666725013931798 0.9763182717368294 0.102 +0.587708044553176 0.7656241223748694 0.102 +0.4342269079355114 0.2274550929759861 0.102 +12.02586974964005 9.081952889361578 0.102 +0.5506388080936885 1.011105833192547 0.102 +0.8756429543944486 0.3158991249599072 0.102 +0.5570228365087267 0.4173012401011435 0.102 +0.7638677360299531 0.6105835720772956 0.102 +5.919154545518338 -5.65139250954265 0.102 +0.315901283753921 1.188285803127285 0.102 +0.5889843581627144 0.4566880412367239 0.102 +0.6837347552343211 1.108778567698242 0.102 +0.5199525465410699 0.05810220498018655 0.102 +2.352903189854443 -0.2799080913315224 0.102 +0.6975324388945061 0.6665978811914325 0.102 +0.6347340161014339 0.6345935706107703 0.102 +0.6175909619208798 0.3677504331917008 0.102 +2.071325861226867 1.258038926100066 0.102 +0.3464278121286651 0.3802264790232065 0.102 +1.267884372785099 0.4422310596035525 0.102 +0.9502547948552597 0.3185086223233868 0.102 +-0.01603440393631069 0.6961270850492343 0.102 +2.888172546060153 2.962651010769073 0.102 +0.25891684828315 0.9639604793886284 0.102 +0.6725974179302925 0.9090438733399741 0.102 +0.1922646281450534 1.096173742130376 0.102 +0.8429774217007987 0.4725273979370614 0.102 +4.314031182872763 -0.7453330934730182 0.102 +-0.005437494289039042 1.953321809076487 0.102 +0.6576330217119678 -0.05730208737726082 0.102 +-0.07041730689038699 0.9524134113841234 0.102 +3.414117062709546 0.4004427826273693 0.102 +1.052600247753635 0.2157759596757235 0.102 +0.3678724200768961 0.5016337621419752 0.102 +0.3485284231861878 0.1446866580076773 0.102 +0.9431597593890602 0.4583987518801097 0.102 +9.863495675448775 -3.56297051283637 0.102 +1.785076598635536 0.5360150297938423 0.102 +3.690486236759548 4.107510405773366 0.102 +0.1185590208670857 0.2049601525023139 0.102 +3.189367083781783 1.356908031238013 0.102 +0.8919478609607265 1.538025874711338 0.102 +-0.3907117965607724 1.301587800957939 0.102 +0.6549959575494654 0.2852630073250831 0.102 +1.734286927864755 0.3329347353776705 0.102 +13.60615280199355 2.700587904343816 0.102 +0.03423439861368655 0.3279347229886208 0.102 +0.013204618704954 0.3256512950906527 0.102 +2.086254112374986 0.350480242617305 0.102 +0.4480485056126515 0.3691374086015445 0.102 +1.030148123565646 0.3864670779851798 0.102 +6.230880082537258 -0.6000638361355288 0.102 +0.08808142827882634 0.9892816149035936 0.102 +0.5107363740109567 -0.01604520501983254 0.102 +-0.1946657855433752 0.1956336877391355 0.102 +3.962684391057995 -2.036449015987574 0.102 +3.955442161384444 0.6578830227428099 0.102 +3.711566116728156 -0.2181372394800407 0.102 +-0.04053086693904052 0.377057474983736 0.102 +0.5267404069048379 0.9139323532461914 0.102 +0.4463473785381983 7.553365630602915 0.102 +0.3619723813908949 0.6853599128360364 0.102 +0.4941604537430579 0.5108541730854863 0.102 +0.4218370567905103 0.3153741497550966 0.102 +0.264067337748414 0.337740914922373 0.102 +0.5796745001628205 0.7367566388747786 0.102 +1.37790785906943 0.5050247610291346 0.102 +0.8171921859546684 0.3108977138000777 0.102 +-0.2382961588636536 -3.114935603900443 0.102 +0.8750781373335413 0.3996216389947302 0.102 +0.3294710020261147 0.4031438556902279 0.102 +0.07709570443266277 0.4491166321001565 0.102 +3.47310430928918 0.8840602577125366 0.102 +0.6668656275695423 0.6287011492451801 0.102 +4.040848713418238 -0.01637496885805443 0.102 +3.357202595627577 0.1432839445419213 0.102 +0.7263682379127919 1.079168506007369 0.102 +-4.849352283369967 -4.384368334707926 0.102 +0.4371922548297201 0.2827389428908042 0.102 +0.4009164871638939 1.347995367557597 0.102 +0.3139510175852198 1.108311558572315 0.102 +7.725527422175231 -7.132330464218416 0.102 +0.5643507606207975 0.8568044979928179 0.102 +0.3994359008481072 0.609920636420162 0.102 +-0.009866537565606317 1.022751616386602 0.102 +0.4810474896231426 0.6369227989579243 0.102 +0.4324685872278988 0.5791688836455016 0.102 +-5.642467457803794 5.66895243799482 0.102 +0.84889954646633 0.3663611137248161 0.102 +4.997968360295976 -7.568361624645184 0.102 +0.7204807058469506 0.6162247397184928 0.102 +0.8064869856578867 0.9686213782370641 0.102 +1.050760853231989 0.5010521568832091 0.102 +0.6248386199945052 0.0216344458191888 0.102 +0.6981356927376468 0.784164366879729 0.102 +-0.05300365998367233 1.201012572031916 0.102 +3.178937712933842 0.9882532104927247 0.102 +0.3268275281850315 0.7694462014636996 0.102 +-9.279818414725007 -5.350819981332364 0.102 +0.9882136457026257 0.3135647520426499 0.102 +3.58309844935158 1.363656672414659 0.102 +0.6099814583883645 0.7769211031882326 0.102 +-0.01071045425284894 0.6033745454118448 0.102 +0.1333217501911275 0.2058220958885142 0.102 +0.9617482709124507 0.2717069510852634 0.102 +0.530407335307474 0.2770402579864965 0.102 +1.922053775981339 0.1967094945304421 0.102 +0.6626862599524763 0.6022188863853948 0.102 +0.5675403155673773 0.5940516038559607 0.102 +1.612234988474885 1.365348784170786 0.102 +0.8437868870518288 0.01712403760960154 0.102 +0.8015184493265124 -0.1644258756462934 0.102 +3.71372154721634 -0.07726994182389135 0.102 +3.918563725852579 0.6370566925137218 0.102 +4.688966890850748 0.8436240979461717 0.102 +0.4861540974668716 0.7161446168269043 0.102 +0.09076253145085006 -0.09615476017944251 0.102 +0.1689227989252995 0.3969314463906198 0.102 +-2.63351977469591 -4.77444222203022 0.102 +0.3696249775154504 0.6510719062320318 0.102 +-0.04461827676867733 0.9815789069243807 0.102 +0.421526056455531 0.9783714786614914 0.102 +0.3776980818379352 0.8998314408545932 0.102 +0.923609215251243 0.5588092288434974 0.102 +0.5305854041960247 0.429856905369273 0.102 +3.400991167648836 -0.1725924392190034 0.102 +1.638689461262288 0.3480213672028014 0.102 +0.597348974066863 0.5799589132800683 0.102 +0.7750227208289664 0.3371554354823186 0.102 +3.220386483354151 0.2792556467313176 0.102 +0.7081539757820207 0.9463069044901693 0.102 +0.6274440044742398 0.2566016008146499 0.102 +3.623151211836341 0.5341004537506667 0.102 +3.875977984551365 0.9500326446004301 0.102 +0.02087829925485253 0.7365629310129148 0.102 +0.1838945406860319 0.6982659011184131 0.102 +0.7061331635960064 0.3572969607550138 0.102 +0.4817327319362373 0.05344926762855026 0.102 +0.6694885960767678 0.02120739391416606 0.102 +0.2734143287157305 0.5217584113408759 0.102 +4.458121514468537 -0.1104219985143261 0.102 +0.3028938801815741 0.8723826400478163 0.102 +0.2984219472687386 0.8998560665547328 0.102 +0.5847397318275561 0.2851897411684125 0.102 +0.5888922605059677 0.6995659783971055 0.102 +0.9896289919689828 0.1276805157640244 0.102 +0.1185691811420912 0.4241643446687783 0.102 +0.6386243890977659 0.8674795928623849 0.102 +-4.829516596695593 7.662263080627789 0.102 +0.5076799572315556 0.9054114827803078 0.102 +0.6551233143484126 0.6400047861482857 0.102 +0.6571383059933216 0.5268197180453241 0.102 +0.6409157630304106 0.5110041053752011 0.102 +-0.07712501246354825 0.6472561361602721 0.102 +-0.0004307015141466957 0.4696851856182925 0.102 +-0.1340253182148941 0.941433151043953 0.102 +0.229841944083144 0.7959676869784791 0.102 +0.5090411782093616 0.3123009512077222 0.102 +0.3962400403954752 0.4235283895724262 0.102 +1.872702976648681 0.9385815267087898 0.102 +0.4275174331144132 0.1545870196796525 0.102 +4.204180356785521 1.454675210874683 0.102 +-1.414350305241415 7.846888797832129 0.102 +0.5330808804949076 -0.08398192891098712 0.102 +15.88621693170133 -4.058522898304736 0.102 +1.222813834211025 -0.4801255325062529 0.102 +-5.987039790522135 9.113196267201738 0.102 +-0.04543935908676337 0.3016260469212114 0.102 +0.3033291376625886 0.5037301117125783 0.102 +0.5582385960777494 -0.006596355033935856 0.102 +0.7000232407975218 0.4250729660613712 0.102 +0.4556740477154292 0.6401379363478281 0.102 +12.27180946663078 2.840557418859738 0.102 +1.673615973218236 0.4482657657520021 0.102 +9.385201745632397 -7.240083785379179 0.102 +1.487493586137887 1.142500747575358 0.102 +0.6571092325420445 0.3017066239993403 0.102 +0.9031776152641242 1.229177370292037 0.102 +17.85607241974578 -3.377528715164409 0.102 +0.9395717600767819 0.06961549197651028 0.102 +1.059957735074927 -0.02340086657214241 0.102 +-0.343049763081839 -0.1022108892958791 0.102 +0.3573268203409495 -0.07303454725908338 0.102 +1.052870598091888 0.3837725844560549 0.102 +1.054737389292409 1.070496339939558 0.102 +0.6598019276567825 0.3540643251915945 0.102 +3.262431733092357 0.5390639667590373 0.102 +2.514617863310249 0.4661033194860932 0.102 +0.3734146361161803 0.3460850006875706 0.102 +0.4386351453077186 0.8098986705291013 0.102 +3.74924698763695 0.7483784300531475 0.102 +3.090674701201602 0.1158336123258001 0.102 +0.1046623845923757 1.16259196036882 0.102 +1.150677128415219 1.669017940083012 0.102 +6.034795373738584 1.447257017153441 0.102 +-0.2514359395940979 0.8699558135432256 0.102 +0.04848067074226248 0.7046875683771447 0.102 +0.6229763812578419 0.4954833836882927 0.102 +0.7692146788155588 0.5469303917995729 0.102 +0.4285502468244611 0.5230534584958632 0.102 +0.9880614329888806 -0.06213434540675546 0.102 +0.2154817431907975 0.1769271043024605 0.102 +0.5551019772934001 0.4685107712953 0.102 +0.6910610380460922 0.8685470154569368 0.102 +1.366685767889713 0.7465959434975237 0.102 +6.689944669720998 -0.3592849021389849 0.102 +0.6799920800073624 0.8437305299418268 0.102 +-3.162244655261833 -0.2492443982847949 0.102 +0.5959944094731395 1.098760162797406 0.102 +0.2932900845487643 -0.03253352332397003 0.102 +2.061483270870525 0.4252870888048218 0.102 +-1.070935574427761 0.1435639559496673 0.102 +0.4358722721018113 0.06332503600818774 0.102 +2.924126764155516 0.3503747259961049 0.102 +0.4124010538845472 1.001858635400448 0.102 +0.8463171978200607 1.173328715841879 0.102 +2.188792190110774 1.668459753950947 0.102 +0.3957615120746539 0.293164801743693 0.102 +0.6000306897357003 -0.6098122742640029 0.102 +9.570036754331293 9.169504340615434 0.102 +0.9057629525665473 0.1898826771306339 0.102 +14.32399445177576 5.799492273143424 0.102 +0.504384729196715 1.031397932941774 0.102 +1.552219568162574 0.01185729919962442 0.102 +2.381414685697068 0.3571947077570308 0.102 +0.3387510371778575 0.2212872510935163 0.102 +0.8282410299057625 -0.8113278777095875 0.102 +0.6130278743182521 0.6093879823594138 0.102 +0.1991363273392572 0.4546337896643377 0.102 +0.9374732712764076 0.2631342932730649 0.102 +4.189254864214776 -4.544544489716917 0.102 +1.781426711197461 0.4274911000554581 0.102 +0.2321592754427002 -0.1223912248607264 0.102 +3.011022096063395 -0.9285226893678058 0.102 +0.6627726950132122 0.5572593596449502 0.102 +4.597701538137096 -2.504407790485223 0.102 +3.530173184153861 0.06865675481031065 0.102 +0.0604382467752777 0.2073073198320571 0.102 +9.249594651979979 -9.220436264807347 0.102 +0.6656466160168818 -0.3059156965640991 0.102 +0.6770557366194444 0.5633058561336807 0.102 +0.2431865214664014 1.018131316967364 0.102 +0.6406266835168742 0.6826059778929066 0.102 +0.5236834198926994 1.171210847792575 0.102 +5.447123579537267 9.034542718117148 0.102 +0.3200461335583349 0.2666284021120016 0.102 +0.6398578694372021 1.128469544738529 0.102 +3.341006698700134 -0.6461668015063164 0.102 +0.100524985579216 -3.937456791368483 0.102 +1.031993901308724 0.1155077838196038 0.102 +1.050075485884488 0.06467637847779817 0.102 +2.788260587480575 -0.1928556748715154 0.102 +0.3992894642155708 0.5810523264327367 0.102 +4.098756796862682 2.931004908778209 0.102 +-0.1698014877389533 0.9513542634722355 0.102 +1.206177226869122 -0.03794634883219339 0.102 +2.524884092988675 -0.171730062833744 0.102 +1.306557405025007 1.587946209093244 0.102 +0.5654668833054692 1.160514415048898 0.102 +-0.04728767836665806 0.5574021816444401 0.102 +0.5778039320699353 0.2615907661877366 0.102 +3.071446640212128 -0.4953760279487325 0.102 +0.721728954419022 0.9503073331515879 0.102 +0.3887211616923854 0.6372358692307576 0.102 +0.5239891526968133 1.076558459325124 0.102 +3.371221549574693 0.008676835925561585 0.102 +4.387596090982791 0.5261110408398593 0.102 +-0.1579887949122073 0.8444338332942116 0.102 +0.3672757054145103 0.8149020998220921 0.102 +0.6406576285708161 0.211878845176519 0.102 +0.8715758884685625 0.9981019216170074 0.102 +3.531816887425418 -0.7890796405917033 0.102 +1.02338043631678 0.5822651265335507 0.102 +2.044075198139473 0.06420653294289522 0.102 +1.084357201006839 1.018325297918306 0.102 +0.008725082664145008 0.8855565145707393 0.102 +0.6169082276230452 0.5294887044958074 0.102 +0.1280111460633878 0.4970920879906946 0.102 +0.9426658476797151 1.052857003559297 0.102 +0.6303618697756048 0.8467058454707415 0.102 +12.60557489678126 5.029885895933434 0.102 +0.4818506307103596 0.9327938281706176 0.102 +0.320987358068988 0.1398674318546672 0.102 +0.7373828018435096 0.6656622729435386 0.102 +0.361359329663983 0.8374969710848517 0.102 +2.021673207240755 -0.3021982036092711 0.102 +3.74012140911055 -0.4545415549451751 0.102 +0.2454727745198411 0.6056352446825938 0.102 +0.6373613984289521 0.6013818666439182 0.102 +2.772023599709395 -1.573236886912564 0.102 +3.873398764537422 1.1872116262955 0.102 +14.68712571221743 8.219656597420201 0.102 +0.381232523078396 0.4628005716627515 0.102 +0.134186585954959 0.926744802662874 0.102 +3.135944497632839 1.900957333512852 0.102 +0.5697686010556403 0.4982281325599959 0.102 +1.283651392763014 0.3145945958476983 0.102 +2.208298168086902 1.031792403861835 0.102 +0.4761296414724717 0.6853497342153865 0.102 +0.8056210442611916 1.120486584404868 0.102 +1.648260717914223 1.858992464633636 0.102 +3.655233890806122 0.9764244466761448 0.102 +4.363980997713039 1.025002659952176 0.102 +3.693148173324025 1.099719357478829 0.102 +0.7634468180517832 0.7338953904406847 0.102 +2.471099497915881 0.6601972114100777 0.102 +0.5400662122833675 1.059606677202101 0.102 +1.765257915265636 -0.8956523077042571 0.102 +0.3012452676916462 0.9606954069233558 0.102 +4.411916239917361 0.05927506966016931 0.102 +3.152435229951639 -0.1014406439971671 0.102 +4.89008467194973 0.6523465288096227 0.102 +0.6481852441233799 0.7697860403269217 0.102 +-1.917811571371946 0.1590074838010251 0.102 +-0.1146979872992435 0.009783954743222554 0.102 +-0.163945873073943 0.02301982918150661 0.102 +-8.869581139177294 7.513143003927482 0.102 +0.6058252447167896 0.5571048940229518 0.102 +0.7995943694496012 1.003308069320908 0.102 +0.7569438570293195 1.101302818554983 0.102 +0.2298768615267036 4.099604152848348 0.102 +1.391736324468097 0.5971961795347753 0.102 +1.021649435875608 0.6411281744321042 0.102 +-0.2916816724956724 -0.3999123349340067 0.102 +1.072159245684815 -0.1363549872614443 0.102 +3.853163807195554 5.175045600512133 0.102 +0.6161970862143331 0.0992577883696934 0.102 +-0.08570847607233764 0.7220099137730377 0.102 +-0.1426619158419975 -0.2831299526771269 0.102 +-0.8422868514654011 -2.451670897038475 0.102 +-3.080066235078551 1.069440895109087 0.102 +3.869693926492312 1.423972466189034 0.102 +0.3240639914601268 0.1675251023771754 0.102 +0.2219916414526339 0.5970220733329619 0.102 +0.1424807328632578 0.380568232547544 0.102 +0.1916016111290666 0.8201348514759751 0.102 +2.735951191337534 1.05329634981477 0.102 +0.3632074939029817 0.5668602654001612 0.102 +3.918268282276617 0.8389362446165912 0.102 +0.594839414377155 0.3590507670517311 0.102 +0.002078557917604091 0.02341043092806325 0.102 +0.422814166023594 -0.004160484873933651 0.102 +0.9667171609132053 0.298811458775197 0.102 +0.6166246998724542 0.3199538529395807 0.102 +0.9733041044114049 0.004848585707034913 0.102 +3.325460132315422 1.235594296020597 0.102 +1.307397010643 1.03931908952951 0.102 +3.809001372521852 1.043193343169606 0.102 +0.8686600456903728 0.8821331645730921 0.102 +1.357887516634468 0.01060946210195512 0.102 +3.993041799741384 0.1211551592708314 0.102 +1.08609191848743 0.1924430314890936 0.102 +7.056563381948642 3.722230354968169 0.102 +0.962374282513301 1.102079137324663 0.102 +3.324762346051338 0.07066837607587707 0.102 +1.163531821700825 0.07422472775030908 0.102 +-0.1593611033653096 0.1735046519482438 0.102 +0.3620033623576261 -0.1223919361012042 0.102 +0.3428898418860509 -0.09933411054388699 0.102 +1.610969445385069 0.6579828296796028 0.102 +0.2091107732635635 0.2281949919812795 0.102 +3.055353763499809 0.2984944021881398 0.102 +0.1092916942167083 0.152348974754749 0.102 +0.4126710951265324 0.3819402138968835 0.102 +0.7729485325418072 0.3755211733943974 0.102 +1.999831376162814 0.260986001161197 0.102 +0.9383836590870266 1.012145795357261 0.102 +2.414963417637297 0.4748026828781305 0.102 +0.06097601228653744 1.072897195818585 0.102 +3.565189182468795 -0.1900221051672468 0.102 +1.103645199381067 0.0172782554609339 0.102 +0.709537316444267 0.5941818684030731 0.102 +2.384234630743068 0.6789618860246881 0.102 +0.6892497583293887 0.7986653000067001 0.102 +-0.02832921889406538 0.4285125661754672 0.102 +1.282334792336248 -0.07404715042620501 0.102 +1.169979529881985 0.2822333061877162 0.102 +0.6835494049302461 0.3447415773265004 0.102 +-0.01171838087180428 1.064450820549635 0.102 +0.6015052358953255 0.3341394923419554 0.102 +4.404666738786824 -1.021125093337643 0.102 +-0.2710787010057157 0.1791349095487939 0.102 +3.368060082859198 0.8234260770650136 0.102 +1.640475639504796 0.07961834084994139 0.102 +3.221913367398174 -0.09249427294803378 0.102 +2.965743700244408 0.8428615600712605 0.102 +0.7092328286599665 0.4837658888531894 0.102 +1.943747393750218 -0.3015977047566585 0.102 +0.03309797899610727 0.2805133313168173 0.102 +3.273133979568848 0.8869731446544693 0.102 +0.6871990550232043 0.437706959999981 0.102 +0.2999543392336615 0.8330222347801055 0.102 +3.031621232423692 0.2485813760540361 0.102 +0.8804910172459472 0.4491873885541977 0.102 +0.6093646264606126 0.7258095767242263 0.102 +6.757034712457404 0.2922773526367715 0.102 +0.6675502885992001 0.494548497107081 0.102 +-9.153579062138348 2.073314031793636 0.102 +0.9792664288008881 0.3870381033014717 0.102 +0.7513528848315817 0.5024436715765488 0.102 +2.892943634794166 -1.035770279824436 0.102 +-0.02169322664277897 -0.1220544901764465 0.102 +-0.05558985198005048 0.6326157466444061 0.102 +3.954895612126937 0.593492118443145 0.102 +3.934562129632477 0.2350312121702917 0.102 +1.055011997452392 1.122480593574471 0.102 +3.486790397861906 -8.216565159988646 0.102 +0.726066252829821 0.9096376144137868 0.102 +19.15718926665836 -1.582541432325318 0.102 +0.6714832684219646 0.2452501325776451 0.102 +0.3980899345121484 0.6887884099855971 0.102 +0.441527820573725 0.1513590895012093 0.102 +3.239543932043228 0.05349210802610347 0.102 +3.725772934046028 2.140179196179335 0.102 +0.3461569555822281 0.7540974833880052 0.102 +0.8148565134318044 0.3769608103102973 0.102 +2.661208165594069 4.010521761972867 0.102 +2.143356812918896 0.3774105139216504 0.102 +-1.730163521790174 -5.985738853853214 0.102 +2.747308556769777 -0.08600031327156778 0.102 +-0.1532799344015376 0.7065741587998834 0.102 +0.1573879478841028 0.43117500848917 0.102 +4.233541890113673 -0.1793202495721327 0.102 +4.198410285303424 -0.3142897169939097 0.102 +1.897978520072999 0.7941919918571287 0.102 +4.116017771486834 -0.4556202381737861 0.102 +7.172326443132023 9.310356631520973 0.102 +-0.050208987925548 0.598287885717098 0.102 +0.2260866868366446 0.7226417281009526 0.102 +0.6135869137438003 0.6790937093774626 0.102 +0.316290867451532 0.9214611109213243 0.102 +1.017558861542681 1.052097397071084 0.102 +0.06807291893174197 0.841257737135267 0.102 +0.6281105141793463 0.3453302343367624 0.102 +6.008190029176038 7.180077849852452 0.102 +0.3416406781432696 -0.02755693416872895 0.102 +0.6489799765600313 0.4113073722315709 0.102 +0.34510733469139 0.7889648277837541 0.102 +1.871467888330157 -0.04552338141270541 0.102 +0.245554080354668 -0.08598085650604156 0.102 +17.36569613592364 5.836173631882502 0.102 +0.7007980008544464 0.6304791370486262 0.102 +0.9829781222883912 0.2546481439747876 0.102 +0.2882386199055788 1.033662675619224 0.102 +-0.06261513665662177 0.01615458263732846 0.102 +-0.03091110786149448 -0.01296721177300775 0.102 +-0.7767271053033495 5.024812917970479 0.102 +3.515435294614282 -0.5134475004616363 0.102 +0.1727492837993534 -0.1529827304451625 0.102 +2.407644460397207 -0.05236118285636502 0.102 +1.043150697497929 0.1572668791647397 0.102 +0.6459803126371839 0.1111345810905469 0.102 +0.8922925658390131 0.2177233920235548 0.102 +12.90455176226322 -3.822542283558241 0.102 +12.59055398572071 -1.9111757534908 0.102 +1.592499339861197 0.8891573474989114 0.102 +4.209878479302143 0.3698169080647545 0.102 +2.284713794201201 1.305586763609899 0.102 +-8.136851855289397 4.948787319644656 0.102 +-0.04004630798100581 0.6523278448648848 0.102 +-7.741022403725596 -4.681605786599021 0.102 +0.06099267638333397 1.027704490840705 0.102 +0.9614548053317803 0.09090153220290344 0.102 +0.9440985734631732 1.087667037676421 0.102 +0.7927728236057204 0.8888489892473319 0.102 +1.108427112035485 0.3148703848943608 0.102 +0.1185703437467216 0.5512866173429173 0.102 +0.4082242422725355 0.2432333983304124 0.102 +1.021666820379028 -0.01522394806085308 0.102 +1.007406421752013 1.00369399482144 0.102 +1.947861854861296 0.41657267057255 0.102 +2.070012224909703 8.938563963054417 0.102 +2.83881786515065 0.3021052813706673 0.102 +2.67055052360582 0.6740315471819686 0.102 +3.724019852188466 -0.8445014158891876 0.102 +4.000837719624178 0.552929299899685 0.102 +0.4811224922716488 0.02915450141835548 0.102 +0.2036462913305089 0.523673724510083 0.102 +-6.169376170192638 -1.784374276245304 0.102 +0.8928886806924321 -6.868193095806348 0.102 +9.70921073876646 3.838475330766452 0.102 +-7.573776988146172 -5.97463744932609 0.102 +1.040961359930122 0.3349277147067544 0.102 +0.2194496862772029 1.057783903754194 0.102 +0.01218285134568859 0.3948312639989371 0.102 +2.228431455530574 0.1937239778762132 0.102 +0.7408111137328189 0.5212245128348659 0.102 +4.385195281272194 0.7693309133160142 0.102 +0.9862821282619164 0.3520247457739286 0.102 +4.730481845888328 1.762204344880102 0.102 +0.4753529684080645 1.079580514701235 0.102 +1.01485682751838 0.4671989209146707 0.102 +3.969220667225858 -0.5085190892701248 0.102 +-0.01512807503332293 0.9772456810192642 0.102 +2.671532403045363 1.183400031765084 0.102 +2.305861024840466 -8.982195008284949 0.102 +2.989733035526577 1.715926393716626 0.102 +0.7470190043458987 0.4121266929263374 0.102 +0.9434946846349826 0.7806534408106428 0.102 +1.883641153718714 1.039582541608391 0.102 +0.1812337117269331 0.3500850797711466 0.102 +-0.423102225670982 0.3531089525345414 0.102 +3.217415911650354 0.3694777058798999 0.102 +0.3020739534548507 0.1273559893673097 0.102 +0.2694589907343299 0.1493682988892904 0.102 +13.05955634726848 4.588864967865837 0.102 +4.078910955337022 0.9542891562905992 0.102 +0.2635581752189795 -0.02845929769647809 0.102 +3.814265926830577 0.7276635670217674 0.102 +18.04936613274728 -7.021567523480868 0.102 +1.023828660796671 -1.629659460909169 0.102 +2.602697116624411 0.1452280040614979 0.102 +19.08786594400238 2.689290554561351 0.102 +5.626211828960028 0.129499148367249 0.102 +1.930345395075008 -0.416628115291967 0.102 +0.6950019212275681 0.6983882004225058 0.102 +0.1321843918862363 0.1653731169268626 0.102 +-1.659524635506089 2.630195314273397 0.102 +0.9581372576256911 0.6502658856771708 0.102 +2.096067927672278 0.6440860282945555 0.102 +0.8852992818212716 0.9598393409367967 0.102 +0.736209163994864 0.06444244133187876 0.102 +1.570908773894406 -2.855075118159012 0.102 +2.510272961682687 1.004000597546874 0.102 +0.07953452887332418 0.4974149917676443 0.102 +0.494547746535962 1.067728907702558 0.102 +0.8978855950305262 0.797603244920446 0.102 +16.44626543346513 3.911982064913581 0.102 +0.6611628842099594 0.6559465477497232 0.102 +3.658876875795605 0.1552702042398793 0.102 +0.2835155415199789 0.7079542773483415 0.102 +3.717298262736171 1.860730722710765 0.102 +0.3541791158423329 0.3310915020357812 0.102 +0.5994142589336248 0.05165083921239642 0.102 +-0.245347092382279 0.4032809765939014 0.102 +-0.2664454867816818 0.2990449470432139 0.102 +2.776415428634945 0.3701848231511293 0.102 +3.601211404410493 0.8918896455306884 0.102 +1.662131479652241 2.134460841646996 0.102 +0.9876442244730439 0.5842563281973885 0.102 +4.034561693967392 2.07689953429592 0.102 +1.20732264548594 -1.984389604563845 0.102 +0.2325417096249999 1.073372421841713 0.102 +1.082058410597627 0.5225461634085781 0.102 +0.8606035226406092 0.9640944771900369 0.102 +1.254973124501722 -0.03831075312246297 0.102 +4.840740818131553 4.409730410069168 0.102 +0.3740044215679554 0.3810996470511139 0.102 +3.197133754303817 2.720521715614203 0.102 +3.778041138157061 -0.03412098943436199 0.102 +0.7690926635156087 0.4574646910691693 0.102 +0.3544861862706381 -0.4050171947639433 0.102 +0.7254899258031225 0.8505513928831001 0.102 +0.4641871043650745 -0.00947862982235036 0.102 +4.832712773970213 1.023163569568839 0.102 +5.158868585113956 2.374379409371727 0.102 +0.754208987538256 0.2994771163781275 0.102 +0.9914281579396138 0.033728208920191 0.102 +2.616050738056982 0.4297306554691063 0.102 +2.037424452561986 0.8338852778706961 0.102 +0.7102330344669345 0.5103848677000263 0.102 +0.6960025155502851 0.3880199425317242 0.102 +1.415196965732037 0.2961821270750942 0.102 +1.009047435656093 0.2107170859386146 0.102 +0.9862348604805546 1.266122075731118 0.102 +2.861495728236049 1.1697290868191 0.102 +0.6402515353174777 0.7087164121816287 0.102 +4.041494311193134 1.593869199082677 0.102 +2.237413148413779 0.8167113683700686 0.102 +0.003168309117172108 0.9518691991791233 0.102 +0.4210157292885435 -0.09977977321714986 0.102 +0.8264939121721853 0.7640339101731944 0.102 +1.098846364367635 0.243971147202982 0.102 +1.027339669415273 0.3566806478863452 0.102 +1.77210039480945 -0.1306226589102025 0.102 +1.059561042115244 1.521236552507717 0.102 +2.802590121650726 0.748880711965547 0.102 +-0.1167456724833755 0.8071939620088354 0.102 +1.475896808373332 0.238166785086029 0.102 +0.7727738570837809 0.01740623564850253 0.102 +3.145833338697752 0.7257833452183796 0.102 +0.4469903996930459 0.2483446707291128 0.102 +1.901340036316963 0.8856228890440296 0.102 +0.8979755916897179 0.3046345035026929 0.102 +0.9171281223965865 0.8922268940742026 0.102 +0.0648184588908922 0.9384277808174492 0.102 +3.74226474228154 0.9831389097821088 0.102 +3.047452162561706 -2.527905090985741 0.102 +3.854244909886011 1.322306799453943 0.102 +0.8485378851270915 0.9360649929516076 0.102 +1.035866546118817 -0.0447492744386548 0.102 +2.177630004634257 0.6819216984258667 0.102 +-2.534959805694949 1.605737398772185 0.102 +3.411130714166594 0.6606069278381643 0.102 +0.3519682429608108 0.456729704310812 0.102 +0.1328485723155532 0.243274488926537 0.102 +16.86004044950575 1.852738189805878 0.102 +0.9237834321939795 1.802722563982931 0.102 +0.8713820744724003 0.02513703822195088 0.102 +3.149907485666577 0.3217833693277016 0.102 +3.071335238777816 1.187758455702698 0.102 +4.803635333877786 1.192883267971927 0.102 +4.61671061877823 -0.5401141770282798 0.102 +1.077963016501555 0.3629251138368425 0.102 +1.326814969806767 0.5104881947269548 0.102 +1.688583339877039 0.7637278522455238 0.102 +0.7171511840384477 0.6496096114138381 0.102 +3.295093939580829 0.6320403689348588 0.102 +2.390255909563151 1.489162332863939 0.102 +1.075485133964448 0.4722322516111082 0.102 +1.05120090545062 0.5527370537552836 0.102 +-0.02138943504751057 0.4012896464560388 0.102 +-0.03344320689257794 1.057114111794317 0.102 +0.9838830370425173 0.7256404552379531 0.102 +0.1275037588030017 -2.238032279370053 0.102 +2.804040875797136 0.9279601123973833 0.102 +2.690851483158386 -0.3248945393867397 0.102 +0.1838648655581359 1.028661515042598 0.102 +0.8726430569488161 0.9100243390164 0.102 +7.091418053550004 -0.06175530030054128 0.102 +0.942185577527151 2.232111316539971 0.102 +2.373548530391637 0.7562972229515119 0.102 +0.1575578412605942 0.4669371845643123 0.102 +0.2683340863387775 0.005285605319966518 0.102 +10.22736457984733 0.4716507378805077 0.102 +2.601839287593043 0.06610043830336494 0.102 +0.6698794168237182 0.5151834873755199 0.102 +1.45781161486012 -0.8348062860533557 0.102 +3.800536899993751 2.470901769434326 0.102 +0.887312864612782 0.9822720678793544 0.102 +0.6762695936555886 -0.1332834780853081 0.102 +0.6388109294633036 -0.1652273991736719 0.102 +0.6527046535583848 0.803950998549217 0.102 +4.504574169764034 0.8457410481087445 0.102 +0.01051565243881873 -0.0480146080409557 0.102 +5.538122044006658 5.430246019296548 0.102 +0.9811506354251976 1.050143740211801 0.102 +1.038326240672082 -0.1491020500391651 0.102 +0.1879318393162029 1.060808129838798 0.102 +1.943552859066577 2.882449309889859 0.102 +4.130307577762026 -0.3511322259692891 0.102 +0.9271750004570198 1.107610108184102 0.102 +1.527711526028678 0.5907856401649036 0.102 +3.392105280519923 2.173981013874446 0.102 +0.7132213106019163 -0.1699005226962201 0.102 +3.117284524969548 0.42163206503622 0.102 +1.798021871582289 0.6341288813635338 0.102 +0.1487390819457248 1.025144883369215 0.102 +2.570221745737729 0.9073931647948403 0.102 +2.365047246630623 0.2801203673161903 0.102 +0.6871485095608062 0.7701246944100795 0.102 +0.9127164931942437 0.9402455578917226 0.102 +0.903168493904278 0.90958199665185 0.102 +4.624294112368024 2.094410285002808 0.102 +3.666111950961409 0.890737404874239 0.102 +0.9312301830101621 0.1806117386013402 0.102 +-0.04960577112154473 0.6846331712005911 0.102 +-0.4725979879496039 1.094417986395666 0.102 +0.3744118870233577 -0.09474403023497481 0.102 +2.470671658305106 0.05218799233285597 0.102 +-0.1186257025376316 0.3386413498084732 0.102 +-0.03614667667238539 -0.07554382515632987 0.102 +-2.842819871518934 0.4563119840291779 0.102 +8.398981965019662 7.924679880653961 0.102 +1.08551236155302 0.3159677326103564 0.102 +0.2660983466312638 0.8385876398328586 0.102 +0.72858814898281 0.817472327695161 0.102 +5.642801361663867 -0.7442708266478679 0.102 +0.7647651675180861 0.9002943471035462 0.102 +0.9462260142026043 0.02557096821658486 0.102 +-0.02699831029275352 0.07610122870761175 0.102 +-0.1314658472988897 1.378300215601392 0.102 +0.2687795721287944 1.09959919367732 0.102 +0.6892201800269622 0.552307027417637 0.102 +0.254994672972148 0.7775020197889804 0.102 +3.737012878723105 0.03668963987872906 0.102 +0.6715361849210062 -0.9614865135074488 0.102 +2.839454276315361 0.5845136731512508 0.102 +-0.01887167219672858 0.1789899910525548 0.102 +-0.06270158752195024 -0.09917681853492143 0.102 +3.139317323679275 1.190570408002412 0.102 +0.9725055892761925 0.4139129314224162 0.102 +0.2064240327815708 0.9564886723501905 0.102 +3.836869593628915 0.2391209789869078 0.102 +2.941449237696933 0.2533417809466622 0.102 +-0.06101858331693136 0.7961474243955963 0.102 +1.846894844304007 0.3704950116270775 0.102 +0.9185194948625643 0.8291014407566157 0.102 +0.07479526411127085 0.3521330434333086 0.102 +-6.771931854611838 0.5481466952152814 0.102 +2.98165018379834 1.240229535915374 0.102 +16.17049195456953 -7.99540051828455 0.102 +0.8037695519821765 0.7295124716029051 0.102 +19.14494729258787 6.007014963302728 0.102 +0.7545456239349182 0.5892140693629924 0.102 +0.6339682108531193 1.179010064488246 0.102 +3.606994855826736 -0.03424604508523919 0.102 +2.857533177119852 0.1959541222362604 0.102 +0.1867453141019538 0.7190307053126094 0.102 +4.549901401756385 -0.6849363464435801 0.102 +0.9192997913493623 0.3890528741893334 0.102 +0.3326096946365791 0.8792602839281886 0.102 +15.05610682558712 -0.1518387335185105 0.102 +0.1493616480676304 -0.02544399228399958 0.102 +0.3711093287782843 0.4108026613093079 0.102 +4.566155498255304 0.103881941191876 0.102 +2.092137476216811 -0.9322438250577689 0.102 +-6.232042558552201 -3.121393276840883 0.102 +1.372965942733658 -0.07885220712613329 0.102 +16.02163574336995 -3.179589669138043 0.102 +-0.05007129374959893 -0.3705565102613232 0.102 +0.05476146508067699 -0.3250366211247266 0.102 +0.1428216397494047 0.5509737266512128 0.102 +0.05161320488796772 -0.06489491568306853 0.102 +0.7308499405145054 0.7499477360295249 0.102 +0.8943548045462862 0.5779931537741493 0.102 +1.06931101854956 0.04189477708471475 0.102 +1.056269053398635 0.01908268756540491 0.102 +3.797162897657202 0.3973492856929484 0.102 +0.942888862994085 3.693986492682432 0.102 +0.881033946602655 0.8111223744288122 0.102 +0.8220259037262515 0.4544404303873048 0.102 +3.96397903083216 -0.8847769621833059 0.102 +5.796519102543106 -6.604488259955317 0.102 +0.900379469202686 0.8790305588697597 0.102 +13.76298041609218 -6.248570826671699 0.102 +1.027444131621103 0.7914379768855966 0.102 +1.052893281914323 1.008275727224573 0.102 +0.1967226690933665 0.686521594413502 0.102 +0.8691269984458672 0.8497790427370728 0.102 +1.050035527440283 0.7464076054388217 0.102 +3.846769157571012 0.6563119250618203 0.102 +14.36999229382404 -8.006146524605553 0.102 +-0.09510686969211296 0.6291776798441561 0.102 +1.014991171582274 0.1055526229815407 0.102 +0.9738936737743941 0.1869022276365422 0.102 +0.8934103733643783 0.1434398248245093 0.102 +0.9212914989512466 0.1491736225475061 0.102 +0.7510269481226004 0.1738492088607089 0.102 +0.9201725061124884 0.8011322950331329 0.102 +-2.205973662725818 -0.740908991415659 0.102 +1.069124518691783 0.8438550892361824 0.102 +1.129130671501642 -0.07491291141331631 0.102 +2.253737284281337 1.873061814227184 0.102 +-0.002419109425604634 0.3089225171130984 0.102 +3.426291427841881 -2.235819947819429 0.102 +5.252765957689061 0.9034983920323232 0.102 +4.287517005234543 1.080764325968269 0.102 +1.277329193680945 0.1313609586166509 0.102 +1.016677670252828 0.7175526126782685 0.102 +0.2993877123532699 1.014038380210859 0.102 +0.9047422969644147 0.001216277386827737 0.102 +1.097790335363698 -0.1773202569834437 0.102 +-4.335922008456722 6.278561760650421 0.102 +0.252520829028624 0.3050158256472495 0.102 +0.1956265181913092 0.652885643717626 0.102 +3.350599292050251 0.6966519897606167 0.102 +5.786165145306197 1.034462177745067 0.102 +0.1226184405839486 0.04062299941283905 0.102 +0.2738161766382047 1.079726907138213 0.102 +0.6514876991001504 0.4402441944938606 0.102 +1.059039956266681 0.3369463267239932 0.102 +1.418190329857493 5.341385127802514 0.102 +13.56253911329315 1.396513772583325 0.102 +2.126405236478972 -0.3652902501728548 0.102 +-0.1295438766242554 0.2487476461073487 0.102 +0.244757601292791 1.093275850388352 0.102 +0.9150876871448688 0.8636092640434125 0.102 +-0.09662245413092962 0.296807990529518 0.102 +2.281056656220434 2.222882711118725 0.102 +2.685778744110694 1.551632689123826 0.102 +-0.09006168428507896 0.596324412596411 0.102 +0.8005105323580297 0.4130318687547844 0.102 +1.03036714311079 0.8484202575815774 0.102 +2.182570186601174 0.02541407792387352 0.102 +0.4365024153068449 1.084581541976616 0.102 +0.528934267598877 1.099731558977721 0.102 +0.8385308447111354 0.1011010593820644 0.102 +0.8415068073584143 0.8814522160063928 0.102 +0.9670976371986023 0.8051561996466895 0.102 +1.399615359533439 0.3704857090115535 0.102 +1.131356990102174 0.1178523332916928 0.102 +1.708988871533305 -0.4960660216894105 0.102 +0.351081279738373 1.110255182634445 0.102 +2.263882836741821 1.549475432018226 0.102 +0.8361300013537091 0.5391736747198151 0.102 +3.48364909858135 0.5076709295158032 0.102 +1.39018367795742 1.058226400922273 0.102 +2.429429981755311 -0.2899467072881971 0.102 +3.48795754333868 -0.1883645381826874 0.102 +0.8387412650730461 0.974723033946335 0.102 +0.7338100428416863 1.104316925559488 0.102 +0.7094965363236024 1.107890297268796 0.102 +1.615724057134534 0.547669330568566 0.102 +3.476718191384628 1.767465843457223 0.102 +0.9293854923069829 0.9455218797407636 0.102 +3.245992317744431 0.3337983122007906 0.102 +6.773229066776578 4.82946293659868 0.102 +4.091140502492074 -0.06876111702217176 0.102 +2.686543707324174 0.8230179555432824 0.102 +0.2849527456582803 0.2925311580259869 0.102 +15.24680450419198 -2.712058088090726 0.102 +3.122587132793043 6.716064063949587 0.102 +9.164662445307723 -1.988455817032183 0.102 +-3.293067165843052 -4.003132353129846 0.102 +0.8439833348484745 0.05781445229893289 0.102 +3.25486977516817 0.9609815492052216 0.102 +0.0004572921402100565 6.602381463726826 0.102 +0.8302200004702243 0.5926753054335959 0.102 +4.041822954457996 0.5998490881987902 0.102 +1.989474705808302 0.8339038102014207 0.102 +0.2644315366013263 0.7581738215431936 0.102 +2.222315204871744 0.9282546429552098 0.102 +0.937910638890584 0.8660285641518791 0.102 +0.9431035475876133 0.607334201051229 0.102 +1.807910293286049 0.3020347378682837 0.102 +1.284903498883004 0.740682947583839 0.102 +-0.6383829640364588 -4.537764853724988 0.102 +3.145418358801738 0.2334548404578427 0.102 +1.006439751806963 0.7626809232446754 0.102 +3.572225666924855 0.4025308645352859 0.102 +3.984551094042801 0.2009051334161297 0.102 +0.2622469854990243 0.4745136884838578 0.102 +1.095478460536569 0.9471103071345619 0.102 +2.302926160981927 0.7069464054441275 0.102 +0.8920447584052161 0.7252612228188039 0.102 +2.599366023120474 1.101006584675851 0.102 +0.9467850570314552 0.827207256372133 0.102 +1.4317663727571 0.03810236827350488 0.102 +0.8369918633111251 0.378851255724455 0.102 +3.48609833224408 0.8240368215506838 0.102 +-0.09247773982795637 0.908768665998768 0.102 +2.767556379201507 -1.175386369839458 0.102 +4.201980849935211 0.01108952300873672 0.102 +0.8838551248368017 0.8338608280716269 0.102 +1.133881758848639 0.03086826913813885 0.102 +1.399474662105439 0.8510205892899054 0.102 +1.071213687068015 0.8121779944082355 0.102 +1.104378840085047 0.8126092788257357 0.102 +0.6868969957835092 -0.2400819144233756 0.102 +0.9736313149844689 -0.113184939636237 0.102 +2.617736167393622 1.307228325979643 0.102 +0.08640970811223406 -0.1595292148561392 0.102 +1.12248325533627 0.1487328401581187 0.102 +0.03753092391424322 1.025736020858614 0.102 +1.002076429121278 0.7832817632059165 0.102 +3.981811699388471 -2.733306881357258 0.102 +0.9729169482664735 0.8981969120171693 0.102 +4.282089919629701 -2.016128153018615 0.102 +0.9858525174400193 0.7688674351329994 0.102 +1.004958667677176 0.6870666145689248 0.102 +3.461512449372619 -0.0532346229815885 0.102 +0.1610348251276451 0.4982544673228594 0.102 +0.6029924151464006 0.2117044200408913 0.102 +0.8844621797102857 0.8648653639438588 0.102 +8.114330748033945 -1.614649543252393 0.102 +0.2667883591653561 0.2024337397319743 0.102 +0.9079140602713092 1.093129283243383 0.102 +1.525929859085704 0.8064727555268656 0.102 +0.9506478934916017 0.003204465534543384 0.102 +0.725614033080647 0.1105482386572647 0.102 +0.8609211560773871 0.1374545003239725 0.102 +3.143425862697359 0.9091908871213026 0.102 +2.776803567916653 1.078597190707841 0.102 +0.7086529678052388 0.08304438901925873 0.102 +0.04170782604217242 0.9815328274752281 0.102 +0.9500407658038189 0.3532600286403854 0.102 +0.7444378255504795 0.6231859498372705 0.102 +2.588306801114582 0.5921855605992917 0.102 +3.667869279725701 -1.097324537007683 0.102 +1.363345830170167 0.09039361586654843 0.102 +0.4834591527527928 1.045202448143993 0.102 +0.9738145704781153 0.7445998782765401 0.102 +6.186102951743925 -3.194933848092486 0.102 +0.7983336981049377 0.1242896652551767 0.102 +3.860353908992479 1.587409467373581 0.102 +3.848718889431726 1.760213611400385 0.102 +0.7955602192468003 0.5939256634003158 0.102 +1.017548813684963 0.8210154721517877 0.102 +0.8898783447772616 0.6557266510459883 0.102 +1.052372696516745 0.7124958582634633 0.102 +3.573317341258559 0.5858331097410812 0.102 +0.9746876399473988 0.8721137933900098 0.102 +1.111976325286089 -0.1019105681380036 0.102 +1.094831039082582 0.366186267461767 0.102 +0.05638694148720932 0.07890844291793479 0.102 +0.6072465218016648 1.298059183049852 0.102 +2.293295371585505 -0.3583532017983334 0.102 +2.44485159807539 1.231384786057194 0.102 +0.3741742236127205 0.2899522184307457 0.102 +0.9942278719425242 0.8261781130291365 0.102 +1.147601785222259 0.8114236618226971 0.102 +0.8474473579237719 0.6322953480008215 0.102 +3.605296302695558 0.2372353968648445 0.102 +1.463129948706543 0.4367829827248764 0.102 +1.034686977138631 0.730918997087489 0.102 +0.02734315242422215 0.9602698706637747 0.102 +0.5483911493728514 -0.2201050508487613 0.102 +1.467660536909611 0.9355519366754833 0.102 +-0.009556352768029694 1.043595677246205 0.102 +7.055573802253083 -2.776348164151929 0.102 +1.051139540794227 0.4053604591024436 0.102 +7.492210720488833 -1.852579492376267 0.102 +1.905599588205722 -0.189609512843892 0.102 +7.920297748028689 -0.1759503097151347 0.102 +-4.105816015917396 -6.8818042896351 0.102 +3.068724480249143 0.9424448798330451 0.102 +13.53294477936497 0.1151923135346315 0.102 +10.64807324708857 -5.459617765296144 0.102 +0.9656311302349813 0.7839481245279251 0.102 +-5.741994460770059 7.190705089802663 0.102 +15.20607407371061 -5.514079980093651 0.102 +0.02517538458404113 0.1788236539830557 0.102 +0.1529164029871551 0.9026600931406343 0.102 +5.341026205632928 -2.618850466444822 0.102 +9.423856876362386 8.540671032823669 0.102 +1.900818213519341 3.430599251144593 0.102 +0.8245143229652444 0.9064109629983916 0.102 +0.7683953913554461 0.5013766691233781 0.102 +-8.273213104222494 -3.434114609519986 0.102 +1.919955155201265 2.123016830615291 0.102 +1.17306875383233 0.7399099250810132 0.102 +0.9509943190133654 0.8492125756086517 0.102 +3.985442343446798 1.280431545055995 0.102 +0.4058810526799709 -0.3046254462010445 0.102 +5.104010802074273 -4.588022676104059 0.102 +3.159151825752637 -0.6235254176480401 0.102 +1.033075613746212 0.7621947941519132 0.102 +-0.002182348354098283 1.318412106335938 0.102 +0.9980647398595919 0.7717256996241422 0.102 +1.003029906812652 0.7363129674106424 0.102 +14.96114156151822 2.630329278235441 0.102 +4.491413532459988 1.164346273437737 0.102 +0.08839410378120142 1.09678653719928 0.102 +0.112646342980838 1.091488045887723 0.102 +0.9736960632303048 0.8496099313009456 0.102 +2.208337416299585 -1.874515105082226 0.102 +0.8032523405679833 0.7665447027373545 0.102 +0.7505024470872765 0.7776979943224417 0.102 +0.9471993871696274 0.8870308735627496 0.102 +0.6280000874811291 0.04543659574656898 0.102 +4.903917543167893 5.128763443668665 0.102 +3.358242422942163 1.131485375353387 0.102 +4.034153596535857 0.7495704627115213 0.102 +1.075690409160577 0.7793128200192143 0.102 +1.105775614586384 0.7793811982196325 0.102 +1.123225223250051 0.7935652153760372 0.102 +17.97565803655597 2.341648336529556 0.102 +1.091714937530492 0.05672725020035528 0.102 +1.388899941864276 0.9270414109428206 0.102 +0.2411821962713432 0.1749692524032949 0.102 +4.136196073001312 0.8475421240577107 0.102 +-0.5677389568756492 -1.647088175642341 0.102 +-0.7519838440991385 -2.077910556123662 0.102 +2.836892580483553 1.031405085317059 0.102 +1.045816161675618 1.170296937571545 0.102 +-0.06238654060362506 0.1973688111947247 0.102 +-0.4170385447379121 -0.2089583104537486 0.102 +1.913974090772116 1.282422882312915 0.102 +2.195942898138677 1.258757250894561 0.102 +2.064897425054474 -0.4586514581587653 0.102 +3.295295516701146 0.4709589214783186 0.102 +3.427041964237331 0.4836146007971928 0.102 +0.8543687418223984 0.7816045130017196 0.102 +7.623718662365352 6.163125250562452 0.102 +1.053245116143982 0.6051223238577443 0.102 +0.181016778767263 0.878440927158623 0.102 +0.1035196227287858 1.050653280695974 0.102 +0.7453366993193227 0.5507616237197177 0.102 +2.834997306823235 1.816188987041925 0.102 +2.9626714094348 0.5541372274095274 0.102 +0.485075537332673 2.161202196950226 0.102 +1.045341321036662 0.7780431904887083 0.102 +0.2297433040727234 -0.1671508640513041 0.102 +0.3361599224068627 0.4681622798063874 0.102 +1.163151497614791 0.4629095811137579 0.102 +3.857236976108327 -0.3017306018215222 0.102 +0.01370640279417963 1.000960746926534 0.102 +1.057761518554802 0.7950316526178658 0.102 +4.546275255256452 2.451874923593595 0.102 +1.09593813374013 1.133703125160438 0.102 +0.04605639482471898 0.1128660302044482 0.102 +2.937093097454127 -0.2446472167816597 0.102 +1.485606674675858 -0.9994962098999313 0.102 +-1.536485614366047 3.765778686724591 0.102 +4.033590878647944 0.8509271778293269 0.102 +1.255222141608595 1.363102559268429 0.102 +2.134120270831171 0.4458444848717552 0.102 +2.940080520731596 0.1563990526911622 0.102 +-0.1158437707549668 -0.2120221627968276 0.102 +0.8642308916285408 0.5871839128903955 0.102 +0.9887536161115755 0.8044746049007663 0.102 +1.060722605381084 -0.7732338781300508 0.102 +4.274551313890627 5.554075444532761 0.102 +0.7304807639539219 -5.154147674093793 0.102 +0.5669088342426848 1.091117900855007 0.102 +0.296936119757031 0.727717939773073 0.102 +0.1398943568673287 0.3531250455485898 0.102 +0.1089638431616473 0.4584575361601448 0.102 +1.34002475162902 -0.2119789036532587 0.102 +0.4608141942808766 0.06920536919451484 0.102 +1.090039870108545 0.9175394711991809 0.102 +1.457099640813954 -0.1673115560498161 0.102 +0.03990137969898258 0.209930444974149 0.102 +0.5312930761697773 0.003263721743639622 0.102 +5.015036834916328 -0.182639687659688 0.102 +0.9357856282741283 0.9048493691420736 0.102 +1.026963855776734 0.6632469854367778 0.102 +0.4916017984822572 -0.06716085245182403 0.102 +0.8097924547215882 0.2310013256554384 0.102 +0.1152233338090311 0.5284340227640599 0.102 +0.9996758797420029 0.8741587519744586 0.102 +0.9903344025725568 0.9611239489059802 0.102 +3.389199544662802 1.043389189013979 0.102 +-7.032826036858866 -7.585059180683194 0.102 +0.4900285019011279 0.3040896861730855 0.102 +0.8752381741177857 0.1749963891309682 0.102 +2.537869426539895 1.974374017781692 0.102 +3.948791465106741 0.3824965474731948 0.102 +-0.122106386618233 0.4653662462352899 0.102 +2.654756222511405 0.1783501250482139 0.102 +0.1403121786182599 0.3205993820967473 0.102 +0.7004908540241461 -0.03246649297897759 0.102 +0.398579779985769 0.03615659928491974 0.102 +7.18935451264848 -9.098637140095997 0.102 +1.981271346914848 0.5372064794094055 0.102 +0.8564739029471236 1.110731265396449 0.102 +1.038813921405612 0.8096058766670839 0.102 +0.2455845192109051 0.2208793634088747 0.102 +0.08954950112664511 0.2901596464459323 0.102 +2.743688243522254 0.161331419424225 0.102 +0.2579560861416074 0.9131757238206626 0.102 +1.960826895984577 0.6034751305474492 0.102 +5.776867975757035 -1.767278051229351 0.102 +1.950267045715164 -0.08650254453900987 0.102 +3.600267515345602 0.6443207211981876 0.102 +-0.03082622149599065 0.3327555814334582 0.102 +1.479309080942484 0.6895357839762051 0.102 +11.71882179900404 -3.033075584840009 0.102 +1.314799536756759 0.8948484451286757 0.102 +5.767613693732233 -0.2313239080956381 0.102 +1.35504477656695 0.2789627271086078 0.102 +0.9039308852910261 0.2784629192940062 0.102 +-0.3318437947195728 0.7847581397492206 0.102 +1.552227441161119 -0.2699417958215408 0.102 +2.599180577410634 -0.6675145320045951 0.102 +4.711285352461433 -1.729602353591539 0.102 +-4.633948433067326 -0.7328633855929093 0.102 +0.8714735949334442 0.753716461547424 0.102 +-0.7779042340740349 0.01412279302449198 0.102 +0.1308899828631276 0.02763179338103357 0.102 +0.9541245674349345 0.6907040759339811 0.102 +1.05749935158774 0.8617162249606991 0.102 +-0.08360938340052132 0.9802407633899013 0.102 +0.1914403341053656 0.02464879100627148 0.102 +0.8990693365701776 0.4355449223615249 0.102 +1.439992666098825 0.5524858697952081 0.102 +-0.06431659859864505 0.8626048537714395 0.102 +0.885640654320032 1.113983484679977 0.102 +1.626232474985985 1.017680515362204 0.102 +3.450836074715505 1.155508364371019 0.102 +3.847274816876168 0.8692098264379997 0.102 +1.25467245280016 -0.1550500943424542 0.102 +0.3769742874286562 1.128876596432135 0.102 +0.1806647151149265 -0.04376095676682783 0.102 +0.408196821180658 1.220534683075303 0.102 +4.066741204839194 0.8708593147723077 0.102 +16.75976644483909 -2.303117337150079 0.102 +0.2055689048690685 1.073614627337083 0.102 +1.06313371996133 0.7625862301757889 0.102 +1.77010622498807 0.7820617206083372 0.102 +0.8080158944254231 0.09255190608118412 0.102 +9.551971605804113 2.83475230309504 0.102 +1.053007634485324 0.8281333581075284 0.102 +8.75661320886489 -2.977902105722208 0.102 +-0.07699337092894513 0.92367665269883 0.102 +-2.487631006090171 -2.068149217509582 0.102 +2.147247593841278 -0.1892928964324183 0.102 +0.0005193140798308688 0.9359939005809836 0.102 +0.04189060336845413 0.9423376901385623 0.102 +2.191951545341777 0.4682608968815162 0.102 +0.8258598457605693 0.1607345482273219 0.102 +1.498739354429971 0.9077401807597687 0.102 +1.000065401934016 -0.01502227892591405 0.102 +3.255392539943256 -0.0424488580760287 0.102 +0.07601983914470836 -0.04331449468364877 0.102 +-0.7177979302571337 -8.365612538475554 0.102 +0.3156027842911308 2.752780366814154 0.102 +2.241030015198125 0.2993021986863983 0.102 +0.9879043374262491 0.5536267900391783 0.102 +0.781196173051467 0.9263896717134796 0.102 +1.865407385164416 1.185358098587368 0.102 +1.065651601949942 0.648375153250488 0.102 +2.694035711713851 1.303674569613178 0.102 +2.472639733012189 1.60919967132374 0.102 +0.9456572432648169 0.7577261606736656 0.102 +1.315925298657056 0.2049990986888264 0.102 +2.280837314783023 0.3562256165515691 0.102 +0.7832843645791405 1.187642378341696 0.102 +4.797791066558955 2.962186092146989 0.102 +0.8757834835165179 0.2677433533752701 0.102 +18.910495957172 8.170144415236297 0.102 +5.90149307986876 -3.719543065387747 0.102 +0.7843673517505186 0.07407870862331545 0.102 +0.842992826302661 0.7352638824448613 0.102 +10.22297565097026 2.059192191645153 0.102 +-3.6413950831226 1.399887858647026 0.102 +2.663242824875271 -0.1576552230500101 0.102 +5.315213411518084 0.4771491769081484 0.102 +1.049789783115248 0.8831514743528782 0.102 +2.068513716145805 0.3011178391417139 0.102 +1.962499518460837 1.150354939633662 0.102 +0.7132401606816244 0.06055109909372612 0.102 +0.1350531789731657 0.8598401892882636 0.102 +3.733941933115894 0.30339038722029 0.102 +3.334505115220329 0.4037608434968819 0.102 +1.614738128587641 1.064728788643794 0.102 +0.3185870727326933 -0.1118124959759383 0.102 +0.2629534484715512 -0.5174688066326896 0.102 +1.054778570322126 0.08632830690001589 0.102 +4.812771860109997 7.990277622881305 0.102 +3.722895115393277 1.423025815612913 0.102 +3.733723824539322 -0.1757299883689604 0.102 +0.9269349014571366 0.2833311415983742 0.102 +0.781611190343825 0.6181313851259875 0.102 +0.02195276597686929 0.05538054392916354 0.102 +5.105610939146199 2.785432638993807 0.102 +-2.93332681574866 -6.423381650179692 0.102 +-5.542423855038649 3.446206951339404 0.102 +3.096270548674112 1.017866123401269 0.102 +2.17594520593429 0.2614389615968288 0.102 +3.479359607331976 -0.2806402705624858 0.102 +0.8536262070331306 0.5004482632445502 0.102 +1.306116241414401 -1.265781963446586 0.102 +8.917797857841267 -0.2996183827867898 0.102 +1.372758428686551 -0.3991511717716634 0.102 +2.246893836351149 0.4449619037338379 0.102 +-0.1150929792057599 -0.1126901937982479 0.102 +-0.1394277427024346 -0.1218459402000488 0.102 +4.093591445853646 0.5550133167258482 0.102 +0.6941285613923671 0.0369899332070396 0.102 +2.929255039563234 1.067512712569468 0.102 +1.068258053224481 1.04973286897617 0.102 +3.40770115697284 -0.06521992148197432 0.102 +11.08292621402616 8.187096954694319 0.102 +1.002092469778871 -0.1502367210425921 0.102 +0.06611039017773804 0.2500935436442662 0.102 +-0.1165549341337921 0.5617565163609208 0.102 +0.1482490366159679 0.766320658059661 0.102 +0.9889228988168675 0.6823337993927912 0.102 +11.76092381472618 -1.155387620953856 0.102 +7.457062050559963 -3.792026604339941 0.102 +1.056390986395318 0.1947790661206366 0.102 +0.168429048522065 0.6920384026144453 0.102 +-0.4231225930858267 1.674905535607479 0.102 +-0.6551397843087613 1.865265139195138 0.102 +2.769313084128294 0.1066931386565322 0.102 +0.9349885627347502 2.02140312728652 0.102 +1.905668546625684 0.03559674029748415 0.102 +-6.089698038758862 3.941237676087036 0.102 +0.3531780349844413 0.1989776451965355 0.102 +0.1820173061102339 0.4692980367244333 0.102 +1.019855297948127 -0.08207674880574686 0.102 +2.253993171610103 0.6626234053913524 0.102 +1.974428256784921 0.7118899555022118 0.102 +0.09053729110591649 0.006405047032413493 0.102 +0.8760945530899199 0.1298182015486938 0.102 +4.207046588695579 0.6624843317085335 0.102 +14.92426908504133 1.347346746671873 0.102 +3.929345708885863 -0.1559489189525861 0.102 +-8.153012895304897 3.024011731706512 0.102 +0.4991963728635853 0.05734010115582977 0.102 +-9.12478492960464 -0.4926558074373948 0.102 +0.28025961963489 -0.09956995555743091 0.102 +1.010860227768968 0.1945780759832905 0.102 +0.2400977528089661 0.846893288145914 0.102 +-1.978137901467675 0.5273939843894114 0.102 +0.3379674868726524 -0.2582971052832445 0.102 +6.61863439298377 1.781317635710195 0.102 +2.628031917752877 0.8962404804863783 0.102 +-0.27022962513736 9.164148864083025 0.102 +0.5906248138412951 -1.497126393796336 0.102 +10.18705849581743 9.15789103994352 0.102 +0.2139365165817648 0.2863955429177865 0.102 +0.1246910947775826 -0.1055577534242588 0.102 +0.5444636737471912 1.106076300207468 0.102 +2.636146524286952 1.23688595160049 0.102 +4.265093017509242 0.5829861099114271 0.102 +0.04916913332505744 0.3474662557645367 0.102 +0.03559588498816751 0.3657740266751531 0.102 +3.971832824005396 1.847597631832934 0.102 +2.927795169217654 1.956723262381578 0.102 +0.9737860590254716 0.6034644108687185 0.102 +0.2166500392334018 1.027979420230581 0.102 +3.584892377588313 0.9577165899599258 0.102 +5.51686117375233 2.319915195159523 0.102 +-0.1278878468523216 4.887133207121515 0.102 +-0.05026830398646934 -0.2666342078402589 0.102 +3.232982034754838 1.284007756901796 0.102 +-0.2601390681540984 -0.5543183328755564 0.102 +-0.09257908115572344 1.133196829709251 0.102 +-0.04684653167236903 0.1655043521157879 0.102 +3.000474141568927 0.956027077540195 0.102 +1.003205669505218 0.6437102645321031 0.102 +4.275584115697344 1.37237466534871 0.102 +1.024058329186742 0.01247424102252265 0.102 +-9.036212928336694 -2.237854671918158 0.102 +1.793111660041146 0.9875957402398782 0.102 +0.3278933375401609 1.132117390524029 0.102 +1.793899948501971 -0.7454760923735304 0.102 +6.453527784325177 1.207208256151837 0.102 +1.795359345258838 -0.2326695690140921 0.102 +2.253638371414312 4.100596898467798 0.102 +0.2572983249279255 0.07685857695405543 0.102 +-1.130494238415131 0.4954505569755551 0.102 +0.200381120021762 1.01434005533087 0.102 +3.547964085626964 0.6219504933130799 0.102 +0.7181623967867361 0.7837101787281247 0.102 +1.698804696035467 0.03350450932319996 0.102 +1.064839232593804 1.092197481623683 0.102 +0.06571559878284661 0.04819200364471196 0.102 +0.9426858884435789 0.5782040382061548 0.102 +0.8146648221204741 0.5301236224761831 0.102 +0.2191759310527053 1.098521120479661 0.102 +0.2228510239613943 1.124826730053222 0.102 +0.8696982646465512 -0.1896419767682431 0.102 +-0.1143523386627717 0.6096230511356657 0.102 +0.9975095307110657 1.178871246361989 0.102 +1.033746953988669 0.4218494676278737 0.102 +0.9923101209935896 0.4286678372291041 0.102 +2.968716302404715 0.4293550003757747 0.102 +-0.09974026816927881 1.620185402406218 0.102 +2.527877785106086 -0.0225086160855755 0.102 +5.008136770629054 6.213471542912027 0.102 +2.055433397023626 1.111620412941827 0.102 +-6.456997031407678 2.412657158001307 0.102 +1.172394494748936 0.3258904481081248 0.102 +-0.03735591190174326 0.2468849132756653 0.102 +1.375712893005855 1.198917438826835 0.102 +0.1734072351056106 0.9214245246926219 0.102 +1.049775191007416 0.2607378166313416 0.102 +0.8589177482945701 0.2063572288142843 0.102 +1.09710757846364 0.3846514368430432 0.102 +0.9352407857770346 0.4957111860614919 0.102 +1.057192862052581 0.6769436078724419 0.102 +1.885829873345017 0.5298833824745429 0.102 +4.14413677291887 1.092969893556687 0.102 +3.908549847601062 0.09893362007757327 0.102 +0.9594705842035547 -0.0421011406499438 0.102 +2.145625197588348 1.448583172758967 0.102 +-0.4748844712390455 -0.6388659579838701 0.102 +0.8062546833415831 -2.289424258394936 0.102 +0.2602592413042592 1.039378833874737 0.102 +0.6579653984556435 1.134028146529607 0.102 +2.93167947054308 -0.08964369156607412 0.102 +2.882047630015291 0.6197635304227389 0.102 +3.850470130431902 1.08183577890789 0.102 +1.753657873623132 1.082633662756458 0.102 +0.2196608408686617 0.9275971694555023 0.102 +5.245069574269357 -0.8966565965494354 0.102 +3.030923447791216 0.3534979149341146 0.102 +15.04924537957704 -3.719889094318826 0.102 +0.054811177016208 -0.0482462390532161 0.102 +-0.1572170275158886 1.085756822807309 0.102 +-0.474189258830741 -2.605785832585549 0.102 +3.264715686868781 0.7555759095862201 0.102 +0.2007691012670907 0.7642115228817347 0.102 +0.7601766662632714 1.120231294653948 0.102 +0.4701077138027801 -0.04744718731642912 0.102 +14.52277293568374 7.217605910333841 0.102 +3.034622549427062 1.413000694358868 0.102 +-0.08600614451107462 0.5650288140002944 0.102 +2.115325649407072 0.5278915140497917 0.102 +4.327646885032038 1.812434449349412 0.102 +9.924601600865516 -1.6253070158337 0.102 +-0.2796590591324857 -9.397732717202523 0.102 +3.87610624867413 0.3852628064537201 0.102 +0.2139333042770969 -0.06604105990847828 0.102 +0.9993467639076785 0.926889661781191 0.102 +0.1653954037468595 0.3451411672600344 0.102 +1.984702534460045 0.9485319565245975 0.102 +-0.1227721232280325 0.5296530419509877 0.102 +2.899415779317362 -0.3179784196427211 0.102 +-0.05951406827160535 0.3441158393921371 0.102 +0.3744255149019295 0.1019122709206852 0.102 +1.489240618338747 1.553428155127215 0.102 +2.29330424449904 -0.05722668886003852 0.102 +3.305220126482742 -0.397478932436693 0.102 +2.670003834250525 0.2551992991001391 0.102 +2.565963102462091 0.1926564885861305 0.102 +0.4496744300907274 1.468810227064611 0.102 +0.5964576150160968 0.1743332809781168 0.102 +0.08691550966036167 0.6960915394095469 0.102 +12.877276718364 -6.977250768751748 0.102 +3.477643181649933 0.3996441709185395 0.102 +0.8419242461379381 0.8132409569500544 0.102 +2.522890041701315 0.3616239665315013 0.102 +2.152731564347067 0.7346948102723135 0.102 +3.764144344586818 0.8091525896256152 0.102 +-0.02854301828474154 0.8133564855941171 0.102 +0.6186417251274984 0.05661362466569855 0.102 +0.823564751684821 0.5100208953114482 0.102 +-0.6335429247627502 0.915344056725351 0.102 +0.6680703679352704 0.275906174322263 0.102 +0.1277003062851094 0.288251038358341 0.102 +3.452917674831061 1.621585012227307 0.102 +0.06194198456290842 1.127096245305997 0.102 +0.2583725138755838 -0.0551530703351417 0.102 +0.08044881247817129 0.7502545220185061 0.102 +2.808440230471577 0.8092959065873749 0.102 +9.949903505901773 -9.399544936704054 0.102 +0.7432107519329477 0.4884097228983321 0.102 +0.5755977753062119 0.01606251118184551 0.102 +0.3301993022968205 0.07373746112462926 0.102 +4.610078301487755 1.901031389512021 0.102 +3.404617598934899 0.1982854720176314 0.102 +2.371904053000585 0.4367809126583795 0.102 +1.223441222207291 0.06891320298596029 0.102 +1.12377413780465 0.5775337921201846 0.102 +0.971271875151841 0.1408523098329733 0.102 +1.086935800045792 0.7127878220902654 0.102 +10.6236247754604 6.263541963755483 0.102 +3.626575354068403 -0.1231161344848901 0.102 +0.4141572501762228 0.2743437204858771 0.102 +2.239729439980937 1.430709005197718 0.102 +0.13766533418533 0.9458894053632321 0.102 +1.433077198156523 0.1137501363194682 0.102 +1.243532125068795 0.2431577026120025 0.102 +2.010891069985067 1.396873992603242 0.102 +3.22779772726129 2.326074699340669 0.102 +1.692929174310631 1.005413293024843 0.102 +3.452330575667949 -1.017774463039977 0.102 +0.7611827474788043 0.8109355923071695 0.102 +0.7057613772402889 -3.656444243777443 0.102 +0.7709437064080655 0.5698131965915647 0.102 +0.3464526298146673 0.4242103359849069 0.102 +3.939188027158039 4.6774785180925 0.102 +-0.06545486399203854 0.05640453064874891 0.102 +1.271042042165089 1.44061229818775 0.102 +-0.08714135362522304 -0.00792934044434688 0.102 +0.3149752188015055 0.09509942309122454 0.102 +1.879852813984337 -1.693976285949107 0.102 +2.79113707291949 -0.896315649075987 0.102 +-0.05825068890492896 -0.4964336409959536 0.102 +5.807038399109832 4.590560079144033 0.102 +0.04350949207423743 0.4415855600500242 0.102 +4.549263919220973 -1.355655877892338 0.102 +1.461037531979737 1.023776968738463 0.102 +-1.598428116197678 -3.438771938728565 0.102 +0.5016292368092051 -0.1654039861483096 0.102 +3.450111241926225 2.945775032248502 0.102 +5.844078064505243 0.3842128693652803 0.102 +0.1921891714678102 -0.008219213678446045 0.102 +1.004275214279998 -0.03562874937101045 0.102 +3.475585170816619 0.2326197811404312 0.102 +4.187034665414247 0.9279815733334337 0.102 +0.899575934585084 0.494927000199256 0.102 +1.411882242862105 1.113366219124618 0.102 +0.533055887689144 0.1398974410684945 0.102 +0.8242354005478039 1.129664020854721 0.102 +1.215526451782279 1.209240222805539 0.102 +2.824872279366036 1.067090025239715 0.102 +18.15526207119511 6.893363641215572 0.102 +0.7889732144129561 0.4452887084889424 0.102 +-3.44090652938788 8.443587978658368 0.102 +3.794379526088854 0.6079387643694469 0.102 +0.6299814438841103 -0.08118937820844278 0.102 +3.991940309209036 0.6351854935404435 0.102 +4.129837302677916 -1.130067231556588 0.102 +-0.1847270492557863 -0.0835471152995759 0.102 +0.3740277790474548 0.1970680273300387 0.102 +2.42392344406379 1.349946796571632 0.102 +2.213339482893191 0.9881918849341441 0.102 +1.088650722119291 1.097393335974716 0.102 +-2.459627747765941 4.489801598834123 0.102 +0.2447211919000277 -0.1439114847456855 0.102 +8.326621769704252 -4.790989960065061 0.102 +7.985268889866736 1.596658460589147 0.102 +1.083567581334528 0.04332888545590203 0.102 +-0.2500038030729595 0.8115832502254607 0.102 +0.2140579013712695 0.245771984258034 0.102 +2.41775912324884 0.6287213547178493 0.102 +-0.01211529784226479 0.8469410755861411 0.102 +2.408683693762275 -0.5008257614731488 0.102 +1.724042390658716 1.041570145156609 0.102 +2.854165541666817 1.371168958053651 0.102 +1.654918745751148 1.505984790878395 0.102 +1.121146825306726 0.6705822642818282 0.102 +19.18053217404799 -2.838262336230342 0.102 +1.434557223958252 -0.2602869392722829 0.102 +1.107283075668887 0.08165980830648609 0.102 +1.23631110121212 0.869691230880228 0.102 +1.18116523262608 0.9240681374240802 0.102 +3.923793780388848 1.237087158366871 0.102 +2.671129283394841 2.352851342440076 0.102 +1.567590436219799 1.096517156951268 0.102 +0.9422422058762595 0.157454086549357 0.102 +1.932167247230316 -2.102815476561919 0.102 +-0.005516387814192518 0.2662996631201363 0.102 +0.09609405780193664 0.5529446717632198 0.102 +0.9362727513388373 0.2065265308481784 0.102 +-0.08621902650538632 0.2855787399234096 0.102 +1.537685703689272 2.000276829666649 0.102 +1.109544373041126 -0.4385179726634607 0.102 +2.534612708224061 1.37543613670643 0.102 +1.029672348253417 1.103321634282507 0.102 +0.3442589432523902 0.9057996327460526 0.102 +3.910620385119255 -0.6222751895556885 0.102 +1.002288777983424 0.627894150892978 0.102 +-2.685624043502016 -1.633696085407118 0.102 +-3.615681900914202 -1.268262314236794 0.102 +0.0145027282318942 0.9290922076692882 0.102 +0.8136352384857066 0.9347964455557083 0.102 +0.8927377598239081 6.341145943549679 0.102 +2.898132002916467 0.6822044439512805 0.102 +3.298604214998165 0.2375949785459355 0.102 +1.562825756440516 0.1596665678994819 0.102 +0.1618899019301214 1.090326736426184 0.102 +1.030844853643076 1.069744789829642 0.102 +0.4834849260411078 -0.09393691677063741 0.102 +0.7798460282133748 0.7629949861382812 0.102 +4.202760075469825 -5.675209980189988 0.102 +-5.481834835147944 -0.2476076269453159 0.102 +-6.409554203729227 -0.6599216897680774 0.102 +1.096746042307537 0.8458784031394693 0.102 +13.28888887823402 -8.930793336051753 0.102 +3.007041508248768 -1.797736895366189 0.102 +0.7738476664763445 1.34196794259297 0.102 +0.954775158524102 2.482643296794249 0.102 +0.1033746327593233 0.3240951545281063 0.102 +2.649210792788083 0.3440977454091929 0.102 +3.467009082998364 1.071903970693699 0.102 +3.042333408080759 -0.705961595935331 0.102 +0.9134022431320895 0.3213490743067982 0.102 +0.8146369520078537 -0.5916989202480974 0.102 +-0.08519622561254923 -0.07331057980627537 0.102 +-0.2112485407746638 0.2913127148726897 0.102 +3.012656042670847 1.038834094816007 0.102 +0.8532467906874364 0.1597617354209436 0.102 +1.014150960880693 0.4841584525870936 0.102 +0.1433247393081716 0.7044308601480562 0.102 +0.06114455192146122 0.2882013697449132 0.102 +3.992610721647525 0.9506227037917456 0.102 +1.058546370111057 0.4821102950611001 0.102 +2.717051729213285 -0.2463037570621577 0.102 +1.557341529519548 0.9934526465146597 0.102 +-0.1911594495934968 0.2605295941314519 0.102 +2.246888189826957 -0.2418775109592845 0.102 +4.022235569950914 -0.7044222733957309 0.102 +2.557082553035855 -2.808393179793994 0.102 +0.7373528807027195 0.2759078498555894 0.102 +0.280860642563243 0.2194466079489994 0.102 +19.13730597851313 -6.169676652263472 0.102 +2.181139826952092 0.08181820000690274 0.102 +-0.1030654244499786 -0.05034411089719212 0.102 +-0.1149948246861061 -0.02992635013840528 0.102 +5.404028329423874 -1.921900414790332 0.102 +1.990927305681166 0.15377224960741 0.102 +0.1020751189666115 0.4051873712987912 0.102 +0.820986100977851 -0.3194036315436657 0.102 +0.006758978877412116 -0.02038350327133986 0.102 +2.418716517903544 2.199570852458434 0.102 +0.6244743112366559 0.07122016171760119 0.102 +0.1071370316913857 -0.03585024075888306 0.102 +0.095957210169962 0.8674620460937418 0.102 +-0.09725285497673845 1.012539904918818 0.102 +0.03534579715041598 0.244824982023032 0.102 +0.07109115195191125 0.2208046609629167 0.102 +3.035784963629277 3.419206951701624 0.102 +0.2686814127641227 0.9301069920047257 0.102 +0.8548091373781962 0.8331695548894361 0.102 +1.322535894051391 0.3699696602666636 0.102 +16.06621564514002 -1.296368567027585 0.102 +0.7059527959550395 -8.219243169462136 0.102 +2.066754940895384 0.5586245810328226 0.102 +0.2277406689983104 0.1386051314097972 0.102 +0.02489765561329952 -0.01084699805391636 0.102 +1.651579829527118 0.9740267622828884 0.102 +0.9590947919959903 0.2059118334004502 0.102 +1.68744732517677 0.5354063008125864 0.102 +1.957974853399677 1.011049650308211 0.102 +0.3855725206435291 1.096491152274979 0.102 +-0.7897131998034492 1.312474458896984 0.102 +3.646000291230319 1.193315257955487 0.102 +1.551177695225535 -0.4074427341658269 0.102 +0.5690101416994846 0.1090661280299414 0.102 +1.709979933876826 0.2504706536965787 0.102 +-9.154914516903521 6.505624753904888 0.102 +0.6183272339673314 0.1288356399163869 0.102 +18.00140965512085 -0.1275866355852844 0.102 +3.016656137266783 0.7326456427824467 0.102 +9.180153487480528 5.253988561745736 0.102 +3.001031602538147 0.5107033513293502 0.102 +0.2725137634933394 -1.476783752374953 0.102 +0.2948731949148702 0.9364648384995775 0.102 +1.021304626401749 0.899070277963978 0.102 +-0.001494516158670156 0.7419906760354614 0.102 +0.7828336965653969 0.4745191461163989 0.102 +-0.1062330019564871 1.045290350823985 0.102 +3.338594762177834 1.494044833457102 0.102 +5.432655638518479 -4.946722291973101 0.102 +0.3086968052265934 0.03063720490840614 0.102 +0.3225307285006509 -0.03832034334381094 0.102 +0.9751762550583375 0.9319284424844346 0.102 +0.04715571894033386 0.8187647752026357 0.102 +0.2071647311661239 0.8115519888085846 0.102 +6.160440698474705 0.7479647323521614 0.102 +4.367790487850894 -0.03696574809093551 0.102 +0.5651604854531671 0.03836584493285752 0.102 +-2.041877518626519 6.149174581666971 0.102 +3.946747986317458 0.3059003364083053 0.102 +3.381055697858622 0.7675160414585817 0.102 +3.74068277201803 -0.6278059709810043 0.102 +1.984583605881826 1.227146513993489 0.102 +16.28405800974317 -9.089669558627339 0.102 +-0.1576682765648911 0.3446488943923904 0.102 +0.1071686592576072 1.013543259443302 0.102 +0.01239245884047509 0.3447301758543911 0.102 +3.42871718469443 0.130980451985095 0.102 +1.954832941396714 1.510768753236409 0.102 +1.588671999191489 0.4682724981719709 0.102 +3.024245882797904 4.285388766698239 0.102 +1.044405793013742 0.28304737358514 0.102 +1.065467761445992 0.5809722327133872 0.102 +1.078722525027553 0.8676413323985384 0.102 +5.062202693186125 -1.155831759658078 0.102 +0.06521139535367326 0.3802074399934962 0.102 +4.002170283803997 -1.060349988786809 0.102 +3.904395940628845 -1.155553659573544 0.102 +0.5168425682514829 1.114071922878139 0.102 +0.1200664265585572 0.7372317448610586 0.102 +13.8584609933252 8.237758127740433 0.102 +0.234949579107874 0.9619730426624791 0.102 +1.494300014193904 0.4877417445295693 0.102 +2.903031170206073 0.4718215911712703 0.102 +10.14923094214612 4.934383628037676 0.102 +0.9033135455115758 0.6788590773026579 0.102 +1.038600788519212 1.038925250885892 0.102 +0.2581661419663975 0.4915630159061809 0.102 +1.090302264952229 0.5793191438137134 0.102 +0.1722826699619625 1.10346615776584 0.102 +0.9323252467983851 1.138201587885959 0.102 +3.421054410415565 0.962437814268633 0.102 +0.830558154256577 -0.1038174228461473 0.102 +0.8758095661602995 1.393396113862578 0.102 +3.092395843053876 -1.067101533655963 0.102 +0.3038388649891909 0.3594988554141587 0.102 +1.775507916248628 0.1100411245622194 0.102 +0.3142079885286754 -0.06208857028842608 0.102 +0.5342907703724782 -0.05458256252134365 0.102 +7.868553844020114 3.448972081506939 0.102 +2.491485523492662 0.7337311921652481 0.102 +0.6644474364957651 0.146170499089047 0.102 +1.172670486285855 0.5760718023034646 0.102 +0.06660758000074504 1.232051716303874 0.102 +4.025388329757576 0.09555978531209885 0.102 +3.914973052681578 1.016085688826426 0.102 +2.841828829837611 0.9129606228111092 0.102 +3.435889024070867 0.7649563550996683 0.102 +0.3316591768676346 -0.008685208321007169 0.102 +1.575939656683393 -0.1146750198646502 0.102 +0.2704805257645138 0.8721924005531303 0.102 +0.9845325605158667 0.08562720578628397 0.102 +0.9809004392179405 0.06362180550592211 0.102 +-0.2295012218345658 0.1191257824900529 0.102 +0.8226648441899316 0.6951500228540811 0.102 +3.684411338621459 0.5405880963557772 0.102 +0.2032955953360486 0.0404102588545449 0.102 +1.482301274486784 1.389795562815771 0.102 +0.383117989665908 -0.02979000099813501 0.102 +14.81741744967134 -3.035546090052391 0.102 +-0.2924836984159698 0.9437205358135183 0.102 +-0.0979060212254861 -0.1211989354755285 0.102 +-0.08775375395465954 -0.1653595764006857 0.102 +3.801114707117764 0.4860268387106643 0.102 +0.6722255909151852 0.2140875288213048 0.102 +1.083185275732128 0.1572174057136664 0.102 +6.639827511532495 -5.151240233896821 0.102 +2.684479576902222 0.4798367425995158 0.102 +3.671207944405687 -0.3854448983222334 0.102 +1.630036604053968 0.9030929082316623 0.102 +17.88836296532099 3.799363341785821 0.102 +0.8985921507108443 0.1691754691379447 0.102 +1.02965992697434 0.4612669349043041 0.102 +4.608786917996448 1.341256186725314 0.102 +3.115018371677602 0.656137863226029 0.102 +1.271566053454604 -0.002402238785474704 0.102 +0.9872459149074 2.778420316875347 0.102 +-0.01221589547980251 0.3619021746655803 0.102 +1.547643785895126 0.913192149879489 0.102 +1.802658334141641 -0.0003957022692694309 0.102 +4.86473959731787 0.8447216475159244 0.102 +4.197364339080576 0.542156776359489 0.102 +4.066595286058321 -0.2931093126923442 0.102 +3.350175339050861 -0.2719533863021317 0.102 +4.374051148464403 1.653734129828722 0.102 +-3.117217991600541 -9.271740347313264 0.102 +0.8552311266369838 1.324416954617967 0.102 +0.1680715414500256 0.9821644182824063 0.102 +1.89802600943551 0.3281978147534534 0.102 +0.8651086158118791 -0.09214421631135336 0.102 +1.799250131849136 1.047699127643727 0.102 +-0.04634696641014575 0.09212702699045668 0.102 +0.166157649835871 0.04906974916825203 0.102 +9.549528126031657 1.084030402097003 0.102 +13.9140869861516 9.102970939817791 0.102 +7.642841730972102 5.126997569090764 0.102 +0.3345794913059131 0.2651875276186502 0.102 +0.7803971526805219 -0.06481261927976234 0.102 +0.8754735014899712 0.7769313254902892 0.102 +-6.269220298506688 -9.139823127309947 0.102 +3.838944828179024 0.5534278118904045 0.102 +-0.1167170949691761 0.6463618666166616 0.102 +3.036977968857881 1.119253849800987 0.102 +0.9840976232048826 1.010443929199323 0.102 +0.9022988426501316 0.06722739053284486 0.102 +0.9209763753047751 0.04787569609976976 0.102 +-0.09907201121074159 0.8281869087934093 0.102 +2.798787232146514 0.9684919137180558 0.102 +0.9210639611094645 0.229841582274819 0.102 +-5.436953438995262 5.129488258998413 0.102 +2.85407516500111 1.089881506912721 0.102 +0.03277779633486513 0.8513909833618548 0.102 +1.093920847544747 0.6051430455420647 0.102 +4.286924244157871 -0.4625730579231899 0.102 +3.747982597143324 0.5043474665123616 0.102 +0.2219251910470165 -0.01063688301255173 0.102 +7.258027032325053 7.425912023306855 0.102 +2.896760318809356 1.010486380512654 0.102 +0.3883787751957883 0.01085374544572653 0.102 +1.748651954682022 -0.3054065632821345 0.102 +0.2161012252167176 0.4785815641774565 0.102 +4.691581923350848 0.3549424547292721 0.102 +0.910281460604568 0.6948719854025535 0.102 +2.038329207903069 0.3741193287243212 0.102 +-9.036957652096424 -6.135668031556984 0.102 +0.2570621229116505 0.02617266162928248 0.102 +-0.1777705533571452 1.052820758669751 0.102 +-0.2522967992777188 1.016018396424599 0.102 +1.178794738817421 -0.1069628878560721 0.102 +3.671761811862915 -0.272353677697632 0.102 +2.533491704222826 -1.129356490307396 0.102 +4.719253633305502 0.5047364788522679 0.102 +4.243342420543873 1.616216170665106 0.102 +0.3006193062636467 -0.001252675680084632 0.102 +1.778927315069765 1.434361558599243 0.102 +0.1132040592122271 0.7628620002993995 0.102 +3.782945983245873 1.159042913548046 0.102 +3.83255960179465 -2.238104905423749 0.102 +-0.6323619428179394 -1.091067656046435 0.102 +2.02896673779684 1.955717217765281 0.102 +0.4823035519929289 1.105302740814554 0.102 +3.328786744669473 -0.0523666649314122 0.102 +0.7715991263543163 4.187842976580209 0.102 +-0.02018494173536634 1.17388628308086 0.102 +17.16863824370035 0.3952857894763691 0.102 +-0.4251146932182769 -5.513261334416288 0.102 +4.571159280692981 3.436466160212907 0.102 +1.182977848152227 1.136091289110702 0.102 +11.10265002412288 -8.040458383860884 0.102 +12.22249723244122 -0.07144838924153428 0.102 +16.3842113411408 0.4434153815658027 0.102 +1.155962749019048 1.095288339329863 0.102 +-4.96431960655452 3.579010095224228 0.102 +1.223975316448179 1.023635947191556 0.102 +3.142492511988221 0.4764830048548401 0.102 +3.511735562857138 0.3458500904014129 0.102 +0.1951205708639911 0.3068039197246888 0.102 +1.51988864540239 1.071353660528516 0.102 +0.26152584976413 1.122231246830194 0.102 +0.2883972358620501 1.12092513536556 0.102 +1.028535892350487 -0.1121266507814624 0.102 +3.227652512396263 -0.9671436512104086 0.102 +0.2396045006031827 0.3559035389044484 0.102 +0.08775225562041433 0.5148150217258346 0.102 +3.247562527751878 -0.7342656141586635 0.102 +-0.1435911173341028 1.238005764027854 0.102 +-2.101873451360395 1.053627420480245 0.102 +6.961317790660676 -0.7880215876836356 0.102 +0.6969630432577198 0.1292344024176066 0.102 +0.5134219430333444 0.03378427128061304 0.102 +-0.1692300612213269 0.7889633662033344 0.102 +2.446039084339923 0.265876647649706 0.102 +2.179063487906724 -1.184770288813046 0.102 +0.2845155361358275 0.1834740604260852 0.102 +5.00174625186293 0.1470887036739981 0.102 +0.3443892466484533 0.1000482853516195 0.102 +17.25407677312046 -5.55697678926979 0.102 +0.07806819937905946 0.328849474331518 0.102 +9.958223549368551 6.79315031909081 0.102 +4.067355289251948 1.733794069596423 0.102 +0.960737867854406 0.2279968489076696 0.102 +3.900799917726919 -0.02266445484185946 0.102 +10.77883366766435 3.088762583626552 0.102 +-0.3660954656902074 3.719203897534186 0.102 +0.8837670317629155 0.2452365869771006 0.102 +-0.03380252235236425 0.1373910180932817 0.102 +1.351718794670842 -0.5742785020310328 0.102 +0.1953819770982848 0.907655319454683 0.102 +0.9238418163423825 -0.1155324106648538 0.102 +0.1091593725945467 0.03961113475904311 0.102 +1.081354333692239 0.7469670520112024 0.102 +0.2220251590278767 0.4382110866744532 0.102 +2.589456552776012 -0.3553483342248104 0.102 +1.674721878572825 1.073356323488631 0.102 +7.952231418379919 0.7182151045660619 0.102 +-0.04927578687253522 0.9010377953316817 0.102 +2.617983195117673 0.334159078941333 0.102 +11.45241789699508 -7.518549892957406 0.102 +3.900686678397335 1.064670185843338 0.102 +2.235590975539449 -0.06833368909941623 0.102 +0.6479725191340799 0.1854666153807565 0.102 +8.436337416129511 1.988412030602788 0.102 +-5.320858052768 6.128218077813572 0.102 +0.5211304624645685 -0.03581415093338639 0.102 +2.311359102568242 6.01124070687346 0.102 +3.123943537708127 1.349704718026724 0.102 +1.824604107265244 0.2514200212482619 0.102 +0.8167351251538715 -0.07308225763291686 0.102 +2.583336879547612 0.5313957859023157 0.102 +0.4596612563842583 -0.1284201284351683 0.102 +0.8447759503904697 0.5190352195639827 0.102 +6.246983753764515 -1.147599811132669 0.102 +3.939161747935819 0.04064321201233517 0.102 +0.2744962617209862 1.002565445329533 0.102 +0.05910076964328723 0.3094527949634399 0.102 +-0.129497657097224 0.4458473919321518 0.102 +-7.986854653092551 0.05606291099959403 0.102 +0.3220926536110284 0.4597868247829217 0.102 +-0.0940062709063041 0.6867360036535279 0.102 +17.37638384351324 -2.9508946652344 0.102 +-1.700562564167818 9.038108286941494 0.102 +2.380877196193804 -0.6839804109530007 0.102 +3.793068072236235 0.3362504251376951 0.102 +0.397543337923947 -0.09816357720441074 0.102 +2.427191844496146 0.9973205598712119 0.102 +1.08747219676349 0.4360684341807797 0.102 +1.568887432864985 0.3855693914112398 0.102 +-0.09680690358778678 0.8660187235920341 0.102 +2.801115543804018 0.6917637691927464 0.102 +3.564640892352776 1.02414768128466 0.102 +0.1664922186569105 -0.002570001575692345 0.102 +-3.876673981979716 -0.4600044408272073 0.102 +1.495420071376066 3.140086241113878 0.102 +0.961971526821424 -0.8992771510086057 0.102 +-0.04125698821675233 1.080484427157541 0.102 +12.06819480590104 6.94559572417237 0.102 +2.259252896288822 0.07359197537567926 0.102 +0.1700899080846635 0.1935622421304518 0.102 +1.671050482341766 -0.06972978731286794 0.102 +4.338847377791122 -0.3495488353431175 0.102 +16.28879549099322 9.172190332754315 0.102 +5.495387998510115 0.9691880401925629 0.102 +0.01552494191627177 0.1576841196025597 0.102 +7.822262768072631 9.116440559395382 0.102 +13.23195193353691 -0.8837285372913162 0.102 +4.334617902528482 0.4405493282575765 0.102 +2.096344809645871 1.175528008565467 0.102 +3.199579857099807 0.5237798045936487 0.102 +1.757788147768506 0.2788034687902232 0.102 +0.4307010326433389 0.0101583678321193 0.102 +11.02445956357636 -4.166422954571132 0.102 +-0.0903087474885421 0.1760501045908335 0.102 +2.440049795767319 3.253632644425502 0.102 +2.152941490085285 3.104955237617717 0.102 +0.5071689843385094 0.1414635512462539 0.102 +0.1974200698980464 1.231795947790048 0.102 +4.387675892798879 1.473503166993238 0.102 +0.710148621257663 -0.7098561543271943 0.102 +0.9518507542156771 -0.1264859199908421 0.102 +0.009559695112085362 0.8700029154090523 0.102 +4.755121520703134 0.1173991286807623 0.102 +5.90436419021789 -2.62206103384877 0.102 +0.1051582819055565 0.970284211789862 0.102 +0.07792086351361303 0.832428781797702 0.102 +8.420351615473887 -8.18847344844497 0.102 +2.056353972178146 0.6234367881779335 0.102 +-0.2399861581607586 1.159002910157907 0.102 +0.7557378173996958 -0.06281260668275052 0.102 +0.141499106478211 1.055516622279939 0.102 +0.1341584960323866 1.008282833199985 0.102 +3.207856657566794 -7.08130138669203 0.102 +0.6458428174051996 0.08215347540525998 0.102 +1.333611960508051 0.564020346835886 0.102 +2.798579689009994 -4.282093620753803 0.102 +3.340084439071384 -3.105679733897057 0.102 +-0.01364734922103106 0.02198693251844448 0.102 +3.32063824353186 -0.2027372275503608 0.102 +-0.1088289557076632 -0.7124118893814825 0.102 +0.1637479204208084 1.066792987721583 0.102 +0.8308138730823137 0.2796952067591503 0.102 +0.3669226881120374 1.178014065534284 0.102 +0.8337764597492419 0.6232446413600912 0.102 +4.060340701740309 0.03810235581073852 0.102 +-6.620475240054469 9.19568826168369 0.102 +10.09397309145311 -0.4707701311432746 0.102 +-2.740693928416341 0.8285910827520534 0.102 +0.3542330672618237 0.7197075068443169 0.102 +11.0437846506915 1.78105069104048 0.102 +-1.073279177987544 6.596498176124963 0.102 +1.444373539021841 0.7720224355319062 0.102 +1.849022581101379 6.901567680833841 0.102 +1.857976316973264 -0.9861628911114015 0.102 +18.93861591817074 3.494841398816175 0.102 +4.06778929176224 0.2008732308860366 0.102 +3.822972914352555 -1.861809665781567 0.102 +-9.349970692961339 -4.617476688290704 0.102 +2.777533742475987 2.064517425917784 0.102 +3.85899891298795 0.3163753119884456 0.102 +2.825703499684078 -0.03145963611130378 0.102 +4.608174461165564 -0.8917297378771445 0.102 +0.9778141022302633 -0.01729627704637183 0.102 +1.555333953883725 0.05355822287435112 0.102 +-5.141566296960525 1.955628651463879 0.102 +0.4559472594195154 -0.0689210902094254 0.102 +0.2118239836918065 0.8852884939776213 0.102 +0.06700865148520704 0.1913965340098076 0.102 +2.013175168892924 -1.89750135554019 0.102 +3.977795610555122 1.381556208729841 0.102 +0.5751670444143864 -0.03066697347809945 0.102 +0.9767396336749578 1.112558321563429 0.102 +2.049660667313317 -0.01254931529025447 0.102 +2.699251284164127 0.05899668963779558 0.102 +0.5522989061711595 -0.1016737350244588 0.102 +2.333205311191857 -0.1004000436068095 0.102 +-0.1575784817101105 0.7475182837340244 0.102 +0.5905429145187574 1.140782039760506 0.102 +0.8683421700370936 0.3509937660168633 0.102 +1.281104306859074 -0.7784317246613858 0.102 +4.481753013541491 1.860559878926214 0.102 +2.422136568696843 0.1808978705634674 0.102 +-4.347963938630089 1.731578596036539 0.102 +0.1410247242700291 0.2176582534799034 0.102 +1.036957772877162 0.9207098719700483 0.102 +2.324769375255239 0.3730124059200032 0.102 +13.51174394055782 -7.956277644322815 0.102 +2.735826027497825 -0.4570334624661151 0.102 +1.09271673061232 0.463651623816386 0.102 +2.551758716440758 0.4328425014448196 0.102 +2.346643406051356 0.983632365604824 0.102 +1.058849706860124 0.515401675211362 0.102 +0.8616573040256099 -0.05710956302885044 0.102 +2.1828169206852 7.583242278521529 0.102 +16.69398025756643 5.810766475603778 0.102 +-6.27678942529373 -4.507660703748524 0.102 +1.081514235144396 0.8527253777401028 0.102 +3.597870015283258 -0.4500707257451367 0.102 +2.964443005363693 -1.327710370061168 0.102 +-0.1794649504327049 0.5700691146739109 0.102 +1.295608637698779 0.8222447399189901 0.102 +-0.1211454440731769 0.9669290011597307 0.102 +3.421536343894545 -0.004846028627885995 0.102 +2.562348697781716 0.3708205020339976 0.102 +0.8006870417467895 0.8484021108414521 0.102 +2.854747265926271 -2.040670211598954 0.102 +0.4423215094096567 -0.1020571582318014 0.102 +-3.305481993310989 4.057363676131362 0.102 +-0.01970072572257954 0.1041778718449131 0.102 +2.486247035408477 0.09479203160861302 0.102 +5.365304167465182 1.638771460142193 0.102 +0.07234575554867193 0.9627223558246588 0.102 +15.57606914770359 6.749268433547681 0.102 +0.5858001681849424 0.08665910335364142 0.102 +2.427076515537611 1.134349762627452 0.102 +2.341452372688152 0.839906399858523 0.102 +2.758756634713203 1.270183481933101 0.102 +1.213022550510242 0.4136198393617481 0.102 +-0.2980235006025176 0.003423744953673306 0.102 +0.6182757793995839 -0.05394776853376591 0.102 +1.243381250848811 4.649667965190559 0.102 +1.593131517626557 0.8522669303312251 0.102 +3.948452115782176 1.088947029145136 0.102 +0.2927205224448999 0.08677474078644266 0.102 +3.550793665483252 0.264033147587425 0.102 +3.554802216251804 -0.01025478188224853 0.102 +0.2177943782423682 0.7551540516403076 0.102 +0.1480314219151246 0.8247103001011507 0.102 +0.1669775030376758 1.012188146370334 0.102 +1.468055585473809 2.575612944096798 0.102 +0.9778134465212324 0.04865479587426919 0.102 +-0.1129297322877565 -0.09257148527442446 0.102 +5.764424685850865 -1.375598123351543 0.102 +3.064263325839553 -0.3106089656561341 0.102 +2.42187651467489 0.863360806692373 0.102 +15.00187360404622 5.159009722373851 0.102 +-0.1078285840103073 0.7792080510189616 0.102 +1.04079542396714 0.4373963502499113 0.102 +-3.710897161636053 6.3469408152601 0.102 +3.713267455468417 0.1121798290297098 0.102 +3.744799434888268 0.1547995403346629 0.102 +1.715605280094956 0.6458916466417098 0.102 +0.2191651103069843 0.3852670935756001 0.102 +0.0206066798209902 0.1044756479516681 0.102 +2.894759325651555 -0.02494151261247749 0.102 +2.19146393096339 -6.285782495377576 0.102 +2.902996090792718 4.897940413265959 0.102 +1.650671395709871 0.2682557536267269 0.102 +-0.07499425474180507 -3.439480568444865 0.102 +-0.610957009054182 -3.688351287669835 0.102 +-0.2956979478373403 2.505822966246349 0.102 +0.08840841407610958 -0.1143775082910545 0.102 +5.250783405776549 -5.438249621378898 0.102 +2.234506184908847 0.3830887519763776 0.102 +3.092862110516536 0.705395000818776 0.102 +19.12298283608695 1.85711750739693 0.102 +2.117096925975699 0.07321397171953083 0.102 +0.4627554971460579 -0.08566164918352534 0.102 +-0.2016326392376959 0.6166353148261351 0.102 +3.821895138277323 0.9348658181823462 0.102 +2.660424608015397 1.116521335950437 0.102 +3.71423680308029 1.050589364708647 0.102 +1.112836145674154 -0.01749337449527456 0.102 +0.7955912487827355 0.2660414125509746 0.102 +5.105025278163337 -3.761704352185832 0.102 +1.627709967541413 -3.656732593125962 0.102 +-0.2481285888668879 8.067539248275038 0.102 +0.1600121125239042 0.292063254862258 0.102 +2.996296373825137 5.965938213328678 0.102 +1.386785021823992 -0.15185934928068 0.102 +1.895605254849006 1.371306393257354 0.102 +7.53963428184637 -3.247991864873812 0.102 +0.005115000560094602 0.2381760781401191 0.102 +2.943029556867877 0.1932074683293255 0.102 +0.902253926158221 -0.1467080170567915 0.102 +3.48961569635652 0.9943304451029322 0.102 +-2.925731968755168 5.513801878263206 0.102 +2.628847777897169 1.751092824553855 0.102 +1.765521403399583 -0.4384764502277422 0.102 +0.2155961365364484 0.1479303282704672 0.102 +19.11028754325077 9.134039548482312 0.102 +1.649666238633853 1.130475279401027 0.102 +0.9689108769593435 -0.0888290204717169 0.102 +19.2137172728735 5.100725471312911 0.102 +4.016259882912398 1.068023094227333 0.102 +4.109942893887576 -9.091686376247088 0.102 +0.6569847352024841 -0.03835830874077747 0.102 +3.566771711867397 0.9256557906310371 0.102 +2.805839867527907 -0.0792043196175391 0.102 +2.74091400107743 1.013854423368251 0.102 +4.234210525297181 0.1479224417435479 0.102 +4.243406368977258 0.05355349809474558 0.102 +1.054041163998051 0.1239250944732199 0.102 +1.073626091088107 0.1109312270827202 0.102 +0.4285907640057016 -0.07824739243534537 0.102 +3.401852699057313 -0.7115922210299506 0.102 +6.512261072055594 0.4879728235505619 0.102 +3.453367676749294 -0.4285468297424482 0.102 +1.065510364835108 0.4288231327613463 0.102 +0.06851231422683672 0.4799530476962539 0.102 +1.065830383135519 0.911515314241815 0.102 +0.9472164792246056 0.6763502782345248 0.102 +0.7087798517773924 1.217330843942899 0.102 +2.95308366530331 1.147989297378675 0.102 +0.5027736012298522 0.009590032519336151 0.102 +1.125681627025779 0.4146653712687051 0.102 +2.203538339995273 0.301560510270112 0.102 +0.1440876293861239 0.7982942799042685 0.102 +2.76663271802403 -0.0033943490851601 0.102 +2.536619399767722 0.9670410754058516 0.102 +1.231769257940612 0.6878791627284315 0.102 +2.070233219977465 0.7708747541483696 0.102 +2.287309991636779 0.1791670905177943 0.102 +0.148161987140446 0.7317557924614415 0.102 +2.419126558422897 0.3975037920490588 0.102 +0.9677951959119456 0.5041538348790232 0.102 +0.7658118592838056 0.1232654586525004 0.102 +-9.108785678644217 9.113084677771905 0.102 +-0.1322099041075316 0.5867494596745747 0.102 +0.3201000067764773 0.4288722560407595 0.102 +0.783460586142094 0.186558218731377 0.102 +0.3929887282792977 0.02372634803364715 0.102 +-0.01434080636041115 0.08475369977853804 0.102 +-0.01632371512931388 0.2237463981316973 0.102 +5.925618992781781 2.100971225489827 0.102 +7.999032062926092 2.481330301564245 0.102 +0.250069914397675 0.1647068059463729 0.102 +2.358731238935015 1.231339201161859 0.102 +-0.2134271877602616 0.9644418037095595 0.102 +2.596888595960078 0.6529823056816414 0.102 +2.166557638082802 -0.7835544748457716 0.102 +-0.09149087506771368 0.7015246578216481 0.102 +18.24855666562879 -5.695188838569944 0.102 +4.108092045093002 1.260694640395812 0.102 +3.671028931369815 0.2668754606636658 0.102 +3.740920788831473 1.251334137798989 0.102 +4.440843453972343 -3.646846461651705 0.102 +2.858783815660614 0.4206965589547469 0.102 +3.003934543239433 0.6624240704456859 0.102 +2.691837711056669 0.1344790174866951 0.102 +3.577713044363074 -0.607017831684124 0.102 +0.7924177464852251 -0.08018690314056373 0.102 +-5.455663520722304 -5.144695285114577 0.102 +3.196577435158994 1.060344906382867 0.102 +2.268836012813753 0.5245187732697388 0.102 +0.9492929635727755 0.3868374238690861 0.102 +0.8759465858847444 0.5726580636049206 0.102 +1.531434248240484 -5.778318667503312 0.102 +0.6712481837532068 0.001749595339110468 0.102 +0.4183758848866811 1.139583785873976 0.102 +0.1035170297050517 0.2301971976655869 0.102 +8.543630893284675 -6.570786305821056 0.102 +0.9474939707938632 0.4201306642034595 0.102 +-0.1573946993048815 1.150960268572866 0.102 +1.199898284610405 0.5337353367939024 0.102 +0.7311165254012766 0.08787117152551632 0.102 +0.763217597757452 0.1475649760649584 0.102 +1.733719205003426 0.9744016323178115 0.102 +0.2069914892586541 -1.837757785273856 0.102 +5.058063500514232 -1.490894995276705 0.102 +3.541159799206206 1.492011698125944 0.102 +4.392809588597435 -6.863240468121658 0.102 +1.016405497558397 1.316250143011556 0.102 +1.020244554599527 0.04793610126899896 0.102 +-0.1418764069967054 -0.008210329133922771 0.102 +6.483861939356743 5.856134701156571 0.102 +-0.298317976870806 0.7116979183428641 0.102 +3.299800746962942 1.935271837683192 0.102 +-0.07029295583098386 1.026978938062868 0.102 +2.765448572956374 1.174928396447209 0.102 +0.009305120434599147 1.092584224611058 0.102 +0.2388610065081957 0.5390660160376011 0.102 +0.1097449788421023 -0.1014043936852507 0.102 +2.613724760705359 0.759994434994861 0.102 +0.931580182440389 0.3054076583138456 0.102 +0.07118401611401493 0.8043907443893256 0.102 +3.561918401000357 0.1243661575881322 0.102 +0.08256583315099827 0.913176118365631 0.102 +0.2962455369731302 0.326005817445629 0.102 +1.919015353428994 0.6934703057829986 0.102 +3.447424001746128 5.277285171461886 0.102 +3.020447356317436 0.8793293562713154 0.102 +2.237858353189402 0.5758758548607613 0.102 +3.688047163331531 0.3584472918918232 0.102 +2.497835567098125 -0.5791740244473437 0.102 +2.505695796683239 0.8139716143976169 0.102 +0.1113209136456779 0.9294317292449851 0.102 +0.2309935560086095 0.1899307126513409 0.102 +1.040158601566712 0.6345447388244988 0.102 +1.612704598185172 -0.03996172427864306 0.102 +1.110958078890459 0.3477281184152539 0.102 +1.136118545088569 0.985191549573617 0.102 +3.563596433713088 0.762397242845507 0.102 +4.008469655828236 0.4679028211266911 0.102 +4.094726382950271 0.4646798005660625 0.102 +1.124957348381067 0.6419499447070869 0.102 +4.593427006595894 -0.06460244499288892 0.102 +0.3099535286411888 0.2544415831337488 0.102 +-0.1110221466671635 0.911020741272165 0.102 +1.687733562785789 0.1583187458784479 0.102 +2.070108187162858 0.8204522476184928 0.102 +2.87100370355691 0.2332210062070273 0.102 +2.308533966566147 0.2431072240128378 0.102 +0.3962867396874075 0.1203172302225157 0.102 +0.5369958993427659 0.02478345782569445 0.102 +1.253517134284602 -0.37671258725942 0.102 +0.2667439264356894 0.05654848838394949 0.102 +-1.060606170564158 0.9300887287124975 0.102 +-0.1785260919166053 0.1386498777905497 0.102 +-3.83279742483924 9.210724046554937 0.102 +3.314200424781912 0.8209907635752423 0.102 +1.2938110675533 1.107870087432097 0.102 +1.09359954077354 0.9827587803066299 0.102 +3.564319435882368 0.464852618348682 0.102 +5.274384587898627 -0.5618727416623797 0.102 +-1.901204201737277 -4.367490853609495 0.102 +0.4566292143528405 1.113285009182877 0.102 +-8.151723562454267 -6.632348087769511 0.102 +1.365720530263064 2.944878929988904 0.102 +3.04539777881106 -0.139897376064708 0.102 +3.682301918794727 0.7215726189956305 0.102 +0.7428429983637247 0.1349812537142286 0.102 +-0.1283271321727237 1.063754493391566 0.102 +3.839435611015821 -0.03416196576420829 0.102 +3.864481141330955 1.001595597693583 0.102 +0.1207650965717851 0.2636008491888301 0.102 +0.7999202720589089 0.6304573045854034 0.102 +11.48994832118177 -9.067524479607316 0.102 +1.762000956375428 -0.05426101232477989 0.102 +10.07364173583876 -6.753270591760121 0.102 +2.918214310055839 -0.5098721728028119 0.102 +1.122909855427727 1.157962371402686 0.102 +3.917729657528454 1.139241528989214 0.102 +1.845721258794164 -0.1172150120098403 0.102 +0.2606727833901909 0.8041021141615043 0.102 +-0.2969241496079206 1.10685839547577 0.102 +3.228657493698506 -0.1845624041944423 0.102 +0.8950902573519636 -0.09755124662671351 0.102 +0.03458602924486249 0.3071488244333047 0.102 +1.135991538979319 0.8974492682268194 0.102 +1.015824110520666 0.9649390899336939 0.102 +-5.078576655911538 -3.340410796627966 0.102 +3.104821899408622 0.83646431839193 0.102 +2.005464815299138 -0.2254700406590098 0.102 +0.124342677682623 1.064133210747493 0.102 +0.006920191942911961 0.1246574061926201 0.102 +0.352376406396876 0.001146931747833051 0.102 +9.267977387890816 -4.700803747395021 0.102 +0.8871817180958227 -0.02351182057316275 0.102 +14.60992375039109 -5.487622652545477 0.102 +5.266131604503533 1.979790272920746 0.102 +1.995161164090093 0.657989291223954 0.102 +0.7843786284923361 -0.4126013170927025 0.102 +0.9812749668317358 0.1738190836696302 0.102 +17.17781858669362 -8.306870297674148 0.102 +0.8159002181326026 0.7232117284560333 0.102 +2.399034802360982 1.065736040665911 0.102 +5.099989606007928 1.229590960753476 0.102 +3.204413329656884 0.8685170545042553 0.102 +1.833393149173682 1.537568950369231 0.102 +1.871286211914571 0.266236626373978 0.102 +3.65956161035558 0.924686837644067 0.102 +3.091881099493435 0.2000639883593822 0.102 +0.9076132984286798 0.5312952754676094 0.102 +-1.471039596781447 5.168873316396357 0.102 +3.173809657032666 0.6347271403584909 0.102 +3.794576603577561 0.1355804950739097 0.102 +2.743301977729406 0.7504838981079031 0.102 +2.498585829451442 0.5921965980255379 0.102 +0.5299453143248151 0.0919271749049172 0.102 +1.569256135706957 1.155274000866106 0.102 +2.572763992265553 0.03634868733495795 0.102 +4.460811151213805 6.148367494745038 0.102 +-0.1961306315608771 0.4706900148251307 0.102 +1.044669304502476 0.1081173597931055 0.102 +3.303593044814755 0.5094347099826024 0.102 +0.1864068903940235 0.3668713178212563 0.102 +2.446958097791203 -0.05904681325514046 0.102 +-4.888729567242184 -7.546791279840086 0.102 +0.03379031682298694 0.06683694053516044 0.102 +1.043344203612371 -0.0190818019408492 0.102 +1.01031984111285 0.1690176302381581 0.102 +-3.615087627887798 -7.672180757240739 0.102 +0.6679520766284246 1.766157486136674 0.102 +2.722479366496798 1.399976523701456 0.102 +0.02974388937151238 0.1398334722875747 0.102 +4.03634378622997 0.810582124561384 0.102 +12.44229162533721 4.092060595967332 0.102 +-0.7458151095821637 1.13095223356145 0.102 +2.856294285351176 0.6607524572913557 0.102 +3.587398333164792 1.271567572475278 0.102 +5.982404912423897 3.747262249715965 0.102 +-9.06888635142991 3.990705555487627 0.102 +4.443131468096185 0.654425886587213 0.102 +1.363681993302156 1.006397657628979 0.102 +2.296992474346793 -1.38706316639304 0.102 +0.08343986109628079 1.029812308535988 0.102 +1.08521331290898 0.5477767259067753 0.102 +-0.6312907638885448 2.339887421815797 0.102 +0.2988008023414359 0.7752906858378628 0.102 +2.649808430630221 0.5973969920722353 0.102 +0.9144062284791684 -0.06942162970787634 0.102 +3.431936922885869 0.7099875131510908 0.102 +3.644790487914627 0.31690053939005 0.102 +0.3538526970010397 0.287040708065257 0.102 +2.614661892478412 -0.2948512663644779 0.102 +5.005846875942257 1.046914628297569 0.102 +1.486148186266435 0.3820889172579287 0.102 +1.973136018010246 -8.864887946343793e-05 0.102 +3.627898934508412 1.725382213703321 0.102 +2.774959860141843 -0.362260248016908 0.102 +0.1992606759439647 0.414592681219196 0.102 +0.127531290693785 0.05447533752544063 0.102 +3.963738670497062 0.9790476601515032 0.102 +1.425644365391517 0.1939498497423698 0.102 +0.2383203944673397 0.4419056723727797 0.102 +1.689346350560156 0.08991949105236462 0.102 +2.496662253602498 0.8812004158395779 0.102 +2.73052138684303 0.3431957030969256 0.102 +3.782000348761623 -0.1677416348423327 0.102 +1.512520522370264 1.208025380122511 0.102 +4.657866053221469 2.685452076470548 0.102 +0.8126049554333825 8.360504487634797 0.102 +1.17143468874507 2.181464124116285 0.102 +0.5506817759702156 0.06023050780614665 0.102 +4.901579733635208 -2.044713952814343 0.102 +4.765209677042249 -8.282786060796628 0.102 +0.2280224226818927 0.03690838359610953 0.102 +-2.222683164579553 -5.208883890577201 0.102 +4.493497514247815 0.4588535263927234 0.102 +-1.212204553694986 1.776200059923088 0.102 +4.103556579295818 3.161718312005302 0.102 +19.04665287519733 -8.053482431898221 0.102 +0.3557914921146401 -0.04761684264309856 0.102 +1.819662103484878 0.1298927082888618 0.102 +0.05047233770136533 0.1619276321114126 0.102 +4.363296828174851 2.528868606076732 0.102 +8.834296594380106 0.6954183983314514 0.102 +2.618960262358358 -0.06324420865366807 0.102 +0.7924286311410558 0.1548541925267801 0.102 +0.2596335155686315 0.4189080366064669 0.102 +-0.2159055895714689 0.05903885497439344 0.102 +3.497057838738921 1.121888259388215 0.102 +7.120610175151691 3.113319138191311 0.102 +19.02736262275135 -9.03500613205394 0.102 +2.905998336663986 9.309335984949948 0.102 +1.087743248562371 0.6791316433815177 0.102 +0.1631839105933537 0.1205192880728125 0.102 +2.857972499056887 0.8503949745758869 0.102 +7.037012105498256 0.7997988067324202 0.102 +0.9415408181861979 0.2412316695849159 0.102 +18.54850975611566 9.222416502069816 0.102 +4.022889696433434 -0.1319606469268758 0.102 +1.416073730007211 1.879693537617102 0.102 +0.6283829629623143 1.142427360012769 0.102 +1.115339116989319 0.5397426694159991 0.102 +1.093705441844178 0.2703063647607292 0.102 +0.007198449329178688 1.145437428889085 0.102 +2.867270169301488 0.7381142873076647 0.102 +3.31752268602695 -4.411727894958705 0.102 +0.3092675508854561 0.1952841029676818 0.102 +-7.166641504250134 4.955733878023137 0.102 +-0.4491665116044467 0.7434393510864304 0.102 +-0.006438505741147811 0.1506304620215957 0.102 +-0.2901477806396027 0.6101752841604728 0.102 +0.5556088150858602 1.136161601411065 0.102 +-8.830471761065832 -9.313462452768622 0.102 +6.210074908775095 1.809425055788152 0.102 +1.11186406855968 0.7517872351239878 0.102 +-0.3996914313404982 1.421031217589333 0.102 +0.7657037131454636 0.04375583387062054 0.102 +0.06268210057452848 1.00636187140467 0.102 +2.228573492181411 0.8687932252708471 0.102 +13.0322503245323 -0.2882505372135395 0.102 +4.786647983952559 -0.5976063495183199 0.102 +3.030753634406693 0.9279281690124381 0.102 +1.510043185593541 -0.07687037554430579 0.102 +-8.280988251945688 9.12185094177792 0.102 +-9.098203893851036 8.285228311319099 0.102 +0.09629182061035335 0.9528825990533534 0.102 +2.147171509898112 0.5914655454653093 0.102 +-0.02046189445531673 1.114696522926206 0.102 +1.080977311933399 -0.09217198810313264 0.102 +1.033388069280215 0.3114799801779435 0.102 +0.8417816730783095 -1.271546743974047 0.102 +7.019604114993791 -6.720542692882836 0.102 +0.2072239334860926 0.3246842801432488 0.102 +-4.24521376540434 7.98923921138667 0.102 +-0.07407198191970943 0.1478112772840954 0.102 +1.059056683451148 0.981228083620585 0.102 +0.2992368464743578 0.3896316758086741 0.102 +0.8634924846849262 0.294768887163715 0.102 +0.1318428481747092 2.340578453010926 0.102 +19.23583719728535 4.465190715870441 0.102 +0.2208676588790234 0.2070137025853126 0.102 +1.763519884693891 0.9044483639146601 0.102 +0.4158900184984856 -0.1168502932882517 0.102 +2.099163736357074 -0.2846557015951119 0.102 +1.621147795048461 1.186999925298216 0.102 +0.8667258842174134 0.4792914977163515 0.102 +0.3776590307133334 0.2186435662403528 0.102 +-0.06437084868217362 0.2692820146379566 0.102 +5.118844460140902 1.589187661079618 0.102 +2.919509272313613 0.9424853956343588 0.102 +1.757693732460274 0.1563808912788247 0.102 +0.2357310627025397 0.0675427307666461 0.102 +0.02919593049432845 -0.2178752133974168 0.102 +0.09667370353610273 0.1029402911618554 0.102 +3.516453373300016 0.920522240476404 0.102 +0.3045905910792611 -0.1474705055439164 0.102 +1.078573712060819 0.6235309244975512 0.102 +-3.556893948036436 4.809153181534953 0.102 +14.40431479688636 -1.40246839092385 0.102 +2.203858052678682 -0.3359486251115066 0.102 +3.079318175243304 7.474922989277764 0.102 +-6.210903846501404 8.304118340597039 0.102 +0.4322951256838962 9.26055997328319 0.102 +4.130222345010782 0.4284224102606167 0.102 +0.7752686728632985 0.2211593994110467 0.102 +0.1094861238054989 0.7984832780675125 0.102 +2.479309333315364 -0.1207534044193768 0.102 +-0.06431219026370602 0.0399224114409441 0.102 +0.3991677639262476 0.155715577150196 0.102 +2.129495731191326 0.6580702399883979 0.102 +-0.2076902858409785 -6.51104144332006 0.102 +1.082447659292619 0.6430917872980498 0.102 +4.788601462471934 -1.441684232166489 0.102 +1.70698811095161 1.14638104741394 0.102 +0.4657462880685913 -0.02532660456810954 0.102 +1.475837316969075 1.283882725665322 0.102 +-0.005793579140353226 0.8910853316851963 0.102 +3.632480151250005 0.4082784093205417 0.102 +-6.308492018375784 1.392947989905325 0.102 +0.1232742407684176 1.116376462474107 0.102 +-0.06264608511238766 0.7145226597816916 0.102 +0.863454749571359 0.6738868078375569 0.102 +2.561990572037346 1.126754468211726 0.102 +1.739346249695608 0.7478971158967359 0.102 +1.361615535451754 1.327119168879063 0.102 +0.05233600459824576 0.8735480492495583 0.102 +2.487541850800401 1.166184204065217 0.102 +0.9438447175989211 -0.09035956383209461 0.102 +1.53433267766677 -0.1808784045537735 0.102 +0.9114589034683582 0.2539672504872023 0.102 +4.018799250990784 0.6867229661996139 0.102 +0.2267829466176017 0.2480377201096004 0.102 +0.6802931880685628 0.09884796805883134 0.102 +2.19435630839531 0.3400111547024374 0.102 +3.055933182524253 1.259519248420026 0.102 +-0.09747221686172786 0.7475893226760203 0.102 +0.2060666999480562 -0.1365170493082302 0.102 +3.173032222004952 -0.06224160849894073 0.102 +1.352477032159389 0.8043849642906116 0.102 +1.090449491211806 0.03162053109384875 0.102 +0.1510737090619213 0.9677217426795159 0.102 +0.2413017517287364 0.2736240555045394 0.102 +1.03525984236396 0.5043672934300246 0.102 +3.295405439251821 0.1819945947730566 0.102 +3.673071259906119 0.6006250256940242 0.102 +0.4146342884803187 0.03645253303387787 0.102 +3.564632682340046 1.147481893459231 0.102 +0.1321940447998132 0.4718409730429193 0.102 +-0.3083618859567352 0.4422586633048032 0.102 +0.8973230100865422 0.7757181507889706 0.102 +16.16280639010868 1.388702482768717 0.102 +4.017729057666298 0.4014054353768044 0.102 +-0.2478647726953185 -1.076195256265904 0.102 +0.006400785718219905 0.7617837167831385 0.102 +-0.020416038812349 -0.05362654426430444 0.102 +-0.09265890261337158 0.429671583280815 0.102 +0.06682588760703922 0.00236361188929524 0.102 +-7.168959209124123 3.982466777124505 0.102 +0.6579680105882437 -0.009067875199920833 0.102 +3.09690345740373 0.5837624637931004 0.102 +0.8309557103362577 0.1309279139065851 0.102 +0.1082990271395099 0.3550093547534354 0.102 +0.9466030021057139 0.537191622348801 0.102 +8.759114879426681 -1.311131186250384 0.102 +-5.683064893310597 2.898374308209313 0.102 +1.365450257058272 0.452353855860137 0.102 +2.703993082926906 3.701622080289454 0.102 +2.009312918370027 0.4513412890730542 0.102 +-0.05786287481339858 0.1293034197685201 0.102 +2.002088985776495 0.7825560651325025 0.102 +11.2820111057783 4.446118113125941 0.102 +2.10654050505546 0.2884877601542359 0.102 +0.9924233651109132 0.5083702397161859 0.102 +2.527651610225397 0.5067574103976397 0.102 +0.541450472025482 0.121366286540707 0.102 +0.593099613673202 -0.09319402698061087 0.102 +3.999969933735192 -0.1939625970681188 0.102 +-0.1042160616086445 2.857521705886263 0.102 +1.485815163039655 -1.764504961358735 0.102 +0.2882658559312191 0.753271888711904 0.102 +0.3478631959926435 1.157592215505442 0.102 +0.02613807383997682 0.02200396154189104 0.102 +0.3112210990917049 1.36593105967697 0.102 +-0.1818230545776148 0.6697485617953932 0.102 +3.438755143751111 1.392490105143945 0.102 +0.8672592622836574 -0.00504148399016011 0.102 +-0.04099610000797743 -0.03991194268137892 0.102 +0.9000267628755484 0.0262337831868903 0.102 +0.4783679905850332 0.1348574949887317 0.102 +0.7577676556405951 0.6277464768804752 0.102 +1.837564964284542 0.07489642530993301 0.102 +1.65145112627377 0.02363614070894268 0.102 +0.3271278546694113 0.6787992966289451 0.102 +0.4428598174685703 -2.540709963393821 0.102 +0.6738131729456175 0.05085773912519102 0.102 +2.983305443293909 -0.3573199379185554 0.102 +2.788446561753087 0.2656192572410231 0.102 +1.744301541569564 0.04409070882485554 0.102 +5.190804642400563 3.64866610609797 0.102 +1.073759576622783 0.2178590322439956 0.102 +0.7562408130704441 0.4672639797482105 0.102 +0.00354327825289847 0.1904354146180599 0.102 +1.547468660891632 3.9627222889669 0.102 +4.217187901782403 3.972832004748659 0.102 +0.3774637859994802 0.2670093081768528 0.102 +-1.353854705879634 2.865948108538231 0.102 +0.9678011674320508 -0.3252018194243013 0.102 +1.254379322946709 1.675312975474554 0.102 +5.331247563730845 3.052499899337797 0.102 +1.085835890478302 -0.03596746972783302 0.102 +0.1312981333528921 0.6662330806454824 0.102 +0.3100728014344061 0.056911714707371 0.102 +0.1903521169724363 0.4914530602400396 0.102 +0.3347079439421962 0.1292332417333428 0.102 +0.250629008171474 1.063647505581371 0.102 +-8.131807111547751 -9.487649477251578 0.102 +6.913228079528351 2.069475671876246 0.102 +0.272154451401509 0.7860233253830716 0.102 +4.949001631728081 1.37829703095555 0.102 +4.248176971360088 -0.0487122908007098 0.102 +1.162560999600437 -0.8763012821725594 0.102 +0.5911046370121127 1.196069429462685 0.102 +0.9300814514053899 0.5215982749715258 0.102 +2.067420671460214 2.267479197984143 0.102 +1.032262271817635 0.9908839558125424 0.102 +1.158969970862152 0.1621548360186033 0.102 +3.38570849352925 -1.230269952041976 0.102 +0.230440586229909 0.5060075252342343 0.102 +8.464920813794844 2.967879814092882 0.102 +0.5072254275380809 -0.7399827557063686 0.102 +0.4274475346013673 -0.919093384757107 0.102 +3.803069622551758 -0.3771782734551803 0.102 +1.000072996549959 0.9103007390830405 0.102 +3.849330409694679 -0.2096491928331214 0.102 +-5.613299759493463 -8.478674972861716 0.102 +0.1650520737071381 1.124414290622362 0.102 +0.6948322504578097 0.2774929417842114 0.102 +0.8163519116633579 0.4795566756990294 0.102 +0.1848087265093037 0.4347999123468828 0.102 +16.34277917117989 2.564867959524698 0.102 +0.378758543180033 0.06737342376518152 0.102 +4.239419616463829 1.233056530728716 0.102 +4.282368626882652 1.166400806244183 0.102 +17.10059233048319 8.664364987310801 0.102 +16.34401874176172 8.294750992430112 0.102 +0.07979526182556362 0.5541946502552215 0.102 +0.1130967744699387 0.07905748944202665 0.102 +2.945937041682267 0.8802043936243648 0.102 +-1.496438688650889 -0.691136808926298 0.102 +0.4953091606211569 0.2245688019346599 0.102 +2.02331504316779 0.9532163067886713 0.102 +4.185765934321634 1.773156111843342 0.102 +2.754455461102344 0.619169944628334 0.102 +0.6964325621597985 -0.04925553005694659 0.102 +3.076507176799148 1.140871001656005 0.102 +-9.156415314597634 -8.453362343759869 0.102 +2.029743800458998 0.1355592070943537 0.102 +-0.2187620198319163 1.237315730274852 0.102 +0.7508931438922654 2.004475838980466 0.102 +3.493253836286591 -0.03835260114207405 0.102 +1.694155765076869 0.8268087697473488 0.102 +0.08178855500781633 0.1360091916714072 0.102 +3.154594972123371 0.3687827256659342 0.102 +1.745808863959939 -8.093742572639574 0.102 +0.09747486460592066 0.01971127370260271 0.102 +1.867156924790794 -0.2737934205132729 0.102 +4.320848470176943 0.8724354035845852 0.102 +-0.1932341356695847 0.8748026941331771 0.102 +0.0802926403277243 0.08320483520485085 0.102 +1.160199023222881 0.6893408482849893 0.102 +-0.06549765010133327 1.071458000990179 0.102 +-0.1301525861081926 0.9970798939065411 0.102 +0.7073517229286186 5.504791063839988 0.102 +-0.06742104358536351 0.1063329397601299 0.102 +0.1293681779576963 0.9053816989335207 0.102 +0.5036266033557002 0.09832658644504069 0.102 +2.813780316750651 1.220938403711161 0.102 +0.2528105992815072 -0.04001837761581865 0.102 +1.98868270456605 1.702399455471822 0.102 +0.7409457476493492 -0.0425266361354046 0.102 +3.895221986164052 2.837816738842027 0.102 +0.7741521226596736 -0.1371946387584626 0.102 +0.4021541933181625 -0.002429657127525876 0.102 +0.7831035572769106 1.130375900041279 0.102 +2.178216913868863 1.158539234274557 0.102 +1.007301607707842 1.123677793469041 0.102 +2.698890900323214 1.06436796471 0.102 +3.998688702435194 0.8707153514830295 0.102 +-7.171664068826553 8.059269952882783 0.102 +2.539942133671289 -0.100892476751815 0.102 +-0.06011387731507568 0.2281148823818701 0.102 +0.09146350479109078 0.06181523620380244 0.102 +0.773541707273677 0.402664367917674 0.102 +0.05584211717201461 0.8379623110930249 0.102 +0.9133772732377361 0.642425809876351 0.102 +2.301478353337144 -0.2293429323169336 0.102 +17.44713714417787 -1.730925861586963 0.102 +1.636966966574072 0.7534114395798436 0.102 +0.6872184947725788 0.07726236898434803 0.102 +0.0331707516032632 1.122612679306801 0.102 +2.086842473837258 0.4760097057396806 0.102 +1.758561699590273 1.235199470615444 0.102 +0.2214204724149542 0.3113470629403634 0.102 +4.379331023520646 -0.1955687500216877 0.102 +0.7210607363932201 -0.09446457158720806 0.102 +3.647972723564425 -0.06380145347006802 0.102 +0.7161464666158696 1.136681421485523 0.102 +0.1406436979641721 0.1948533024295173 0.102 +1.531398057210525 2.270362838693368 0.102 +1.332592608216592 2.230995046934853 0.102 +1.643745457864599 2.444652976667685 0.102 +1.94495036064394 2.464516800396537 0.102 +0.09847604483891155 0.4876173524320854 0.102 +2.720877194568522 -0.1141203699952114 0.102 +12.00689219953144 -4.964205829344721 0.102 +0.2208778267554869 0.09369249743268693 0.102 +12.99771703432332 8.185437749204585 0.102 +6.383796037545899 -8.423155190448654 0.102 +2.035619870115335 0.9983933198259665 0.102 +0.1546879627892197 0.8105238695289724 0.102 +3.628767463039867 0.470913511357815 0.102 +4.127003817123546 1.525657835013937 0.102 +3.440710535432361 1.258039575742515 0.102 +-2.75114766943835 -2.445857121340366 0.102 +1.136031087925735 0.9416800823977047 0.102 +5.351780368717081 2.568944738321207 0.102 +2.819517183829741 -0.1584442977258507 0.102 +1.095001735179318 1.070280120276516 0.102 +4.183371548312144 -0.655203042345352 0.102 +3.437170449589134 0.3142206347350978 0.102 +3.435079723457033 0.5968587170824255 0.102 +3.401277092810312 0.5395372052990151 0.102 +0.8073584318332838 0.0008197009551854266 0.102 +10.08660376725017 7.464610539721066 0.102 +-8.90990512728205 -4.929023636187241 0.102 +-2.500993793397599 -3.231247182135072 0.102 +0.5974256630844996 -0.01674296711872021 0.102 +1.733959213801605 0.0972737453400912 0.102 +0.1664181900946662 0.1612373469466315 0.102 +-0.03335317500430807 0.8740252836473545 0.102 +1.15167444383397 0.9217574513532645 0.102 +3.912225433181537 0.5528348033352483 0.102 +4.818322516483992 -3.493671817072589 0.102 +2.272134031369437 -0.5371723855395569 0.102 +-0.1266035978418453 0.7578852507654212 0.102 +0.03537735765463286 0.9219460879783935 0.102 +0.8788797688315451 -0.102788270057457 0.102 +0.8764679185395756 -0.1208210219004228 0.102 +0.8455036311896834 -0.1442746959785732 0.102 +0.8344375353530559 0.4239716765580251 0.102 +3.49788718760377 1.313904485685764 0.102 +0.7337601950094814 0.4018818041269823 0.102 +0.4478464913198399 3.619171699764727 0.102 +0.4551068556480757 1.069609338332466 0.102 +3.932500973144009 -0.3519408491210997 0.102 +0.2369338905151844 0.7720486372134798 0.102 +-0.06351667230662422 -0.05386421474842999 0.102 +5.297563202728795 0.6651587213512239 0.102 +2.182233789144249 0.2062714334191303 0.102 +0.06266515234754567 0.5092714398473459 0.102 +0.6384666237036491 0.02933078857045219 0.102 +1.01467089175281 0.6204408513693209 0.102 +-0.03125125555777705 0.2020349614764737 0.102 +2.292146071443362 0.30772650794949 0.102 +0.4497307099708644 0.1978064871726282 0.102 +-3.24389123190611 -5.354292564289935 0.102 +12.284663244067 -6.068814547317556 0.102 +1.801638533144933 0.8346338742038761 0.102 +0.798516241447095 -0.05586752150383924 0.102 +0.6981490730377602 0.7391247020029716 0.102 +1.485256170453597 0.8738898826473374 0.102 +-0.8760440800793861 4.370128815532779 0.102 +1.506968180594729 -0.03007942756769861 0.102 +0.8702545828981054 0.5106039924934013 0.102 +1.104210031861109 0.2964795457185145 0.102 +2.85175323989615 -0.1110246999900076 0.102 +-0.07742607451552019 1.046338095073763 0.102 +0.3667889622437166 -0.03100427016696933 0.102 +18.41027568331003 1.387232031743509 0.102 +3.783291444309864 1.501690367519727 0.102 +0.9903783032503085 0.6182775101317073 0.102 +2.58975376503717 0.2711319462653581 0.102 +0.07418793788001921 0.8716832381808048 0.102 +1.680921829957405 0.7040897224660421 0.102 +-0.06731778371013272 0.8858057881298005 0.102 +17.11224501745462 1.141965218367079 0.102 +4.269233240368242 1.968073289522319 0.102 +0.06993056288090341 0.7114997201755663 0.102 +0.05426165540884884 0.6737726494773814 0.102 +1.303459318371859 0.422537807296554 0.102 +2.361113784168155 1.909977794892129 0.102 +0.4898266743516451 -0.4760939326022094 0.102 +1.352967962602891 1.139559552699053 0.102 +0.06294761369157845 0.2729935090245101 0.102 +4.361444763160406 2.140937847039553 0.102 +0.9168738419943487 0.4203513826242342 0.102 +0.3440163661225319 -0.1698316447397975 0.102 +7.775972034085733 -1.031942696810381 0.102 +11.24512905109559 -6.795679724208243 0.102 +0.4499356857281862 0.1217528069148029 0.102 +-9.268380365994888 -4.042292547212027 0.102 +-0.177910187604303 0.05208076303378784 0.102 +2.276440321210676 0.8227246659766992 0.102 +3.6310383209646 -0.2401980048053208 0.102 +19.44817364417029 -2.129027622827208 0.102 +0.09582203191251426 0.257958622389126 0.102 +15.39784088724527 -6.102410788054541 0.102 +1.533925110224359 -1.200632182651584 0.102 +4.230645181969184 1.048871664964118 0.102 +0.8346064652395275 -0.05557016599742681 0.102 +0.844580284822972 0.03386052188907874 0.102 +16.34366664512707 7.490136209815526 0.102 +3.7279153208328 0.8697801220005434 0.102 +0.1371261352268636 0.09672645244894963 0.102 +1.991859533485584 1.092075707410756 0.102 +3.713970367583428 0.2101919113704058 0.102 +4.241012376825078 0.4740180810927274 0.102 +0.3708666367433315 0.03216916929706139 0.102 +3.564041639674418 -1.38584942866259 0.102 +-0.1879465745228845 0.3178221267502681 0.102 +0.3512449526304603 0.07730291282929164 0.102 +3.690532555210233 0.9453916707352288 0.102 +2.058834012504762 0.2465917164425208 0.102 +1.708855092980798 -0.02045630574430042 0.102 +1.456689827378562 -0.08401574901409964 0.102 +0.7284441558344817 -0.01790073372070527 0.102 +-0.1103742532297375 0.6812718673076141 0.102 +-0.07805321323487513 0.4071572511070914 0.102 +0.24808570313896 0.1224939467827368 0.102 +0.1934639089210203 -0.1991287283255472 0.102 +2.594707733386057 -0.2070080371504824 0.102 +0.1603220576230732 0.8519341090912415 0.102 +0.1713128391371447 0.2236552113510793 0.102 +0.6395091843876779 0.2441797221120305 0.102 +2.128625538216636 0.001323325377523732 0.102 +3.07931291808454 -0.01791354662358156 0.102 +2.990948615281525 0.7883443253955068 0.102 +0.1269477521331449 1.03633280455092 0.102 +3.543172450906926 1.096778638053258 0.102 +0.6902683812109576 0.407304955313657 0.102 +2.43725355511569 -2.137228645060576 0.102 +2.25271593161233 -0.1105470746815352 0.102 +0.4081795407570852 1.10306995493351 0.102 +2.502835033062351 2.943157597987909 0.102 +0.01742124135241305 0.1976465656195421 0.102 +0.2177708798898665 1.002867850577795 0.102 +3.7315273844918 0.4039144367140692 0.102 +0.1421657798952076 -0.07730543127472186 0.102 +0.5584566867816743 0.0841375641654029 0.102 +1.591489629459454 0.0660680828287362 0.102 +0.5273303419407962 -0.01195784495901991 0.102 +15.2885761901772 -1.836319001057704 0.102 +3.346170569042931 0.8774589683130189 0.102 +1.467540829580464 -0.02354103990519206 0.102 +3.816863475401213 1.090251097224256 0.102 +2.257867843818331 0.7302180792349366 0.102 +1.955204554236075 0.7646681691007793 0.102 +0.1342597316202315 -0.09245224024788586 0.102 +0.8752776794620969 1.138911991644845 0.102 +6.041962494051715 0.07649497694265525 0.102 +3.426476659032418 -0.577258999907916 0.102 +2.40609798668239 -1.082306947528671 0.102 +0.5145348623490829 -0.1042401192246691 0.102 +0.1526242176896001 0.06971850200035995 0.102 +0.4943869669088957 -0.2343896705672523 0.102 +-9.243948818669855 1.175016022681055 0.102 +5.013434203780297 -0.4617044362352631 0.102 +0.2597381769379751 0.6100489319709969 0.102 +-0.08751357249533534 0.8945221753377628 0.102 +4.901500312490917 1.704113753023224 0.102 +4.910419253229045 -3.038983400861871 0.102 +3.837289860446817 0.006415769388644056 0.102 +2.657330314147472 0.3752352962956089 0.102 +4.584763833954113 0.5356849964355466 0.102 +1.070160831086005 1.156195524608235 0.102 +0.8082589455746799 0.5450896027963104 0.102 +3.097819822326533 0.2927506911170471 0.102 +4.335895247339076 -7.797723847073482 0.102 +2.312481365835906 0.4210589365275651 0.102 +-0.2356448840218031 0.9219169482928721 0.102 +1.662658469644176 0.6001736709860384 0.102 +-7.222181953103458 -8.161682768613515 0.102 +4.147331113695907 -0.03899005266037307 0.102 +4.336224757388342 0.1830718800169458 0.102 +1.074307927864519 0.6649878368624277 0.102 +11.75238981402743 5.576926499116101 0.102 +-0.03171547033897174 0.7281454009420112 0.102 +0.06049452698916166 1.049802065161938 0.102 +-4.08450265315027 0.5229175031953144 0.102 +2.944103582563161 0.631953758735702 0.102 +2.18420458687844 0.8047788468812787 0.102 +3.579955599757212 -0.07685456332241453 0.102 +12.19546657978786 1.493929212761282 0.102 +0.7766180494643171 -0.0950179014415293 0.102 +0.8385748193398396 0.687628196076831 0.102 +4.081005755092566 -0.02505064677484649 0.102 +2.388971788082201 -0.08397446754149784 0.102 +0.2534346919243357 0.1875838336307969 0.102 +-9.291290655899243 0.5268710799509995 0.102 +1.185306764500302 1.274137063882901 0.102 +0.07053146715311555 -0.09329276416226256 0.102 +0.3320969186914333 0.826552283929831 0.102 +0.1967677087345299 0.890964912185362 0.102 +13.03637123926411 -5.463837490379324 0.102 +13.8830274219798 -4.643740610468245 0.102 +0.1575987613664673 1.274913048633002 0.102 +1.029862508906133 0.2358592132554461 0.102 +8.209607599722865 -3.886426665222428 0.102 +-9.15486173720304 -7.05171792509073 0.102 +4.121635779250591 1.386601190658739 0.102 +0.03812711003173164 0.03976876896744096 0.102 +0.2359889770542574 0.9022986331792748 0.102 +-0.005611760564858109 0.3216231880883049 0.102 +2.936326430216702 0.5233117880187792 0.102 +6.733687825624961 2.765825411980458 0.102 +1.877471028773898 0.2252745383193895 0.102 +-0.1186254775310931 0.09040965385385541 0.102 +3.911820968436528 0.4050057805970585 0.102 +2.467718498946836 -0.1713372277992423 0.102 +1.287237002440871 0.4694326162819881 0.102 +2.636797909206453 1.02227879266016 0.102 +0.08918444789393722 0.3936903576474687 0.102 +0.3148874559611675 0.2814743448540597 0.102 +1.891134821583591 0.9733071990279892 0.102 +1.114542031019183 0.03104215923339855 0.102 +2.478497142431819 0.2137518448477167 0.102 +0.124322874181427 0.9642076692346635 0.102 +0.1355836534148805 0.9797305122173896 0.102 +-3.174741900426802 9.435457964928332 0.102 +1.117485987407033 0.7670117258396041 0.102 +-0.06359343674798006 0.8275708657009317 0.102 +3.676978743749629 -0.1011143621585938 0.102 +4.491452639616183 -0.4128503252104772 0.102 +0.007297512681799978 0.4345773839595006 0.102 +5.333516085835109 -0.2084590444393821 0.102 +-0.08608868632397378 0.238331644775853 0.102 +0.7297847863660001 0.1951068446305429 0.102 +1.831920068026427 0.9426164467973264 0.102 +-0.9260655247059328 2.731581057261709 0.102 +0.2117787038135097 0.7798921680194959 0.102 +11.97919846776175 -7.649443586341611 0.102 +2.304154934234813 0.1066009571128615 0.102 +2.106546069643516 -0.5904677408699885 0.102 +1.989475165385662 0.05845826245312766 0.102 +3.684971059881479 1.344875522356252 0.102 +-0.08116014497958079 0.06276786630965099 0.102 +0.9090798526794867 -0.02230846670286407 0.102 +-6.219345031264798 5.765744154081084 0.102 +1.065767146058279 0.1410704494088919 0.102 +-6.594661598907519 6.662345429582975 0.102 +3.763151208062861 0.2498290254265864 0.102 +0.9513144131750506 0.6346076616424895 0.102 +2.829157066692182 1.444318619815263 0.102 +6.616296053785135 -5.757754206642465 0.102 +0.6996433780294397 0.2098223955752696 0.102 +0.1922485161127504 -0.403436862750608 0.102 +13.67681238002584 6.524647124610429 0.102 +1.098175853739665 0.6617038058427562 0.102 +0.09595448294866261 -0.07451975027818103 0.102 +2.674157614984469 0.3247808289924853 0.102 +4.306255128597233 -2.816688876739206 0.102 +1.249519000087602 0.4124096955381408 0.102 +3 1 0 0 +$EndNodes +$Elements +7 18364 1 18364 +2 1 3 6088 +1 1459 3025 431 2672 +2 1762 4321 452 3904 +3 211 2871 1085 2204 +4 2864 522 4806 1829 +5 2750 2098 5642 999 +6 2638 311 5398 2044 +7 1256 2686 5590 3349 +8 2236 856 4877 2929 +9 1267 4762 2652 2359 +10 1347 3035 1014 2443 +11 293 3392 1940 5063 +12 1486 1874 5154 2421 +13 3960 2367 4975 614 +14 645 2924 1473 2345 +15 3809 2819 4011 1428 +16 5217 2283 5675 1820 +17 1284 3426 1750 3740 +18 1538 4505 5510 2438 +19 2750 443 2974 2098 +20 3672 4530 2443 317 +21 4544 845 4819 1946 +22 5535 1830 3992 1277 +23 4889 2665 1271 5371 +24 593 5663 2408 2224 +25 5940 1836 4017 1262 +26 4045 4511 3088 573 +27 1590 2505 348 4293 +28 1762 4377 680 3611 +29 2239 4735 2263 429 +30 3893 1473 2924 4414 +31 2099 1650 5465 2956 +32 3559 1845 3641 2893 +33 842 4673 1857 3953 +34 5632 918 2834 1936 +35 2499 2529 2342 1107 +36 221 2019 5262 2519 +37 382 5560 1859 2948 +38 205 3144 1285 2392 +39 2198 3524 870 256 +40 2158 6105 2296 261 +41 5506 2974 1916 5359 +42 2661 4206 2890 441 +43 3179 3351 2482 353 +44 2114 4640 2132 295 +45 1333 4514 814 2777 +46 2691 2109 2587 291 +47 4667 1864 3866 1504 +48 3309 2086 5427 219 +49 1707 812 2136 4802 +50 5356 2205 2406 801 +51 6163 406 5261 1865 +52 5877 1345 3866 1864 +53 4544 1982 4944 845 +54 949 2790 4552 2611 +55 2437 494 4897 2666 +56 2408 864 3906 2224 +57 5448 2041 2388 860 +58 1274 2792 936 2594 +59 2834 682 4896 1936 +60 682 3128 1448 2719 +61 4865 265 2578 2123 +62 3268 1871 4197 688 +63 1780 2288 2251 4932 +64 273 4095 5418 2456 +65 991 2726 1462 3211 +66 3195 1181 2410 3672 +67 5484 1922 2952 917 +68 6220 2574 2634 809 +69 4400 1947 4735 866 +70 2100 5120 51 52 +71 2661 441 2696 4024 +72 1459 3447 945 3025 +73 2938 1932 5831 1009 +74 3374 1876 5561 1284 +75 1219 3739 5478 2459 +76 1965 5665 511 5601 +77 5446 5805 2688 941 +78 1958 3895 1147 5325 +79 837 5235 2323 5370 +80 2191 5939 2040 5699 +81 3278 1064 3973 1885 +82 2596 1014 3012 3564 +83 898 4260 1524 2618 +84 1308 1977 2725 5872 +85 2189 2781 294 6141 +86 722 5017 1940 3724 +87 1114 3404 5082 3153 +88 1478 2244 772 4212 +89 1957 454 1958 5325 +90 3105 1028 3495 4680 +91 3933 1712 5171 299 +92 1562 3699 1873 4933 +93 4271 1949 4780 611 +94 5865 3271 1573 4266 +95 2779 2162 4319 212 +96 3895 1958 4861 621 +97 4653 2587 4884 819 +98 2142 5853 2214 507 +99 1759 2114 785 5407 +100 3713 4849 3097 1281 +101 350 4128 1615 2533 +102 1738 2562 365 4482 +103 4218 843 2584 2108 +104 4624 1828 5464 2379 +105 5696 930 4024 2650 +106 5254 789 5631 4091 +107 1916 3996 1070 3975 +108 2406 2205 2645 967 +109 2644 5431 1886 4536 +110 1825 3563 784 3932 +111 5262 2019 4968 737 +112 4375 5519 4379 1376 +113 4616 856 3504 2060 +114 663 4232 1636 2516 +115 1013 3434 1510 2805 +116 3497 4096 2713 482 +117 549 2410 1181 3082 +118 1783 951 2483 5575 +119 720 3026 2013 5951 +120 1338 4347 1785 5156 +121 5702 2014 4747 970 +122 3152 3951 2494 607 +123 3784 1963 5090 874 +124 2158 973 2486 2485 +125 2017 2472 880 5515 +126 2933 3072 2440 1122 +127 373 2539 1811 4792 +128 4223 1365 3864 2045 +129 4343 2045 3864 654 +130 5036 484 4851 3553 +131 6130 1930 3904 452 +132 2184 2987 1108 5948 +133 5476 2453 6219 2020 +134 4236 632 4878 2008 +135 2458 1466 4707 4054 +136 4462 2366 5096 1553 +137 2974 443 3996 1916 +138 1134 2682 333 2588 +139 2620 450 3924 2275 +140 980 3329 1411 2867 +141 1396 2898 1063 2850 +142 4309 4820 2006 929 +143 2583 2079 3831 867 +144 1449 3128 682 2834 +145 2952 411 4756 1981 +146 814 4650 5569 2777 +147 3603 4344 2866 312 +148 2515 1080 3635 2082 +149 2092 790 1984 5227 +150 3991 2685 2475 1102 +151 4769 2024 5408 1107 +152 5930 1935 4192 211 +153 3144 205 4190 1931 +154 949 2389 267 2390 +155 3916 2245 4194 422 +156 1608 3816 805 3043 +157 2938 1205 3649 1932 +158 4780 1949 3430 1332 +159 1428 4706 481 3809 +160 4064 1931 4190 1133 +161 4611 1436 4263 2137 +162 1740 4315 372 2843 +163 4936 2107 2967 969 +164 1160 2553 893 2552 +165 4659 1938 6011 1470 +166 1846 6059 708 2964 +167 1469 3827 1131 4147 +168 781 3113 987 2747 +169 857 3746 1425 3552 +170 5574 963 3904 1930 +171 1492 2414 1382 3557 +172 1522 5627 2932 2438 +173 4731 4396 885 2722 +174 1067 2748 501 2731 +175 1986 4830 698 3434 +176 3392 811 3724 1940 +177 4097 635 4795 2001 +178 5629 1360 5100 2059 +179 5073 904 2697 5666 +180 2050 3923 2180 881 +181 3861 813 5179 1783 +182 2528 677 4764 1890 +183 786 4217 1736 4422 +184 2498 4554 3383 813 +185 1130 3657 1733 3656 +186 6096 2445 2618 1847 +187 640 2746 1695 4552 +188 415 2957 1505 3308 +189 4727 440 3250 1751 +190 1708 4966 1876 3374 +191 733 2979 1995 4823 +192 1023 2426 1022 2714 +193 4042 1964 3479 1006 +194 5702 2325 5967 2014 +195 5353 4073 1969 5367 +196 4271 1249 4122 1949 +197 2568 807 5457 2131 +198 3811 1482 1856 225 +199 2254 446 2388 2041 +200 603 3551 1584 3047 +201 2571 5605 1543 4222 +202 3070 360 3641 2212 +203 2468 1177 3071 2469 +204 1345 2647 797 3866 +205 821 2843 1876 4966 +206 2074 2075 721 1100 +207 3826 226 3629 5106 +208 4447 2190 830 2258 +209 94 2088 4010 93 +210 1014 2596 317 2443 +211 433 2942 1488 2679 +212 5269 1960 4178 1135 +213 1592 4880 986 2209 +214 2736 2900 2565 1010 +215 3327 2342 1259 5583 +216 1334 2122 3161 5953 +217 911 3692 270 2610 +218 5161 2116 5783 1663 +219 1819 2511 417 3296 +220 3776 1644 5594 2937 +221 6003 1870 770 4710 +222 1099 2736 1010 2748 +223 3146 2357 2642 994 +224 3972 215 2592 4474 +225 5967 932 5784 2377 +226 1538 2687 679 4323 +227 1790 4513 369 3586 +228 5444 57 58 4616 +229 5462 5251 2103 3208 +230 2303 509 5982 2248 +231 4178 1960 4430 693 +232 5939 412 4496 2040 +233 789 5930 1850 3988 +234 1677 2461 713 4179 +235 3498 568 2704 3852 +236 3370 4045 2720 1184 +237 3160 38 39 3986 +238 1381 2769 1095 3643 +239 2200 763 4800 2199 +240 1600 2537 649 4235 +241 3999 2231 2726 719 +242 6111 1125 3924 1963 +243 2862 268 2333 4606 +244 4446 1964 5917 1413 +245 803 1973 5058 2076 +246 83 2370 4940 82 +247 3099 1191 5853 3129 +248 3728 1972 5501 675 +249 1317 3297 1082 3409 +250 2399 234 3703 4047 +251 2180 3693 5245 2628 +252 2797 1998 6150 758 +253 2894 6021 2525 388 +254 4104 1517 4432 2405 +255 2605 1166 5000 3037 +256 3479 284 3083 2051 +257 5233 1973 5505 2402 +258 1025 2604 1669 4792 +259 2444 1009 2601 2437 +260 613 2084 1101 3849 +261 3270 518 2600 3714 +262 4059 4305 2845 1468 +263 790 4620 1962 5119 +264 2113 751 5681 2742 +265 2579 443 2750 4529 +266 2571 3993 2093 1154 +267 5303 847 3334 2072 +268 4446 1413 4683 2448 +269 2529 524 6113 2342 +270 3707 529 2542 1158 +271 428 4802 2136 2823 +272 5939 2191 2870 3877 +273 356 4645 6036 2252 +274 227 3150 1879 4476 +275 2337 958 5771 2431 +276 620 4419 2036 6075 +277 740 4338 2328 4516 +278 3641 2327 3688 2893 +279 2416 4021 2815 860 +280 1991 5238 2286 1021 +281 30 5309 1934 3273 +282 2903 2069 3074 919 +283 2675 420 4602 2139 +284 3728 1065 3987 1972 +285 2687 1538 2438 4300 +286 3003 584 2769 2183 +287 3987 435 4051 1972 +288 4543 2520 2843 821 +289 3188 1320 3787 2372 +290 3758 400 2247 1580 +291 3292 1326 2509 3703 +292 2714 1022 5962 2592 +293 3314 1996 6166 778 +294 2169 2951 2723 1034 +295 3917 3974 2933 1430 +296 3050 1709 5189 2102 +297 875 3855 2132 5859 +298 5277 944 3345 2800 +299 2116 306 2444 5539 +300 1773 4137 660 3936 +301 2273 2186 5610 358 +302 2456 2187 5606 273 +303 4988 2065 3994 765 +304 1164 3533 234 2399 +305 2158 2485 974 6105 +306 2044 5549 925 2638 +307 2675 4234 746 2110 +308 5871 2238 1046 2237 +309 754 3694 1623 3218 +310 973 2158 261 3573 +311 3960 1545 5301 2367 +312 2673 1043 4528 2157 +313 735 4724 2112 2854 +314 2248 976 5957 2303 +315 3966 734 3841 2207 +316 2079 2583 3058 1064 +317 5553 2972 5075 773 +318 1093 3134 472 3543 +319 1041 3822 5317 3355 +320 1907 4915 717 5134 +321 1043 4457 1840 4528 +322 3823 2489 3538 246 +323 3968 1993 4553 1170 +324 4474 957 3532 2418 +325 97 98 5111 2424 +326 2228 6007 1013 3546 +327 5994 5046 674 3435 +328 2397 3745 969 5723 +329 3070 1438 5671 2975 +330 3263 1029 4479 2021 +331 2878 954 2506 3536 +332 783 3955 1298 2277 +333 730 2624 4943 4135 +334 385 2105 1572 5007 +335 4097 2001 4325 1356 +336 1443 3098 1970 5149 +337 2583 867 5966 2269 +338 3309 1075 3582 2086 +339 2182 2680 2983 1193 +340 1651 2903 919 2424 +341 3883 2345 3418 1008 +342 2470 5609 785 5372 +343 4732 2960 4229 343 +344 2050 5004 984 3163 +345 887 2599 489 3109 +346 5176 397 4217 2095 +347 799 5541 1985 2582 +348 3070 2212 3320 1044 +349 1565 3937 1353 2803 +350 2424 2762 96 97 +351 1109 2858 469 2813 +352 3158 1241 2739 3310 +353 4896 3820 5632 1936 +354 4236 2008 5915 1367 +355 2805 4311 4017 227 +356 1123 2873 1059 2586 +357 2246 4417 4370 831 +358 5427 2086 5305 2560 +359 1837 4434 657 3975 +360 6168 4083 1816 2598 +361 2010 2733 925 5549 +362 988 4980 2329 5013 +363 2176 1624 5603 2177 +364 3787 247 6039 2289 +365 3878 1361 3673 2758 +366 2672 431 4749 2220 +367 3592 212 4319 2009 +368 793 3126 1500 5299 +369 5023 946 4048 2134 +370 5637 2835 2106 756 +371 2801 3886 3605 1115 +372 2677 1048 5813 2355 +373 1405 3550 332 3029 +374 5606 2187 5545 1775 +375 4479 387 5142 2021 +376 2536 5571 1786 236 +377 4677 2313 3715 251 +378 4587 2092 5906 276 +379 1417 3121 346 4609 +380 3993 2571 4222 1664 +381 2515 2011 4127 376 +382 2378 2631 5702 970 +383 2831 1169 4435 5165 +384 2954 2046 4668 1537 +385 518 2877 1129 2600 +386 4678 2015 4106 513 +387 5119 201 5701 2268 +388 1669 2604 1232 2767 +389 2499 3373 3367 2529 +390 4008 1396 2850 3635 +391 2316 1729 4436 444 +392 1068 2806 1319 3266 +393 2343 4616 58 59 +394 2770 1266 2837 2868 +395 560 4149 1818 3117 +396 6151 2043 5657 1901 +397 808 2794 1985 5541 +398 3263 2021 4178 693 +399 5255 2454 3043 805 +400 4363 996 3095 1848 +401 3009 2097 4161 1189 +402 1005 2742 5398 2882 +403 2105 385 5837 3224 +404 5924 2349 5771 958 +405 915 5280 2039 2829 +406 607 2494 1352 3700 +407 3676 5999 5158 636 +408 4549 1618 2723 2488 +409 793 5429 1401 3126 +410 1189 4161 1756 3332 +411 4624 2379 5039 4567 +412 499 4501 5802 2484 +413 4576 1814 3120 5423 +414 3706 2223 2928 979 +415 4599 1769 2923 3899 +416 3544 2412 4881 1116 +417 441 3338 5202 2696 +418 2244 3373 2499 465 +419 2304 4329 678 6229 +420 4562 2093 4937 778 +421 3993 461 4938 2093 +422 875 2367 5301 3855 +423 1044 3320 4931 2833 +424 1084 3542 1147 3895 +425 4618 2033 4586 1407 +426 3995 2111 5050 921 +427 616 2859 1476 3648 +428 1347 3269 482 2713 +429 4385 654 3864 2210 +430 2669 644 5480 2033 +431 4498 6085 4648 780 +432 640 4373 1887 2746 +433 955 5980 5750 2627 +434 4462 4111 5917 2366 +435 4042 2366 5917 1964 +436 3135 2513 99 100 +437 2394 2625 4105 1124 +438 2179 2838 5527 368 +439 346 4532 1927 5441 +440 398 2626 1871 5113 +441 4428 2128 4481 279 +442 2176 2177 962 4939 +443 975 2446 350 2659 +444 5188 2385 3579 955 +445 5148 5051 448 2976 +446 848 3265 6032 4491 +447 5266 5922 1033 3494 +448 3610 749 4715 2427 +449 432 4304 3640 2350 +450 2668 2129 5146 791 +451 3743 1604 5146 2129 +452 1770 4022 1155 4138 +453 2586 629 5809 4895 +454 4883 621 3095 1782 +455 2806 3807 3261 1319 +456 622 5621 2154 2788 +457 3940 1705 5139 288 +458 1038 4159 1849 4145 +459 2795 879 5957 2295 +460 2673 2157 3139 452 +461 3865 690 2946 5070 +462 295 4185 5486 2114 +463 3711 2630 2506 954 +464 3954 2765 3747 1025 +465 5293 2303 5957 879 +466 4865 2123 5958 2211 +467 2337 3877 4031 477 +468 6013 742 4319 2162 +469 667 4237 1765 3989 +470 5406 980 5188 2085 +471 2675 2110 5102 420 +472 2958 4804 4026 1567 +473 3105 2108 4978 1028 +474 4873 2039 5280 1209 +475 66 67 3923 2050 +476 4161 2097 3552 207 +477 873 4480 1921 5038 +478 2248 960 2308 5931 +479 2130 3154 1601 5259 +480 4201 2042 4330 457 +481 3874 2336 6158 1287 +482 317 2596 1233 3253 +483 2916 521 5584 2209 +484 3111 2145 3272 1024 +485 2556 2557 4740 863 +486 1916 3975 657 5359 +487 4249 766 3660 2174 +488 2742 1005 5250 2113 +489 2258 830 3629 4148 +490 1603 3750 542 4363 +491 3036 2808 5535 1277 +492 2603 222 4497 1923 +493 2277 2885 5096 783 +494 2298 854 2594 404 +495 5595 643 3475 2250 +496 5529 2255 3949 387 +497 6103 2295 5957 976 +498 4988 1641 4601 2065 +499 1947 5969 2263 4735 +500 5378 2495 2591 1056 +501 2121 2504 4205 1279 +502 4837 1239 3884 2566 +503 2426 519 4887 3812 +504 4125 439 3188 2372 +505 1521 3960 5864 2763 +506 3946 2225 4151 433 +507 345 3547 2249 6184 +508 635 4995 1794 4795 +509 5211 2077 4716 413 +510 2050 881 2155 5004 +511 885 4396 1713 3647 +512 2412 960 2910 2909 +513 5539 771 5783 2116 +514 2645 510 6046 2312 +515 5352 2588 333 2104 +516 1782 2963 223 5043 +517 2440 2630 6066 2653 +518 2051 3083 4020 841 +519 4817 2727 2569 583 +520 228 4595 1506 2285 +521 5882 4404 3732 1915 +522 493 2576 974 2485 +523 2518 1031 5753 2138 +524 4744 1405 3029 2332 +525 1713 4396 4731 4550 +526 2351 2399 4047 822 +527 230 4800 1593 5083 +528 870 5281 6183 1681 +529 3156 245 2773 3704 +530 4727 2375 5880 440 +531 252 2795 2295 6103 +532 5324 5472 2660 465 +533 4617 1872 5428 2227 +534 1740 4269 1369 4315 +535 883 5180 2105 3224 +536 3074 299 5788 2065 +537 3430 2059 4095 1332 +538 4549 2488 4418 715 +539 2921 80 81 2527 +540 302 4662 1613 4786 +541 4363 1848 4561 1603 +542 4204 1577 4938 2493 +543 2012 823 5393 2159 +544 2451 1048 2677 2813 +545 2416 860 2388 4761 +546 3176 1273 4628 2078 +547 4157 434 4571 2611 +548 4221 1433 5198 2053 +549 1563 4199 1065 3728 +550 893 4065 4878 2436 +551 3050 2102 6037 301 +552 1598 4715 1108 2987 +553 2230 4157 1287 4308 +554 3477 762 4635 2083 +555 1370 4023 364 2335 +556 3818 1343 4998 1983 +557 2928 483 3644 2523 +558 3581 1245 4571 2063 +559 3217 1312 2913 3646 +560 3552 2097 4760 857 +561 2854 2339 4297 735 +562 1559 5092 825 2501 +563 5697 3950 2186 6055 +564 2655 608 3333 3958 +565 2337 2950 6091 958 +566 3020 2232 5622 963 +567 1603 5689 1140 3750 +568 2959 2532 70 71 +569 2903 597 4642 2069 +570 1032 6010 2645 2312 +571 5655 2022 3867 453 +572 3961 2170 886 4711 +573 5921 54 55 3504 +574 3545 2415 4568 496 +575 4443 1647 1406 2344 +576 3538 2166 5239 246 +577 2046 2954 296 5888 +578 3494 1033 3806 2100 +579 3871 517 2800 3345 +580 4781 5390 2699 990 +581 6161 1269 3824 2055 +582 601 2543 1628 4447 +583 877 4572 2322 6062 +584 3020 273 5606 2232 +585 1148 4216 1733 4921 +586 2363 1206 2307 4835 +587 4217 786 4683 2095 +588 2348 21 22 5656 +589 2205 5356 1882 6087 +590 3062 238 2734 3459 +591 5813 2354 6022 2355 +592 3329 980 5406 2283 +593 5531 1826 4158 367 +594 2368 3133 2667 525 +595 5414 2178 5855 1497 +596 3635 496 4568 2082 +597 5803 2582 1985 6060 +598 705 3880 1693 3621 +599 913 3860 4713 2197 +600 3069 2449 2961 3249 +601 2712 874 5090 2382 +602 1067 2755 1198 2981 +603 3831 2079 5002 25 +604 2080 4092 307 5400 +605 6109 2078 4628 279 +606 3949 2083 4635 1094 +607 5065 1862 5707 3867 +608 1878 4477 661 3546 +609 2902 5399 3736 1583 +610 4988 765 5941 2088 +611 4113 6088 4320 2361 +612 2732 5350 4940 2370 +613 5532 2082 4980 988 +614 2167 4654 939 5107 +615 428 2823 1357 2340 +616 709 3726 4729 2569 +617 2322 5253 495 6146 +618 2440 2653 2731 501 +619 1878 4476 5639 884 +620 2658 4855 1670 5387 +621 1198 3442 475 2981 +622 2645 2205 6087 510 +623 459 4038 2113 5250 +624 4112 455 3556 2310 +625 3826 1089 3473 1753 +626 5161 733 4823 2116 +627 2147 5178 796 3471 +628 1220 2757 330 3038 +629 6134 4679 5543 2196 +630 3457 966 4684 2222 +631 2111 3125 1029 5006 +632 954 2878 5011 3649 +633 1614 4809 661 2396 +634 2823 2136 3776 767 +635 3989 1765 4384 1136 +636 1447 4151 1311 3793 +637 3663 2144 4425 1019 +638 1977 4977 734 5297 +639 2541 5085 4776 281 +640 5374 3493 995 2788 +641 2279 6221 2462 1000 +642 2884 2875 2491 1278 +643 4952 383 5128 2175 +644 250 4003 1440 3913 +645 1464 4666 1559 2501 +646 5176 2095 5828 1702 +647 4778 2465 5517 1598 +648 2335 364 4576 3853 +649 2648 940 2315 3891 +650 879 2312 6046 5123 +651 666 3940 1688 4007 +652 282 2712 1054 2945 +653 4579 2141 4867 373 +654 4394 2099 5972 1272 +655 3280 1384 5277 2800 +656 2961 1340 3952 2707 +657 4577 2421 5154 407 +658 1595 3489 290 4857 +659 410 3818 1983 5162 +660 2990 1047 3677 2201 +661 1487 4075 619 3901 +662 3132 528 2753 3729 +663 709 2569 2727 1512 +664 286 4870 2032 4466 +665 757 3321 1722 2828 +666 1011 3496 533 2403 +667 4182 2151 5396 1394 +668 275 5503 1980 5337 +669 3125 2111 3995 276 +670 2869 519 3499 5354 +671 924 5902 2192 3984 +672 3320 2212 5411 752 +673 2712 2382 6232 1054 +674 5479 2764 3029 332 +675 2332 3029 2764 1200 +676 2892 357 5830 2072 +677 1122 3617 1430 2933 +678 2063 729 5843 3581 +679 933 4828 6098 2710 +680 4844 481 2847 2848 +681 3017 1221 2772 3333 +682 1478 4212 5565 2717 +683 3006 546 3945 2203 +684 3190 3637 2832 530 +685 6083 2115 4661 714 +686 3966 2207 5003 1409 +687 3838 2691 3843 1724 +688 4320 1069 3432 2361 +689 3457 5587 5207 966 +690 501 2914 1122 2440 +691 1933 5121 1306 4312 +692 6103 976 4537 2145 +693 4641 6003 4070 463 +694 3722 283 4255 2398 +695 2046 5888 2615 998 +696 2495 1023 2714 2591 +697 1315 4507 217 2441 +698 4952 2175 4644 1718 +699 2235 4904 814 4514 +700 1606 4766 631 2968 +701 4905 2369 5457 807 +702 3486 2580 4357 1042 +703 1572 4160 627 4775 +704 727 5762 2221 2671 +705 1132 3933 2069 4642 +706 4428 1480 4754 2128 +707 3105 625 4218 2108 +708 5609 2470 5727 1906 +709 332 4758 1758 5479 +710 2854 2112 4142 370 +711 3652 1102 4515 2122 +712 1354 3737 235 3441 +713 3879 2814 3930 498 +714 3514 2573 5824 426 +715 3006 2203 3823 1192 +716 4867 2141 5256 1474 +717 4176 2400 6034 1891 +718 1696 210 2478 4785 +719 2241 1023 2495 5620 +720 1009 2444 306 2938 +721 2833 3246 4841 1455 +722 1257 3282 314 3474 +723 3578 572 3732 2509 +724 4661 2115 4982 1389 +725 702 2135 218 2534 +726 206 2612 1899 4154 +727 2464 1530 4121 3798 +728 1141 5507 2482 3351 +729 221 5225 2169 3284 +730 3388 1052 3694 2226 +731 3161 2122 4515 300 +732 1955 3019 3354 534 +733 1662 3145 354 4505 +734 2194 800 5242 2711 +735 1874 1486 2563 4398 +736 880 2472 1559 4891 +737 852 2751 1269 2684 +738 2626 6123 2166 892 +739 2615 2744 2731 1057 +740 572 4838 1915 3732 +741 2690 2134 4048 319 +742 2947 2970 5982 509 +743 5881 2094 4061 204 +744 2874 3799 2839 3190 +745 5184 366 4739 2208 +746 3170 5364 1414 4554 +747 1067 2981 475 3116 +748 1878 884 6009 4477 +749 516 5238 1991 5207 +750 2334 2979 733 5045 +751 208 2791 1046 2238 +752 2425 2749 4965 219 +753 2770 3428 4215 1266 +754 581 3415 1214 2635 +755 357 4467 2135 5164 +756 1783 5575 557 3861 +757 4385 2210 4263 1436 +758 3065 664 5746 2394 +759 478 2670 5687 5987 +760 1614 2396 5577 4335 +761 2522 3792 1151 5825 +762 1534 3533 1164 3585 +763 1269 4220 1858 3824 +764 3756 1531 5239 2166 +765 879 5123 1897 5293 +766 1888 4351 248 4464 +767 1644 4947 290 3489 +768 3298 3398 2911 1291 +769 2122 1334 3527 4686 +770 6035 1948 2409 4623 +771 4268 1304 5228 2144 +772 1669 2767 843 4579 +773 2461 1677 5720 1798 +774 2518 2138 4338 740 +775 1769 5167 815 2923 +776 545 2739 1241 3259 +777 5260 4127 2011 5948 +778 1437 3312 473 4089 +779 2221 5684 5793 903 +780 3369 3488 2757 1220 +781 1406 472 3134 1721 +782 3365 765 3994 2360 +783 5207 5587 6149 516 +784 1141 3351 1043 2673 +785 3560 284 4446 2448 +786 722 3724 1770 5159 +787 2826 1071 3390 2944 +788 1092 3299 1184 2720 +789 3060 1002 5786 2597 +790 1507 3887 1297 4136 +791 1638 4478 254 4086 +792 1022 2672 2220 5962 +793 1714 5025 757 2828 +794 3313 3156 2849 1152 +795 2731 2744 2755 1067 +796 3449 2755 2744 296 +797 2145 3111 252 6103 +798 5761 4279 1453 3800 +799 2533 4566 2659 350 +800 3338 1061 3679 2276 +801 2677 307 2917 4200 +802 1061 4426 5613 2883 +803 1086 2810 491 2759 +804 5876 1838 5172 204 +805 4843 2418 3532 488 +806 4218 2141 4579 843 +807 4055 1745 3928 1088 +808 4362 673 5018 2243 +809 2434 575 3751 2558 +810 2761 2565 2900 1072 +811 5831 2858 2601 1009 +812 489 4417 2246 4415 +813 4406 1937 2316 444 +814 2004 2690 1051 6014 +815 3656 2188 5076 1130 +816 1109 4200 1852 4814 +817 2637 4380 1755 5735 +818 2615 1057 4807 998 +819 6148 4429 686 2227 +820 2934 1133 4190 2148 +821 1371 6137 2305 4555 +822 2046 998 2334 4955 +823 501 2748 1010 2914 +824 2506 2630 2440 3072 +825 3759 1094 4635 2160 +826 4969 871 4950 2585 +827 4912 637 3147 2353 +828 2091 910 5056 2610 +829 4077 591 3207 4556 +830 2422 244 5069 1104 +831 393 1539 5616 1954 +832 2084 4973 3661 1101 +833 3560 2448 4278 1420 +834 2635 3512 3297 581 +835 1067 3116 1099 2748 +836 1454 3735 5097 4531 +837 1474 3289 1802 4569 +838 2167 5107 6094 851 +839 3114 1305 4049 840 +840 2176 5039 2379 1624 +841 89 2856 4539 88 +842 6106 2195 5993 476 +843 3474 2825 3216 1257 +844 1115 3522 1597 4209 +845 1066 3584 1350 3023 +846 3656 326 3906 2188 +847 2602 371 4918 1974 +848 3080 361 5099 2156 +849 1401 4964 338 3126 +850 753 4827 2004 3684 +851 5967 2377 4747 2014 +852 900 2466 4644 2175 +853 5273 3150 5180 883 +854 3003 2183 4965 1003 +855 1263 3312 1437 3155 +856 2267 5850 947 3188 +857 1081 2824 491 2810 +858 3520 2182 5342 972 +859 3138 2331 4055 1088 +860 3682 1423 4551 2292 +861 4182 224 3566 2151 +862 1565 5897 2274 3937 +863 2733 2643 5066 925 +864 2236 5921 3504 856 +865 4109 4489 3068 1388 +866 4009 2477 5533 1503 +867 5267 2788 995 4272 +868 5727 2470 5211 413 +869 4125 1760 5661 2299 +870 3731 2528 5956 1392 +871 382 2948 1558 2980 +872 5694 1477 2536 236 +873 2032 1201 1797 4466 +874 5969 2349 5924 795 +875 2598 513 4106 4812 +876 1268 2734 238 3438 +877 1204 3124 568 3498 +878 3510 2160 4635 762 +879 2932 4871 1788 6051 +880 4658 2350 3640 815 +881 1697 3289 625 4565 +882 2420 4774 5040 454 +883 2051 5399 1006 3479 +884 5973 4962 985 3395 +885 2608 1143 4761 2388 +886 424 6089 2236 2929 +887 2800 517 1018 3280 +888 1695 3874 1287 4157 +889 1473 5534 3418 2345 +890 1661 4329 1466 4736 +891 3640 1275 5109 5302 +892 1216 2704 568 3407 +893 3147 637 6118 1950 +894 1573 4374 609 2718 +895 3332 506 3939 2196 +896 1506 4787 5744 2285 +897 4863 1408 5413 2524 +898 5057 2157 4528 804 +899 5602 3561 335 5240 +900 227 4476 1878 4630 +901 2337 477 5711 2950 +902 2781 2189 5711 2782 +903 2049 3318 3621 1000 +904 4001 1467 3212 4483 +905 2412 3544 2308 960 +906 2155 3063 4987 397 +907 3556 456 3455 2310 +908 2838 2179 4249 1105 +909 3817 2258 4148 829 +910 6052 1677 4179 3980 +911 2990 2201 5024 1616 +912 2120 4341 820 5424 +913 1761 3094 6005 2616 +914 2620 2749 3142 2503 +915 43 2429 1094 3759 +916 1081 2810 1086 2811 +917 2796 2670 5717 827 +918 1108 4715 749 3476 +919 2362 32 33 5573 +920 1462 3586 369 3211 +921 2457 4824 1737 964 +922 1197 3031 582 3669 +923 4104 2405 4927 634 +924 3431 1126 4451 1728 +925 1271 2705 587 2807 +926 2769 1381 4071 2183 +927 445 5589 1946 4819 +928 1762 5622 2232 4377 +929 87 2262 3753 86 +930 4598 5326 3859 1139 +931 1378 5938 3022 2185 +932 1365 4223 1853 3890 +933 2532 956 2276 3693 +934 3127 274 5453 2272 +935 2718 609 4763 2689 +936 4859 1875 4150 732 +937 2376 3988 1850 5664 +938 1188 3096 530 2832 +939 2821 4596 1704 5838 +940 542 4361 1917 5163 +941 3274 3597 2918 1302 +942 1007 3037 5852 4873 +943 1304 2778 5775 3471 +944 3154 780 4648 2508 +945 5246 2284 3677 1047 +946 2342 6113 2496 1259 +947 2827 1082 3167 3515 +948 4431 1899 5258 746 +949 252 3111 1554 2716 +950 6126 2302 5633 423 +951 2794 808 5952 2364 +952 1214 2753 528 3330 +953 3715 2313 5446 941 +954 1653 4033 983 3508 +955 3389 2206 3977 1052 +956 5255 2071 6116 2454 +957 2272 964 2775 3127 +958 2613 3682 2292 1303 +959 5504 2119 3786 289 +960 214 4052 1173 2309 +961 4724 2634 2574 389 +962 4173 953 3697 2298 +963 2425 2538 3142 2749 +964 842 3953 1832 5105 +965 4772 1896 5791 2333 +966 544 3064 1128 2737 +967 657 3219 1664 4222 +968 2902 424 5358 2264 +969 855 1974 4918 2441 +970 6016 477 4031 2202 +971 5754 1164 5061 2213 +972 2169 985 4592 2951 +973 3343 2433 4684 966 +974 3442 1198 2901 2737 +975 1089 3826 5106 1716 +976 4929 2218 6167 699 +977 2578 914 5695 2123 +978 2731 2653 2941 1057 +979 208 4037 1893 2791 +980 1723 2967 2107 5296 +981 3906 864 4180 2188 +982 2647 1345 4087 2648 +983 1722 287 5454 2381 +984 3757 4081 3252 1463 +985 2751 1910 5147 612 +986 3682 2613 5765 414 +987 365 2562 4448 4449 +988 525 2904 6042 2368 +989 5312 2526 3088 982 +990 2904 3926 3675 1002 +991 2779 741 6001 2162 +992 5345 6203 2958 1050 +993 219 5427 927 2425 +994 3297 1317 3796 2709 +995 5779 1934 5309 3681 +996 4649 201 5310 2037 +997 6042 1150 3497 2368 +998 5570 2487 3294 437 +999 1962 1017 2545 4139 +1000 2646 4690 1410 4180 +1001 3388 2226 5130 548 +1002 3694 754 5131 2226 +1003 5982 2970 1038 2910 +1004 6109 279 4481 2492 +1005 361 5896 1635 4116 +1006 548 3466 1452 3388 +1007 3865 2286 4762 1267 +1008 4362 2243 5910 1620 +1009 5922 6089 2531 1033 +1010 1337 5193 1925 2599 +1011 3945 909 5009 2203 +1012 1341 3300 558 3149 +1013 3677 451 5314 2201 +1014 92 2783 5449 91 +1015 2875 1092 3474 2491 +1016 1219 4164 1742 3739 +1017 2715 1502 4340 2976 +1018 5608 365 4449 2288 +1019 4480 873 3787 2289 +1020 1395 3576 334 3925 +1021 2517 3612 3929 982 +1022 3457 670 4064 5587 +1023 3313 1299 2799 3485 +1024 1955 534 2546 6010 +1025 1277 3064 544 3036 +1026 2153 800 2194 1146 +1027 2334 998 4807 2979 +1028 739 3296 987 4472 +1029 2079 1064 3278 5002 +1030 6170 1017 5313 2502 +1031 261 4126 1571 3573 +1032 2452 3340 2519 890 +1033 776 6168 1978 2497 +1034 5675 806 3632 2407 +1035 551 3239 1186 2799 +1036 1312 3406 321 2913 +1037 5997 5391 937 2957 +1038 4263 269 3213 2137 +1039 3190 530 2849 2874 +1040 2424 919 4601 2762 +1041 3053 2605 3037 1007 +1042 3841 1166 5003 2207 +1043 2855 3379 2759 491 +1044 1988 535 2409 4028 +1045 445 4819 1886 5431 +1046 2133 2476 5673 846 +1047 5782 504 3142 2538 +1048 2557 2556 2922 512 +1049 4577 1853 4514 1333 +1050 2849 1106 2876 2874 +1051 3421 878 4728 2195 +1052 2152 2787 2678 704 +1053 5467 1279 4205 1892 +1054 1023 3499 519 2426 +1055 3709 2550 4272 995 +1056 2768 502 3908 3023 +1057 5334 6014 2986 507 +1058 290 4947 1945 3748 +1059 5233 2402 6046 510 +1060 1744 1168 2745 5218 +1061 1036 2211 4143 2090 +1062 3332 2196 5543 1189 +1063 1385 3371 1386 2844 +1064 312 2866 1350 3584 +1065 2447 1436 4611 3207 +1066 4555 2305 3566 224 +1067 5514 2115 6083 3231 +1068 5902 2507 5753 1031 +1069 3359 1364 2995 3813 +1070 5478 4831 3882 1992 +1071 293 3055 3873 4632 +1072 377 5095 1894 3022 +1073 4157 2230 5048 434 +1074 3774 1081 2811 3093 +1075 4345 2309 5556 904 +1076 1146 2194 6143 3912 +1077 858 2178 6216 2593 +1078 1952 4419 620 4134 +1079 3389 253 4834 2206 +1080 2280 605 4078 4689 +1081 2479 2320 3746 857 +1082 940 6052 3980 2315 +1083 1555 4919 2743 1079 +1084 5491 215 3972 2282 +1085 5048 2230 5035 1520 +1086 1595 3301 462 4560 +1087 1362 3535 647 4381 +1088 2867 458 3579 2385 +1089 5638 3764 409 5456 +1090 1288 3131 1119 3042 +1091 1967 5284 862 2556 +1092 3611 680 4644 2466 +1093 3447 4327 5736 776 +1094 3416 1313 3013 3717 +1095 2597 2962 2907 1138 +1096 1898 5448 860 2815 +1097 2867 2213 5061 458 +1098 5969 1947 5946 2349 +1099 1243 3620 1071 3399 +1100 2546 967 2645 6010 +1101 3952 2224 6179 1418 +1102 1364 3686 589 2995 +1103 480 3317 1255 3316 +1104 2797 758 5093 2204 +1105 3132 2881 3018 1144 +1106 1451 2133 6057 4636 +1107 1032 2312 879 2795 +1108 639 4168 2038 3303 +1109 283 2047 4691 3828 +1110 2824 3041 2855 491 +1111 3209 2493 4938 461 +1112 5071 616 3648 5588 +1113 1514 4367 1151 3792 +1114 1991 3343 966 5207 +1115 1546 4019 723 5199 +1116 4255 2535 2534 1359 +1117 3905 1160 2552 3685 +1118 2659 4566 5465 1650 +1119 667 5027 1325 4922 +1120 2281 872 2305 6137 +1121 2330 3550 2423 1363 +1122 3836 1245 5298 2389 +1123 530 3096 1152 2849 +1124 4746 724 4669 2341 +1125 2410 549 2895 3620 +1126 3705 2209 5584 1446 +1127 2803 1353 5108 2023 +1128 943 4494 2038 4168 +1129 4151 2225 5129 1311 +1130 4220 612 5286 1859 +1131 3447 1459 4887 4327 +1132 257 3554 1426 2870 +1133 2424 5111 2513 1651 +1134 3066 2572 3330 528 +1135 48 49 3518 2632 +1136 294 3153 1802 5118 +1137 2307 1206 5947 4902 +1138 747 2686 1256 3045 +1139 2565 2925 2914 1010 +1140 1721 3134 213 4805 +1141 783 4042 1006 2264 +1142 4473 1090 2703 5434 +1143 2361 3432 3466 548 +1144 1639 4527 5604 2977 +1145 810 2776 371 2602 +1146 911 3730 464 3692 +1147 1915 4838 1397 3982 +1148 2761 1072 3041 2824 +1149 5529 387 4479 1933 +1150 3928 2090 4143 1088 +1151 3971 3321 5781 851 +1152 791 5053 4337 2668 +1153 2928 2223 4333 483 +1154 3919 1714 2828 4336 +1155 752 5563 2125 3320 +1156 801 3016 1965 5356 +1157 1144 3066 528 3132 +1158 2757 3488 2758 1068 +1159 3706 3011 5626 2223 +1160 1648 3716 5551 4465 +1161 1286 3180 315 3184 +1162 2867 1411 5754 2213 +1163 3161 2380 5866 915 +1164 5898 780 3154 2130 +1165 1875 4061 1495 4456 +1166 2403 533 5020 3850 +1167 2900 2736 3050 301 +1168 1221 3148 316 3215 +1169 712 3208 2103 4757 +1170 1324 3295 598 3444 +1171 1961 3318 5698 263 +1172 2239 429 5834 2374 +1173 4477 4301 2396 661 +1174 4160 5180 3150 1836 +1175 2452 890 6219 2453 +1176 4119 792 3460 5298 +1177 2133 1451 5524 2476 +1178 2620 2503 6232 450 +1179 5253 2234 3285 495 +1180 3706 524 2529 3367 +1181 1952 5713 391 5220 +1182 4423 1439 5276 2219 +1183 700 4785 2478 5231 +1184 2623 1155 5141 2253 +1185 2098 1040 2754 4420 +1186 2898 4593 4926 277 +1187 4213 1404 4243 3650 +1188 1031 5604 2192 5902 +1189 6158 207 4994 2233 +1190 4633 1579 3334 847 +1191 1390 3444 598 3922 +1192 2808 3036 3848 1053 +1193 1658 2854 370 5212 +1194 1204 3548 1388 3068 +1195 2726 2231 4860 1462 +1196 1805 5368 965 3387 +1197 2758 3673 2806 1068 +1198 1358 3506 584 3003 +1199 876 2857 1943 5502 +1200 3052 2335 3853 926 +1201 296 2954 1076 3449 +1202 1271 2807 2147 5371 +1203 1463 3252 1199 4030 +1204 5989 206 4154 2787 +1205 3620 1243 3672 2410 +1206 776 2497 945 3447 +1207 2360 5409 1723 3365 +1208 1100 2294 3872 2005 +1209 1335 3742 588 3642 +1210 2998 2772 3018 2881 +1211 3102 3198 2949 1190 +1212 2053 5317 389 4221 +1213 2888 692 5600 2340 +1214 1192 3092 1145 3006 +1215 2101 3143 3380 1218 +1216 1885 5656 22 23 +1217 1002 3060 309 2822 +1218 3999 1435 6211 2231 +1219 5905 791 5146 2804 +1220 390 4648 6085 1881 +1221 2332 486 2899 4744 +1222 1205 3201 4823 1995 +1223 4774 2420 5578 1860 +1224 3965 2413 5645 920 +1225 1805 4847 500 3143 +1226 2708 1116 5383 2986 +1227 300 4515 3727 2469 +1228 2174 1058 5645 2413 +1229 4658 4366 432 2350 +1230 1957 5738 2420 454 +1231 826 3555 5231 2478 +1232 6006 288 2521 3542 +1233 4620 790 2092 4587 +1234 2856 89 90 3483 +1235 781 2747 4016 2319 +1236 4105 5644 3695 1124 +1237 2534 2535 5926 702 +1238 3295 1324 3443 2994 +1239 2277 1298 4208 5447 +1240 2740 2496 6113 524 +1241 2599 1925 4417 489 +1242 6209 5983 1931 3627 +1243 2759 2760 2930 1086 +1244 1100 2323 5235 2074 +1245 1161 2944 238 3062 +1246 4308 2233 4994 760 +1247 5672 2462 6221 442 +1248 2684 287 3971 2514 +1249 6126 423 5000 2260 +1250 5675 2407 5916 1820 +1251 3340 2452 4174 447 +1252 3421 1383 4018 2658 +1253 4855 2658 4018 258 +1254 3925 2662 3423 1395 +1255 2813 469 6164 2451 +1256 4078 1368 6184 2249 +1257 2772 1221 3215 3018 +1258 825 1872 4617 2501 +1259 6178 1387 2590 2589 +1260 4125 2299 5355 439 +1261 3971 851 6094 2514 +1262 5018 1639 4793 2243 +1263 2070 5345 2453 402 +1264 4198 380 3919 2359 +1265 4336 1267 2359 3919 +1266 5337 1980 4671 2660 +1267 3127 1399 6198 274 +1268 3186 6029 4012 1372 +1269 1452 3389 1052 3388 +1270 1032 4094 1955 6010 +1271 1103 6157 5492 3769 +1272 4569 2253 4867 1474 +1273 6115 2774 4482 2181 +1274 4299 677 2528 3731 +1275 4713 3860 3179 353 +1276 2983 2680 3582 1075 +1277 5250 1005 5354 2241 +1278 3641 360 5252 2327 +1279 504 5782 1922 5484 +1280 5850 2267 4954 1200 +1281 3746 2320 4201 457 +1282 3566 1337 5237 2151 +1283 4116 2190 5099 361 +1284 2101 3979 348 5368 +1285 1355 3448 1203 3352 +1286 2595 2831 5956 285 +1287 3072 278 3536 2506 +1288 1342 3415 581 3453 +1289 967 2860 5863 2406 +1290 3669 2855 3041 1197 +1291 1761 3034 5555 3491 +1292 1159 3267 1296 3091 +1293 2296 1087 3379 2935 +1294 1900 3288 1174 3668 +1295 4998 1343 5824 2573 +1296 3658 1312 3217 3775 +1297 3040 5807 1743 5210 +1298 874 5226 1829 3784 +1299 3909 1419 3659 2846 +1300 2168 2354 3842 5495 +1301 2518 5348 355 2977 +1302 2946 690 5319 2381 +1303 3912 2348 4685 1146 +1304 3244 3487 3085 1247 +1305 3166 3395 2026 5339 +1306 4193 1855 6040 2439 +1307 784 3725 5978 4502 +1308 3349 2464 3798 1282 +1309 4050 202 3896 2319 +1310 3982 2411 5882 1915 +1311 1639 5018 1119 4527 +1312 3507 2999 3096 1188 +1313 958 6091 2163 5924 +1314 3551 1439 5611 2256 +1315 2712 2300 5226 874 +1316 5672 1857 4673 2462 +1317 1178 2752 899 4090 +1318 5749 395 6231 2472 +1319 5612 2406 5863 297 +1320 3031 1197 3197 2953 +1321 1697 5118 1802 3289 +1322 4786 3093 2811 302 +1323 237 3525 1291 2911 +1324 1114 3153 294 2781 +1325 5497 1309 5919 2608 +1326 4774 1860 4182 1394 +1327 2990 655 5751 4879 +1328 1868 3575 5686 928 +1329 2616 266 3034 1761 +1330 208 3177 4056 1607 +1331 4803 2640 3346 1602 +1332 3151 1220 3038 3193 +1333 2662 589 3077 3423 +1334 2087 5836 2708 1051 +1335 3489 1595 4560 3039 +1336 2817 3011 3706 3367 +1337 2620 2275 5914 1003 +1338 2256 4589 1584 3551 +1339 2208 870 3524 1815 +1340 3573 1571 5103 2358 +1341 259 4783 5792 2293 +1342 5743 2029 4100 5375 +1343 2318 905 5251 5462 +1344 691 4547 1675 3009 +1345 2737 2901 3378 544 +1346 310 4199 1563 3907 +1347 4572 877 6017 2432 +1348 2824 1081 3774 2761 +1349 5372 2271 5117 1001 +1350 5802 835 4753 2484 +1351 5466 824 2217 694 +1352 3188 439 5820 2267 +1353 2567 6048 1429 4373 +1354 4183 598 3295 4605 +1355 2070 4164 1219 5197 +1356 1072 3197 1197 3041 +1357 3183 2384 5722 401 +1358 2826 5927 3497 482 +1359 5751 2362 5573 4879 +1360 5663 593 3612 2517 +1361 2112 1041 4498 4142 +1362 2927 4698 1908 5980 +1363 3720 4134 620 5193 +1364 1442 5117 2271 4185 +1365 4012 2436 5970 1372 +1366 1534 4219 1361 4062 +1367 5054 2338 5661 1760 +1368 3057 2998 3092 1192 +1369 5162 968 3805 2287 +1370 3085 3202 3054 1186 +1371 3453 581 3297 2709 +1372 1574 2361 548 5130 +1373 1752 4512 613 3849 +1374 43 44 3941 2429 +1375 3679 1061 2883 4776 +1376 272 2089 6124 2442 +1377 2468 2469 3727 849 +1378 1773 3661 369 4513 +1379 3493 5374 5614 2728 +1380 6158 2336 5405 207 +1381 2337 2431 5939 3877 +1382 3959 1521 4854 2561 +1383 2180 4903 2532 3693 +1384 2948 1859 5286 1163 +1385 4434 2559 4721 1117 +1386 5084 2273 5960 1274 +1387 587 2705 1270 4107 +1388 1427 3713 1281 3225 +1389 312 2868 5342 3603 +1390 2247 400 2657 4580 +1391 3811 992 4842 1482 +1392 3485 245 3156 3313 +1393 4747 2377 5641 447 +1394 1827 4606 1090 4473 +1395 5632 2417 5851 918 +1396 3632 1101 3936 2407 +1397 3459 1209 3133 3062 +1398 2368 1161 3062 3133 +1399 5299 5723 969 2906 +1400 41 3510 5709 40 +1401 5593 3194 4423 408 +1402 482 3269 1243 3399 +1403 3276 3468 3104 1246 +1404 5175 471 4665 2695 +1405 2966 2881 3132 3729 +1406 1821 50 51 5120 +1407 232 3370 1184 3943 +1408 1068 3266 330 2757 +1409 2212 3641 1845 5411 +1410 373 4792 1669 4579 +1411 5645 2280 4689 920 +1412 923 2370 83 5591 +1413 518 3270 1319 3261 +1414 4253 504 5484 2352 +1415 2101 1218 4183 3979 +1416 1004 4058 2299 5661 +1417 678 5972 2099 2956 +1418 2582 2321 6023 799 +1419 2426 3812 2672 1022 +1420 336 4188 1467 3422 +1421 2015 4678 1448 5546 +1422 3275 3425 2982 1276 +1423 2808 1053 3310 2739 +1424 2712 282 5067 2300 +1425 2642 2357 5483 665 +1426 2595 2027 4901 763 +1427 5514 3231 4110 1227 +1428 3335 1248 3089 3384 +1429 208 2238 4766 3177 +1430 2244 1478 4503 3373 +1431 2811 1086 2930 2840 +1432 1186 3239 1247 3085 +1433 2891 411 4524 2560 +1434 955 2627 2085 5188 +1435 3453 2709 3796 1251 +1436 3454 315 2965 3636 +1437 3002 547 3352 3249 +1438 2682 2683 2798 333 +1439 2362 1019 5779 3681 +1440 3666 336 3422 4141 +1441 4864 2073 6140 836 +1442 2997 3832 3642 588 +1443 2479 1097 4201 2320 +1444 4086 254 4619 2395 +1445 5430 2284 4695 1678 +1446 5935 2414 1492 3245 +1447 1167 3066 1144 3000 +1448 2978 1128 3064 3248 +1449 4021 2416 4870 286 +1450 2592 215 2591 2714 +1451 5036 3553 2578 1402 +1452 2961 3316 3002 3249 +1453 3078 3002 3316 1255 +1454 4702 556 3781 1975 +1455 3426 2411 5764 1750 +1456 2965 1145 3092 2966 +1457 325 3146 1458 3683 +1458 3901 3254 3911 1487 +1459 2839 1148 3637 3190 +1460 3967 1454 4756 2383 +1461 2891 2383 4756 411 +1462 479 3299 1092 2875 +1463 3007 1016 3505 5093 +1464 3121 1417 4299 3731 +1465 2972 5264 473 3312 +1466 2723 559 5607 2488 +1467 3737 1354 3512 2635 +1468 561 3591 1527 3189 +1469 1210 3630 1355 3500 +1470 2546 3625 2860 967 +1471 5132 2917 307 4092 +1472 1408 4863 1676 3260 +1473 2875 2884 4270 479 +1474 2982 330 3266 3427 +1475 2032 2564 4682 1201 +1476 1076 2954 1537 4270 +1477 2565 485 3617 2925 +1478 855 2126 5884 1974 +1479 2773 1165 3059 3078 +1480 3002 3078 3059 547 +1481 2429 2897 3949 1094 +1482 3298 565 4275 3398 +1483 2998 1120 3333 2772 +1484 5253 2322 4572 959 +1485 4419 1525 4649 2036 +1486 327 3420 1294 3203 +1487 5449 2783 3921 1774 +1488 2707 3783 2876 480 +1489 3469 2918 3440 580 +1490 4948 4098 3520 972 +1491 2600 1129 3767 3182 +1492 3256 4248 3668 3917 +1493 3115 4935 4452 1483 +1494 5462 1735 5401 2318 +1495 2966 3092 2998 2881 +1496 2844 1386 3220 3916 +1497 2174 2413 3965 409 +1498 2174 3660 4834 1058 +1499 1180 3377 1528 3027 +1500 4543 1748 5809 2520 +1501 3688 2327 5035 760 +1502 4278 2448 4683 786 +1503 3275 2973 3461 579 +1504 301 3197 1072 2900 +1505 4332 2524 5413 624 +1506 2279 5934 1078 3788 +1507 5322 1927 4532 1643 +1508 1130 2622 909 3657 +1509 3578 3035 3593 572 +1510 2976 448 5799 2715 +1511 2509 1326 3012 3578 +1512 375 3567 2031 5288 +1513 5269 1135 2429 3941 +1514 5702 604 4622 2325 +1515 4796 1926 756 2164 +1516 2760 2759 3379 1087 +1517 1608 3043 3818 5425 +1518 3328 1096 3951 3152 +1519 4067 3380 3143 500 +1520 2546 534 6088 3625 +1521 3527 1334 5633 2302 +1522 606 4068 5792 2792 +1523 2973 3577 3468 1264 +1524 3749 1330 3326 3755 +1525 1087 2939 492 2760 +1526 4339 1297 3887 2719 +1527 2191 5331 257 2870 +1528 705 3098 1443 3880 +1529 421 4900 2504 2121 +1530 3378 2901 3449 1076 +1531 3746 457 3559 2893 +1532 855 2441 217 4949 +1533 954 3649 1205 3711 +1534 3112 3279 3237 555 +1535 5732 2460 1206 2363 +1536 1235 3382 561 3322 +1537 2078 5391 1808 3176 +1538 4350 938 3870 2326 +1539 3903 4956 6071 2314 +1540 612 5147 2311 5286 +1541 4255 1359 4924 2398 +1542 3371 2589 2590 1386 +1543 3587 1062 5057 2700 +1544 2097 3009 1675 4760 +1545 678 4329 1661 3450 +1546 5192 2047 5311 908 +1547 1342 2753 1214 3415 +1548 2842 3110 5076 1410 +1549 5101 1242 4832 2210 +1550 3339 3103 3174 1215 +1551 2864 2300 5067 1409 +1552 3033 2827 3515 1237 +1553 3922 2920 3391 1390 +1554 3442 4227 3981 475 +1555 2705 3178 4032 1270 +1556 3382 1235 3241 3107 +1557 4747 447 4174 2606 +1558 2949 3106 3165 1194 +1559 3149 558 3634 3778 +1560 3409 327 3203 3574 +1561 315 3180 1145 2965 +1562 3787 873 4125 2372 +1563 1183 3173 1212 3112 +1564 575 2434 1484 5033 +1565 1412 3214 594 3721 +1566 3106 2949 3198 536 +1567 3140 1190 3283 2992 +1568 3229 349 2992 3283 +1569 2631 981 5472 2816 +1570 2387 5214 511 5805 +1571 1394 2172 5040 4774 +1572 1315 2441 4918 3680 +1573 3053 1007 3459 2734 +1574 3969 1170 4553 2346 +1575 418 2125 3898 6127 +1576 2397 1499 1902 5500 +1577 2058 2521 288 5139 +1578 4383 430 5493 2376 +1579 3903 2314 4981 470 +1580 2961 2449 3929 1340 +1581 4511 4045 3370 1422 +1582 1221 3017 1222 3148 +1583 1152 3281 1299 3313 +1584 5457 2369 4634 1763 +1585 1190 3140 523 3102 +1586 3186 1095 3651 2912 +1587 321 3192 1403 3691 +1588 2019 221 3284 4289 +1589 2625 2394 5746 1485 +1590 4150 671 4748 2255 +1591 3333 608 3480 3017 +1592 2101 5368 1805 3143 +1593 2588 5352 905 4124 +1594 3584 1066 3428 2770 +1595 5804 4403 576 2786 +1596 4329 2304 4707 1466 +1597 3828 4691 1786 305 +1598 3875 2481 6110 1123 +1599 2873 1123 6110 2480 +1600 295 2784 1442 4185 +1601 1194 3165 562 3228 +1602 4024 1626 4967 2650 +1603 3162 5473 4038 1083 +1604 4948 647 3535 5538 +1605 5337 2378 4140 275 +1606 480 2876 1106 3317 +1607 2411 3982 309 5764 +1608 2901 1198 2755 3449 +1609 3324 1552 4257 3323 +1610 2224 3952 3612 593 +1611 832 4619 1502 2715 +1612 1240 3683 1458 3654 +1613 997 1727 3099 4146 +1614 3357 3347 3172 1238 +1615 3340 1077 4801 2519 +1616 4301 885 5577 2396 +1617 3176 771 5289 2356 +1618 2482 5507 2466 900 +1619 3315 1324 3444 3777 +1620 1870 2581 3452 770 +1621 4295 4077 4556 1586 +1622 551 3511 1149 3196 +1623 409 3764 4249 2174 +1624 1215 3600 1364 3359 +1625 5394 3218 1623 5078 +1626 4802 428 5109 2419 +1627 438 2577 1793 4833 +1628 995 3493 1475 3709 +1629 1084 2386 6006 3542 +1630 5576 628 3789 3491 +1631 5035 2327 5252 1520 +1632 2378 970 5635 4140 +1633 5939 2431 5771 412 +1634 482 3399 1071 2826 +1635 1000 2462 4673 2049 +1636 3287 1254 3164 3402 +1637 3261 3548 2877 518 +1638 3498 2877 3548 1204 +1639 2786 576 4356 4701 +1640 237 2911 1096 3328 +1641 1097 2479 392 3985 +1642 3343 381 5716 2433 +1643 4661 1389 4981 2314 +1644 1082 2827 327 3409 +1645 3425 1142 3193 3038 +1646 3018 3215 3000 1144 +1647 1194 3283 1190 2949 +1648 720 2229 6223 3411 +1649 3161 300 6077 2380 +1650 1696 4785 700 2504 +1651 1466 2458 615 4736 +1652 3401 3089 3189 1527 +1653 568 3124 1240 3407 +1654 1185 3240 1292 3482 +1655 2182 515 3582 2680 +1656 6232 2382 5090 450 +1657 2073 4934 1542 6140 +1658 3046 3262 3363 1307 +1659 2027 2595 285 5623 +1660 1514 4227 1128 2978 +1661 2301 4463 4905 938 +1662 2362 3681 31 32 +1663 1228 3206 1293 3361 +1664 1991 1021 5308 3589 +1665 4820 2476 5524 427 +1666 2994 3443 3001 329 +1667 3437 3001 3443 1236 +1668 2773 3054 3202 1165 +1669 2383 5210 1743 3967 +1670 3283 1194 3228 3229 +1671 3096 2999 3281 1152 +1672 1557 4255 283 3828 +1673 1226 3185 1181 3195 +1674 1188 3364 1251 3507 +1675 3182 1322 3714 2600 +1676 5014 427 5862 2915 +1677 2831 2595 3815 1169 +1678 1232 2621 4699 6135 +1679 555 3723 1183 3112 +1680 3362 3159 3185 1226 +1681 3107 328 3173 3108 +1682 5863 2860 4113 297 +1683 4941 5369 1126 3804 +1684 4383 2417 5632 430 +1685 3168 3108 3173 1183 +1686 2530 5498 1800 5667 +1687 2593 569 4499 2025 +1688 1145 3264 546 3006 +1689 1752 4794 1493 4512 +1690 5547 888 5795 2442 +1691 3258 1257 3216 3403 +1692 329 3833 1380 3606 +1693 2403 937 6109 2492 +1694 2827 3033 3420 327 +1695 1855 4193 413 4716 +1696 4675 2907 3847 520 +1697 2296 2935 3889 261 +1698 2390 3719 2790 949 +1699 3714 1118 3427 3270 +1700 760 5035 2230 4308 +1701 1294 3420 1159 3440 +1702 2716 1554 4627 4036 +1703 5818 3268 4840 850 +1704 2422 1104 2629 5721 +1705 950 2170 3961 5628 +1706 2707 480 3316 2961 +1707 3862 1111 4101 3394 +1708 1051 2690 319 3608 +1709 2428 599 3008 3827 +1710 1484 3869 1323 3590 +1711 5498 2530 4629 638 +1712 3035 1347 2713 3593 +1713 4758 2330 4871 952 +1714 1805 3387 672 4847 +1715 1226 3227 563 3362 +1716 4208 1298 4877 2343 +1717 3874 794 6061 2336 +1718 3078 1255 3704 2773 +1719 3537 4063 2848 1127 +1720 1481 3619 1162 3744 +1721 3287 3056 3465 1225 +1722 2521 2058 6210 798 +1723 3884 2003 4646 4304 +1724 838 2738 1728 4856 +1725 3425 3275 3013 1142 +1726 3448 2662 3925 1203 +1727 3176 2356 4979 1273 +1728 3262 3046 3350 539 +1729 3623 3350 3046 1335 +1730 1876 2843 372 5561 +1731 2720 2825 3474 1092 +1732 3550 2330 4758 332 +1733 2695 4665 2346 1020 +1734 1244 3406 1312 3658 +1735 551 2799 1299 3511 +1736 4719 2543 5919 1309 +1737 3056 3287 3402 567 +1738 6066 2630 3711 467 +1739 3805 968 4103 4908 +1740 3082 1181 3185 3366 +1741 1283 3396 554 3356 +1742 3209 1664 3219 1117 +1743 5799 3045 6172 2715 +1744 1549 3614 1362 4003 +1745 2603 4769 3327 222 +1746 3193 563 3227 3151 +1747 4558 5726 787 1012 +1748 1986 3434 1013 6007 +1749 3745 2397 5500 203 +1750 4864 836 3100 3101 +1751 2631 2378 5337 981 +1752 1182 3238 1246 3302 +1753 3077 1292 3240 3137 +1754 1187 3519 1354 3441 +1755 3182 3601 3436 1322 +1756 2849 3156 3704 1106 +1757 1313 3639 1142 3013 +1758 1349 4068 606 2685 +1759 4443 2344 5069 244 +1760 3209 2996 4687 1564 +1761 2399 2351 5061 1164 +1762 3047 2346 4553 603 +1763 4604 2458 4054 1320 +1764 1170 2541 281 3968 +1765 2870 1426 4031 3877 +1766 2541 1170 3969 2540 +1767 1098 2994 329 3606 +1768 3191 3210 4147 1131 +1769 1480 4428 5952 3808 +1770 4176 422 4194 2400 +1771 1757 2339 4999 474 +1772 4616 2343 4877 856 +1773 2687 3097 4392 679 +1774 5183 1746 4960 2809 +1775 4862 2809 4960 725 +1776 614 4975 1818 4149 +1777 1294 3196 1149 3203 +1778 831 4589 318 2246 +1779 3275 1276 3577 2973 +1780 3994 1629 5511 2360 +1781 3103 1182 3302 3174 +1782 948 1692 527 5382 +1783 3827 1469 4165 2428 +1784 3662 1348 3255 3794 +1785 2691 4472 3696 2109 +1786 3573 2358 4798 973 +1787 1696 6230 2216 2391 +1788 5243 1519 5483 2357 +1789 703 5844 1889 5278 +1790 3059 1165 3235 1210 +1791 4061 2735 5876 204 +1792 3390 2895 3775 1295 +1793 5484 917 5703 2352 +1794 3834 1527 3591 4306 +1795 4814 1852 6208 2432 +1796 1254 3235 538 3164 +1797 1324 3315 1236 3443 +1798 5109 1275 4646 2419 +1799 4230 354 3450 1661 +1800 3031 2953 5463 2401 +1801 1183 3236 646 3168 +1802 3597 3274 3239 551 +1803 1246 3238 322 3276 +1804 1398 3749 336 3666 +1805 4159 1039 2852 745 +1806 3077 3137 3598 1121 +1807 3197 301 6037 2953 +1808 1229 3576 1395 3634 +1809 4271 4108 2549 1249 +1810 3165 3106 3463 1176 +1811 3687 2435 5651 1252 +1812 3239 3274 3417 1247 +1813 5103 585 4551 2358 +1814 3672 317 3253 3195 +1815 3810 3015 3410 1351 +1816 2868 312 3584 2770 +1817 4464 248 4554 2498 +1818 3322 3243 3242 1235 +1819 3172 3242 3243 553 +1820 1235 3242 1213 3241 +1821 1216 3158 314 3282 +1822 3195 3253 3227 1226 +1823 3151 3227 3253 1233 +1824 3069 3249 3352 1203 +1825 1571 4126 1435 3999 +1826 428 1784 5302 5109 +1827 2704 1216 3258 3300 +1828 3400 564 3424 3086 +1829 961 4014 268 2862 +1830 2262 4539 1541 5290 +1831 4044 2392 5540 942 +1832 5469 2104 4490 894 +1833 1288 3042 231 3341 +1834 2139 5855 2178 858 +1835 3738 5327 6127 1883 +1836 5061 2351 5542 458 +1837 5027 667 3989 2119 +1838 3883 1008 4448 2562 +1839 2886 793 5299 2906 +1840 3174 3302 3204 540 +1841 2991 1691 819 4884 +1842 3031 2401 4860 582 +1843 3586 1462 4860 2401 +1844 1254 3287 1225 3311 +1845 1499 4361 6238 1902 +1846 3112 1212 3171 3279 +1847 562 3230 1195 3228 +1848 4775 2706 4745 1572 +1849 380 5025 1714 3919 +1850 3296 417 4564 987 +1851 3235 1254 3311 3233 +1852 4102 1917 5300 338 +1853 3204 3104 3436 1185 +1854 5859 2374 4991 875 +1855 1145 3180 1286 3264 +1856 1207 5475 1978 4812 +1857 5815 3899 692 3825 +1858 3940 666 5108 4155 +1859 3356 1212 3173 328 +1860 3042 1119 3067 4310 +1861 1180 3027 561 3382 +1862 3237 3279 3171 1187 +1863 1075 3309 1381 3643 +1864 3700 3892 3506 1403 +1865 3779 3821 3441 235 +1866 2391 2216 4285 861 +1867 3576 1229 5870 2526 +1868 293 4632 2766 4688 +1869 2090 4158 4844 1036 +1870 3339 1215 3359 3205 +1871 1479 3490 4773 2365 +1872 2171 1968 4753 835 +1873 1159 3424 564 3267 +1874 878 5387 1670 2487 +1875 4042 783 5096 2366 +1876 3012 1014 3035 3578 +1877 3436 3601 3240 1185 +1878 670 3457 2222 5683 +1879 3458 2982 3427 1118 +1880 2389 949 2611 3836 +1881 1309 5497 2265 6187 +1882 1971 280 2745 4303 +1883 3152 1293 3206 3328 +1884 2653 6066 467 2941 +1885 3688 1425 3746 2893 +1886 4746 2341 3543 472 +1887 1115 4382 5867 3522 +1888 3701 468 4122 2548 +1889 2549 2548 4122 1249 +1890 3350 3623 3238 1182 +1891 3538 1479 2365 5047 +1892 2392 4044 5403 205 +1893 2209 3705 4023 1592 +1894 279 4628 1273 2364 +1895 3664 1149 3511 3200 +1896 3281 3200 3511 1299 +1897 4745 2706 3728 675 +1898 1850 3505 1016 5664 +1899 1182 3103 539 3350 +1900 3178 2665 4499 569 +1901 694 2217 4401 2693 +1902 2891 935 5210 2383 +1903 536 3785 1468 2845 +1904 965 5368 348 2505 +1905 239 2920 1217 3718 +1906 1430 3617 485 3942 +1907 3611 2466 5507 1141 +1908 1095 2769 584 3651 +1909 3104 3204 3302 1246 +1910 2136 812 4441 3776 +1911 4944 2756 4536 845 +1912 876 5502 2218 5005 +1913 1257 3258 1216 3282 +1914 2799 1186 3054 3485 +1915 3335 3001 3437 1248 +1916 4197 892 5047 2365 +1917 313 3311 1225 3205 +1918 5632 3820 2643 430 +1919 1346 4043 1463 3529 +1920 1434 3765 662 4231 +1921 3424 1159 3420 3033 +1922 4166 4310 3067 1548 +1923 552 3223 1322 3436 +1924 3205 1225 3465 3339 +1925 4554 248 4351 3170 +1926 3001 3335 3833 329 +1927 2867 2385 5188 980 +1928 3107 3241 3376 328 +1929 1250 3381 1321 3484 +1930 3086 3424 3033 1237 +1931 3108 1180 3382 3107 +1932 2982 3425 3038 330 +1933 3202 538 3235 1165 +1934 885 3647 5998 5577 +1935 1241 3407 1240 3259 +1936 4431 2375 4727 703 +1937 1911 3290 1465 5557 +1938 3347 3357 3267 564 +1939 2662 3448 2995 589 +1940 4841 2447 5678 1455 +1941 2877 3498 3852 1129 +1942 1283 3086 1237 3396 +1943 1821 3518 49 50 +1944 3988 2376 5493 1374 +1945 287 1722 3321 3971 +1946 3124 3419 3683 1240 +1947 4173 3872 3873 953 +1948 3403 558 3300 3258 +1949 3719 2390 4331 906 +1950 815 5167 1920 4658 +1951 4197 2365 4773 688 +1952 1233 3369 1220 3151 +1953 553 3243 1236 3315 +1954 3242 3172 3347 1213 +1955 3361 3159 3362 1228 +1956 287 2684 1269 6161 +1957 1099 3116 4914 5923 +1958 516 4762 2286 5238 +1959 2050 3163 65 66 +1960 4067 1217 3136 3380 +1961 3437 1236 3243 3322 +1962 1212 3356 554 3171 +1963 524 3706 979 2740 +1964 3384 3089 3401 562 +1965 5586 5013 2329 623 +1966 2873 2480 4110 445 +1967 3414 3319 3348 1282 +1968 2554 3348 3319 570 +1969 3184 315 3454 3364 +1970 1293 3152 607 3531 +1971 462 3301 1338 2547 +1972 4035 4144 3341 231 +1973 2862 4626 6092 961 +1974 577 4240 1461 2889 +1975 1238 3645 1390 3391 +1976 2858 1109 4814 2601 +1977 320 3129 4881 2412 +1978 4927 2405 4432 1612 +1979 54 5921 5922 5266 +1980 2832 3184 3364 1188 +1981 1351 3410 1291 3525 +1982 3916 422 4176 2844 +1983 3159 537 3366 3185 +1984 2624 2030 4602 420 +1985 3184 2832 3637 1286 +1986 3108 3168 3377 1180 +1987 2899 1171 3565 2926 +1988 2275 3924 1125 4818 +1989 3140 2992 4372 1431 +1990 2596 3564 3369 1233 +1991 562 3165 1176 3384 +1992 2944 3390 3438 238 +1993 2353 1607 1884 4912 +1994 4464 2498 5658 1444 +1995 1234 3516 1329 3580 +1996 5671 1438 4077 4295 +1997 474 3155 5145 1757 +1998 2914 2925 3617 1122 +1999 1017 6170 1809 5175 +2000 2643 2733 5537 1374 +2001 2403 3850 2957 937 +2002 3199 210 4011 2819 +2003 3210 3191 3433 1310 +2004 3455 213 5647 2310 +2005 3068 3419 3124 1204 +2006 2617 1202 3481 3492 +2007 1377 3622 1330 3803 +2008 5954 5380 421 2121 +2009 766 4249 2179 5077 +2010 1095 3186 1372 3879 +2011 6063 3467 984 5170 +2012 4040 235 3737 4386 +2013 2517 4511 1422 5857 +2014 382 2980 6210 2291 +2015 660 5916 2407 3936 +2016 1992 3882 2834 918 +2017 975 2659 1650 5148 +2018 1241 3158 1216 3407 +2019 1155 4022 5955 2539 +2020 3545 496 3635 2850 +2021 3241 1213 3400 3376 +2022 4113 2860 3625 6088 +2023 1179 3262 539 3465 +2024 580 3440 1159 3091 +2025 3281 2999 3507 532 +2026 2920 239 3539 3391 +2027 564 3400 1213 3347 +2028 1261 3414 578 3257 +2029 3328 3206 3451 237 +2030 1700 4007 4922 1325 +2031 4913 1866 4752 2613 +2032 4656 1654 5136 2674 +2033 3512 1354 3519 3167 +2034 3322 561 3189 3437 +2035 3089 1248 3437 3189 +2036 1131 3616 323 3191 +2037 2763 2694 4854 1521 +2038 2888 2887 5583 1259 +2039 3209 1117 4721 2996 +2040 3066 1167 4290 2572 +2041 2436 4012 2552 893 +2042 1222 4298 316 3148 +2043 303 3927 1323 3869 +2044 2024 4769 2603 6053 +2045 5711 477 6016 2780 +2046 3235 3233 3630 1210 +2047 3416 3451 3521 1313 +2048 1252 3560 1420 3687 +2049 826 2478 210 3199 +2050 3164 1234 3580 3402 +2051 2773 245 3485 3054 +2052 2846 3659 3056 567 +2053 2317 3549 2962 503 +2054 3202 3085 3487 538 +2055 3390 1295 3375 3438 +2056 1777 5074 722 5159 +2057 380 4198 1807 5323 +2058 2490 476 5993 2782 +2059 2509 1258 4047 3703 +2060 2100 52 53 3494 +2061 4355 1817 4660 862 +2062 3440 2918 3597 1294 +2063 1330 2997 588 3803 +2064 3390 1071 3620 2895 +2065 1256 3349 1282 3348 +2066 3356 328 3376 1283 +2067 3451 3416 3525 237 +2068 2845 3463 3106 536 +2069 353 4195 1703 4713 +2070 284 3560 1252 3083 +2071 547 3059 1210 3500 +2072 3757 233 3363 3944 +2073 3600 3305 3686 1364 +2074 3077 1121 3778 3423 +2075 3436 3104 3468 552 +2076 3379 2855 3669 1253 +2077 247 3787 1320 4054 +2078 1819 3296 739 4765 +2079 3270 3427 3266 1319 +2080 929 2006 3199 2819 +2081 2833 1455 4093 1044 +2082 3198 3102 3478 1153 +2083 323 3244 1247 3417 +2084 3226 3543 2341 419 +2085 1768 5784 6196 3175 +2086 3086 1283 3376 3400 +2087 4157 2611 4552 1695 +2088 4739 1587 2542 2208 +2089 3487 3244 3516 1234 +2090 625 3105 1632 4565 +2091 1052 3977 1623 3694 +2092 399 5021 2281 4866 +2093 3525 3416 3717 1351 +2094 367 4158 2090 3928 +2095 2565 2761 3774 485 +2096 780 1795 4142 4498 +2097 353 2482 900 4195 +2098 1885 23 24 3278 +2099 5234 1588 5851 2417 +2100 1296 3439 1348 3662 +2101 3519 554 3515 3167 +2102 432 1869 6169 2566 +2103 3446 5934 4972 1693 +2104 5614 5374 5766 2257 +2105 414 4916 4283 3079 +2106 2558 1074 5366 2434 +2107 3521 3451 3206 1228 +2108 4194 1556 4950 2400 +2109 3651 3892 3700 1352 +2110 2443 4530 3269 1347 +2111 6111 3646 2913 1125 +2112 3300 1341 3852 2704 +2113 3191 323 3417 3433 +2114 892 4197 1871 2626 +2115 3274 1302 3433 3417 +2116 3951 1460 6117 2494 +2117 4940 5350 4247 2527 +2118 2921 2527 4247 971 +2119 239 3439 1296 3539 +2120 2973 1264 3456 3461 +2121 3686 3305 3482 1292 +2122 3600 540 3482 3305 +2123 428 2340 5600 1784 +2124 4536 2756 4512 1493 +2125 538 3487 1234 3164 +2126 1118 3223 552 3458 +2127 1485 5746 2563 3839 +2128 1959 4340 1502 4563 +2129 1772 3786 1136 4846 +2130 2918 3469 3433 1302 +2131 1483 2395 5619 4207 +2132 3708 455 4112 2796 +2133 3468 3276 3456 1264 +2134 617 4880 1592 4246 +2135 1981 4596 917 2952 +2136 1185 3482 540 3204 +2137 4831 5478 3739 768 +2138 2640 4803 834 6237 +2139 2982 3458 3577 1276 +2140 5684 2171 835 5793 +2141 3167 1082 3297 3512 +2142 2571 1154 3509 2779 +2143 1517 4293 348 4432 +2144 1507 4136 311 2638 +2145 3642 3286 3623 1335 +2146 3109 489 4415 2124 +2147 4129 2237 4779 1260 +2148 3212 1301 3886 2801 +2149 1991 3589 381 3343 +2150 5338 1191 3100 836 +2151 3894 3948 3192 3858 +2152 551 3196 1294 3597 +2153 2892 5008 5522 2639 +2154 3550 1405 5516 2423 +2155 2966 3729 3636 2965 +2156 4513 1790 5990 2522 +2157 3792 2522 5990 683 +2158 2173 5523 5040 2172 +2159 3803 3306 3530 1377 +2160 2544 3744 1162 5714 +2161 561 3027 1528 3591 +2162 4859 732 4312 2022 +2163 5616 855 4949 1954 +2164 3409 3574 3664 1317 +2165 1187 3171 554 3519 +2166 3349 308 5867 2464 +2167 1753 3473 5200 2311 +2168 4182 2676 4555 224 +2169 3252 2428 6047 1199 +2170 2411 3426 738 5882 +2171 4634 3765 2838 1105 +2172 4439 2075 6142 1630 +2173 3047 1584 4318 4789 +2174 5673 2476 4820 4309 +2175 3371 560 4228 2589 +2176 1572 2105 5180 4160 +2177 563 3639 1313 3521 +2178 5310 201 4139 2545 +2179 2172 1394 5396 2173 +2180 250 3913 1049 2926 +2181 1359 2534 218 3291 +2182 1045 5168 2165 4234 +2183 1250 3484 322 3286 +2184 2279 3788 442 6221 +2185 4390 1508 4082 2062 +2186 3147 1401 4037 2353 +2187 3673 586 3807 2806 +2188 4532 2067 4976 1643 +2189 1712 3933 1132 5692 +2190 3103 3339 3465 539 +2191 2702 2671 3624 487 +2192 5426 1551 5887 2516 +2193 2887 2641 4497 222 +2194 498 2983 1075 3643 +2195 3793 523 3140 1431 +2196 3687 2502 5208 2435 +2197 4813 2656 6090 1814 +2198 466 4350 2326 3325 +2199 2228 3546 661 4809 +2200 3636 1342 3453 3454 +2201 3364 3454 3453 1251 +2202 3988 2474 5631 789 +2203 762 5778 1835 3510 +2204 728 4791 2007 4233 +2205 233 3530 1307 3363 +2206 1746 5183 378 4910 +2207 3138 943 6072 2331 +2208 2895 549 3658 3775 +2209 2723 2951 4592 559 +2210 5472 1909 3934 2816 +2211 362 2459 5478 1992 +2212 595 3326 1330 3622 +2213 3789 1457 4657 3094 +2214 6005 3094 4657 777 +2215 1567 2606 4174 5373 +2216 5005 2456 5418 876 +2217 1317 3664 532 3796 +2218 1355 3352 547 3500 +2219 2515 3599 3090 1080 +2220 1237 3515 554 3396 +2221 2309 4345 3587 214 +2222 1695 2746 794 3874 +2223 1232 3963 1042 2621 +2224 4704 2649 3999 719 +2225 681 3756 1771 4708 +2226 1933 4312 732 5529 +2227 933 3503 1777 5016 +2228 5774 744 4607 5789 +2229 3205 3359 3813 313 +2230 2474 4314 1737 5631 +2231 570 3115 1483 4207 +2232 3137 241 3767 3598 +2233 265 3537 1889 4983 +2234 2045 4343 1379 6131 +2235 2354 2168 3935 889 +2236 3276 322 3484 3456 +2237 3461 3456 3484 1321 +2238 5270 5737 4422 1736 +2239 4336 2828 5319 690 +2240 4213 2699 3943 1404 +2241 2874 2876 3783 3799 +2242 3763 2551 4332 624 +2243 5580 3021 5513 2657 +2244 3896 202 3569 1631 +2245 3448 1355 3813 2995 +2246 2439 6040 685 5487 +2247 2705 1271 2665 3178 +2248 2292 4551 585 6190 +2249 3213 707 4842 2137 +2250 4886 2743 4919 576 +2251 3488 550 3878 2758 +2252 4028 1371 4555 1988 +2253 4484 1927 5322 4706 +2254 6000 6028 1671 3514 +2255 4814 2432 4897 494 +2256 1421 6049 2025 4499 +2257 288 6006 1688 3940 +2258 1943 2857 5837 385 +2259 3548 3261 3807 1388 +2260 3267 3357 3539 1296 +2261 867 3273 1934 5966 +2262 3133 1209 5280 2667 +2263 2206 766 5077 3977 +2264 924 4242 2507 5902 +2265 4387 2446 4610 1569 +2266 2452 2453 5345 1050 +2267 1514 2978 242 4367 +2268 4287 2436 4878 632 +2269 3664 3574 3203 1149 +2270 1999 5845 392 4540 +2271 3052 4458 5808 618 +2272 5663 2517 5857 1803 +2273 1363 3181 4871 2330 +2274 3783 2707 3952 1418 +2275 2904 525 3397 3926 +2276 594 3255 1348 3721 +2277 1858 5560 382 3655 +2278 3015 3381 3791 590 +2279 1503 5964 2120 5424 +2280 1539 393 2654 3754 +2281 869 3220 1386 2590 +2282 772 4545 1602 3346 +2283 5734 882 4618 3019 +2284 449 3464 1856 4751 +2285 3518 1015 4659 2632 +2286 3873 3055 3697 953 +2287 1228 3362 563 3521 +2288 3727 2475 5823 849 +2289 3465 3056 3659 1179 +2290 1995 6065 3711 1205 +2291 3954 1391 4688 2765 +2292 3988 1374 5537 2474 +2293 3192 321 3406 3858 +2294 737 4000 5476 2020 +2295 1215 3174 540 3600 +2296 6214 504 4253 2812 +2297 2850 1063 4590 3545 +2298 43 3759 2160 42 +2299 2437 895 5019 2444 +2300 2069 3933 299 3074 +2301 1358 3691 1403 3506 +2302 3968 2993 5992 1993 +2303 763 4901 1593 4800 +2304 2740 979 3927 2741 +2305 1244 3658 549 3082 +2306 2740 2741 5815 2496 +2307 1887 5975 794 2746 +2308 2251 2288 4449 5797 +2309 1873 4657 1457 5052 +2310 1118 3714 1322 3223 +2311 4242 628 5753 2507 +2312 3069 334 5312 2449 +2313 2532 2959 5496 956 +2314 2621 1042 4357 1987 +2315 305 1786 5571 4729 +2316 4518 2455 4981 1389 +2317 4888 2002 4495 3123 +2318 645 4359 1472 2924 +2319 1296 3662 580 3091 +2320 355 4793 1639 2977 +2321 1880 6008 386 2722 +2322 4108 386 6008 2549 +2323 2548 2549 6009 884 +2324 3707 1104 5069 529 +2325 3381 3015 3810 1321 +2326 3357 1238 3391 3539 +2327 887 5237 1337 2599 +2328 3488 3369 3564 550 +2329 5904 2931 6096 1847 +2330 2920 3922 3136 1217 +2331 2343 59 60 4208 +2332 3275 579 3717 3013 +2333 3058 2583 2269 6227 +2334 1323 3927 979 2928 +2335 4067 500 4181 2721 +2336 977 2259 3383 4907 +2337 4672 1265 2796 4112 +2338 3137 3240 3601 241 +2339 1351 3717 579 3810 +2340 2934 2652 4762 516 +2341 3445 1316 4175 2486 +2342 4650 2651 4999 1658 +2343 1292 3077 589 3686 +2344 975 3462 4610 2446 +2345 1419 3944 1179 3659 +2346 4267 3839 2563 1486 +2347 2468 4799 5567 1177 +2348 5905 2804 3992 1830 +2349 2644 260 5750 5182 +2350 2843 2520 5819 1740 +2351 2150 865 4646 2003 +2352 3082 3366 3894 1244 +2353 3207 591 5678 2447 +2354 303 3780 1920 5167 +2355 2898 277 5794 2473 +2356 2153 1146 4685 2785 +2357 5189 4039 6037 2102 +2358 3292 3878 3012 1326 +2359 3564 3012 3878 550 +2360 1398 2997 1330 3749 +2361 5110 4788 5344 1231 +2362 1335 3046 1307 3742 +2363 553 3645 1238 3172 +2364 563 3193 1142 3639 +2365 6082 3923 67 68 +2366 3264 1286 3637 3247 +2367 5567 503 5786 2512 +2368 1937 2177 5603 363 +2369 2321 2582 5803 1223 +2370 3286 322 3238 3623 +2371 6076 2450 5593 408 +2372 3311 313 3630 3233 +2373 5044 1767 3758 901 +2374 6164 1318 5798 2451 +2375 2403 2492 4481 1011 +2376 2780 1112 5443 2490 +2377 5637 840 4049 2835 +2378 5436 470 4981 2455 +2379 4314 2474 5537 514 +2380 1311 3881 523 3793 +2381 1112 3076 331 3716 +2382 3744 2544 5807 344 +2383 3298 1291 3410 3712 +2384 2088 5941 1224 4010 +2385 4921 3247 3637 1148 +2386 5984 2619 2146 240 +2387 3210 1310 3794 3255 +2388 994 2642 5704 405 +2389 377 3344 1887 5385 +2390 1696 2391 4011 210 +2391 2483 951 4875 2484 +2392 3536 278 4171 1318 +2393 5420 1509 6112 2575 +2394 4351 1888 6048 2567 +2395 251 3715 1698 4868 +2396 5199 3222 3847 1546 +2397 2962 3549 3847 2907 +2398 4957 2815 4021 1719 +2399 1004 2682 1134 4058 +2400 2846 567 3402 3580 +2401 2214 1157 5064 2614 +2402 932 5967 2325 3771 +2403 1088 4143 505 3138 +2404 3281 532 3664 3200 +2405 3036 544 3378 3848 +2406 3952 1340 3929 3612 +2407 2503 6214 1054 6232 +2408 1102 3652 543 3991 +2409 858 2593 2025 5209 +2410 2677 2355 5400 307 +2411 3610 1491 4443 244 +2412 1453 4475 809 4029 +2413 1240 3654 545 3259 +2414 2085 5640 806 5406 +2415 5877 3331 4087 1345 +2416 5159 2463 5016 1777 +2417 1464 2501 4617 4388 +2418 4583 3540 4738 1680 +2419 5162 1983 5499 968 +2420 5221 2473 6017 877 +2421 3894 3854 3531 3948 +2422 3468 3577 3458 552 +2423 3348 2554 5080 1256 +2424 5853 2142 4881 3129 +2425 5551 5758 4543 1929 +2426 595 3622 1377 3588 +2427 2825 2720 4045 573 +2428 362 4811 2964 2459 +2429 260 4015 5640 2085 +2430 1176 3463 1380 3833 +2431 3847 3797 4018 1546 +2432 3580 1329 3909 2846 +2433 2817 310 3907 3011 +2434 1024 3272 5512 3653 +2435 5372 1001 5211 2470 +2436 2898 2473 5221 1063 +2437 4061 1875 4859 2735 +2438 3214 1412 4067 2721 +2439 1524 4102 1950 5369 +2440 3593 2713 4096 1397 +2441 427 5014 2006 4820 +2442 2685 606 5275 2475 +2443 599 3909 1329 3008 +2444 454 5040 1701 1958 +2445 3115 570 3319 3819 +2446 4903 2180 3923 6082 +2447 2697 2698 4550 4731 +2448 946 5023 1997 5688 +2449 495 3285 2242 5562 +2450 1945 5187 5060 3748 +2451 1681 1406 1721 5860 +2452 4524 927 5427 2560 +2453 2064 3405 342 5127 +2454 5879 6122 4427 2140 +2455 2602 512 2922 3304 +2456 2688 2689 4763 941 +2457 1633 3801 1325 5027 +2458 1370 4246 1592 4023 +2459 746 5880 2375 4431 +2460 4025 2508 4648 390 +2461 3131 1288 3881 3010 +2462 2045 6102 220 4223 +2463 983 2533 4664 3508 +2464 3337 6092 4749 431 +2465 2802 1526 4869 2633 +2466 2093 4562 3509 1154 +2467 2694 2763 6034 871 +2468 2822 6042 2904 1002 +2469 1229 3634 558 3403 +2470 361 3080 1393 5896 +2471 4536 1493 4794 2644 +2472 303 3869 1484 3780 +2473 2340 1357 2887 2888 +2474 3530 3665 3588 1377 +2475 3008 1329 3516 3616 +2476 1429 5385 1887 4373 +2477 4980 2018 5949 2329 +2478 578 3529 1463 4030 +2479 2324 2577 438 5138 +2480 3616 1131 3827 3008 +2481 5713 1952 4134 3910 +2482 1419 3909 599 4081 +2483 3209 1564 5242 2493 +2484 4204 2493 5242 800 +2485 2318 5098 1642 4958 +2486 1691 2991 5528 4970 +2487 2425 927 5782 2538 +2488 1489 4098 1823 4557 +2489 848 5911 2222 4684 +2490 3071 1177 5567 2512 +2491 3380 3136 4183 1218 +2492 3102 523 3881 3478 +2493 5554 449 2315 3980 +2494 3921 2783 4010 1224 +2495 2454 1343 3818 3043 +2496 3315 3777 3645 553 +2497 4478 1638 4810 2537 +2498 4056 1606 2968 4025 +2499 1910 2751 852 5693 +2500 939 1919 1201 4682 +2501 936 5329 1839 5458 +2502 1467 4188 1301 3212 +2503 3651 1352 4076 2912 +2504 2204 1085 4051 2797 +2505 1155 2623 5151 4138 +2506 3433 3469 3794 1310 +2507 1404 3943 1184 3299 +2508 827 2199 3772 5885 +2509 610 1971 4303 3528 +2510 1192 3823 246 3057 +2511 2753 1342 3636 3729 +2512 1107 5408 465 2499 +2513 3379 1253 3889 2935 +2514 5962 2220 5272 957 +2515 1255 3317 1106 3704 +2516 3749 3755 4188 336 +2517 503 5567 4799 2317 +2518 3244 323 3616 3516 +2519 1548 3067 673 4521 +2520 857 4760 392 2479 +2521 3687 1420 6170 2502 +2522 4107 2430 5192 908 +2523 3598 3149 3778 1121 +2524 2837 2880 4381 647 +2525 5716 381 4313 2803 +2526 2082 5532 2011 2515 +2527 3068 325 3683 3419 +2528 3791 1398 3666 3667 +2529 1300 3413 464 4613 +2530 2298 404 5249 4173 +2531 459 5378 5804 3122 +2532 3064 1277 3992 3248 +2533 1162 3619 571 3957 +2534 3601 3182 3767 241 +2535 3530 3306 3742 1307 +2536 6091 2950 5711 2189 +2537 5547 2530 5667 888 +2538 2689 2688 5665 1208 +2539 1798 3331 345 4755 +2540 844 2439 5487 2896 +2541 1259 3825 692 2888 +2542 4656 2674 5467 383 +2543 1019 2362 5751 3663 +2544 3538 2489 4984 1479 +2545 2099 4394 448 5051 +2546 3791 3667 3712 590 +2547 3966 2555 5810 1831 +2548 5142 387 3949 2897 +2549 605 2955 1368 4078 +2550 2852 2853 4354 745 +2551 3474 314 6145 2491 +2552 4993 5206 2955 605 +2553 2743 4123 4609 1079 +2554 4105 2625 4677 251 +2555 4153 4583 3998 1596 +2556 969 2967 396 2906 +2557 2109 1692 4884 2587 +2558 4720 1139 4072 2771 +2559 4984 2489 5009 909 +2560 778 4937 1577 3314 +2561 4659 1470 4697 2632 +2562 4107 1270 3044 2430 +2563 1153 3785 536 3198 +2564 3375 1295 3775 3217 +2565 5179 813 3383 2259 +2566 239 3718 1348 3439 +2567 2298 3697 5697 854 +2568 757 5829 1912 3321 +2569 2928 2523 5821 1323 +2570 5438 1967 2556 863 +2571 2813 2677 4200 1109 +2572 1183 3723 1211 3236 +2573 2865 1073 3604 4238 +2574 782 5515 2096 3689 +2575 2031 5031 761 5295 +2576 2062 868 5333 3846 +2577 2030 2624 730 4486 +2578 2437 2666 5137 895 +2579 1816 6133 513 2598 +2580 3015 590 3712 3410 +2581 2202 5985 833 5263 +2582 3280 3187 4471 1384 +2583 1402 2578 265 4983 +2584 6234 4784 1583 3736 +2585 1284 3740 520 3374 +2586 227 4630 1013 2805 +2587 2225 3946 5052 924 +2588 3414 1261 3819 3319 +2589 508 3272 2145 4537 +2590 3123 1523 5177 2616 +2591 2511 2989 3726 417 +2592 3361 1293 3531 3854 +2593 3554 1227 5347 3618 +2594 1062 3139 2157 5057 +2595 3314 1577 4204 5796 +2596 1941 5247 1035 6021 +2597 936 4783 2028 5329 +2598 259 5229 5064 3470 +2599 94 1641 4988 2088 +2600 3214 2721 4181 1175 +2601 5976 5810 1376 4379 +2602 4629 2530 5547 1091 +2603 2418 1674 3972 4474 +2604 1037 4259 6190 3562 +2605 2359 897 2908 4198 +2606 816 2324 5774 5789 +2607 4252 1683 4170 4911 +2608 1032 2795 252 4094 +2609 5523 2173 4971 324 +2610 508 2308 3544 5450 +2611 899 3556 455 4090 +2612 3049 5479 1758 5840 +2613 1053 3802 6145 3310 +2614 2542 5281 870 2208 +2615 1903 4203 335 4703 +2616 5338 836 6140 3678 +2617 4905 807 4296 3342 +2618 1412 3721 1348 3718 +2619 2142 507 2986 5383 +2620 3944 1419 4081 3757 +2621 818 4892 391 2290 +2622 2276 574 5245 3693 +2623 3528 1904 4962 5973 +2624 498 3643 1095 3879 +2625 3145 2609 4394 1272 +2626 5464 1828 5348 2518 +2627 2156 1231 4004 3080 +2628 4304 432 2566 3884 +2629 5682 2640 6237 1998 +2630 1193 2983 498 3930 +2631 594 3214 1175 3888 +2632 4957 5677 1898 2815 +2633 5134 2544 5714 1907 +2634 3026 6194 2347 978 +2635 621 4861 1848 3095 +2636 218 3260 1676 3291 +2637 2913 321 3691 3558 +2638 3742 3306 3803 588 +2639 3145 4407 747 2609 +2640 2134 4827 753 5023 +2641 3237 3821 3779 1645 +2642 3654 3061 5535 545 +2643 1445 5333 2265 4438 +2644 822 4047 1258 2863 +2645 3072 2933 3974 278 +2646 459 3122 1083 4038 +2647 3590 698 4830 2730 +2648 3149 3598 3767 1341 +2649 3423 3778 3634 1395 +2650 1141 2673 452 4321 +2651 2512 3675 3926 1230 +2652 4025 922 5748 2508 +2653 2394 1124 5887 3065 +2654 5554 1944 3464 449 +2655 3815 4917 4053 1169 +2656 4272 2550 5021 399 +2657 3411 6194 3026 720 +2658 3644 1510 4930 2523 +2659 5191 3245 4186 1491 +2660 5752 2969 4716 2077 +2661 4229 3234 6047 343 +2662 882 4036 5519 2669 +2663 3493 2728 5488 1475 +2664 3565 1171 4416 3698 +2665 3542 2521 4214 1147 +2666 1850 5930 211 3505 +2667 1405 4744 1049 4196 +2668 3576 2526 5312 334 +2669 2852 1039 5959 3626 +2670 4667 3547 5877 1864 +2671 3286 3642 3832 1250 +2672 844 2896 5436 2455 +2673 1622 4184 754 3218 +2674 4917 5717 2670 478 +2675 2671 2702 5979 727 +2676 2621 1987 5536 4699 +2677 3644 2820 4114 1262 +2678 1692 2109 3696 527 +2679 2153 4750 359 5796 +2680 1282 3798 578 3414 +2681 3645 3777 3444 1390 +2682 273 3020 1332 4095 +2683 5391 5997 5471 1808 +2684 1203 3925 334 3069 +2685 4748 5636 3477 2083 +2686 786 4422 1809 4278 +2687 3384 1176 3833 3335 +2688 4061 2094 4851 1495 +2689 2096 5515 880 3194 +2690 2541 2540 5776 907 +2691 4784 2531 5376 1583 +2692 3942 3256 3917 1430 +2693 3168 646 3526 3377 +2694 2702 487 5160 2703 +2695 3540 4583 4153 676 +2696 3966 1409 5067 2555 +2697 4934 2073 5235 837 +2698 2512 1230 6077 3071 +2699 5853 1191 5338 2214 +2700 665 5754 1411 2642 +2701 686 5287 2124 4388 +2702 1612 4605 1098 4927 +2703 2745 1168 5548 4898 +2704 1370 2335 3052 618 +2705 3662 3794 3469 580 +2706 2985 1113 4192 4770 +2707 3712 3667 3911 3298 +2708 3543 3226 5756 1093 +2709 724 4186 3245 1492 +2710 5976 490 5872 2725 +2711 3901 619 4826 2553 +2712 1782 3095 996 2963 +2713 3698 1456 4088 3565 +2714 4738 3540 1587 4739 +2715 5088 2245 3916 1804 +2716 4274 1617 4281 4187 +2717 2153 2785 1861 4750 +2718 2892 2639 4467 357 +2719 3839 4267 3304 4152 +2720 223 2963 2445 6096 +2721 1484 2434 5366 3780 +2722 2471 3896 1631 5079 +2723 1321 3810 579 3461 +2724 1989 3084 5475 1207 +2725 704 2678 1127 4909 +2726 3588 3665 4043 1346 +2727 885 4301 1880 2722 +2728 639 3303 5614 2257 +2729 1251 3796 532 3507 +2730 3237 1187 3441 3821 +2731 2526 5870 573 3088 +2732 276 3995 1791 4587 +2733 2798 4490 2104 333 +2734 4226 2580 3486 1366 +2735 4187 1400 3480 4274 +2736 3557 1382 4172 731 +2737 1904 3528 1030 4402 +2738 236 1786 5192 2430 +2739 2376 5664 1016 4383 +2740 1404 3299 479 4243 +2741 5580 902 4290 3021 +2742 2708 5450 3544 1116 +2743 2287 3805 5596 828 +2744 3671 2646 5598 1327 +2745 1155 2539 373 5141 +2746 2884 1278 3848 3378 +2747 3341 3478 3881 1288 +2748 3969 471 5270 2540 +2749 3159 3361 3854 537 +2750 1153 4144 1468 3785 +2751 2004 4827 2134 2690 +2752 4768 1739 824 1529 +2753 3541 2768 4236 1367 +2754 504 6214 2503 3142 +2755 1512 4016 2747 709 +2756 1129 3852 1341 3767 +2757 2921 971 2890 4206 +2758 1025 4792 1811 3954 +2759 5748 3073 4191 1601 +2760 2695 1020 5310 2545 +2761 1992 3702 5353 362 +2762 5056 1432 911 2610 +2763 3330 2572 6031 1494 +2764 3751 1285 5389 2558 +2765 5807 2544 5134 1743 +2766 5756 1497 4602 2030 +2767 2515 376 4414 3599 +2768 3788 2575 5336 442 +2769 1512 2727 5726 1511 +2770 5370 4085 5458 1839 +2771 1033 2531 4784 3806 +2772 1115 4209 531 2801 +2773 1513 3117 4991 2374 +2774 5996 3025 945 5928 +2775 2942 1447 3978 3868 +2776 788 2636 5068 1793 +2777 3228 1195 4541 3229 +2778 1261 4229 1575 3819 +2779 904 5073 1842 4345 +2780 643 1863 1060 3475 +2781 2390 267 5474 4331 +2782 2553 1160 3254 3901 +2783 3567 375 5375 2637 +2784 4380 2637 5375 1637 +2785 1673 6072 943 4168 +2786 1984 2268 5701 3501 +2787 3110 436 4546 2622 +2788 3894 3858 3406 1244 +2789 5694 2830 4670 1477 +2790 1301 3326 595 3886 +2791 457 4330 5274 3559 +2792 3535 1362 3614 3857 +2793 1160 3905 565 3254 +2794 1059 4698 629 2586 +2795 205 5403 2148 4190 +2796 1745 4046 367 3928 +2797 3395 3166 3175 610 +2798 5913 1587 3540 5055 +2799 1488 5963 4920 2679 +2800 1939 4082 1508 5205 +2801 5194 2555 5067 282 +2802 4559 2651 4904 1544 +2803 2962 2597 5786 503 +2804 2945 2607 5194 282 +2805 4434 1837 6078 2559 +2806 838 2053 5198 2738 +2807 948 2991 4884 1692 +2808 1792 5135 796 4674 +2809 2744 2615 5888 296 +2810 6195 4791 728 3290 +2811 2233 4308 1287 6158 +2812 2825 573 5870 3216 +2813 2180 2628 5974 881 +2814 3445 3079 4283 1316 +2815 2522 5825 1773 4513 +2816 4836 1938 5261 406 +2817 1976 4647 5763 3541 +2818 3829 2561 4854 526 +2819 2871 1113 5049 2872 +2820 1854 5308 2946 1328 +2821 2656 1173 4052 4169 +2822 3614 1549 5747 2617 +2823 6176 2711 4687 18 +2824 3854 3894 3366 537 +2825 1685 3055 293 5063 +2826 3254 565 3298 3911 +2827 3496 4690 2646 533 +2828 4373 640 5315 2567 +2829 4351 2567 5315 1581 +2830 252 2716 5734 4094 +2831 934 1953 5581 2579 +2832 5578 743 6212 2676 +2833 4933 2679 4920 1562 +2834 4839 1674 2418 4764 +2835 465 2660 4671 2244 +2836 318 5435 4415 2246 +2837 2221 903 3624 2671 +2838 5745 1568 5260 3476 +2839 5948 1108 3476 5260 +2840 211 4192 1113 2871 +2841 5195 5468 3991 543 +2842 2348 3912 20 21 +2843 326 4216 1148 2839 +2844 4169 633 6090 2656 +2845 1030 2894 388 4402 +2846 5770 374 4712 3221 +2847 3635 1080 3090 4008 +2848 2945 2812 4253 1156 +2849 1622 4072 1139 3859 +2850 782 3596 2017 5515 +2851 2200 3815 2595 763 +2852 695 4805 213 3455 +2853 1640 4821 1104 3707 +2854 1079 4285 5648 1555 +2855 2016 2634 4724 735 +2856 2668 4337 3146 994 +2857 1355 3630 313 3813 +2858 1053 3848 1278 3802 +2859 5689 324 4971 1140 +2860 4906 1414 5364 2316 +2861 3288 1900 6104 5244 +2862 1357 2823 767 5397 +2863 805 3816 1731 4709 +2864 2034 4874 642 3730 +2865 4732 3609 3888 1175 +2866 861 4484 4011 2391 +2867 3522 4639 4392 1597 +2868 2779 212 5605 2571 +2869 2691 291 4504 3843 +2870 3956 1346 3529 4121 +2871 3265 848 4684 5854 +2872 1653 3508 656 4718 +2873 2409 535 3473 4623 +2874 2943 5440 1616 5024 +2875 479 4270 1537 4243 +2876 3644 483 4333 2820 +2877 2997 1398 3791 3832 +2878 6223 3412 859 3411 +2879 3867 1306 3125 5065 +2880 1001 5951 2013 5846 +2881 5336 2575 6112 1034 +2882 3930 2814 4287 1490 +2883 3030 4693 669 5731 +2884 3463 2845 4305 1380 +2885 1304 4268 5402 2778 +2886 2699 4213 2879 990 +2887 5894 1611 6192 2905 +2888 1725 5925 3900 3183 +2889 2038 4494 5685 463 +2890 5765 2613 4752 1799 +2891 2484 4753 6070 2483 +2892 2837 1266 4215 2880 +2893 4089 2143 4726 1437 +2894 2359 2652 5630 897 +2895 2617 571 3857 3614 +2896 1618 5336 1034 2723 +2897 5393 823 5582 2612 +2898 3181 1363 4570 3908 +2899 1447 2942 433 4151 +2900 514 2010 4163 4694 +2901 6077 1230 3926 3397 +2902 1836 3150 227 4017 +2903 2955 3957 3492 1368 +2904 2437 2601 4814 494 +2905 4123 2743 4886 1055 +2906 2351 822 2984 5542 +2907 1059 5182 1908 4698 +2908 2796 827 5885 3708 +2909 3262 1179 3944 3363 +2910 2031 3567 1137 5031 +2911 2030 4486 1093 5756 +2912 1554 3111 1024 4655 +2913 4626 2862 4606 1827 +2914 3651 584 3506 3892 +2915 2700 5772 214 3587 +2916 4516 2328 5603 1624 +2917 326 3656 1733 4216 +2918 4582 1547 4987 3063 +2919 5190 3762 5459 1772 +2920 3393 4978 2108 2584 +2921 2556 862 4660 2922 +2922 4887 519 2869 4327 +2923 1691 2585 5395 819 +2924 2978 3248 3992 242 +2925 717 3735 1454 3967 +2926 3710 4894 4558 1012 +2927 4840 3808 5550 1990 +2928 5545 2187 6114 3900 +2929 1752 3849 1101 3632 +2930 4747 2606 5635 970 +2931 936 5458 404 2594 +2932 264 4029 2016 5442 +2933 5031 1137 5660 2774 +2934 4482 2774 5660 1738 +2935 370 4142 1795 5343 +2936 2170 2841 4322 886 +2937 3466 1441 4376 4681 +2938 1711 4872 1968 3690 +2939 1044 4093 1438 3070 +2940 3351 3179 4457 1043 +2941 4642 597 4420 2754 +2942 1668 4847 672 4453 +2943 5802 4501 4853 230 +2944 571 3619 1481 3857 +2945 5563 5680 3898 2125 +2946 2890 971 4247 2889 +2947 2941 467 4807 1057 +2948 2244 4671 4545 772 +2949 1783 2789 5173 951 +2950 3217 596 4368 3375 +2951 4103 968 5499 3024 +2952 3942 1416 4286 3256 +2953 4741 4248 3256 4286 +2954 2085 2627 5750 260 +2955 2654 997 4354 3754 +2956 5200 3360 4520 1163 +2957 4315 1369 5542 2984 +2958 2033 4618 882 2669 +2959 3097 2687 6153 1281 +2960 2065 4601 919 3074 +2961 1965 3016 1208 5665 +2962 3378 1076 4270 2884 +2963 1290 3109 2124 5287 +2964 2568 2131 6226 5091 +2965 4127 3893 4414 376 +2966 2253 718 5691 2623 +2967 6177 2752 4501 499 +2968 1166 2605 522 5003 +2969 1659 5212 1315 3680 +2970 230 3772 2199 4800 +2971 3331 1798 5720 4087 +2972 960 2248 5982 2910 +2973 2469 3071 6077 300 +2974 1607 2353 4037 208 +2975 1781 4502 1506 4595 +2976 787 2570 5086 1012 +2977 1645 4510 555 3237 +2978 3017 3480 3595 1222 +2979 3134 3005 5647 213 +2980 1485 5186 4677 2625 +2981 909 2622 4546 4984 +2982 825 5015 4440 1872 +2983 4044 942 4408 3075 +2984 3703 234 4062 3292 +2985 1624 2379 5464 4516 +2986 2518 740 4516 5464 +2987 3960 614 5832 5864 +2988 577 2889 4247 5350 +2989 578 4030 1199 3257 +2990 562 3401 1533 3230 +2991 2261 1450 4614 5685 +2992 2605 3053 4806 522 +2993 2816 604 5702 2631 +2994 4611 2137 4842 992 +2995 2364 1273 4979 2794 +2996 978 2347 416 5572 +2997 4942 456 5059 5112 +2998 2634 2016 4029 809 +2999 5553 2054 5264 2972 +3000 1494 4386 1214 3330 +3001 3567 2637 5735 1137 +3002 3979 4183 4605 1612 +3003 3381 1250 3832 3791 +3004 5015 825 3523 5416 +3005 1959 5827 653 3462 +3006 4117 4214 2521 798 +3007 3958 1531 4767 2655 +3008 1308 3653 2087 6038 +3009 2992 349 4573 4372 +3010 888 5667 1800 3368 +3011 3481 1202 5037 4755 +3012 793 2886 1172 5429 +3013 2584 843 2767 6125 +3014 1232 6135 6125 2767 +3015 219 4071 1381 3309 +3016 3835 2467 5209 255 +3017 3974 1174 4171 278 +3018 2859 3853 4576 1476 +3019 2617 3492 3957 571 +3020 2689 1208 6224 2718 +3021 2729 84 85 4825 +3022 1661 3638 1522 4230 +3023 4025 2968 4696 922 +3024 3260 3844 4779 1408 +3025 747 3045 5799 2609 +3026 2822 309 3982 3517 +3027 1931 4064 670 3627 +3028 1029 5121 1933 4479 +3029 3536 1318 6164 2878 +3030 4375 1376 5194 2607 +3031 1762 3611 1141 4321 +3032 2945 1156 5585 2607 +3033 1091 4233 2007 5248 +3034 3183 3900 6114 2384 +3035 4911 253 3389 4252 +3036 1847 541 5362 3513 +3037 846 4390 6057 2133 +3038 3145 1272 3450 354 +3039 2401 5463 1790 3586 +3040 305 2989 1557 3828 +3041 1773 3936 1101 3661 +3042 2214 2614 5334 507 +3043 3073 630 5908 4191 +3044 4830 1526 5033 2730 +3045 1983 4998 769 5499 +3046 4255 1557 5926 2535 +3047 2012 4943 5102 823 +3048 1378 2185 6045 4585 +3049 3878 3292 4062 1361 +3050 1847 2618 4941 541 +3051 2428 3252 4081 599 +3052 591 4077 1438 4093 +3053 5793 835 5802 2851 +3054 825 5092 6231 3523 +3055 73 74 5696 2650 +3056 1605 4250 5617 2971 +3057 3307 10 11 6186 +3058 435 5874 3346 2640 +3059 2783 92 93 4010 +3060 2040 4496 2127 5649 +3061 2261 5700 3138 505 +3062 3110 2842 6189 436 +3063 6220 1035 5494 2574 +3064 602 4084 1396 4008 +3065 403 1877 4491 5909 +3066 4742 270 4079 1863 +3067 3868 3978 4156 910 +3068 3589 5308 1854 6173 +3069 2551 1172 2886 4509 +3070 1638 3387 965 4810 +3071 925 5066 1507 2638 +3072 5918 2710 6098 697 +3073 4309 367 4046 5673 +3074 4097 1356 3939 506 +3075 2010 514 5537 2733 +3076 269 1787 5903 3213 +3077 3192 3948 3700 1403 +3078 3903 470 4913 3048 +3079 4180 864 5598 2646 +3080 2089 5089 728 4233 +3081 1463 4043 233 3757 +3082 4186 724 4746 1647 +3083 3888 3609 4165 1469 +3084 4732 343 4165 3609 +3085 6060 460 2663 5803 +3086 1454 4531 1981 4756 +3087 2026 3395 985 6119 +3088 1379 6050 2510 6131 +3089 5404 1766 6093 2908 +3090 546 4921 1733 3945 +3091 1346 3956 595 3588 +3092 3974 3917 3668 1174 +3093 4290 1167 6120 3021 +3094 2129 5217 1820 3743 +3095 3999 2649 5103 1571 +3096 6210 2980 4117 798 +3097 4339 3157 4136 1297 +3098 4582 2628 5245 574 +3099 3886 595 3956 3605 +3100 4121 1530 3605 3956 +3101 4622 2193 4959 1690 +3102 4339 2719 1448 4678 +3103 94 95 4790 1641 +3104 1956 1366 3486 6107 +3105 1171 4743 1735 4416 +3106 1546 4018 1383 4019 +3107 4846 1136 4384 2931 +3108 3927 303 4599 2741 +3109 1374 5493 430 2643 +3110 4869 384 5388 2633 +3111 4008 3090 4492 602 +3112 3599 1472 4492 3090 +3113 928 3986 1835 5357 +3114 420 5102 4943 2624 +3115 226 1901 4148 3629 +3116 4239 4369 3863 648 +3117 1063 5221 2066 4590 +3118 4381 2880 5509 1440 +3119 3131 3010 5129 600 +3120 4704 1570 5032 2649 +3121 2199 827 5717 2200 +3122 680 4377 1775 4421 +3123 4655 3014 5872 490 +3124 909 3945 1733 3657 +3125 2135 702 1819 5164 +3126 3094 1761 3491 3789 +3127 2656 1446 3386 1173 +3128 5398 311 5379 2882 +3129 3728 2706 4775 1563 +3130 2290 391 5713 3293 +3131 3501 4892 5227 1984 +3132 4600 1778 4228 4777 +3133 4024 930 5618 2661 +3134 4206 2661 5618 1665 +3135 3638 615 5840 3141 +3136 5001 3232 5563 752 +3137 2161 4828 1670 4855 +3138 2284 5246 35 36 +3139 3922 598 4183 3136 +3140 2697 4731 2722 386 +3141 871 6034 2400 4950 +3142 2124 4415 1464 4388 +3143 1534 4062 234 3533 +3144 3255 594 4147 3210 +3145 3367 3373 4503 2817 +3146 1785 3804 1126 3431 +3147 4601 1641 4790 2762 +3148 1573 2718 6224 4266 +3149 1487 3422 1467 4075 +3150 3127 2775 4694 1399 +3151 3387 1638 4086 4452 +3152 3531 607 3700 3948 +3153 6167 1943 4485 2985 +3154 4300 4737 6153 2687 +3155 759 1923 4497 4797 +3156 1303 4259 1037 3048 +3157 1521 3959 1545 3960 +3158 6016 2202 5263 3076 +3159 641 4955 2334 5477 +3160 250 4088 1549 4003 +3161 575 2802 5540 3751 +3162 4274 2655 5892 1617 +3163 1367 5915 1976 3541 +3164 4596 2821 5703 917 +3165 705 5624 2042 5114 +3166 5337 2660 5472 981 +3167 534 3354 4320 6088 +3168 2357 3146 325 5243 +3169 2486 973 4798 3445 +3170 2998 3057 4265 1120 +3171 5561 3760 5122 1284 +3172 3421 2658 5387 878 +3173 3304 2922 4660 4152 +3174 5745 2149 5721 750 +3175 3946 433 2679 4933 +3176 3913 3169 4196 1049 +3177 2805 1510 3644 4311 +3178 1115 3605 1530 4382 +3179 1519 4109 586 4850 +3180 594 3888 1469 4147 +3181 2911 3398 4275 1096 +3182 71 72 4967 2959 +3183 4206 1665 5029 2921 +3184 80 2921 5029 79 +3185 5962 957 4474 2592 +3186 2250 3475 6177 4875 +3187 3890 4060 5101 1365 +3188 5803 2663 5137 1223 +3189 4261 622 2788 5267 +3190 6187 2265 5333 868 +3191 4897 1625 5285 2666 +3192 5228 1304 5135 3602 +3193 5628 1421 4889 2943 +3194 679 4392 1749 4323 +3195 3057 246 5239 4265 +3196 5137 2663 5971 895 +3197 2786 4701 4009 820 +3198 4107 3845 4621 587 +3199 1724 4225 4858 891 +3200 1416 3942 485 3774 +3201 2342 3327 4769 1107 +3202 838 3355 5317 2053 +3203 5669 4131 1744 5218 +3204 2807 587 4621 5346 +3205 3599 4414 2924 1472 +3206 261 3889 1435 4126 +3207 3982 1397 4096 3517 +3208 2693 3455 456 4942 +3209 1517 4133 648 3863 +3210 2891 2793 4615 935 +3211 4375 644 2669 5519 +3212 5951 1001 5117 2724 +3213 2370 923 6218 2732 +3214 4166 231 3042 4310 +3215 5992 3358 4423 2219 +3216 5729 901 3758 3773 +3217 520 3740 1750 4675 +3218 5880 2165 5384 440 +3219 3478 3341 4144 1153 +3220 5866 2667 5280 915 +3221 2229 720 5951 2724 +3222 712 4118 1456 3698 +3223 2703 1090 5979 2702 +3224 3590 2730 5033 1484 +3225 4557 3040 4615 1489 +3226 5210 935 4615 3040 +3227 5439 1913 5772 2700 +3228 955 3579 1369 4269 +3229 4137 1151 4367 2988 +3230 4314 514 4694 2775 +3231 3130 5490 723 4019 +3232 3907 1331 5626 3011 +3233 565 3905 1460 4275 +3234 1111 3862 1843 5588 +3235 1647 4746 472 1406 +3236 2854 1658 4999 2339 +3237 78 2701 2266 77 +3238 5835 2785 4685 706 +3239 2395 4619 832 5619 +3240 4261 5267 1948 6035 +3241 3497 1150 3517 4096 +3242 2354 5813 1048 3842 +3243 310 2817 4503 5437 +3244 215 5491 1056 2591 +3245 399 1948 5267 4272 +3246 5918 1851 6095 2710 +3247 2284 36 37 4695 +3248 872 3720 3566 2305 +3249 3224 2692 5273 883 +3250 3175 3166 6174 1768 +3251 468 2692 1360 5629 +3252 2926 3565 4088 250 +3253 4217 2818 5776 1736 +3254 5439 2700 5057 804 +3255 1380 4305 634 3606 +3256 2266 2701 5618 930 +3257 5029 1665 5618 2701 +3258 3257 3234 4229 1261 +3259 2655 4274 3480 608 +3260 3708 5885 3772 1178 +3261 1943 385 5007 4485 +3262 5305 515 5755 2793 +3263 2906 396 5511 2886 +3264 4372 4156 3978 1431 +3265 4240 577 4808 3051 +3266 4454 1609 4099 4521 +3267 1412 3718 1217 4067 +3268 1567 4026 275 4140 +3269 5307 4407 3145 1662 +3270 6107 3963 5814 4488 +3271 5467 2674 4080 1279 +3272 1019 4425 2269 5779 +3273 2545 1017 5175 2695 +3274 3530 233 4043 3665 +3275 5307 1749 5590 2686 +3276 4036 882 5734 2716 +3277 4319 742 5579 3633 +3278 5303 2072 5830 497 +3279 4024 2696 5496 1626 +3280 1865 841 4020 3795 +3281 1836 5940 627 4160 +3282 5496 2696 5202 956 +3283 1770 3724 811 4022 +3284 1760 4125 873 5038 +3285 831 4318 1584 4589 +3286 3208 712 3698 4416 +3287 2801 531 4483 3212 +3288 1556 5395 2585 4950 +3289 1881 838 4856 3408 +3290 3955 2929 4877 1298 +3291 2697 904 5556 2698 +3292 1527 3834 1533 3401 +3293 4720 2771 5527 1434 +3294 5289 771 5539 1706 +3295 2987 2184 5013 5586 +3296 3060 4885 5764 309 +3297 3798 4121 3529 578 +3298 3943 2699 5390 232 +3299 2682 1004 5719 2683 +3300 4229 2960 4453 1575 +3301 2984 6200 372 4315 +3302 2326 1242 3770 3325 +3303 3372 4797 5873 2937 +3304 3438 3375 4368 1268 +3305 5501 2872 5049 675 +3306 1239 2052 4637 3572 +3307 5708 5696 74 75 +3308 930 5696 5708 2266 +3309 555 4510 1720 3723 +3310 1040 2009 6043 2754 +3311 5852 423 5633 2829 +3312 2242 3285 5945 1103 +3313 4050 2319 4016 1110 +3314 4687 2711 5242 1564 +3315 1547 4224 1684 4316 +3316 4568 2415 5365 2018 +3317 4471 1855 4716 2969 +3318 6215 3674 4097 1833 +3319 5396 2151 5237 887 +3320 4386 1494 4005 4040 +3321 994 405 5679 2668 +3322 4808 577 5350 2732 +3323 3666 4141 3911 3667 +3324 1161 2368 3497 5927 +3325 4199 2717 5565 1065 +3326 1966 5438 2664 6025 +3327 1618 4549 1857 5672 +3328 2229 2724 5117 1442 +3329 3251 2547 6139 1433 +3330 5614 993 4710 2728 +3331 5070 2946 5308 1021 +3332 4287 632 6027 1490 +3333 1776 5178 2147 2807 +3334 2072 630 5008 2892 +3335 4693 3293 4725 669 +3336 3793 1431 3978 1447 +3337 2698 521 2916 4550 +3338 2257 5766 1393 6147 +3339 3603 1193 3930 4344 +3340 1498 4041 1600 4235 +3341 4199 310 5437 2717 +3342 5495 3842 5798 775 +3343 5979 1090 4606 2333 +3344 4238 395 5749 2865 +3345 991 5041 719 2726 +3346 886 5950 1699 4711 +3347 758 6150 1969 4073 +3348 5365 3670 3769 989 +3349 2028 4523 1542 4934 +3350 2156 5099 1628 5282 +3351 1646 3779 235 4040 +3352 4471 2969 5277 1384 +3353 2475 3727 4515 1102 +3354 1201 1919 5808 4458 +3355 999 5912 1734 2750 +3356 259 3470 1542 4523 +3357 1422 3370 232 4326 +3358 3594 2247 4580 1726 +3359 2620 1003 4965 2749 +3360 3819 1575 4935 3115 +3361 63 64 5419 4027 +3362 6026 1672 3626 2076 +3363 2037 5841 2036 4649 +3364 411 2952 1922 4524 +3365 1526 2802 575 5033 +3366 1977 5297 1831 2725 +3367 2450 5174 2729 1536 +3368 5591 2729 5174 923 +3369 1409 5003 522 2864 +3370 3626 1672 298 2852 +3371 2559 6078 14 15 +3372 2029 5541 799 4100 +3373 2256 6185 318 4589 +3374 3644 1262 4017 4311 +3375 1263 3155 474 4559 +3376 2829 5953 3161 915 +3377 3492 3481 6184 1368 +3378 2737 1128 4227 3442 +3379 5713 1375 4725 3293 +3380 1853 5433 2235 4514 +3381 3023 1350 6027 2768 +3382 3016 5612 6224 1208 +3383 3835 1045 6030 2467 +3384 4765 497 5164 1819 +3385 1424 4153 1596 4132 +3386 3466 4681 4251 1452 +3387 945 2001 4795 5928 +3388 4319 3633 6043 2009 +3389 2776 810 2421 3502 +3390 488 5028 1827 4473 +3391 3452 3030 5488 770 +3392 1362 4381 1440 4003 +3393 4841 3246 1379 4343 +3394 3353 4292 3432 1069 +3395 4512 2756 5839 613 +3396 4944 1715 5839 2756 +3397 1041 2112 4724 3822 +3398 3585 3118 4850 1534 +3399 5083 2851 5802 230 +3400 2945 1054 6214 2812 +3401 4213 641 5477 2879 +3402 4663 2879 5477 1666 +3403 4200 2917 6208 1852 +3404 5132 959 6208 2917 +3405 2729 5591 83 84 +3406 4378 3851 5964 1503 +3407 3845 5311 4177 1535 +3408 1531 3756 681 4767 +3409 3765 1434 5527 2838 +3410 4433 3914 4001 1427 +3411 3076 1112 2780 6016 +3412 889 3935 2270 5340 +3413 6034 2763 5864 1891 +3414 4136 3157 5379 311 +3415 1268 4368 1829 4806 +3416 2734 1268 4806 3053 +3417 2516 1636 5817 3885 +3418 5193 1337 3566 3720 +3419 1720 5729 3773 5341 +3420 2781 2782 5993 1114 +3421 6115 761 5031 2774 +3422 5163 3570 4363 542 +3423 5681 2044 5398 2742 +3424 1393 5766 2154 5896 +3425 3422 1487 3911 4141 +3426 3353 1069 4320 3354 +3427 772 1928 5565 4212 +3428 339 5838 1441 4292 +3429 2594 854 5084 1274 +3430 2777 2776 3502 1333 +3431 3621 3318 1961 6193 +3432 1124 3695 2516 5887 +3433 5434 2703 5160 1741 +3434 816 5789 2306 6235 +3435 5761 1905 5777 4279 +3436 601 4447 2258 3817 +3437 486 4743 1171 2899 +3438 2926 1049 4744 2899 +3439 3899 2923 5600 692 +3440 56 3 57 5444 +3441 306 2116 4823 3201 +3442 1000 3621 1693 4972 +3443 4107 908 5311 3845 +3444 4019 1383 6106 3130 +3445 1501 3044 1270 4032 +3446 3466 3432 4292 1441 +3447 4458 3052 926 5650 +3448 2293 1349 5468 3568 +3449 1723 5296 1224 3365 +3450 4843 1890 4764 2418 +3451 725 4413 1444 4862 +3452 4056 3177 4766 1606 +3453 460 2356 5289 3947 +3454 1981 4953 1704 4596 +3455 3386 1446 5584 521 +3456 3360 5200 3473 535 +3457 4518 1389 4982 3752 +3458 2430 3044 5694 236 +3459 3354 3019 4618 1407 +3460 4776 1684 4224 3679 +3461 2276 3679 4224 574 +3462 5124 1600 4041 5827 +3463 773 3738 1883 5553 +3464 4517 1544 4904 2235 +3465 2458 4604 947 3049 +3466 1960 5269 45 46 +3467 1614 5181 2228 4809 +3468 4014 961 4995 2919 +3469 3937 2274 5981 668 +3470 5054 438 4833 2338 +3471 34 6206 5573 33 +3472 1388 3807 586 4109 +3473 2745 1030 3528 4303 +3474 1909 5452 931 3934 +3475 2140 5727 413 4193 +3476 4600 4777 3117 1513 +3477 2894 1030 2745 4898 +3478 5096 2885 5318 1553 +3479 5708 76 77 2266 +3480 4862 1711 5183 2809 +3481 5585 3429 5480 644 +3482 1726 256 5860 3594 +3483 739 4472 2691 3838 +3484 4462 4027 5419 1924 +3485 3691 1358 4818 3558 +3486 6220 2525 6021 1035 +3487 1984 790 5119 2268 +3488 2564 4002 5657 556 +3489 490 4627 1554 4655 +3490 4257 1552 5154 1874 +3491 4217 397 4987 2818 +3492 1917 4102 1524 4260 +3493 4072 368 5527 2771 +3494 2439 844 6122 5879 +3495 5402 1616 5440 2778 +3496 3246 2833 4931 418 +3497 2086 3582 515 5305 +3498 5661 2338 5719 1004 +3499 4429 1140 4971 1290 +3500 2517 982 3088 4511 +3501 46 3734 4430 1960 +3502 5125 2836 6159 1734 +3503 6021 2894 4898 1941 +3504 1117 3219 657 4434 +3505 2490 2782 5711 2780 +3506 729 2063 5048 4409 +3507 3022 5938 3344 377 +3508 3215 316 4996 3000 +3509 4734 1562 4920 3920 +3510 972 2837 647 4948 +3511 2063 4571 434 5048 +3512 4674 5835 5725 1792 +3513 1427 3225 249 4433 +3514 28 5481 27 2 +3515 1813 4105 251 4868 +3516 4654 379 3990 4324 +3517 280 1971 6196 3771 +3518 1755 4492 1472 4359 +3519 864 2408 5895 5598 +3520 4073 3007 5093 758 +3521 1029 3125 1306 5121 +3522 4783 936 2792 5792 +3523 1840 4457 1594 4575 +3524 4880 617 5126 3081 +3525 1578 3532 957 5272 +3526 3992 2804 5890 242 +3527 5286 2311 5200 1163 +3528 4143 2211 5958 505 +3529 3065 3323 4257 664 +3530 619 4075 1467 4001 +3531 295 5301 1545 2784 +3532 2811 2840 4796 302 +3533 1456 4118 1550 4276 +3534 3517 1150 6042 2822 +3535 5992 916 6044 3358 +3536 4264 1615 4128 4445 +3537 2889 1461 6084 2890 +3538 3879 1372 5970 2814 +3539 1434 4231 1636 4232 +3540 3354 1407 4586 3353 +3541 3719 1581 5315 2790 +3542 4552 2790 5315 640 +3543 4305 4059 4104 634 +3544 4871 3181 5763 1788 +3545 3908 502 5763 3181 +3546 1959 3462 975 4340 +3547 2190 4116 4069 830 +3548 2099 5051 5148 1650 +3549 4088 1456 4276 3997 +3550 6222 3615 1451 4636 +3551 2891 2560 5305 2793 +3552 1370 3628 617 4246 +3553 2000 291 2587 4653 +3554 964 1737 4314 2775 +3555 1178 4090 455 3708 +3556 5171 2551 4509 1629 +3557 3861 557 4302 5658 +3558 1361 4219 586 3673 +3559 5378 1056 4403 5804 +3560 4453 2960 4732 1668 +3561 1704 4376 1441 5838 +3562 4104 4059 4035 1516 +3563 852 3781 2043 5693 +3564 5552 3837 4522 1694 +3565 5848 3028 6163 1841 +3566 492 2939 5833 2940 +3567 2576 2940 5833 974 +3568 5058 802 6026 2076 +3569 3326 1301 4188 3755 +3570 1541 2865 5749 3596 +3571 348 3979 1612 4432 +3572 777 3699 1562 4734 +3573 602 4492 1755 4380 +3574 5331 1834 4518 3752 +3575 3653 3014 4655 1024 +3576 1061 3338 6084 4426 +3577 1358 5914 2275 4818 +3578 2692 3224 5837 1360 +3579 2633 942 5540 2802 +3580 4389 2821 5838 339 +3581 2944 1161 5927 2826 +3582 2686 747 4407 5307 +3583 5146 1604 5890 2804 +3584 403 5094 2150 5155 +3585 4578 5858 5306 1027 +3586 2143 4418 5943 4726 +3587 1570 4703 335 3561 +3588 3731 1392 4258 3121 +3589 5633 1334 5953 2829 +3590 2639 1260 4468 4467 +3591 3993 1664 3209 461 +3592 3471 5775 5371 2147 +3593 664 4398 2563 5746 +3594 962 2177 1937 4406 +3595 6199 2861 5041 991 +3596 1320 3188 947 4604 +3597 4698 2927 5819 629 +3598 4269 1740 5819 2927 +3599 1817 4355 5446 2313 +3600 1385 4149 560 3371 +3601 3554 3618 5985 1426 +3602 2739 545 5535 2808 +3603 1759 4496 412 4400 +3604 1352 2494 6117 4076 +3605 17 2996 4721 16 +3606 4285 1079 4609 3472 +3607 5177 1523 5173 2789 +3608 4144 4035 4059 1468 +3609 4462 1924 6056 3467 +3610 556 4702 4682 2564 +3611 4333 1331 6154 2820 +3612 2778 5440 209 5775 +3613 453 2581 839 5655 +3614 1640 3707 1158 5797 +3615 2278 934 6159 2836 +3616 4132 5392 4162 1424 +3617 5837 2857 5100 1360 +3618 4389 1373 5703 2821 +3619 1694 4607 744 5552 +3620 102 103 5893 2836 +3621 5776 2818 6129 907 +3622 2869 2882 5379 1336 +3623 6167 2985 4770 699 +3624 4182 1860 5578 2676 +3625 4776 2883 6182 281 +3626 5011 2878 6164 469 +3627 2652 2934 2148 5630 +3628 5294 1424 4162 6115 +3629 3229 4541 4573 349 +3630 4849 3713 4483 531 +3631 2964 708 6203 5197 +3632 4764 677 4299 4839 +3633 2195 6106 1383 3421 +3634 4301 4477 6009 1880 +3635 773 5075 2061 5740 +3636 401 4824 2457 5712 +3637 4539 2856 5995 1541 +3638 2887 222 3327 5583 +3639 1028 4600 1513 3495 +3640 1952 5220 1525 4419 +3641 3483 1073 5995 2856 +3642 220 4517 2235 5433 +3643 945 4074 4325 2001 +3644 13 5321 6012 3613 +3645 3460 792 1649 5518 +3646 3591 1528 4307 4306 +3647 2979 4807 6065 1995 +3648 1062 3587 4345 1842 +3649 2611 4571 1245 3836 +3650 944 3026 978 3345 +3651 2084 613 5839 2861 +3652 4203 2861 5839 1715 +3653 3496 1011 5330 2842 +3654 2388 446 5497 2608 +3655 5614 3303 4070 993 +3656 1073 2865 1541 5995 +3657 5318 2885 5757 62 +3658 4836 406 6163 3028 +3659 4911 2971 4834 253 +3660 1604 3743 660 4676 +3661 3672 1243 3269 4530 +3662 4392 3097 4849 1597 +3663 600 4527 1119 3131 +3664 924 3984 5129 2225 +3665 3762 5190 4441 812 +3666 5314 451 4322 2841 +3667 2300 2864 1829 5226 +3668 3333 1120 4265 3958 +3669 5848 921 5050 3028 +3670 4836 3028 5050 1561 +3671 5091 6226 3965 1504 +3672 1846 5222 834 6059 +3673 2996 17 18 4687 +3674 3109 4548 5396 887 +3675 1948 399 4866 2409 +3676 963 4780 1332 3020 +3677 2283 405 5704 3329 +3678 1657 444 4436 2460 +3679 4167 4099 4239 648 +3680 1711 3690 378 5183 +3681 2913 3558 4818 1125 +3682 4651 228 5508 3004 +3683 1060 5526 899 2752 +3684 4198 2908 6228 1807 +3685 832 5080 2554 5619 +3686 5647 3005 5936 1599 +3687 5648 6230 4900 421 +3688 2837 972 5342 2868 +3689 2429 1135 5142 2897 +3690 231 4166 1516 4035 +3691 2882 2869 5354 1005 +3692 3338 441 2890 6084 +3693 2346 3047 4789 1020 +3694 3853 2859 5965 926 +3695 1968 2171 5684 3690 +3696 1964 4446 284 3479 +3697 1637 4594 1589 4411 +3698 2232 5606 1775 4377 +3699 1687 5151 2623 5691 +3700 4363 3570 5320 996 +3701 2354 889 5340 6022 +3702 4555 2676 6212 1988 +3703 822 2863 5668 1914 +3704 3051 4808 1789 6044 +3705 1558 2948 1163 4520 +3706 3610 2427 5191 1491 +3707 1002 3675 2512 5786 +3708 2127 4496 1759 5407 +3709 6104 342 3935 2168 +3710 5201 6098 4828 2161 +3711 5744 716 4034 5787 +3712 5140 272 5081 3087 +3713 2139 858 5209 2467 +3714 2059 3430 468 5629 +3715 1059 2873 445 5431 +3716 3263 693 6011 5204 +3717 1954 3733 6069 393 +3718 2539 5955 4822 1811 +3719 2866 4344 3930 1490 +3720 2857 876 5418 5100 +3721 3034 266 5179 2259 +3722 2871 2872 5501 1085 +3723 1832 3953 715 5597 +3724 4499 2665 4889 1421 +3725 2830 1501 6216 5662 +3726 2270 1471 5530 243 +3727 274 6198 2120 5964 +3728 463 4070 3303 2038 +3729 4712 896 1804 3221 +3730 2936 1047 2990 4879 +3731 86 3753 4825 85 +3732 3910 4134 3720 872 +3733 4871 2932 5627 952 +3734 4650 814 4904 2651 +3735 1586 4556 992 3811 +3736 3109 1290 4971 4548 +3737 419 4670 2830 5662 +3738 2170 950 5314 2841 +3739 4556 3207 4611 992 +3740 4101 1111 5423 3120 +3741 4928 1867 4277 5950 +3742 4995 635 6201 2919 +3743 866 5643 1759 4400 +3744 826 2197 4713 3555 +3745 5466 694 3413 1300 +3746 1077 5339 2026 4801 +3747 4280 3336 6213 1018 +3748 4292 3353 4586 339 +3749 2198 4580 1027 5306 +3750 3774 3093 4786 1416 +3751 2994 1098 4605 3295 +3752 1015 3518 1821 5994 +3753 2316 4331 5474 1729 +3754 1576 4013 653 4254 +3755 2329 5949 989 2371 +3756 3972 1055 4886 2282 +3757 5631 1737 4824 4091 +3758 3048 1037 5602 3903 +3759 6182 2883 5613 1796 +3760 2409 4866 1371 4028 +3761 1168 1744 5351 3039 +3762 1751 3250 2056 5410 +3763 4349 1515 4202 1498 +3764 4550 2916 5822 1713 +3765 2209 986 5822 2916 +3766 5516 3169 5509 566 +3767 1670 5889 3294 2487 +3768 287 6161 2055 5454 +3769 2373 517 3871 3569 +3770 4354 2853 1539 3754 +3771 1338 3301 1595 4857 +3772 525 2667 5866 3397 +3773 4423 3194 5611 1439 +3774 1583 5376 424 2902 +3775 5436 2896 5487 1866 +3776 1516 4133 1517 4104 +3777 1436 2447 4841 4385 +3778 2264 1006 5399 2902 +3779 3889 1253 6211 1435 +3780 2879 3308 4781 990 +3781 1587 5913 1158 2542 +3782 4797 3372 5674 759 +3783 5330 1011 4481 6180 +3784 2632 4697 47 48 +3785 100 101 5125 3135 +3786 3846 4103 3024 337 +3787 5091 797 4358 2568 +3788 2181 4482 365 5608 +3789 2352 5703 1373 5520 +3790 2547 3251 5247 462 +3791 5195 543 4686 3527 +3792 2098 2974 5506 1040 +3793 4202 1515 4282 351 +3794 1590 4293 1517 3863 +3795 5214 2387 5284 1967 +3796 1978 6168 2598 4812 +3797 597 2903 1651 5646 +3798 5104 3970 5385 1429 +3799 437 3294 5016 2463 +3800 35 2936 6206 34 +3801 1682 3817 829 5944 +3802 5671 1520 5252 2975 +3803 2887 1357 5397 2641 +3804 2635 1214 4386 3737 +3805 2597 1138 4885 3060 +3806 2057 5007 1572 4745 +3807 5523 324 4561 5790 +3808 1314 3670 5365 2415 +3809 516 6149 1133 2934 +3810 2192 600 5129 3984 +3811 2281 6137 1371 4866 +3812 2879 4663 415 3308 +3813 3271 4184 4374 1573 +3814 3859 4374 4184 1622 +3815 4978 3393 4600 1028 +3816 5752 944 5277 2969 +3817 4719 1309 6187 3676 +3818 1972 4051 1085 5501 +3819 2412 2909 4145 320 +3820 859 2347 6194 3411 +3821 3246 5327 3738 1379 +3822 3000 4996 6120 1167 +3823 2618 2445 5320 898 +3824 596 3784 1829 4368 +3825 2613 1303 3048 4913 +3826 1397 4838 572 3593 +3827 3741 5283 4949 217 +3828 2839 3799 6179 326 +3829 2290 5894 2905 818 +3830 963 5574 611 4780 +3831 3860 1594 4457 3179 +3832 5355 1134 4958 3607 +3833 3654 1458 5053 3061 +3834 1047 2936 35 5246 +3835 2578 3553 5881 914 +3836 3087 986 4880 3081 +3837 4179 1550 5554 3980 +3838 5730 5893 103 104 +3839 2559 15 16 4721 +3840 734 3966 1831 5297 +3841 4729 3726 2989 305 +3842 1588 5234 1016 3007 +3843 2509 3732 4404 1258 +3844 1480 3268 688 4754 +3845 1886 4819 845 4536 +3846 697 4799 2468 5918 +3847 4014 2919 6201 1710 +3848 3957 2955 5206 1162 +3849 1415 3745 203 4440 +3850 1065 5565 1928 3987 +3851 927 4524 1922 5782 +3852 4393 4542 4241 1619 +3853 5024 950 5628 2943 +3854 4870 2416 6086 1682 +3855 4099 1609 4282 4239 +3856 1536 5290 782 3689 +3857 3955 5358 424 2929 +3858 4269 2927 5980 955 +3859 331 3076 5263 2481 +3860 4370 5841 4318 831 +3861 884 5639 3701 2548 +3862 1723 5409 396 2967 +3863 527 3696 3113 5382 +3864 1315 5343 5898 4507 +3865 2459 2964 5197 1219 +3866 3893 1568 5534 1473 +3867 1516 4167 648 4133 +3868 2262 87 88 4539 +3869 3290 728 5089 3385 +3870 2445 2963 996 5320 +3871 4340 975 5148 2976 +3872 5994 1821 5120 5046 +3873 1096 4275 1460 3951 +3874 2656 4813 3705 1446 +3875 437 5151 1687 5570 +3876 1870 5886 839 2581 +3877 4093 1455 5678 591 +3878 633 3120 1814 6090 +3879 4804 2958 6203 708 +3880 3722 2398 4925 5257 +3881 1548 4167 1516 4166 +3882 5854 2023 5108 3265 +3883 3847 3549 5891 3797 +3884 4213 3650 4668 641 +3885 4243 1537 4668 3650 +3886 2214 5338 3678 1157 +3887 2076 3626 5959 803 +3888 1580 4401 2217 5899 +3889 5016 3294 5889 933 +3890 2787 4154 5279 1344 +3891 1956 229 6233 1366 +3892 5841 4370 6075 2036 +3893 6092 3337 4995 961 +3894 2467 6030 2675 2139 +3895 4282 1515 4369 4239 +3896 3610 5169 2149 749 +3897 4109 1519 5243 4489 +3898 705 5114 1097 3098 +3899 3870 938 4905 3342 +3900 913 6000 1594 3860 +3901 5261 1938 4659 1015 +3902 5984 1529 824 2619 +3903 1739 5718 347 4210 +3904 4429 6148 3750 1140 +3905 2202 4031 1426 5985 +3906 3470 3678 6140 1542 +3907 602 4411 1589 4084 +3908 4625 1443 5149 3563 +3909 2438 2932 6051 701 +3910 293 4688 1391 3392 +3911 3776 2937 5873 767 +3912 1497 5855 2139 4602 +3913 2261 505 5958 3768 +3914 3628 3571 4882 3918 +3915 3070 2975 5252 360 +3916 965 2505 4985 4810 +3917 1087 2296 5833 2939 +3918 3079 3445 4798 1423 +3919 2122 4686 543 3652 +3920 1892 4205 5812 4115 +3921 3938 4155 5108 1353 +3922 1066 4570 6073 3428 +3923 1884 1607 4056 5856 +3924 1050 2958 1567 5373 +3925 3881 1311 5129 3010 +3926 634 4927 1098 3606 +3927 4202 4254 4041 1498 +3928 2248 5931 4537 976 +3929 508 4537 5931 2308 +3930 707 3891 1482 4842 +3931 4112 2310 5647 1599 +3932 2325 4622 1690 6108 +3933 2946 2381 5454 1328 +3934 1401 3147 1950 4964 +3935 673 3067 1119 5018 +3936 1029 3263 1561 5006 +3937 6028 3615 5654 1671 +3938 839 5876 2735 5655 +3939 4033 2956 5465 983 +3940 5844 703 4727 3931 +3941 2224 3906 326 6179 +3942 3251 1433 4221 5494 +3943 5247 3251 5494 1035 +3944 1189 5543 691 3009 +3945 5797 1158 5913 2251 +3946 1621 4387 1569 4364 +3947 1408 4779 2237 3583 +3948 5544 1496 4508 3840 +3949 1811 4822 1391 3954 +3950 2485 2486 4175 493 +3951 2415 3545 4590 1314 +3952 488 3532 1578 5028 +3953 4967 1626 5496 2959 +3954 255 5209 2025 6049 +3955 1853 4577 407 3890 +3956 1645 4700 1720 4510 +3957 1267 4336 690 3865 +3958 1616 5402 655 2990 +3959 521 2698 5556 3386 +3960 2537 4810 4985 649 +3961 3722 5257 6166 1535 +3962 4001 4483 3713 1427 +3963 1576 4342 1627 4294 +3964 2252 737 4968 3119 +3965 1566 4360 1619 4241 +3966 3891 2315 449 4751 +3967 76 5708 75 4 +3968 5977 3418 5534 750 +3969 822 1914 6200 2984 +3970 4416 1735 5462 3208 +3971 2618 1524 5369 4941 +3972 695 4401 1580 2247 +3973 956 5202 3338 2276 +3974 1105 5638 1763 4634 +3975 2550 3709 669 4725 +3976 671 4150 1875 4456 +3977 5676 1697 4565 4273 +3978 3141 5840 1758 5900 +3979 5690 3483 5449 1774 +3980 715 4418 2143 5597 +3981 4063 1036 4844 2848 +3982 2252 3119 5420 1078 +3983 709 4564 417 3726 +3984 46 47 4697 3734 +3985 4892 3501 5220 391 +3986 4421 1775 5545 5739 +3987 267 2389 5298 3460 +3988 1023 2241 5354 3499 +3989 1013 4630 1878 3546 +3990 2557 298 1672 4740 +3991 4676 2988 5890 1604 +3992 5992 2993 6181 916 +3993 3968 281 6182 2993 +3994 4834 2971 5617 1058 +3995 5569 3680 4918 371 +3996 4295 1586 4986 3277 +3997 5945 817 4894 3710 +3998 4850 3118 5483 1519 +3999 104 1 9 5730 +4000 5963 2091 4742 912 +4001 5784 932 3771 6196 +4002 4713 1703 5231 3555 +4003 6033 4189 4326 232 +4004 1514 3792 683 4525 +4005 2842 1410 4690 3496 +4006 3389 1452 4251 4252 +4007 2518 2977 5604 1031 +4008 3557 5733 724 1492 +4009 2471 781 2319 3896 +4010 5903 2647 707 3213 +4011 708 6059 1810 4804 +4012 2316 1937 363 4906 +4013 3116 475 3981 4914 +4014 4525 1709 4914 3981 +4015 5021 2550 4725 1375 +4016 4240 3051 6181 1796 +4017 2622 1130 5076 3110 +4018 4057 1680 4738 4281 +4019 3084 1989 5615 4679 +4020 446 2254 4908 4438 +4021 751 4163 2010 5681 +4022 2708 2986 6014 1051 +4023 2869 1336 5736 4327 +4024 401 5712 1725 3183 +4025 2249 3547 4667 920 +4026 4497 2641 5873 4797 +4027 2798 2683 5719 1951 +4028 3779 4291 4700 1645 +4029 3839 4152 5186 1485 +4030 2752 1178 4853 4501 +4031 4651 3004 6156 2048 +4032 5956 2831 5165 1392 +4033 4238 3604 5525 1754 +4034 3260 218 4468 3844 +4035 1373 4389 2033 5480 +4036 4103 3846 5333 1445 +4037 1289 5232 1961 263 +4038 2561 3829 859 3412 +4039 3264 3247 4921 546 +4040 5505 5123 6046 2402 +4041 826 3199 2006 5014 +4042 4405 4506 4294 1627 +4043 5756 3226 5414 1497 +4044 4468 1260 4779 3844 +4045 4367 242 5890 2988 +4046 2525 6220 809 4475 +4047 1391 4822 811 3392 +4048 4044 3075 6093 1766 +4049 5772 1913 4709 5451 +4050 351 4282 1609 4328 +4051 1558 4520 743 6144 +4052 2750 1734 6159 4529 +4053 418 4931 3320 2125 +4054 1582 4365 1615 4264 +4055 3128 1449 3004 5508 +4056 2049 4673 842 5868 +4057 1986 4869 1526 4830 +4058 1457 3789 628 4242 +4059 1550 4179 713 4276 +4060 2457 5072 1725 5712 +4061 392 5845 1970 3985 +4062 4335 3368 5181 1614 +4063 5388 384 5181 3368 +4064 3019 1955 4094 5734 +4065 5022 3655 5981 2274 +4066 2218 4929 5722 2384 +4067 5748 922 4696 3073 +4068 4504 896 4712 3843 +4069 1003 5914 1358 3003 +4070 5396 4548 4971 2173 +4071 4331 2316 5364 906 +4072 596 6111 1963 3784 +4073 1785 3431 5659 216 +4074 5522 5008 4696 2968 +4075 4646 865 5461 2419 +4076 5161 1663 4663 1666 +4077 4650 1659 3680 5569 +4078 4848 3763 5412 1046 +4079 2406 5612 3016 801 +4080 2586 4895 3875 1123 +4081 3653 1308 5872 3014 +4082 5538 1823 4098 4948 +4083 3615 2297 5524 1451 +4084 3025 5996 3337 431 +4085 6227 425 6225 3058 +4086 5725 3058 6225 1792 +4087 517 2373 4280 1018 +4088 2513 3032 5646 1651 +4089 268 4014 1710 5116 +4090 2169 1034 6112 3284 +4091 1771 3756 2166 6123 +4092 2185 3022 1894 5759 +4093 4559 474 4999 2651 +4094 2513 999 5642 3032 +4095 1655 4352 1656 4353 +4096 4420 597 5646 3032 +4097 1582 4759 1694 4522 +4098 4254 4202 4342 1576 +4099 4092 2080 5196 1764 +4100 4378 711 5136 4876 +4101 493 4175 2215 5030 +4102 5865 1574 5131 3271 +4103 4184 3271 5131 754 +4104 2657 400 3758 1767 +4105 1843 3862 6132 4771 +4106 2762 4790 95 96 +4107 3741 217 4507 5259 +4108 5000 423 5852 3037 +4109 2552 340 6117 3685 +4110 25 5002 3278 24 +4111 12 5150 6186 11 +4112 4557 344 5807 3040 +4113 1025 3747 5814 2604 +4114 1990 6204 850 4840 +4115 6181 3051 6044 916 +4116 5599 2570 4172 1382 +4117 2907 4675 4885 1138 +4118 853 4837 2566 6169 +4119 2107 5525 651 5296 +4120 1838 5876 839 5886 +4121 6093 3075 5498 638 +4122 2736 1099 5923 3050 +4123 4821 1008 3418 5977 +4124 2458 3049 5840 615 +4125 5847 304 5475 3084 +4126 3571 618 5808 4882 +4127 867 2081 5741 3273 +4128 30 3273 5741 29 +4129 1873 3699 777 4657 +4130 4410 659 4442 4245 +4131 988 5013 2184 6054 +4132 2573 5654 769 4998 +4133 5458 4085 5249 404 +4134 1508 4390 846 4391 +4135 4624 4567 4288 1667 +4136 2155 881 5974 3063 +4137 5535 3061 5905 1830 +4138 3748 3915 4857 290 +4139 4734 4888 6005 777 +4140 5040 5523 5790 1701 +4141 1569 4424 650 4364 +4142 717 3967 1743 5134 +4143 6094 5107 4702 1975 +4144 1209 3459 1007 4873 +4145 3323 3065 5887 1551 +4146 5738 4117 2980 1558 +4147 414 3079 1423 3682 +4148 5996 1794 4995 3337 +4149 1661 4736 615 3638 +4150 3782 1764 5196 817 +4151 1481 3744 344 4638 +4152 2779 3509 4925 741 +4153 2021 5142 1135 4178 +4154 3377 3526 4307 1528 +4155 3129 320 4146 3099 +4156 604 2816 3934 5991 +4157 4334 4444 4360 1566 +4158 1666 5477 2334 5045 +4159 4238 1754 5416 3523 +4160 5861 3405 5422 1471 +4161 4968 1509 5420 3119 +4162 3160 5780 37 38 +4163 4351 1581 5816 3170 +4164 2786 5800 3122 5804 +4165 2684 2514 5271 852 +4166 4784 6234 3435 674 +4167 2369 662 3765 4634 +4168 4098 1489 5755 3520 +4169 2513 3135 5912 999 +4170 5125 1734 5912 3135 +4171 2836 5893 5730 2278 +4172 3863 4369 4244 1590 +4173 4349 4244 4369 1515 +4174 1498 4235 649 4349 +4175 1510 3434 698 4930 +4176 3838 4714 4765 739 +4177 1806 4271 611 5026 +4178 1857 4549 715 3953 +4179 5998 3647 5081 272 +4180 3049 947 5850 5479 +4181 1200 2764 5479 5850 +4182 2760 492 4534 2930 +4183 3585 665 5483 3118 +4184 2446 4387 4128 350 +4185 806 5640 1752 3632 +4186 2729 4825 3753 1536 +4187 1781 3932 784 4502 +4188 1353 3937 668 3938 +4189 1856 1482 3891 4751 +4190 5499 769 6222 3024 +4191 5048 1520 5671 4409 +4192 750 5721 2629 5977 +4193 1064 3058 5725 3973 +4194 4508 1495 4851 3840 +4195 471 3969 2346 4665 +4196 4757 4399 4118 712 +4197 4854 2694 4970 526 +4198 5199 1708 5724 3222 +4199 3847 3222 5724 520 +4200 4521 673 4362 4454 +4201 3940 4155 3938 1705 +4202 4430 3734 4697 1470 +4203 2792 1274 5960 3856 +4204 2942 3868 5335 1488 +4205 1679 5133 2272 5453 +4206 228 4651 1781 4595 +4207 3628 3918 6019 617 +4208 2738 5659 3431 1728 +4209 6148 1902 6238 3750 +4210 2610 270 4742 2091 +4211 2333 268 5116 4772 +4212 1091 6124 2089 4233 +4213 2576 3114 840 2117 +4214 2339 1757 5442 4297 +4215 4418 2488 5607 1730 +4216 3280 1018 6213 3187 +4217 3628 1370 618 3571 +4218 920 4667 1504 3965 +4219 2055 3824 5022 687 +4220 1917 4361 1499 5300 +4221 3477 5636 4508 1496 +4222 2444 5019 1706 5539 +4223 3890 407 3770 4060 +4224 1832 5597 2143 4089 +4225 4040 4005 5166 1646 +4226 818 2905 1862 5489 +4227 1496 5544 2056 5432 +4228 1759 5643 4640 2114 +4229 4163 751 5473 3162 +4230 5563 3232 5768 1812 +4231 1425 4994 207 3552 +4232 2541 907 4316 5085 +4233 2525 4279 5777 388 +4234 3460 5518 5068 2636 +4235 2374 5834 3495 1513 +4236 1989 1207 5787 4034 +4237 2532 4903 69 70 +4238 5745 750 5534 1568 +4239 4990 3130 6106 476 +4240 2395 1483 4452 4086 +4241 2796 1265 5687 2670 +4242 306 3201 1205 2938 +4243 941 4763 1698 3715 +4244 446 4438 2265 5497 +4245 4298 4578 4996 316 +4246 3638 3141 5627 1522 +4247 1356 4325 5847 6134 +4248 766 2206 4834 3660 +4249 2360 5511 396 5409 +4250 3913 1440 5509 3169 +4251 602 4380 1637 4411 +4252 870 1681 5860 256 +4253 3023 3908 4570 1066 +4254 452 3139 1062 6130 +4255 933 2710 6095 3503 +4256 689 1895 3336 4280 +4257 2719 3887 4896 682 +4258 4423 3358 6076 408 +4259 6044 1789 6076 3358 +4260 4225 1724 3843 4712 +4261 4013 1576 4294 4424 +4262 556 5657 2043 3781 +4263 4401 695 3455 2693 +4264 4227 1514 4525 3981 +4265 4450 1627 4342 4437 +4266 425 6227 2269 4425 +4267 4080 711 5533 5954 +4268 5780 3160 5686 1678 +4269 3986 928 5686 3160 +4270 625 3289 1474 5256 +4271 5120 2100 3806 5046 +4272 5089 3081 5126 3385 +4273 4288 4588 4542 4393 +4274 1042 3963 6107 3486 +4275 1046 2791 1893 4848 +4276 5627 3141 5900 952 +4277 2527 81 82 4940 +4278 3312 1263 5075 2972 +4279 934 2278 5933 3307 +4280 4211 3144 1931 5983 +4281 2111 5006 1561 5050 +4282 508 5450 2708 5836 +4283 6100 3880 1443 4625 +4284 4387 1621 4445 4128 +4285 5881 204 5172 914 +4286 283 3722 1535 4177 +4287 500 4847 1668 4181 +4288 2644 5182 1059 5431 +4289 4442 1566 4241 4487 +4290 2164 5482 1613 4662 +4291 5461 865 5361 3962 +4292 2262 5290 1536 3753 +4293 4455 319 4048 4815 +4294 6136 2034 3730 911 +4295 5909 3801 5094 403 +4296 984 5004 2155 5170 +4297 1279 4080 5954 2121 +4298 5259 1601 4191 3741 +4299 4445 659 4410 4264 +4300 416 5705 2471 5079 +4301 4454 4362 4397 1610 +4302 4023 3705 4813 364 +4303 4298 1222 3595 4723 +4304 2650 4967 72 73 +4305 903 5793 2851 5083 +4306 4095 2059 5100 5418 +4307 3467 6056 3163 984 +4308 2654 4412 1727 997 +4309 680 4421 1718 4644 +4310 4277 1867 5230 3250 +4311 987 4564 709 2747 +4312 1284 5122 738 3426 +4313 2005 5760 2323 1100 +4314 6213 1799 5968 3187 +4315 2152 704 4976 4284 +4316 1668 4732 1175 4181 +4317 5364 3170 5816 906 +4318 3678 3470 5064 1157 +4319 1643 4909 2847 5322 +4320 4958 1642 5820 3607 +4321 1556 4194 2245 5087 +4322 4522 3837 4718 656 +4323 2166 3538 5047 892 +4324 2193 931 6004 3766 +4325 3162 1083 6198 1399 +4326 1201 4458 5650 1797 +4327 3990 3918 4882 4324 +4328 4487 4584 4245 4442 +4329 1832 4089 473 5592 +4330 6067 1822 5843 3277 +4331 4295 3277 5843 729 +4332 2912 340 6029 3186 +4333 4245 1634 4395 4410 +4334 4264 4410 4395 1582 +4335 3134 1093 4486 3005 +4336 1719 4021 286 4581 +4337 1598 5517 2427 4715 +4338 5701 1525 5220 3501 +4339 2672 3812 4887 1459 +4340 2786 820 4341 5800 +4341 2259 977 5555 3034 +4342 5441 3472 4609 346 +4343 1259 2496 5815 3825 +4344 2701 78 79 5029 +4345 3963 1232 2604 5814 +4346 4712 374 4226 4225 +4347 3561 3562 5032 1570 +4348 1935 5254 1717 5653 +4349 659 4445 1621 4334 +4350 4029 264 5943 3902 +4351 4973 6199 991 3211 +4352 3323 1551 5426 3324 +4353 2197 2915 5862 913 +4354 2106 5363 2164 756 +4355 5198 216 5659 2738 +4356 4424 1569 4610 4013 +4357 3462 653 4013 4610 +4358 211 2204 5093 3505 +4359 5447 61 62 5757 +4360 435 3987 1928 5874 +4361 1304 3471 796 5135 +4362 4167 1548 4521 4099 +4363 4057 3998 4583 1680 +4364 4720 3983 4598 1139 +4365 1193 3603 5342 2182 +4366 687 5022 2274 5897 +4367 681 4708 1596 3998 +4368 2438 5510 4230 1522 +4369 5862 427 5524 2297 +4370 3403 3216 5870 1229 +4371 3907 1563 4775 3876 +4372 6154 3876 4775 627 +4373 4322 451 5430 3575 +4374 982 3929 2449 5312 +4375 1375 5460 2281 5021 +4376 5525 3604 6155 651 +4377 5805 5446 4355 2387 +4378 5434 1741 5034 4843 +4379 1652 3841 734 4977 +4380 4256 1656 4352 4588 +4381 658 4405 1627 4450 +4382 813 3861 5658 2498 +4383 256 1726 4580 2198 +4384 244 2422 5169 3610 +4385 6096 2931 4384 223 +4386 2528 1890 4843 5034 +4387 2898 1396 4084 4593 +4388 4562 5257 4925 3509 +4389 2075 4439 4692 721 +4390 4609 4123 4299 1417 +4391 2048 4612 696 5417 +4392 5589 3231 6083 1946 +4393 5520 3429 5585 1156 +4394 3257 1199 6047 3234 +4395 5362 1339 5060 3513 +4396 3872 1196 4632 3873 +4397 351 4328 1610 4437 +4398 5610 3503 6095 358 +4399 3489 3039 5351 626 +4400 4288 4393 4405 658 +4401 4506 4405 4393 1619 +4402 775 4171 1174 3288 +4403 2859 616 5677 4957 +4404 6234 1865 5261 3435 +4405 2513 5111 98 99 +4406 1402 4983 1889 5844 +4407 2524 5579 742 4863 +4408 2923 815 3640 5302 +4409 2302 6126 946 5688 +4410 2836 5125 101 102 +4411 2009 1040 5506 3592 +4412 230 4853 1178 3772 +4413 1021 2286 3865 5070 +4414 201 5119 1962 4139 +4415 5122 3760 6200 1914 +4416 2060 3504 55 5715 +4417 1904 4402 388 5777 +4418 1196 6074 2681 5773 +4419 2257 6147 4004 639 +4420 3268 1480 3808 4840 +4421 3194 880 4891 5611 +4422 4846 2931 5904 736 +4423 4334 1621 4364 4444 +4424 5112 5059 899 1801 +4425 3225 1281 6153 4737 +4426 5078 368 4072 5394 +4427 1202 2617 5747 5037 +4428 4202 351 4437 4342 +4429 4101 1608 5425 3394 +4430 3211 369 3661 4973 +4431 2119 3989 1136 3786 +4432 343 6047 2428 4165 +4433 659 4334 1566 4442 +4434 2551 3763 4848 1172 +4435 4289 3284 6112 1509 +4436 2788 2154 5766 5374 +4437 4926 4593 4084 1589 +4438 1823 4638 344 4557 +4439 1866 5487 685 4752 +4440 4684 2433 5716 5854 +4441 4281 366 5184 4187 +4442 5017 722 5074 3950 +4443 1667 4288 658 4526 +4444 1536 3689 5593 2450 +4445 1820 5916 660 3743 +4446 5289 1706 5971 3947 +4447 3725 784 3563 5149 +4448 2912 4076 6117 340 +4449 364 4813 1814 4576 +4450 2642 1411 3329 5704 +4451 1610 4328 1609 4454 +4452 2238 5871 631 4766 +4453 1764 3782 3285 2234 +4454 5328 3314 5796 359 +4455 2159 5987 5687 2012 +4456 468 3430 1949 4122 +4457 2048 5417 1781 4651 +4458 3387 4452 4935 672 +4459 54 5266 3494 53 +4460 4708 4730 4132 1596 +4461 3770 1552 3324 3325 +4462 5320 3570 5163 898 +4463 1585 4533 757 5025 +4464 2032 5944 4002 2564 +4465 1442 2784 5785 4852 +4466 4364 650 4360 4444 +4467 934 3307 6186 1953 +4468 2988 4676 660 4137 +4469 1112 3716 1648 5443 +4470 3158 3310 6145 314 +4471 4636 6057 3846 337 +4472 877 6062 2066 5221 +4473 1662 4505 1538 4323 +4474 2646 3671 5020 533 +4475 1173 3386 5556 2309 +4476 1116 4881 2142 5383 +4477 3902 1730 5607 3800 +4478 760 4994 1425 3688 +4479 3547 345 3331 5877 +4480 2848 2847 4909 1127 +4481 859 3829 5528 3830 +4482 5362 541 4941 3804 +4483 5247 1941 4898 5548 +4484 1449 4831 6156 3004 +4485 2022 4312 1306 3867 +4486 1323 5821 698 3590 +4487 1586 3811 225 4986 +4488 1655 4460 684 4459 +4489 3983 1813 4868 4598 +4490 4424 4294 4506 650 +4491 4857 3915 4347 1338 +4492 4001 3914 4826 619 +4493 1725 5072 710 5767 +4494 4029 3902 3800 1453 +4495 2481 5263 833 6110 +4496 3162 1399 4694 4163 +4497 262 4705 1745 4055 +4498 5769 1687 5691 3404 +4499 5082 3404 5691 718 +4500 4437 1610 4397 4450 +4501 689 1316 4283 1895 +4502 382 2291 5981 3655 +4503 5653 4770 4192 1935 +4504 2525 4475 1453 4279 +4505 1708 3374 520 5724 +4506 2397 5723 5299 1500 +4507 5950 886 4322 4928 +4508 662 2369 4905 4463 +4509 732 4150 2255 5529 +4510 772 3346 5874 1928 +4511 4120 3344 5938 1378 +4512 689 2215 4175 1316 +4513 905 2318 4958 4124 +4514 2489 3823 2203 5009 +4515 2834 3882 4831 1449 +4516 6037 4039 5463 2953 +4517 4120 5975 1887 3344 +4518 2293 3568 5229 259 +4519 5961 2146 4613 642 +4520 5480 3429 5520 1373 +4521 4711 255 6049 3961 +4522 13 3613 5150 12 +4523 1325 3801 5909 1700 +4524 4487 4241 4542 4493 +4525 1724 891 4714 3838 +4526 5980 1908 5182 5750 +4527 3681 5309 30 31 +4528 5654 3615 6222 769 +4529 5395 1556 5087 4652 +4530 4701 4356 4608 1518 +4531 5326 4598 4868 1698 +4532 765 3365 1224 5941 +4533 1772 5459 289 3786 +4534 3231 5589 445 4110 +4535 255 4711 1699 3835 +4536 1439 3551 603 5276 +4537 5331 3752 4982 257 +4538 1842 3897 6130 1062 +4539 298 2557 2126 4974 +4540 1888 4464 1444 4413 +4541 4195 900 5932 4115 +4542 1077 6174 3166 5339 +4543 4450 4397 4526 658 +4544 1056 5491 2282 4403 +4545 1349 2293 5792 4068 +4546 4433 1560 4826 3914 +4547 6067 3534 6197 1822 +4548 1781 5417 696 5811 +4549 920 4689 4078 2249 +4550 797 5091 1504 3866 +4551 4191 1280 5283 3741 +4552 5240 4956 3903 5602 +4553 3083 1252 5651 4020 +4554 3795 4020 5651 1841 +4555 5787 1207 4812 4106 +4556 2957 3850 5020 1505 +4557 4487 4493 4459 4584 +4558 5482 2164 5363 755 +4559 5190 1945 4947 4441 +4560 468 3701 5273 2692 +4561 1900 5127 342 6104 +4562 3290 3385 6019 1465 +4563 4036 4627 4379 5519 +4564 800 2153 5796 4204 +4565 574 4224 1547 4582 +4566 2989 2511 5926 1557 +4567 6077 3397 5866 2380 +4568 650 4506 1619 4360 +4569 4159 745 4354 1849 +4570 1746 4910 1942 4631 +4571 2584 292 6236 3393 +4572 4600 3393 6236 1778 +4573 2575 3788 1078 5420 +4574 2792 3856 5275 606 +4575 3044 1501 2830 5694 +4576 1574 5130 2226 5131 +4577 3163 5419 64 65 +4578 1156 4253 2352 5520 +4579 5172 1450 5695 914 +4580 4332 1712 5579 2524 +4581 5607 559 5761 3800 +4582 4462 3467 6063 4111 +4583 1582 4522 656 4365 +4584 3394 5425 3818 410 +4585 1434 4232 663 4720 +4586 3830 6079 2347 859 +4587 782 5290 1541 3596 +4588 4256 4588 4288 4567 +4589 678 2956 4033 6229 +4590 3483 90 91 5449 +4591 751 2113 4038 5473 +4592 5670 4069 4116 1635 +4593 4672 4135 5687 1265 +4594 609 5326 1698 4763 +4595 2197 826 5014 2915 +4596 1084 4237 4963 2386 +4597 4170 1683 5097 3735 +4598 2616 6005 4888 3123 +4599 2644 4794 4015 260 +4600 4378 1679 5453 3851 +4601 4603 5470 5811 696 +4602 902 6031 2572 4290 +4603 3187 5968 685 4471 +4604 3820 4896 3887 1507 +4605 3169 5516 1405 4196 +4606 2533 1615 4365 4664 +4607 812 1707 6138 3762 +4608 2252 3446 6100 356 +4609 4391 846 5673 4046 +4610 2681 4488 4890 1026 +4611 4362 1620 4526 4397 +4612 4462 1553 5318 4027 +4613 1772 4846 736 5187 +4614 4105 1813 3983 5644 +4615 4720 663 5644 3983 +4616 924 5052 1457 4242 +4617 4215 3428 6073 566 +4618 1885 3973 706 5656 +4619 5261 1015 5994 3435 +4620 4352 1655 4459 4493 +4621 1289 263 5768 3232 +4622 4535 4026 4804 1810 +4623 5012 2008 4878 4065 +4624 3221 1804 3916 3220 +4625 4784 674 5046 3806 +4626 4646 1275 3640 4304 +4627 1844 4952 1718 4717 +4628 5713 3910 5460 1375 +4629 5820 439 5355 3607 +4630 5860 1721 4805 3594 +4631 2252 1078 5934 3446 +4632 2227 686 4388 4617 +4633 3857 1481 5538 3535 +4634 4546 436 6189 3490 +4635 4773 3490 6189 1779 +4636 3514 1671 5654 2573 +4637 1017 1962 4620 5313 +4638 3126 338 5300 1500 +4639 2688 5805 511 5665 +4640 1258 4404 5668 2863 +4641 257 5514 1227 3554 +4642 1272 5972 678 3450 +4643 2784 1545 3959 5785 +4644 4889 5371 5775 209 +4645 389 2574 5494 4221 +4646 749 2149 5745 3476 +4647 2332 1200 4954 4006 +4648 270 3692 1801 4079 +4649 3880 6100 3446 1693 +4650 2910 1038 4145 2909 +4651 2602 3304 4267 810 +4652 6022 5340 5196 2080 +4653 1164 5754 665 3585 +4654 2281 5460 3910 872 +4655 2252 6036 4000 737 +4656 5848 2435 5208 921 +4657 2536 1477 2393 4997 +4658 3055 1685 5697 3697 +4659 2643 3820 1507 5066 +4660 5107 939 4682 4702 +4661 1591 3684 5334 2614 +4662 2211 1036 4063 4865 +4663 4349 649 4985 4244 +4664 5468 5195 5568 4519 +4665 948 5382 2471 5705 +4666 1278 2491 6145 3802 +4667 1700 6032 666 4007 +4668 946 5377 1652 4048 +4669 626 5594 1644 3489 +4670 272 5140 5089 2089 +4671 3087 3081 5089 5140 +4672 4542 4588 4352 4493 +4673 1166 5377 2260 5000 +4674 4680 3495 5834 429 +4675 4276 713 5747 3997 +4676 5095 3970 5104 1747 +4677 2829 2039 4873 5852 +4678 841 3736 5399 2051 +4679 3872 2294 6074 1196 +4680 2880 4215 566 5509 +4681 1649 792 6197 3534 +4682 4578 1027 5513 2404 +4683 2302 5688 1997 3527 +4684 5174 2450 6076 5223 +4685 900 2175 5128 5932 +4686 5034 285 5956 2528 +4687 4802 2419 5461 1707 +4688 1401 5429 1893 4037 +4689 3998 4057 5892 681 +4690 5359 1543 3592 5506 +4691 4285 3472 5441 861 +4692 1503 5424 820 4009 +4693 2182 3520 5755 515 +4694 1844 4656 383 4952 +4695 3562 3561 5602 1037 +4696 5164 497 5830 357 +4697 3150 5273 3701 1879 +4698 4461 4406 444 1657 +4699 1369 3579 458 5542 +4700 2697 386 4108 5666 +4701 986 3087 5081 5822 +4702 4755 345 6184 3481 +4703 339 4586 2033 4389 +4704 1365 5101 2210 3864 +4705 4535 1602 4545 5503 +4706 40 5709 3986 39 +4707 3332 4585 6045 506 +4708 1797 4581 286 4466 +4709 2255 4748 2083 3949 +4710 906 5816 1581 3719 +4711 6014 5334 3684 2004 +4712 4912 5332 4451 637 +4713 1660 4540 1675 4547 +4714 1935 5930 789 5254 +4715 4576 5423 3648 1476 +4716 2885 2277 5447 5757 +4717 4639 3522 5867 308 +4718 1097 3985 1970 3098 +4719 2768 3541 5763 502 +4720 2054 6101 473 5264 +4721 4590 2066 6146 4346 +4722 5851 1588 5353 3702 +4723 5468 4519 6128 3568 +4724 2253 5141 373 4867 +4725 1751 5410 484 5036 +4726 964 2272 5133 4130 +4727 1994 5392 398 5113 +4728 1762 3904 963 5622 +4729 2317 1689 5891 3549 +4730 3537 6121 5278 1889 +4731 1944 5469 894 3464 +4732 1927 4484 861 5441 +4733 5295 4162 5392 1994 +4734 2576 493 5030 3114 +4735 4025 390 5856 4056 +4736 3735 717 4915 4170 +4737 2766 4632 1196 5773 +4738 5430 1678 5686 3575 +4739 379 5557 1465 3990 +4740 212 3592 1543 5605 +4741 2570 787 4817 4172 +4742 3307 5933 9 10 +4743 4599 3899 5815 2741 +4744 2421 4577 1333 3502 +4745 2284 5430 451 3677 +4746 4625 3563 1825 5849 +4747 1945 5190 1772 5187 +4748 4238 3523 6231 395 +4749 4903 6082 68 69 +4750 5039 5360 4256 4567 +4751 5012 4065 5878 1560 +4752 2138 5576 2500 4338 +4753 4851 484 5544 3840 +4754 2321 1223 5285 3790 +4755 3508 4664 4365 656 +4756 3912 6143 19 20 +4757 2654 393 6069 1630 +4758 4647 1976 4816 5236 +4759 3510 41 42 2160 +4760 6192 453 3867 5707 +4761 1742 5349 768 3739 +4762 3336 1895 4283 4916 +4763 3117 4777 4228 560 +4764 1666 5045 733 5161 +4765 4069 5106 3629 830 +4766 4018 3797 5891 258 +4767 4357 1387 5415 1987 +4768 3483 5690 3604 1073 +4769 5173 2250 4875 951 +4770 2647 2648 3891 707 +4771 2381 5319 2828 1722 +4772 631 5871 2237 4129 +4773 2472 2017 3596 5749 +4774 1635 5621 622 5670 +4775 2674 5136 711 4080 +4776 4251 4681 4376 652 +4777 1169 4053 1732 4435 +4778 4633 4066 6069 1579 +4779 5975 4120 6061 794 +4780 5794 3790 5285 1625 +4781 2397 1500 5300 1499 +4782 5423 1111 5588 3648 +4783 4119 3581 5843 1822 +4784 481 4844 4158 1826 +4785 5150 1070 3996 5581 +4786 443 2579 5581 3996 +4787 2117 840 5637 2118 +4788 4939 5360 5039 2176 +4789 1285 3751 5540 2392 +4790 939 4654 4324 1919 +4791 2234 5132 4092 1764 +4792 1166 3841 1652 5377 +4793 4459 684 5216 4584 +4794 5032 3562 6190 585 +4795 3655 5022 3824 1858 +4796 450 5090 1963 3924 +4797 1045 3835 1699 5168 +4798 4933 1873 5052 3946 +4799 2361 1574 5865 4113 +4800 1211 3723 1720 5341 +4801 759 3766 6004 1923 +4802 2461 5037 5747 713 +4803 1828 4624 1667 5010 +4804 1578 4626 1827 5028 +4805 2776 2777 5569 371 +4806 2132 3855 5301 295 +4807 2141 4218 625 5256 +4808 783 2264 5358 3955 +4809 219 4965 2183 4071 +4810 5695 3768 5958 2123 +4811 6033 1918 6217 3671 +4812 2075 2074 4864 6142 +4813 670 2052 6209 3627 +4814 6168 776 5736 4083 +4815 1676 4863 742 6013 +4816 5275 3856 5960 1686 +4817 5228 3602 6225 425 +4818 5135 1792 6225 3602 +4819 476 2490 5443 4990 +4820 5438 863 4740 2664 +4821 3581 4119 5298 1245 +4822 6120 2404 5513 3021 +4823 5026 611 5574 3897 +4824 4520 3360 6212 743 +4825 2461 1798 4755 5037 +4826 3770 1242 5101 4060 +4827 5566 1540 4603 6041 +4828 4817 787 5726 2727 +4829 4835 352 4395 1634 +4830 2819 3809 5531 929 +4831 3194 5593 3689 2096 +4832 5562 4346 6146 495 +4833 1127 2678 6121 3537 +4834 5758 5551 3716 331 +4835 5415 1387 6178 3631 +4836 1819 702 5926 2511 +4837 6166 1996 5346 4621 +4838 6043 3633 5692 1132 +4839 1843 4771 828 5224 +4840 1597 4849 531 4209 +4841 1051 3608 6038 2087 +4842 5036 1402 5844 3931 +4843 1147 4214 1957 5325 +4844 764 4284 4976 2067 +4845 5150 3613 6012 1070 +4846 2144 3663 5751 655 +4847 1534 4850 586 4219 +4848 2866 1490 6027 1350 +4849 5347 833 5985 3618 +4850 4580 2657 5513 1027 +4851 2516 3695 5644 663 +4852 2844 4176 5832 1385 +4853 3336 5765 1799 6213 +4854 1406 1681 6183 2344 +4855 4476 1879 3701 5639 +4856 5186 4152 4660 1817 +4857 2798 1951 5068 5518 +4858 416 5079 1631 5572 +4859 4954 1642 5098 4006 +4860 2332 4006 5098 486 +4861 1582 4395 352 4759 +4862 4907 3383 4906 363 +4863 2358 4551 1423 4798 +4864 4463 4893 4231 662 +4865 4048 1652 4977 4815 +4866 4123 1055 4839 4299 +4867 340 2552 4012 6029 +4868 2971 4911 4170 1605 +4869 6215 1710 6201 3674 +4870 459 5250 2241 5620 +4871 4872 1711 4862 4302 +4872 1881 3408 5856 390 +4873 1709 4525 683 5189 +4874 5869 4733 6101 2054 +4875 5596 3805 4908 2254 +4876 4374 3859 5326 609 +4877 5841 2037 4789 4318 +4878 1840 4946 804 4528 +4879 2930 1926 4796 2840 +4880 4724 389 5317 3822 +4881 1448 3128 5508 5546 +4882 6200 3760 5561 372 +4883 4431 703 5278 5279 +4884 6178 1778 6236 3631 +4885 2588 4124 4958 1134 +4886 6002 2500 5555 977 +4887 5536 3631 6236 292 +4888 3138 5700 4494 943 +4889 1982 5240 335 5203 +4890 4851 2094 5881 3553 +4891 2222 5911 1877 5683 +4892 1756 4161 207 5405 +4893 4490 2798 5518 1649 +4894 3217 3646 6111 596 +4895 899 5059 456 3556 +4896 735 4297 5442 2016 +4897 470 5436 1866 4913 +4898 1868 928 5357 5316 +4899 271 5316 5357 2240 +4900 964 4130 5072 2457 +4901 752 5411 1845 5001 +4902 1992 918 5851 3702 +4903 291 2000 5088 4504 +4904 866 4735 2239 6188 +4905 1260 2639 5522 4129 +4906 775 5798 1318 4171 +4907 5744 4787 4989 716 +4908 2614 5064 5229 1591 +4909 3915 1339 5362 4347 +4910 4249 3764 5638 1105 +4911 1475 5488 3030 5731 +4912 805 4709 1913 5255 +4913 1416 4786 1613 4286 +4914 1303 2292 6190 4259 +4915 1191 3099 1727 3100 +4916 2481 3875 5758 331 +4917 3153 5082 4569 1802 +4918 2253 4569 5082 718 +4919 1083 4341 2120 6198 +4920 5199 4371 4966 1708 +4921 4543 821 4966 4371 +4922 5453 274 5964 3851 +4923 4417 1925 6075 4370 +4924 3513 5060 5187 736 +4925 3032 5642 2098 4420 +4926 3144 4211 5389 1285 +4927 1704 4953 652 4376 +4928 1699 5384 2165 5168 +4929 5302 1784 5600 2923 +4930 25 26 5742 3831 +4931 867 3831 5742 2081 +4932 4889 209 5440 2943 +4933 651 3921 1224 5296 +4934 380 5323 1585 5025 +4935 5149 1970 5845 3725 +4936 5613 4426 6084 1461 +4937 2970 2947 5959 1039 +4938 945 2497 5564 4074 +4939 44 45 5269 3941 +4940 1475 5731 669 3709 +4941 1113 2985 4485 6191 +4942 1509 4968 2019 4289 +4943 4097 3674 6201 635 +4944 6074 721 4692 2681 +4945 1893 5429 1172 4848 +4946 4154 1899 4431 5279 +4947 2054 5553 1883 5869 +4948 3123 4495 5595 1523 +4949 1715 5203 335 4203 +4950 2745 280 5669 5218 +4951 4343 654 4385 4841 +4952 1570 4704 1903 4703 +4953 1083 3122 5800 4341 +4954 1914 5668 738 5122 +4955 1379 3738 773 6050 +4956 3905 3685 6117 1460 +4957 2237 1046 5412 3583 +4958 202 4961 2373 3569 +4959 4280 2373 4961 689 +4960 1998 2797 4051 5682 +4961 632 4236 2768 6027 +4962 2852 298 4974 2853 +4963 4348 5897 1565 6160 +4964 3875 4895 5809 1748 +4965 4959 4131 5669 1690 +4966 3080 4004 6147 1393 +4967 1837 3975 1070 6012 +4968 459 5620 2495 5378 +4969 5845 1999 5978 3725 +4970 4575 1594 6000 3514 +4971 4478 5124 4563 254 +4972 3670 2242 1103 3769 +4973 6187 868 5999 3676 +4974 4415 5435 4666 1464 +4975 2861 4203 1903 5041 +4976 5717 4917 3815 2200 +4977 4807 467 3711 6065 +4978 4185 2271 5372 5486 +4979 2114 5486 5372 785 +4980 4148 4002 5944 829 +4981 2787 1344 6121 2678 +4982 3572 4637 5683 1877 +4983 4406 4461 4353 962 +4984 5133 710 5072 4130 +4985 259 4523 2028 4783 +4986 4894 243 5530 4558 +4987 2093 4938 1577 4937 +4988 3950 5074 5610 2186 +4989 3503 5610 5074 1777 +4990 226 3826 1753 5157 +4991 4353 4461 4460 1655 +4992 424 5376 2531 6089 +4993 4046 1745 4705 4391 +4994 5345 2070 5197 6203 +4995 4359 645 6165 3976 +4996 232 5390 1918 6033 +4997 570 4207 5619 2554 +4998 2321 3790 5794 277 +4999 3146 4337 5053 1458 +5000 1410 5076 2188 4180 +5001 3372 2937 5594 626 +5002 4366 4658 5366 1074 +5003 3780 5366 4658 1920 +5004 4816 4737 4300 5236 +5005 2438 701 5236 4300 +5006 2766 1026 2765 4688 +5007 4146 1849 4354 997 +5008 5910 355 5010 1620 +5009 1338 5156 6139 2547 +5010 3958 4265 5239 1531 +5011 2505 1590 4244 4985 +5012 5797 4449 4448 1640 +5013 4103 1445 4438 4908 +5014 5380 5954 5533 2477 +5015 2480 6110 833 5347 +5016 4378 4876 4469 1679 +5017 841 1865 6234 3736 +5018 4234 2675 6030 1045 +5019 1810 4803 1602 4535 +5020 605 4250 1605 4993 +5021 4064 1133 6149 5587 +5022 4590 4346 5562 1314 +5023 280 3771 2325 6108 +5024 4706 1428 4011 4484 +5025 1756 5801 4585 3332 +5026 3779 1646 5044 4291 +5027 795 5215 2263 5969 +5028 460 3947 5971 2663 +5029 838 1881 6085 3355 +5030 1495 4508 671 4456 +5031 1488 5335 2091 5963 +5032 3250 440 5384 4277 +5033 3236 3761 4768 646 +5034 2329 2371 5152 623 +5035 4359 3976 5735 1755 +5036 2477 4009 4701 1518 +5037 5095 377 5385 3970 +5038 3477 1496 5432 4317 +5039 716 5291 1989 4034 +5040 5517 2465 5292 592 +5041 4252 4251 5097 1683 +5042 4531 5097 4251 652 +5043 5577 5998 5795 4335 +5044 3368 4335 5795 888 +5045 2285 5546 5508 228 +5046 3120 633 6099 4101 +5047 3130 1648 4465 5490 +5048 218 2135 4467 4468 +5049 5576 3491 5555 2500 +5050 1048 2451 5798 3842 +5051 6130 3897 5574 1930 +5052 3218 5394 4072 1622 +5053 283 4177 5311 2047 +5054 62 63 4027 5318 +5055 5550 3808 5952 808 +5056 486 5401 1735 4743 +5057 2091 5335 3868 910 +5058 2537 1600 5124 4478 +5059 1134 5355 2299 4058 +5060 3817 1682 6086 4262 +5061 2393 1477 4670 4669 +5062 2377 5784 1768 5641 +5063 5988 1732 4053 5986 +5064 1774 3921 651 6155 +5065 6116 2071 4946 5706 +5066 249 5915 2008 5012 +5067 4214 4117 5738 1957 +5068 931 2193 5991 3934 +5069 3225 4737 4816 249 +5070 1097 5114 2042 4201 +5071 3696 4472 987 3113 +5072 4574 4631 5219 726 +5073 1685 5063 1940 5017 +5074 4286 1613 5482 4741 +5075 4148 1901 5657 4002 +5076 2562 1738 6165 3883 +5077 4778 5152 1532 2465 +5078 4581 4500 5965 1719 +5079 1008 4821 1640 4448 +5080 1865 3795 1841 6163 +5081 5886 4641 4614 1838 +5082 894 5381 1856 3464 +5083 3783 1418 6179 3799 +5084 1503 5533 711 4378 +5085 4757 1944 5554 4399 +5086 2324 816 5559 2577 +5087 2217 824 1739 4210 +5088 5036 3931 4727 1751 +5089 610 3175 6196 1971 +5090 2793 5755 1489 4615 +5091 2803 2023 5854 5716 +5092 2190 4447 1628 5099 +5093 1227 4110 2480 5347 +5094 5361 1633 5504 3962 +5095 3007 4073 5353 1588 +5096 912 4470 6152 3920 +5097 379 4654 2167 5558 +5098 2968 631 4129 5522 +5099 5869 3898 5680 4733 +5100 2028 4934 837 5421 +5101 755 2064 4741 5482 +5102 3394 410 6132 3862 +5103 2685 3991 5468 1349 +5104 249 5012 1560 4433 +5105 2061 5806 1544 4517 +5106 4391 4705 5205 1508 +5107 303 5167 1769 4599 +5108 3747 2765 1026 4890 +5109 3893 4127 5260 1568 +5110 3340 447 5641 3964 +5111 1796 5613 1461 4240 +5112 3537 265 4865 4063 +5113 1656 4939 962 4353 +5114 5719 2338 4833 1951 +5115 1084 3895 621 4883 +5116 1575 4453 672 4935 +5117 5563 1812 6015 5680 +5118 3816 1608 4101 6099 +5119 2590 1387 4357 869 +5120 4960 4574 4992 1747 +5121 2606 1567 4140 5635 +5122 5545 3900 5925 774 +5123 1113 6191 2057 5049 +5124 4168 639 4004 4829 +5125 4776 5085 4316 1684 +5126 2062 4082 5999 868 +5127 1055 3972 1674 4839 +5128 5196 243 4894 817 +5129 576 4403 2282 4886 +5130 4371 5199 723 6175 +5131 3340 3964 6174 1077 +5132 2065 5788 1629 3994 +5133 710 4469 1654 5143 +5134 627 4114 2820 6154 +5135 2067 4532 346 6068 +5136 2452 1050 5373 4174 +5137 2508 5748 1601 3154 +5138 3534 6239 5381 1649 +5139 1424 5294 1780 5304 +5140 4594 1637 5375 4100 +5141 4653 819 5395 4652 +5142 3872 4173 5249 2005 +5143 1950 4102 338 4964 +5144 5017 3950 5697 1685 +5145 1424 5304 676 4153 +5146 5882 738 5668 4404 +5147 2436 4287 2814 5970 +5148 1947 4400 412 5946 +5149 511 5214 1966 5601 +5150 5240 1982 4544 4956 +5151 1877 403 5155 3572 +5152 4258 6068 346 3121 +5153 2072 3334 5908 630 +5154 5175 5737 5270 471 +5155 2717 5437 4503 1478 +5156 871 4969 4970 2694 +5157 319 4455 6038 3608 +5158 1239 6081 2003 3884 +5159 2487 5570 4728 878 +5160 5735 3976 5660 1137 +5161 1781 5811 1825 3932 +5162 1712 4332 2551 5171 +5163 1926 2118 5637 756 +5164 4671 1980 5503 4545 +5165 3176 1808 5783 771 +5166 2533 983 5465 4566 +5167 1981 4531 652 4953 +5168 5113 5818 6205 1994 +5169 487 4901 2027 5160 +5170 952 5900 1758 4758 +5171 4266 6224 5612 297 +5172 4565 1632 5215 4273 +5173 4730 398 5392 4132 +5174 1442 4852 6223 2229 +5175 5785 3412 6223 4852 +5176 3990 1465 6019 3918 +5177 807 2568 4358 4296 +5178 3075 4408 1800 5498 +5179 2561 3412 5785 3959 +5180 600 2192 5604 4527 +5181 3907 3876 6154 1331 +5182 1000 4972 5934 2279 +5183 724 5733 2393 4669 +5184 5641 1768 6174 3964 +5185 4794 1752 5640 4015 +5186 4281 4738 4739 366 +5187 3510 1835 3986 5709 +5188 4835 1634 5216 2363 +5189 5007 2057 6191 4485 +5190 4412 2654 1630 6142 +5191 4526 1620 5010 1667 +5192 5313 4620 5208 2502 +5193 4587 1791 5208 4620 +5194 5517 592 5191 2427 +5195 2345 3883 6165 645 +5196 4961 4951 6097 689 +5197 2519 4801 5225 221 +5198 5189 683 5990 4039 +5199 5463 4039 5990 1790 +5200 6041 1742 4164 5566 +5201 2070 402 5566 4164 +5202 3105 4680 5942 1632 +5203 2047 5192 1786 4691 +5204 4631 4574 4960 1746 +5205 3490 1479 4984 4546 +5206 2193 3766 759 4959 +5207 5869 1883 6127 3898 +5208 806 5675 2283 5406 +5209 4970 5528 3829 526 +5210 5432 2056 3250 5230 +5211 4088 3997 5747 1549 +5212 4663 1663 5471 415 +5213 3293 4693 5894 2290 +5214 2423 5516 566 6073 +5215 2082 4568 2018 4980 +5216 6205 6204 5288 2031 +5217 1091 5248 1807 4629 +5218 3163 6056 1924 5419 +5219 5274 4330 5232 1289 +5220 1705 3938 668 5265 +5221 629 5819 2520 5809 +5222 4770 5653 4929 699 +5223 657 4222 1543 5359 +5224 1773 5825 1151 4137 +5225 1747 5104 725 4960 +5226 249 4816 1976 5915 +5227 5116 1824 4899 4772 +5228 4674 796 5178 4643 +5229 5842 4643 5178 1776 +5230 746 4234 2165 5880 +5231 1747 4992 1894 5095 +5232 1921 4480 744 5774 +5233 4717 774 5767 1844 +5234 3246 418 6127 5327 +5235 4943 2012 5687 4135 +5236 4439 1630 6069 4066 +5237 2640 5682 4051 435 +5238 4641 463 5685 4614 +5239 4390 2062 3846 6057 +5240 4052 1731 5625 4169 +5241 4856 1884 5856 3408 +5242 4574 726 4845 4992 +5243 5521 1894 4992 4845 +5244 3100 1727 4412 3101 +5245 5650 926 5965 4500 +5246 865 2150 5094 5361 +5247 641 4668 2046 4955 +5248 5254 4091 5722 1717 +5249 2245 5088 2000 5087 +5250 764 2067 6068 4258 +5251 1921 5774 2324 5138 +5252 5230 271 4317 5432 +5253 4939 1656 4256 5360 +5254 3575 1868 4928 4322 +5255 2196 3939 1356 6134 +5256 4700 4291 5044 901 +5257 6138 289 5459 3762 +5258 638 6228 2908 6093 +5259 4168 4829 5344 1673 +5260 4845 726 5219 4899 +5261 1679 4469 710 5133 +5262 5814 3747 4890 4488 +5263 2417 4383 1016 5234 +5264 3977 5077 5078 1623 +5265 368 5078 5077 2179 +5266 2144 5228 425 4425 +5267 61 5447 4208 60 +5268 3263 5204 4836 1561 +5269 1705 5265 2058 5139 +5270 2516 3885 466 5426 +5271 3870 3342 4296 1787 +5272 4653 4652 5087 2000 +5273 1877 5911 848 4491 +5274 1662 4323 1749 5307 +5275 1921 5138 438 5054 +5276 6098 5201 4799 697 +5277 1689 2317 4799 5201 +5278 5736 1336 6080 4083 +5279 3157 1816 4083 6080 +5280 969 3745 1415 4936 +5281 2288 1780 5294 5608 +5282 4907 6018 6002 977 +5283 2420 6144 743 5578 +5284 4451 5332 4856 1728 +5285 4254 653 5827 4041 +5286 4271 1806 5666 4108 +5287 2477 1518 4608 5380 +5288 1833 5759 779 6215 +5289 4824 401 5722 4091 +5290 2144 655 5402 4268 +5291 902 4005 1494 6031 +5292 3776 4441 4947 1644 +5293 5767 774 5925 1725 +5294 4000 1540 5566 5476 +5295 2453 5476 5566 402 +5296 3026 944 5752 2013 +5297 5595 4495 6152 643 +5298 6001 741 4924 4591 +5299 959 5132 2234 5253 +5300 2581 453 6192 3452 +5301 1585 5323 2007 4791 +5302 5601 6024 5115 1965 +5303 1965 5115 1882 5356 +5304 5598 5895 4189 1327 +5305 4326 4189 5895 1803 +5306 1413 5828 2095 4683 +5307 592 5935 3245 5191 +5308 6061 4120 5801 1756 +5309 3915 3748 5060 1339 +5310 3528 5973 3395 610 +5311 512 2602 1974 5884 +5312 4645 1540 4000 6036 +5313 903 5083 1593 3624 +5314 4892 818 5489 5227 +5315 2371 989 3769 5492 +5316 3690 5684 5634 378 +5317 6192 5707 1862 2905 +5318 4607 1694 4759 6162 +5319 4135 4672 5936 730 +5320 3155 1437 4726 5145 +5321 2280 5645 1058 5617 +5322 1776 5328 359 5842 +5323 3113 781 2471 5382 +5324 2569 4729 5571 583 +5325 689 6097 5030 2215 +5326 1558 6144 2420 5738 +5327 804 4946 2071 5439 +5328 3514 426 5706 4575 +5329 3039 4560 5548 1168 +5330 5827 1959 4563 5124 +5331 1882 5058 1973 5233 +5332 4505 354 4230 5510 +5333 4281 1617 5892 4057 +5334 605 2280 5617 4250 +5335 5536 292 6135 4699 +5336 2553 5878 4065 893 +5337 4836 5204 6011 1938 +5338 3920 2002 4888 4734 +5339 5989 5901 4435 1732 +5340 4413 725 5104 4597 +5341 5744 5787 4106 2015 +5342 262 4055 2331 6064 +5343 2140 4427 748 5268 +5344 6067 225 6239 3534 +5345 5159 1770 4138 2463 +5346 5151 437 2463 4138 +5347 3668 4248 5127 1900 +5348 942 2633 5388 4408 +5349 257 4982 2115 5514 +5350 3750 6238 4361 542 +5351 5389 4211 6169 1869 +5352 1834 5699 748 4427 +5353 4942 5112 464 3413 +5354 4050 4951 4961 202 +5355 4455 4815 4977 1977 +5356 2261 3768 5695 1450 +5357 3230 3814 4874 1195 +5358 1975 3781 852 5271 +5359 5913 5055 4932 2251 +5360 5917 4111 5828 1413 +5361 1833 6045 2185 5759 +5362 2725 1831 5810 5976 +5363 675 5049 2057 4745 +5364 6049 1421 5628 3961 +5365 3068 4489 5243 325 +5366 1835 5778 2240 5357 +5367 4054 4707 6058 247 +5368 736 5904 1847 3513 +5369 3804 1785 4347 5362 +5370 1861 5842 359 4750 +5371 370 5343 1315 5212 +5372 5608 5294 6115 2181 +5373 2940 5241 4534 492 +5374 1038 2970 1039 4159 +5375 4266 297 4113 5865 +5376 1547 4316 907 6129 +5377 5206 4993 4915 1907 +5378 4170 4915 4993 1605 +5379 1100 721 6074 2294 +5380 1839 5421 837 5370 +5381 3540 676 4932 5055 +5382 1882 5115 802 5058 +5383 512 5884 2126 2557 +5384 4156 4372 4573 1432 +5385 220 6102 2061 4517 +5386 4421 5739 4717 1718 +5387 6086 1143 5920 4262 +5388 1654 4656 1844 5143 +5389 2367 875 4991 4975 +5390 3117 1818 4975 4991 +5391 4959 759 5674 4131 +5392 4118 4399 5554 1550 +5393 3291 4591 4924 1359 +5394 938 4350 6202 2301 +5395 4052 214 5772 5451 +5396 4245 4584 5216 1634 +5397 3368 1800 4408 5388 +5398 2789 266 2616 5177 +5399 3473 1089 6035 4623 +5400 1653 2304 6229 4033 +5401 4469 4876 5136 1654 +5402 279 2364 5952 4428 +5403 614 4149 1385 5832 +5404 4066 4633 6233 229 +5405 1834 5331 2191 5699 +5406 5422 2106 5728 1471 +5407 1824 5116 1710 4722 +5408 1262 4114 627 5940 +5409 559 4592 1905 5761 +5410 2484 4875 6177 499 +5411 1481 4638 1823 5538 +5412 535 1988 6212 3360 +5413 1328 4348 6160 1854 +5414 2210 4832 269 4263 +5415 630 3073 4696 5008 +5416 4917 478 5986 4053 +5417 2283 5217 5679 405 +5418 2668 5679 5217 2129 +5419 1560 5878 2553 4826 +5420 6064 1673 5344 4788 +5421 688 4773 1779 5213 +5422 4100 799 6023 4594 +5423 294 5118 1697 6141 +5424 4007 1688 4963 4922 +5425 4631 1942 5445 5219 +5426 352 4835 2307 5710 +5427 5828 4111 6063 1702 +5428 688 5213 2128 4754 +5429 604 5991 2193 4622 +5430 1422 4326 1803 5857 +5431 487 3624 1593 4901 +5432 3817 4262 5920 601 +5433 5215 795 5676 4273 +5434 264 5442 1757 5145 +5435 2140 5268 1906 5727 +5436 2408 5663 1803 5895 +5437 2311 5147 5157 1753 +5438 681 5892 2655 4767 +5439 2543 4719 5282 1628 +5440 4176 1891 5864 5832 +5441 5666 1806 5026 5073 +5442 3897 1842 5073 5026 +5443 320 4145 1849 4146 +5444 2285 5744 2015 5546 +5445 4862 1444 5658 4302 +5446 2439 5879 2140 4193 +5447 1979 847 5303 4858 +5448 5485 4538 5823 1686 +5449 1903 4704 719 5041 +5450 2964 4811 5367 1846 +5451 5353 5367 4811 362 +5452 5615 691 5543 4679 +5453 1331 4333 2223 5626 +5454 4004 1231 5344 4829 +5455 2648 4087 5720 940 +5456 4772 4899 5219 1896 +5457 753 5568 1997 5023 +5458 1598 2987 5586 4778 +5459 1530 2464 5867 4382 +5460 644 4375 2607 5585 +5461 3345 978 5572 3871 +5462 3669 582 6211 1253 +5463 4237 1084 4883 5042 +5464 730 5936 3005 4486 +5465 1822 6197 792 4119 +5466 5588 1843 5224 5071 +5467 3030 3452 6192 1611 +5468 4330 2042 5624 5232 +5469 355 5910 2243 4793 +5470 2220 4749 1578 5272 +5471 4594 6023 4926 1589 +5472 5106 4069 5670 1716 +5473 764 5901 2152 4284 +5474 1999 4540 1660 4989 +5475 4603 1540 4645 5470 +5476 1231 2156 5282 5110 +5477 762 3477 4317 5778 +5478 2118 1926 2930 4534 +5479 5292 5599 1382 2414 +5480 2754 6043 1132 4642 +5481 1867 5316 271 5230 +5482 2460 4436 5947 1206 +5483 5108 666 6032 3265 +5484 5983 853 6169 4211 +5485 2626 398 4730 6123 +5486 3671 1327 4189 6033 +5487 4392 4639 5590 1749 +5488 1979 4226 1366 6233 +5489 5295 761 6115 4162 +5490 5384 1699 5950 4277 +5491 3572 5155 6081 1239 +5492 3527 1997 5568 5195 +5493 432 4366 5937 1869 +5494 3631 5536 1987 5415 +5495 5279 5278 6121 1344 +5496 1921 5054 1760 5038 +5497 828 4771 6132 2287 +5498 5471 1663 5783 1808 +5499 714 4544 1946 6083 +5500 2861 6199 4973 2084 +5501 4989 4787 5978 1999 +5502 4502 5978 4787 1506 +5503 419 2341 4669 4670 +5504 367 4309 929 5531 +5505 628 5576 2138 5753 +5506 2908 897 5630 5404 +5507 220 5433 1853 4223 +5508 1858 4220 1859 5560 +5509 3589 6173 4313 381 +5510 1780 4932 676 5304 +5511 5581 1953 6186 5150 +5512 4022 811 4822 5955 +5513 4603 696 4612 6041 +5514 1969 5222 1846 5367 +5515 5282 636 5158 5110 +5516 4295 729 4409 5671 +5517 2993 6182 1796 6181 +5518 4074 304 5847 4325 +5519 3676 636 5282 4719 +5520 5490 4465 6175 723 +5521 5551 1929 6175 4465 +5522 2037 5310 1020 4789 +5523 2649 5032 585 5103 +5524 4026 4535 5503 275 +5525 2693 4942 3413 694 +5526 2558 5937 4366 1074 +5527 1986 6007 384 4869 +5528 3314 5328 5346 1996 +5529 2807 5346 5328 1776 +5530 3114 5030 6097 1305 +5531 4864 3101 4412 6142 +5532 716 4989 1660 5291 +5533 576 4919 1555 4356 +5534 2313 4677 5186 1817 +5535 4356 1555 5648 4608 +5536 2247 3594 4805 695 +5537 1977 1308 6038 4455 +5538 803 5959 2947 6171 +5539 2510 5740 2061 6102 +5540 1824 4722 779 5521 +5541 3684 4519 5568 753 +5542 2681 1026 2766 5773 +5543 2052 670 5683 4637 +5544 5175 1809 4422 5737 +5545 3325 3324 5426 466 +5546 2609 5799 448 4394 +5547 2589 4228 1778 6178 +5548 4495 2002 3920 6152 +5549 1982 5203 1715 4944 +5550 6026 2664 4740 1672 +5551 1103 5945 3710 6157 +5552 4675 1750 5764 4885 +5553 855 5616 4974 2126 +5554 2043 6151 1910 5693 +5555 1868 5316 1867 4928 +5556 714 4661 2314 6071 +5557 392 4760 1675 4540 +5558 481 1826 5531 3809 +5559 355 5348 1828 5010 +5560 1625 6017 2473 5794 +5561 2032 4870 1682 5944 +5562 4578 4298 4723 5858 +5563 3336 4916 414 5765 +5564 4052 5451 4709 1731 +5565 5247 5548 4560 462 +5566 4066 229 4692 4439 +5567 691 5615 1660 4547 +5568 4718 4923 6058 1653 +5569 1263 4559 1544 5806 +5570 1420 4278 1809 6170 +5571 4097 506 6045 1833 +5572 5638 5456 5457 1763 +5573 4554 1414 4906 3383 +5574 898 5163 1917 4260 +5575 4112 1599 5936 4672 +5576 4627 490 5976 4379 +5577 4306 240 4782 3834 +5578 4678 513 6133 4339 +5579 397 5176 5170 2155 +5580 3232 5001 5274 1289 +5581 3559 5274 5001 1845 +5582 4005 902 5580 5166 +5583 5165 4435 5901 764 +5584 203 5428 1872 4440 +5585 3226 419 5662 5414 +5586 1376 5810 2555 5194 +5587 1911 5829 757 4533 +5588 5485 1686 5960 5144 +5589 6063 5170 5176 1702 +5590 347 5899 2217 4210 +5591 4714 891 4858 5303 +5592 4131 5674 5351 1744 +5593 685 6040 1855 4471 +5594 529 5069 2344 6183 +5595 5071 5224 5386 1898 +5596 3157 4339 6133 1816 +5597 3349 5590 4639 308 +5598 2263 5942 4680 429 +5599 1392 5165 764 4258 +5600 1502 4619 254 4563 +5601 4581 1797 5650 4500 +5602 5823 4538 1851 849 +5603 4237 5042 5043 1765 +5604 378 5634 1942 4910 +5605 2636 788 5947 5474 +5606 3288 5244 5495 775 +5607 2071 5255 1913 5439 +5608 985 2169 5225 6119 +5609 3875 1748 4543 5758 +5610 1839 5329 2028 5421 +5611 4480 2289 5552 744 +5612 6015 1812 5768 5062 +5613 2303 5293 1897 509 +5614 5144 358 6095 5485 +5615 2398 4924 741 4925 +5616 2666 5285 1223 5137 +5617 6188 4640 5643 866 +5618 946 6126 2260 5377 +5619 5341 3773 5899 347 +5620 5769 4728 5570 1687 +5621 3733 1954 4949 5283 +5622 4666 6185 4891 1559 +5623 1470 6011 693 4430 +5624 4543 4371 6175 1929 +5625 2455 4518 6122 844 +5626 664 4257 1874 4398 +5627 3480 1400 5185 3595 +5628 337 3024 6222 4636 +5629 5903 1787 4296 4358 +5630 292 2584 6125 6135 +5631 5947 788 5559 4902 +5632 3935 342 3405 5861 +5633 5236 701 6051 4647 +5634 4085 5760 2005 5249 +5635 3061 5053 791 5905 +5636 1290 5287 686 4429 +5637 5611 4891 6185 2256 +5638 1471 2270 3935 5861 +5639 6235 4902 5559 816 +5640 847 1979 6233 4633 +5641 5104 1429 6048 4597 +5642 4413 4597 6048 1888 +5643 3290 1911 4533 6195 +5644 4791 6195 4533 1585 +5645 6012 5321 6078 1837 +5646 3684 1591 6128 4519 +5647 4899 1824 5521 4845 +5648 869 4357 2580 5770 +5649 4120 1378 4585 5801 +5650 6162 2306 5789 4607 +5651 4518 1834 4427 6122 +5652 1754 4936 1415 5416 +5653 5849 356 6100 4625 +5654 2579 4529 6159 934 +5655 1363 2423 6073 4570 +5656 384 6007 2228 5181 +5657 1697 5676 2163 6141 +5658 731 2393 5733 3557 +5659 4575 5706 4946 1840 +5660 1618 5672 442 5336 +5661 465 5408 2024 5324 +5662 216 5198 1433 6139 +5663 3870 4832 1242 2326 +5664 5897 4348 5455 687 +5665 229 1956 2681 4692 +5666 4226 374 5770 2580 +5667 1716 4261 6035 1089 +5668 3063 5974 2628 4582 +5669 582 4860 2231 6211 +5670 5504 289 6138 3962 +5671 3130 4990 5443 1648 +5672 2787 2152 5901 5989 +5673 1432 5056 910 4156 +5674 985 4962 1905 4592 +5675 948 3830 5528 2991 +5676 1678 4695 37 5780 +5677 2318 5401 486 5098 +5678 4674 4643 5842 1861 +5679 4741 2064 5127 4248 +5680 1256 5080 6172 3045 +5681 1716 5670 622 4261 +5682 1825 4645 356 5849 +5683 1532 5152 2371 5153 +5684 1511 5530 1471 5728 +5685 2007 5323 1807 5248 +5686 2785 5835 4674 1861 +5687 4843 488 4473 5434 +5688 5380 4608 5648 421 +5689 4169 5625 6099 633 +5690 2957 415 5471 5997 +5691 324 5689 1603 4561 +5692 1923 6004 6053 2603 +5693 5158 5999 4082 1939 +5694 4753 1968 4872 6070 +5695 2504 700 5812 4205 +5696 4912 1884 4856 5332 +5697 5762 727 5791 5445 +5698 4717 5739 5545 774 +5699 4044 1766 5404 5403 +5700 5630 2148 5403 5404 +5701 3355 6085 4498 1041 +5702 1658 5212 1659 4650 +5703 1911 5557 1912 5829 +5704 4710 993 4070 6003 +5705 4302 557 6070 4872 +5706 4440 5015 5416 1415 +5707 2201 5314 950 5024 +5708 3030 1611 5894 4693 +5709 6003 4641 5886 1870 +5710 6000 913 5862 6028 +5711 5370 2323 5760 4085 +5712 646 4768 1529 3526 +5713 1804 896 4504 5088 +5714 2278 5730 9 5933 +5715 4748 671 4508 5636 +5716 4172 4817 5652 731 +5717 1660 5615 1989 5291 +5718 1741 5160 2027 5623 +5719 1966 5214 1967 5438 +5720 620 6075 1925 5193 +5721 1450 5172 1838 4614 +5722 2328 4338 2500 6002 +5723 3845 1535 6166 4621 +5724 5147 1910 6151 5157 +5725 1765 5043 223 4384 +5726 1688 6006 2386 4963 +5727 2936 4879 5573 6206 +5728 1973 803 6171 5505 +5729 1741 5623 285 5034 +5730 1894 5521 779 5759 +5731 638 4629 1807 6228 +5732 2681 1956 6107 4488 +5733 5349 1742 6041 4612 +5734 1703 5812 700 5231 +5735 2728 4710 770 5488 +5736 1673 6064 2331 6072 +5737 5722 4929 5653 1717 +5738 4461 1657 6207 4460 +5739 2107 4936 1754 5525 +5740 2127 5407 785 5609 +5741 4231 4893 5817 1636 +5742 3524 5858 4723 1815 +5743 2847 481 4706 5322 +5744 1898 5677 616 5071 +5745 2186 2273 5084 6055 +5746 5697 6055 5084 854 +5747 1899 2612 5582 5258 +5748 3178 569 5883 4032 +5749 5929 262 6064 4788 +5750 3801 1633 5361 5094 +5751 5763 4647 6051 1788 +5752 1863 643 6152 4470 +5753 5330 6180 5213 1779 +5754 4481 2128 5213 6180 +5755 710 5143 1844 5767 +5756 4463 2301 5817 4893 +5757 2576 2117 5241 2940 +5758 1898 5386 2041 5448 +5759 2077 5846 2013 5752 +5760 2356 460 6060 4979 +5761 1985 2794 4979 6060 +5762 557 5575 2483 6070 +5763 3125 276 5906 5065 +5764 4237 667 4922 4963 +5765 2432 6208 959 4572 +5766 464 5112 1801 3692 +5767 29 5741 5481 28 +5768 26 27 5481 5742 +5769 5741 2081 5742 5481 +5770 5599 5292 2465 1532 +5771 4616 2060 5715 5444 +5772 55 56 5444 5715 +5773 637 4451 1126 6118 +5774 3973 5725 5835 706 +5775 1799 4752 685 5968 +5776 5983 6209 4837 853 +5777 5472 5324 5452 1909 +5778 2035 5592 473 6101 +5779 5996 5928 4795 1794 +5780 2035 5105 1832 5592 +5781 2103 5469 1944 4757 +5782 410 5162 2287 6132 +5783 5201 2161 4855 258 +5784 1653 6058 4707 2304 +5785 1719 5965 2859 4957 +5786 2269 5966 1934 5779 +5787 5492 6157 5086 341 +5788 933 5889 1670 4828 +5789 3236 1211 5718 3761 +5790 2853 4974 5616 1539 +5791 271 2240 5778 4317 +5792 2585 1691 4970 4969 +5793 266 2789 1783 5179 +5794 2619 1300 4613 2146 +5795 2858 5831 5011 469 +5796 3649 5011 5831 1932 +5797 4195 4115 5812 1703 +5798 1343 2454 6116 5824 +5799 383 5467 1892 5128 +5800 808 5541 2029 5550 +5801 3763 624 5413 5412 +5802 5700 2261 5685 4494 +5803 4460 6207 5732 684 +5804 5992 2219 5276 1993 +5805 3220 869 5770 3221 +5806 4626 1578 4749 6092 +5807 3050 5923 4914 1709 +5808 5375 375 5288 5743 +5809 4907 363 5603 6018 +5810 2348 5656 706 4685 +5811 698 5821 2523 4930 +5812 5875 2035 6101 4733 +5813 1511 5728 2106 394 +5814 4708 1771 6123 4730 +5815 4348 1328 5454 5455 +5816 2735 4859 2022 5655 +5817 746 5258 5582 2110 +5818 1646 5166 1767 5044 +5819 1408 3583 5412 5413 +5820 1901 226 5157 6151 +5821 4645 1825 5811 5470 +5822 2886 5511 1629 4509 +5823 3460 2636 5474 267 +5824 1263 5806 2061 5075 +5825 4718 3837 6039 4923 +5826 1787 269 4832 3870 +5827 1642 4954 2267 5820 +5828 6173 1854 6160 4313 +5829 2187 2456 5005 6114 +5830 2218 2384 6114 5005 +5831 5123 5505 6171 1897 +5832 1143 6086 2416 4761 +5833 5283 1280 5907 3733 +5834 1810 6059 834 4803 +5835 894 4490 1649 5381 +5836 2570 5599 1532 5153 +5837 2803 4313 6160 1565 +5838 1559 2472 6231 5092 +5839 5791 1896 5219 5445 +5840 5115 6024 6025 802 +5841 6148 6020 5500 1902 +5842 1710 6215 779 4722 +5843 5698 5062 5768 263 +5844 4074 5564 5475 304 +5845 2497 1978 5475 5564 +5846 1789 4808 2732 6218 +5847 5710 6162 4759 352 +5848 5222 4945 6237 834 +5849 6150 1998 6237 4945 +5850 3272 508 5836 5512 +5851 3653 5512 5836 2087 +5852 5390 4781 6217 1918 +5853 3308 1505 6217 4781 +5854 5986 2159 5393 5988 +5855 4902 6235 5710 2307 +5856 1625 4897 2432 6017 +5857 2393 731 5652 4997 +5858 2044 5681 2010 5549 +5859 1511 394 4016 1512 +5860 3647 1713 5822 5081 +5861 1907 5714 1162 5206 +5862 4285 2216 6230 5648 +5863 1314 5562 2242 3670 +5864 5435 318 6185 4666 +5865 6052 940 5720 1677 +5866 974 5833 2296 6105 +5867 3268 5818 5113 1871 +5868 795 5924 2163 5676 +5869 277 4926 6023 2321 +5870 6058 4923 6039 247 +5871 2414 5935 592 5292 +5872 1643 4976 704 4909 +5873 4187 5184 5185 1400 +5874 6069 3733 5907 1579 +5875 5571 5652 4817 583 +5876 626 5351 5674 3372 +5877 1958 1701 5790 4861 +5878 3291 1676 6001 4591 +5879 2106 2835 5826 394 +5880 5572 1631 3569 3871 +5881 1706 5019 895 5971 +5882 905 5352 2104 5251 +5883 1906 5649 2127 5609 +5884 5043 5042 4883 1782 +5885 2270 243 5196 5340 +5886 2068 5868 842 5105 +5887 2540 5270 1736 5776 +5888 6162 5710 6235 2306 +5889 849 1851 5918 2468 +5890 2064 755 5422 3405 +5891 2077 5211 1001 5846 +5892 4544 714 6071 4956 +5893 2347 6079 5705 416 +5894 3084 4679 6134 5847 +5895 3404 1114 5993 5769 +5896 4728 5769 5993 2195 +5897 5259 4507 5898 2130 +5898 788 1793 2577 5559 +5899 3902 5943 4418 1730 +5900 4016 394 5826 1110 +5901 3621 6193 5624 705 +5902 3277 4986 225 6067 +5903 2003 6081 5155 2150 +5904 1579 5907 5908 3334 +5905 4801 2026 6119 5225 +5906 1686 5823 2475 5275 +5907 6210 2058 5265 2291 +5908 5222 1969 6150 4945 +5909 358 5144 5960 2273 +5910 3568 6128 1591 5229 +5911 4553 1993 5276 603 +5912 5152 4778 5586 623 +5913 1305 4050 1110 4049 +5914 6216 2178 5414 5662 +5915 1547 6129 2818 4987 +5916 2149 5169 2422 5721 +5917 5062 5698 5868 2068 +5918 5981 2291 5265 668 +5919 6039 3837 5552 2289 +5920 6032 1700 5909 4491 +5921 617 6019 3385 5126 +5922 5145 4726 5943 264 +5923 6204 6205 5818 850 +5924 3230 1533 5961 3814 +5925 5929 4788 5110 5158 +5926 1632 5942 2263 5215 +5927 5428 6020 6148 2227 +5928 2301 6202 3885 5817 +5929 2078 6109 937 5391 +5930 684 5732 2363 5216 +5931 1239 4837 6209 2052 +5932 2254 2041 5386 5596 +5933 2558 5389 1869 5937 +5934 272 2442 5795 5998 +5935 3965 6226 5456 409 +5936 5457 5456 6226 2131 +5937 748 5649 1906 5268 +5938 5062 2068 5875 6015 +5939 4032 5883 6216 1501 +5940 5445 1942 5634 5762 +5941 2029 5743 1990 5550 +5942 280 6108 1690 5669 +5943 2355 6022 2080 5400 +5944 3615 6028 5862 2297 +5945 3671 6217 1505 5020 +5946 4578 2404 6120 4996 +5947 1633 5027 2119 5504 +5948 899 5526 4079 1801 +5949 1629 5788 299 5171 +5950 4612 2048 6156 5349 +5951 2715 6172 5080 832 +5952 4115 5932 5128 1892 +5953 3995 921 5208 1791 +5954 5706 426 5824 6116 +5955 4191 5908 5907 1280 +5956 2514 6094 1975 5271 +5957 4831 768 5349 6156 +5958 2647 5903 4358 797 +5959 6218 5223 6076 1789 +5960 484 5410 2056 5544 +5961 510 6087 1882 5233 +5962 1195 4874 2034 4541 +5963 4324 4882 5808 1919 +5964 2374 5859 6188 2239 +5965 4640 6188 5859 2132 +5966 823 5102 2110 5582 +5967 5324 2024 6053 5452 +5968 5224 828 5596 5386 +5969 2117 2118 4534 5241 +5970 4561 1848 4861 5790 +5971 6004 931 5452 6053 +5972 2387 4355 862 5284 +5973 2073 4864 2074 5235 +5974 2435 5848 1841 5651 +5975 5205 5929 5158 1939 +5976 5201 258 5891 1689 +5977 13 14 6078 5321 +5978 1491 4186 1647 4443 +5979 4858 4225 4226 1979 +5980 3885 6202 4350 466 +5981 2542 529 6183 5281 +5982 1880 6009 2549 6008 +5983 4050 1305 6097 4951 +5984 2519 5262 6219 890 +5985 737 2020 6219 5262 +5986 5174 5223 6218 923 +5987 727 5979 2333 5791 +5988 4723 3595 5185 1815 +5989 6089 5922 5921 2236 +5990 2068 5105 2035 5875 +5991 3157 6080 1336 5379 +5992 1756 5405 2336 6061 +5993 3318 2049 5868 5698 +5994 1525 5701 201 4649 +5995 379 5558 1912 5557 +5996 3976 6165 1738 5660 +5997 6157 3710 1012 5086 +5998 5743 5288 6204 1990 +5999 2504 4900 6230 1696 +6000 2031 5295 1994 6205 +6001 773 5740 2510 6050 +6002 2842 5330 1779 6189 +6003 4562 778 6166 5257 +6004 2510 6102 2045 6131 +6005 988 6054 2011 5532 +6006 2011 6054 2184 5948 +6007 1552 3770 407 5154 +6008 5065 5906 5489 1862 +6009 4306 4307 5984 240 +6010 4538 5485 6095 1851 +6011 3633 5579 1712 5692 +6012 1793 5068 1951 4833 +6013 569 2593 6216 5883 +6014 302 4796 2164 4662 +6015 2349 5946 412 5771 +6016 2608 5919 5920 1143 +6017 2612 206 5988 5393 +6018 5680 6015 5875 4733 +6019 4705 262 5929 5205 +6020 912 4742 1863 4470 +6021 2442 6124 1091 5547 +6022 2218 5502 1943 6167 +6023 748 5699 2040 5649 +6024 1904 5777 1905 4962 +6025 1731 3816 6099 5625 +6026 3321 1912 5558 5781 +6027 2835 4049 1110 5826 +6028 341 5086 2570 5153 +6029 3834 4782 5961 1533 +6030 5726 4558 5530 1511 +6031 1657 2460 5732 6207 +6032 5232 5624 6193 1961 +6033 687 5455 5454 2055 +6034 2322 6146 2066 6062 +6035 3604 5690 1774 6155 +6036 1104 4821 5977 2629 +6037 4541 2034 6136 4573 +6038 3962 6138 1707 5461 +6039 4436 1729 5474 5947 +6040 2752 6177 3475 1060 +6041 6002 6018 5603 2328 +6042 1863 4079 5526 1060 +6043 2641 5397 767 5873 +6044 5684 2221 5762 5634 +6045 642 4613 464 3730 +6046 780 5898 5343 1795 +6047 6079 3830 948 5705 +6048 2189 6141 2163 6091 +6049 5495 5244 6104 2168 +6050 5428 203 5500 6020 +6051 824 5466 1300 2619 +6052 1785 216 6139 5156 +6053 2711 6176 6143 2194 +6054 18 19 6143 6176 +6055 1635 5896 2154 5621 +6056 5227 5489 5906 2092 +6057 851 5781 5558 2167 +6058 1126 5369 1950 6118 +6059 1211 5341 347 5718 +6060 1720 4700 901 5729 +6061 2103 5251 2104 5469 +6062 3285 3782 817 5945 +6063 1523 5595 2250 5173 +6064 4765 4714 5303 497 +6065 3920 4920 5963 912 +6066 509 1897 6171 2947 +6067 5601 1966 6025 6024 +6068 478 5987 2159 5986 +6069 911 1432 4573 6136 +6070 2371 5492 341 5153 +6071 3758 1580 5899 3773 +6072 1676 6013 2162 6001 +6073 601 5920 5919 2543 +6074 2657 1767 5166 5580 +6075 1732 5988 206 5989 +6076 2018 5365 989 5949 +6077 225 1856 5381 6239 +6078 3526 1529 5984 4307 +6079 4768 3761 5718 1739 +6080 2208 1815 5185 5184 +6081 3524 2198 5306 5858 +6082 4874 3814 5961 642 +6083 5571 2536 4997 5652 +6084 755 5363 2106 5422 +6085 240 2146 5961 4782 +6086 802 6025 2664 6026 +6087 2751 612 4220 1269 +6088 4267 1486 2421 810 +2 13 3 20 +6089 1 9 105 5 +6090 9 10 106 105 +6091 10 11 107 106 +6092 11 12 108 107 +6093 12 13 109 108 +6094 13 14 110 109 +6095 14 15 111 110 +6096 15 16 112 111 +6097 16 17 113 112 +6098 17 18 114 113 +6099 18 19 115 114 +6100 19 20 116 115 +6101 20 21 117 116 +6102 21 22 118 117 +6103 22 23 119 118 +6104 23 24 120 119 +6105 24 25 121 120 +6106 25 26 122 121 +6107 26 27 123 122 +6108 27 2 6 123 +2 17 3 30 +6109 2 28 124 6 +6110 28 29 125 124 +6111 29 30 126 125 +6112 30 31 127 126 +6113 31 32 128 127 +6114 32 33 129 128 +6115 33 34 130 129 +6116 34 35 131 130 +6117 35 36 132 131 +6118 36 37 133 132 +6119 37 38 134 133 +6120 38 39 135 134 +6121 39 40 136 135 +6122 40 41 137 136 +6123 41 42 138 137 +6124 42 43 139 138 +6125 43 44 140 139 +6126 44 45 141 140 +6127 45 46 142 141 +6128 46 47 143 142 +6129 47 48 144 143 +6130 48 49 145 144 +6131 49 50 146 145 +6132 50 51 147 146 +6133 51 52 148 147 +6134 52 53 149 148 +6135 53 54 150 149 +6136 54 55 151 150 +6137 55 56 152 151 +6138 56 3 7 152 +2 21 3 20 +6139 3 57 153 7 +6140 57 58 154 153 +6141 58 59 155 154 +6142 59 60 156 155 +6143 60 61 157 156 +6144 61 62 158 157 +6145 62 63 159 158 +6146 63 64 160 159 +6147 64 65 161 160 +6148 65 66 162 161 +6149 66 67 163 162 +6150 67 68 164 163 +6151 68 69 165 164 +6152 69 70 166 165 +6153 70 71 167 166 +6154 71 72 168 167 +6155 72 73 169 168 +6156 73 74 170 169 +6157 74 75 171 170 +6158 75 4 8 171 +2 25 3 30 +6159 4 76 172 8 +6160 76 77 173 172 +6161 77 78 174 173 +6162 78 79 175 174 +6163 79 80 176 175 +6164 80 81 177 176 +6165 81 82 178 177 +6166 82 83 179 178 +6167 83 84 180 179 +6168 84 85 181 180 +6169 85 86 182 181 +6170 86 87 183 182 +6171 87 88 184 183 +6172 88 89 185 184 +6173 89 90 186 185 +6174 90 91 187 186 +6175 91 92 188 187 +6176 92 93 189 188 +6177 93 94 190 189 +6178 94 95 191 190 +6179 95 96 192 191 +6180 96 97 193 192 +6181 97 98 194 193 +6182 98 99 195 194 +6183 99 100 196 195 +6184 100 101 197 196 +6185 101 102 198 197 +6186 102 103 199 198 +6187 103 104 200 199 +6188 104 1 5 200 +2 26 3 6088 +6189 7498 9064 6470 8711 +6190 7801 10360 6491 9943 +6191 6250 8910 7124 8243 +6192 8903 6561 10845 7868 +6193 8789 8137 11681 7038 +6194 8677 6350 11437 8083 +6195 7295 8725 11629 9388 +6196 8275 6895 10916 8968 +6197 7306 10801 8691 8398 +6198 7386 9074 7053 8482 +6199 6332 9431 7979 11102 +6200 7525 7913 11193 8460 +6201 9999 8406 11014 6653 +6202 6684 8963 7512 8384 +6203 9848 8858 10050 7467 +6204 11256 8322 11714 7859 +6205 7323 9465 7789 9779 +6206 7577 10544 11549 8477 +6207 8789 6482 9013 8137 +6208 9711 10569 8482 6356 +6209 10583 6884 10858 7985 +6210 11574 7869 10031 7316 +6211 10928 8704 7310 11410 +6212 6632 11702 8447 8263 +6213 11979 7875 10056 7301 +6214 10084 10550 9127 6612 +6215 7629 8544 6387 10332 +6216 7801 10416 6719 9650 +6217 8278 10774 8302 6468 +6218 9932 7512 8963 10453 +6219 8138 7689 11504 8995 +6220 9598 7884 9680 8932 +6221 6881 10712 7896 9992 +6222 11671 6957 8873 7975 +6223 8538 8568 8381 7146 +6224 6260 8058 11301 8558 +6225 6421 11599 7898 8987 +6226 6244 9183 7324 8431 +6227 8237 9563 6909 6295 +6228 8197 12144 8335 6300 +6229 11545 9013 7955 11398 +6230 8700 10245 8929 6480 +6231 9218 9390 8521 6392 +6232 8153 10679 8171 6334 +6233 7372 10553 6853 8816 +6234 8730 8148 8626 6330 +6235 10706 7903 9905 7543 +6236 9348 8125 11466 6258 +6237 7746 6851 8175 10841 +6238 11395 8244 8445 6840 +6239 12202 6445 11300 7904 +6240 11916 7384 9905 7903 +6241 10583 8021 10983 6884 +6242 6988 8829 10591 8650 +6243 8476 6533 10936 8705 +6244 8447 6903 9945 8263 +6245 11487 8080 8427 6899 +6246 7313 8831 6975 8633 +6247 8873 6721 10935 7975 +6248 6721 9167 7487 8758 +6249 10904 6304 8617 8162 +6250 9307 7910 10236 6727 +6251 7819 8327 8290 10971 +6252 6312 10134 11457 8495 +6253 7030 8765 7501 9250 +6254 9234 7220 8449 9711 +6255 11523 7961 8991 6956 +6256 12259 8613 8673 6848 +6257 10439 7986 10774 6905 +6258 8139 11159 147 148 +6259 8700 6480 8735 10063 +6260 7498 9486 6984 9064 +6261 8977 7971 11870 7048 +6262 9413 7915 11600 7323 +6263 7258 9778 11517 8498 +6264 8004 11704 6550 11640 +6265 11485 11844 8727 6980 +6266 7997 9934 7186 11364 +6267 6876 11274 8362 11409 +6268 8230 11978 8079 11738 +6269 9317 7103 10012 7924 +6270 8635 7053 9051 9603 +6271 6937 10299 7563 8657 +6272 7347 8016 8764 11911 +6273 8228 8820 6333 12180 +6274 6761 11056 7979 9763 +6275 7153 9443 11121 9192 +6276 7517 8283 6811 10251 +6277 7996 6493 7997 11364 +6278 9144 7067 9534 10719 +6279 9972 7751 11210 6338 +6280 7601 9738 7912 10972 +6281 10310 7988 10819 6650 +6282 11904 9310 7612 10305 +6283 8818 8201 10358 6251 +6284 9934 7997 10900 6660 +6285 10692 8626 10923 6858 +6286 8181 11892 8253 6546 +6287 7798 8153 6824 11446 +6288 9752 10888 9136 7320 +6289 6389 10167 7654 8572 +6290 7777 8601 6404 10521 +6291 10257 6882 8623 8147 +6292 10663 7867 11503 8418 +6293 11735 6969 10063 8689 +6294 11293 6828 11670 10130 +6295 7955 10035 7109 10014 +6296 8445 8244 8684 7006 +6297 8683 11470 7925 10575 +6298 7864 9602 6823 9971 +6299 11301 8058 11007 6776 +6300 10414 11558 10418 7415 +6301 10655 6895 9543 8099 +6302 6702 10271 7675 8555 +6303 7052 9473 7549 8844 +6304 9536 10135 8752 6521 +6305 6588 8449 7220 9121 +6306 7822 6990 8522 11614 +6307 6759 9065 8052 11990 +6308 7377 10386 7824 11195 +6309 11741 8053 10786 7009 +6310 9191 9990 8533 6646 +6311 9823 8002 11129 6913 +6312 8197 7012 8525 8524 +6313 8056 8511 6919 11554 +6314 8972 9111 8479 7161 +6315 6412 8578 7850 10831 +6316 10262 7404 9903 8084 +6317 10382 8084 9903 6693 +6318 11075 6523 10890 9592 +6319 12169 7969 9943 6491 +6320 8223 9026 7147 11987 +6321 11515 8492 12258 8059 +6322 10275 6671 10917 8047 +6323 8497 7505 10746 10093 +6324 10501 8405 11135 7592 +6325 9013 6482 10035 7955 +6326 7173 8721 6372 8627 +6327 8659 6489 9963 8314 +6328 7019 9368 7450 8906 +6329 7435 8937 7102 8889 +6330 10348 10859 8045 6968 +6331 8622 8118 9870 6906 +6332 7488 9167 6721 8873 +6333 8991 6450 10795 8020 +6334 6853 10689 11608 8816 +6335 9642 10383 8905 6351 +6336 8554 7119 9674 8121 +6337 8131 6829 8023 11266 +6338 10030 8724 8514 7141 +6339 10808 8063 11447 7146 +6340 11969 7974 10231 6250 +6341 9183 6244 10229 7970 +6342 6988 8428 6306 8429 +6343 9955 8284 10233 6461 +6344 7647 9855 6844 9082 +6345 8977 7244 9688 7971 +6346 10819 7988 9469 7371 +6347 7467 10745 6520 9848 +6348 10103 7970 10229 7172 +6349 10650 7475 10302 8176 +6350 7779 10354 6411 8882 +6351 10975 8146 9006 7008 +6352 7199 8592 6932 8591 +6353 10698 7977 12050 7509 +6354 7885 12098 6747 9003 +6355 7508 9866 7170 10186 +6356 6820 9152 7026 8786 +6357 6896 9785 7464 9591 +6358 11613 7002 9943 7969 +6359 7531 8453 7421 9596 +6360 7561 11666 8971 8477 +6361 10770 10435 6924 8761 +6362 7106 8787 6540 8770 +6363 8025 10869 6737 9473 +6364 9431 6850 9763 7979 +6365 10136 6674 10834 8040 +6366 11668 7399 11139 8098 +6367 11112 6943 8736 11705 +6368 8089 9962 8219 6920 +6369 9900 6852 11218 7822 +6370 8567 6716 10803 7929 +6371 6825 10256 7775 10461 +6372 8537 10593 9422 6852 +6373 7169 9696 7772 9695 +6374 12135 8484 8657 7886 +6375 6679 8785 7734 10591 +6376 6454 8996 7544 9347 +6377 10766 6479 9289 7790 +6378 7747 11005 7915 9413 +6379 6772 9018 8034 10862 +6380 7062 8465 7061 8753 +6381 10081 8003 9518 7045 +6382 11741 8364 12006 8053 +6383 11392 10112 8008 11406 +6384 10310 7288 10161 7988 +6385 8607 6846 11496 8170 +6386 9850 7521 7895 6264 +6387 8293 6485 8427 8080 +6388 6642 9590 7623 9086 +6389 8610 11644 7582 10261 +6390 9109 6399 9680 8251 +6391 8507 7216 9110 8508 +6392 7384 8686 6836 9905 +6393 6860 8882 7915 11005 +6394 8113 8114 6760 7139 +6395 9865 6265 9668 11145 +6396 10486 8229 6869 8297 +6397 190 8127 10049 189 +6398 7053 8635 6356 8482 +6399 6472 8981 7527 8718 +6400 11308 7999 10217 7174 +6401 7631 10919 7025 8248 +6402 8775 8939 8604 7049 +6403 9366 8381 7298 11622 +6404 7373 8161 9200 11992 +6405 6950 9731 6309 8649 +6406 11200 8155 11822 7702 +6407 7858 8550 6456 9335 +6408 9815 7683 11633 8976 +6409 12042 7909 6809 10749 +6410 7138 8775 7049 8787 +6411 9185 8396 8681 7033 +6412 10011 6254 8631 10513 +6413 12006 6971 11823 8416 +6414 7577 8726 6718 10362 +6415 7829 10552 6408 9625 +6416 11483 153 154 10655 +6417 11501 11290 8142 9247 +6418 8342 6548 12021 8287 +6419 10217 7999 10469 6732 +6420 11978 6451 10535 8079 +6421 6828 11969 7889 10027 +6422 7716 8500 6752 10218 +6423 9537 6607 8743 9891 +6424 9409 10084 8759 7223 +6425 9199 134 135 10025 +6426 7420 8808 7134 9682 +6427 8239 6802 10839 8238 +6428 7639 8576 6688 10274 +6429 10038 8270 8765 6758 +6430 12150 7164 9963 8002 +6431 8901 6307 8372 10645 +6432 10485 8003 11956 7452 +6433 6842 8012 11097 8115 +6434 179 8409 10979 178 +6435 9138 7230 11892 9168 +6436 9767 8011 11540 6714 +6437 7356 9336 7121 9448 +6438 8438 6273 9742 10086 +6439 8219 9732 11284 8667 +6440 8836 8037 12189 6797 +6441 8933 12060 8564 6427 +6442 10143 7556 10471 8444 +6443 8644 7205 11039 9076 +6444 9518 6323 9122 8090 +6445 11272 8012 11544 8441 +6446 7064 8643 7708 10831 +6447 8483 7048 8640 8476 +6448 6652 8123 7140 9888 +6449 9309 6557 8639 9753 +6450 10098 10344 8884 7507 +6451 6829 10659 8001 11158 +6452 8152 6790 11720 8781 +6453 8618 6482 8789 10568 +6454 8610 10032 8132 7193 +6455 11342 6886 9373 8111 +6456 10485 7452 10722 8487 +6457 8568 6563 12152 8381 +6458 9746 6568 8581 7197 +6459 6467 10841 8175 8862 +6460 11978 8230 8909 9916 +6461 6395 10684 12075 8291 +6462 6266 9189 7918 10515 +6463 8376 6997 11810 8470 +6464 6659 10458 8075 12114 +6465 6779 10377 8367 10555 +6466 9680 8366 9727 8932 +6467 8455 10060 8854 6899 +6468 8030 11277 8325 7060 +6469 126 11348 7973 9312 +6470 8942 8108 9113 6958 +6471 8714 6459 10641 8178 +6472 9767 7104 10026 8011 +6473 8726 7577 8477 10339 +6474 9042 6623 8808 8222 +6475 10026 6474 10090 8011 +6476 10582 8559 8882 6860 +6477 9227 7359 9826 8411 +6478 9797 6439 8286 7619 +6479 9331 7365 8548 9742 +6480 8753 7061 12001 8631 +6481 9353 8035 12205 6817 +6482 8208 8990 8762 7073 +6483 9956 10013 8972 7469 +6484 9089 7748 11228 8141 +6485 6914 9894 8171 11898 +6486 11316 6983 9384 8839 +6487 8155 6345 8483 11578 +6488 7812 10176 6699 9975 +6489 8312 8225 11649 6397 +6490 8495 8226 11645 6312 +6491 11027 8104 10033 6804 +6492 7203 9572 6273 8438 +6493 8197 8524 7013 12144 +6494 8083 11588 6964 8677 +6495 8714 10273 6785 8149 +6496 11910 8277 7085 8276 +6497 6793 9733 7662 9257 +6498 7012 8197 6300 9612 +6499 9999 7584 11340 8406 +6500 8712 7082 10567 8196 +6501 6774 10763 8151 8893 +6502 8287 7015 11996 8342 +6503 10005 6773 9880 8246 +6504 8118 8622 9097 7103 +6505 11592 9011 11114 6812 +6506 7132 9173 6511 9582 +6507 7080 9861 11356 9394 +6508 7946 10954 6756 11173 +6509 7082 10496 7879 10567 +6510 9862 8528 9577 6285 +6511 10007 8032 10592 7209 +6512 10513 6996 9571 8457 +6513 193 194 11150 8463 +6514 8267 12046 7052 9585 +6515 12033 11085 6713 9474 +6516 8436 9784 7008 11762 +6517 9109 7477 11710 9014 +6518 9302 7068 10518 8060 +6519 8917 6993 8545 9575 +6520 6822 9994 7337 8316 +6521 6769 8663 10982 10174 +6522 6424 8144 7611 11046 +6523 10136 8040 10364 7395 +6524 7482 9137 8009 11188 +6525 8622 6906 12005 8308 +6526 9348 7114 9621 8125 +6527 8221 8719 9022 7232 +6528 7690 8942 6958 8463 +6529 9922 8384 9457 7047 +6530 8509 11648 6824 11411 +6531 10771 8999 10268 6382 +6532 8089 11043 7023 9202 +6533 6926 8638 6528 9148 +6534 11215 6436 10256 8134 +6535 6838 11580 8024 8621 +6536 9109 8251 9359 7083 +6537 7604 9976 7392 8842 +6538 8463 8801 192 193 +6539 7148 8897 6508 8852 +6540 9197 7280 8778 9349 +6541 10935 9859 11671 7975 +6542 10275 8047 11954 7406 +6543 8844 10350 10056 6266 +6544 7162 8912 7098 8625 +6545 8285 10456 10409 6870 +6546 11466 8125 11344 8599 +6547 7876 10473 6696 10014 +6548 12207 10122 7855 8637 +6549 8049 8772 6964 11588 +6550 7027 11019 8368 11052 +6551 8215 7663 11642 8216 +6552 9826 6286 12078 8328 +6553 9917 7400 9712 8797 +6554 8711 6470 10788 8259 +6555 9631 6251 10358 8048 +6556 6832 9165 7539 11338 +6557 11062 6985 10087 8173 +6558 11676 8874 8145 6795 +6559 8840 9925 9644 7154 +6560 8716 7087 11852 8394 +6561 7444 9589 6371 9068 +6562 11645 8226 11584 7814 +6563 10518 6426 11181 8060 +6564 8575 11610 7825 6275 +6565 10716 8352 9754 6290 +6566 10626 8131 11945 6315 +6567 7456 9160 6385 10648 +6568 10032 8610 10261 7703 +6569 8554 8050 10166 6415 +6570 8417 8670 11741 7009 +6571 8870 7208 10474 11204 +6572 8993 8085 10707 7576 +6573 6557 8916 7168 8639 +6574 10717 8054 10145 6552 +6575 11158 6240 11740 8307 +6576 7708 8643 7271 8806 +6577 8538 9412 9406 8568 +6578 10047 7435 8889 9674 +6579 8355 7768 10475 6483 +6580 7107 8845 7358 9305 +6581 8382 10655 154 155 +6582 8809 7305 8876 8907 +6583 6599 10188 7857 9156 +6584 12190 8082 11696 7940 +6585 6847 8833 8024 11580 +6586 9302 8060 10217 6732 +6587 11294 8493 9082 6844 +6588 10402 7035 9134 7887 +6589 9048 8136 10200 7228 +6590 7044 8781 11437 8921 +6591 8144 6424 11876 9263 +6592 11963 8388 11810 6997 +6593 6954 11319 8078 8868 +6594 6646 8533 7391 9739 +6595 9715 12038 11197 6675 +6596 10588 7657 8762 8527 +6597 6832 11468 7440 9165 +6598 7228 10200 7795 9371 +6599 10663 8418 11078 10606 +6600 6538 10540 11841 8523 +6601 10615 7853 9159 11462 +6602 9745 8262 8967 7018 +6603 10638 7808 8962 9938 +6604 9583 8451 10920 7155 +6605 6480 9377 11241 8735 +6606 8283 9412 8538 6504 +6607 8343 10368 6717 12268 +6608 10601 8132 10976 6817 +6609 10032 6500 10977 8132 +6610 6914 8406 11340 9894 +6611 7083 9359 10970 8872 +6612 7123 9581 7186 9934 +6613 10657 8072 10625 7446 +6614 10034 8150 11089 6960 +6615 6655 8898 7515 9687 +6616 7386 9308 6521 8752 +6617 10424 6693 9903 8249 +6618 8708 6683 11519 8072 +6619 10537 12124 10687 6819 +6620 6679 10412 7926 8785 +6621 6994 12019 11789 8666 +6622 10501 10150 11956 8405 +6623 10081 8405 11956 8003 +6624 9174 8552 195 196 +6625 8433 8664 10144 7163 +6626 8218 8877 11566 6407 +6627 6385 10571 7966 11480 +6628 6437 8665 7910 11152 +6629 10467 8167 10520 6318 +6630 8215 8216 7001 10978 +6631 7014 8485 6389 8698 +6632 11227 8424 9618 6994 +6633 11187 11090 6487 9015 +6634 6887 9304 12071 10530 +6635 11305 11961 7072 9533 +6636 9649 6788 10754 8466 +6637 6471 10343 9679 8389 +6638 8707 8168 11185 6830 +6639 9782 7643 11185 8168 +6640 7809 10061 7194 10177 +6641 8625 6668 11848 10934 +6642 10922 6660 9134 7821 +6643 8845 9846 9300 7358 +6644 6661 11660 8193 8827 +6645 9979 7744 11178 6327 +6646 7077 10198 7888 10184 +6647 8834 6918 11996 8334 +6648 8712 8196 9178 6491 +6649 9904 6729 8985 11109 +6650 6334 10224 11525 8153 +6651 9750 8669 8545 6993 +6652 9993 8804 9786 7064 +6653 11332 8342 11996 6918 +6654 10904 8162 11997 8250 +6655 8376 9916 10070 6516 +6656 12052 6781 10358 8201 +6657 6706 10276 7804 10028 +6658 11445 7019 11227 8124 +6659 8714 8149 11141 6459 +6660 8997 10843 10065 7606 +6661 9144 8147 11017 7067 +6662 10912 8078 11319 7248 +6663 162 163 9962 8089 +6664 10200 8136 9591 6246 +6665 6912 10519 7960 11077 +6666 8287 6999 8347 11970 +6667 8169 9193 7640 11298 +6668 10240 8081 10369 6496 +6669 9913 8375 12197 7326 +6670 6356 8635 7272 9292 +6671 8955 6560 11623 8248 +6672 9150 8184 9311 7063 +6673 8595 8596 10779 6902 +6674 7955 10014 6696 11398 +6675 10288 6805 9699 8213 +6676 8781 7044 11289 8152 +6677 8297 6869 9668 10187 +6678 7642 9789 6581 10402 +6679 9075 8847 11574 7316 +6680 8642 6261 10536 7962 +6681 8316 8924 11135 6822 +6682 8337 6893 8633 6443 +6683 11634 6682 9514 8289 +6684 11568 8294 9988 6426 +6685 12142 8334 11996 7015 +6686 11027 7680 10640 8104 +6687 7986 12008 8302 10774 +6688 11417 8534 8630 7095 +6689 8160 8543 10244 7318 +6690 10876 7278 9923 8605 +6691 8465 6558 10926 9851 +6692 10164 6478 9227 8411 +6693 7560 9999 11903 8802 +6694 9985 8264 10190 6472 +6695 6384 9586 8288 12223 +6696 6674 11034 7833 10834 +6697 11250 8116 10755 6452 +6698 8089 6920 8194 11043 +6699 6924 10435 7752 9686 +6700 8451 6999 8949 8948 +6701 11578 6810 11822 8155 +6702 8684 6549 12085 8351 +6703 11391 8627 6372 8143 +6704 7821 9002 6262 11082 +6705 8479 8669 12105 8692 +6706 8090 9122 10059 6880 +6707 10856 8766 8608 6622 +6708 6267 10634 7545 8324 +6709 11921 10443 9771 7954 +6710 6532 8615 7013 8524 +6711 8557 7070 11792 8177 +6712 10783 7444 9068 8371 +6713 7752 10435 10770 10589 +6714 8390 8438 10086 6861 +6715 6269 10839 7632 11122 +6716 6909 11320 12222 7720 +6717 9195 6284 8812 9743 +6718 10766 8414 11919 6479 +6719 6291 8834 8334 12142 +6720 11363 11511 8699 6504 +6721 10656 7911 11467 8266 +6722 7779 10308 7408 10354 +6723 6922 11219 8144 9263 +6724 9113 6338 11827 8104 +6725 9469 8098 10134 7371 +6726 10588 8527 10457 6754 +6727 8960 176 177 8566 +6728 6341 10701 7652 10825 +6729 10402 7887 10600 7642 +6730 10243 7616 10977 8532 +6731 8051 6862 11432 8198 +6732 8490 7087 8716 8852 +6733 8455 6899 8427 10800 +6734 9215 7312 10667 8117 +6735 10196 6473 10610 8650 +6736 10260 7472 11237 8092 +6737 7602 10238 7104 9767 +6738 6932 10104 10917 8475 +6739 9089 8141 12076 6340 +6740 7637 10754 7147 9026 +6741 8269 10196 7326 10347 +6742 9516 6801 10674 8122 +6743 7409 10062 6403 8374 +6744 9857 7382 11037 8022 +6745 8967 6522 9683 8562 +6746 9620 7284 10610 8102 +6747 9256 7351 8952 9685 +6748 9591 8136 10799 6896 +6749 8893 8378 10336 6774 +6750 7598 11131 6864 8540 +6751 11736 9989 8225 12094 +6752 8694 6647 9372 9997 +6753 8376 8989 12130 6997 +6754 9059 8271 11661 7002 +6755 7642 11728 7179 9789 +6756 8998 8571 166 167 +6757 8942 6636 10681 8108 +6758 7071 12049 8684 8351 +6759 11694 8061 9906 6492 +6760 10000 8209 6925 10750 +6761 11960 150 151 9543 +6762 9584 8454 10607 6535 +6763 10482 7686 7445 8383 +6764 9577 8205 11278 6285 +6765 8085 8993 6335 11927 +6766 9533 7072 9845 8139 +6767 9910 6556 8839 9384 +6768 10820 11429 8738 7029 +6769 12200 7308 9863 8094 +6770 6640 8582 7667 10486 +6771 6916 10611 8361 12101 +6772 9059 6312 11645 8271 +6773 7187 10255 7772 10960 +6774 8402 7245 8346 10874 +6775 10256 6825 10722 8134 +6776 8387 117 118 11695 +6777 8244 11395 7921 12126 +6778 9101 6277 8773 9498 +6779 11852 8393 12061 8394 +6780 9368 7019 11445 8322 +6781 11570 7865 10197 6406 +6782 8407 9172 8706 6564 +6783 11453 8217 11894 7536 +6784 9674 6535 10607 8121 +6785 11842 8621 8024 12099 +6786 6744 9919 7732 9660 +6787 6952 9899 10752 8236 +6788 9108 8488 9000 9288 +6789 8751 6913 11129 8421 +6790 7106 8794 7237 9020 +6791 9870 8118 11041 121 +6792 8119 10131 6346 11439 +6793 12148 8117 10667 6318 +6794 9988 8122 10674 7133 +6795 11104 7901 11746 9906 +6796 7917 10516 6700 9585 +6797 8941 11438 9775 7622 +6798 11027 6804 11980 8127 +6799 10152 12127 10359 8400 +6800 8771 11389 10979 8409 +6801 11571 8121 11019 7027 +6802 8206 10693 6978 11146 +6803 6467 8862 7396 8379 +6804 6748 9765 10768 8608 +6805 8361 11292 6534 12185 +6806 8479 8692 8770 6540 +6807 7917 10515 11678 6923 +6808 8697 10894 7709 11426 +6809 7237 9481 6514 9020 +6810 8684 8244 12126 6549 +6811 6498 10077 8152 11289 +6812 10151 6494 9595 8349 +6813 9865 7128 9512 7792 +6814 11200 6772 10862 8155 +6815 8186 11217 6835 9510 +6816 7259 8796 6369 9077 +6817 12173 10718 11582 8235 +6818 9496 7005 10723 8261 +6819 8150 9164 7068 11045 +6820 6993 8917 11050 9688 +6821 7653 10848 6700 8435 +6822 8862 8175 9815 6806 +6823 10028 7804 10423 7175 +6824 7486 10190 7350 9832 +6825 9702 8183 10464 7058 +6826 8016 11016 6773 11336 +6827 8580 11124 10815 6320 +6828 11413 9532 7034 8827 +6829 8318 12260 8501 7039 +6830 8923 8914 8530 7317 +6831 10991 6422 11167 8214 +6832 6289 10042 7479 9952 +6833 7503 10705 7598 8540 +6834 11215 8134 11867 7741 +6835 10817 8504 11556 7637 +6836 8374 6403 10615 9892 +6837 8687 6979 8354 9930 +6838 6918 8351 12085 11162 +6839 6705 9979 7727 10046 +6840 6321 8751 7093 8984 +6841 10618 8180 10906 6412 +6842 10433 8138 12011 7311 +6843 9319 7423 11316 8839 +6844 9000 7379 9991 8746 +6845 10616 8460 11193 6446 +6846 7634 9528 6329 10896 +6847 6449 9857 8022 11201 +6848 9029 7086 9716 8240 +6849 7526 10114 6658 9940 +6850 9171 6567 8792 9768 +6851 6748 8608 8766 7551 +6852 6325 10909 8071 10505 +6853 6796 9360 7761 8867 +6854 7050 9535 6572 8442 +6855 10221 8190 11435 7433 +6856 6314 11542 8019 11376 +6857 9164 8150 10034 6315 +6858 8908 6558 9538 11393 +6859 6963 11941 8231 10023 +6860 9359 8251 11450 6791 +6861 8751 8421 12271 7093 +6862 11518 8803 9068 6371 +6863 8371 9068 8803 7239 +6864 8931 6396 11869 8111 +6865 7161 9656 7469 8972 +6866 8102 6768 11882 9620 +6867 6972 10867 12137 8749 +6868 10883 6520 8886 8887 +6869 9056 7260 8811 9372 +6870 7517 10251 11604 8756 +6871 9045 6585 9984 8242 +6872 9229 9676 8871 6569 +6873 12122 8154 10700 6753 +6874 10005 8246 11042 7448 +6875 9877 8730 9882 7763 +6876 10359 7108 9471 8400 +6877 9496 11626 11246 7005 +6878 6540 8953 7161 8479 +6879 7972 11160 7345 10351 +6880 12142 7015 10576 8184 +6881 10680 12042 10109 6502 +6882 9761 6322 10294 8437 +6883 8085 11927 8654 7037 +6884 8534 7062 8753 8630 +6885 7354 10546 6256 8480 +6886 10991 8214 10683 7757 +6887 8274 10943 6853 10553 +6888 7645 10805 6670 9007 +6889 10944 8408 11496 6846 +6890 9525 8619 10396 7081 +6891 7611 10199 6666 10814 +6892 6766 11801 8260 8710 +6893 7171 9972 8108 10681 +6894 10467 7519 10793 8167 +6895 9144 6664 10257 8147 +6896 11648 8509 11766 7945 +6897 6371 10797 7797 11518 +6898 8893 8151 10181 6409 +6899 9691 7141 10554 8161 +6900 7393 9776 6274 9480 +6901 9918 8853 9969 6537 +6902 9553 8612 11863 6465 +6903 9045 8242 9862 7231 +6904 10906 8180 11295 7513 +6905 10215 8439 12073 7930 +6906 7735 6249 8517 10824 +6907 8280 7062 8534 11659 +6908 7048 8483 6345 8977 +6909 8872 9285 10880 7494 +6910 7296 9321 6353 9513 +6911 9617 6611 9771 8548 +6912 10700 8154 11021 7428 +6913 6741 8174 6257 8573 +6914 6245 8651 7938 10193 +6915 8503 7569 10160 9837 +6916 7180 11546 8521 9390 +6917 6260 11264 8208 9323 +6918 9427 7091 9733 8265 +6919 9200 8161 10554 6339 +6920 7994 9058 9393 6573 +6921 7701 9184 6393 10544 +6922 8233 6839 11281 8750 +6923 7913 7525 8602 10437 +6924 6919 8511 7598 10930 +6925 6891 8790 7308 8723 +6926 8665 12162 8205 6931 +6927 8654 8783 8770 7096 +6928 6611 10877 7954 9771 +6929 8729 8173 10087 6358 +6930 8986 9009 12021 6548 +6931 11920 8133 10100 6243 +6932 8913 9838 8878 9229 +6933 11223 6405 10778 8247 +6934 9209 11403 7453 10593 +6935 7106 9020 6514 9155 +6936 7917 6923 12048 10516 +6937 6555 11277 8030 11246 +6938 8373 9018 6772 11084 +6939 6247 8830 7085 8277 +6940 8464 8788 11004 6258 +6941 8809 9467 10254 7305 +6942 6620 9454 7253 8674 +6943 6396 10506 8174 11203 +6944 7822 11614 6596 9900 +6945 10424 8249 10302 7475 +6946 9104 6703 11785 8433 +6947 6517 8709 11726 12026 +6948 7653 8435 11616 10374 +6949 8561 9831 7190 11864 +6950 7573 9572 7203 9624 +6951 7308 10259 7897 9863 +6952 9795 7570 11278 8205 +6953 6918 11162 7936 11332 +6954 7927 10390 6287 10503 +6955 7683 10986 6329 9528 +6956 9337 9437 8950 7330 +6957 8161 7373 9566 10725 +6958 12074 7987 8448 10662 +6959 10307 7343 11267 8183 +6960 7708 8806 6882 10618 +6961 8500 7716 11759 7837 +6962 8557 8177 10377 6779 +6963 7808 11206 6854 8962 +6964 6584 8778 7280 9298 +6965 11299 10166 8050 11987 +6966 7476 9351 6512 10128 +6967 8260 11723 11832 6942 +6968 9408 9527 8796 7259 +6969 7445 6511 9173 7760 +6970 9404 6804 10033 8399 +6971 11246 11626 12188 6555 +6972 7180 9390 7082 8712 +6973 9599 6323 10485 8487 +6974 6761 9763 7809 11198 +6975 8865 7110 9429 8983 +6976 7131 9338 7223 8759 +6977 9099 7041 11825 8636 +6978 7546 9926 7336 10175 +6979 7677 10517 6293 10125 +6980 7061 8711 8259 12001 +6981 7753 11064 6796 8867 +6982 9352 9195 8888 7191 +6983 8770 8783 8794 7106 +6984 9488 8794 8783 6335 +6985 8184 9150 6291 12142 +6986 11800 10318 7492 9839 +6987 8572 10605 8698 6389 +6988 9377 7100 9718 8315 +6989 8716 6346 8956 10239 +6990 7100 10465 11652 8922 +6991 7125 8849 6530 8798 +6992 11915 7877 11211 6243 +6993 10882 8457 9571 6527 +6994 10257 8180 10618 6882 +6995 10094 7784 9967 7127 +6996 10401 6712 11057 8282 +6997 8473 6614 9790 8597 +6998 8800 8604 8939 7111 +6999 11870 8897 8640 7048 +7000 6528 10456 8285 10454 +7001 10445 7976 8355 6483 +7002 8043 8729 7090 12053 +7003 9695 8227 11115 7169 +7004 7148 10239 7891 10853 +7005 8676 10419 7794 11774 +7006 8654 7096 10846 7037 +7007 12187 10468 6725 8266 +7008 8973 7172 10229 8187 +7009 7410 12176 8344 10594 +7010 8085 7037 8373 10994 +7011 6540 8787 7049 8953 +7012 8545 8669 8479 9111 +7013 9798 7133 10674 8199 +7014 11008 6910 10989 8624 +7015 10951 6676 9186 8392 +7016 8130 6949 11095 8649 +7017 10116 6630 9246 10595 +7018 8461 6283 11108 7143 +7019 6432 7578 11655 7993 +7020 8123 11012 9700 7140 +7021 9599 8487 10317 7459 +7022 8674 9551 9336 6620 +7023 7106 9155 7138 8787 +7024 7493 9774 11136 10570 +7025 7513 9328 7841 10608 +7026 8206 11146 12133 6890 +7027 9153 7344 10088 6879 +7028 8215 11078 8418 7663 +7029 185 8895 10578 184 +7030 12145 8234 12032 6515 +7031 9513 8864 9255 7296 +7032 7154 9561 7636 10248 +7033 7105 9623 7389 9062 +7034 9695 6365 9945 8227 +7035 8641 6410 10957 8013 +7036 9119 6400 11138 8195 +7037 7440 11003 6377 9165 +7038 6792 10866 8043 9723 +7039 12006 8416 10786 8053 +7040 6939 8505 10683 8214 +7041 11312 9189 11219 6922 +7042 9042 8222 11004 7042 +7043 7302 9351 7476 9194 +7044 8306 11889 6986 9227 +7045 7120 8863 6530 8849 +7046 9559 8221 11381 7011 +7047 9177 8370 10094 7127 +7048 9721 7462 10590 8331 +7049 10221 6263 9605 8190 +7050 7604 11936 8313 9976 +7051 8772 8682 11105 6964 +7052 8275 11960 9543 6895 +7053 10148 10528 9107 7427 +7054 10048 8516 11572 7542 +7055 11306 8827 7034 10311 +7056 11766 8509 11250 6452 +7057 10164 7799 11700 8338 +7058 9770 8567 11995 7431 +7059 6421 8987 7597 9019 +7060 11733 7516 8575 6275 +7061 8071 7240 7836 10505 +7062 12008 8388 11963 6834 +7063 8637 6552 10145 10851 +7064 7307 8773 6277 9477 +7065 7243 9163 6607 9537 +7066 9549 8199 10674 6801 +7067 8971 10910 7827 12090 +7068 10697 8389 9679 6854 +7069 7736 9328 6664 10604 +7070 8459 10813 11079 6493 +7071 8090 11438 7045 9518 +7072 12012 11001 7024 9434 +7073 8647 7182 10800 8427 +7074 6463 12128 8275 8968 +7075 8839 6556 7057 9319 +7076 7734 9913 7326 10196 +7077 7512 11573 9457 8384 +7078 7700 10368 7505 10775 +7079 9679 7314 11148 11341 +7080 7255 8743 6607 9446 +7081 9186 6676 12157 7989 +7082 7612 10413 6648 8757 +7083 9371 6545 9978 8235 +7084 7545 10826 11783 8324 +7085 10902 7447 11452 8563 +7086 11096 8196 10567 6843 +7087 11641 9600 6374 11279 +7088 6266 10515 7917 10669 +7089 8376 6516 11750 8989 +7090 8820 8228 11750 8821 +7091 8088 9357 9660 7039 +7092 10040 7506 9251 10522 +7093 8451 9583 8347 6999 +7094 8194 9102 11026 6436 +7095 9595 6495 9494 8349 +7096 8877 8218 10288 7144 +7097 9856 8297 10187 6868 +7098 12091 7716 10218 10019 +7099 9029 8240 11063 7655 +7100 8159 10380 6859 11463 +7101 7800 9133 12044 8655 +7102 8659 8788 9181 8542 +7103 139 8468 7133 9798 +7104 7120 8849 7125 8850 +7105 8835 8709 11756 6866 +7106 7147 10754 6788 9515 +7107 8401 128 129 11612 +7108 7501 9625 6408 9250 +7109 8496 10863 7776 7003 +7110 7236 9070 6621 9708 +7111 10143 8444 10966 6673 +7112 9470 7165 10490 7767 +7113 7310 8744 6626 8846 +7114 8808 7420 10110 8222 +7115 6484 11628 7985 10858 +7116 7801 11661 8271 10416 +7117 183 8301 9792 182 +7118 10637 11365 9898 7178 +7119 7417 11977 9061 8224 +7120 7404 10262 7892 9929 +7121 8571 6995 8315 9732 +7122 9166 6313 11492 8311 +7123 8757 6648 10802 8728 +7124 10898 7914 10189 6771 +7125 8415 10027 7889 11703 +7126 7227 9135 6569 8871 +7127 8860 10635 7743 11877 +7128 6581 10400 7956 11202 +7129 9313 9636 8957 7341 +7130 7046 9076 11891 10912 +7131 7343 8817 11814 9510 +7132 9193 6819 10687 8547 +7133 11285 8323 9716 7086 +7134 8381 12152 8535 7298 +7135 8866 7121 9206 9554 +7136 10470 7938 11297 6785 +7137 6291 9150 7593 8755 +7138 12165 8341 11672 6462 +7139 8833 6847 11991 8403 +7140 7253 8792 6567 9369 +7141 9754 8352 11485 6980 +7142 7692 10072 7022 9547 +7143 9428 8245 10016 7091 +7144 11294 8110 12155 8493 +7145 8311 7003 8814 9166 +7146 8652 9721 8331 7342 +7147 11543 8158 9825 6328 +7148 6253 10091 7212 8348 +7149 10763 8673 8613 6428 +7150 10212 6992 9736 8337 +7151 8464 8577 9181 8788 +7152 6881 9992 7871 11144 +7153 10811 7935 11830 8372 +7154 6583 9103 7167 8776 +7155 6696 9258 7703 10261 +7156 8941 6463 11397 8303 +7157 6894 8013 10957 8480 +7158 12055 6516 10070 8241 +7159 11793 7203 11100 8252 +7160 8208 7024 10631 8990 +7161 9382 8472 10723 7005 +7162 9481 7237 8940 8776 +7163 7128 9865 11145 7755 +7164 10968 8257 12206 6738 +7165 8617 6953 11734 8162 +7166 8770 8692 8980 7096 +7167 6247 10076 7932 8830 +7168 7762 9006 8146 11335 +7169 9945 6903 10219 8227 +7170 8686 7384 10126 8687 +7171 7761 6326 11493 8420 +7172 9796 10120 9291 7502 +7173 8790 7949 11186 6651 +7174 9721 8652 11804 6453 +7175 6404 8601 10487 10488 +7176 6564 8943 12081 8407 +7177 11351 8565 9127 7021 +7178 8943 9965 9714 7041 +7179 8818 6780 12040 8201 +7180 11384 12242 8997 7089 +7181 6258 11466 6966 8464 +7182 9336 7356 9835 8748 +7183 11818 7973 11348 9720 +7184 10688 6240 11349 8076 +7185 12081 7189 9536 8407 +7186 11609 8526 9333 6476 +7187 8001 7056 8584 10178 +7188 8685 10729 7449 10219 +7189 9427 8265 11169 6587 +7190 9733 6793 11170 8265 +7191 12021 9009 7077 8949 +7192 12148 6318 10520 8531 +7193 6400 11935 7674 10155 +7194 6587 9505 7491 9427 +7195 9904 8325 10801 7306 +7196 10401 8282 11949 7659 +7197 11961 12128 8570 7072 +7198 7376 11232 7964 8638 +7199 9984 6948 11048 8242 +7200 7380 9339 6597 9188 +7201 9716 6490 11353 8240 +7202 188 8822 11488 187 +7203 8914 7131 9513 8530 +7204 7258 10203 7781 9778 +7205 8754 7541 10379 9015 +7206 11647 6404 10488 8327 +7207 10519 6912 9826 8328 +7208 7434 9615 6373 9964 +7209 8556 9651 9968 7021 +7210 9496 6709 10103 11626 +7211 9352 7338 8838 9524 +7212 7994 6573 8585 12049 +7213 7316 9103 6583 9075 +7214 8192 6839 8233 7185 +7215 8373 7037 10846 9018 +7216 6778 9335 7026 10511 +7217 8118 7103 9317 11041 +7218 12209 7056 11352 8541 +7219 6300 10165 7610 9612 +7220 8491 9379 8558 6929 +7221 6815 12207 8017 8536 +7222 11714 6845 9671 8446 +7223 6590 9278 7225 8838 +7224 7351 9445 6360 8952 +7225 12036 11430 6976 8996 +7226 10302 6308 9252 8176 +7227 9229 6569 8888 8913 +7228 8463 6958 10640 8801 +7229 9092 8644 9076 7046 +7230 9880 7205 11042 8246 +7231 8894 9418 8798 6530 +7232 8027 6574 8448 10067 +7233 6484 10858 7925 11470 +7234 8172 8515 11712 6885 +7235 11821 6543 9181 8577 +7236 8596 8595 8961 6551 +7237 10616 7892 10553 7372 +7238 8888 7145 8915 8913 +7239 9460 6917 10767 8234 +7240 8191 8826 8717 6743 +7241 11506 7318 10244 7931 +7242 7062 9538 6558 8465 +7243 9748 8589 10311 7034 +7244 8807 6541 9947 9062 +7245 11373 12053 9025 6546 +7246 6329 10986 7984 9787 +7247 11272 8441 12085 6549 +7248 7783 7207 8784 11257 +7249 7075 8250 10182 8129 +7250 9371 8235 11582 7228 +7251 7424 9410 7425 8883 +7252 6351 8905 7389 9623 +7253 8486 7475 10650 9246 +7254 10594 8344 9605 6263 +7255 11553 8154 12122 9270 +7256 11941 8546 11792 7070 +7257 9398 7403 9034 9852 +7258 11517 10870 9921 8031 +7259 6332 9094 9912 10671 +7260 6416 11134 7933 9061 +7261 10196 8269 11087 6473 +7262 9813 7120 8850 9132 +7263 10384 8348 11595 6943 +7264 7185 8233 12182 9951 +7265 6897 8217 12255 8632 +7266 7991 10458 6659 10173 +7267 9428 6292 10873 8245 +7268 8319 6644 10117 10728 +7269 8518 8359 9785 6896 +7270 6979 12091 10019 8354 +7271 7594 10958 8782 7118 +7272 11530 6254 10011 8321 +7273 11087 8269 11074 7559 +7274 7634 9340 6501 10599 +7275 7401 9574 6686 10420 +7276 8906 6497 9618 8424 +7277 11677 9803 6448 11495 +7278 7327 9170 7158 9081 +7279 8006 11323 6901 8595 +7280 9650 6719 10683 8505 +7281 9486 10366 11775 6815 +7282 9455 7352 9052 9756 +7283 8636 9001 8946 7177 +7284 7937 11487 6899 8854 +7285 8906 8252 11100 6497 +7286 12008 7986 11985 8388 +7287 7282 9659 7110 9438 +7288 8585 7006 8684 12049 +7289 9991 8263 12218 7457 +7290 7403 9725 6628 9034 +7291 6519 9356 7294 9355 +7292 8836 6797 11132 8243 +7293 9171 8920 9057 7183 +7294 7490 8172 12096 10675 +7295 7071 8351 6918 8834 +7296 6678 10207 8077 9342 +7297 6322 8086 10730 9867 +7298 8863 9080 8894 6530 +7299 9248 8532 10977 6500 +7300 11110 6655 9687 11627 +7301 7553 10406 7190 9831 +7302 8030 9382 7005 11246 +7303 7585 10058 6762 11238 +7304 10294 8574 8573 7398 +7305 9944 7199 8591 9724 +7306 8698 10605 11504 7689 +7307 6706 11066 7364 10961 +7308 8320 6911 8344 12176 +7309 8369 9589 8462 7402 +7310 9875 7284 11337 8428 +7311 6569 9135 7191 8888 +7312 10785 6763 10708 8380 +7313 8449 6588 8934 9659 +7314 9744 8248 11623 7485 +7315 8842 7392 11147 8062 +7316 6982 10533 8077 10207 +7317 10190 8264 11168 7350 +7318 10259 6651 11325 7898 +7319 9486 7498 10926 10366 +7320 6296 9593 7465 8909 +7321 8463 11150 8552 7690 +7322 9105 8611 9369 6567 +7323 144 145 9557 8671 +7324 6333 9192 7841 11157 +7325 8346 7245 11986 10941 +7326 6786 8725 7295 9084 +7327 8604 8964 8953 7049 +7328 7760 9173 6252 10844 +7329 6822 10081 7045 8303 +7330 10512 7129 8742 11473 +7331 8400 9471 9505 6587 +7332 7678 10566 11643 9016 +7333 6849 8815 6410 8641 +7334 6950 9769 6503 9731 +7335 7954 10877 7436 10021 +7336 8800 7111 9080 8863 +7337 11568 6426 10518 7972 +7338 9967 8129 10182 7127 +7339 10010 9360 11820 6890 +7340 6830 11092 10376 8707 +7341 8967 8262 10372 6522 +7342 9958 7753 8867 10375 +7343 6791 11602 8164 9359 +7344 6840 9055 8004 11395 +7345 7183 9105 6567 9171 +7346 8796 9527 8797 7107 +7347 9745 9050 11665 8262 +7348 7687 9755 11590 10504 +7349 7325 9219 6354 9223 +7350 8906 7450 11793 8252 +7351 9200 8419 11905 6954 +7352 11937 6819 9193 8169 +7353 7914 10100 7534 10495 +7354 8442 6572 11059 9889 +7355 8939 8775 9089 6340 +7356 7260 9187 6355 9254 +7357 6751 9247 8142 10796 +7358 7363 9334 6637 9483 +7359 8000 9357 11737 6302 +7360 8278 6468 11873 8413 +7361 10516 10340 8435 6700 +7362 10199 11219 9189 7875 +7363 8491 6929 12258 8492 +7364 10158 6831 9499 11337 +7365 8172 7490 11563 8515 +7366 8659 8542 12271 6489 +7367 11292 8273 9324 6534 +7368 9745 6563 8568 9406 +7369 7991 11752 6430 11259 +7370 10462 7478 11315 8258 +7371 6739 10824 8517 11270 +7372 8662 7194 11180 8292 +7373 8137 7079 8793 10459 +7374 8937 10632 10965 6316 +7375 10252 7443 10282 9689 +7376 7070 11643 8231 11941 +7377 12197 6246 11033 8272 +7378 10672 7618 9373 6886 +7379 7429 9483 6637 9961 +7380 8847 9075 9887 7092 +7381 7697 8893 6409 11251 +7382 7243 9587 7427 9107 +7383 8765 8270 10899 7501 +7384 7844 11407 7004 9426 +7385 8797 9712 8845 7107 +7386 7397 9545 6623 9042 +7387 6915 8896 7982 11541 +7388 9091 8374 9892 6965 +7389 6335 8993 7115 9488 +7390 7310 8846 8186 11410 +7391 7502 9291 7238 10069 +7392 12028 6245 10193 8826 +7393 9659 7282 9711 8449 +7394 6815 8536 6984 9486 +7395 8399 11448 7762 9404 +7396 7139 8333 9911 8044 +7397 7374 9781 6627 9681 +7398 9037 8811 9057 8920 +7399 9141 9237 8988 7229 +7400 8092 11356 6428 10260 +7401 8927 6731 11639 8379 +7402 7231 9131 7184 9045 +7403 8140 9182 9419 7257 +7404 7924 11695 118 119 +7405 7041 9099 6348 8861 +7406 10038 7474 12250 8270 +7407 11944 6830 11185 8843 +7408 6429 10687 12124 7920 +7409 8371 6525 8938 10783 +7410 7244 9240 10862 8034 +7411 10813 8459 11617 7899 +7412 10004 8452 11684 6959 +7413 7844 10886 6539 9182 +7414 8747 7155 11422 9025 +7415 6339 10554 9766 8508 +7416 8213 7097 11684 8452 +7417 10697 10405 6471 8389 +7418 7996 11777 8459 6493 +7419 6865 9594 11270 8517 +7420 12045 6327 8560 9581 +7421 10659 6829 8131 10626 +7422 8895 185 186 9522 +7423 6820 8786 10055 8358 +7424 10144 11683 9734 7163 +7425 8573 8574 11965 6741 +7426 9334 7363 9482 9033 +7427 8316 7337 10247 11486 +7428 8779 8535 12152 6563 +7429 8638 7964 10456 6528 +7430 12248 12022 7970 9666 +7431 8798 8799 8969 7125 +7432 7139 8362 11274 8113 +7433 7200 8983 6277 9101 +7434 10347 8272 11033 6799 +7435 11711 8501 12260 6481 +7436 8723 6326 10010 8553 +7437 12165 6462 11039 8299 +7438 11714 8446 11955 7859 +7439 9379 8491 10213 6486 +7440 9460 7422 10057 8697 +7441 10894 8697 10057 6297 +7442 9964 8701 9462 7434 +7443 8852 6508 12203 8490 +7444 10117 7407 12223 8288 +7445 8811 7260 9254 9057 +7446 6864 7911 10656 8540 +7447 12217 7426 8629 8628 +7448 10164 8338 11394 6478 +7449 10010 6890 12133 8553 +7450 11057 7678 10832 8282 +7451 8109 11384 8492 6441 +7452 10237 6419 9958 8398 +7453 10375 7306 8398 9958 +7454 11376 8019 10710 8699 +7455 9166 7438 12237 6313 +7456 9225 12068 10051 7411 +7457 7491 9428 7091 9427 +7458 7071 10133 7994 12049 +7459 7142 12196 11531 9808 +7460 10608 8292 10906 7513 +7461 12154 8813 10521 8220 +7462 10338 6716 8567 9770 +7463 10752 9899 9218 6392 +7464 9022 8719 9621 7114 +7465 11289 7044 11393 8280 +7466 9680 6399 11291 8366 +7467 6543 11821 7961 11523 +7468 11889 8306 10993 7239 +7469 9785 8359 10240 6496 +7470 9605 7376 11276 8190 +7471 10155 8229 11138 6400 +7472 8140 10018 6387 11407 +7473 7394 9487 7242 9391 +7474 8634 8870 11995 6324 +7475 9111 6317 9575 8545 +7476 7381 9454 6620 9492 +7477 7006 8899 11902 8445 +7478 9708 8894 9080 7236 +7479 7800 9073 11594 9530 +7480 7198 9306 7335 9130 +7481 8335 7126 9418 8974 +7482 7939 9327 7213 9707 +7483 11037 7382 11863 8612 +7484 9697 7351 9256 9814 +7485 9079 11846 7782 11249 +7486 6913 11265 7868 9823 +7487 9948 7458 9698 8885 +7488 8207 8393 9881 11534 +7489 8557 11387 6394 9016 +7490 8985 6729 11358 8420 +7491 9951 8387 10724 7185 +7492 9283 9526 9124 7286 +7493 9205 9434 8065 11378 +7494 10232 7894 12079 8478 +7495 6823 9764 12017 10541 +7496 9388 8503 9837 7321 +7497 10089 6241 9935 8358 +7498 10021 8450 11921 7954 +7499 7678 11057 7158 10566 +7500 9546 9038 9135 7227 +7501 6997 12130 8202 11963 +7502 9590 7478 11650 8295 +7503 8751 8339 11265 6913 +7504 11711 7896 10712 8501 +7505 7217 8791 6938 10129 +7506 11788 6434 12270 8511 +7507 11651 8445 11902 6336 +7508 9070 7236 9236 8992 +7509 7736 11157 7841 9328 +7510 10825 9132 8850 6341 +7511 6276 9564 7330 8950 +7512 7153 9192 6333 8820 +7513 11536 7348 11958 8647 +7514 10813 7899 10221 7433 +7515 9029 6694 11790 10918 +7516 7907 9614 11725 6967 +7517 8655 6305 9073 7800 +7518 6247 9216 10095 7646 +7519 10842 8679 9385 7641 +7520 9190 7259 9077 9232 +7521 8701 6628 9116 9462 +7522 8126 11875 8747 7090 +7523 9528 7634 10599 9078 +7524 8856 9050 9745 9406 +7525 8659 8314 11953 7042 +7526 8295 10628 7623 9590 +7527 8247 6909 9563 7854 +7528 9612 7610 11142 8397 +7529 6298 10822 11831 8332 +7530 11782 8068 10139 11414 +7531 8357 6944 11290 11501 +7532 6730 10586 7714 9048 +7533 8776 8940 9417 6583 +7534 6349 10238 7602 9946 +7535 10611 6916 12056 8471 +7536 8863 7120 9813 8800 +7537 11411 8310 11156 7040 +7538 11841 6874 10792 8523 +7539 11505 6863 8256 6733 +7540 9227 6478 11859 8306 +7541 8606 12087 7468 10412 +7542 10222 6637 9334 10644 +7543 8109 10203 7258 11236 +7544 7111 9236 7236 9080 +7545 9222 8423 11761 6440 +7546 8865 11966 9536 6521 +7547 11790 8401 11612 10918 +7548 11702 6632 9651 8556 +7549 8151 7080 10537 10181 +7550 8966 10737 7947 12019 +7551 9759 10173 6659 11232 +7552 7481 11156 8310 10224 +7553 10051 8475 12009 7411 +7554 7573 10258 7400 10101 +7555 11093 8377 11700 7799 +7556 9096 9037 9131 7231 +7557 11201 7007 9844 8326 +7558 9124 9241 9093 7225 +7559 9492 6620 9336 8748 +7560 7613 8400 6587 11169 +7561 7791 10551 6652 9888 +7562 139 140 9980 8468 +7563 9718 7100 8922 10815 +7564 6311 8128 12163 8481 +7565 8507 8508 9766 6888 +7566 7812 9700 6408 10552 +7567 9532 11413 11653 8767 +7568 12197 8375 11444 6246 +7569 8376 8470 11978 9916 +7570 9998 7560 10893 8600 +7571 8219 10942 8571 9732 +7572 8987 7898 11325 7202 +7573 10473 8598 10760 7156 +7574 11123 8312 11999 7313 +7575 6626 8744 7309 10146 +7576 7466 9752 7320 9264 +7577 6351 8907 11381 9642 +7578 8286 6439 8696 10619 +7579 9850 7031 10881 7521 +7580 9524 6284 9195 9352 +7581 10786 8416 11680 6486 +7582 7866 10645 7129 10512 +7583 11671 8456 11890 6957 +7584 9671 7140 9975 8446 +7585 9498 7248 9172 9101 +7586 8407 7200 9101 9172 +7587 11338 11762 7008 8945 +7588 137 9549 11748 136 +7589 11632 9233 10462 6447 +7590 6521 9308 7282 9438 +7591 9315 9507 9143 7285 +7592 11214 6510 10704 8734 +7593 9005 8920 9171 9768 +7594 7860 146 147 11159 +7595 6271 9409 7223 9982 +7596 7107 9305 6369 8796 +7597 8251 9680 7884 11450 +7598 6412 10831 7708 10618 +7599 11684 8319 10728 6959 +7600 6962 8409 179 11630 +7601 6557 9309 7358 9300 +7602 10292 6543 11523 8391 +7603 8140 7257 10222 10018 +7604 7043 10097 8338 11700 +7605 6717 12011 8138 8995 +7606 8621 8360 12062 6838 +7607 8465 9851 8711 7061 +7608 6375 10227 7506 9461 +7609 8054 10717 7487 11585 +7610 9314 9464 9021 7315 +7611 8847 7092 9349 8778 +7612 8751 6321 11106 8339 +7613 8681 8396 11522 6704 +7614 8634 8066 10940 6802 +7615 11553 9270 10149 7266 +7616 9374 7287 9128 9423 +7617 6247 8277 10805 9216 +7618 8283 7517 10542 9412 +7619 8850 7125 8969 8879 +7620 7225 9278 7286 9124 +7621 8930 6450 10563 8599 +7622 6994 8666 8124 11227 +7623 9492 8748 9835 7290 +7624 9493 6354 9004 9675 +7625 9041 6586 9391 9288 +7626 8721 8722 8837 6372 +7627 8401 7058 11818 9720 +7628 9705 6375 9461 10180 +7629 10903 8112 12179 6875 +7630 9036 9871 9681 6627 +7631 8518 7136 10240 8359 +7632 10125 6293 10658 8434 +7633 11469 8323 10734 7717 +7634 11974 8453 7531 9284 +7635 7206 9105 7183 9039 +7636 9017 7167 9103 9287 +7637 10060 8455 10909 6325 +7638 8631 6254 8630 8753 +7639 11075 9592 8617 7441 +7640 9000 9355 9041 9288 +7641 9117 9041 9355 7294 +7642 10741 6595 9820 8014 +7643 9465 8450 11803 7789 +7644 9004 7184 9131 9005 +7645 6364 9185 7497 9722 +7646 9940 9293 9950 7526 +7647 8878 7187 9676 9229 +7648 10006 7493 10795 8422 +7649 8930 8422 10795 6450 +7650 6518 9338 7131 8914 +7651 9046 7055 9544 11132 +7652 9160 7456 10338 9770 +7653 9011 11303 6512 9351 +7654 8762 6598 11646 8527 +7655 9776 7393 9551 8674 +7656 6600 9630 7566 9228 +7657 7249 9669 7394 9539 +7658 8585 9664 8899 7006 +7659 11171 8956 6346 10131 +7660 7447 10902 7715 9299 +7661 8914 8923 10309 6518 +7662 9021 6369 9305 9466 +7663 8071 8603 10721 7240 +7664 7115 8993 7576 10309 +7665 8604 6524 9656 8964 +7666 6894 8165 11923 8013 +7667 8812 7204 9098 9117 +7668 9041 9117 9098 6586 +7669 8468 8936 9988 7133 +7670 9337 6604 10314 9437 +7671 9037 7159 9372 8811 +7672 11292 8361 10611 6998 +7673 10458 7564 10688 8075 +7674 6366 9459 7333 9242 +7675 11488 8822 9960 7813 +7676 8746 9822 8915 6519 +7677 9508 8957 9479 6619 +7678 10987 10137 9559 7011 +7679 8639 7168 9806 9221 +7680 9295 10287 9707 9956 +7681 9154 10974 10491 7522 +7682 11501 7774 11440 8357 +7683 9005 9131 9037 8920 +7684 8883 7425 9259 9955 +7685 8213 8452 10004 6448 +7686 8213 9699 10873 7097 +7687 7219 9416 7567 9066 +7688 10582 7787 11848 8559 +7689 9727 8366 11074 6799 +7690 10317 8487 10722 6825 +7691 9314 9012 9500 6618 +7692 6340 9236 7111 8939 +7693 10371 8563 11452 6663 +7694 8318 11973 7117 9827 +7695 11361 7966 10571 7682 +7696 7169 8661 6948 9696 +7697 9617 9074 9632 6611 +7698 9015 6487 11838 8754 +7699 8548 7365 9051 9617 +7700 6414 9606 8070 11327 +7701 11308 7174 8468 9980 +7702 11741 6643 10661 8364 +7703 10835 7965 6795 8203 +7704 8799 8798 9418 7126 +7705 7647 9082 9857 11464 +7706 9367 7135 9990 9191 +7707 10106 9419 9182 6539 +7708 8585 6573 12127 9664 +7709 9566 7373 11672 8341 +7710 6645 10107 11831 8831 +7711 9012 9616 9507 7303 +7712 9788 7369 9365 9794 +7713 7126 8978 6531 8799 +7714 10378 7336 9926 8758 +7715 8230 11370 6296 8909 +7716 6744 9137 7482 9919 +7717 6460 10939 8543 8160 +7718 9417 8940 9488 7115 +7719 9785 6496 9598 8932 +7720 6894 8480 6256 10988 +7721 6993 9688 7244 9750 +7722 9151 9318 9276 6594 +7723 11771 8499 7245 8402 +7724 7274 9421 6600 9361 +7725 8117 11430 7847 9215 +7726 10389 6977 9909 8365 +7727 9942 10995 12110 8353 +7728 6651 11186 8350 11325 +7729 10294 7398 10963 8437 +7730 9410 8628 8629 7425 +7731 9626 7101 11096 8739 +7732 8136 9048 7714 10799 +7733 6717 10368 7700 9489 +7734 11231 8086 11350 6947 +7735 7381 8792 7253 9454 +7736 8881 9149 11115 7449 +7737 11140 7281 10871 8249 +7738 9378 9142 9213 7254 +7739 8903 8339 11106 7448 +7740 9072 8866 9554 7276 +7741 9961 8959 9430 7429 +7742 9481 10266 10020 6514 +7743 8744 9217 10071 7309 +7744 9421 7274 9280 9146 +7745 10786 6486 10213 8645 +7746 8988 9145 9204 7233 +7747 9188 6597 9673 9817 +7748 9448 6366 9242 9613 +7749 6354 9219 7184 9004 +7750 9826 6912 10164 8411 +7751 7222 9212 7251 9151 +7752 6614 8473 7523 11072 +7753 7451 9253 6633 9760 +7754 9145 8988 9237 6575 +7755 9179 7229 9322 9031 +7756 9268 6388 9031 9322 +7757 8670 7020 11511 8855 +7758 8426 11253 6550 11844 +7759 7433 8211 11079 10813 +7760 7354 8480 10957 9719 +7761 9092 7046 9498 8773 +7762 10008 7209 10592 8385 +7763 6457 8164 9937 12166 +7764 8436 7538 7941 11539 +7765 8097 8560 6327 11178 +7766 10422 6469 11532 8415 +7767 9942 8353 11020 6509 +7768 9000 8488 9968 7379 +7769 10550 10084 9409 7461 +7770 7260 9056 7261 9187 +7771 7191 9320 7338 9352 +7772 11496 8408 10673 7802 +7773 7229 9179 6562 9141 +7774 9225 7134 9690 8951 +7775 6360 9231 7442 9730 +7776 8058 6260 9323 10328 +7777 8664 8433 11785 7524 +7778 10189 6710 10787 8294 +7779 9372 6647 9519 9056 +7780 8140 11407 7844 9182 +7781 8627 11391 6944 10163 +7782 9623 7105 9467 8809 +7783 11843 10442 6615 8825 +7784 10368 8343 10746 7505 +7785 9867 10730 7825 6344 +7786 9914 8520 12149 7162 +7787 8912 7162 12149 8519 +7788 6334 8823 7481 10224 +7789 7233 9204 6601 9267 +7790 10063 7665 11006 8689 +7791 9201 11512 10077 7122 +7792 10987 6686 9574 11577 +7793 11376 8417 10179 6314 +7794 6519 8915 7145 9356 +7795 8450 10021 6348 11803 +7796 8940 7237 8794 9488 +7797 9363 7591 10296 9362 +7798 8263 9991 9651 6632 +7799 6871 10658 7541 8754 +7800 7279 9722 7497 9693 +7801 7036 7766 9138 10185 +7802 9396 9386 9211 7277 +7803 9379 7116 10840 8558 +7804 10340 6924 11616 8435 +7805 9215 6810 11328 8395 +7806 8521 11546 8505 6939 +7807 9354 7363 9483 9816 +7808 7909 8620 9491 6809 +7809 10334 10116 10595 7625 +7810 6590 9550 7188 9235 +7811 6448 9803 10288 8213 +7812 7254 9639 7403 9398 +7813 11433 9257 7662 11117 +7814 10841 6467 11148 8458 +7815 6477 8616 7832 10872 +7816 7034 9532 7514 9748 +7817 7123 8425 12045 9581 +7818 11615 6667 9828 9530 +7819 11074 8366 11291 7559 +7820 8417 7009 11674 10179 +7821 11978 8470 11810 6451 +7822 6521 9438 7110 8865 +7823 7039 8501 10712 8088 +7824 9326 7293 9203 9441 +7825 9300 9587 8916 6557 +7826 9537 8916 9587 7243 +7827 8825 6615 10395 10740 +7828 6276 8950 7135 9367 +7829 7136 8518 6431 10024 +7830 9382 6420 11755 8472 +7831 10700 7428 11020 8353 +7832 7121 8866 6366 9448 +7833 9464 7181 9232 9077 +7834 9057 9254 9039 7183 +7835 7233 9322 7229 8988 +7836 6759 8268 12262 9450 +7837 9200 6339 12116 8419 +7838 7735 10824 6739 8543 +7839 7505 8497 6654 10775 +7840 9440 9128 9228 7566 +7841 6607 9163 7279 9446 +7842 7224 9279 7331 9521 +7843 8221 6554 9621 8719 +7844 12271 8421 11129 6489 +7845 8112 10973 7581 12179 +7846 9085 9301 9402 7346 +7847 8066 8634 6324 11662 +7848 7553 10266 7167 9017 +7849 8340 10502 10944 6977 +7850 8401 9720 127 128 +7851 7267 9245 7332 9400 +7852 8030 7060 11347 9628 +7853 10859 8515 11563 6466 +7854 9033 9482 9040 6368 +7855 9476 9040 9482 7275 +7856 8812 9093 9241 7204 +7857 8422 11249 7782 10006 +7858 9322 7233 9267 9268 +7859 9135 9038 9320 7191 +7860 7596 10294 6322 9867 +7861 7265 9224 7220 9234 +7862 7227 9403 7290 9546 +7863 9221 7361 9753 8639 +7864 11053 6466 11901 8954 +7865 8870 8634 9854 7208 +7866 7271 8660 10738 12174 +7867 6594 9762 7222 9151 +7868 9401 9198 9224 7265 +7869 9146 6367 9212 9147 +7870 11902 8899 10152 6336 +7871 10980 11408 7165 9843 +7872 10422 8456 11671 6469 +7873 9207 9147 9212 7222 +7874 8569 11537 7839 11706 +7875 8632 6608 10538 8064 +7876 7184 9303 6585 9045 +7877 7791 10833 7532 10551 +7878 11586 6927 11834 8481 +7879 9297 7296 9255 9442 +7880 6368 9872 7419 9645 +7881 8442 6976 12148 8531 +7882 8866 9072 9459 6366 +7883 7894 10232 6452 10755 +7884 10714 8946 9886 6559 +7885 8335 8974 9928 6300 +7886 8429 9758 8829 6988 +7887 9753 7157 9466 9309 +7888 6799 11074 8269 10347 +7889 7333 9459 7198 9479 +7890 8755 7593 10666 10075 +7891 11857 9307 10879 6889 +7892 8461 7143 8668 11760 +7893 6989 8209 10000 11667 +7894 8746 6519 9355 9000 +7895 9901 7150 10140 9433 +7896 7090 8729 6358 9647 +7897 8467 6638 9047 9866 +7898 7523 9908 7362 9629 +7899 11537 8569 10668 6677 +7900 9074 7386 8752 9632 +7901 10797 8369 10910 6991 +7902 7844 9426 6711 10886 +7903 7265 9266 6602 9401 +7904 10247 7337 10916 8382 +7905 9913 6833 12100 8375 +7906 9117 7294 9743 8812 +7907 9576 10102 8887 7166 +7908 7520 9658 7201 9783 +7909 9326 9095 9504 7264 +7910 8560 8097 12249 6837 +7911 9923 8042 10685 10343 +7912 6877 8777 7767 10895 +7913 9464 9314 9052 7181 +7914 9487 8701 9964 7242 +7915 9215 8395 11018 7312 +7916 9301 9085 9389 6578 +7917 9662 9389 9085 7374 +7918 7915 8882 6411 11600 +7919 8759 8864 9513 7131 +7920 9589 8369 10797 6371 +7921 8734 10704 8385 7059 +7922 7283 9445 7351 9697 +7923 6590 8838 7338 9550 +7924 10758 8582 11958 7348 +7925 9095 9326 9441 6606 +7926 12105 8669 9750 6506 +7927 9844 7007 10142 10947 +7928 9121 7220 9224 9405 +7929 7322 9435 6593 9395 +7930 9248 7703 9258 7156 +7931 11838 9084 12211 8754 +7932 7588 9653 7401 10042 +7933 8642 10808 9366 6261 +7934 9232 6602 9266 9190 +7935 10597 11765 6826 7051 +7936 8025 9473 7052 12046 +7937 9784 8436 11539 6242 +7938 10903 6875 9139 9140 +7939 8670 8417 11376 7020 +7940 7221 9277 7285 9341 +7941 9116 7331 9279 9176 +7942 7226 9558 7393 9480 +7943 9221 9640 9475 7361 +7944 8888 9195 9743 7145 +7945 7352 9678 7181 9052 +7946 7388 10107 6645 8724 +7947 10482 8383 11108 6283 +7948 9248 9035 10726 7603 +7949 8438 8390 11100 7203 +7950 9086 8385 10592 6642 +7951 10643 8497 10093 7359 +7952 7209 8580 6320 10007 +7953 8909 7465 10070 9916 +7954 8580 7209 10008 8579 +7955 7137 9033 6368 9645 +7956 9230 9249 10186 7170 +7957 7519 10467 11991 9847 +7958 10215 6461 10233 8439 +7959 7796 8378 11038 6513 +7960 10655 8382 10916 6895 +7961 8726 9136 10431 6718 +7962 11222 7785 10999 8848 +7963 10901 8848 10999 6764 +7964 6653 11014 7857 10188 +7965 7333 9235 7188 9242 +7966 6870 10628 6357 8285 +7967 9314 7315 9616 9012 +7968 10033 7668 11550 8399 +7969 9142 7221 9341 9213 +7970 6987 7731 6566 11421 +7971 9866 7508 10204 8467 +7972 9701 7387 9294 9833 +7973 8730 10511 9735 8148 +7974 9612 8397 10837 7012 +7975 7735 12269 8255 8430 +7976 11282 7558 11522 8396 +7977 6742 11883 7928 11317 +7978 9098 7204 9274 7249 +7979 10100 8774 11915 6243 +7980 9429 8934 9814 7334 +7981 11523 6956 11742 8391 +7982 9873 7566 9630 10345 +7983 10853 7891 12247 8471 +7984 7293 9274 6577 9203 +7985 7363 9354 7275 9482 +7986 11148 7314 10685 8458 +7987 10269 6393 9489 7700 +7988 9070 8992 11502 8440 +7989 7222 9275 6685 9207 +7990 9636 9313 9278 6590 +7991 7285 9277 6361 9315 +7992 7437 9788 6375 9705 +7993 10198 7078 8891 6784 +7994 9116 9176 9637 7160 +7995 9236 6340 12076 8992 +7996 7268 9615 7434 9673 +7997 10310 10147 8588 7288 +7998 9204 9145 9502 7215 +7999 9726 8474 11690 7291 +8000 9278 9313 9456 7286 +8001 11142 6624 10590 8397 +8002 9711 6356 9292 9234 +8003 9849 9054 9449 7390 +8004 8907 6351 9623 8809 +8005 10503 6287 10593 8537 +8006 9361 9282 9281 7274 +8007 9211 9281 9282 6592 +8008 7274 9281 7252 9280 +8009 7255 9197 6353 9321 +8010 9234 9292 9266 7265 +8011 9190 9266 9292 7272 +8012 9108 9288 9391 7242 +8013 7610 10165 7474 10038 +8014 6467 7823 11341 11148 +8015 8743 7255 9297 9339 +8016 9439 6603 9463 9125 +8017 7000 10053 6307 8901 +8018 8301 10578 7580 11329 +8019 10083 8431 11579 6981 +8020 11508 8143 10529 6933 +8021 7327 9081 6270 9380 +8022 8178 11894 8217 6897 +8023 9777 11366 12166 7922 +8024 11100 8390 11581 6497 +8025 11066 6706 10028 8158 +8026 9922 7047 10487 8601 +8027 8925 6832 11338 8945 +8028 9213 9341 9243 6579 +8029 9030 7730 6858 10923 +8030 9070 8440 10899 6621 +8031 9625 7501 10899 8440 +8032 7293 9326 7264 9350 +8033 7538 10400 12277 7941 +8034 9151 7251 9210 9318 +8035 6601 9269 7234 9267 +8036 10814 8745 10784 7611 +8037 6419 11064 7753 9958 +8038 9335 6456 10603 7026 +8039 9274 7293 9350 9272 +8040 10141 7956 11339 6377 +8041 9243 9143 9475 7224 +8042 11898 8413 11030 6914 +8043 7184 9219 7325 9303 +8044 7246 11514 8017 10851 +8045 11854 9938 6731 9864 +8046 9979 6705 11147 10194 +8047 9395 7251 9212 6367 +8048 9081 7158 9106 10349 +8049 7219 9066 6600 9421 +8050 9276 9318 9210 7226 +8051 7114 9348 7420 9682 +8052 9739 9931 9545 7442 +8053 9818 9860 9480 6274 +8054 8430 8255 10324 6900 +8055 9615 7268 11909 8565 +8056 6332 10671 8805 10727 +8057 8129 10197 10883 7075 +8058 9378 7254 9398 9244 +8059 7518 9529 10812 8404 +8060 8210 8007 10792 6874 +8061 7198 9463 6603 9306 +8062 6917 11426 7709 8526 +8063 10081 6822 11135 8405 +8064 9051 7053 9074 9617 +8065 9475 9640 9279 7224 +8066 6709 9496 8261 11722 +8067 9497 9021 9466 7157 +8068 8428 6988 8650 9875 +8069 7348 11536 8304 12226 +8070 8010 6319 8784 10342 +8071 9191 7332 9245 9367 +8072 8692 12105 6506 8980 +8073 9727 7464 9785 8932 +8074 10785 8380 9582 6511 +8075 7154 10421 11906 9561 +8076 9740 6507 10161 8587 +8077 8588 8587 10161 7288 +8078 9389 9662 9277 7221 +8079 9577 7518 8404 11086 +8080 8431 10083 11442 6244 +8081 8248 9744 10062 7631 +8082 6318 10667 7312 8403 +8083 9703 7188 9550 9239 +8084 9320 9239 9550 7338 +8085 10784 8745 9767 6714 +8086 7889 9544 7055 11703 +8087 7221 9142 6578 9389 +8088 9217 8704 10538 6608 +8089 6733 8256 10440 8732 +8090 8930 6974 11249 8422 +8091 6575 9824 7507 8884 +8092 7004 11407 6387 8544 +8093 6278 8959 7256 9757 +8094 7469 9656 6524 9981 +8095 9650 8505 11546 7180 +8096 7134 8808 6623 9690 +8097 9143 9243 9341 7285 +8098 8175 6851 10480 9815 +8099 10983 8795 10575 6884 +8100 6915 11541 8257 11044 +8101 7296 9297 7255 9321 +8102 8838 7225 9093 9524 +8103 9374 9040 9476 7287 +8104 10236 6931 11086 8404 +8105 6352 9350 7264 9244 +8106 11671 9859 8682 6469 +8107 7385 10082 7502 9568 +8108 7473 9804 6701 10270 +8109 9463 7198 9459 9072 +8110 10205 10349 9106 7587 +8111 6591 9262 7361 9475 +8112 9244 7264 9504 9378 +8113 10593 6287 10390 9209 +8114 9040 9374 9872 6368 +8115 8906 8424 11227 7019 +8116 9146 9280 9415 6367 +8117 7289 9420 7360 9523 +8118 9125 9463 9072 7276 +8119 9147 7219 9421 9146 +8120 9021 9464 9077 6369 +8121 9241 6577 9274 7204 +8122 6924 9686 12037 11616 +8123 7280 9446 7279 9298 +8124 10470 8414 10766 6742 +8125 7950 9329 7504 11596 +8126 9386 9396 9306 6603 +8127 8701 9487 9034 6628 +8128 10880 8486 11717 7494 +8129 8916 9537 9891 7168 +8130 7322 9125 7276 9435 +8131 7860 9557 145 146 +8132 10027 8415 11532 7413 +8133 6326 7761 9360 10010 +8134 9163 9458 9722 7279 +8135 10212 9911 9912 6992 +8136 9442 6597 9339 9297 +8137 9758 8429 10370 6945 +8138 6854 11206 7959 10697 +8139 10236 8404 10812 6727 +8140 7272 9408 7259 9190 +8141 6592 9282 7275 9354 +8142 9281 9211 9386 7252 +8143 9400 9198 9401 7267 +8144 6326 8723 7308 12200 +8145 7138 9155 10953 11962 +8146 6555 10801 8325 11277 +8147 8089 9202 161 162 +8148 10106 7256 9175 9419 +8149 9476 7275 9282 9361 +8150 7251 9395 6593 9210 +8151 6563 9745 7018 8779 +8152 9423 9128 9440 6601 +8153 11625 11052 8368 6662 +8154 8912 8519 10149 6484 +8155 9453 9358 9387 7321 +8156 8593 9387 9358 6609 +8157 9223 6354 9493 9403 +8158 7332 9191 6646 9570 +8159 6501 9340 7377 8586 +8160 10074 10183 9380 6270 +8161 8901 10665 12131 7000 +8162 6616 10279 7500 8928 +8163 7277 9684 7429 9430 +8164 8897 7148 10853 8640 +8165 6359 9168 10920 8451 +8166 10966 8444 10471 7651 +8167 150 11960 11961 11305 +8168 8871 9223 9403 7227 +8169 7390 9449 7330 9564 +8170 9955 6461 10215 8883 +8171 9198 6576 9405 9224 +8172 8663 8069 10641 6459 +8173 9223 8871 9676 7325 +8174 9147 9207 9416 7219 +8175 8938 7210 9604 8965 +8176 8314 9963 7164 10857 +8177 9179 9031 10411 7470 +8178 8635 9603 9408 7272 +8179 6601 9204 7215 9423 +8180 8983 9429 9477 6277 +8181 8392 7646 7923 10951 +8182 10503 8537 11697 7483 +8183 7273 9555 7368 9619 +8184 11710 7477 10116 10334 +8185 6513 9194 11184 7796 +8186 8953 8964 9656 7161 +8187 7056 12209 7848 11214 +8188 8682 8772 11576 7413 +8189 8442 9889 8996 6976 +8190 9238 6249 10050 8858 +8191 9249 9230 9472 7349 +8192 9494 6252 11686 8349 +8193 9107 9458 9163 7243 +8194 8656 7241 9520 9531 +8195 7416 9661 7369 9842 +8196 11993 11419 6460 8160 +8197 6805 10288 8218 11116 +8198 7134 9225 7411 9918 +8199 12102 9506 7023 11209 +8200 10079 6274 9776 10425 +8201 8556 10550 7461 11896 +8202 6421 9019 12249 8330 +8203 6699 11955 8446 9975 +8204 8031 9921 8873 6957 +8205 7014 8698 7689 11187 +8206 7280 9197 7255 9446 +8207 7194 10061 11994 8578 +8208 9584 6535 9674 8889 +8209 9280 7252 9439 9415 +8210 10152 8899 9664 12127 +8211 7218 9301 6578 9504 +8212 6619 9479 7198 9130 +8213 9320 9038 9546 6571 +8214 8959 6278 9578 9430 +8215 6603 9439 7252 9386 +8216 7300 9453 6617 9296 +8217 9367 9245 9490 6276 +8218 7739 10046 10961 7364 +8219 10952 7905 10791 8652 +8220 10695 7693 11175 8713 +8221 9551 7393 9558 9206 +8222 9361 6600 9228 9476 +8223 9128 7287 9476 9228 +8224 7170 9655 6362 9230 +8225 8802 8733 10893 7560 +8226 8927 8926 11622 7298 +8227 9248 7156 10760 9035 +8228 9105 7206 10329 8611 +8229 8475 10051 8591 6932 +8230 7261 10337 6355 9187 +8231 6342 9966 7362 9908 +8232 8063 10808 8642 12092 +8233 11750 6516 12055 8819 +8234 9274 9272 9669 7249 +8235 9455 9490 9560 7352 +8236 7291 9599 7459 9726 +8237 6865 8517 6249 9238 +8238 9203 7273 9619 9441 +8239 8812 6284 9524 9093 +8240 8885 9698 9095 6606 +8241 8356 9588 9001 6542 +8242 9241 9124 9526 6577 +8243 9429 7334 9414 9477 +8244 7816 11113 6761 11198 +8245 6419 10237 7846 11362 +8246 8529 6515 12032 8821 +8247 8548 7297 10086 9742 +8248 8139 148 149 9533 +8249 10394 7856 10699 6901 +8250 9479 8957 9636 7333 +8251 7369 9036 6627 9842 +8252 9429 7110 9659 8934 +8253 7295 9388 7321 9387 +8254 9395 6367 9415 7322 +8255 9490 9455 9564 6276 +8256 8884 9502 9145 6575 +8257 6392 10234 7742 10752 +8258 6323 9599 7291 9122 +8259 6586 9098 7249 9539 +8260 9796 6272 9402 9983 +8261 9639 9344 9725 7403 +8262 9116 7160 9817 9462 +8263 9475 9143 9507 6591 +8264 9418 8894 9708 7292 +8265 6286 9826 7359 10093 +8266 7858 9335 6778 10804 +8267 9309 9466 9305 7358 +8268 6968 8045 9238 8858 +8269 8872 7494 10132 7083 +8270 9237 9141 9517 7192 +8271 6362 9283 7286 9456 +8272 9265 9582 8380 6458 +8273 7807 11823 12235 9214 +8274 9125 7322 9415 9439 +8275 10196 8650 10591 7734 +8276 10778 7626 8581 8247 +8277 9526 9283 9555 7273 +8278 6664 9144 7671 10604 +8279 7091 10016 7662 9733 +8280 6438 11060 8320 10905 +8281 9564 9455 9756 7390 +8282 6406 10197 8129 9967 +8283 8604 8800 9813 6524 +8284 6819 7834 10181 10537 +8285 6392 8521 6939 10234 +8286 7924 119 120 9317 +8287 11273 7627 11890 8456 +8288 7335 9478 7387 9701 +8289 9558 6593 9554 9206 +8290 6471 7908 12208 8605 +8291 9485 11973 11011 7732 +8292 11653 11413 11805 8296 +8293 6453 10955 10322 9118 +8294 8597 7113 11405 8473 +8295 9560 9490 9245 7267 +8296 10233 7595 10989 8439 +8297 9690 9931 9739 7391 +8298 8482 10569 9308 7386 +8299 12150 9685 8952 7164 +8300 9339 7380 9891 8743 +8301 9230 6362 9456 9472 +8302 6931 10236 7910 8665 +8303 9313 7341 9472 9456 +8304 9990 7499 12156 8533 +8305 10979 11389 10286 8566 +8306 8960 8566 10286 7010 +8307 6278 9478 7335 9578 +8308 9012 7303 9495 9500 +8309 9725 9344 9521 7331 +8310 9639 6579 9521 9344 +8311 6467 8379 11639 7823 +8312 10575 8795 10551 7532 +8313 6577 9526 7273 9203 +8314 7157 9262 6591 9497 +8315 7524 11785 8602 9878 +8316 7998 10379 7541 10602 +8317 7811 9825 7175 10885 +8318 8957 9508 9472 7341 +8319 7522 8434 11658 10246 +8320 9747 6494 10151 8835 +8321 9507 9315 9495 7303 +8322 6656 10919 7631 10285 +8323 8020 10635 6956 8991 +8324 7224 9521 6579 9243 +8325 10870 11517 9778 6807 +8326 8679 10842 6873 12276 +8327 9021 9497 9616 7315 +8328 11723 8210 6874 11832 +8329 9206 7121 9336 9551 +8330 8610 7193 9548 8818 +8331 7556 10332 6387 10471 +8332 7546 10175 6350 8677 +8333 9681 9325 9662 7374 +8334 9148 6528 10454 8163 +8335 10168 8276 10818 7299 +8336 9251 7340 9925 8840 +8337 8030 9628 6420 9382 +8338 11377 7230 9139 6875 +8339 9933 9987 9231 9897 +8340 6590 9235 7333 9636 +8341 8931 11047 11561 8678 +8342 9589 7444 11555 8462 +8343 9005 9768 9675 9004 +8344 10552 7829 12029 8561 +8345 9831 8561 12029 6722 +8346 8212 11562 11079 8211 +8347 9842 9345 9569 7416 +8348 8583 9783 7201 11753 +8349 6600 9066 7567 9630 +8350 10898 6771 10351 8061 +8351 11655 6894 10988 7993 +8352 9448 9613 9703 7356 +8353 7226 9210 6593 9558 +8354 9388 6347 11906 8503 +8355 7792 9512 11239 8350 +8356 10221 8715 10594 6263 +8357 9291 8467 12086 7238 +8358 8450 9465 6777 11921 +8359 10673 9804 8877 7144 +8360 10478 8114 12181 7669 +8361 9086 7623 10357 10828 +8362 11712 8515 10859 10348 +8363 9410 6599 10267 8628 +8364 7611 8144 11219 10199 +8365 6602 9678 7352 9560 +8366 11349 6240 10178 8584 +8367 8211 7433 11435 8212 +8368 6289 9952 7088 8965 +8369 7398 8573 6257 9330 +8370 7084 11207 8204 10273 +8371 7289 9523 6361 9325 +8372 8318 9827 6481 12260 +8373 10429 7547 10121 8101 +8374 9186 7440 10076 8392 +8375 9712 6625 9846 8845 +8376 10571 8106 11015 7682 +8377 7751 9972 7171 11731 +8378 9142 9378 9504 6578 +8379 8741 8710 9663 6526 +8380 11465 7590 11926 8555 +8381 8926 8680 10536 6261 +8382 6537 9022 7114 9682 +8383 9832 6562 9179 7470 +8384 9726 8541 11247 8474 +8385 10852 8695 12129 7853 +8386 6505 10389 8365 9364 +8387 8267 9585 6700 10848 +8388 9675 7381 9492 9493 +8389 9403 9493 9492 7290 +8390 10027 8513 11670 6828 +8391 6801 11817 7874 9549 +8392 6767 10830 8046 10272 +8393 6272 9569 7346 9402 +8394 7785 11222 6417 10949 +8395 9177 6982 12111 8370 +8396 8934 6588 9697 9814 +8397 8762 8990 10631 6598 +8398 11511 7948 9973 8855 +8399 6401 8498 11517 8031 +8400 6634 9365 7369 9661 +8401 9828 7496 10696 9133 +8402 12044 9133 10696 6816 +8403 7606 8645 10213 11412 +8404 11044 8495 11457 6915 +8405 7356 9703 6571 9835 +8406 7394 9391 6586 9539 +8407 8554 9638 9129 7119 +8408 7276 9554 6593 9435 +8409 8348 10384 9626 6253 +8410 7734 8785 6833 9913 +8411 7271 10002 7081 8660 +8412 10743 8688 10038 6758 +8413 6720 9795 7810 10747 +8414 7972 10351 6771 11568 +8415 6972 9542 7816 11055 +8416 11813 6783 10646 11828 +8417 9244 9398 9852 6352 +8418 8513 10353 7776 11670 +8419 6609 9154 7522 10246 +8420 9176 6280 9806 9637 +8421 6304 9576 7928 11022 +8422 8084 10382 7418 12170 +8423 8393 8207 9974 6928 +8424 9315 6361 9523 9495 +8425 9500 9495 9523 7360 +8426 11309 11776 10461 7775 +8427 10375 8867 11358 6729 +8428 10252 8738 9982 7443 +8429 8913 8915 9822 9838 +8430 9802 8590 10371 6663 +8431 11619 9060 11552 8696 +8432 9935 6241 9608 7670 +8433 9487 7394 9852 9034 +8434 8478 12079 6724 11526 +8435 8744 7310 8704 9217 +8436 8331 10590 6624 12229 +8437 9252 6746 10881 8176 +8438 10925 8782 10958 6615 +8439 9527 6589 9917 8797 +8440 10067 7410 10594 8027 +8441 10523 7966 11361 10745 +8442 12039 12067 7710 9553 +8443 10853 8471 10936 6533 +8444 7460 12088 8064 10538 +8445 6327 12045 7727 9979 +8446 7982 8896 11876 6424 +8447 9587 9300 9846 7427 +8448 9306 9396 9578 7335 +8449 6906 9312 7973 12005 +8450 9172 7248 11319 8706 +8451 8245 6805 11116 10016 +8452 6963 10281 8546 11941 +8453 10426 8485 10649 7608 +8454 8491 8492 11384 7089 +8455 7553 9017 6281 10406 +8456 10326 8475 10917 6671 +8457 9703 9613 9242 7188 +8458 8038 11884 6431 10579 +8459 9091 10497 11847 6657 +8460 11702 8556 11896 7842 +8461 7402 9220 10910 8369 +8462 9822 8746 9991 7457 +8463 8943 6564 9436 9965 +8464 6633 9294 7387 9760 +8465 7897 11599 6421 9694 +8466 9054 9420 9830 6629 +8467 7542 12003 8159 11463 +8468 7578 6432 8693 9793 +8469 6908 9259 7425 8629 +8470 6811 10584 7641 9385 +8471 11773 6921 10657 9058 +8472 6488 9503 7895 10790 +8473 9557 7054 10698 8671 +8474 9912 9094 9736 6992 +8475 7267 9401 6602 9560 +8476 9766 8514 11862 6888 +8477 9504 9095 9698 7218 +8478 8034 12104 9750 7244 +8479 9993 7430 10727 8804 +8480 10027 7413 11576 8513 +8481 9231 6360 9445 9897 +8482 6776 10039 11515 8059 +8483 7254 9213 6579 9639 +8484 12253 6543 10292 8851 +8485 8889 7102 10629 9584 +8486 139 9798 8199 138 +8487 8476 6934 11058 8483 +8488 8108 9972 6338 9113 +8489 7397 9730 7442 9545 +8490 10007 9032 12031 8032 +8491 6802 10940 7632 10839 +8492 8779 7018 9966 8780 +8493 7283 9697 6588 9121 +8494 8779 8780 11854 8535 +8495 7926 12014 6833 8785 +8496 8290 8327 10488 11836 +8497 7912 10696 7496 11091 +8498 7157 9753 7361 9262 +8499 10281 6667 11792 8546 +8500 9108 6373 11351 8488 +8501 8571 8998 11535 6995 +8502 8660 7081 10396 8026 +8503 6344 7825 11610 10768 +8504 10557 8494 11020 7428 +8505 10927 8041 10534 9162 +8506 6684 10398 7511 8963 +8507 7335 9701 6619 9130 +8508 6394 10832 7678 9016 +8509 7919 12047 6425 8761 +8510 10147 6425 12047 8588 +8511 8587 8588 12048 6923 +8512 9746 7143 11108 6568 +8513 9420 9054 9849 7360 +8514 9396 7277 9430 9578 +8515 6926 11276 7376 8638 +8516 9527 9408 9603 6589 +8517 11943 8970 12135 7886 +8518 8959 9961 9175 7256 +8519 8382 155 156 10247 +8520 9314 6618 9756 9052 +8521 9097 8622 8308 12266 +8522 7362 9966 7018 8967 +8523 10106 6539 10220 8760 +8524 7016 8298 9422 10946 +8525 10711 7304 8835 10151 +8526 9176 9279 9640 6280 +8527 7390 9756 6618 9849 +8528 8973 8691 10801 6555 +8529 9484 7355 10214 8525 +8530 10689 8690 11038 7697 +8531 7331 9116 6628 9725 +8532 7014 9501 10649 8485 +8533 7458 9983 7218 9698 +8534 10306 9878 8602 7525 +8535 8507 10838 11606 7216 +8536 11944 8843 10031 7869 +8537 8683 6299 11789 11221 +8538 8882 8559 11858 7779 +8539 8189 6904 10685 8042 +8540 9121 9405 9933 7283 +8541 9246 6630 11717 8486 +8542 6342 9819 7959 11206 +8543 8937 6316 11833 8512 +8544 8192 7185 10724 8824 +8545 11228 10078 12076 8141 +8546 9331 9917 9051 7365 +8547 9603 9051 9917 6589 +8548 7437 9036 7369 9788 +8549 11149 10827 11383 7270 +8550 7374 9085 7346 9781 +8551 6592 9684 7277 9211 +8552 6602 9232 7181 9678 +8553 12121 9962 163 164 +8554 9303 7325 9676 9286 +8555 11606 6542 11825 8551 +8556 7976 8216 11642 6402 +8557 8360 8621 11842 7262 +8558 9325 6361 9277 9662 +8559 12115 8489 11632 6447 +8560 9350 6352 9669 9272 +8561 11083 7806 9797 6940 +8562 12203 7357 11837 8490 +8563 8442 8531 10520 7050 +8564 8819 7151 11482 8529 +8565 11676 6879 10088 8874 +8566 11475 6509 11020 8494 +8567 10353 8513 11576 6553 +8568 7350 9920 6562 9832 +8569 7151 9115 6370 9755 +8570 9783 8583 11846 6383 +8571 9337 7330 9449 9751 +8572 8127 11980 7263 10049 +8573 10960 9286 9676 7187 +8574 12023 8658 8185 6279 +8575 9249 7349 9833 9294 +8576 7033 8681 11743 6444 +8577 6416 9383 7926 11424 +8578 7735 8430 10050 6249 +8579 8522 6990 10914 8523 +8580 9575 6317 10210 7357 +8581 11459 7548 12151 8614 +8582 10390 7927 12087 8606 +8583 6290 9754 7737 10907 +8584 11238 9261 9886 7585 +8585 9001 9588 9886 8946 +8586 10996 8854 10060 7758 +8587 7043 8721 7173 10097 +8588 8885 6606 9441 9619 +8589 8253 7196 11103 8653 +8590 6971 12006 8364 9810 +8591 7127 10182 6544 9177 +8592 9320 6571 9703 9239 +8593 9075 6583 9417 9887 +8594 9991 7379 9968 9651 +8595 8542 12253 7093 12271 +8596 7141 9691 6582 10030 +8597 6897 8632 8064 11248 +8598 8716 8394 11439 6346 +8599 9649 7530 10482 6283 +8600 7492 10514 6848 10068 +8601 7279 9693 6584 9298 +8602 8124 11679 6845 11445 +8603 11916 9370 10126 7384 +8604 11198 8502 11055 7816 +8605 7503 8540 10656 10427 +8606 10622 9579 10777 7719 +8607 11201 8022 11538 7007 +8608 11260 8512 12056 6916 +8609 9933 9893 9570 9987 +8610 9507 9616 9497 6591 +8611 9387 8593 11119 7295 +8612 11892 8181 10920 9168 +8613 11590 11797 10582 7968 +8614 6634 9661 7416 9627 +8615 8864 8759 10084 6612 +8616 6401 10850 9003 8498 +8617 6299 10054 11679 8124 +8618 7215 9502 7419 9872 +8619 9886 9836 10057 7585 +8620 9619 7368 9948 8885 +8621 8856 6349 9946 9050 +8622 7063 9311 11551 9692 +8623 11411 7040 11250 8509 +8624 8937 8512 11260 7102 +8625 10100 7914 10898 8774 +8626 9253 7451 10106 8760 +8627 7563 10141 7989 11408 +8628 9632 8752 10135 7436 +8629 6466 11053 8045 10859 +8630 8724 6645 11314 8514 +8631 6638 9948 7368 9047 +8632 6493 11079 7740 7997 +8633 9154 6609 9358 9858 +8634 10942 8219 9962 12121 +8635 8736 8737 10589 10770 +8636 6985 11062 8036 11727 +8637 6534 9324 8281 11601 +8638 7984 11226 11099 9787 +8639 7720 7445 7760 11899 +8640 10563 6966 11466 8599 +8641 8103 9444 6381 11166 +8642 11918 12161 10466 8179 +8643 8641 6551 8961 9343 +8644 8727 8728 10802 6980 +8645 7672 9840 7364 11066 +8646 7409 10285 7631 10062 +8647 6785 11919 8414 10470 +8648 10064 8547 10687 6429 +8649 9170 7327 9920 9049 +8650 8084 12141 6259 10262 +8651 7022 8572 10703 9547 +8652 9376 12131 10788 6470 +8653 8841 7565 10908 8672 +8654 8132 10601 9548 7193 +8655 8733 8802 12073 6910 +8656 8861 12081 8943 7041 +8657 7268 9673 6597 9442 +8658 6400 9119 7432 11935 +8659 10575 7532 10833 8683 +8660 6342 9908 7523 9819 +8661 8379 7396 8926 8927 +8662 9569 9704 9627 7416 +8663 9047 7368 9555 9655 +8664 7468 11424 7926 10412 +8665 11019 8057 11988 8368 +8666 6617 9568 7502 10069 +8667 8363 8616 6477 11177 +8668 9655 7170 9866 9047 +8669 11752 7991 10173 9949 +8670 7458 9948 6638 10120 +8671 9248 7603 11281 8532 +8672 10243 8532 11281 6839 +8673 8357 11137 7681 10997 +8674 7730 9030 11567 11009 +8675 8464 6966 11821 8577 +8676 7528 10137 7862 10596 +8677 6887 11950 8261 10723 +8678 9110 7216 11606 8551 +8679 9419 9175 10222 7257 +8680 9141 6562 9920 9517 +8681 11593 6488 8354 10019 +8682 9960 8822 10049 7263 +8683 8493 7382 9857 9082 +8684 9354 9816 9684 6592 +8685 10517 7677 10849 8576 +8686 10095 7645 9007 10064 +8687 7949 8790 6891 11732 +8688 6978 7958 7240 10721 +8689 6975 11368 7878 11497 +8690 7506 10227 7340 9251 +8691 9690 7391 10115 8951 +8692 8243 7124 10090 8836 +8693 7194 8662 11190 10177 +8694 9472 9508 9833 7349 +8695 7443 9982 7223 9338 +8696 6866 8238 9811 11924 +8697 6649 8010 10342 9567 +8698 7231 9862 6285 9096 +8699 8792 7381 9675 9768 +8700 7146 11447 6504 8538 +8701 9418 7292 9928 8974 +8702 12001 8259 11311 6996 +8703 7294 9356 7145 9743 +8704 9788 9794 10227 6375 +8705 6542 11606 10838 8356 +8706 9283 6362 9655 9555 +8707 7587 9106 6712 10560 +8708 6896 10799 6431 8518 +8709 9726 7459 12209 8541 +8710 10146 8469 11231 6947 +8711 9637 9188 9817 7160 +8712 8876 8919 10420 6686 +8713 11755 6420 10352 8842 +8714 8121 11571 8050 8554 +8715 9107 6364 9722 9458 +8716 9830 7437 9705 9706 +8717 7339 9452 6503 10652 +8718 8337 6443 11288 10212 +8719 6498 11417 11843 9161 +8720 9103 7316 10031 9287 +8721 7201 9658 6610 9996 +8722 9640 9221 9806 6280 +8723 9569 9345 9781 7346 +8724 12130 8989 11750 8228 +8725 11586 8569 11706 6927 +8726 8728 8727 11704 7247 +8727 7837 9370 6384 10794 +8728 6883 8478 11526 8935 +8729 7298 9864 6731 8927 +8730 10695 8713 11506 6422 +8731 7058 8401 11790 9702 +8732 9577 8528 11023 7518 +8733 8138 10433 6487 11090 +8734 9830 9706 9751 6629 +8735 10005 8594 11849 7870 +8736 11181 6426 9988 8936 +8737 6644 8994 7407 10117 +8738 8891 8892 10393 6784 +8739 9513 6353 12184 8530 +8740 11032 11245 8994 6644 +8741 8782 10162 10648 7118 +8742 10144 8664 10716 6290 +8743 10192 10622 10037 7635 +8744 7008 9006 6435 8945 +8745 8148 7731 10923 8626 +8746 10759 7178 10111 8810 +8747 11023 8528 11048 6948 +8748 6817 10976 7616 9353 +8749 10698 7509 10736 8671 +8750 10146 7309 9083 8469 +8751 7192 9824 6575 9237 +8752 9414 7334 9814 9256 +8753 11218 6852 9422 8298 +8754 6278 9757 7387 9478 +8755 8337 9736 11736 6893 +8756 6796 11868 7951 9360 +8757 8967 8562 11860 7362 +8758 11477 8006 8595 6902 +8759 8852 8716 10239 7148 +8760 7222 9762 7250 9275 +8761 8904 7112 9643 10277 +8762 6821 11554 8135 9728 +8763 8070 11070 6800 11334 +8764 8101 6907 11372 9885 +8765 8069 8663 6769 10525 +8766 8476 8705 11176 6934 +8767 7855 12172 6552 8637 +8768 9054 6629 9751 9449 +8769 8241 12024 6872 11302 +8770 9319 9226 10510 7423 +8771 7441 8617 6304 11022 +8772 12273 10823 7622 9775 +8773 7323 9779 6559 9413 +8774 6266 10669 7052 8844 +8775 8264 9985 11091 6963 +8776 9453 7300 9858 9358 +8777 6547 9311 8184 10576 +8778 9162 7562 11216 8655 +8779 8550 9028 9765 6456 +8780 9400 7332 9570 9893 +8781 9593 7266 11386 9657 +8782 7101 9178 8196 11096 +8783 9353 7616 10243 11835 +8784 7980 11286 7074 12060 +8785 6975 10822 8067 11368 +8786 6298 11268 11103 9509 +8787 190 7680 11027 8127 +8788 9253 8760 10220 7214 +8789 12015 11849 7415 10418 +8790 10668 8569 11586 7130 +8791 8457 7713 10011 10513 +8792 7076 10298 12229 9601 +8793 8398 6936 8947 10237 +8794 6855 8363 11813 11828 +8795 10291 7722 10209 10950 +8796 7071 8834 6291 10133 +8797 11562 8212 11010 6363 +8798 6547 8347 9583 11489 +8799 6938 9595 6494 10129 +8800 9088 11518 7797 11879 +8801 7092 9841 12184 9349 +8802 8581 11320 6909 8247 +8803 7942 10242 6374 10742 +8804 11377 6875 12179 9717 +8805 10944 6846 10335 9381 +8806 7451 9760 7387 9757 +8807 8181 6546 9025 11422 +8808 9983 7458 10120 9796 +8809 6857 10931 6430 8329 +8810 8315 6613 11284 9732 +8811 9567 7943 11001 12012 +8812 6537 9682 7134 9918 +8813 9184 8648 10433 7311 +8814 11503 7867 11387 8557 +8815 8195 7270 10043 9119 +8816 10343 6471 8605 9923 +8817 11721 8679 12276 8037 +8818 7232 9022 6537 9969 +8819 6633 9253 7214 9927 +8820 10996 11716 7937 8854 +8821 11173 8583 11753 7946 +8822 9065 12233 8386 7017 +8823 6660 10900 7887 9134 +8824 6257 9299 7715 9330 +8825 8952 6360 9730 9597 +8826 9781 9345 9842 6627 +8827 9184 10446 6786 8648 +8828 8173 10866 6792 11062 +8829 9276 9860 9818 7684 +8830 9693 9100 11574 6584 +8831 7484 11372 8304 10477 +8832 6861 10086 7297 8902 +8833 9111 8972 10013 6317 +8834 6498 9161 7122 10077 +8835 9629 6737 10869 8769 +8836 9188 9637 9806 7380 +8837 9462 9817 9673 7434 +8838 7180 8712 6491 10360 +8839 8551 9714 9965 7269 +8840 10064 6961 11787 8547 +8841 8433 7163 11926 9104 +8842 11593 7983 9503 6488 +8843 9854 10956 10092 7208 +8844 10311 8589 11060 6438 +8845 9450 12233 9065 6759 +8846 9683 7549 10969 8562 +8847 11230 9284 10225 7530 +8848 11791 9008 10755 8116 +8849 10268 9273 12086 6382 +8850 6921 10075 11558 8708 +8851 9532 8767 11527 7514 +8852 9604 7210 10455 9737 +8853 9581 8560 10253 7186 +8854 7889 11969 6250 9544 +8855 7444 10783 7088 10235 +8856 9615 8565 11351 6373 +8857 8891 7078 11998 9665 +8858 10706 9586 11916 7903 +8859 9325 9681 9871 7289 +8860 6883 8935 11475 8494 +8861 7661 10223 6793 9257 +8862 10956 11756 8709 6517 +8863 8710 8741 12018 6766 +8864 8660 8026 11575 10738 +8865 9683 8859 10153 7301 +8866 7731 8148 9735 6566 +8867 8192 10789 6398 11835 +8868 7321 9837 6617 9453 +8869 9684 9816 9483 7429 +8870 6312 9059 7371 10134 +8871 11430 12036 11510 7847 +8872 7242 9964 6373 9108 +8873 10787 11675 9516 8122 +8874 6825 10461 7848 10317 +8875 9423 7215 9872 9374 +8876 10100 8133 10890 7534 +8877 8135 11554 6919 9233 +8878 8580 8579 11815 6946 +8879 10823 8570 11415 7622 +8880 9981 9295 9956 7469 +8881 9207 6685 9565 9416 +8882 8741 6526 11199 8742 +8883 9579 10622 10192 6715 +8884 10005 7448 11106 8594 +8885 10973 8112 11274 6876 +8886 8551 7269 12116 9110 +8887 11892 7230 11377 8253 +8888 6704 11793 7450 8681 +8889 6725 11326 8163 10427 +8890 7651 10644 7137 10966 +8891 8784 7207 11587 10937 +8892 7409 8374 9091 6657 +8893 9701 9833 9508 6619 +8894 9024 7152 10231 10809 +8895 9751 9706 9950 9337 +8896 9582 9265 11795 7132 +8897 6763 10225 9284 7531 +8898 12015 6529 11911 8764 +8899 9940 6658 10865 8592 +8900 7821 9134 7035 9002 +8901 9737 7495 10127 9604 +8902 10777 9579 7626 10778 +8903 11127 8284 9955 7843 +8904 10313 7656 10320 10226 +8905 8192 8824 7900 10789 +8906 8931 8678 10506 6396 +8907 9878 10306 9343 10191 +8908 6262 9002 8484 12135 +8909 7523 8473 11405 9819 +8910 8510 9935 7670 11118 +8911 7360 9849 6618 9500 +8912 8028 9123 11514 7246 +8913 6743 8717 7166 10948 +8914 9627 9704 10082 7385 +8915 6924 10340 7919 8761 +8916 6678 9342 11653 8296 +8917 7290 9835 6571 9546 +8918 9276 7226 9480 9860 +8919 8565 11909 6612 9127 +8920 6315 10034 7830 10626 +8921 8837 10529 8143 6372 +8922 10265 8619 9525 7405 +8923 10226 7439 9519 10313 +8924 9596 7421 10211 6770 +8925 7943 9567 7069 10441 +8926 6275 7825 11231 8469 +8927 8415 11703 7055 10422 +8928 7443 9338 6518 10282 +8929 11619 6941 10329 9060 +8930 8747 11489 9583 7155 +8931 8326 9844 11635 6867 +8932 9710 8685 11637 7366 +8933 7194 8578 6412 11180 +8934 8923 7317 9887 9417 +8935 9380 9517 9920 7327 +8936 10008 6510 11309 8579 +8937 9198 9400 9893 6576 +8938 7192 10183 7507 9824 +8939 8043 10866 8173 8729 +8940 10807 7778 6863 7568 +8941 9580 8807 10275 7406 +8942 6543 12253 8542 9181 +8943 7551 10055 8786 6748 +8944 7168 9891 7380 9806 +8945 8960 7010 8929 10245 +8946 7064 10831 7850 9993 +8947 11787 9112 10230 7640 +8948 8734 7059 11349 8584 +8949 8031 9741 11392 6401 +8950 11095 7471 6950 8649 +8951 9369 8611 12070 7533 +8952 9790 7324 11428 8597 +8953 11846 8583 11173 7782 +8954 11795 7536 10641 8069 +8955 8554 6415 10453 9638 +8956 9827 8614 11375 6481 +8957 7551 8766 11765 7550 +8958 11409 10124 11497 7878 +8959 7072 8570 10823 9845 +8960 7154 10248 6570 8840 +8961 7552 9156 11030 8413 +8962 12035 9064 6984 11967 +8963 8981 7486 10017 9907 +8964 6827 8675 11107 7832 +8965 9267 7234 10580 9268 +8966 7300 10268 7614 9858 +8967 6943 11112 7881 10384 +8968 6682 7902 7099 9514 +8969 8429 6306 11513 10370 +8970 8592 7199 9293 9940 +8971 9606 6414 11414 8676 +8972 10419 8676 11414 7676 +8973 7712 12111 6982 10207 +8974 8023 8307 11740 9540 +8975 9149 6475 10585 8661 +8976 9933 9897 9445 7283 +8977 11733 8869 10709 7516 +8978 7340 9365 6634 9925 +8979 6496 10369 11313 9598 +8980 9574 7401 9653 9896 +8981 7199 9944 6604 9293 +8982 7098 10737 6668 8625 +8983 6244 11442 8187 10229 +8984 7784 10085 6406 9967 +8985 9434 9205 9214 6649 +8986 11952 7626 9579 11094 +8987 7527 12002 10959 8718 +8988 7978 10121 7547 11244 +8989 11233 8594 11106 6321 +8990 10598 8690 10943 7583 +8991 9001 8636 11825 6542 +8992 8984 8646 11233 6321 +8993 10473 7876 12117 8598 +8994 6877 8092 11237 8777 +8995 6987 9030 10923 7731 +8996 7831 11174 6835 10713 +8997 8783 8654 11927 6335 +8998 12234 10830 6767 9329 +8999 8272 10347 7326 12197 +9000 8864 6612 11909 9255 +9001 8219 8667 12013 6920 +9002 9484 9118 10322 7355 +9003 8561 11864 7812 10552 +9004 10875 7977 11300 6445 +9005 8015 10686 11802 9580 +9006 9868 8600 10893 6565 +9007 8910 7152 11088 8911 +9008 7893 11347 8985 7367 +9009 8695 7212 10091 10208 +9010 9653 7588 11786 8656 +9011 12215 8750 10726 114 +9012 9893 9933 9405 6576 +9013 7724 9094 6332 11102 +9014 9293 6604 9337 9950 +9015 9535 10729 8685 6572 +9016 10412 6679 11354 8606 +9017 10390 8606 11354 7620 +9018 6291 8755 11773 10133 +9019 6973 7992 11620 8618 +9020 11617 6782 12251 8715 +9021 10972 8718 10959 7601 +9022 10878 7713 8457 10803 +9023 6504 8699 10710 8283 +9024 6357 11474 10454 8285 +9025 8260 6942 9663 8710 +9026 11784 7607 11299 9515 +9027 11987 7147 9515 11299 +9028 6250 10231 7152 8910 +9029 11234 11507 10030 6582 +9030 8387 9951 116 117 +9031 6365 10255 7187 8878 +9032 10208 6672 12129 8695 +9033 7069 8933 6427 10441 +9034 11809 6413 10751 9260 +9035 9674 7119 9129 10047 +9036 8984 8851 10292 7195 +9037 7661 10111 7178 9898 +9038 6821 9635 8056 11554 +9039 8239 9854 8634 6802 +9040 6734 10844 6252 9494 +9041 7679 10860 7143 9746 +9042 7118 10324 11687 7594 +9043 8055 8673 10763 6774 +9044 8707 10376 9185 7033 +9045 7394 9669 6352 9852 +9046 7092 9887 7317 9841 +9047 11728 6363 11010 7179 +9048 10945 7453 11403 8355 +9049 9327 7939 12143 11283 +9050 7396 8862 6806 11436 +9051 6844 9855 7770 10748 +9052 8073 10913 6681 9769 +9053 10771 9648 9927 7214 +9054 6900 10523 10050 8430 +9055 9561 10678 10431 7636 +9056 8818 6251 11644 8610 +9057 8730 6330 10543 9882 +9058 9995 7385 9568 10160 +9059 9304 6887 10723 11893 +9060 7692 9547 6695 10757 +9061 8448 6574 9512 10662 +9062 8982 11479 7655 11063 +9063 6518 10309 7576 10282 +9064 9683 6522 10372 8859 +9065 9036 7437 9830 9871 +9066 12262 9451 6898 9450 +9067 9906 7345 9164 11104 +9068 7040 11990 8052 11885 +9069 11375 8614 12151 7073 +9070 9969 8853 10326 7529 +9071 9069 10732 6708 11770 +9072 9502 8884 10344 7419 +9073 7343 10307 11441 8817 +9074 8738 10252 8918 7029 +9075 11933 7650 12231 8944 +9076 7764 11964 9939 9222 +9077 8077 10533 11724 6502 +9078 11804 8652 10791 7838 +9079 8523 10792 12109 8522 +9080 8876 7305 10254 8919 +9081 10128 8182 10765 7476 +9082 8398 8691 11669 6936 +9083 8656 6610 9896 9653 +9084 7657 11375 7073 8762 +9085 11432 6862 11621 8651 +9086 9220 7402 10609 9947 +9087 7486 8981 6472 10190 +9088 6553 8049 10202 10733 +9089 12116 7269 9965 9436 +9090 7875 9189 6266 10056 +9091 8994 9996 9531 7407 +9092 8476 8640 10853 6533 +9093 10162 8782 10925 7094 +9094 8390 6861 9023 11581 +9095 7098 11221 7947 10737 +9096 8835 6866 11924 9747 +9097 9301 7218 9983 9402 +9098 8070 9606 7176 11070 +9099 8069 10525 7132 11795 +9100 7593 9150 7063 10694 +9101 10665 8901 10645 7866 +9102 9690 6623 9545 9931 +9103 8739 11811 6253 9626 +9104 10555 8367 11642 7663 +9105 6365 9695 7772 10255 +9106 10621 7586 11026 9102 +9107 11229 9801 11498 7811 +9108 9432 11017 8147 8623 +9109 8595 6901 10699 8961 +9110 10926 6558 8908 10366 +9111 7730 8624 11434 6858 +9112 9017 9287 10031 6281 +9113 6756 9774 7493 10006 +9114 9749 10933 10597 7051 +9115 10879 9847 11589 8029 +9116 11584 8226 12153 9939 +9117 7791 9888 7140 9671 +9118 10786 8645 11674 7009 +9119 6975 11497 6443 8633 +9120 6303 10068 8055 11481 +9121 11070 7176 11699 8813 +9122 10521 8813 11699 7777 +9123 6409 10181 7834 11382 +9124 8209 8880 10361 6925 +9125 9505 7480 10415 10720 +9126 7750 10911 8007 9729 +9127 7083 10132 7477 9109 +9128 9390 9218 10496 7082 +9129 10681 6636 10459 8793 +9130 7707 10886 6711 10492 +9131 11841 10540 10892 6269 +9132 6610 9658 7520 9896 +9133 11602 11719 9937 8164 +9134 8929 7010 10286 8928 +9135 8980 6506 10846 7096 +9136 8283 10710 10584 6811 +9137 7822 8828 11212 6990 +9138 9256 6635 10407 9414 +9139 10142 7007 11538 9063 +9140 9981 7455 10325 9295 +9141 10780 10287 9295 10325 +9142 8124 8666 11789 6299 +9143 8693 7036 10393 9793 +9144 11239 9399 10559 7202 +9145 10354 7408 11581 9023 +9146 8072 10657 6921 8708 +9147 9136 8726 12192 7320 +9148 8104 10640 6958 9113 +9149 8004 9055 7247 11704 +9150 9417 7115 10309 8923 +9151 7329 9148 8163 11326 +9152 8607 8170 12265 11130 +9153 10166 9932 10453 6415 +9154 8292 6757 11730 8662 +9155 12216 8791 10540 6538 +9156 7205 8644 6561 11042 +9157 7698 11251 7354 9719 +9158 6269 9811 8238 10839 +9159 9370 7837 11759 10126 +9160 6999 8287 12021 8949 +9161 8508 9110 12116 6339 +9162 7646 8392 10076 6247 +9163 7820 10541 7545 10634 +9164 6826 8609 11125 7051 +9165 7684 10549 6594 9276 +9166 9056 9519 9634 7261 +9167 9173 9044 11686 6252 +9168 7524 11225 10716 8664 +9169 6948 8661 10585 11023 +9170 6864 11054 10479 7911 +9171 10083 6981 10447 9114 +9172 9742 6273 10101 9331 +9173 7663 8418 11503 10555 +9174 8557 6779 10555 11503 +9175 9999 6653 11871 11903 +9176 6616 8928 10286 11389 +9177 6617 10069 7238 9296 +9178 6601 9440 7572 9269 +9179 8300 7489 10653 11724 +9180 8644 9092 10845 6561 +9181 8855 6643 11741 8670 +9182 10650 8176 10881 7031 +9183 8403 7312 11018 8833 +9184 7017 8386 6455 11611 +9185 10981 6495 11098 11151 +9186 8673 8055 10068 6848 +9187 11592 8093 11303 9011 +9188 7533 10425 7253 9369 +9189 9606 8676 11774 7176 +9190 10018 10222 10644 7651 +9191 9420 7289 9871 9830 +9192 11054 6864 9562 11455 +9193 7998 11866 6692 9501 +9194 10156 10253 8560 6837 +9195 9997 7570 10806 8694 +9196 7347 9692 8126 12077 +9197 9031 6388 10612 10411 +9198 6927 11706 7839 9407 +9199 9520 7241 11076 10794 +9200 6832 8925 7211 11468 +9201 8623 6882 8806 12164 +9202 7271 12174 12164 8806 +9203 6258 10110 7420 9348 +9204 9874 8506 11248 6294 +9205 10013 7213 10210 6317 +9206 8898 9892 10615 7515 +9207 8656 9531 9996 6610 +9208 8728 7247 12263 8757 +9209 8768 180 181 10864 +9210 7700 9677 7561 10269 +9211 10064 9007 10735 6961 +9212 9299 9883 10818 7447 +9213 6786 9084 11838 8648 +9214 8861 6348 10021 9556 +9215 7970 10103 6709 9666 +9216 7068 11160 7972 10518 +9217 9575 7357 12203 8917 +9218 10414 7415 11233 8646 +9219 7801 9650 7180 10360 +9220 8984 7195 11624 8646 +9221 7130 10272 8046 11287 +9222 9222 9939 12153 8423 +9223 10950 6292 9428 10291 +9224 7886 6580 11401 9552 +9225 6885 10429 12096 8172 +9226 9184 7311 9489 6393 +9227 8440 11502 7829 9625 +9228 6344 9028 7596 9867 +9229 7812 9975 7140 9700 +9230 8253 8653 11373 6546 +9231 9112 6669 11947 10230 +9232 10869 7565 11072 8769 +9233 8022 11037 6808 11538 +9234 10294 7596 11965 8574 +9235 8051 10982 11141 6862 +9236 7417 8224 12084 10624 +9237 9917 9331 10101 7400 +9238 7886 8657 10980 6580 +9239 8467 9291 10120 6638 +9240 6630 10116 7477 10132 +9241 11832 6874 11841 8890 +9242 6864 11131 12270 9562 +9243 169 170 11735 8689 +9244 7644 10289 11656 9010 +9245 9346 106 107 12225 +9246 6474 11913 9385 8679 +9247 8822 188 189 10049 +9248 8079 10535 8166 11688 +9249 8300 11739 9177 6544 +9250 9149 8881 12228 6475 +9251 12259 7074 11533 8613 +9252 6641 10123 7435 10047 +9253 6442 7916 10530 11948 +9254 10781 6309 10118 7902 +9255 9907 10017 10195 6949 +9256 9628 11347 7893 12212 +9257 8590 7211 8925 10548 +9258 7677 9426 7004 10849 +9259 6964 11105 7546 8677 +9260 11957 8749 12137 6736 +9261 10348 6406 10085 11712 +9262 10136 7395 9978 6545 +9263 8049 6553 11576 8772 +9264 6308 7826 11942 9252 +9265 9231 9987 9739 7442 +9266 9942 6509 10952 9087 +9267 10219 6903 11637 8685 +9268 8128 11128 6767 10272 +9269 7502 10082 6272 9796 +9270 10225 6763 10785 7686 +9271 9927 9648 10204 7508 +9272 10771 6382 10204 9648 +9273 12099 6499 8702 11842 +9274 7493 10570 8020 10795 +9275 8065 9434 7024 12158 +9276 7418 12089 8549 12170 +9277 11443 7805 12132 8947 +9278 6585 10960 7772 9984 +9279 7385 9995 6634 9627 +9280 10013 9956 9707 7213 +9281 10329 7206 12159 9060 +9282 8168 11256 7859 9782 +9283 10038 8688 11142 7610 +9284 12249 9019 10156 6837 +9285 10378 9196 10175 7336 +9286 10621 8667 11284 6613 +9287 9925 6634 9995 9644 +9288 10160 7569 9644 9995 +9289 10661 8232 10998 7729 +9290 10378 8758 7487 10717 +9291 190 191 10829 7680 +9292 7995 7405 9525 12146 +9293 7210 10782 7774 10455 +9294 7585 10057 7422 10058 +9295 10885 7175 10423 8970 +9296 9966 6342 10638 8780 +9297 7413 11532 6469 8682 +9298 10908 6423 11427 8672 +9299 10047 9129 10531 6641 +9300 9638 7511 10531 9129 +9301 6967 10025 7874 11396 +9302 6459 11141 10982 8663 +9303 6265 7940 10187 9668 +9304 10278 10408 9902 6687 +9305 7102 11260 8105 10629 +9306 10420 8919 11548 7479 +9307 9170 9049 11168 6639 +9308 10743 7609 11071 8688 +9309 8238 6866 11756 8239 +9310 6719 10416 7814 10460 +9311 10694 9053 11911 6529 +9312 6948 9984 7772 9696 +9313 8174 6741 7858 11203 +9314 9133 7800 9530 9828 +9315 8695 7485 9425 7212 +9316 11437 6350 11418 8921 +9317 9767 8745 10814 7602 +9318 8329 6430 11752 9332 +9319 9540 10931 11266 8023 +9320 10639 7817 10267 10816 +9321 10063 6969 11657 8700 +9322 10245 8700 11657 7704 +9323 9677 6654 11879 9180 +9324 11040 9271 11602 6791 +9325 8200 10867 7709 10894 +9326 8323 11285 131 132 +9327 9961 6637 10222 9175 +9328 8736 10770 8761 6425 +9329 6910 12073 8439 10989 +9330 8163 10454 7503 10427 +9331 7573 10101 6273 9572 +9332 9294 6633 10186 9249 +9333 9406 9412 10542 8856 +9334 7824 9843 7165 9470 +9335 10640 7680 10829 8801 +9336 7612 8757 12263 10305 +9337 7526 9461 7506 10114 +9338 9166 8814 10733 7438 +9339 9426 7677 10125 10491 +9340 9570 6646 9739 9987 +9341 12206 7982 10524 9024 +9342 10339 10776 12192 8726 +9343 6798 7962 10536 10836 +9344 7342 10298 7076 9087 +9345 7560 9998 7584 9999 +9346 12055 8241 11302 9115 +9347 6680 10994 8373 11516 +9348 6289 10127 7588 10042 +9349 6614 8841 11579 9790 +9350 10313 8694 11931 7656 +9351 7406 11954 8015 9580 +9352 10635 8860 11742 6956 +9353 6744 11663 8081 11153 +9354 11376 8699 11511 7020 +9355 6573 9393 10359 12127 +9356 8396 9185 6364 11282 +9357 8525 7012 10837 9484 +9358 9037 9096 10304 7159 +9359 11600 9799 11161 7323 +9360 9460 8697 11426 6917 +9361 9343 8961 10699 10191 +9362 11784 8188 11760 6789 +9363 9985 6472 8718 10972 +9364 9952 9208 10235 7088 +9365 8844 7549 9683 10350 +9366 7154 9644 7569 10421 +9367 7558 10148 6625 10889 +9368 6633 9927 7508 10186 +9369 8950 9437 10314 7135 +9370 167 168 11006 8998 +9371 10245 7704 11068 8960 +9372 176 8960 11068 175 +9373 12001 6996 10513 8631 +9374 8289 9514 12216 10914 +9375 9929 10099 11140 7404 +9376 11842 8702 11176 7262 +9377 10300 6661 8827 11306 +9378 12226 8304 11372 6907 +9379 10936 7664 11324 8705 +9380 11267 7343 11174 9641 +9381 11667 7460 10928 8982 +9382 6718 10431 7788 10362 +9383 9096 6285 11278 10304 +9384 11176 8702 12010 6934 +9385 8825 10740 10048 6859 +9386 10146 9884 10660 6626 +9387 7763 10264 10897 6930 +9388 7455 9981 6524 9813 +9389 8381 9366 10808 7146 +9390 6877 9394 11356 8092 +9391 11708 10170 7783 11257 +9392 8846 6626 10660 11385 +9393 9638 10453 8963 7511 +9394 6300 9928 7474 10165 +9395 10021 7436 10135 9556 +9396 8732 9494 6495 10981 +9397 7556 10172 6687 9902 +9398 8930 8832 10654 6974 +9399 10414 6683 8708 11558 +9400 11990 7040 11156 8763 +9401 8409 6962 12257 8771 +9402 10205 6270 9081 10349 +9403 12031 9397 10462 8258 +9404 11768 6940 9797 9812 +9405 6559 9779 7789 10714 +9406 11919 8204 11423 6479 +9407 9517 9380 10183 7192 +9408 11905 8706 11319 6954 +9409 8268 6759 11990 8763 +9410 6751 10157 7495 9737 +9411 8742 7129 12018 8741 +9412 9629 8769 11072 7523 +9413 10596 9079 10654 7528 +9414 11249 6974 10654 9079 +9415 11478 7952 11811 8739 +9416 6994 9618 7408 10308 +9417 10176 7190 10406 9027 +9418 10353 6553 10733 8814 +9419 9169 11529 6762 10058 +9420 9946 7370 11665 9050 +9421 6604 9944 7499 10314 +9422 7150 9901 7882 11627 +9423 7686 10785 6511 7445 +9424 8893 7697 11038 8378 +9425 174 8740 8305 173 +9426 11874 8824 10724 6745 +9427 8434 10658 6871 11658 +9428 10300 11306 7987 12074 +9429 9536 7189 9556 10135 +9430 8393 11852 7087 9881 +9431 6349 8856 10542 11476 +9432 6254 11530 7095 8630 +9433 6438 7987 11306 10311 +9434 11957 7890 12134 8749 +9435 8323 132 133 10734 +9436 6911 9759 9605 8344 +9437 9263 8731 11312 6922 +9438 9214 9205 12213 7807 +9439 6507 8731 7399 11668 +9440 8965 9604 10127 6289 +9441 10256 8857 11815 7775 +9442 11478 8739 11096 6843 +9443 7419 10344 6673 9645 +9444 8305 8740 11657 6969 +9445 11068 7704 11657 8740 +9446 9296 9273 10268 7300 +9447 8694 10313 9519 6647 +9448 9747 11924 9811 7217 +9449 7982 6424 11046 10524 +9450 11344 6554 11794 8832 +9451 8945 6435 11550 8925 +9452 10411 10195 10017 7470 +9453 10279 6616 10847 9090 +9454 10493 7648 10138 10560 +9455 7451 9757 7256 10106 +9456 7606 10065 6314 10179 +9457 11346 10446 9184 7701 +9458 12146 10002 11853 10527 +9459 11506 8713 10119 7318 +9460 7058 10464 8308 11818 +9461 8584 7056 11214 8734 +9462 9569 6272 10082 9704 +9463 11346 7788 11629 8725 +9464 10075 6921 11773 8755 +9465 10358 6781 11618 9672 +9466 11342 8111 11869 6536 +9467 10063 8735 11535 7665 +9468 7904 6880 10059 9834 +9469 7875 11979 6666 10199 +9470 11535 8735 11241 6995 +9471 7809 9763 6850 10061 +9472 7799 10164 6912 11077 +9473 6870 10357 7623 10628 +9474 9247 6751 9737 10455 +9475 8840 6570 10522 9251 +9476 7595 11434 8624 10989 +9477 7920 6877 10895 9447 +9478 9994 8968 10916 7337 +9479 8736 6943 11595 8737 +9480 7566 9873 7572 9440 +9481 10759 8810 11566 7473 +9482 11328 6810 11578 7745 +9483 9026 8223 11052 11625 +9484 9099 10924 11803 6348 +9485 9837 10160 9568 6617 +9486 9982 8738 11429 6271 +9487 8721 7043 11758 8722 +9488 10268 8999 10492 7614 +9489 9023 12239 6411 10354 +9490 8365 7281 9809 9364 +9491 9411 10836 11912 8976 +9492 9477 9414 10407 7307 +9493 11540 8911 11088 6714 +9494 7278 8091 10676 9611 +9495 11747 11735 170 171 +9496 6969 11735 11747 8305 +9497 6594 10549 7759 9762 +9498 7079 8048 12082 8793 +9499 11891 6462 11672 8868 +9500 8281 9324 11984 7142 +9501 10089 8358 10055 7149 +9502 10726 8750 11281 7603 +9503 7586 10263 7723 10355 +9504 10607 8454 11404 8057 +9505 10510 7894 10755 9008 +9506 12254 9713 10136 7872 +9507 11435 8190 11276 6926 +9508 10425 7533 10044 10079 +9509 7033 6444 11718 8707 +9510 10847 6616 11389 8771 +9511 9705 10180 9950 9706 +9512 7200 8407 9536 11966 +9513 10238 8756 11604 7104 +9514 8005 11477 8703 12064 +9515 7657 10588 7896 11711 +9516 8268 8763 11156 7481 +9517 9290 8586 12178 7472 +9518 11653 7032 10749 8767 +9519 11109 8985 11347 7060 +9520 10326 6671 12066 7529 +9521 7815 11217 8186 8846 +9522 8111 6669 11047 8931 +9523 10732 9332 10764 6708 +9524 9832 7470 10017 7486 +9525 8737 6560 8955 10589 +9526 8296 11805 7432 12186 +9527 9642 7232 9969 10383 +9528 7537 10080 7639 10274 +9529 10238 6349 11476 8756 +9530 11534 9881 11837 6814 +9531 12018 7129 10645 8372 +9532 10277 6434 11788 8904 +9533 7030 11080 6758 8765 +9534 6925 11989 7738 10750 +9535 6797 12189 8008 10112 +9536 11404 9709 9808 7028 +9537 8067 10562 7581 10973 +9538 8195 11138 7667 11321 +9539 7685 9818 6274 10079 +9540 10510 9008 11316 7423 +9541 8514 9766 10554 7141 +9542 7240 7958 11847 10497 +9543 7038 11951 7773 8789 +9544 6298 9509 7581 10562 +9545 7461 9409 6271 10365 +9546 9633 8286 10619 7765 +9547 8659 7042 11004 8788 +9548 9858 7614 10974 9154 +9549 159 160 11458 10066 +9550 12065 7711 9665 8115 +9551 8076 11880 8075 10688 +9552 6450 8991 7961 10563 +9553 7565 8841 6614 11072 +9554 8016 11336 7870 8764 +9555 8489 11213 8768 7575 +9556 11630 8768 11213 6962 +9557 7448 11042 6561 8903 +9558 9665 7711 6337 8891 +9559 8598 12117 110 111 +9560 8068 11580 6838 10139 +9561 8295 12224 6357 10628 +9562 9683 7301 10056 10350 +9563 7302 9194 6513 10598 +9564 8868 11992 9200 6954 +9565 9531 9520 12223 7407 +9566 8776 7167 10266 9481 +9567 11752 7414 10764 9332 +9568 7892 11472 8274 10553 +9569 9062 7389 12066 8807 +9570 9055 11651 12263 7247 +9571 9874 7084 12069 8506 +9572 10804 6536 11203 7858 +9573 7463 10192 7635 10171 +9574 9505 10720 10290 7491 +9575 6984 8040 10834 11967 +9576 10358 9672 12082 8048 +9577 8815 6849 8460 9541 +9578 6527 11067 7866 10512 +9579 9491 9069 11527 6809 +9580 7401 10420 7479 10042 +9581 10880 9285 7418 10382 +9582 9392 10331 9471 7108 +9583 10551 8795 11878 6652 +9584 10983 7754 11878 8795 +9585 7080 8151 10763 9861 +9586 9624 9157 10889 7573 +9587 11122 8890 11841 6269 +9588 8984 7093 12253 8851 +9589 10252 6680 11516 8918 +9590 10702 8918 11516 7705 +9591 10239 8956 12247 7891 +9592 11171 6998 12247 8956 +9593 8768 11630 179 180 +9594 10417 9890 12003 7542 +9595 9884 11350 10216 7574 +9596 7570 9795 6720 10806 +9597 9804 7473 11566 8877 +9598 10472 9953 10040 7466 +9599 9115 7151 8819 12055 +9600 6928 9974 8309 11379 +9601 12073 8802 11903 7930 +9602 10175 9196 11418 6350 +9603 7307 10407 7868 10845 +9604 8773 7307 10845 9092 +9605 8555 7675 11856 9924 +9606 11232 7376 9605 9759 +9607 7759 11768 9812 11380 +9608 8820 8821 12032 7153 +9609 12154 6800 11070 8813 +9610 11202 9609 10402 6581 +9611 11720 8083 11437 8781 +9612 7432 11805 8193 11935 +9613 9461 7526 9950 10180 +9614 9392 7108 10359 9393 +9615 6811 7967 11604 10251 +9616 6378 11877 7480 10331 +9617 8633 6893 11123 7313 +9618 8816 8815 9541 7372 +9619 9660 9357 8000 12232 +9620 7163 9734 8555 11926 +9621 11473 8742 11199 7780 +9622 6855 11828 8345 12274 +9623 11800 7944 11816 10318 +9624 6640 10486 8297 9856 +9625 6525 10782 7210 8938 +9626 8965 7088 10783 8938 +9627 9938 8962 11639 6731 +9628 152 7 153 11483 +9629 6345 8155 10862 9240 +9630 7039 9660 7732 11011 +9631 10146 6947 11350 9884 +9632 10058 7422 12145 9169 +9633 7540 9083 7309 10071 +9634 9505 9471 10331 7480 +9635 10497 9091 6965 11689 +9636 8332 7388 11507 9607 +9637 7762 11335 7263 9404 +9638 10882 7929 10803 8457 +9639 6764 10452 7483 10901 +9640 10095 9216 10805 7645 +9641 6499 8395 11328 9986 +9642 8020 10992 7743 10635 +9643 9425 7485 11623 6560 +9644 9399 11239 9512 6574 +9645 10557 7428 11021 9791 +9646 8469 9083 11733 6275 +9647 9393 9058 10657 7446 +9648 10815 7723 10263 9718 +9649 8315 9718 10263 6613 +9650 11163 7639 10080 11866 +9651 6812 9777 7922 11592 +9652 10556 7583 10943 8274 +9653 8497 10643 6986 9088 +9654 7999 11308 141 142 +9655 7653 11220 8267 10848 +9656 10053 7000 11034 8958 +9657 9976 8313 12020 6707 +9658 11093 6477 10872 8377 +9659 130 12245 11612 129 +9660 7427 9846 6625 10148 +9661 8784 7069 9567 10342 +9662 7948 11491 6970 9973 +9663 8179 11766 6452 10232 +9664 10639 10816 9156 7552 +9665 8933 7069 8784 10937 +9666 11135 8924 11357 7592 +9667 11747 172 173 8305 +9668 10901 7750 11222 8848 +9669 11624 9468 11519 6683 +9670 7765 6295 11899 9633 +9671 6778 10511 8730 9877 +9672 10501 10066 11458 7963 +9673 9730 7397 10857 9597 +9674 12259 8564 12060 7074 +9675 8023 6829 11158 8307 +9676 8603 10041 11696 6595 +9677 6529 10666 7593 10694 +9678 10296 7591 11193 7913 +9679 10256 6436 11026 8857 +9680 7956 10141 7563 10299 +9681 10111 6407 11566 8810 +9682 8478 6883 12161 11918 +9683 11441 7655 11479 8817 +9684 9285 8872 10970 6457 +9685 8125 9621 6554 11344 +9686 11700 8377 11758 7043 +9687 10468 7179 11010 7329 +9688 8556 7021 9127 10550 +9689 142 9773 10469 7999 +9690 11164 8875 12198 7773 +9691 12060 8933 10937 7980 +9692 7156 9258 6696 10473 +9693 8529 8821 11750 8819 +9694 6768 8102 11087 10448 +9695 9061 11977 9383 6416 +9696 9254 6355 11035 9039 +9697 10773 7601 10959 9959 +9698 7011 8876 6686 10987 +9699 8102 10610 6473 11087 +9700 10713 11874 11764 7831 +9701 7466 9264 6288 10472 +9702 124 11520 123 6 +9703 7852 10144 6290 10907 +9704 10693 6418 10029 10363 +9705 6319 8010 12235 9810 +9706 7794 10531 7511 10398 +9707 6903 8447 11934 11637 +9708 10112 9046 11132 6797 +9709 7068 9164 7345 11160 +9710 10822 6975 8831 11831 +9711 7879 10496 7633 10614 +9712 10919 6656 11165 9120 +9713 7617 9571 6996 11311 +9714 10031 8843 11929 6281 +9715 11325 8350 11239 7202 +9716 10182 8250 11997 6544 +9717 9104 9362 10296 6703 +9718 6658 10114 7506 10040 +9719 6334 11340 7584 8823 +9720 8850 8879 10835 6341 +9721 7495 10157 7589 10315 +9722 9556 7189 12081 8861 +9723 12031 6955 12083 9397 +9724 10303 7654 10167 10484 +9725 8928 7500 12123 8929 +9726 9918 7411 12009 8853 +9727 7473 10270 7675 10271 +9728 9393 7446 10625 9392 +9729 9758 7620 11354 8829 +9730 10591 8829 11354 6679 +9731 10344 10098 10143 6673 +9732 10910 9220 11802 7827 +9733 9947 6541 11802 9220 +9734 7998 9501 7014 10379 +9735 8229 10155 10108 6869 +9736 8138 11090 11187 7689 +9737 10127 7495 10315 10036 +9738 12261 9654 7490 10675 +9739 8930 8599 11344 8832 +9740 7409 9667 6656 10285 +9741 8039 6330 8626 10692 +9742 7003 7776 10353 8814 +9743 7217 10129 6494 9747 +9744 11210 8590 10548 7668 +9745 9900 6596 10341 11697 +9746 7400 10258 6625 9712 +9747 11417 7095 10442 11843 +9748 10492 8999 10771 7707 +9749 7743 10415 7480 11877 +9750 10143 10098 10074 7555 +9751 6891 9820 8082 11732 +9752 11591 9876 10561 7733 +9753 11887 9067 12202 7880 +9754 6531 8978 11872 8979 +9755 8615 8979 11872 7013 +9756 11097 6841 12065 8115 +9757 9365 7340 10227 9794 +9758 7580 8904 11788 9635 +9759 6387 10018 7651 10471 +9760 6816 9738 7601 10773 +9761 6641 10531 7794 10419 +9762 11370 7873 10557 9791 +9763 9692 9053 10694 7063 +9764 7100 9377 12123 10465 +9765 7397 11953 8314 10857 +9766 8731 9263 11876 7399 +9767 8672 6981 11579 8841 +9768 10428 8860 11877 6378 +9769 8983 7200 11966 8865 +9770 8725 6786 10446 11346 +9771 11185 7643 11929 8843 +9772 6442 11133 8189 11194 +9773 10617 11897 11345 7066 +9774 8182 10457 11982 10765 +9775 7609 10742 6374 9600 +9776 9770 7431 10297 9160 +9777 11672 7373 11992 8868 +9778 8678 7299 10507 10506 +9779 10032 7703 9248 6500 +9780 9510 11814 11410 8186 +9781 6703 10437 8602 11785 +9782 7001 8216 7976 10445 +9783 12238 8900 11080 7030 +9784 7359 9227 6986 10643 +9785 10737 8966 11858 6668 +9786 10308 7779 11858 8966 +9787 7856 10394 11485 8352 +9788 7424 10188 6599 9410 +9789 9593 9657 12024 7465 +9790 8778 6584 11574 8847 +9791 7798 10535 6451 10439 +9792 7391 8533 12156 10115 +9793 113 9035 10760 112 +9794 10324 7118 10648 9511 +9795 11216 7562 11212 8828 +9796 10183 10074 10098 7507 +9797 10501 7963 12095 9506 +9798 6595 10741 10721 8603 +9799 10372 7370 12193 8859 +9800 8817 11479 6248 11814 +9801 6492 8620 6878 11694 +9802 7679 9746 7197 11836 +9803 8317 6973 12198 8875 +9804 10171 11431 10201 7463 +9805 11876 8896 11139 7399 +9806 10428 7412 11742 8860 +9807 7733 10646 6783 11591 +9808 198 199 11932 8875 +9809 11815 8857 12168 6946 +9810 8908 8921 11418 7375 +9811 12206 9024 10809 6738 +9812 10221 7899 11617 8715 +9813 10815 8922 12221 6320 +9814 11050 8917 12203 6508 +9815 8691 8973 8187 11669 +9816 11333 7463 10201 12154 +9817 9268 10580 10612 6388 +9818 10888 9752 10522 6570 +9819 9003 6747 12242 11236 +9820 10803 6716 10338 10878 +9821 8234 12145 7422 9460 +9822 10340 10516 12048 7919 +9823 6812 11114 8100 11779 +9824 6440 10863 8496 11751 +9825 10578 8895 12034 7580 +9826 8926 6261 9366 11622 +9827 7067 10639 7552 9534 +9828 7991 11259 7564 10458 +9829 9522 7112 12034 8895 +9830 6259 10556 8274 11472 +9831 6984 10113 10364 8040 +9832 109 11360 12051 9652 +9833 9499 6831 7688 11557 +9834 9630 7567 10346 10345 +9835 9018 10846 12104 8034 +9836 7101 9626 10384 7881 +9837 8650 10610 7284 9875 +9838 6983 9065 7017 9384 +9839 8123 6652 11878 8900 +9840 10242 8900 11878 7754 +9841 9535 7050 11369 8881 +9842 8427 6485 11536 8647 +9843 11653 9342 10109 7032 +9844 7112 8904 7580 12034 +9845 11357 8924 11796 158 +9846 10875 6445 12202 9067 +9847 10950 9010 10873 6292 +9848 7643 9782 6699 10715 +9849 9711 7282 9308 10569 +9850 10431 9136 10888 7636 +9851 6639 10566 7158 9170 +9852 6963 10023 11168 8264 +9853 9801 11229 10480 6851 +9854 11353 6490 10361 8880 +9855 8339 8903 7868 11265 +9856 9372 7159 10304 9997 +9857 11887 6960 11089 9067 +9858 10875 9067 11089 7600 +9859 11130 12265 10004 7543 +9860 7885 11261 6873 12098 +9861 9035 113 114 10726 +9862 9148 10587 11435 6926 +9863 7987 6438 10905 8448 +9864 7002 10819 7371 9059 +9865 8322 6444 11743 9368 +9866 7696 6483 10475 8499 +9867 10206 10138 10278 6687 +9868 7750 9729 6417 11222 +9869 8952 9597 10857 7164 +9870 10690 6267 11547 9043 +9871 7099 11565 6938 8791 +9872 10237 8947 12267 7846 +9873 6871 11119 8593 11658 +9874 11686 9044 11975 7638 +9875 11687 12269 10939 6460 +9876 8876 7011 11381 8907 +9877 8468 7174 11181 8936 +9878 6270 10205 7555 10074 +9879 8921 8908 11393 7044 +9880 9377 6480 8929 12123 +9881 8385 9086 10828 7059 +9882 9892 8898 12004 6965 +9883 8007 8210 11723 9729 +9884 8003 10485 6323 9518 +9885 7676 10633 7628 10450 +9886 8271 11645 7814 10416 +9887 7726 11190 8662 11730 +9888 10402 9609 11359 7035 +9889 8393 6928 11379 12061 +9890 10594 8715 12251 8027 +9891 6861 8902 11707 7953 +9892 9090 10847 7828 12083 +9893 7597 8987 7202 10559 +9894 9649 8466 11230 7530 +9895 7041 9714 8551 11825 +9896 8166 10535 7798 11446 +9897 12143 6381 9974 8207 +9898 11240 12137 10867 8200 +9899 11783 6755 10073 11826 +9900 11179 6311 11120 9126 +9901 8178 6897 11248 8506 +9902 8098 9469 6507 11668 +9903 7098 8912 6484 11470 +9904 9302 6732 12050 11243 +9905 7993 9772 12108 6432 +9906 8578 11994 10861 7850 +9907 8905 10383 9969 7529 +9908 8896 6915 11457 11139 +9909 9073 6305 11218 8298 +9910 8910 8911 11540 7124 +9911 7871 9992 6754 11636 +9912 10538 8704 10928 7460 +9913 8869 7540 12255 11701 +9914 8309 7510 11569 6282 +9915 6313 12237 8159 12003 +9916 6502 10109 9342 8077 +9917 10751 6935 7843 9260 +9918 8975 7086 9029 10918 +9919 182 9792 10864 181 +9920 9949 10173 9759 6911 +9921 10910 8971 11666 6991 +9922 10689 6853 10943 8690 +9923 7625 10595 7031 9850 +9924 9148 7329 11010 10587 +9925 6458 10709 8869 11701 +9926 8209 6989 11353 8880 +9927 10595 9246 10650 7031 +9928 10140 7150 11462 9159 +9929 10967 7906 10316 11989 +9930 11034 6674 12240 8958 +9931 6905 11682 7798 10439 +9932 6865 8236 10752 9594 +9933 11505 6733 9452 7339 +9934 7116 11378 8065 10840 +9935 10319 9375 12252 7057 +9936 10331 9392 10625 6378 +9937 8237 10619 7066 11345 +9938 9813 9132 10825 7455 +9939 9033 7137 10644 9334 +9940 7054 9557 7860 12033 +9941 8355 10370 11513 7768 +9942 7615 10052 6692 10293 +9943 8368 11988 7028 8410 +9944 10011 7094 10925 8321 +9945 11670 7776 10863 10130 +9946 9087 7076 11641 9942 +9947 12221 8922 11652 7835 +9948 8448 10905 7410 10067 +9949 7207 7783 11390 9078 +9950 7790 9289 8095 11449 +9951 10388 7554 10241 7537 +9952 10589 8955 11861 7752 +9953 8248 7025 11861 8955 +9954 11555 9208 11548 6605 +9955 7709 11928 9333 8526 +9956 6326 12200 8094 11493 +9957 8412 6556 9910 9608 +9958 10393 8892 7578 9793 +9959 7377 9340 7634 10896 +9960 6564 8706 11905 9436 +9961 10462 9233 11650 7478 +9962 7622 11415 6463 8941 +9963 11475 8935 11526 7905 +9964 7555 10172 7556 10143 +9965 7475 8486 10880 10424 +9966 8303 7045 11438 8941 +9967 9928 7292 12250 7474 +9968 8918 9347 10820 7029 +9969 7626 11952 7197 8581 +9970 10836 9411 11713 6798 +9971 11369 7050 10520 12219 +9972 8671 10736 143 144 +9973 196 197 11164 9174 +9974 9885 10142 9063 6376 +9975 11130 6836 10397 8607 +9976 8220 10521 6404 11647 +9977 8391 11742 7412 11559 +9978 8586 9290 11286 6501 +9979 11234 6582 10725 9566 +9980 8137 9013 11545 7079 +9981 10241 7554 10321 6390 +9982 7629 10332 7556 9902 +9983 11253 8426 11323 8006 +9984 8017 12207 8637 10851 +9985 6636 8942 7690 11685 +9986 11143 10009 11424 7468 +9987 6476 9333 11055 8502 +9988 131 8975 12245 130 +9989 7721 9856 6868 11983 +9990 11710 7559 11291 9014 +9991 8926 7396 11436 8680 +9992 8674 7253 10425 9776 +9993 8636 7177 10924 9099 +9994 8096 11046 7611 10784 +9995 11562 6363 10600 11829 +9996 7353 9709 11404 8454 +9997 6555 12188 7172 8973 +9998 8231 6639 11168 10023 +9999 8320 12176 7410 10905 +10000 8918 10702 6454 9347 +10001 9310 10223 10413 7612 +10002 9898 10413 10223 7661 +10003 11017 9432 10639 7067 +10004 11791 6983 11316 9008 +10005 10758 7348 12226 9715 +10006 8011 10090 7124 11540 +10007 8451 8948 10184 6359 +10008 6898 8386 12233 9450 +10009 9285 11366 9777 7418 +10010 9039 11035 12159 7206 +10011 8657 8484 11359 6937 +10012 6635 9823 7868 10407 +10013 8652 7342 9087 10952 +10014 7436 10877 6611 9632 +10015 9780 11322 10988 6256 +10016 8878 9838 12218 6365 +10017 8329 11933 8944 6857 +10018 7002 11613 6650 10819 +10019 9899 7633 10496 9218 +10020 11394 7173 10997 9646 +10021 9693 7497 11092 9100 +10022 7086 8975 131 11285 +10023 8617 9592 11920 6953 +10024 9126 7025 10919 9120 +10025 10218 7589 11593 10019 +10026 11769 11932 199 200 +10027 8598 111 112 10760 +10028 6773 10005 7870 11336 +10029 10768 9765 9028 6344 +10030 7627 11273 7055 9046 +10031 8548 9771 10443 7297 +10032 7519 9307 6727 10793 +10033 7925 10858 6884 10575 +10034 6736 10838 8507 11957 +10035 10053 8958 12240 7749 +10036 9996 8994 11245 7201 +10037 7454 9784 6242 10479 +10038 7104 11604 7967 10026 +10039 6966 10563 7961 11821 +10040 10432 10581 10280 7658 +10041 11063 6989 11667 8982 +10042 10909 8455 12125 7721 +10043 10138 7648 10321 10278 +10044 7575 11329 6821 9728 +10045 9994 11397 6463 8968 +10046 10308 8966 12019 6994 +10047 6370 9115 11302 8520 +10048 10409 11880 10357 6870 +10049 6923 11678 9740 8587 +10050 7762 11448 6435 9006 +10051 6566 9735 9152 11421 +10052 7354 11382 11937 10546 +10053 8498 9003 11236 7258 +10054 9932 7607 11573 7512 +10055 7555 10206 6687 10172 +10056 8301 183 184 10578 +10057 9329 6767 11128 9424 +10058 8484 9002 7035 11359 +10059 10379 7014 11187 9015 +10060 12033 7860 11159 11085 +10061 7135 10314 7499 9990 +10062 8695 10852 9744 7485 +10063 6476 11190 7726 11609 +10064 7909 11925 6878 8620 +10065 10132 7494 11717 6630 +10066 6672 9159 7853 12129 +10067 10843 8997 12242 6747 +10068 9761 8437 10964 11296 +10069 7587 10206 7555 10205 +10070 11893 8062 11147 9304 +10071 9886 9588 11930 9836 +10072 10252 9689 10707 6680 +10073 10282 7576 10707 9689 +10074 8253 11377 9717 7196 +10075 8115 9665 11998 6842 +10076 7619 10440 8256 11938 +10077 11055 9333 11928 6972 +10078 8826 10193 11318 7383 +10079 7995 6268 12272 7405 +10080 11880 10409 12114 8075 +10081 12131 9376 11034 7000 +10082 8506 12069 8714 8178 +10083 10321 7554 10408 10278 +10084 9649 11208 8188 6788 +10085 10148 7558 11282 10528 +10086 6744 11153 7136 9137 +10087 9909 6977 10944 9381 +10088 6952 12039 7633 9899 +10089 11300 7977 10698 7054 +10090 12023 7568 6863 8658 +10091 7778 11757 6386 10249 +10092 10468 12187 9789 7179 +10093 8241 10070 7465 12024 +10094 9509 9717 12179 7581 +10095 6641 10450 7628 10123 +10096 10664 7482 11188 9602 +10097 8477 8971 12090 6740 +10098 6332 10727 7430 9431 +10099 9815 8976 11912 6806 +10100 7536 11894 8178 10641 +10101 8300 6544 11997 9807 +10102 9667 9610 10921 9957 +10103 9109 9014 11291 6399 +10104 7004 8544 11024 10849 +10105 7126 8335 11872 8978 +10106 9118 9484 10837 7462 +10107 8161 10725 6582 9691 +10108 7931 10244 11851 10154 +10109 9977 10194 11147 7392 +10110 7105 10609 12112 9467 +10111 7923 7646 10095 11895 +10112 7089 8997 7606 11412 +10113 9920 7350 11168 9049 +10114 6673 10966 7137 9645 +10115 10241 10293 10080 7537 +10116 8287 11970 10576 7015 +10117 6547 10576 11970 8347 +10118 6746 9930 7521 10881 +10119 10151 8349 11686 7638 +10120 8364 10661 7729 12147 +10121 8985 8420 11493 7367 +10122 7440 9186 7989 11003 +10123 6712 9106 7158 11057 +10124 7068 9302 7600 11045 +10125 12067 9654 11693 7710 +10126 6878 11915 8774 11694 +10127 10072 8995 11504 7022 +10128 11883 6742 10766 9970 +10129 8263 9945 6365 12218 +10130 9290 7472 10260 11533 +10131 11286 9290 11533 7074 +10132 7228 11582 6730 9048 +10133 11836 7197 11952 8290 +10134 7660 10426 7608 10403 +10135 7447 10818 8276 9622 +10136 11583 7535 10547 9879 +10137 7850 10861 7430 9993 +10138 8524 8525 10214 6532 +10139 8454 9584 10629 7353 +10140 6527 9571 7617 11067 +10141 11006 7665 11535 8998 +10142 6294 11248 8064 12088 +10143 7892 10616 6446 9929 +10144 7684 10739 7759 10549 +10145 7306 10375 6729 9904 +10146 7655 11441 6694 9029 +10147 6560 8737 11595 9425 +10148 8576 10849 11024 6688 +10149 9761 11296 12205 7574 +10150 10040 10522 9752 7466 +10151 7615 10381 7666 10333 +10152 8291 6776 11007 9158 +10153 7605 10399 7658 10280 +10154 9930 8354 6488 10790 +10155 172 11747 171 8 +10156 12016 9457 11573 6789 +10157 6861 7953 12239 9023 +10158 10455 7774 11501 9247 +10159 8657 7563 11408 10980 +10160 6734 10440 7619 8286 +10161 6995 11241 9377 8315 +10162 7144 11677 7802 10673 +10163 8589 9748 6708 10764 +10164 6710 10189 7914 10495 +10165 11715 7736 10604 10312 +10166 9180 11879 7797 11939 +10167 11729 9522 11488 7813 +10168 6754 10457 8182 11636 +10169 10102 7075 10883 8887 +10170 8291 9158 11459 7117 +10171 6748 10603 6456 9765 +10172 142 143 10736 9773 +10173 10931 9540 11259 6430 +10174 10460 7814 11584 11778 +10175 6306 8428 11337 9499 +10176 7062 8280 11393 9538 +10177 7052 10669 7917 9585 +10178 8596 6337 7711 10779 +10179 10715 9027 11929 7643 +10180 12031 9032 12220 6955 +10181 10007 6320 12221 9032 +10182 10873 9010 11656 7097 +10183 11608 9719 10957 6410 +10184 10334 7625 11025 9316 +10185 11984 6856 10933 9749 +10186 10889 9157 11522 7558 +10187 200 5 105 11769 +10188 12002 8130 10781 6951 +10189 11823 6971 9810 12235 +10190 10752 7742 11270 9594 +10191 12072 10228 10365 6271 +10192 7553 9831 6722 10564 +10193 8881 7449 10729 9535 +10194 9428 7491 10290 10291 +10195 8557 9016 11643 7070 +10196 9596 11772 6763 7531 +10197 8510 6820 8358 9935 +10198 11942 8686 6746 9252 +10199 6747 12098 7849 10843 +10200 8355 7976 6402 10945 +10201 9155 6514 10020 10953 +10202 10564 7748 10953 10020 +10203 11060 8589 10764 7414 +10204 10279 9090 12220 7835 +10205 8661 7169 11115 9149 +10206 10096 7719 10777 10320 +10207 9123 8028 11654 10718 +10208 6485 8293 10947 10477 +10209 6790 10202 8049 11720 +10210 8747 9025 12053 7090 +10211 8908 7375 11775 10366 +10212 6440 11751 7764 9222 +10213 8288 9586 10706 6959 +10214 10536 8680 11912 10836 +10215 8837 8722 11758 7990 +10216 9818 10330 10739 7684 +10217 9878 10191 11225 7524 +10218 8791 7217 10892 10540 +10219 10690 9043 12195 8087 +10220 11995 8870 11204 7431 +10221 10277 9643 11564 7793 +10222 9299 6257 10507 9883 +10223 7412 10428 8072 11519 +10224 10142 9885 11372 7484 +10225 7328 11271 8000 6302 +10226 8600 9868 6898 9451 +10227 9303 9286 10960 6585 +10228 11544 11162 12085 8441 +10229 6865 9238 8045 11053 +10230 10444 10545 10333 7666 +10231 11795 9265 11453 7536 +10232 10507 7299 10818 9883 +10233 10406 6281 11929 9027 +10234 8564 12259 6848 10514 +10235 7430 10861 6850 9431 +10236 10083 9114 12132 7805 +10237 11811 7952 10748 11490 +10238 6390 10321 7648 10367 +10239 7597 10559 6782 12183 +10240 8789 7773 12198 10568 +10241 6457 10970 9359 8164 +10242 7621 10404 7654 10303 +10243 9167 7488 9043 11547 +10244 8088 10712 6881 11907 +10245 8025 10908 7565 10869 +10246 7496 9828 6667 10281 +10247 7589 10218 6752 10315 +10248 8496 11111 7764 11751 +10249 6431 11884 8009 10024 +10250 10374 9407 11220 7653 +10251 11427 6423 11220 9407 +10252 9058 7994 10133 11773 +10253 11061 9694 12020 8313 +10254 8257 10968 11761 8423 +10255 11787 6961 10735 9112 +10256 10543 6935 10751 9882 +10257 7042 11953 7397 9042 +10258 11435 10587 11010 8212 +10259 10370 8355 11403 6945 +10260 6635 12150 8002 9823 +10261 7824 9470 11698 6255 +10262 11561 11047 10735 9007 +10263 10685 6904 11500 8458 +10264 11200 7702 10702 7705 +10265 10689 7698 9719 11608 +10266 10887 9802 11451 7085 +10267 8445 11651 9055 6840 +10268 8625 10934 9914 7162 +10269 9692 7347 11911 9053 +10270 11577 7862 10137 10987 +10271 9654 8336 11563 7490 +10272 9064 12035 9376 6470 +10273 12266 6464 12264 9097 +10274 11764 9097 12264 7831 +10275 6556 8412 10319 7057 +10276 8552 9071 11685 7690 +10277 6307 10053 7749 11155 +10278 8208 7073 12151 9323 +10279 7810 9795 8205 12162 +10280 8224 9061 7933 11798 +10281 10598 6513 11038 8690 +10282 8552 7038 11681 9071 +10283 7694 10391 7695 10392 +10284 10459 6636 11685 9071 +10285 7621 10798 7733 10561 +10286 10293 10241 10381 7615 +10287 10131 8119 11235 7803 +10288 10417 6750 11175 10915 +10289 6532 10214 8254 11069 +10290 11904 7613 11170 9310 +10291 10223 9310 11170 6793 +10292 8696 6439 9797 7806 +10293 7882 9901 12171 10810 +10294 8801 10829 191 192 +10295 9780 6256 10546 11298 +10296 11039 6462 11891 9076 +10297 8591 6379 12156 9724 +10298 121 11041 9317 120 +10299 108 11189 12225 107 +10300 10596 6383 11846 9079 +10301 7064 9786 11853 8643 +10302 8029 12243 6889 10879 +10303 12220 9090 12083 6955 +10304 11638 8609 10211 7421 +10305 8946 10714 10924 7177 +10306 6892 10876 8605 12208 +10307 8146 11564 6690 11335 +10308 7877 11915 6878 11925 +10309 12132 9114 11537 6677 +10310 8775 7138 11962 9089 +10311 10860 7047 9457 12016 +10312 8497 9088 11879 6654 +10313 11886 6343 11514 9123 +10314 9610 6657 11847 10921 +10315 6906 8120 11780 9312 +10316 126 9312 11780 125 +10317 7912 9738 6816 10696 +10318 10449 6698 10481 10284 +10319 7027 11052 8223 12093 +10320 8612 11693 6808 11037 +10321 11497 10124 11288 6443 +10322 7547 10429 6885 10430 +10323 10663 10606 10327 7706 +10324 8194 6920 12013 9102 +10325 11574 9100 11944 7869 +10326 9787 9954 10896 6329 +10327 10773 10927 12044 6816 +10328 11079 11562 11829 7740 +10329 7608 10463 6689 10403 +10330 6756 10006 7782 11173 +10331 12133 11146 10741 8014 +10332 7248 9498 7046 10912 +10333 9362 9104 11926 7590 +10334 11777 10156 9019 7597 +10335 6453 9118 7462 9721 +10336 12035 7833 11034 9376 +10337 7700 10775 6654 9677 +10338 9821 7803 11235 6856 +10339 7520 9783 6383 10677 +10340 8818 9548 10964 6780 +10341 8060 11181 7174 10217 +10342 9416 9565 10346 7567 +10343 9168 6359 10185 9138 +10344 6643 8855 9973 12030 +10345 10373 10483 10399 7605 +10346 7705 11516 8373 11084 +10347 10277 7793 11455 9562 +10348 11900 9444 11461 7510 +10349 11007 7548 11459 9158 +10350 9199 11819 133 134 +10351 10390 7620 11855 9209 +10352 8825 11839 9161 11843 +10353 8723 8553 11310 6891 +10354 10823 12273 9474 6713 +10355 8408 6701 9804 10673 +10356 10137 7528 11794 9559 +10357 8552 9174 11951 7038 +10358 11164 7773 11951 9174 +10359 8875 11932 11769 8317 +10360 9902 10408 10283 7629 +10361 10388 10283 10408 7554 +10362 7537 10274 6688 10388 +10363 7549 9473 6737 10969 +10364 9877 10753 10804 6778 +10365 7845 10310 6650 11065 +10366 7896 10588 6754 9992 +10367 12037 9686 11120 6311 +10368 9088 6986 11889 11518 +10369 7239 8803 11518 11889 +10370 8799 6531 10573 8969 +10371 9624 6704 11522 9157 +10372 8485 10426 10167 6389 +10373 6845 11679 7791 9671 +10374 8768 10864 9792 7575 +10375 7820 9971 6823 10541 +10376 7392 9976 6707 9977 +10377 7895 7521 9930 10790 +10378 11538 6808 12261 9063 +10379 11087 7559 11710 10448 +10380 6789 11760 8668 12016 +10381 7103 9097 11764 10012 +10382 10547 7534 10890 9879 +10383 6510 10008 8385 10704 +10384 10796 10438 10157 6751 +10385 10893 8733 11009 6565 +10386 11238 7747 11763 9261 +10387 9886 9261 11763 6559 +10388 10560 6712 10401 10493 +10389 9979 10194 9977 7744 +10390 10469 9773 10736 7509 +10391 8831 7313 11999 9895 +10392 8981 9907 11374 7527 +10393 7718 11172 8311 11492 +10394 6267 10690 7820 10634 +10395 9667 9957 12058 6656 +10396 8777 11698 9470 7767 +10397 12187 7941 12277 9789 +10398 8649 6309 10781 8130 +10399 8372 6307 11155 10811 +10400 7130 12163 8128 10272 +10401 8615 9153 6879 8156 +10402 8378 7796 11481 10336 +10403 10457 8527 11646 7769 +10404 9319 7057 12252 9226 +10405 9667 7409 6657 9610 +10406 6959 10706 7543 10004 +10407 8094 9863 11061 6726 +10408 7956 10400 7538 11339 +10409 9516 11675 10547 7535 +10410 8483 11058 7745 11578 +10411 9929 6446 9809 10099 +10412 7871 11636 8182 10128 +10413 10079 10044 11205 7685 +10414 6857 8944 7901 11528 +10415 7535 11583 8095 11471 +10416 7798 11682 10679 8153 +10417 10202 6790 11512 9201 +10418 11602 9271 11807 7851 +10419 7464 11033 6246 9591 +10420 8580 6946 10355 11124 +10421 8564 10318 11816 6427 +10422 9499 11557 11107 8675 +10423 8413 11873 9534 7552 +10424 8028 7246 11826 10073 +10425 8571 10942 165 166 +10426 11784 6789 11573 7607 +10427 11029 9169 12145 6515 +10428 8434 7522 10491 10125 +10429 8835 7304 11726 8709 +10430 6345 9240 7244 8977 +10431 6980 10802 7737 9754 +10432 6485 10477 8304 11536 +10433 10337 10617 11035 6355 +10434 9677 9180 11666 7561 +10435 7395 10364 11886 12173 +10436 6805 8245 10873 9699 +10437 8399 11550 6435 11448 +10438 9952 7479 11548 9208 +10439 6641 10419 7676 10450 +10440 6909 7720 11899 6295 +10441 9062 9947 10609 7105 +10442 6491 9178 7101 12169 +10443 6972 8749 12134 9542 +10444 6728 7934 9375 10319 +10445 8758 9926 10935 6721 +10446 10462 9397 12115 6447 +10447 12083 7828 12115 9397 +10448 10264 7763 9882 10751 +10449 10052 7615 10333 10463 +10450 6595 11696 8082 9820 +10451 10440 6734 9494 8732 +10452 10266 7553 10564 10020 +10453 10489 7666 10381 10476 +10454 6464 12266 8308 10464 +10455 10119 6750 11572 11993 +10456 11819 9199 11725 7717 +10457 10025 6967 11725 9199 +10458 6664 9328 7513 11295 +10459 11159 8139 9845 11085 +10460 11128 9120 11165 9424 +10461 10327 10627 10581 10432 +10462 7081 10002 12146 9525 +10463 7085 8830 7932 10887 +10464 11666 9180 11939 6991 +10465 8566 177 178 10979 +10466 9351 7302 11114 9011 +10467 6973 8317 11972 9346 +10468 10250 9183 7970 12022 +10469 8150 11045 7600 11089 +10470 6547 11489 8747 11875 +10471 12139 9919 7482 10664 +10472 10426 7660 10484 10167 +10473 11920 6243 11211 6953 +10474 6322 9761 7574 10216 +10475 6539 10886 7707 10220 +10476 8683 11221 7098 11470 +10477 10481 7605 10280 10526 +10478 8203 11521 7652 10701 +10479 11500 6904 11400 10001 +10480 8301 11329 7575 9792 +10481 10494 6358 10087 10854 +10482 12175 8073 9769 6950 +10483 11948 9840 11133 6442 +10484 7023 11043 8194 11209 +10485 7318 10119 11993 8160 +10486 11298 7640 10230 9780 +10487 10484 6698 10449 10303 +10488 6455 11744 8510 11118 +10489 10493 10401 10436 7649 +10490 10062 9744 10852 6403 +10491 10337 7261 9634 10762 +10492 8689 11006 168 169 +10493 6942 11832 8890 11122 +10494 10134 8098 11139 11457 +10495 9506 12095 9202 7023 +10496 8693 10451 7766 7036 +10497 6719 10460 7757 10683 +10498 10316 7906 11269 9289 +10499 7026 10603 6748 8786 +10500 7323 11161 6777 9465 +10501 8044 11799 8362 7139 +10502 12252 7838 12007 9226 +10503 8191 6743 11015 10323 +10504 7707 10771 7214 10220 +10505 11403 9209 11855 6945 +10506 9717 9509 11103 7196 +10507 7682 10948 8886 11361 +10508 10997 7681 11859 9646 +10509 7595 10233 8284 11126 +10510 10561 9876 10757 6695 +10511 8205 9577 11086 6931 +10512 8232 6970 12043 9805 +10513 9201 7122 12237 7438 +10514 7240 10497 11689 7836 +10515 10029 9957 10921 10363 +10516 10526 10623 10284 10481 +10517 7871 10128 6512 11631 +10518 12106 7861 11882 9316 +10519 10334 9316 11882 6768 +10520 8951 6379 12068 9225 +10521 10284 7673 10434 10449 +10522 10303 10449 10434 7621 +10523 9173 7132 10525 9044 +10524 7758 10060 6325 10620 +10525 7637 11556 8466 10754 +10526 11740 7564 11259 9540 +10527 8711 9851 10926 7498 +10528 8825 6859 10380 11839 +10529 8298 7016 11594 9073 +10530 11480 9511 10648 6385 +10531 7298 8535 11854 9864 +10532 8740 174 175 11068 +10533 10002 7271 8643 11853 +10534 10751 6413 10265 10264 +10535 9600 9601 11071 7609 +10536 7974 11293 7756 11692 +10537 6698 10484 7660 10373 +10538 10068 6303 11982 9941 +10539 11012 12238 7030 9250 +10540 9362 7590 11465 9363 +10541 8236 8954 11901 6952 +10542 8145 11402 8203 6795 +10543 11237 6255 11698 8777 +10544 10463 7608 10649 10052 +10545 9501 6692 10052 10649 +10546 6250 8243 11132 9544 +10547 11486 157 158 11796 +10548 6474 10026 7967 11913 +10549 7343 9510 6835 11174 +10550 10206 7587 10560 10138 +10551 10096 10037 10622 7719 +10552 10759 10022 10637 7178 +10553 7232 9642 11381 8221 +10554 6726 11061 8313 11936 +10555 6720 10747 7635 10037 +10556 8477 11549 10269 7561 +10557 11901 6466 11563 8336 +10558 9442 9255 11909 7268 +10559 9946 7602 10814 9915 +10560 12193 9915 10814 6666 +10561 10361 6490 11469 9614 +10562 7021 9968 8488 11351 +10563 7414 11499 8320 11060 +10564 11564 9643 12194 6690 +10565 11844 11485 10394 8426 +10566 11473 7780 11073 10882 +10567 7691 9880 6773 11016 +10568 10295 7695 10391 10627 +10569 6697 10444 7666 10489 +10570 6852 9900 11697 8537 +10571 6295 7765 10619 8237 +10572 6283 8461 11208 9649 +10573 12135 8970 10423 6262 +10574 8567 7929 10882 11073 +10575 8937 7435 10123 10632 +10576 10601 11296 10964 9548 +10577 8114 10478 10731 6760 +10578 10648 10162 10338 7456 +10579 8087 10651 6735 11456 +10580 11628 9270 12122 7985 +10581 11559 9468 11624 7195 +10582 9296 7238 12086 9273 +10583 11401 7378 11099 9552 +10584 9911 7235 10671 9912 +10585 6390 10367 7649 10476 +10586 11649 9542 12134 6397 +10587 9528 9078 11390 6665 +10588 10327 10432 10444 6697 +10589 10545 10444 10432 7658 +10590 6814 10210 7213 9327 +10591 8898 6655 11716 10996 +10592 12273 7904 11300 9474 +10593 8552 11150 194 195 +10594 7441 11022 7928 11883 +10595 8563 11618 6781 10902 +10596 8962 6854 9679 11341 +10597 8341 12165 6985 11727 +10598 8875 11164 197 198 +10599 8048 7079 11545 9631 +10600 6269 10892 7217 9811 +10601 7060 8325 9904 11109 +10602 6240 11158 8001 10178 +10603 11161 9799 12239 7953 +10604 8099 9543 151 11754 +10605 7943 10441 6427 11816 +10606 7235 12113 8720 11812 +10607 8296 12186 10043 6678 +10608 9307 7519 9847 10879 +10609 9233 6919 10930 11650 +10610 10885 8970 11943 6775 +10611 10373 7660 10403 10483 +10612 11151 11098 6938 7840 +10613 9264 7320 12192 10776 +10614 11117 6407 10111 11433 +10615 7241 8656 11786 11076 +10616 10241 6390 10476 10381 +10617 10140 7647 11464 9433 +10618 9250 6408 9700 11012 +10619 8158 10028 7175 9825 +10620 6382 12086 8467 10204 +10621 6698 10373 7605 10481 +10622 8590 9802 10887 7211 +10623 10328 9323 12151 7548 +10624 8827 8193 11805 11413 +10625 10965 10632 10123 7628 +10626 7862 10677 6383 10596 +10627 7905 11526 6724 10791 +10628 10723 8472 11755 11893 +10629 10320 6405 11223 10226 +10630 11056 6761 11113 9989 +10631 7706 10327 6697 10565 +10632 7575 9728 11632 8489 +10633 7859 11955 6699 9782 +10634 11328 7745 12010 9986 +10635 9764 6823 9602 11188 +10636 8951 10115 12156 6379 +10637 6403 10852 7853 10615 +10638 8681 7450 9368 11743 +10639 7649 10367 7648 10493 +10640 8277 11910 6670 10805 +10641 7803 9821 9324 8273 +10642 11367 9353 11835 6398 +10643 8198 12026 11726 8051 +10644 6507 9469 7988 10161 +10645 8087 11456 7820 10690 +10646 9426 10491 10974 6711 +10647 150 11305 9533 149 +10648 10747 10769 10171 7635 +10649 9809 7591 9363 9364 +10650 11359 9609 11202 6937 +10651 7624 10572 6796 11064 +10652 8071 11983 10041 8603 +10653 7481 8823 11824 10891 +10654 10403 6689 10399 10483 +10655 6973 9346 12225 7992 +10656 9027 10715 6699 10176 +10657 7151 9755 7687 11482 +10658 9197 9349 12184 6353 +10659 10675 12096 9885 6376 +10660 6916 12101 8105 11260 +10661 7701 10544 7577 10362 +10662 8685 9710 11059 6572 +10663 7212 9425 11595 8348 +10664 7155 10920 8181 11422 +10665 9941 7769 11646 9839 +10666 6799 11033 7464 9727 +10667 9586 6384 9370 11916 +10668 8887 8886 10948 7166 +10669 6898 9868 11567 9869 +10670 11401 6580 10980 9843 +10671 11286 7980 10937 11587 +10672 7488 10870 12195 9043 +10673 8061 10351 7345 9906 +10674 7362 11860 6737 9629 +10675 7625 9850 6264 11025 +10676 7694 10499 6723 10498 +10677 10022 7852 10907 10637 +10678 10463 10333 10545 6689 +10679 10896 9954 10386 7377 +10680 10040 9953 10865 6658 +10681 7764 11111 6749 11806 +10682 10068 9941 9839 7492 +10683 8520 11302 6872 12149 +10684 9201 7438 10733 10202 +10685 6301 10744 7784 10094 +10686 11808 7726 11730 9443 +10687 11121 9443 11730 6757 +10688 10476 7649 10436 10489 +10689 6728 7355 10322 7934 +10690 6421 8330 12020 9694 +10691 11692 10809 10231 7974 +10692 8564 10514 7492 10318 +10693 7747 9413 6559 11763 +10694 8436 11762 11338 7539 +10695 11989 6925 10361 10967 +10696 6701 8408 10944 10502 +10697 6771 10189 8294 11568 +10698 6811 9385 11913 7967 +10699 10159 9383 11977 7417 +10700 6728 8254 10214 7355 +10701 6944 8357 10997 10163 +10702 8528 9862 8242 11048 +10703 8873 9921 10870 7488 +10704 12076 10078 11502 8992 +10705 10159 12014 7926 9383 +10706 8332 9607 11268 6298 +10707 12000 8185 10652 6681 +10708 11519 9468 11559 7412 +10709 10750 6294 12088 10000 +10710 109 9652 11189 108 +10711 7364 9840 11948 7739 +10712 10526 10280 10581 10532 +10713 7763 6930 10753 9877 +10714 12019 7947 11221 11789 +10715 9720 11348 126 127 +10716 11693 9654 12261 6808 +10717 11434 7595 11126 10691 +10718 10740 10395 10647 7557 +10719 11365 10637 10907 7737 +10720 6804 9404 7263 11980 +10721 7811 11498 6328 9825 +10722 9270 11628 6484 10149 +10723 6294 10750 7738 9874 +10724 7478 9590 6642 11315 +10725 11370 9791 11021 6296 +10726 7881 9936 12169 7101 +10727 6337 8596 8165 11013 +10728 7927 10503 7483 10452 +10729 10234 6939 11971 10154 +10730 7116 12213 9205 11378 +10731 10489 10436 10565 6697 +10732 7095 11530 8321 10442 +10733 7388 8332 11831 10107 +10734 10472 7599 10865 9953 +10735 12106 9573 12236 7861 +10736 7820 11456 6735 11850 +10737 6959 10728 10117 8288 +10738 6836 11130 7543 9905 +10739 10230 7319 11322 9780 +10740 11279 10995 9942 11641 +10741 9122 7291 11690 10059 +10742 9834 10059 11690 7880 +10743 11826 7246 10851 10145 +10744 8996 9889 11059 7544 +10745 10526 10532 10498 10623 +10746 11521 8203 11402 6794 +10747 11229 7984 10986 10480 +10748 6507 9740 11312 8731 +10749 7939 11166 6381 12143 +10750 9329 9424 12058 7504 +10751 10075 10666 10418 11558 +10752 6839 8192 11835 10243 +10753 6613 10263 7586 10621 +10754 9028 8550 11965 7596 +10755 12116 9436 11905 8419 +10756 6689 10545 7658 10399 +10757 10198 6784 10393 7888 +10758 7785 10949 7981 10670 +10759 8623 6331 12275 9432 +10760 10639 9432 12275 7817 +10761 8614 9827 7117 11459 +10762 8831 9895 11314 6645 +10763 9083 7540 8869 11733 +10764 7613 11169 8265 11170 +10765 9202 11458 160 161 +10766 7195 10292 8391 11559 +10767 11211 7489 11734 6953 +10768 10371 7751 11618 8563 +10769 11646 6598 11800 9839 +10770 10501 9506 12102 10150 +10771 7621 10561 6695 10404 +10772 9433 11464 9857 6449 +10773 7473 10271 6702 10759 +10774 9869 12118 8386 6898 +10775 6821 11329 7580 9635 +10776 10295 10627 10327 10606 +10777 6717 8995 10072 12268 +10778 9522 186 187 11488 +10779 6790 8152 10077 11512 +10780 11709 10108 10155 7674 +10781 10711 10174 11726 7304 +10782 6648 11365 7737 10802 +10783 8236 6865 11053 8954 +10784 7123 10276 11002 8425 +10785 10209 7722 11136 9774 +10786 8655 12044 10927 9162 +10787 8683 10833 10054 6299 +10788 10417 7718 11492 9890 +10789 10642 11509 11850 6735 +10790 6941 12070 8611 10329 +10791 9226 12007 6724 10510 +10792 9859 10935 9926 7546 +10793 9208 11555 7444 10235 +10794 8572 7654 10404 10703 +10795 6851 7746 12177 9801 +10796 8291 9485 12139 6395 +10797 10430 6885 11712 10085 +10798 8720 10527 10929 7065 +10799 10401 7659 10565 10436 +10800 10501 7592 11357 10066 +10801 7811 10885 6775 11226 +10802 10144 7852 10022 11683 +10803 10759 6702 11683 10022 +10804 6963 11091 7496 10281 +10805 10254 9467 12112 6605 +10806 7924 10012 6745 11695 +10807 11300 7054 12033 9474 +10808 10391 7694 10498 10532 +10809 7328 6302 11807 9271 +10810 10574 10065 10843 7849 +10811 11051 8047 10917 10104 +10812 9260 7843 9955 9259 +10813 10823 6713 11085 9845 +10814 10685 7314 9679 10343 +10815 7883 10991 7757 10756 +10816 11752 9949 11499 7414 +10817 11859 6478 11394 9646 +10818 11899 7760 10844 9633 +10819 8291 7117 11973 9485 +10820 8266 6725 10427 10656 +10821 9896 7520 11577 9574 +10822 10585 6475 12228 9529 +10823 10812 9529 12228 7818 +10824 9553 7710 11693 8612 +10825 7056 8001 10659 11352 +10826 9165 6377 11339 7539 +10827 8727 11844 6550 11704 +10828 7297 10443 11707 8902 +10829 6296 11553 7266 9593 +10830 7311 12011 6717 9489 +10831 8823 7584 9998 11824 +10832 10928 11410 11814 6248 +10833 6428 8613 11533 10260 +10834 6788 8188 11784 9515 +10835 8371 7239 10993 10045 +10836 6309 9731 7840 10118 +10837 9919 12139 9485 7732 +10838 8949 7077 10184 8948 +10839 8641 9343 10306 6849 +10840 12061 11379 11235 8119 +10841 7203 11793 6704 9624 +10842 8320 11499 9949 6911 +10843 8291 12075 10039 6776 +10844 11887 8474 11247 6960 +10845 8575 7516 8432 11036 +10846 9094 7724 11736 9736 +10847 8682 9859 7546 11105 +10848 11146 6978 10721 10741 +10849 7630 9723 11373 8653 +10850 8250 7075 10102 10904 +10851 10388 6688 11024 10283 +10852 11507 11234 11607 10558 +10853 6987 11421 8510 11744 +10854 7317 8530 12184 9841 +10855 7739 12071 6705 10046 +10856 6985 11416 7691 10087 +10857 6665 11633 7683 9528 +10858 6311 11179 11128 8128 +10859 9126 9120 11128 11179 +10860 10581 10627 10391 10532 +10861 7205 11416 8299 11039 +10862 10719 9534 11873 6468 +10863 10315 6752 11786 10036 +10864 11134 10009 11143 7786 +10865 8868 8078 10912 11891 +10866 6880 9775 11438 8090 +10867 9911 8333 12113 7235 +10868 8919 10254 6605 11548 +10869 7688 6831 12236 9573 +10870 10617 7066 11552 8443 +10871 8341 11727 8036 9566 +10872 11213 8489 12115 11262 +10873 6939 8214 11167 11971 +10874 11073 6324 11995 8567 +10875 10841 8458 11500 7746 +10876 7440 11468 7932 10076 +10877 10037 10096 11931 6720 +10878 11398 7582 9631 11545 +10879 10324 9511 11480 6900 +10880 7542 11463 6859 10048 +10881 8221 9559 11794 6554 +10882 7883 10695 6422 10991 +10883 9601 9600 11641 7076 +10884 11203 6536 11869 6396 +10885 9189 11312 9740 7918 +10886 10500 10445 6483 7696 +10887 7408 9618 6497 11581 +10888 8736 6425 10147 11705 +10889 7025 9126 11120 11861 +10890 10794 6384 12223 9520 +10891 6378 10625 8072 10428 +10892 7404 11140 8249 9903 +10893 10574 7641 10584 11542 +10894 136 11748 10025 135 +10895 9371 10624 12084 6545 +10896 7836 10620 6325 10505 +10897 8294 10787 8122 9988 +10898 6945 11855 7620 9758 +10899 12053 11373 9723 8043 +10900 10951 11371 10490 6676 +10901 7699 10579 7714 10586 +10902 7974 11969 6828 11293 +10903 10615 11462 9687 7515 +10904 8924 8316 11486 11796 +10905 10678 9561 11906 6347 +10906 7136 10024 8009 9137 +10907 8807 9580 11802 6541 +10908 8093 12140 6512 11303 +10909 10629 8105 12185 10385 +10910 11890 7627 11392 9741 +10911 11507 10558 12167 9607 +10912 8292 11180 6412 10906 +10913 7790 11449 6523 11075 +10914 7003 8311 11172 10169 +10915 8033 11431 6437 11152 +10916 7801 9943 7002 11661 +10917 8356 7728 11930 9588 +10918 9576 12160 11317 7928 +10919 7983 11508 6933 9503 +10920 7966 10523 6900 11480 +10921 11334 10201 11431 8033 +10922 8615 6532 11069 9153 +10923 10064 6429 11895 10095 +10924 9774 6756 10954 10209 +10925 8805 10671 7235 11812 +10926 11469 7717 11725 9614 +10927 6418 11596 7504 10029 +10928 6251 9631 7582 11644 +10929 8609 6826 10856 10211 +10930 9346 11972 105 106 +10931 10638 9938 11854 8780 +10932 8460 10616 7372 9541 +10933 8323 11469 6490 9716 +10934 10664 9602 7864 11888 +10935 7984 11229 7811 11226 +10936 10277 9562 12270 6434 +10937 10942 12121 164 165 +10938 11078 11399 10295 10606 +10939 11051 10104 11917 7599 +10940 8177 11615 8539 10377 +10941 10890 6523 11583 9879 +10942 8360 7262 11324 9829 +10943 9547 10703 10404 6695 +10944 9951 12182 115 116 +10945 8693 6432 12108 7669 +10946 10686 8015 10855 11275 +10947 9549 137 138 8199 +10948 12231 6492 9906 11746 +10949 7781 11388 6807 9778 +10950 9375 7934 10322 10955 +10951 9156 10816 10267 6599 +10952 7705 11084 6772 11200 +10953 10108 11145 9668 6869 +10954 10057 9836 11930 6297 +10955 10396 7426 11454 8026 +10956 9522 11729 9643 7112 +10957 11212 8289 10914 6990 +10958 8686 8687 9930 6746 +10959 8420 11358 8867 7761 +10960 6670 11910 8276 10168 +10961 8511 8056 9635 11788 +10962 7674 11660 6661 11709 +10963 8713 11175 6750 10119 +10964 10290 10720 10415 6691 +10965 7208 10092 7771 10474 +10966 10672 10105 12108 7618 +10967 12014 10159 12100 6833 +10968 11833 9829 11324 7664 +10969 8436 7539 11339 7538 +10970 11462 7150 11627 9687 +10971 10158 9620 11882 7861 +10972 6520 10883 10197 7865 +10973 11189 7109 10035 11620 +10974 6482 8618 11620 10035 +10975 8156 6879 11676 8157 +10976 10978 11399 11078 8215 +10977 7324 9790 11579 8431 +10978 6978 10693 10363 7958 +10979 8273 11171 10131 7803 +10980 7205 9880 7691 11416 +10981 10498 6723 11255 10623 +10982 11071 9601 12229 6624 +10983 9694 11061 9863 7897 +10984 6489 11129 8002 9963 +10985 7084 9874 7738 11207 +10986 10972 7912 11091 9985 +10987 8400 7613 11904 10152 +10988 7250 9762 7759 11380 +10989 6798 9805 12043 7962 +10990 8500 11076 11786 6752 +10991 7867 10663 7706 11049 +10992 7617 10665 7866 11067 +10993 8815 8816 11608 6410 +10994 8171 9894 11340 6334 +10995 8180 10257 6664 11295 +10996 6822 8303 11397 9994 +10997 6258 11004 8222 10110 +10998 11734 9807 11997 8162 +10999 12072 7957 12256 9710 +11000 8114 8113 10903 12181 +11001 6709 8091 12248 9666 +11002 12207 6815 11775 10122 +11003 7715 10902 6781 12052 +11004 11314 9895 11999 7725 +11005 11267 9641 12264 6464 +11006 11174 7831 12264 9641 +11007 6515 8529 11482 11029 +11008 11477 6902 10779 8703 +11009 9620 10158 11337 7284 +11010 12159 8443 11552 9060 +11011 11065 6650 11613 9936 +11012 10559 9399 12251 6782 +11013 8500 7837 10794 11076 +11014 9809 7281 11140 10099 +11015 11605 7579 10642 12080 +11016 10856 6826 11765 8766 +11017 10874 6391 10434 7673 +11018 8858 9848 11570 6968 +11019 9233 11632 9728 8135 +11020 11601 10385 12185 6534 +11021 7166 8717 12160 9576 +11022 11797 11590 9755 6370 +11023 11454 7426 12217 9670 +11024 7858 6741 11965 8550 +11025 12205 8035 11385 10660 +11026 12082 9672 11731 7171 +11027 7882 10810 6867 11263 +11028 7636 10888 6570 10248 +11029 7090 9647 12077 8126 +11030 11075 7441 11883 9970 +11031 7186 10253 7996 11364 +11032 6803 10323 11015 8106 +11033 11189 9652 12051 7109 +11034 8183 9702 11790 6694 +11035 7573 10889 6625 10258 +11036 8905 7529 12066 7389 +11037 11386 6872 12024 9657 +11038 10619 8696 11552 7066 +11039 8555 9734 11683 6702 +11040 8883 10215 11871 7424 +11041 9375 11804 7838 12252 +11042 7445 7720 12222 8383 +11043 10515 7918 9740 11678 +11044 11225 10191 10699 7856 +11045 8837 7990 11107 11557 +11046 6455 11118 7670 11611 +11047 10993 7681 11137 10045 +11048 8371 10045 11137 6525 +11049 7621 10434 6391 10798 +11050 10946 9422 10945 6402 +11051 8397 10590 7462 10837 +11052 10502 10932 10270 6701 +11053 10087 7691 11016 10854 +11054 10162 7094 10878 10338 +11055 6379 8591 10051 12068 +11056 9010 10950 10209 7644 +11057 12254 7749 12240 9713 +11058 6498 11289 8280 11659 +11059 10911 7750 10901 10341 +11060 7920 9447 11895 6429 +11061 7748 10564 6722 11228 +11062 11908 10772 12140 8093 +11063 11635 9844 10947 8293 +11064 10413 9898 11365 6648 +11065 11880 8076 10828 10357 +11066 7879 10985 6843 10567 +11067 8969 7965 10835 8879 +11068 10763 6428 11356 9861 +11069 7487 9167 11547 11585 +11070 12239 9799 11600 6411 +11071 10470 6742 11317 11318 +11072 12217 7817 12275 9670 +11073 8627 10163 10997 7173 +11074 12041 8539 11594 7016 +11075 11575 9670 12275 6331 +11076 9177 11739 10533 6982 +11077 8021 11279 6374 11242 +11078 10890 8133 11920 9592 +11079 8261 11950 7916 11722 +11080 7795 10200 6246 11444 +11081 10529 8837 11557 7688 +11082 9256 9685 12150 6635 +11083 6938 11098 6495 9595 +11084 6774 10336 11481 8055 +11085 6509 11475 7905 10952 +11086 7907 6967 11396 11355 +11087 6310 11355 11396 8279 +11088 7003 10169 11111 8496 +11089 6791 11450 7884 11040 +11090 8031 6957 11890 9741 +11091 6330 8039 11127 10543 +11092 6905 10774 8278 12227 +11093 7299 8678 11561 10168 +11094 6814 11837 7357 10210 +11095 11783 10826 11028 6755 +11096 8653 11103 11268 7630 +11097 9954 7378 11401 10386 +11098 10288 9803 11677 7144 +11099 7514 11527 9069 11770 +11100 6844 10748 7952 11294 +11101 7455 10825 7652 10325 +11102 7342 8331 12229 10298 +11103 7230 9138 7766 9139 +11104 8520 9914 11797 6370 +11105 9192 11121 10608 7841 +11106 8292 10608 11121 6757 +11107 7122 10380 8159 12237 +11108 11238 10410 11005 7747 +11109 10582 6860 11005 10410 +11110 11492 6313 12003 9890 +11111 10456 7964 12114 10409 +11112 9552 11099 11226 6775 +11113 9071 11681 8137 10459 +11114 9183 10250 11428 7324 +11115 7743 10992 6691 10415 +11116 7738 11423 8204 11207 +11117 11341 7823 11639 8962 +11118 121 122 11781 9870 +11119 6906 9870 11781 8120 +11120 10928 6248 11479 8982 +11121 6690 9960 7263 11335 +11122 6419 11362 7624 11064 +11123 11188 8009 11884 9764 +11124 11652 10465 12123 7500 +11125 9009 8986 11998 7078 +11126 6984 8536 11603 10113 +11127 140 141 11308 9980 +11128 7514 11770 6708 9748 +11129 7152 9024 10524 12230 +11130 7548 11007 8058 10328 +11131 10136 9713 12240 6674 +11132 12113 6760 10731 8720 +11133 7932 11468 7211 10887 +11134 10193 7938 10470 11318 +11135 8093 11592 7922 11908 +11136 9162 10534 11634 7562 +11137 7754 11242 6374 10242 +11138 8784 6319 11708 11257 +11139 10382 6693 10424 10880 +11140 7609 10743 7942 10742 +11141 7122 9161 11839 10380 +11142 7953 11707 6777 11161 +11143 7418 9777 6812 12089 +11144 9944 9724 12156 7499 +11145 8276 7085 11451 9622 +11146 6241 11000 8412 9608 +11147 10319 8412 11000 6728 +11148 8037 8836 10090 11721 +11149 6671 10275 8807 12066 +11150 8891 6337 11013 8892 +11151 10387 11936 7604 12199 +11152 9914 10934 11848 7787 +11153 10998 10170 11708 7729 +11154 9119 10043 12186 7432 +11155 7876 10014 7109 12051 +11156 6498 11659 8534 11417 +11157 11884 8038 12017 9764 +11158 10614 7633 12039 9553 +11159 10517 11163 10602 6293 +11160 9709 8281 7142 9808 +11161 12226 6907 12038 9715 +11162 10454 11474 10705 7503 +11163 8900 10242 7942 11080 +11164 11756 10956 9854 8239 +11165 10846 6506 9750 12104 +11166 10224 8310 11411 11525 +11167 8153 11525 11411 6824 +11168 10187 10041 11983 6868 +11169 8826 7383 12160 8717 +11170 9611 10676 11722 7916 +11171 10445 10500 10392 7001 +11172 11172 6749 11111 10169 +11173 6298 10562 8067 10822 +11174 10933 6282 11569 10597 +11175 8132 10977 7616 10976 +11176 9989 11113 11649 8225 +11177 9542 11649 11113 7816 +11178 6265 9865 7792 11196 +11179 10392 10500 10499 7694 +11180 6463 11415 8570 12128 +11181 10085 7784 10744 10430 +11182 11384 8109 11236 12242 +11183 10398 6684 12204 10015 +11184 6271 11429 7957 12072 +11185 6609 10246 11658 8593 +11186 8360 9829 11833 6316 +11187 9185 10376 11092 7497 +11188 7449 11115 8227 10219 +11189 9411 8976 11633 6665 +11190 10405 10697 11405 7113 +11191 9819 11405 10697 7959 +11192 10855 10776 10339 11275 +11193 8477 6740 11275 10339 +11194 8805 7065 8804 10727 +11195 10185 7888 10393 7036 +11196 11949 6394 11049 7659 +11197 7377 11195 12178 8586 +11198 9997 10304 11278 7570 +11199 8544 7629 10283 11024 +11200 11836 10488 10487 7679 +11201 10142 7484 10477 10947 +11202 11419 11993 11572 8516 +11203 8519 12149 6872 11386 +11204 10417 10915 10508 7718 +11205 6880 7904 12273 9775 +11206 10273 8714 12069 7084 +11207 7849 10842 7641 10574 +11208 6644 10289 7644 11032 +11209 10103 7172 12188 11626 +11210 10629 10385 11601 7353 +11211 6319 9810 8364 12147 +11212 10745 7467 10050 10523 +11213 7795 11840 10624 9371 +11214 9818 7685 11083 10330 +11215 6834 11254 8302 12008 +11216 6499 9986 12010 8702 +11217 6877 7920 12124 9394 +11218 7534 10547 6710 10495 +11219 7527 11374 8130 12002 +11220 9289 6479 11423 10316 +11221 9275 9800 10807 6685 +11222 8368 8410 11191 6662 +11223 10398 10015 11774 7794 +11224 8516 10048 10740 7557 +11225 11134 6416 11424 10009 +11226 9516 7535 11471 10356 +11227 6755 11330 8028 10073 +11228 11556 8504 11331 6631 +11229 10291 10290 11136 7722 +11230 10570 11136 10290 6691 +11231 11616 12037 11834 10374 +11232 9407 10374 11834 6927 +11233 8324 11585 11547 6267 +11234 9159 6672 12138 10140 +11235 9169 7687 10504 11529 +11236 6257 8174 10506 10507 +11237 11615 9530 11594 8539 +11238 7087 8490 11837 9881 +11239 12169 9936 11613 7969 +11240 9257 11433 10111 7661 +11241 6322 10216 11350 8086 +11242 158 159 10066 11357 +11243 11589 9847 11991 6847 +11244 6525 11440 7774 10782 +11245 8130 11374 9907 6949 +11246 8576 7639 11163 10517 +11247 7173 11394 8338 10097 +11248 9856 7721 12125 10301 +11249 8432 7516 10709 10708 +11250 8416 11823 7807 11680 +11251 12027 7771 10092 12025 +11252 7813 9960 6690 12194 +11253 12155 8110 10985 11745 +11254 6288 11954 8047 11051 +11255 10253 10156 11777 7996 +11256 6970 8232 12030 9973 +11257 9264 10776 10855 6288 +11258 7136 11153 8081 10240 +11259 9735 10511 7026 9152 +11260 10613 10670 11258 6765 +11261 7724 11102 7979 11056 +11262 10325 7652 11521 10780 +11263 10187 7940 11696 10041 +11264 8601 7777 12204 9922 +11265 10817 11191 7571 8504 +11266 10620 10539 12004 7758 +11267 7047 10860 7679 10487 +11268 7904 9834 7880 12202 +11269 11925 10680 10653 7877 +11270 6933 11420 7895 9503 +11271 9822 7457 12218 9838 +11272 7542 11572 6750 10417 +11273 10796 7983 11593 10438 +11274 8363 6855 11598 8616 +11275 8256 6863 7778 10249 +11276 11075 9970 10766 7790 +11277 6649 9214 12235 8010 +11278 8832 11794 7528 10654 +11279 8842 8062 11893 11755 +11280 8229 10486 7667 11138 +11281 7266 10149 8519 11386 +11282 11400 7672 11543 10001 +11283 9046 10112 11392 7627 +11284 6951 10509 12191 9959 +11285 6418 10693 8206 11597 +11286 9007 6670 10168 11561 +11287 11908 9937 11719 10772 +11288 8067 10973 6876 11460 +11289 6794 8103 10780 11521 +11290 9433 6449 12171 9901 +11291 8724 10030 11507 7388 +11292 6288 11051 7599 10472 +11293 8100 11845 7583 10556 +11294 10430 10744 11244 7547 +11295 6342 11206 7808 10638 +11296 9786 8804 7065 10929 +11297 9932 10166 11299 7607 +11298 9379 6486 11680 10003 +11299 7835 11652 7500 10279 +11300 9576 6304 10904 10102 +11301 7695 10978 7001 10392 +11302 11758 8377 10872 7990 +11303 7123 9934 6660 10922 +11304 7614 10492 6711 10974 +11305 11602 7851 12054 11719 +11306 9855 7647 10140 12138 +11307 8629 7426 10396 6908 +11308 10999 10613 11031 7786 +11309 8645 7606 10179 11674 +11310 11584 9939 11964 6813 +11311 7152 12230 8096 11088 +11312 10207 6678 10043 10868 +11313 10815 11124 10355 7723 +11314 8101 10121 12038 6907 +11315 7094 10011 7713 10878 +11316 11235 6282 10933 6856 +11317 6615 10442 8321 10925 +11318 10410 11238 6762 12214 +11319 9379 10003 12213 7116 +11320 8104 11827 7668 10033 +11321 6749 10508 7693 11182 +11322 6666 10153 8859 12193 +11323 8106 10571 6385 12107 +11324 8491 7089 11412 10213 +11325 8547 11787 7640 9193 +11326 9573 12278 11420 7688 +11327 7463 11333 7819 11343 +11328 10633 7676 11414 10139 +11329 10692 6858 11434 10691 +11330 9911 10212 11288 8044 +11331 7989 10141 6377 11003 +11332 11056 9989 11736 7724 +11333 7463 11343 6715 10192 +11334 11921 6777 11707 10443 +11335 8475 10326 8853 12009 +11336 7986 10439 6451 11985 +11337 6550 11253 8005 11640 +11338 11279 8021 10583 10995 +11339 7916 6442 11194 9611 +11340 10297 12107 6385 9160 +11341 8111 9373 11947 6669 +11342 11214 11776 11309 6510 +11343 8756 11476 10542 7517 +11344 6910 11008 11009 8733 +11345 6358 10494 12077 9647 +11346 7278 12120 8042 9923 +11347 8526 11609 10767 6917 +11348 11774 10015 11699 7176 +11349 7820 11850 7864 9971 +11350 7751 10371 8590 11210 +11351 7965 8157 11676 6795 +11352 10710 8019 11542 10584 +11353 9215 7847 11822 6810 +11354 8572 7022 11504 10605 +11355 8020 10570 6691 10992 +11356 11152 11857 12244 8033 +11357 6526 10940 8066 11199 +11358 6991 11939 7797 10797 +11359 10305 12263 11651 6336 +11360 10604 7671 11254 10312 +11361 10769 6437 11431 10171 +11362 7481 10891 12262 8268 +11363 11824 9451 12262 10891 +11364 10029 7504 12058 9957 +11365 6846 8607 10397 10335 +11366 9114 10447 7839 11537 +11367 8600 9451 11824 9998 +11368 6639 8231 11643 10566 +11369 9946 9915 12193 7370 +11370 7039 11011 11973 8318 +11371 6763 11772 8432 10708 +11372 11680 7807 12213 10003 +11373 10833 7791 11679 10054 +11374 10320 10777 10778 6405 +11375 9549 7874 10025 11748 +11376 10874 7673 11255 8402 +11377 11046 8096 12230 10524 +11378 10451 8693 7669 12181 +11379 10565 7659 11049 7706 +11380 11352 10659 11247 8541 +11381 10626 7830 11247 10659 +11382 11556 6631 11230 8466 +11383 8384 9922 12204 6684 +11384 11000 10990 12136 6728 +11385 8558 10840 11264 6260 +11386 11228 6722 12029 10078 +11387 11502 10078 12029 7829 +11388 12080 7781 10203 11605 +11389 8109 6441 11605 10203 +11390 9144 10719 11981 7671 +11391 8086 11231 7825 10730 +11392 10670 10613 10999 7785 +11393 9529 7518 11023 10585 +11394 8232 9805 6798 10998 +11395 11908 7922 12166 9937 +11396 6845 11714 8322 11445 +11397 11009 11567 9868 6565 +11398 11471 8095 9289 11269 +11399 10127 10036 11786 7588 +11400 10702 7702 11510 6454 +11401 9332 10732 11933 8329 +11402 8462 11555 6605 12112 +11403 8121 10607 8057 11019 +11404 12244 12243 11327 8070 +11405 7130 11287 7846 10668 +11406 9202 12095 7963 11458 +11407 11313 10369 11271 7328 +11408 7744 9977 6707 11304 +11409 6668 11858 8559 11848 +11410 10809 11692 10968 6738 +11411 6696 10261 7582 11398 +11412 7812 11864 7190 10176 +11413 7786 11143 6764 10999 +11414 6288 10855 8015 11954 +11415 11155 7863 10938 10811 +11416 10713 6835 11217 10682 +11417 11881 10682 11217 7815 +11418 6785 10273 8204 11919 +11419 7786 11031 7933 11134 +11420 7960 10519 6783 11813 +11421 10756 6813 11806 7883 +11422 9285 6457 12166 11366 +11423 10982 8051 11726 10174 +11424 10478 7669 12108 10105 +11425 8679 11721 10090 6474 +11426 10680 6502 11724 10653 +11427 10429 8101 9885 12096 +11428 10091 7770 11664 10208 +11429 10895 7923 11895 9447 +11430 10613 6765 10884 11031 +11431 11560 7933 11031 10884 +11432 9139 7766 10451 9140 +11433 11689 6965 12004 10539 +11434 6904 8189 11133 11400 +11435 6680 10707 8085 10994 +11436 11293 10130 11761 7756 +11437 8284 11127 8039 11126 +11438 6803 8106 12107 10297 +11439 7960 11813 8363 11177 +11440 11269 6310 10356 11471 +11441 10978 7695 10295 11399 +11442 9614 7907 10967 10361 +11443 8235 9978 7395 12173 +11444 10739 10330 11083 6940 +11445 12177 6328 11498 9801 +11446 6677 12267 8947 12132 +11447 10207 10868 11383 7712 +11448 10884 6765 11258 10938 +11449 7718 10508 6749 11172 +11450 11853 9786 10929 10527 +11451 8456 10422 7055 11273 +11452 10016 11116 11117 7662 +11453 6407 11117 11116 8218 +11454 8183 11267 6464 10464 +11455 157 11486 10247 156 +11456 9302 11243 10875 7600 +11457 7744 11304 8097 11178 +11458 8555 9924 6505 11465 +11459 9909 9381 10335 7826 +11460 10692 10691 11126 8039 +11461 7916 11950 6887 10530 +11462 7701 10362 7788 11346 +11463 7960 11177 6477 11093 +11464 12137 11240 10838 6736 +11465 7728 8356 10838 11240 +11466 11775 7375 12119 10122 +11467 9196 7855 10122 12119 +11468 7008 9784 7454 10975 +11469 8327 7819 11333 11647 +11470 10946 12057 12041 7016 +11471 8459 12183 6782 11617 +11472 10490 11371 10895 7767 +11473 10293 6692 11866 10080 +11474 10310 7845 11705 10147 +11475 8516 7557 10647 11419 +11476 7872 11798 6818 12254 +11477 10863 6440 11761 10130 +11478 8183 6694 11441 10307 +11479 6941 10044 7533 12070 +11480 9815 10480 10986 7683 +11481 11806 6813 11964 7764 +11482 10039 7579 11605 11515 +11483 8492 11515 11605 6441 +11484 9065 6983 11791 8052 +11485 11634 10534 12191 6682 +11486 12040 6780 10963 10630 +11487 6998 11171 8273 11292 +11488 8620 6492 12231 9491 +11489 7624 11362 8046 10830 +11490 11640 12063 11154 8004 +11491 8004 11154 7921 11395 +11492 11637 11934 10228 7366 +11493 10365 10228 11934 7842 +11494 7452 11867 8134 10722 +11495 6631 11974 9284 11230 +11496 12100 10159 11840 7795 +11497 9954 9787 11099 7378 +11498 9567 12012 9434 6649 +11499 6551 8641 8013 11923 +11500 10684 7579 10039 12075 +11501 6942 11122 7632 9663 +11502 10931 6857 11528 11266 +11503 8410 7028 9808 11531 +11504 9729 11723 11673 6417 +11505 12231 11746 7901 8944 +11506 10646 7733 10798 12201 +11507 10174 10711 11975 6769 +11508 9194 7476 10765 11184 +11509 8319 11684 7097 11656 +11510 7815 11367 6398 11881 +11511 9152 6820 8510 11421 +11512 8608 10768 11610 6622 +11513 6728 12136 11069 8254 +11514 7597 12183 8459 11777 +11515 6843 10985 8110 11478 +11516 9553 6465 11745 10614 +11517 9078 10599 11587 7207 +11518 11866 7998 10602 11163 +11519 7921 11097 8012 11272 +11520 10544 6393 10269 11549 +11521 10320 7656 11931 10096 +11522 6644 8319 11656 10289 +11523 11575 6331 12174 10738 +11524 8592 11917 10104 6932 +11525 10875 11243 12050 7977 +11526 9959 8041 10927 10773 +11527 12028 11940 10474 7771 +11528 10452 6764 11143 10636 +11529 11783 11826 10145 8054 +11530 6301 10094 8370 12103 +11531 8179 10466 6787 11307 +11532 12106 6264 12278 9573 +11533 11198 7809 10177 8502 +11534 11190 6476 8502 10177 +11535 9707 10287 11166 7939 +11536 6981 8672 11427 10447 +11537 6296 11021 8154 11553 +11538 9789 12277 10400 6581 +11539 11428 10250 12208 7908 +11540 7873 11738 6787 10466 +11541 10981 11151 6503 9452 +11542 10089 10990 11000 6241 +11543 10494 10854 11016 8016 +11544 8300 9807 11734 7489 +11545 9269 9853 10913 7234 +11546 8014 9820 6891 11310 +11547 11952 11094 10971 8290 +11548 11956 10150 11867 7452 +11549 7872 12084 8224 11798 +11550 8764 7870 11849 12015 +11551 6714 11088 8096 10784 +11552 12088 7460 11667 10000 +11553 9107 10528 11282 6364 +11554 7874 11817 8279 11396 +11555 10093 10746 12097 6286 +11556 6775 11943 7886 9552 +11557 9843 7824 10386 11401 +11558 7900 11881 6398 10789 +11559 6409 11382 7354 11251 +11560 11647 11333 12154 8220 +11561 8979 11280 10573 6531 +11562 7077 9009 7078 10198 +11563 10305 6336 10152 11904 +11564 7586 10355 6946 12168 +11565 11245 11032 10954 7946 +11566 10209 10954 11032 7644 +11567 7139 6760 12113 8333 +11568 7878 11460 6876 11409 +11569 9579 6715 10971 11094 +11570 7921 11154 6841 11097 +11571 6551 11923 8165 8596 +11572 10195 10411 10612 7471 +11573 6259 12141 8100 10556 +11574 10460 11778 10756 7757 +11575 12125 7182 11959 10301 +11576 7693 10695 7883 11182 +11577 8406 6914 11030 11014 +11578 9156 7857 11014 11030 +11579 10998 6798 11713 10170 +11580 10157 10438 11593 7589 +11581 9330 10630 10963 7398 +11582 6977 10389 12241 8340 +11583 10091 6253 11811 11490 +11584 10284 10623 11255 7673 +11585 9407 7839 10447 11427 +11586 8828 6305 8655 11216 +11587 9512 7128 12074 10662 +11588 7692 8343 12268 10072 +11589 10508 10915 11175 7693 +11590 6318 8403 11991 10467 +11591 6653 10188 7424 11871 +11592 10105 10672 12272 6268 +11593 7873 11370 8230 11738 +11594 11461 8145 11767 7510 +11595 7863 11155 7749 10761 +11596 7301 10153 6666 11979 +11597 6598 10631 7944 11800 +11598 8523 10914 12216 6538 +11599 7520 10677 7862 11577 +11600 6574 8027 12251 9399 +11601 7367 10387 12199 7893 +11602 8249 10871 6308 10302 +11603 6669 9112 10735 11047 +11604 10956 6517 12025 10092 +11605 8322 11256 11718 6444 +11606 8707 11718 11256 8168 +11607 7599 11917 8592 10865 +11608 12103 7712 11383 10827 +11609 6727 10812 7818 11252 +11610 10139 6838 12062 10633 +11611 6333 11157 7736 12180 +11612 10046 7727 11002 10961 +11613 10670 7981 11484 11258 +11614 6391 10874 8346 11749 +11615 11867 10150 12102 7741 +11616 6727 11252 8167 10793 +11617 6643 12030 8232 10661 +11618 7461 10365 7842 11896 +11619 6526 9663 7632 10940 +11620 9856 10301 11959 6640 +11621 11254 6834 11715 10312 +11622 6303 11481 7796 11184 +11623 8179 11307 7945 11766 +11624 8447 11702 7842 11934 +11625 8350 11186 11196 7792 +11626 6720 11931 8694 10806 +11627 8582 10758 11321 7667 +11628 10215 7930 11903 11871 +11629 11705 7845 11065 11112 +11630 9936 7881 11112 11065 +11631 6359 10184 7888 10185 +11632 8324 11783 8054 11585 +11633 10901 7483 11697 10341 +11634 8478 11918 8179 10232 +11635 8018 6886 11342 10897 +11636 11524 10577 11862 7725 +11637 7942 10743 6758 11080 +11638 9003 10850 11406 7885 +11639 11392 11406 10850 6401 +11640 11654 6730 11582 10718 +11641 7370 10372 8262 11665 +11642 10043 7270 11383 10868 +11643 8687 10126 11759 6979 +11644 10811 10938 11258 7935 +11645 6792 11607 8036 11062 +11646 7637 9026 11625 10817 +11647 7569 8503 11906 10421 +11648 6683 10414 8646 11624 +11649 9384 7017 11611 9910 +11650 9708 6621 12250 7292 +11651 10276 7123 10922 11081 +11652 6769 11975 9044 10525 +11653 7861 12236 6831 10158 +11654 11627 7882 11263 11110 +11655 9069 9491 12231 7650 +11656 10369 8081 11663 11271 +11657 6394 11949 8282 10832 +11658 8259 10788 7617 11311 +11659 10633 12062 10965 7628 +11660 11145 10108 11709 7755 +11661 6803 11940 8191 10323 +11662 8038 10579 7699 11028 +11663 10642 7579 10684 11509 +11664 7270 8195 11321 11149 +11665 6801 9516 10356 11817 +11666 8157 7965 8969 10573 +11667 11331 11638 7421 8453 +11668 8793 12082 7171 10681 +11669 7906 11355 6310 11269 +11670 8499 10475 11986 7245 +11671 11147 6705 12071 9304 +11672 12022 6892 12208 10250 +11673 8665 6437 10769 12162 +11674 9710 7366 10228 12072 +11675 10431 10678 11629 7788 +11676 8018 10265 7405 12272 +11677 11334 6800 12154 10201 +11678 11423 7738 11989 10316 +11679 9611 11194 12120 7278 +11680 9566 8036 11607 11234 +11681 6471 10405 11976 7908 +11682 9670 11575 8026 11454 +11683 11318 11317 12160 7383 +11684 7960 11093 7799 11077 +11685 6867 10810 12171 8326 +11686 11510 7702 11822 7847 +11687 6753 10583 7985 12122 +11688 8900 12238 11012 8123 +11689 11028 10826 12017 8038 +11690 10541 12017 10826 7545 +11691 6458 8380 10708 10709 +11692 6406 10348 6968 11570 +11693 6667 11615 8177 11792 +11694 8947 6936 11669 11443 +11695 6259 11472 7892 10262 +11696 7897 10259 7898 11599 +11697 9628 12212 10352 6420 +11698 7819 10971 6715 11343 +11699 11620 7992 12225 11189 +11700 10061 6850 10861 11994 +11701 10642 6735 10651 12080 +11702 8008 11261 7885 11406 +11703 11321 6675 11197 11149 +11704 10334 6768 10448 11710 +11705 9032 12221 7835 12220 +11706 10113 6343 11886 10364 +11707 9715 6675 11321 10758 +11708 11529 10504 12214 6762 +11709 11590 7968 12214 10504 +11710 8076 11349 7059 10828 +11711 8688 11071 6624 11142 +11712 10065 10574 11542 6314 +11713 8732 10981 9452 6733 +11714 8597 11976 10405 7113 +11715 8025 12046 6423 10908 +11716 9353 11367 11385 8035 +11717 8846 11385 11367 7815 +11718 9153 11069 12136 7344 +11719 10903 9140 10451 12181 +11720 6755 11028 7699 11330 +11721 6615 10958 7594 10395 +11722 8352 10716 11225 7856 +11723 10395 7594 11687 10647 +11724 8286 9633 10844 6734 +11725 8016 7347 12077 10494 +11726 6842 11998 8986 12210 +11727 8549 11779 8100 12141 +11728 7863 10761 6818 11560 +11729 9723 10558 11607 6792 +11730 8720 7065 8805 11812 +11731 8091 6709 11722 10676 +11732 11214 7848 10461 11776 +11733 9364 9363 11465 6505 +11734 8648 11838 6487 10433 +11735 8628 10267 7817 12217 +11736 10534 8041 9959 12191 +11737 8021 11242 7754 10983 +11738 12065 8703 10779 7711 +11739 7142 11984 9749 12196 +11740 10714 7789 11803 10924 +11741 6894 11655 11013 8165 +11742 8082 12190 7949 11732 +11743 7907 11355 7906 10967 +11744 6753 10700 8353 12110 +11745 6431 10799 7714 10579 +11746 6520 7865 11570 9848 +11747 6394 11387 7867 11049 +11748 7664 12056 8512 11833 +11749 8071 10909 7721 11983 +11750 10617 10337 10762 11897 +11751 9375 10955 6453 11804 +11752 10091 11490 10748 7770 +11753 11286 11587 10599 6501 +11754 10105 6268 10731 10478 +11755 6730 11654 7699 10586 +11756 10757 10962 12097 7692 +11757 7302 10598 7583 11845 +11758 7459 10317 7848 12209 +11759 10136 6545 12084 7872 +11760 11677 11495 11496 7802 +11761 10593 7453 10945 9422 +11762 6937 11202 7956 10299 +11763 10151 7638 11975 10711 +11764 10666 6529 12015 10418 +11765 10345 6279 10821 9873 +11766 10717 6552 12172 10378 +11767 6436 11215 11209 8194 +11768 9271 11040 11313 7328 +11769 9598 11313 11040 7884 +11770 10044 6941 11619 11205 +11771 11204 10474 11940 6803 +11772 6242 11467 7911 10479 +11773 9265 6458 11701 11453 +11774 7415 11849 8594 11233 +11775 7950 11868 6796 10572 +11776 11524 7725 11999 11183 +11777 12102 11209 11215 7741 +11778 6386 11938 8256 10249 +11779 10753 6930 10897 11342 +11780 10170 11713 11390 7783 +11781 6724 12079 7894 10510 +11782 6568 11108 8383 12222 +11783 11110 11263 11425 7937 +11784 9196 10378 12172 7855 +11785 9388 11629 10678 6347 +11786 8302 11981 10719 6468 +11787 7431 11204 6803 10297 +11788 7541 10658 6293 10602 +11789 10620 7836 11689 10539 +11790 11862 10577 7890 6888 +11791 10276 11081 11082 7804 +11792 6417 11673 7981 10949 +11793 8675 6827 11986 11513 +11794 9327 11283 11534 6814 +11795 8110 11294 7952 11478 +11796 7024 8208 11264 12158 +11797 9914 7787 10582 11797 +11798 7878 11368 8067 11460 +11799 10519 8328 11591 6783 +11800 12054 7851 11807 11101 +11801 8342 11332 7936 6548 +11802 11183 6397 12134 11524 +11803 8437 10963 6780 10964 +11804 8705 11324 7262 11176 +11805 12227 10679 11682 6905 +11806 6985 12165 8299 11416 +11807 11380 9812 11938 6386 +11808 11808 10767 11609 7726 +11809 9772 7993 10988 11322 +11810 10705 12224 10930 7598 +11811 7509 12050 6732 10469 +11812 10582 10410 12214 7968 +11813 8494 10557 12161 6883 +11814 6703 10296 7913 10437 +11815 9519 7439 11224 9634 +11816 6376 9063 12261 10675 +11817 11942 7826 10335 10397 +11818 6331 8623 12164 12174 +11819 11986 6827 11598 10941 +11820 9974 6381 9444 11900 +11821 11275 6740 12090 10686 +11822 10124 11799 8044 11288 +11823 9100 11092 6830 11944 +11824 7329 11326 6725 10468 +11825 11650 10930 12224 8295 +11826 7510 8309 9974 11900 +11827 12274 10941 11598 6855 +11828 6886 8018 12272 10672 +11829 11143 7468 12087 10636 +11830 10452 10636 12087 7927 +11831 9329 7950 10572 12234 +11832 10830 12234 10572 7624 +11833 12051 11360 12117 7876 +11834 9723 7630 12167 10558 +11835 10938 7863 11560 10884 +11836 6908 10396 8619 11809 +11837 10159 7417 10624 11840 +11838 12201 8345 11828 10646 +11839 10557 7873 10466 12161 +11840 7793 10975 7454 11455 +11841 11888 6395 12139 10664 +11842 8618 10568 12198 6973 +11843 7402 8462 12112 10609 +11844 6423 12046 8267 11220 +11845 7736 11715 8202 12180 +11846 6770 8432 11772 9596 +11847 10614 11745 10985 7879 +11848 7657 11711 6481 11375 +11849 6504 11447 8063 11363 +11850 6255 11237 7472 12178 +11851 9909 10871 7281 8365 +11852 11936 10387 11494 6726 +11853 6268 7995 8720 10731 +11854 10265 6413 11809 8619 +11855 7755 10300 12074 7128 +11856 9102 12013 8667 10621 +11857 6621 10899 8270 12250 +11858 11543 6328 12177 10001 +11859 9169 11029 11482 7687 +11860 8826 8191 11940 12028 +11861 7471 11095 6949 10195 +11862 7024 11001 7944 10631 +11863 6987 9869 11567 9030 +11864 7717 10734 133 11819 +11865 8357 11440 6525 11137 +11866 10713 10682 11881 7900 +11867 10780 8103 11166 10287 +11868 7295 11119 12211 9084 +11869 7755 11709 6661 10300 +11870 7864 10684 6395 11888 +11871 7571 11191 8410 11192 +11872 7550 11569 7510 11767 +11873 8046 11362 7846 11287 +11874 8824 11874 10713 7900 +11875 10882 6527 10512 11473 +11876 11419 10647 11687 6460 +11877 10208 11664 12138 6672 +11878 8996 6454 11510 12036 +11879 6363 11728 7642 10600 +11880 7962 12043 12092 8642 +11881 11197 12038 10121 7978 +11882 10792 8007 10911 12109 +11883 8543 6739 11851 10244 +11884 10951 7923 10895 11371 +11885 11801 6766 11830 11484 +11886 10756 11778 11584 6813 +11887 10083 7805 11443 11442 +11888 11669 8187 11442 11443 +11889 9394 12124 10537 7080 +11890 7697 11251 7698 10689 +11891 7950 11596 7951 11868 +11892 10749 7032 10109 12042 +11893 10341 6596 12109 10911 +11894 10479 11054 11455 7454 +11895 8240 11353 6989 11063 +11896 9069 7650 11933 10732 +11897 12042 10680 11925 7909 +11898 12039 6952 11901 12067 +11899 11409 8362 11799 10124 +11900 6685 10807 7568 9565 +11901 7843 6935 10543 11127 +11902 8317 11769 105 11972 +11903 10787 6710 10547 11675 +11904 10211 10856 11691 6770 +11905 7699 11654 8028 11330 +11906 7780 11199 8066 11662 +11907 8005 11253 8006 11477 +11908 6659 12114 7964 11232 +11909 7489 11211 7877 10653 +11910 8367 10377 8539 12041 +11911 9884 7574 12205 10660 +11912 11186 7949 12190 11196 +11913 7804 11082 6262 10423 +11914 7727 12045 8425 11002 +11915 8975 10918 11612 12245 +11916 8012 6842 12210 11544 +11917 7780 11662 6324 11073 +11918 7933 11560 6818 11798 +11919 6677 10668 7846 12267 +11920 8720 7995 12146 10527 +11921 11388 7781 12080 10651 +11922 7742 11851 6739 11270 +11923 8767 10749 6809 11527 +11924 7712 12103 8370 12111 +11925 11761 10968 11692 7756 +11926 10500 7696 12246 10499 +11927 8146 10975 7793 11564 +11928 8166 11446 6824 11648 +11929 10270 10932 11856 7675 +11930 9563 11897 10762 7854 +11931 8886 6520 10745 11361 +11932 7937 11716 6655 11110 +11933 8225 8312 11123 12094 +11934 11736 12094 11123 6893 +11935 7938 8651 11621 11297 +11936 9217 6608 11922 10071 +11937 11968 6301 12103 10827 +11938 9840 7672 11400 11133 +11939 11802 10686 12090 7827 +11940 7902 6682 12191 10509 +11941 11369 12219 11252 7818 +11942 10520 8167 11252 12219 +11943 6749 11182 7883 11806 +11944 10502 8340 11856 10932 +11945 8615 8156 11280 8979 +11946 7937 11425 8080 11487 +11947 8116 11885 8052 11791 +11948 8395 6499 12099 11018 +11949 8024 8833 11018 12099 +11950 6596 11614 8522 12109 +11951 9164 6315 11945 11104 +11952 10276 6706 10961 11002 +11953 8471 12247 6998 10611 +11954 6503 11151 7840 9731 +11955 125 11780 11520 124 +11956 122 123 11520 11781 +11957 11780 8120 11781 11520 +11958 11638 11331 8504 7571 +11959 10655 8099 11754 11483 +11960 151 152 11483 11754 +11961 6676 10490 7165 12157 +11962 10012 11764 11874 6745 +11963 7838 10791 6724 12007 +11964 12022 12248 10876 6892 +11965 11511 11363 11491 7948 +11966 8074 11631 6512 12140 +11967 12035 11967 10834 7833 +11968 8074 11144 7871 11631 +11969 8142 11508 7983 10796 +11970 6449 11201 8326 12171 +11971 11240 8200 10894 6297 +11972 7692 12097 10746 8343 +11973 7758 12004 8898 10996 +11974 8308 12005 7973 11818 +11975 11531 12196 11125 6380 +11976 6972 11928 7709 10867 +11977 9275 7250 11757 9800 +11978 8892 11013 11655 7578 +11979 6310 8279 11817 10356 +11980 8624 7730 11009 11008 +11981 6305 8828 7822 11218 +11982 8658 7339 10652 8185 +11983 8897 11870 11050 6508 +11984 9688 11050 11870 7971 +11985 10234 10154 11851 7742 +11986 7382 8493 12155 11863 +11987 6422 11506 7931 11167 +11988 6847 11580 8068 11589 +11989 9802 6663 11452 11451 +11990 11739 8300 11724 10533 +11991 10499 12246 11771 6723 +11992 12031 8258 11315 8032 +11993 9259 6908 11809 9260 +11994 10665 7617 10788 12131 +11995 9089 11962 10953 7748 +11996 11414 6414 11327 11782 +11997 10946 6402 11642 12057 +11998 8387 11695 6745 10724 +11999 6737 11860 8562 10969 +12000 11914 8074 12140 10772 +12001 7550 11767 8145 6433 +12002 10747 7810 12162 10769 +12003 10387 7367 11493 11494 +12004 8774 10898 8061 11694 +12005 6785 11297 11621 8149 +12006 7685 11205 7806 11083 +12007 7447 9622 11451 11452 +12008 7940 6265 11196 12190 +12009 10684 7864 11850 11509 +12010 8925 11550 7668 10548 +12011 9499 8675 11513 6306 +12012 7302 11845 8100 11114 +12013 10757 9876 12078 10962 +12014 7826 6308 10871 9909 +12015 7681 10993 8306 11859 +12016 12212 7893 12199 10352 +12017 8226 8495 11044 12153 +12018 8257 8423 12153 11044 +12019 11162 11544 12210 7936 +12020 7182 12125 8455 10800 +12021 11322 7319 11946 9772 +12022 7849 12098 6873 10842 +12023 6933 10529 7688 11420 +12024 8609 11638 7571 11192 +12025 8842 10352 12199 7604 +12026 7598 8511 12270 11131 +12027 11830 7935 11258 11484 +12028 11154 12063 12064 6841 +12029 12187 12059 11539 7941 +12030 7749 12254 6818 10761 +12031 11737 11101 11807 6302 +12032 10113 11603 11514 6343 +12033 8536 8017 11514 11603 +12034 7828 10847 8771 12257 +12035 11749 12201 10798 6391 +12036 11261 10984 12276 6873 +12037 12189 8037 12276 10984 +12038 9311 6547 11875 11551 +12039 9692 11551 11875 8126 +12040 11429 10820 12256 7957 +12041 9347 7544 12256 10820 +12042 12025 8198 11432 12027 +12043 10941 12274 11749 8346 +12044 7664 10936 8471 12056 +12045 8432 6770 11691 11036 +12046 8083 11720 8049 11588 +12047 7550 6433 10055 7551 +12048 9686 7752 11861 11120 +12049 7946 11753 7201 11245 +12050 10324 8255 12269 11687 +12051 7353 11601 8281 9709 +12052 11474 6357 12224 10705 +12053 12091 6979 11759 7716 +12054 7013 11872 8335 12144 +12055 9307 11857 11152 7910 +12056 6834 11963 8202 11715 +12057 6316 10965 12062 8360 +12058 12097 10962 12078 6286 +12059 8453 11974 6631 11331 +12060 7682 11015 6743 10948 +12061 10226 11223 11224 7439 +12062 12108 9772 11946 7618 +12063 11610 11691 10856 6622 +12064 6665 11390 11713 9411 +12065 7997 7740 11829 10900 +12066 9330 7715 12040 10630 +12067 8145 8874 11865 6433 +12068 11611 7670 9608 9910 +12069 7745 11058 6934 12010 +12070 6944 11391 8143 11290 +12071 7945 11688 8166 11648 +12072 11082 11081 10922 7821 +12073 8309 6282 11235 11379 +12074 8107 11907 6881 11144 +12075 8579 11309 7775 11815 +12076 12201 11749 12274 8345 +12077 6888 7890 11957 8507 +12078 8103 6794 11461 9444 +12079 8116 11250 7040 11885 +12080 10583 6753 12110 10995 +12081 8386 12118 11744 6455 +12082 9123 10718 12173 11886 +12083 9443 7153 12032 11808 +12084 10767 11808 12032 8234 +12085 11298 10546 11937 8169 +12086 6827 7832 8616 11598 +12087 9941 11982 10457 7769 +12088 10055 6433 11865 7149 +12089 9660 12232 11663 6744 +12090 9316 11025 6264 12106 +12091 8042 12120 11194 8189 +12092 7618 11946 11947 9373 +12093 10840 8065 12158 11264 +12094 7725 11862 8514 11314 +12095 12249 8097 11304 8330 +12096 11261 8008 12189 10984 +12097 6397 11183 11999 8312 +12098 9607 12167 7630 11268 +12099 10592 8032 11315 6642 +12100 11191 10817 11625 6662 +12101 7344 10089 7149 10088 +12102 12255 8217 11453 11701 +12103 7586 12168 8857 11026 +12104 8188 11208 8461 11760 +12105 11101 11737 11907 8107 +12106 12020 8330 11304 6707 +12107 12078 9876 11591 8328 +12108 12071 7739 11948 10530 +12109 6656 12058 9424 11165 +12110 11184 10765 11982 6303 +12111 12243 12244 11857 6889 +12112 9269 7572 12000 9853 +12113 11968 10827 11149 11197 +12114 7671 11981 8302 11254 +12115 11467 12059 12187 8266 +12116 8340 12241 9924 11856 +12117 8117 12148 6976 11430 +12118 6723 11771 8402 11255 +12119 7278 10876 12248 8091 +12120 8293 8080 11425 11635 +12121 8597 11428 7908 11976 +12122 6311 8481 11834 12037 +12123 10004 12265 11495 6448 +12124 11496 11495 12265 8170 +12125 6787 11688 7945 11307 +12126 11101 8107 11914 12054 +12127 10071 11922 12255 7540 +12128 11484 7981 11673 11801 +12129 8068 11782 8029 11589 +12130 6319 12147 7729 11708 +12131 8394 12061 8119 11439 +12132 9654 12067 11901 8336 +12133 9710 12256 7544 11059 +12134 10617 8443 12159 11035 +12135 7672 11066 8158 11543 +12136 6938 11565 10118 7840 +12137 7668 11827 6338 11210 +12138 10651 8087 12195 11388 +12139 8754 12211 11119 6871 +12140 10154 11971 11167 7931 +12141 10034 6960 11247 7830 +12142 11745 6465 11863 12155 +12143 10230 11947 11946 7319 +12144 8553 12133 8014 11310 +12145 10870 6807 11388 12195 +12146 8686 11942 10397 6836 +12147 12257 11262 12115 7828 +12148 6523 11449 8095 11583 +12149 6549 12126 7921 11272 +12150 7234 10913 8073 10580 +12151 10363 10921 11847 7958 +12152 8413 11898 12227 8278 +12153 10679 12227 11898 8171 +12154 6862 11141 8149 11621 +12155 11363 8063 12092 11491 +12156 11263 6867 11635 11425 +12157 8156 8157 10573 11280 +12158 10600 7887 10900 11829 +12159 12043 6970 11491 12092 +12160 8426 10394 6901 11323 +12161 8112 10903 8113 11274 +12162 8474 11887 7880 11690 +12163 11244 11968 11197 7978 +12164 11240 6297 11930 7728 +12165 109 110 12117 11360 +12166 7530 10225 7686 10482 +12167 10897 10264 10265 8018 +12168 9924 12241 10389 6505 +12169 8581 6568 12222 11320 +12170 7919 12048 8588 12047 +12171 10089 7344 12136 10990 +12172 8558 11301 12258 6929 +12173 6776 8059 12258 11301 +12174 11213 11262 12257 6962 +12175 6766 12018 8372 11830 +12176 10762 9634 11224 7854 +12177 12128 11961 11960 8275 +12178 8107 11144 8074 11914 +12179 9196 12119 7375 11418 +12180 7795 11444 8375 12100 +12181 9357 8088 11907 11737 +12182 7564 11740 6240 10688 +12183 6418 11597 7951 11596 +12184 10015 12204 7777 11699 +12185 12196 9749 7051 11125 +12186 11782 11327 12243 8029 +12187 8543 10939 12269 7735 +12188 8070 11334 8033 12244 +12189 6812 11779 8549 12089 +12190 8881 11369 7818 12228 +12191 10601 6817 12205 11296 +12192 8549 12141 8084 12170 +12193 7027 12093 8050 11571 +12194 8050 12093 8223 11987 +12195 7591 9809 6446 11193 +12196 11104 11945 11528 7901 +12197 10345 10346 12023 6279 +12198 10577 11524 12134 7890 +12199 9672 11618 7751 11731 +12200 7832 11107 7990 10872 +12201 6608 8632 12255 11922 +12202 6341 10835 8203 10701 +12203 8388 11985 6451 11810 +12204 8647 11958 11959 7182 +12205 8651 6245 12027 11432 +12206 11719 12054 11914 10772 +12207 10744 6301 11968 11244 +12208 6951 10781 7902 10509 +12209 8481 12163 7130 11586 +12210 8257 11541 7982 12206 +12211 6787 11738 8079 11688 +12212 7943 11816 7944 11001 +12213 7770 9855 12138 11664 +12214 9360 7951 11597 11820 +12215 8874 10088 7149 11865 +12216 6380 11125 8609 11192 +12217 9873 10821 12000 7572 +12218 11765 10597 11569 7550 +12219 7696 8499 11771 12246 +12220 11271 11663 12232 8000 +12221 6726 11494 11493 8094 +12222 8361 12185 8105 12101 +12223 9643 11729 7813 12194 +12224 7143 10860 12016 8668 +12225 10580 8073 12175 10612 +12226 10001 12177 7746 11500 +12227 10475 7768 11513 11986 +12228 8791 12216 9514 7099 +12229 12041 12057 11642 8367 +12230 7902 10118 11565 7099 +12231 8680 11436 6806 11912 +12232 11723 8260 11801 11673 +12233 6681 10652 6503 9769 +12234 6819 11937 11382 7834 +12235 12118 9869 6987 11744 +12236 8228 12180 8202 12130 +12237 11534 11283 12143 8207 +12238 11467 6242 11539 12059 +12239 6863 11505 7339 8658 +12240 7824 6255 12178 11195 +12241 8750 12215 12182 8233 +12242 114 115 12182 12215 +12243 7674 11935 8193 11660 +12244 11266 11528 11945 8131 +12245 6890 11820 11597 8206 +12246 7165 11408 7989 12157 +12247 7250 11380 6386 11757 +12248 7759 10739 6940 11768 +12249 8142 11290 8143 11508 +12250 9324 9821 6856 11984 +12251 7562 11634 8289 11212 +12252 10804 10753 11342 6536 +12253 9959 10959 12002 6951 +12254 6548 7936 12210 8986 +12255 11640 8005 12064 12063 +12256 6517 12026 8198 12025 +12257 6950 7471 10612 12175 +12258 8410 11531 6380 11192 +12259 9797 7619 11938 9812 +12260 7715 12052 8201 12040 +12261 6640 11959 11958 8582 +12262 8696 7806 11205 11619 +12263 7771 12027 6245 12028 +12264 8057 11404 7028 11988 +12265 6264 7895 11420 12278 +12266 9565 7568 12023 10346 +12267 10807 9800 11757 7778 +12268 8247 7854 11224 11223 +12269 9563 8237 11345 11897 +12270 10913 9853 12000 6681 +12271 11610 8575 11036 11691 +12272 6794 11402 8145 11461 +12273 6279 8185 12000 10821 +12274 6841 12064 8703 12065 +12275 8790 6651 10259 7308 +12276 10306 7525 8460 6849 +3 1 5 6088 +12277 431 3025 1459 2672 6470 9064 7498 8711 +12278 452 4321 1762 3904 6491 10360 7801 9943 +12279 1085 2871 211 2204 7124 8910 6250 8243 +12280 4806 522 2864 1829 10845 6561 8903 7868 +12281 5642 2098 2750 999 11681 8137 8789 7038 +12282 5398 311 2638 2044 11437 6350 8677 8083 +12283 5590 2686 1256 3349 11629 8725 7295 9388 +12284 4877 856 2236 2929 10916 6895 8275 8968 +12285 2652 4762 1267 2359 8691 10801 7306 8398 +12286 1014 3035 1347 2443 7053 9074 7386 8482 +12287 1940 3392 293 5063 7979 9431 6332 11102 +12288 5154 1874 1486 2421 11193 7913 7525 8460 +12289 4975 2367 3960 614 11014 8406 9999 6653 +12290 1473 2924 645 2345 7512 8963 6684 8384 +12291 4011 2819 3809 1428 10050 8858 9848 7467 +12292 5675 2283 5217 1820 11714 8322 11256 7859 +12293 1750 3426 1284 3740 7789 9465 7323 9779 +12294 5510 4505 1538 2438 11549 10544 7577 8477 +12295 2974 443 2750 2098 9013 6482 8789 8137 +12296 2443 4530 3672 317 8482 10569 9711 6356 +12297 4819 845 4544 1946 10858 6884 10583 7985 +12298 3992 1830 5535 1277 10031 7869 11574 7316 +12299 1271 2665 4889 5371 7310 8704 10928 11410 +12300 2408 5663 593 2224 8447 11702 6632 8263 +12301 4017 1836 5940 1262 10056 7875 11979 7301 +12302 3088 4511 4045 573 9127 10550 10084 6612 +12303 348 2505 1590 4293 6387 8544 7629 10332 +12304 680 4377 1762 3611 6719 10416 7801 9650 +12305 2263 4735 2239 429 8302 10774 8278 6468 +12306 2924 1473 3893 4414 8963 7512 9932 10453 +12307 5465 1650 2099 2956 11504 7689 8138 8995 +12308 3641 1845 3559 2893 9680 7884 9598 8932 +12309 1857 4673 842 3953 7896 10712 6881 9992 +12310 2834 918 5632 1936 8873 6957 11671 7975 +12311 2342 2529 2499 1107 8381 8568 8538 7146 +12312 5262 2019 221 2519 11301 8058 6260 8558 +12313 1859 5560 382 2948 7898 11599 6421 8987 +12314 1285 3144 205 2392 7324 9183 6244 8431 +12315 870 3524 2198 256 6909 9563 8237 6295 +12316 2296 6105 2158 261 8335 12144 8197 6300 +12317 1916 2974 5506 5359 7955 9013 11545 11398 +12318 2890 4206 2661 441 8929 10245 8700 6480 +12319 2482 3351 3179 353 8521 9390 9218 6392 +12320 2132 4640 2114 295 8171 10679 8153 6334 +12321 814 4514 1333 2777 6853 10553 7372 8816 +12322 2587 2109 2691 291 8626 8148 8730 6330 +12323 3866 1864 4667 1504 9905 7903 10706 7543 +12324 5427 2086 3309 219 11466 8125 9348 6258 +12325 2136 812 1707 4802 8175 6851 7746 10841 +12326 2406 2205 5356 801 8445 8244 11395 6840 +12327 5261 406 6163 1865 11300 6445 12202 7904 +12328 3866 1345 5877 1864 9905 7384 11916 7903 +12329 4944 1982 4544 845 10983 8021 10583 6884 +12330 4552 2790 949 2611 10591 8829 6988 8650 +12331 4897 494 2437 2666 10936 6533 8476 8705 +12332 3906 864 2408 2224 9945 6903 8447 8263 +12333 2388 2041 5448 860 8427 8080 11487 6899 +12334 936 2792 1274 2594 6975 8831 7313 8633 +12335 4896 682 2834 1936 10935 6721 8873 7975 +12336 1448 3128 682 2719 7487 9167 6721 8758 +12337 2578 265 4865 2123 8617 6304 10904 8162 +12338 4197 1871 3268 688 10236 7910 9307 6727 +12339 2251 2288 1780 4932 8290 8327 7819 10971 +12340 5418 4095 273 2456 11457 10134 6312 8495 +12341 1462 2726 991 3211 7501 8765 7030 9250 +12342 2410 1181 3195 3672 8449 7220 9234 9711 +12343 2952 1922 5484 917 8991 7961 11523 6956 +12344 2634 2574 6220 809 8673 8613 12259 6848 +12345 4735 1947 4400 866 10774 7986 10439 6905 +12346 51 5120 2100 52 147 11159 8139 148 +12347 2696 441 2661 4024 8735 6480 8700 10063 +12348 945 3447 1459 3025 6984 9486 7498 9064 +12349 5831 1932 2938 1009 11870 7971 8977 7048 +12350 5561 1876 3374 1284 11600 7915 9413 7323 +12351 5478 3739 1219 2459 11517 9778 7258 8498 +12352 511 5665 1965 5601 6550 11704 8004 11640 +12353 2688 5805 5446 941 8727 11844 11485 6980 +12354 1147 3895 1958 5325 7186 9934 7997 11364 +12355 2323 5235 837 5370 8362 11274 6876 11409 +12356 2040 5939 2191 5699 8079 11978 8230 11738 +12357 3973 1064 3278 1885 10012 7103 9317 7924 +12358 3012 1014 2596 3564 9051 7053 8635 9603 +12359 1524 4260 898 2618 7563 10299 6937 8657 +12360 2725 1977 1308 5872 8764 8016 7347 11911 +12361 294 2781 2189 6141 6333 8820 8228 12180 +12362 1940 5017 722 3724 7979 11056 6761 9763 +12363 5082 3404 1114 3153 11121 9443 7153 9192 +12364 772 2244 1478 4212 6811 8283 7517 10251 +12365 1958 454 1957 5325 7997 6493 7996 11364 +12366 3495 1028 3105 4680 9534 7067 9144 10719 +12367 5171 1712 3933 299 11210 7751 9972 6338 +12368 1873 3699 1562 4933 7912 9738 7601 10972 +12369 4780 1949 4271 611 10819 7988 10310 6650 +12370 1573 3271 5865 4266 7612 9310 11904 10305 +12371 4319 2162 2779 212 10358 8201 8818 6251 +12372 4861 1958 3895 621 10900 7997 9934 6660 +12373 4884 2587 4653 819 10923 8626 10692 6858 +12374 2214 5853 2142 507 8253 11892 8181 6546 +12375 785 2114 1759 5407 6824 8153 7798 11446 +12376 3097 4849 3713 1281 9136 10888 9752 7320 +12377 1615 4128 350 2533 7654 10167 6389 8572 +12378 365 2562 1738 4482 6404 8601 7777 10521 +12379 2584 843 4218 2108 8623 6882 10257 8147 +12380 5464 1828 4624 2379 11503 7867 10663 8418 +12381 4024 930 5696 2650 10063 6969 11735 8689 +12382 5631 789 5254 4091 11670 6828 11293 10130 +12383 1070 3996 1916 3975 7109 10035 7955 10014 +12384 2645 2205 2406 967 8684 8244 8445 7006 +12385 1886 5431 2644 4536 7925 11470 8683 10575 +12386 784 3563 1825 3932 6823 9602 7864 9971 +12387 4968 2019 5262 737 11007 8058 11301 6776 +12388 4379 5519 4375 1376 10418 11558 10414 7415 +12389 3504 856 4616 2060 9543 6895 10655 8099 +12390 1636 4232 663 2516 7675 10271 6702 8555 +12391 1510 3434 1013 2805 7549 9473 7052 8844 +12392 2713 4096 3497 482 8752 10135 9536 6521 +12393 1181 2410 549 3082 7220 8449 6588 9121 +12394 2483 951 1783 5575 8522 6990 7822 11614 +12395 2013 3026 720 5951 8052 9065 6759 11990 +12396 1785 4347 1338 5156 7824 10386 7377 11195 +12397 4747 2014 5702 970 10786 8053 11741 7009 +12398 2494 3951 3152 607 8533 9990 9191 6646 +12399 5090 1963 3784 874 11129 8002 9823 6913 +12400 2486 973 2158 2485 8525 7012 8197 8524 +12401 880 2472 2017 5515 6919 8511 8056 11554 +12402 2440 3072 2933 1122 8479 9111 8972 7161 +12403 1811 2539 373 4792 7850 8578 6412 10831 +12404 3864 1365 4223 2045 9903 7404 10262 8084 +12405 3864 2045 4343 654 9903 8084 10382 6693 +12406 4851 484 5036 3553 10890 6523 11075 9592 +12407 3904 1930 6130 452 9943 7969 12169 6491 +12408 1108 2987 2184 5948 7147 9026 8223 11987 +12409 6219 2453 5476 2020 12258 8492 11515 8059 +12410 4878 632 4236 2008 10917 6671 10275 8047 +12411 4707 1466 2458 4054 10746 7505 8497 10093 +12412 5096 2366 4462 1553 11135 8405 10501 7592 +12413 3996 443 2974 1916 10035 6482 9013 7955 +12414 333 2682 1134 2588 6372 8721 7173 8627 +12415 3924 450 2620 2275 9963 6489 8659 8314 +12416 1411 3329 980 2867 7450 9368 7019 8906 +12417 1063 2898 1396 2850 7102 8937 7435 8889 +12418 2006 4820 4309 929 8045 10859 10348 6968 +12419 3831 2079 2583 867 9870 8118 8622 6906 +12420 682 3128 1449 2834 6721 9167 7488 8873 +12421 4756 411 2952 1981 10795 6450 8991 8020 +12422 5569 4650 814 2777 11608 10689 6853 8816 +12423 2866 4344 3603 312 8905 10383 9642 6351 +12424 3635 1080 2515 2082 9674 7119 8554 8121 +12425 1984 790 2092 5227 8023 6829 8131 11266 +12426 2475 2685 3991 1102 8514 8724 10030 7141 +12427 5408 2024 4769 1107 11447 8063 10808 7146 +12428 4192 1935 5930 211 10231 7974 11969 6250 +12429 4190 205 3144 1931 10229 6244 9183 7970 +12430 267 2389 949 2390 6306 8428 6988 8429 +12431 4194 2245 3916 422 10233 8284 9955 6461 +12432 805 3816 1608 3043 6844 9855 7647 9082 +12433 3649 1205 2938 1932 9688 7244 8977 7971 +12434 3430 1949 4780 1332 9469 7988 10819 7371 +12435 481 4706 1428 3809 6520 10745 7467 9848 +12436 4190 1931 4064 1133 10229 7970 10103 7172 +12437 4263 1436 4611 2137 10302 7475 10650 8176 +12438 372 4315 1740 2843 6411 10354 7779 8882 +12439 2967 2107 4936 969 9006 8146 10975 7008 +12440 893 2553 1160 2552 6932 8592 7199 8591 +12441 6011 1938 4659 1470 12050 7977 10698 7509 +12442 708 6059 1846 2964 6747 12098 7885 9003 +12443 1131 3827 1469 4147 7170 9866 7508 10186 +12444 987 3113 781 2747 7026 9152 6820 8786 +12445 1425 3746 857 3552 7464 9785 6896 9591 +12446 3904 963 5574 1930 9943 7002 11613 7969 +12447 1382 2414 1492 3557 7421 8453 7531 9596 +12448 2932 5627 1522 2438 8971 11666 7561 8477 +12449 885 4396 4731 2722 6924 10435 10770 8761 +12450 501 2748 1067 2731 6540 8787 7106 8770 +12451 698 4830 1986 3434 6737 10869 8025 9473 +12452 3724 811 3392 1940 9763 6850 9431 7979 +12453 4795 635 4097 2001 10834 6674 10136 8040 +12454 5100 1360 5629 2059 11139 7399 11668 8098 +12455 2697 904 5073 5666 8736 6943 11112 11705 +12456 2180 3923 2050 881 8219 9962 8089 6920 +12457 5179 813 3861 1783 11218 6852 9900 7822 +12458 4764 677 2528 1890 10803 6716 8567 7929 +12459 1736 4217 786 4422 7775 10256 6825 10461 +12460 3383 4554 2498 813 9422 10593 8537 6852 +12461 1733 3657 1130 3656 7772 9696 7169 9695 +12462 2618 2445 6096 1847 8657 8484 12135 7886 +12463 1695 2746 640 4552 7734 8785 6679 10591 +12464 1505 2957 415 3308 7544 8996 6454 9347 +12465 3250 440 4727 1751 9289 6479 10766 7790 +12466 1876 4966 1708 3374 7915 11005 7747 9413 +12467 1995 2979 733 4823 8034 9018 6772 10862 +12468 1022 2426 1023 2714 7061 8465 7062 8753 +12469 3479 1964 4042 1006 9518 8003 10081 7045 +12470 5967 2325 5702 2014 12006 8364 11741 8053 +12471 1969 4073 5353 5367 8008 10112 11392 11406 +12472 4122 1249 4271 1949 10161 7288 10310 7988 +12473 5457 807 2568 2131 11496 6846 8607 8170 +12474 1856 1482 3811 225 7895 7521 9850 6264 +12475 2388 446 2254 2041 8427 6485 8293 8080 +12476 1584 3551 603 3047 7623 9590 6642 9086 +12477 1543 5605 2571 4222 7582 11644 8610 10261 +12478 3641 360 3070 2212 9680 6399 9109 8251 +12479 3071 1177 2468 2469 9110 7216 8507 8508 +12480 797 2647 1345 3866 6836 8686 7384 9905 +12481 1876 2843 821 4966 7915 8882 6860 11005 +12482 721 2075 2074 1100 6760 8114 8113 7139 +12483 3629 226 3826 5106 9668 6265 9865 11145 +12484 830 2190 4447 2258 6869 8229 10486 8297 +12485 4010 2088 94 93 10049 8127 190 189 +12486 317 2596 1014 2443 6356 8635 7053 8482 +12487 1488 2942 433 2679 7527 8981 6472 8718 +12488 4178 1960 5269 1135 10217 7999 11308 7174 +12489 986 4880 1592 2209 7025 10919 7631 8248 +12490 2565 2900 2736 1010 8604 8939 8775 7049 +12491 1259 2342 3327 5583 7298 8381 9366 11622 +12492 3161 2122 1334 5953 9200 8161 7373 11992 +12493 270 3692 911 2610 6309 9731 6950 8649 +12494 5783 2116 5161 1663 11822 8155 11200 7702 +12495 417 2511 1819 3296 6456 8550 7858 9335 +12496 5594 1644 3776 2937 11633 7683 9815 8976 +12497 770 1870 6003 4710 6809 7909 12042 10749 +12498 1010 2736 1099 2748 7049 8775 7138 8787 +12499 2642 2357 3146 994 8681 8396 9185 7033 +12500 2592 215 3972 4474 8631 6254 10011 10513 +12501 5784 932 5967 2377 11823 6971 12006 8416 +12502 679 2687 1538 4323 6718 8726 7577 10362 +12503 369 4513 1790 3586 6408 10552 7829 9625 +12504 58 57 5444 4616 154 153 11483 10655 +12505 2103 5251 5462 3208 8142 11290 11501 9247 +12506 5982 509 2303 2248 12021 6548 8342 8287 +12507 4430 1960 4178 693 10469 7999 10217 6732 +12508 4496 412 5939 2040 10535 6451 11978 8079 +12509 1850 5930 789 3988 7889 11969 6828 10027 +12510 713 2461 1677 4179 6752 8500 7716 10218 +12511 2704 568 3498 3852 8743 6607 9537 9891 +12512 2720 4045 3370 1184 8759 10084 9409 7223 +12513 39 38 3160 3986 135 134 9199 10025 +12514 1095 2769 1381 3643 7134 8808 7420 9682 +12515 4800 763 2200 2199 10839 6802 8239 8238 +12516 649 2537 1600 4235 6688 8576 7639 10274 +12517 2726 2231 3999 719 8765 8270 10038 6758 +12518 3924 1125 6111 1963 9963 7164 12150 8002 +12519 2333 268 2862 4606 8372 6307 8901 10645 +12520 5917 1964 4446 1413 11956 8003 10485 7452 +12521 5058 1973 803 2076 11097 8012 6842 8115 +12522 4940 2370 83 82 10979 8409 179 178 +12523 5853 1191 3099 3129 11892 7230 9138 9168 +12524 5501 1972 3728 675 11540 8011 9767 6714 +12525 1082 3297 1317 3409 7121 9336 7356 9448 +12526 3703 234 2399 4047 9742 6273 8438 10086 +12527 5245 3693 2180 2628 11284 9732 8219 8667 +12528 6150 1998 2797 758 12189 8037 8836 6797 +12529 2525 6021 2894 388 8564 12060 8933 6427 +12530 4432 1517 4104 2405 10471 7556 10143 8444 +12531 5000 1166 2605 3037 11039 7205 8644 9076 +12532 3083 284 3479 2051 9122 6323 9518 8090 +12533 5505 1973 5233 2402 11544 8012 11272 8441 +12534 1669 2604 1025 4792 7708 8643 7064 10831 +12535 2601 1009 2444 2437 8640 7048 8483 8476 +12536 1101 2084 613 3849 7140 8123 6652 9888 +12537 2600 518 3270 3714 8639 6557 9309 9753 +12538 2845 4305 4059 1468 8884 10344 10098 7507 +12539 1962 4620 790 5119 8001 10659 6829 11158 +12540 5681 751 2113 2742 11720 6790 8152 8781 +12541 2750 443 2579 4529 8789 6482 8618 10568 +12542 2093 3993 2571 1154 8132 10032 8610 7193 +12543 3334 847 5303 2072 9373 6886 11342 8111 +12544 4683 1413 4446 2448 10722 7452 10485 8487 +12545 6113 524 2529 2342 12152 6563 8568 8381 +12546 2542 529 3707 1158 8581 6568 9746 7197 +12547 2136 4802 428 2823 8175 10841 6467 8862 +12548 2870 2191 5939 3877 8909 8230 11978 9916 +12549 6036 4645 356 2252 12075 10684 6395 8291 +12550 1879 3150 227 4476 7918 9189 6266 10515 +12551 5771 958 2337 2431 11810 6997 8376 8470 +12552 2036 4419 620 6075 8075 10458 6659 12114 +12553 2328 4338 740 4516 8367 10377 6779 10555 +12554 3688 2327 3641 2893 9727 8366 9680 8932 +12555 2815 4021 2416 860 8854 10060 8455 6899 +12556 2286 5238 1991 1021 8325 11277 8030 7060 +12557 1934 5309 30 3273 7973 11348 126 9312 +12558 3074 2069 2903 919 9113 8108 8942 6958 +12559 4602 420 2675 2139 10641 6459 8714 8178 +12560 3987 1065 3728 1972 10026 7104 9767 8011 +12561 2438 1538 2687 4300 8477 7577 8726 10339 +12562 2769 584 3003 2183 8808 6623 9042 8222 +12563 4051 435 3987 1972 10090 6474 10026 8011 +12564 2843 2520 4543 821 8882 8559 10582 6860 +12565 3787 1320 3188 2372 9826 7359 9227 8411 +12566 2247 400 3758 1580 8286 6439 9797 7619 +12567 2509 1326 3292 3703 8548 7365 9331 9742 +12568 5962 1022 2714 2592 12001 7061 8753 8631 +12569 6166 1996 3314 778 12205 8035 9353 6817 +12570 2723 2951 2169 1034 8762 8990 8208 7073 +12571 2933 3974 3917 1430 8972 10013 9956 7469 +12572 5189 1709 3050 2102 11228 7748 9089 8141 +12573 2132 3855 875 5859 8171 9894 6914 11898 +12574 3345 944 5277 2800 9384 6983 11316 8839 +12575 2444 306 2116 5539 8483 6345 8155 11578 +12576 660 4137 1773 3936 6699 10176 7812 9975 +12577 5610 2186 2273 358 11649 8225 8312 6397 +12578 5606 2187 2456 273 11645 8226 8495 6312 +12579 3994 2065 4988 765 10033 8104 11027 6804 +12580 234 3533 1164 2399 6273 9572 7203 8438 +12581 974 2485 2158 6105 7013 8524 8197 12144 +12582 925 5549 2044 2638 6964 11588 8083 8677 +12583 746 4234 2675 2110 6785 10273 8714 8149 +12584 1046 2238 5871 2237 7085 8277 11910 8276 +12585 1623 3694 754 3218 7662 9733 6793 9257 +12586 261 2158 973 3573 6300 8197 7012 9612 +12587 5301 1545 3960 2367 11340 7584 9999 8406 +12588 4528 1043 2673 2157 10567 7082 8712 8196 +12589 2112 4724 735 2854 8151 10763 6774 8893 +12590 5957 976 2248 2303 11996 7015 8287 8342 +12591 3841 734 3966 2207 9880 6773 10005 8246 +12592 3058 2583 2079 1064 9097 8622 8118 7103 +12593 5075 2972 5553 773 11114 9011 11592 6812 +12594 472 3134 1093 3543 6511 9173 7132 9582 +12595 5317 3822 1041 3355 11356 9861 7080 9394 +12596 717 4915 1907 5134 6756 10954 7946 11173 +12597 1840 4457 1043 4528 7879 10496 7082 10567 +12598 3538 2489 3823 246 9577 8528 9862 6285 +12599 4553 1993 3968 1170 10592 8032 10007 7209 +12600 3532 957 4474 2418 9571 6996 10513 8457 +12601 5111 98 97 2424 11150 194 193 8463 +12602 1013 6007 2228 3546 7052 12046 8267 9585 +12603 674 5046 5994 3435 6713 11085 12033 9474 +12604 969 3745 2397 5723 7008 9784 8436 11762 +12605 5671 1438 3070 2975 11710 7477 9109 9014 +12606 4479 1029 3263 2021 10518 7068 9302 8060 +12607 2506 954 2878 3536 8545 6993 8917 9575 +12608 1298 3955 783 2277 7337 9994 6822 8316 +12609 4943 2624 730 4135 10982 8663 6769 10174 +12610 1572 2105 385 5007 7611 8144 6424 11046 +12611 4325 2001 4097 1356 10364 8040 10136 7395 +12612 1970 3098 1443 5149 8009 9137 7482 11188 +12613 5966 867 2583 2269 12005 6906 8622 8308 +12614 3582 1075 3309 2086 9621 7114 9348 8125 +12615 2983 2680 2182 1193 9022 8719 8221 7232 +12616 919 2903 1651 2424 6958 8942 7690 8463 +12617 3418 2345 3883 1008 9457 8384 9922 7047 +12618 785 5609 2470 5372 6824 11648 8509 11411 +12619 4229 2960 4732 343 10268 8999 10771 6382 +12620 984 5004 2050 3163 7023 11043 8089 9202 +12621 489 2599 887 3109 6528 8638 6926 9148 +12622 4217 397 5176 2095 10256 6436 11215 8134 +12623 1985 5541 799 2582 8024 11580 6838 8621 +12624 3320 2212 3070 1044 9359 8251 9109 7083 +12625 1353 3937 1565 2803 7392 9976 7604 8842 +12626 96 2762 2424 97 192 8801 8463 193 +12627 469 2858 1109 2813 6508 8897 7148 8852 +12628 2739 1241 3158 3310 8778 7280 9197 9349 +12629 5632 3820 4896 1936 11671 9859 10935 7975 +12630 5915 2008 4236 1367 11954 8047 10275 7406 +12631 4017 4311 2805 227 10056 10350 8844 6266 +12632 1059 2873 1123 2586 7098 8912 7162 8625 +12633 4370 4417 2246 831 10409 10456 8285 6870 +12634 5305 2086 5427 2560 11344 8125 11466 8599 +12635 657 4434 1837 3975 6696 10473 7876 10014 +12636 1816 4083 6168 2598 7855 10122 12207 8637 +12637 925 2733 2010 5549 6964 8772 8049 11588 +12638 2329 4980 988 5013 8368 11019 7027 11052 +12639 5603 1624 2176 2177 11642 7663 8215 8216 +12640 6039 247 3787 2289 12078 6286 9826 8328 +12641 3673 1361 3878 2758 9712 7400 9917 8797 +12642 4749 431 2672 2220 10788 6470 8711 8259 +12643 4319 212 3592 2009 10358 6251 9631 8048 +12644 1500 3126 793 5299 7539 9165 6832 11338 +12645 4048 946 5023 2134 10087 6985 11062 8173 +12646 2106 2835 5637 756 8145 8874 11676 6795 +12647 3605 3886 2801 1115 9644 9925 8840 7154 +12648 5813 1048 2677 2355 11852 7087 8716 8394 +12649 332 3550 1405 3029 6371 9589 7444 9068 +12650 5545 2187 5606 1775 11584 8226 11645 7814 +12651 5142 387 4479 2021 11181 6426 10518 8060 +12652 1786 5571 2536 236 7825 11610 8575 6275 +12653 3715 2313 4677 251 9754 8352 10716 6290 +12654 5906 2092 4587 276 11945 8131 10626 6315 +12655 346 3121 1417 4609 6385 9160 7456 10648 +12656 4222 2571 3993 1664 10261 8610 10032 7703 +12657 4127 2011 2515 376 10166 8050 8554 6415 +12658 5702 2631 2378 970 11741 8670 8417 7009 +12659 4435 1169 2831 5165 10474 7208 8870 11204 +12660 4668 2046 2954 1537 10707 8085 8993 7576 +12661 1129 2877 518 2600 7168 8916 6557 8639 +12662 4106 2015 4678 513 10145 8054 10717 6552 +12663 5701 201 5119 2268 11740 6240 11158 8307 +12664 1232 2604 1669 2767 7271 8643 7708 8806 +12665 3367 3373 2499 2529 9406 9412 8538 8568 +12666 2850 1396 4008 3635 8889 7435 10047 9674 +12667 4436 1729 2316 444 10475 7768 8355 6483 +12668 1319 2806 1068 3266 7358 8845 7107 9305 +12669 58 4616 2343 59 154 10655 8382 155 +12670 2837 1266 2770 2868 8876 7305 8809 8907 +12671 1818 4149 560 3117 7857 10188 6599 9156 +12672 5657 2043 6151 1901 11696 8082 12190 7940 +12673 1985 2794 808 5541 8024 8833 6847 11580 +12674 4178 2021 3263 693 10217 8060 9302 6732 +12675 3043 2454 5255 805 9082 8493 11294 6844 +12676 3095 996 4363 1848 9134 7035 10402 7887 +12677 4161 2097 3009 1189 10200 8136 9048 7228 +12678 5398 2742 1005 2882 11437 8781 7044 8921 +12679 5837 385 2105 3224 11876 6424 8144 9263 +12680 5771 2349 5924 958 11810 8388 11963 6997 +12681 2039 5280 915 2829 8078 11319 6954 8868 +12682 1352 2494 607 3700 7391 8533 6646 9739 +12683 5158 5999 3676 636 11197 12038 9715 6675 +12684 2723 1618 4549 2488 8762 7657 10588 8527 +12685 1401 5429 793 3126 7440 11468 6832 9165 +12686 1756 4161 1189 3332 7795 10200 7228 9371 +12687 5039 2379 4624 4567 11078 8418 10663 10606 +12688 5802 4501 499 2484 11841 10540 6538 8523 +12689 3120 1814 4576 5423 9159 7853 10615 11462 +12690 2928 2223 3706 979 8967 8262 9745 7018 +12691 2923 1769 4599 3899 8962 7808 10638 9938 +12692 4881 2412 3544 1116 10920 8451 9583 7155 +12693 5202 3338 441 2696 11241 9377 6480 8735 +12694 2499 3373 2244 465 8538 9412 8283 6504 +12695 678 4329 2304 6229 6717 10368 8343 12268 +12696 4937 2093 4562 778 10976 8132 10601 6817 +12697 4938 461 3993 2093 10977 6500 10032 8132 +12698 5301 2367 875 3855 11340 8406 6914 9894 +12699 4931 3320 1044 2833 10970 9359 7083 8872 +12700 1147 3542 1084 3895 7186 9581 7123 9934 +12701 4586 2033 4618 1407 10625 8072 10657 7446 +12702 5050 2111 3995 921 11089 8150 10034 6960 +12703 1476 2859 616 3648 7515 8898 6655 9687 +12704 482 3269 1347 2713 6521 9308 7386 8752 +12705 3864 654 4385 2210 9903 6693 10424 8249 +12706 5480 644 2669 2033 11519 6683 8708 8072 +12707 4648 6085 4498 780 10687 12124 10537 6819 +12708 1887 4373 640 2746 7926 10412 6679 8785 +12709 5750 5980 955 2627 11789 12019 6994 8666 +12710 5917 4111 4462 2366 11956 10150 10501 8405 +12711 5917 2366 4042 1964 11956 8405 10081 8003 +12712 99 2513 3135 100 195 8552 9174 196 +12713 4105 2625 2394 1124 10144 8664 8433 7163 +12714 5527 2838 2179 368 11566 8877 8218 6407 +12715 1927 4532 346 5441 7966 10571 6385 11480 +12716 1871 2626 398 5113 7910 8665 6437 11152 +12717 4481 2128 4428 279 10520 8167 10467 6318 +12718 962 2177 2176 4939 7001 8216 8215 10978 +12719 350 2446 975 2659 6389 8485 7014 8698 +12720 3579 2385 5188 955 9618 8424 11227 6994 +12721 448 5051 5148 2976 6487 11090 11187 9015 +12722 6032 3265 848 4491 12071 9304 6887 10530 +12723 1033 5922 5266 3494 7072 11961 11305 9533 +12724 4715 749 3610 2427 10754 6788 9649 8466 +12725 3640 4304 432 2350 9679 10343 6471 8389 +12726 5146 2129 2668 791 11185 8168 8707 6830 +12727 5146 1604 3743 2129 11185 7643 9782 8168 +12728 1155 4022 1770 4138 7194 10061 7809 10177 +12729 5809 629 2586 4895 11848 6668 8625 10934 +12730 3095 621 4883 1782 9134 6660 10922 7821 +12731 3261 3807 2806 1319 9300 9846 8845 7358 +12732 2154 5621 622 2788 8193 11660 6661 8827 +12733 5139 1705 3940 288 11178 7744 9979 6327 +12734 1849 4159 1038 4145 7888 10198 7077 10184 +12735 5957 879 2795 2295 11996 6918 8834 8334 +12736 3139 2157 2673 452 9178 8196 8712 6491 +12737 2946 690 3865 5070 8985 6729 9904 11109 +12738 5486 4185 295 2114 11525 10224 6334 8153 +12739 2506 2630 3711 954 8545 8669 9750 6993 +12740 3747 2765 3954 1025 9786 8804 9993 7064 +12741 5957 2303 5293 879 11996 8342 11332 6918 +12742 5958 2123 4865 2211 11997 8162 10904 8250 +12743 4031 3877 2337 477 10070 9916 8376 6516 +12744 4319 742 6013 2162 10358 6781 12052 8201 +12745 1765 4237 667 3989 7804 10276 6706 10028 +12746 5188 980 5406 2085 11227 7019 11445 8124 +12747 5102 2110 2675 420 11141 8149 8714 6459 +12748 4026 4804 2958 1567 10065 10843 8997 7606 +12749 4978 2108 3105 1028 11017 8147 9144 7067 +12750 5280 2039 4873 1209 11319 8078 10912 7248 +12751 3923 67 66 2050 9962 163 162 8089 +12752 3552 2097 4161 207 9591 8136 10200 6246 +12753 1921 4480 873 5038 7960 10519 6912 11077 +12754 2308 960 2248 5931 8347 6999 8287 11970 +12755 1601 3154 2130 5259 7640 9193 8169 11298 +12756 4330 2042 4201 457 10369 8081 10240 6496 +12757 6158 2336 3874 1287 12197 8375 9913 7326 +12758 1233 2596 317 3253 7272 8635 6356 9292 +12759 5584 521 2916 2209 11623 6560 8955 8248 +12760 3272 2145 3111 1024 9311 8184 9150 7063 +12761 4740 2557 2556 863 10779 8596 8595 6902 +12762 657 3975 1916 5359 6696 10014 7955 11398 +12763 3660 766 4249 2174 9699 6805 10288 8213 +12764 5250 1005 2742 2113 11289 7044 8781 8152 +12765 3629 830 2258 4148 9668 6869 8297 10187 +12766 542 3750 1603 4363 6581 9789 7642 10402 +12767 5535 2808 3036 1277 11574 8847 9075 7316 +12768 4497 222 2603 1923 10536 6261 8642 7962 +12769 5096 2885 2277 783 11135 8924 8316 6822 +12770 2594 854 2298 404 8633 6893 8337 6443 +12771 3475 643 5595 2250 9514 6682 11634 8289 +12772 3949 2255 5529 387 9988 8294 11568 6426 +12773 5957 2295 6103 976 11996 8334 12142 7015 +12774 4601 1641 4988 2065 10640 7680 11027 8104 +12775 2263 5969 1947 4735 8302 12008 7986 10774 +12776 2591 2495 5378 1056 8630 8534 11417 7095 +12777 4205 2504 2121 1279 10244 8543 8160 7318 +12778 3884 1239 4837 2566 9923 7278 10876 8605 +12779 4887 519 2426 3812 10926 6558 8465 9851 +12780 3188 439 4125 2372 9227 6478 10164 8411 +12781 5864 3960 1521 2763 11903 9999 7560 8802 +12782 4151 2225 3946 433 10190 8264 9985 6472 +12783 2249 3547 345 6184 8288 9586 6384 12223 +12784 1794 4995 635 4795 7833 11034 6674 10834 +12785 4716 2077 5211 413 10755 8116 11250 6452 +12786 2155 881 2050 5004 8194 6920 8089 11043 +12787 1713 4396 885 3647 7752 10435 6924 9686 +12788 2910 960 2412 2909 8949 6999 8451 8948 +12789 5783 771 5539 2116 11822 6810 11578 8155 +12790 6046 510 2645 2312 12085 6549 8684 8351 +12791 333 2588 5352 2104 6372 8627 11391 8143 +12792 223 2963 1782 5043 6262 9002 7821 11082 +12793 6066 2630 2440 2653 12105 8669 8479 8692 +12794 4020 3083 2051 841 10059 9122 8090 6880 +12795 2569 2727 4817 583 8608 8766 10856 6622 +12796 1506 4595 228 2285 7545 10634 6267 8324 +12797 3732 4404 5882 1915 9771 10443 11921 7954 +12798 974 2576 493 2485 7013 8615 6532 8524 +12799 5753 1031 2518 2138 11792 7070 8557 8177 +12800 3029 1405 4744 2332 9068 7444 10783 8371 +12801 4731 4396 1713 4550 10770 10435 7752 10589 +12802 4047 2399 2351 822 10086 8438 8390 6861 +12803 1593 4800 230 5083 7632 10839 6269 11122 +12804 6183 5281 870 1681 12222 11320 6909 7720 +12805 2773 245 3156 3704 8812 6284 9195 9743 +12806 5880 2375 4727 440 11919 8414 10766 6479 +12807 2295 2795 252 6103 8334 8834 6291 12142 +12808 2660 5472 5324 465 8699 11511 11363 6504 +12809 5428 1872 4617 2227 11467 7911 10656 8266 +12810 1369 4269 1740 4315 7408 10308 7779 10354 +12811 2105 5180 883 3224 8144 11219 6922 9263 +12812 5788 299 3074 2065 11827 6338 9113 8104 +12813 4095 2059 3430 1332 10134 8098 9469 7371 +12814 4418 2488 4549 715 10457 8527 10588 6754 +12815 81 80 2921 2527 177 176 8960 8566 +12816 1613 4662 302 4786 7652 10701 6341 10825 +12817 4561 1848 4363 1603 10600 7887 10402 7642 +12818 4938 1577 4204 2493 10977 7616 10243 8532 +12819 5393 823 2012 2159 11432 6862 8051 8198 +12820 2677 1048 2451 2813 8716 7087 8490 8852 +12821 2388 860 2416 4761 8427 6899 8455 10800 +12822 4628 1273 3176 2078 10667 7312 9215 8117 +12823 4571 434 4157 2611 10610 6473 10196 8650 +12824 5198 1433 4221 2053 11237 7472 10260 8092 +12825 1065 4199 1563 3728 7104 10238 7602 9767 +12826 4878 4065 893 2436 10917 10104 6932 8475 +12827 6037 2102 3050 301 12076 8141 9089 6340 +12828 1108 4715 1598 2987 7147 10754 7637 9026 +12829 1287 4157 2230 4308 7326 10196 8269 10347 +12830 4635 762 3477 2083 10674 6801 9516 8122 +12831 364 4023 1370 2335 6403 10062 7409 8374 +12832 4998 1343 3818 1983 11037 7382 9857 8022 +12833 3644 483 2928 2523 9683 6522 8967 8562 +12834 4571 1245 3581 2063 10610 7284 9620 8102 +12835 2913 1312 3217 3646 8952 7351 9256 9685 +12836 4760 2097 3552 857 10799 8136 9591 6896 +12837 4297 2339 2854 735 10336 8378 8893 6774 +12838 825 5092 1559 2501 6864 11131 7598 8540 +12839 2186 3950 5697 6055 8225 9989 11736 12094 +12840 3333 608 2655 3958 9372 6647 8694 9997 +12841 6091 2950 2337 958 12130 8989 8376 6997 +12842 5622 2232 3020 963 11661 8271 9059 7002 +12843 1140 5689 1603 3750 7179 11728 7642 9789 +12844 70 2532 2959 71 166 8571 8998 167 +12845 4642 597 2903 2069 10681 6636 8942 8108 +12846 2645 6010 1032 2312 8684 12049 7071 8351 +12847 3867 2022 5655 453 9906 8061 11694 6492 +12848 886 2170 3961 4711 6925 8209 10000 10750 +12849 55 54 5921 3504 151 150 11960 9543 +12850 4568 2415 3545 496 10607 8454 9584 6535 +12851 1406 1647 4443 2344 7445 7686 10482 8383 +12852 5239 2166 3538 246 11278 8205 9577 6285 +12853 296 2954 2046 5888 6335 8993 8085 11927 +12854 3806 1033 3494 2100 9845 7072 9533 8139 +12855 2800 517 3871 3345 8839 6556 9910 9384 +12856 2699 5390 4781 990 8738 11429 10820 7029 +12857 3824 1269 6161 2055 9863 7308 12200 8094 +12858 1628 2543 601 4447 7667 8582 6640 10486 +12859 2322 4572 877 6062 8361 10611 6916 12101 +12860 5606 273 3020 2232 11645 6312 9059 8271 +12861 1733 4216 1148 4921 7772 10255 7187 10960 +12862 2307 1206 2363 4835 8346 7245 8402 10874 +12863 4683 786 4217 2095 10722 6825 10256 8134 +12864 22 21 2348 5656 118 117 8387 11695 +12865 1882 5356 2205 6087 7921 11395 8244 12126 +12866 2734 238 3062 3459 8773 6277 9101 9498 +12867 6022 2354 5813 2355 12061 8393 11852 8394 +12868 5406 980 3329 2283 11445 7019 9368 8322 +12869 4158 1826 5531 367 10197 7865 11570 6406 +12870 2667 3133 2368 525 8706 9172 8407 6564 +12871 5855 2178 5414 1497 11894 8217 11453 7536 +12872 4568 496 3635 2082 10607 6535 9674 8121 +12873 1985 2582 5803 6060 8024 8621 11842 12099 +12874 1693 3880 705 3621 7732 9919 6744 9660 +12875 4713 3860 913 2197 10752 9899 6952 8236 +12876 2961 2449 3069 3249 9000 8488 9108 9288 +12877 5090 874 2712 2382 11129 6913 8751 8421 +12878 1198 2755 1067 2981 7237 8794 7106 9020 +12879 5002 2079 3831 25 11041 8118 9870 121 +12880 307 4092 2080 5400 6346 10131 8119 11439 +12881 4628 2078 6109 279 10667 8117 12148 6318 +12882 4635 2083 3949 1094 10674 8122 9988 7133 +12883 5707 1862 5065 3867 11746 7901 11104 9906 +12884 661 4477 1878 3546 6700 10516 7917 9585 +12885 3736 5399 2902 1583 9775 11438 8941 7622 +12886 5941 765 4988 2088 11980 6804 11027 8127 +12887 4320 6088 4113 2361 10359 12127 10152 8400 +12888 4940 5350 2732 2370 10979 11389 8771 8409 +12889 4980 2082 5532 988 11019 8121 11571 7027 +12890 939 4654 2167 5107 6978 10693 8206 11146 +12891 1357 2823 428 2340 7396 8862 6467 8379 +12892 4729 3726 709 2569 10768 9765 6748 8608 +12893 495 5253 2322 6146 6534 11292 8361 12185 +12894 2731 2653 2440 501 8770 8692 8479 6540 +12895 5639 4476 1878 884 11678 10515 7917 6923 +12896 1670 4855 2658 5387 7709 10894 8697 11426 +12897 475 3442 1198 2981 6514 9481 7237 9020 +12898 6087 2205 2645 510 12126 8244 8684 6549 +12899 2113 4038 459 5250 8152 10077 6498 11289 +12900 3556 455 4112 2310 9595 6494 10151 8349 +12901 3473 1089 3826 1753 9512 7128 9865 7792 +12902 4823 733 5161 2116 10862 6772 11200 8155 +12903 796 5178 2147 3471 6835 11217 8186 9510 +12904 330 2757 1220 3038 6369 8796 7259 9077 +12905 5543 4679 6134 2196 11582 10718 12173 8235 +12906 4684 966 3457 2222 10723 7005 9496 8261 +12907 1029 3125 2111 5006 7068 9164 8150 11045 +12908 5011 2878 954 3649 11050 8917 6993 9688 +12909 661 4809 1614 2396 6700 10848 7653 8435 +12910 3776 2136 2823 767 9815 8175 8862 6806 +12911 4384 1765 3989 1136 10423 7804 10028 7175 +12912 1311 4151 1447 3793 7350 10190 7486 9832 +12913 4425 2144 3663 1019 10464 8183 9702 7058 +12914 734 4977 1977 5297 6773 11016 8016 11336 +12915 4776 5085 2541 281 10815 11124 8580 6320 +12916 995 3493 5374 2788 7034 9532 11413 8827 +12917 2462 6221 2279 1000 8501 12260 8318 7039 +12918 2491 2875 2884 1278 8530 8914 8923 7317 +12919 5128 383 4952 2175 11167 6422 10991 8214 +12920 1440 4003 250 3913 7479 10042 6289 9952 +12921 1559 4666 1464 2501 7598 10705 7503 8540 +12922 5828 2095 5176 1702 11867 8134 11215 7741 +12923 5517 2465 4778 1598 11556 8504 10817 7637 +12924 4576 364 2335 3853 10615 6403 8374 9892 +12925 2315 940 2648 3891 8354 6979 8687 9930 +12926 6046 2312 879 5123 12085 8351 6918 11162 +12927 1688 3940 666 4007 7727 9979 6705 10046 +12928 1054 2712 282 2945 7093 8751 6321 8984 +12929 4867 2141 4579 373 10906 8180 10618 6412 +12930 5972 2099 4394 1272 12011 8138 10433 7311 +12931 5277 1384 3280 2800 11316 7423 9319 8839 +12932 3952 1340 2961 2707 9991 7379 9000 8746 +12933 5154 2421 4577 407 11193 8460 10616 6446 +12934 290 3489 1595 4857 6329 9528 7634 10896 +12935 1983 3818 410 5162 8022 9857 6449 11201 +12936 3677 1047 2990 2201 9716 7086 9029 8240 +12937 619 4075 1487 3901 6658 10114 7526 9940 +12938 2753 528 3132 3729 8792 6567 9171 9768 +12939 2727 2569 709 1512 8766 8608 6748 7551 +12940 2032 4870 286 4466 8071 10909 6325 10505 +12941 1722 3321 757 2828 7761 9360 6796 8867 +12942 533 3496 1011 2403 6572 9535 7050 8442 +12943 5396 2151 4182 1394 11435 8190 10221 7433 +12944 1980 5503 275 5337 8019 11542 6314 11376 +12945 3995 2111 3125 276 10034 8150 9164 6315 +12946 3499 519 2869 5354 9538 6558 8908 11393 +12947 2192 5902 924 3984 8231 11941 6963 10023 +12948 5411 2212 3320 752 11450 8251 9359 6791 +12949 6232 2382 2712 1054 12271 8421 8751 7093 +12950 3029 2764 5479 332 9068 8803 11518 6371 +12951 2764 3029 2332 1200 8803 9068 8371 7239 +12952 5830 357 2892 2072 11869 6396 8931 8111 +12953 1430 3617 1122 2933 7469 9656 7161 8972 +12954 5843 729 2063 3581 11882 6768 8102 9620 +12955 6098 4828 933 2710 12137 10867 6972 8749 +12956 2847 481 4844 2848 8886 6520 10883 8887 +12957 2772 1221 3017 3333 8811 7260 9056 9372 +12958 5565 4212 1478 2717 11604 10251 7517 8756 +12959 3945 546 3006 2203 9984 6585 9045 8242 +12960 2832 3637 3190 530 8871 9676 9229 6569 +12961 4661 2115 6083 714 10700 8154 12122 6753 +12962 5003 2207 3966 1409 11042 8246 10005 7448 +12963 3843 2691 3838 1724 9882 8730 9877 7763 +12964 3432 1069 4320 2361 9471 7108 10359 8400 +12965 5207 5587 3457 966 11246 11626 9496 7005 +12966 1122 2914 501 2440 7161 8953 6540 8479 +12967 1306 5121 1933 4312 7345 11160 7972 10351 +12968 4537 976 6103 2145 10576 7015 12142 8184 +12969 4070 6003 4641 463 10109 12042 10680 6502 +12970 4255 283 3722 2398 10294 6322 9761 8437 +12971 2615 5888 2046 998 8654 11927 8085 7037 +12972 2714 1023 2495 2591 8753 7062 8534 8630 +12973 217 4507 1315 2441 6256 10546 7354 8480 +12974 4644 2175 4952 1718 10683 8214 10991 7757 +12975 814 4904 2235 4514 6853 10943 8274 10553 +12976 631 4766 1606 2968 6670 10805 7645 9007 +12977 5457 2369 4905 807 11496 8408 10944 6846 +12978 4357 2580 3486 1042 10396 8619 9525 7081 +12979 627 4160 1572 4775 6666 10199 7611 10814 +12980 2221 5762 727 2671 8260 11801 6766 8710 +12981 2069 3933 1132 4642 8108 9972 7171 10681 +12982 4754 1480 4428 2128 10793 7519 10467 8167 +12983 4218 625 3105 2108 10257 6664 9144 8147 +12984 5727 2470 5609 1906 11766 8509 11648 7945 +12985 1758 4758 332 5479 7797 10797 6371 11518 +12986 4142 2112 2854 370 10181 8151 8893 6409 +12987 4515 1102 3652 2122 10554 7141 9691 8161 +12988 235 3737 1354 3441 6274 9776 7393 9480 +12989 3930 2814 3879 498 9969 8853 9918 6537 +12990 5824 2573 3514 426 11863 8612 9553 6465 +12991 3823 2203 3006 1192 9862 8242 9045 7231 +12992 5256 2141 4867 1474 11295 8180 10906 7513 +12993 6034 2400 4176 1891 12073 8439 10215 7930 +12994 2478 210 1696 4785 8517 6249 7735 10824 +12995 2495 1023 2241 5620 8534 7062 8280 11659 +12996 306 2444 1009 2938 6345 8483 7048 8977 +12997 4841 3246 2833 1455 10880 9285 8872 7494 +12998 314 3282 1257 3474 6353 9321 7296 9513 +12999 3732 572 3578 2509 9771 6611 9617 8548 +13000 4982 2115 4661 1389 11021 8154 10700 7428 +13001 218 2135 702 2534 6257 8174 6741 8573 +13002 1899 2612 206 4154 7938 8651 6245 10193 +13003 4121 1530 2464 3798 10160 7569 8503 9837 +13004 2482 5507 1141 3351 8521 11546 7180 9390 +13005 2169 5225 221 3284 8208 11264 6260 9323 +13006 3694 1052 3388 2226 9733 7091 9427 8265 +13007 4515 2122 3161 300 10554 8161 9200 6339 +13008 3354 3019 1955 534 9393 9058 7994 6573 +13009 354 3145 1662 4505 6393 9184 7701 10544 +13010 5242 800 2194 2711 11281 6839 8233 8750 +13011 2563 1486 1874 4398 8602 7525 7913 10437 +13012 1559 2472 880 4891 7598 8511 6919 10930 +13013 1269 2751 852 2684 7308 8790 6891 8723 +13014 2166 6123 2626 892 8205 12162 8665 6931 +13015 2731 2744 2615 1057 8770 8783 8654 7096 +13016 1915 4838 572 3732 7954 10877 6611 9771 +13017 4048 2134 2690 319 10087 8173 8729 6358 +13018 5982 2970 2947 509 12021 9009 8986 6548 +13019 4061 2094 5881 204 10100 8133 11920 6243 +13020 2839 3799 2874 3190 8878 9838 8913 9229 +13021 4739 366 5184 2208 10778 6405 11223 8247 +13022 1414 5364 3170 4554 7453 11403 9209 10593 +13023 475 2981 1067 3116 6514 9020 7106 9155 +13024 6009 884 1878 4477 12048 6923 7917 10516 +13025 1991 5238 516 5207 8030 11277 6555 11246 +13026 733 2979 2334 5045 6772 9018 8373 11084 +13027 1046 2791 208 2238 7085 8830 6247 8277 +13028 4965 2749 2425 219 11004 8788 8464 6258 +13029 4215 3428 2770 1266 10254 9467 8809 7305 +13030 1214 3415 581 2635 7253 9454 6620 8674 +13031 2135 4467 357 5164 8174 10506 6396 11203 +13032 557 5575 1783 3861 6596 11614 7822 9900 +13033 4263 2210 4385 1436 10302 8249 10424 7475 +13034 5746 664 3065 2394 11785 6703 9104 8433 +13035 5687 2670 478 5987 11726 8709 6517 12026 +13036 5577 2396 1614 4335 11616 8435 7653 10374 +13037 1151 3792 2522 5825 7190 9831 8561 11864 +13038 1164 3533 1534 3585 7203 9572 7573 9624 +13039 1858 4220 1269 3824 7897 10259 7308 9863 +13040 5239 1531 3756 2166 11278 7570 9795 8205 +13041 1897 5123 879 5293 7936 11162 6918 11332 +13042 248 4351 1888 4464 6287 10390 7927 10503 +13043 290 4947 1644 3489 6329 10986 7683 9528 +13044 2911 3398 3298 1291 8950 9437 9337 7330 +13045 3527 1334 2122 4686 9566 7373 8161 10725 +13046 2409 1948 6035 4623 8448 7987 12074 10662 +13047 5228 1304 4268 2144 11267 7343 10307 8183 +13048 843 2767 1669 4579 6882 8806 7708 10618 +13049 5720 1677 2461 1798 11759 7716 8500 7837 +13050 4338 2138 2518 740 10377 8177 8557 6779 +13051 815 5167 1769 2923 6854 11206 7808 8962 +13052 1241 2739 545 3259 7280 8778 6584 9298 +13053 2011 4127 5260 5948 8050 10166 11299 11987 +13054 473 3312 1437 4089 6512 9351 7476 10128 +13055 5793 5684 2221 903 11832 11723 8260 6942 +13056 2757 3488 3369 1220 8796 9527 9408 7259 +13057 3134 472 1406 1721 9173 6511 7445 7760 +13058 3994 765 3365 2360 10033 6804 9404 8399 +13059 6149 5587 5207 516 12188 11626 11246 6555 +13060 1043 3351 1141 2673 7082 9390 7180 8712 +13061 4446 284 3560 2448 10485 6323 9599 8487 +13062 1770 3724 722 5159 7809 9763 6761 11198 +13063 3390 1071 2826 2944 9429 7110 8865 8983 +13064 1184 3299 1092 2720 7223 9338 7131 8759 +13065 5786 1002 3060 2597 11825 7041 9099 8636 +13066 1297 3887 1507 4136 7336 9926 7546 10175 +13067 254 4478 1638 4086 6293 10517 7677 10125 +13068 2220 2672 1022 5962 8259 8711 7061 12001 +13069 757 5025 1714 2828 6796 11064 7753 8867 +13070 2849 3156 3313 1152 8888 9195 9352 7191 +13071 2755 2744 2731 1067 8794 8783 8770 7106 +13072 2744 2755 3449 296 8783 8794 9488 6335 +13073 252 3111 2145 6103 6291 9150 8184 12142 +13074 1453 4279 5761 3800 7492 10318 11800 9839 +13075 2659 4566 2533 350 8698 10605 8572 6389 +13076 3679 1061 3338 2276 9718 7100 9377 8315 +13077 2917 307 2677 4200 8956 6346 8716 10239 +13078 5613 4426 1061 2883 11652 10465 7100 8922 +13079 491 2810 1086 2759 6530 8849 7125 8798 +13080 5172 1838 5876 204 11211 7877 11915 6243 +13081 3532 2418 4843 488 9571 8457 10882 6527 +13082 4579 2141 4218 843 10618 8180 10257 6882 +13083 3928 1745 4055 1088 9967 7784 10094 7127 +13084 5018 673 4362 2243 11057 6712 10401 8282 +13085 3751 575 2434 2558 9790 6614 8473 8597 +13086 2900 2565 2761 1072 8939 8604 8800 7111 +13087 2601 2858 5831 1009 8640 8897 11870 7048 +13088 2246 4417 489 4415 8285 10456 6528 10454 +13089 2316 1937 4406 444 8355 7976 10445 6483 +13090 1051 2690 2004 6014 7090 8729 8043 12053 +13091 5076 2188 3656 1130 11115 8227 9695 7169 +13092 1852 4200 1109 4814 7891 10239 7148 10853 +13093 1755 4380 2637 5735 7794 10419 8676 11774 +13094 4807 1057 2615 998 10846 7096 8654 7037 +13095 686 4429 6148 2227 6725 10468 12187 8266 +13096 4190 1133 2934 2148 10229 7172 8973 8187 +13097 2305 6137 1371 4555 8344 12176 7410 10594 +13098 2334 998 2046 4955 8373 7037 8085 10994 +13099 1010 2748 501 2914 7049 8787 6540 8953 +13100 2440 2630 2506 3072 8479 8669 8545 9111 +13101 4635 1094 3759 2160 10674 7133 9798 8199 +13102 4950 871 4969 2585 10989 6910 11008 8624 +13103 3147 637 4912 2353 9186 6676 10951 8392 +13104 5056 910 2091 2610 11095 6949 8130 8649 +13105 3207 591 4077 4556 9246 6630 10116 10595 +13106 5069 244 2422 1104 11108 6283 8461 7143 +13107 5616 1539 393 1954 11655 7578 6432 7993 +13108 3661 4973 2084 1101 9700 11012 8123 7140 +13109 4278 2448 3560 1420 10317 8487 9599 7459 +13110 3297 3512 2635 581 9336 9551 8674 6620 +13111 1099 3116 1067 2748 7138 9155 7106 8787 +13112 5097 3735 1454 4531 11136 9774 7493 10570 +13113 1802 3289 1474 4569 7841 9328 7513 10608 +13114 6094 5107 2167 851 12133 11146 8206 6890 +13115 4049 1305 3114 840 10088 7344 9153 6879 +13116 2379 5039 2176 1624 8418 11078 8215 7663 +13117 4539 2856 89 88 10578 8895 185 184 +13118 5993 2195 6106 476 12032 8234 12145 6515 +13119 3216 2825 3474 1257 9255 8864 9513 7296 +13120 1597 3522 1115 4209 7636 9561 7154 10248 +13121 1350 3584 1066 3023 7389 9623 7105 9062 +13122 3906 326 3656 2188 9945 6365 9695 8227 +13123 4918 371 2602 1974 10957 6410 8641 8013 +13124 5099 361 3080 2156 11138 6400 9119 8195 +13125 338 4964 1401 3126 6377 11003 7440 9165 +13126 2004 4827 753 3684 8043 10866 6792 9723 +13127 4747 2377 5967 2014 10786 8416 12006 8053 +13128 4644 2466 900 2175 10683 8505 6939 8214 +13129 5180 3150 5273 883 11219 9189 11312 6922 +13130 4965 2183 3003 1003 11004 8222 9042 7042 +13131 1437 3312 1263 3155 7476 9351 7302 9194 +13132 947 5850 2267 3188 6986 11889 8306 9227 +13133 491 2824 1081 2810 6530 8863 7120 8849 +13134 5342 2182 3520 972 11381 8221 9559 7011 +13135 4055 2331 3138 1088 10094 8370 9177 7127 +13136 4551 1423 3682 2292 10590 7462 9721 8331 +13137 3566 224 4182 2151 9605 6263 10221 8190 +13138 2274 5897 1565 3937 8313 11936 7604 9976 +13139 5066 2643 2733 925 11105 8682 8772 6964 +13140 3504 5921 2236 856 9543 11960 8275 6895 +13141 3068 4489 4109 1388 9107 10528 10148 7427 +13142 5533 2477 4009 1503 11572 8516 10048 7542 +13143 995 2788 5267 4272 7034 8827 11306 10311 +13144 5211 2470 5727 413 11250 8509 11766 6452 +13145 5661 1760 4125 2299 11700 7799 10164 8338 +13146 5956 2528 3731 1392 11995 8567 9770 7431 +13147 1558 2948 382 2980 7597 8987 6421 9019 +13148 2536 1477 5694 236 8575 7516 11733 6275 +13149 1797 1201 2032 4466 7836 7240 8071 10505 +13150 5924 2349 5969 795 11963 8388 12008 6834 +13151 4106 513 2598 4812 10145 6552 8637 10851 +13152 238 2734 1268 3438 6277 8773 7307 9477 +13153 568 3124 1204 3498 6607 9163 7243 9537 +13154 4635 2160 3510 762 10674 8199 9549 6801 +13155 1788 4871 2932 6051 7827 10910 8971 12090 +13156 3640 2350 4658 815 9679 8389 10697 6854 +13157 625 3289 1697 4565 6664 9328 7736 10604 +13158 5040 4774 2420 454 11079 10813 8459 6493 +13159 1006 5399 2051 3479 7045 11438 8090 9518 +13160 985 4962 5973 3395 7024 11001 12012 9434 +13161 4761 1143 2608 2388 10800 7182 8647 8427 +13162 2236 6089 424 2929 8275 12128 6463 8968 +13163 1018 517 2800 3280 7057 6556 8839 9319 +13164 1287 3874 1695 4157 7326 9913 7734 10196 +13165 3418 5534 1473 2345 9457 11573 7512 8384 +13166 1466 4329 1661 4736 7505 10368 7700 10775 +13167 5109 1275 3640 5302 11148 7314 9679 11341 +13168 568 2704 1216 3407 6607 8743 7255 9446 +13169 6118 637 3147 1950 12157 6676 9186 7989 +13170 609 4374 1573 2718 6648 10413 7612 8757 +13171 3939 506 3332 2196 9978 6545 9371 8235 +13172 5744 4787 1506 2285 11783 10826 7545 8324 +13173 5413 1408 4863 2524 11452 7447 10902 8563 +13174 4528 2157 5057 804 10567 8196 11096 6843 +13175 335 3561 5602 5240 6374 9600 11641 11279 +13176 1878 4476 227 4630 7917 10515 6266 10669 +13177 5711 477 2337 2950 11750 6516 8376 8989 +13178 5711 2189 2781 2782 11750 8228 8820 8821 +13179 3621 3318 2049 1000 9660 9357 8088 7039 +13180 3212 1467 4001 4483 9251 7506 10040 10522 +13181 2308 3544 2412 960 8347 9583 8451 6999 +13182 4987 3063 2155 397 11026 9102 8194 6436 +13183 3455 456 3556 2310 9494 6495 9595 8349 +13184 4249 2179 2838 1105 10288 8218 8877 7144 +13185 4148 2258 3817 829 10187 8297 9856 6868 +13186 4179 1677 6052 3980 10218 7716 12091 10019 +13187 5024 2201 2990 1616 11063 8240 9029 7655 +13188 820 4341 2120 5424 6859 10380 8159 11463 +13189 6005 3094 1761 2616 12044 9133 7800 8655 +13190 3142 2749 2620 2503 9181 8788 8659 8542 +13191 1094 2429 43 3759 7133 8468 139 9798 +13192 1086 2810 1081 2811 7125 8849 7120 8850 +13193 5717 2670 2796 827 11756 8709 8835 6866 +13194 749 4715 1108 3476 6788 10754 7147 9515 +13195 33 32 2362 5573 129 128 8401 11612 +13196 369 3586 1462 3211 6408 9625 7501 9250 +13197 1737 4824 2457 964 7776 10863 8496 7003 +13198 582 3031 1197 3669 6621 9070 7236 9708 +13199 4927 2405 4104 634 10966 8444 10143 6673 +13200 4451 1126 3431 1728 10490 7165 9470 7767 +13201 587 2705 1271 2807 6626 8744 7310 8846 +13202 4071 1381 2769 2183 10110 7420 8808 8222 +13203 1946 5589 445 4819 7985 11628 6484 10858 +13204 2232 5622 1762 4377 8271 11661 7801 10416 +13205 3753 2262 87 86 9792 8301 183 182 +13206 3859 5326 4598 1139 9898 11365 10637 7178 +13207 3022 5938 1378 2185 9061 11977 7417 8224 +13208 1853 4223 1365 3890 7892 10262 7404 9929 +13209 2276 956 2532 3693 8315 6995 8571 9732 +13210 5453 274 3127 2272 11492 6313 9166 8311 +13211 4763 609 2718 2689 10802 6648 8757 8728 +13212 4150 1875 4859 732 10189 7914 10898 6771 +13213 1850 3988 2376 5664 7889 10027 8415 11703 +13214 530 3096 1188 2832 6569 9135 7227 8871 +13215 1704 4596 2821 5838 7743 10635 8860 11877 +13216 1917 4361 542 5163 7956 10400 6581 11202 +13217 2918 3597 3274 1302 8957 9636 9313 7341 +13218 5852 3037 1007 4873 11891 9076 7046 10912 +13219 5775 2778 1304 3471 11814 8817 7343 9510 +13220 4648 780 3154 2508 10687 6819 9193 8547 +13221 3677 2284 5246 1047 9716 8323 11285 7086 +13222 2496 6113 2342 1259 8535 12152 8381 7298 +13223 3167 1082 2827 3515 9206 7121 8866 9554 +13224 5258 1899 4431 746 11297 7938 10470 6785 +13225 1554 3111 252 2716 7593 9150 6291 8755 +13226 5633 2302 6126 423 11672 8341 12165 6462 +13227 5952 808 2794 2364 11991 6847 8833 8403 +13228 528 2753 1214 3330 6567 8792 7253 9369 +13229 5446 2313 3715 941 11485 8352 9754 6980 +13230 983 4033 1653 3508 7022 10072 7692 9547 +13231 3977 2206 3389 1052 10016 8245 9428 7091 +13232 6116 2071 5255 2454 12155 8110 11294 8493 +13233 2775 964 2272 3127 8814 7003 8311 9166 +13234 2292 3682 2613 1303 8331 9721 8652 7342 +13235 3786 2119 5504 289 9825 8158 11543 6328 +13236 1173 4052 214 2309 7212 10091 6253 8348 +13237 2574 2634 4724 389 8613 8673 10763 6428 +13238 3697 953 4173 2298 9736 6992 10212 8337 +13239 3142 2538 2425 2749 9181 8577 8464 8788 +13240 1832 3953 842 5105 7871 9992 6881 11144 +13241 5791 1896 4772 2333 11830 7935 10811 8372 +13242 1128 3064 544 2737 7167 9103 6583 8776 +13243 1664 3219 657 4222 7703 9258 6696 10261 +13244 5358 424 2902 2264 11397 6463 8941 8303 +13245 4918 1974 855 2441 10957 8013 6894 8480 +13246 4031 477 6016 2202 10070 6516 12055 8241 +13247 5061 1164 5754 2213 11100 7203 11793 8252 +13248 4592 985 2169 2951 10631 7024 8208 8990 +13249 4684 2433 3343 966 10723 8472 9382 7005 +13250 2901 1198 3442 2737 8940 7237 9481 8776 +13251 5106 3826 1089 1716 11145 9865 7128 7755 +13252 6167 2218 4929 699 12206 8257 10968 6738 +13253 5695 914 2578 2123 11734 6953 8617 8162 +13254 2941 2653 2731 1057 8980 8692 8770 7096 +13255 1893 4037 208 2791 7932 10076 6247 8830 +13256 2107 2967 1723 5296 8146 9006 7762 11335 +13257 4180 864 3906 2188 10219 6903 9945 8227 +13258 4087 1345 2647 2648 10126 7384 8686 8687 +13259 5454 287 1722 2381 11493 6326 7761 8420 +13260 3252 4081 3757 1463 9291 10120 9796 7502 +13261 5147 1910 2751 612 11186 7949 8790 6651 +13262 5765 2613 3682 414 11804 8652 9721 6453 +13263 4448 2562 365 4449 10487 8601 6404 10488 +13264 6042 2904 525 2368 12081 8943 6564 8407 +13265 3088 2526 5312 982 9127 8565 11351 7021 +13266 3675 3926 2904 1002 9714 9965 8943 7041 +13267 6001 741 2779 2162 12040 6780 8818 8201 +13268 2958 6203 5345 1050 8997 12242 11384 7089 +13269 927 5427 219 2425 6966 11466 6258 8464 +13270 3796 1317 3297 2709 9835 7356 9336 8748 +13271 5309 1934 5779 3681 11348 7973 11818 9720 +13272 5310 201 4649 2037 11349 6240 10688 8076 +13273 3497 1150 6042 2368 9536 7189 12081 8407 +13274 3294 2487 5570 437 9333 8526 11609 6476 +13275 2545 1017 1962 4139 8584 7056 8001 10178 +13276 1410 4690 2646 4180 7449 10729 8685 10219 +13277 5130 2226 3388 548 11169 8265 9427 6587 +13278 5131 754 3694 2226 11170 6793 9733 8265 +13279 1038 2970 5982 2910 7077 9009 12021 8949 +13280 4481 279 6109 2492 10520 6318 12148 8531 +13281 1635 5896 361 4116 7674 11935 6400 10155 +13282 1452 3466 548 3388 7491 9505 6587 9427 +13283 4762 2286 3865 1267 10801 8325 9904 7306 +13284 5910 2243 4362 1620 11949 8282 10401 7659 +13285 2531 6089 5922 1033 8570 12128 11961 7072 +13286 1925 5193 1337 2599 7964 11232 7376 8638 +13287 5009 909 3945 2203 11048 6948 9984 8242 +13288 558 3300 1341 3149 6597 9339 7380 9188 +13289 5314 451 3677 2201 11353 6490 9716 8240 +13290 5449 2783 92 91 11488 8822 188 187 +13291 3474 1092 2875 2491 9513 7131 8914 8530 +13292 1742 4164 1219 3739 7781 10203 7258 9778 +13293 4340 1502 2715 2976 10379 7541 8754 9015 +13294 4449 365 5608 2288 10488 6404 11647 8327 +13295 3787 873 4480 2289 9826 6912 10519 8328 +13296 334 3576 1395 3925 6373 9615 7434 9964 +13297 3929 3612 2517 982 9968 9651 8556 7021 +13298 4064 670 3457 5587 10103 6709 9496 11626 +13299 2799 1299 3313 3485 8838 7338 9352 9524 +13300 2546 534 1955 6010 8585 6573 7994 12049 +13301 544 3064 1277 3036 6583 9103 7316 9075 +13302 2194 800 2153 1146 8233 6839 8192 7185 +13303 4807 998 2334 2979 10846 7037 8373 9018 +13304 987 3296 739 4472 7026 9335 6778 10511 +13305 3278 1064 2079 5002 9317 7103 8118 11041 +13306 5313 1017 6170 2502 11352 7056 12209 8541 +13307 1571 4126 261 3573 7610 10165 6300 9612 +13308 2519 3340 2452 890 8558 9379 8491 6929 +13309 1978 6168 776 2497 8017 12207 6815 8536 +13310 3632 806 5675 2407 9671 6845 11714 8446 +13311 1186 3239 551 2799 7225 9278 6590 8838 +13312 321 3406 1312 2913 6360 9445 7351 8952 +13313 937 5391 5997 2957 6976 11430 12036 8996 +13314 3213 269 4263 2137 9252 6308 10302 8176 +13315 2849 530 3190 2874 8888 6569 9229 8913 +13316 4601 919 2424 2762 10640 6958 8463 8801 +13317 3037 2605 3053 1007 9076 8644 9092 7046 +13318 5003 1166 3841 2207 11042 7205 9880 8246 +13319 2759 3379 2855 491 8798 9418 8894 6530 +13320 2409 535 1988 4028 8448 6574 8027 10067 +13321 1886 4819 445 5431 7925 10858 6484 11470 +13322 5673 2476 2133 846 11712 8515 8172 6885 +13323 3142 504 5782 2538 9181 6543 11821 8577 +13324 2922 2556 2557 512 8961 8595 8596 6551 +13325 4514 1853 4577 1333 10553 7892 10616 7372 +13326 2876 1106 2849 2874 8915 7145 8888 8913 +13327 4728 878 3421 2195 10767 6917 9460 8234 +13328 2678 2787 2152 704 8717 8826 8191 6743 +13329 4205 1279 5467 1892 10244 7318 11506 7931 +13330 519 3499 1023 2426 6558 9538 7062 8465 +13331 4272 2550 3709 995 10311 8589 9748 7034 +13332 3908 502 2768 3023 9947 6541 8807 9062 +13333 2986 6014 5334 507 9025 12053 11373 6546 +13334 1945 4947 290 3748 7984 10986 6329 9787 +13335 6046 2402 5233 510 12085 8441 11272 6549 +13336 2745 1168 1744 5218 8784 7207 7783 11257 +13337 4143 2211 1036 2090 10182 8250 7075 8129 +13338 5543 2196 3332 1189 11582 8235 9371 7228 +13339 1386 3371 1385 2844 7425 9410 7424 8883 +13340 1350 2866 312 3584 7389 8905 6351 9623 +13341 4611 1436 2447 3207 10650 7475 8486 9246 +13342 3566 2305 4555 224 9605 8344 10594 6263 +13343 6083 2115 5514 3231 12122 8154 11553 9270 +13344 5753 2507 5902 1031 11792 8546 11941 7070 +13345 2995 1364 3359 3813 9034 7403 9398 9852 +13346 3882 4831 5478 1992 9921 10870 11517 8031 +13347 3873 3055 293 4632 9912 9094 6332 10671 +13348 1894 5095 377 3022 7933 11134 6416 9061 +13349 5048 2230 4157 434 11087 8269 10196 6473 +13350 2811 1081 3774 3093 8850 7120 9813 9132 +13351 5556 2309 4345 904 11595 8348 10384 6943 +13352 6143 2194 1146 3912 12182 8233 7185 9951 +13353 6216 2178 858 2593 12255 8217 6897 8632 +13354 620 4419 1952 4134 6659 10458 7991 10173 +13355 4834 253 3389 2206 10873 6292 9428 8245 +13356 4078 605 2280 4689 10117 6644 8319 10728 +13357 3746 2320 2479 857 9785 8359 8518 6896 +13358 3980 6052 940 2315 10019 12091 6979 8354 +13359 2743 4919 1555 1079 8782 10958 7594 7118 +13360 3972 215 5491 2282 10011 6254 11530 8321 +13361 5035 2230 5048 1520 11074 8269 11087 7559 +13362 462 3301 1595 4560 6501 9340 7634 10599 +13363 647 3535 1362 4381 6686 9574 7401 10420 +13364 3579 458 2867 2385 9618 6497 8906 8424 +13365 409 3764 5638 5456 6448 9803 11677 11495 +13366 1119 3131 1288 3042 7158 9170 7327 9081 +13367 862 5284 1967 2556 6901 11323 8006 8595 +13368 4644 680 3611 2466 10683 6719 9650 8505 +13369 5736 4327 3447 776 11775 10366 9486 6815 +13370 3013 1313 3416 3717 9052 7352 9455 9756 +13371 2907 2962 2597 1138 8946 9001 8636 7177 +13372 860 5448 1898 2815 6899 11487 7937 8854 +13373 5061 2213 2867 458 11100 8252 8906 6497 +13374 5946 1947 5969 2349 11985 7986 12008 8388 +13375 1071 3620 1243 3399 7110 9659 7282 9438 +13376 2645 967 2546 6010 8684 7006 8585 12049 +13377 6179 2224 3952 1418 12218 8263 9991 7457 +13378 589 3686 1364 2995 6628 9725 7403 9034 +13379 1255 3317 480 3316 7294 9356 6519 9355 +13380 5093 758 2797 2204 11132 6797 8836 8243 +13381 3018 2881 3132 1144 9057 8920 9171 7183 +13382 6057 2133 1451 4636 12096 8172 7490 10675 +13383 879 2312 1032 2795 6918 8351 7071 8834 +13384 2038 4168 639 3303 8077 10207 6678 9342 +13385 4691 2047 283 3828 10730 8086 6322 9867 +13386 2855 3041 2824 491 8894 9080 8863 6530 +13387 4938 2493 3209 461 10977 8532 9248 6500 +13388 3648 616 5071 5588 9687 6655 11110 11627 +13389 1151 4367 1514 3792 7190 10406 7553 9831 +13390 966 3343 1991 5207 7005 9382 8030 11246 +13391 723 4019 1546 5199 6762 10058 7585 11238 +13392 2534 2535 4255 1359 8573 8574 10294 7398 +13393 2552 1160 3905 3685 8591 7199 9944 9724 +13394 5465 4566 2659 1650 11504 10605 8698 7689 +13395 1325 5027 667 4922 7364 11066 6706 10961 +13396 2305 872 2281 6137 8344 6911 8320 12176 +13397 2423 3550 2330 1363 8462 9589 8369 7402 +13398 5298 1245 3836 2389 11337 7284 9875 8428 +13399 1152 3096 530 2849 7191 9135 6569 8888 +13400 4669 724 4746 2341 10708 6763 10785 8380 +13401 2895 549 2410 3620 8934 6588 8449 9659 +13402 5584 2209 3705 1446 11623 8248 9744 7485 +13403 5108 1353 2803 2023 11147 7392 8842 8062 +13404 2038 4494 943 4168 8077 10533 6982 10207 +13405 5129 2225 4151 1311 11168 8264 10190 7350 +13406 5286 612 4220 1859 11325 6651 10259 7898 +13407 4887 1459 3447 4327 10926 7498 9486 10366 +13408 1426 3554 257 2870 7465 9593 6296 8909 +13409 2513 5111 2424 1651 8552 11150 8463 7690 +13410 3330 2572 3066 528 9369 8611 9105 6567 +13411 3518 49 48 2632 9557 145 144 8671 +13412 1802 3153 294 5118 7841 9192 6333 11157 +13413 5947 1206 2307 4902 11986 7245 8346 10941 +13414 1256 2686 747 3045 7295 8725 6786 9084 +13415 2914 2925 2565 1010 8953 8964 8604 7049 +13416 213 3134 1721 4805 6252 9173 7760 10844 +13417 1006 4042 783 2264 7045 10081 6822 8303 +13418 2703 1090 4473 5434 8742 7129 10512 11473 +13419 3466 3432 2361 548 9505 9471 8400 6587 +13420 5604 4527 1639 2977 11643 10566 7678 9016 +13421 371 2776 810 2602 6410 8815 6849 8641 +13422 464 3730 911 3692 6503 9769 6950 9731 +13423 1397 4838 1915 3982 7436 10877 7954 10021 +13424 3041 1072 2761 2824 9080 7111 8800 8863 +13425 4479 387 5529 1933 10518 6426 11568 7972 +13426 4143 2090 3928 1088 10182 8129 9967 7127 +13427 5781 3321 3971 851 11820 9360 10010 6890 +13428 4337 5053 791 2668 10376 11092 6830 8707 +13429 4333 2223 2928 483 10372 8262 8967 6522 +13430 2828 1714 3919 4336 8867 7753 9958 10375 +13431 2125 5563 752 3320 8164 11602 6791 9359 +13432 1965 3016 801 5356 8004 9055 6840 11395 +13433 528 3066 1144 3132 6567 9105 7183 9171 +13434 2758 3488 2757 1068 8797 9527 8796 7107 +13435 5626 3011 3706 2223 11665 9050 9745 8262 +13436 5551 3716 1648 4465 11590 9755 7687 10504 +13437 315 3180 1286 3184 6354 9219 7325 9223 +13438 5754 1411 2867 2213 11793 7450 8906 8252 +13439 5866 2380 3161 915 11905 8419 9200 6954 +13440 3154 780 5898 2130 9193 6819 11937 8169 +13441 1495 4061 1875 4456 7534 10100 7914 10495 +13442 5020 533 2403 3850 11059 6572 8442 9889 +13443 3050 2736 2900 301 9089 8775 8939 6340 +13444 316 3148 1221 3215 6355 9187 7260 9254 +13445 2103 3208 712 4757 8142 9247 6751 10796 +13446 598 3295 1324 3444 6637 9334 7363 9483 +13447 5698 3318 1961 263 11737 9357 8000 6302 +13448 5834 429 2239 2374 11873 6468 8278 8413 +13449 2396 4301 4477 661 8435 10340 10516 6700 +13450 3150 5180 4160 1836 9189 11219 10199 7875 +13451 6219 890 2452 2453 12258 6929 8491 8492 +13452 3460 792 4119 5298 9499 6831 10158 11337 +13453 5524 1451 2133 2476 11563 7490 8172 8515 +13454 6232 2503 2620 450 12271 8542 8659 6489 +13455 3285 2234 5253 495 9324 8273 11292 6534 +13456 2529 524 3706 3367 8568 6563 9745 9406 +13457 391 5713 1952 5220 6430 11752 7991 11259 +13458 5276 1439 4423 2219 11315 7478 10462 8258 +13459 2478 4785 700 5231 8517 10824 6739 11270 +13460 5141 1155 2623 2253 11180 7194 8662 8292 +13461 2754 1040 2098 4420 8793 7079 8137 10459 +13462 4926 4593 2898 277 10965 10632 8937 6316 +13463 4243 1404 4213 3650 10282 7443 10252 9689 +13464 2192 5604 1031 5902 8231 11643 7070 11941 +13465 4994 207 6158 2233 11033 6246 12197 8272 +13466 3334 1579 4633 847 9373 7618 10672 6886 +13467 598 3444 1390 3922 6637 9483 7429 9961 +13468 3848 3036 2808 1053 9887 9075 8847 7092 +13469 370 2854 1658 5212 6409 8893 7697 11251 +13470 1388 3548 1204 3068 7427 9587 7243 9107 +13471 4860 2231 2726 1462 10899 8270 8765 7501 +13472 965 5368 1805 3387 7004 11407 7844 9426 +13473 2806 3673 2758 1068 8845 9712 8797 7107 +13474 584 3506 1358 3003 6623 9545 7397 9042 +13475 1943 2857 876 5502 7982 8896 6915 11541 +13476 3853 2335 3052 926 9892 8374 9091 6965 +13477 1076 2954 296 3449 7115 8993 6335 9488 +13478 2147 2807 1271 5371 8186 8846 7310 11410 +13479 1199 3252 1463 4030 7238 9291 7502 10069 +13480 4154 206 5989 2787 10193 6245 12028 8826 +13481 3672 1243 3620 2410 9711 7282 9659 8449 +13482 945 2497 776 3447 6984 8536 6815 9486 +13483 1723 5409 2360 3365 7762 11448 8399 9404 +13484 3872 2294 1100 2005 9911 8333 7139 8044 +13485 588 3742 1335 3642 6627 9781 7374 9681 +13486 3018 2772 2998 2881 9057 8811 9037 8920 +13487 2949 3198 3102 1190 8988 9237 9141 7229 +13488 389 5317 2053 4221 6428 11356 8092 10260 +13489 5600 692 2888 2340 11639 6731 8927 8379 +13490 1145 3092 1192 3006 7184 9131 7231 9045 +13491 3380 3143 2101 1218 9419 9182 8140 7257 +13492 22 5656 1885 23 118 11695 7924 119 +13493 309 3060 1002 2822 6348 9099 7041 8861 +13494 6211 1435 3999 2231 12250 7474 10038 8270 +13495 5146 791 5905 2804 11185 6830 11944 8843 +13496 6085 4648 390 1881 12124 10687 6429 7920 +13497 2899 486 2332 4744 8938 6525 8371 10783 +13498 4823 3201 1205 1995 10862 9240 7244 8034 +13499 5578 2420 4774 1860 11617 8459 10813 7899 +13500 5645 2413 3965 920 11684 8452 10004 6959 +13501 500 4847 1805 3143 6539 10886 7844 9182 +13502 5383 1116 2708 2986 11422 7155 8747 9025 +13503 3727 4515 300 2469 9766 10554 6339 8508 +13504 5645 1058 2174 2413 11684 7097 8213 8452 +13505 432 4366 4658 2350 6471 10405 10697 8389 +13506 2420 5738 1957 454 8459 11777 7996 6493 +13507 5231 3555 826 2478 11270 9594 6865 8517 +13508 2521 288 6006 3542 8560 6327 12045 9581 +13509 2092 790 4620 4587 8131 6829 10659 10626 +13510 90 89 2856 3483 186 185 8895 9522 +13511 4016 2747 781 2319 10055 8786 6820 8358 +13512 3695 5644 4105 1124 9734 11683 10144 7163 +13513 5926 2535 2534 702 11965 8574 8573 6741 +13514 3443 1324 3295 2994 9482 7363 9334 9033 +13515 4208 1298 2277 5447 10247 7337 8316 11486 +13516 6113 2496 2740 524 12152 8535 8779 6563 +13517 4417 1925 2599 489 10456 7964 8638 6528 +13518 1931 5983 6209 3627 7970 12022 12248 9666 +13519 2930 2760 2759 1086 8969 8799 8798 7125 +13520 5235 2323 1100 2074 11274 8362 7139 8113 +13521 238 2944 1161 3062 6277 8983 7200 9101 +13522 4994 2233 4308 760 11033 8272 10347 6799 +13523 6221 2462 5672 442 12260 8501 11711 6481 +13524 3971 287 2684 2514 10010 6326 8723 8553 +13525 5000 423 6126 2260 11039 6462 12165 8299 +13526 5916 2407 5675 1820 11955 8446 11714 7859 +13527 4174 2452 3340 447 10213 8491 9379 6486 +13528 4018 1383 3421 2658 10057 7422 9460 8697 +13529 4018 2658 4855 258 10057 8697 10894 6297 +13530 3423 2662 3925 1395 9462 8701 9964 7434 +13531 6164 469 2813 2451 12203 6508 8852 8490 +13532 6184 1368 4078 2249 12223 7407 10117 8288 +13533 3215 1221 2772 3018 9254 7260 8811 9057 +13534 4617 1872 825 2501 10656 7911 6864 8540 +13535 2590 1387 6178 2589 8629 7426 12217 8628 +13536 5355 2299 4125 439 11394 8338 10164 6478 +13537 6094 851 3971 2514 12133 6890 10010 8553 +13538 4793 1639 5018 2243 10832 7678 11057 8282 +13539 2453 5345 2070 402 8492 11384 8109 6441 +13540 3919 380 4198 2359 9958 6419 10237 8398 +13541 2359 1267 4336 3919 8398 7306 10375 9958 +13542 4671 1980 5337 2660 10710 8019 11376 8699 +13543 6198 1399 3127 274 12237 7438 9166 6313 +13544 4012 6029 3186 1372 10051 12068 9225 7411 +13545 1052 3389 1452 3388 7091 9428 7491 9427 +13546 1955 4094 1032 6010 7994 10133 7071 12049 +13547 5492 6157 1103 3769 11531 12196 7142 9808 +13548 4867 2253 4569 1474 10906 8292 10608 7513 +13549 4482 2774 6115 2181 10521 8813 12154 8220 +13550 2528 677 4299 3731 8567 6716 10338 9770 +13551 3179 3860 4713 353 9218 9899 10752 6392 +13552 3582 2680 2983 1075 9621 8719 9022 7114 +13553 5354 1005 5250 2241 11393 7044 11289 8280 +13554 5252 360 3641 2327 11291 6399 9680 8366 +13555 1922 5782 504 5484 7961 11821 6543 11523 +13556 4954 2267 5850 1200 10993 8306 11889 7239 +13557 4201 2320 3746 457 10240 8359 9785 6496 +13558 5237 1337 3566 2151 11276 7376 9605 8190 +13559 5099 2190 4116 361 11138 8229 10155 6400 +13560 348 3979 2101 5368 6387 10018 8140 11407 +13561 1203 3448 1355 3352 7242 9487 7394 9391 +13562 5956 2831 2595 285 11995 8870 8634 6324 +13563 3536 278 3072 2506 9575 6317 9111 8545 +13564 581 3415 1342 3453 6620 9454 7381 9492 +13565 5863 2860 967 2406 11902 8899 7006 8445 +13566 3041 2855 3669 1197 9080 8894 9708 7236 +13567 5555 3034 1761 3491 11594 9073 7800 9530 +13568 1296 3267 1159 3091 7335 9306 7198 9130 +13569 3379 1087 2296 2935 9418 7126 8335 8974 +13570 1174 3288 1900 3668 7213 9327 7939 9707 +13571 5824 1343 4998 2573 11863 7382 11037 8612 +13572 3217 1312 3658 3775 9256 7351 9697 9814 +13573 1743 5807 3040 5210 7782 11846 9079 11249 +13574 1829 5226 874 3784 7868 11265 6913 9823 +13575 3659 1419 3909 2846 9698 7458 9948 8885 +13576 3842 2354 2168 5495 9881 8393 8207 11534 +13577 355 5348 2518 2977 6394 11387 8557 9016 +13578 5319 690 2946 2381 11358 6729 8985 8420 +13579 4685 2348 3912 1146 10724 8387 9951 7185 +13580 3085 3487 3244 1247 9124 9526 9283 7286 +13581 2026 3395 3166 5339 8065 9434 9205 11378 +13582 6040 1855 4193 2439 12079 7894 10232 8478 +13583 5978 3725 784 4502 12017 9764 6823 10541 +13584 3798 2464 3349 1282 9837 8503 9388 7321 +13585 3896 202 4050 2319 9935 6241 10089 8358 +13586 5882 2411 3982 1915 11921 8450 10021 7954 +13587 1119 5018 1639 4527 7158 11057 7678 10566 +13588 3096 2999 3507 1188 9135 9038 9546 7227 +13589 2163 6091 958 5924 8202 12130 6997 11963 +13590 5611 1439 3551 2256 11650 7478 9590 8295 +13591 5226 2300 2712 874 11265 8339 8751 6913 +13592 4673 1857 5672 2462 10712 7896 11711 8501 +13593 899 2752 1178 4090 6938 8791 7217 10129 +13594 6231 395 5749 2472 12270 6434 11788 8511 +13595 5863 2406 5612 297 11902 8445 11651 6336 +13596 3197 1197 3031 2953 9236 7236 9070 8992 +13597 1802 5118 1697 3289 7841 11157 7736 9328 +13598 2811 3093 4786 302 8850 9132 10825 6341 +13599 1291 3525 237 2911 7330 9564 6276 8950 +13600 294 3153 1114 2781 6333 9192 7153 8820 +13601 5919 1309 5497 2608 11958 7348 11536 8647 +13602 4182 1860 4774 1394 10221 7899 10813 7433 +13603 5751 655 2990 4879 11790 6694 9029 10918 +13604 5686 3575 1868 928 11725 9614 7907 6967 +13605 3034 266 2616 1761 9073 6305 8655 7800 +13606 4056 3177 208 1607 10095 9216 6247 7646 +13607 3346 2640 4803 1602 9385 8679 10842 7641 +13608 3038 1220 3151 3193 9077 7259 9190 9232 +13609 3077 589 2662 3423 9116 6628 8701 9462 +13610 2708 5836 2087 1051 8747 11875 8126 7090 +13611 4560 1595 3489 3039 10599 7634 9528 9078 +13612 3706 3011 2817 3367 9745 9050 8856 9406 +13613 5914 2275 2620 1003 11953 8314 8659 7042 +13614 1584 4589 2256 3551 7623 10628 8295 9590 +13615 3524 870 2208 1815 9563 6909 8247 7854 +13616 5103 1571 3573 2358 11142 7610 9612 8397 +13617 5792 4783 259 2293 11831 10822 6298 8332 +13618 4100 2029 5743 5375 10139 8068 11782 11414 +13619 5251 905 2318 5462 11290 6944 8357 11501 +13620 1675 4547 691 3009 7714 10586 6730 9048 +13621 3378 2901 2737 544 9417 8940 8776 6583 +13622 1563 4199 310 3907 7602 10238 6349 9946 +13623 6017 877 4572 2432 12056 6916 10611 8471 +13624 3774 1081 2824 2761 9813 7120 8863 8800 +13625 5117 2271 5372 1001 11156 8310 11411 7040 +13626 4753 835 5802 2484 10792 6874 11841 8523 +13627 2217 824 5466 694 8256 6863 11505 6733 +13628 5820 439 3188 2267 11859 6478 9227 8306 +13629 1429 6048 2567 4373 7468 12087 8606 10412 +13630 3295 598 4183 4605 9334 6637 10222 10644 +13631 1219 4164 2070 5197 7258 10203 8109 11236 +13632 1197 3197 1072 3041 7236 9236 7111 9080 +13633 5722 2384 3183 401 11761 8423 9222 6440 +13634 3497 5927 2826 482 9536 11966 8865 6521 +13635 5573 2362 5751 4879 11612 8401 11790 10918 +13636 3612 593 5663 2517 9651 6632 11702 8556 +13637 4498 1041 2112 4142 10537 7080 8151 10181 +13638 1908 4698 2927 5980 7947 10737 8966 12019 +13639 620 4134 3720 5193 6659 10173 9759 11232 +13640 2271 5117 1442 4185 8310 11156 7481 10224 +13641 5970 2436 4012 1372 12009 8475 10051 7411 +13642 1361 4219 1534 4062 7400 10258 7573 10101 +13643 5661 2338 5054 1760 11700 8377 11093 7799 +13644 3092 2998 3057 1192 9131 9037 9096 7231 +13645 3805 968 5162 2287 9844 7007 11201 8326 +13646 3054 3202 3085 1186 9093 9241 9124 7225 +13647 3297 581 3453 2709 9336 6620 9492 8748 +13648 548 2361 1574 5130 6587 8400 7613 11169 +13649 613 4512 1752 3849 6652 10551 7791 9888 +13650 3941 44 43 2429 9980 140 139 8468 +13651 2883 1061 3679 4776 8922 7100 9718 10815 +13652 6124 2089 272 2442 12163 8128 6311 8481 +13653 3727 2469 2468 849 9766 8508 8507 6888 +13654 369 3661 1773 4513 6408 9700 7812 10552 +13655 5614 5374 3493 2728 11653 11413 9532 8767 +13656 5405 2336 6158 207 11444 8375 12197 6246 +13657 5939 2431 2337 3877 11978 8470 8376 9916 +13658 4854 1521 3959 2561 10893 7560 9998 8600 +13659 2532 4903 2180 3693 8571 10942 8219 9732 +13660 5286 1859 2948 1163 11325 7898 8987 7202 +13661 4721 2559 4434 1117 10760 8598 10473 7156 +13662 5960 2273 5084 1274 11999 8312 11123 7313 +13663 1270 2705 587 4107 7309 8744 6626 10146 +13664 1281 3713 1427 3225 7320 9752 7466 9264 +13665 5342 2868 312 3603 11381 8907 6351 9642 +13666 2657 400 2247 4580 8696 6439 8286 10619 +13667 4842 992 3811 1482 10881 7031 9850 7521 +13668 3156 245 3485 3313 9195 6284 9524 9352 +13669 5641 2377 4747 447 11680 8416 10786 6486 +13670 1090 4606 1827 4473 7129 10645 7866 10512 +13671 5851 2417 5632 918 11890 8456 11671 6957 +13672 3936 1101 3632 2407 9975 7140 9671 8446 +13673 3133 1209 3459 3062 9172 7248 9498 9101 +13674 3062 1161 2368 3133 9101 7200 8407 9172 +13675 969 5723 5299 2906 7008 11762 11338 8945 +13676 5709 3510 41 40 11748 9549 137 136 +13677 4423 3194 5593 408 10462 9233 11632 6447 +13678 1243 3269 482 3399 7282 9308 6521 9438 +13679 3104 3468 3276 1246 9143 9507 9315 7285 +13680 4665 471 5175 2695 10704 6510 11214 8734 +13681 3132 2881 2966 3729 9171 8920 9005 9768 +13682 51 50 1821 5120 147 146 7860 11159 +13683 1184 3370 232 3943 7223 9409 6271 9982 +13684 330 3266 1068 2757 6369 9305 7107 8796 +13685 1845 3641 2212 5411 7884 9680 8251 11450 +13686 1669 4792 373 4579 7708 10831 6412 10618 +13687 4689 2280 5645 920 10728 8319 11684 6959 +13688 83 2370 923 5591 179 8409 6962 11630 +13689 1319 3270 518 3261 7358 9309 6557 9300 +13690 5484 504 4253 2352 11523 6543 10292 8391 +13691 4183 1218 2101 3979 10222 7257 8140 10018 +13692 2299 4058 1004 5661 8338 10097 7043 11700 +13693 2099 5972 678 2956 8138 12011 6717 8995 +13694 6023 2321 2582 799 12062 8360 8621 6838 +13695 2672 3812 2426 1022 8711 9851 8465 7061 +13696 1467 4188 336 3422 7506 10227 6375 9461 +13697 1448 4678 2015 5546 7487 10717 8054 11585 +13698 2982 3425 3275 1276 9021 9464 9314 7315 +13699 3310 1053 2808 2739 9349 7092 8847 8778 +13700 5067 282 2712 2300 11106 6321 8751 8339 +13701 5483 2357 2642 665 11522 8396 8681 6704 +13702 4901 2027 2595 763 10940 8066 8634 6802 +13703 4110 3231 5514 1227 10149 9270 11553 7266 +13704 3089 1248 3335 3384 9128 7287 9374 9423 +13705 4766 2238 208 3177 10805 8277 6247 9216 +13706 4503 1478 2244 3373 10542 7517 8283 9412 +13707 2930 1086 2811 2840 8969 7125 8850 8879 +13708 1247 3239 1186 3085 7286 9278 7225 9124 +13709 4524 411 2891 2560 10563 6450 8930 8599 +13710 2085 2627 955 5188 8124 8666 6994 11227 +13711 3796 2709 3453 1251 9835 8748 9492 7290 +13712 2965 315 3454 3636 9004 6354 9493 9675 +13713 3352 547 3002 3249 9391 6586 9041 9288 +13714 2798 2683 2682 333 8837 8722 8721 6372 +13715 5779 1019 2362 3681 11818 7058 8401 9720 +13716 3422 336 3666 4141 9461 6375 9705 10180 +13717 6140 2073 4864 836 12179 8112 10903 6875 +13718 3642 3832 2997 588 9681 9871 9036 6627 +13719 4201 1097 2479 2320 10240 7136 8518 8359 +13720 4619 254 4086 2395 10658 6293 10125 8434 +13721 4695 2284 5430 1678 10734 8323 11469 7717 +13722 1492 2414 5935 3245 7531 8453 11974 9284 +13723 1144 3066 1167 3000 7183 9105 7206 9039 +13724 3064 1128 2978 3248 9103 7167 9017 9287 +13725 4870 2416 4021 286 10909 8455 10060 6325 +13726 2591 215 2592 2714 8630 6254 8631 8753 +13727 2578 3553 5036 1402 8617 9592 11075 7441 +13728 3002 3316 2961 3249 9041 9355 9000 9288 +13729 3316 3002 3078 1255 9355 9041 9117 7294 +13730 3781 556 4702 1975 9820 6595 10741 8014 +13731 5764 2411 3426 1750 11803 8450 9465 7789 +13732 3092 1145 2965 2966 9131 7184 9004 9005 +13733 1458 3146 325 3683 7497 9185 6364 9722 +13734 3911 3254 3901 1487 9950 9293 9940 7526 +13735 3637 1148 2839 3190 9676 7187 8878 9229 +13736 4756 1454 3967 2383 10795 7493 10006 8422 +13737 4756 2383 2891 411 10795 8422 8930 6450 +13738 1092 3299 479 2875 7131 9338 6518 8914 +13739 3505 1016 3007 5093 9544 7055 9046 11132 +13740 4299 1417 3121 3731 10338 7456 9160 9770 +13741 473 5264 2972 3312 6512 11303 9011 9351 +13742 5607 559 2723 2488 11646 6598 8762 8527 +13743 3512 1354 3737 2635 9551 7393 9776 8674 +13744 1527 3591 561 3189 7566 9630 6600 9228 +13745 1355 3630 1210 3500 7394 9669 7249 9539 +13746 2860 3625 2546 967 8899 9664 8585 7006 +13747 307 2917 5132 4092 6346 8956 11171 10131 +13748 1676 4863 1408 3260 7715 10902 7447 9299 +13749 4270 2884 2875 479 10309 8923 8914 6518 +13750 3266 330 2982 3427 9305 6369 9021 9466 +13751 4682 2564 2032 1201 10721 8603 8071 7240 +13752 1537 2954 1076 4270 7576 8993 7115 10309 +13753 3617 485 2565 2925 9656 6524 8604 8964 +13754 5884 2126 855 1974 11923 8165 6894 8013 +13755 3059 1165 2773 3078 9098 7204 8812 9117 +13756 3059 3078 3002 547 9098 9117 9041 6586 +13757 3949 2897 2429 1094 9988 8936 8468 7133 +13758 4275 565 3298 3398 10314 6604 9337 9437 +13759 3333 1120 2998 2772 9372 7159 9037 8811 +13760 4572 2322 5253 959 10611 8361 11292 6998 +13761 4649 1525 4419 2036 10688 7564 10458 8075 +13762 1294 3420 327 3203 7333 9459 6366 9242 +13763 3921 2783 5449 1774 9960 8822 11488 7813 +13764 2876 3783 2707 480 8915 9822 8746 6519 +13765 3440 2918 3469 580 9479 8957 9508 6619 +13766 3520 4098 4948 972 9559 10137 10987 7011 +13767 3767 1129 2600 3182 9806 7168 8639 9221 +13768 3668 4248 3256 3917 9707 10287 9295 9956 +13769 4452 4935 3115 1483 10491 10974 9154 7522 +13770 5401 1735 5462 2318 11440 7774 11501 8357 +13771 2998 3092 2966 2881 9037 9131 9005 8920 +13772 3220 1386 2844 3916 9259 7425 8883 9955 +13773 3965 2413 2174 409 10004 8452 8213 6448 +13774 4834 3660 2174 1058 10873 9699 8213 7097 +13775 1528 3377 1180 3027 7567 9416 7219 9066 +13776 5809 1748 4543 2520 11848 7787 10582 8559 +13777 5035 2327 3688 760 11074 8366 9727 6799 +13778 4683 2448 4278 786 10722 8487 10317 6825 +13779 3461 2973 3275 579 9500 9012 9314 6618 +13780 1072 3197 301 2900 7111 9236 6340 8939 +13781 5413 2524 4332 624 11452 8563 10371 6663 +13782 1078 5934 2279 3788 7117 11973 8318 9827 +13783 4532 1927 5322 1643 10571 7966 11361 7682 +13784 909 2622 1130 3657 6948 8661 7169 9696 +13785 3593 3035 3578 572 9632 9074 9617 6611 +13786 5799 448 2976 2715 11838 6487 9015 8754 +13787 3012 1326 2509 3578 9051 7365 8548 9617 +13788 2031 3567 375 5288 8070 9606 6414 11327 +13789 2429 1135 5269 3941 8468 7174 11308 9980 +13790 4622 604 5702 2325 10661 6643 11741 8364 +13791 756 1926 4796 2164 6795 7965 10835 8203 +13792 3379 2759 2760 1087 9418 8798 8799 7126 +13793 3818 3043 1608 5425 9857 9082 7647 11464 +13794 3951 1096 3328 3152 9990 7135 9367 9191 +13795 3143 3380 4067 500 9182 9419 10106 6539 +13796 6088 534 2546 3625 12127 6573 8585 9664 +13797 5633 1334 3527 2302 11672 7373 9566 8341 +13798 5792 4068 606 2792 11831 10107 6645 8831 +13799 3468 3577 2973 1264 9507 9616 9012 7303 +13800 3326 1330 3749 3755 9365 7369 9788 9794 +13801 492 2939 1087 2760 6531 8978 7126 8799 +13802 3887 1297 4339 2719 9926 7336 10378 8758 +13803 257 5331 2191 2870 6296 11370 8230 8909 +13804 1443 3098 705 3880 7482 9137 6744 9919 +13805 2504 4900 421 2121 8543 10939 6460 8160 +13806 3449 2901 3378 1076 9488 8940 9417 7115 +13807 3559 457 3746 2893 9598 6496 9785 8932 +13808 217 2441 855 4949 6256 8480 6894 10988 +13809 1205 3649 954 3711 7244 9688 6993 9750 +13810 3237 3279 3112 555 9276 9318 9151 6594 +13811 1206 2460 5732 2363 7245 8499 11771 8402 +13812 561 3382 1235 3322 6600 9421 7274 9361 +13813 1808 5391 2078 3176 7847 11430 8117 9215 +13814 3870 938 4350 2326 9909 6977 10389 8365 +13815 6071 4956 3903 2314 12110 10995 9942 8353 +13816 2311 5147 612 5286 8350 11186 6651 11325 +13817 4924 1359 4255 2398 10963 7398 10294 8437 +13818 2590 2589 3371 1386 8629 8628 9410 7425 +13819 5057 1062 3587 2700 11096 7101 9626 8739 +13820 1675 3009 2097 4760 7714 9048 8136 10799 +13821 1661 4329 678 3450 7700 10368 6717 9489 +13822 5311 2047 5192 908 11350 8086 11231 6947 +13823 1214 2753 1342 3415 7253 8792 7381 9454 +13824 5076 3110 2842 1410 11115 9149 8881 7449 +13825 4832 1242 5101 2210 10871 7281 11140 8249 +13826 3174 3103 3339 1215 9213 9142 9378 7254 +13827 5067 2300 2864 1409 11106 8339 8903 7448 +13828 3515 2827 3033 1237 9554 8866 9072 7276 +13829 3391 2920 3922 1390 9430 8959 9961 7429 +13830 3981 4227 3442 475 10020 10266 9481 6514 +13831 4032 3178 2705 1270 10071 9217 8744 7309 +13832 3241 1235 3382 3107 9280 7274 9421 9146 +13833 4174 447 4747 2606 10213 6486 10786 8645 +13834 3165 3106 2949 1194 9204 9145 8988 7233 +13835 3634 558 3149 3778 9673 6597 9188 9817 +13836 3203 327 3409 3574 9242 6366 9448 9613 +13837 1145 3180 315 2965 7184 9219 6354 9004 +13838 4125 873 3787 2372 10164 6912 9826 8411 +13839 1212 3173 1183 3112 7251 9212 7222 9151 +13840 1484 2434 575 5033 7523 8473 6614 11072 +13841 594 3214 1412 3721 6633 9253 7451 9760 +13842 3198 2949 3106 536 9237 8988 9145 6575 +13843 3283 1190 3140 2992 9322 7229 9179 9031 +13844 2992 349 3229 3283 9031 6388 9268 9322 +13845 5472 981 2631 2816 11511 7020 8670 8855 +13846 511 5214 2387 5805 6550 11253 8426 11844 +13847 5040 2172 1394 4774 11079 8211 7433 10813 +13848 4918 2441 1315 3680 10957 8480 7354 9719 +13849 3459 1007 3053 2734 9498 7046 9092 8773 +13850 4553 1170 3969 2346 10592 7209 10008 8385 +13851 3898 2125 418 6127 9937 8164 6457 12166 +13852 1902 1499 2397 5500 7941 7538 8436 11539 +13853 288 2521 2058 5139 6327 8560 8097 11178 +13854 5493 430 4383 2376 11532 6469 10422 8415 +13855 4981 2314 3903 470 11020 8353 9942 6509 +13856 3929 2449 2961 1340 9968 8488 9000 7379 +13857 3370 4045 4511 1422 9409 10084 10550 7461 +13858 1222 3017 1221 3148 7261 9056 7260 9187 +13859 1299 3281 1152 3313 7338 9320 7191 9352 +13860 4634 2369 5457 1763 10673 8408 11496 7802 +13861 523 3140 1190 3102 6562 9179 7229 9141 +13862 3651 1095 3186 2912 9690 7134 9225 8951 +13863 1403 3192 321 3691 7442 9231 6360 9730 +13864 3284 221 2019 4289 9323 6260 8058 10328 +13865 5746 2394 2625 1485 11785 8433 8664 7524 +13866 4748 671 4150 2255 10787 6710 10189 8294 +13867 3480 608 3333 3017 9519 6647 9372 9056 +13868 1805 5368 2101 3143 7844 11407 8140 9182 +13869 905 5352 2588 4124 6944 11391 8627 10163 +13870 3428 1066 3584 2770 9467 7105 9623 8809 +13871 576 4403 5804 2786 6615 10442 11843 8825 +13872 4707 2304 4329 1466 10746 8343 10368 7505 +13873 1786 4691 3828 305 7825 10730 9867 6344 +13874 6110 2481 3875 1123 12149 8520 9914 7162 +13875 6110 1123 2873 2480 12149 7162 8912 8519 +13876 1442 2784 295 4185 7481 8823 6334 10224 +13877 562 3165 1194 3228 6601 9204 7233 9267 +13878 4967 1626 4024 2650 11006 7665 10063 8689 +13879 4038 5473 3162 1083 10077 11512 9201 7122 +13880 3535 647 4948 5538 9574 6686 10987 11577 +13881 4140 2378 5337 275 10179 8417 11376 6314 +13882 1106 2876 480 3317 7145 8915 6519 9356 +13883 309 3982 2411 5764 6348 10021 8450 11803 +13884 2755 1198 2901 3449 8794 7237 8940 9488 +13885 4257 1552 3324 3323 10296 7591 9363 9362 +13886 3612 3952 2224 593 9651 9991 8263 6632 +13887 1502 4619 832 2715 7541 10658 6871 8754 +13888 1458 3683 1240 3654 7497 9722 7279 9693 +13889 3099 1727 997 4146 9138 7766 7036 10185 +13890 3172 3347 3357 1238 9211 9386 9396 7277 +13891 4801 1077 3340 2519 10840 7116 9379 8558 +13892 5577 885 4301 2396 11616 6924 10340 8435 +13893 5289 771 3176 2356 11328 6810 9215 8395 +13894 2466 5507 2482 900 8505 11546 8521 6939 +13895 3444 1324 3315 3777 9483 7363 9354 9816 +13896 3452 2581 1870 770 9491 8620 7909 6809 +13897 4556 4077 4295 1586 10595 10116 10334 7625 +13898 1149 3511 551 3196 7188 9550 6590 9235 +13899 4249 3764 409 2174 10288 9803 6448 8213 +13900 1364 3600 1215 3359 7403 9639 7254 9398 +13901 1623 3218 5394 5078 7662 9257 11433 11117 +13902 5109 428 4802 2419 11148 6467 10841 8458 +13903 1793 2577 438 4833 7832 8616 6477 10872 +13904 1475 3493 995 3709 7514 9532 7034 9748 +13905 6006 2386 1084 3542 12045 8425 7123 9581 +13906 3789 628 5576 3491 9828 6667 11615 9530 +13907 5252 2327 5035 1520 11291 8366 11074 7559 +13908 5635 970 2378 4140 11674 7009 8417 10179 +13909 5771 2431 5939 412 11810 8470 11978 6451 +13910 1071 3399 482 2826 7110 9438 6521 8865 +13911 4673 2462 1000 2049 10712 8501 7039 8088 +13912 3164 1254 3287 3402 9203 7293 9326 9441 +13913 2877 3548 3261 518 8916 9587 9300 6557 +13914 3548 2877 3498 1204 9587 8916 9537 7243 +13915 4356 576 2786 4701 10395 6615 8825 10740 +13916 1096 2911 237 3328 7135 8950 6276 9367 +13917 392 2479 1097 3985 6431 8518 7136 10024 +13918 5716 381 3343 2433 11755 6420 9382 8472 +13919 4981 1389 4661 2314 11020 7428 10700 8353 +13920 327 2827 1082 3409 6366 8866 7121 9448 +13921 3193 1142 3425 3038 9232 7181 9464 9077 +13922 3000 3215 3018 1144 9039 9254 9057 7183 +13923 1190 3283 1194 2949 7229 9322 7233 8988 +13924 6223 2229 720 3411 12262 8268 6759 9450 +13925 6077 300 3161 2380 12116 6339 9200 8419 +13926 700 4785 1696 2504 6739 10824 7735 8543 +13927 615 2458 1466 4736 6654 8497 7505 10775 +13928 3189 3089 3401 1527 9228 9128 9440 7566 +13929 1240 3124 568 3407 7279 9163 6607 9446 +13930 1292 3240 1185 3482 7331 9279 7224 9521 +13931 3582 515 2182 2680 9621 6554 8221 8719 +13932 5090 2382 6232 450 11129 8421 12271 6489 +13933 1542 4934 2073 6140 7581 10973 8112 12179 +13934 3363 3262 3046 1307 9402 9301 9085 7346 +13935 285 2595 2027 5623 6324 8634 8066 11662 +13936 1128 4227 1514 2978 7167 10266 7553 9017 +13937 4905 4463 2301 938 10944 10502 8340 6977 +13938 31 3681 2362 32 127 9720 8401 128 +13939 1293 3206 1228 3361 7332 9245 7267 9400 +13940 5308 1021 1991 3589 11347 7060 8030 9628 +13941 5524 2476 4820 427 11563 8515 10859 6466 +13942 3001 3443 2994 329 9040 9482 9033 6368 +13943 3443 3001 3437 1236 9482 9040 9476 7275 +13944 3202 3054 2773 1165 9241 9093 8812 7204 +13945 1743 5210 2383 3967 7782 11249 8422 10006 +13946 3228 1194 3283 3229 9267 7233 9322 9268 +13947 3281 2999 3096 1152 9320 9038 9135 7191 +13948 283 4255 1557 3828 6322 10294 7596 9867 +13949 1181 3185 1226 3195 7220 9224 7265 9234 +13950 1251 3364 1188 3507 7290 9403 7227 9546 +13951 3714 1322 3182 2600 9753 7361 9221 8639 +13952 5862 427 5014 2915 11901 6466 11053 8954 +13953 3815 2595 2831 1169 9854 8634 8870 7208 +13954 4699 2621 1232 6135 10738 8660 7271 12174 +13955 1183 3723 555 3112 7222 9762 6594 9151 +13956 3185 3159 3362 1226 9224 9198 9401 7265 +13957 3173 328 3107 3108 9212 6367 9146 9147 +13958 4113 2860 5863 297 10152 8899 11902 6336 +13959 1126 5369 4941 3804 7165 11408 10980 9843 +13960 5632 2417 4383 430 11671 8456 10422 6469 +13961 3173 3108 3168 1183 9212 9147 9207 7222 +13962 1800 5498 2530 5667 7839 11537 8569 11706 +13963 4499 569 2593 2025 10538 6608 8632 8064 +13964 546 3264 1145 3006 6585 9303 7184 9045 +13965 1493 4794 1752 4512 7532 10833 7791 10551 +13966 5795 888 5547 2442 11834 6927 11586 8481 +13967 3216 1257 3258 3403 9255 7296 9297 9442 +13968 1380 3833 329 3606 7419 9872 6368 9645 +13969 6109 937 2403 2492 12148 6976 8442 8531 +13970 3420 3033 2827 327 9459 9072 8866 6366 +13971 413 4193 1855 4716 6452 10232 7894 10755 +13972 3847 2907 4675 520 9886 8946 10714 6559 +13973 3889 2935 2296 261 9928 8974 8335 6300 +13974 2790 3719 2390 949 8829 9758 8429 6988 +13975 3427 1118 3714 3270 9466 7157 9753 9309 +13976 2230 5035 760 4308 8269 11074 6799 10347 +13977 1159 3420 1294 3440 7198 9459 7333 9479 +13978 4627 1554 2716 4036 10666 7593 8755 10075 +13979 4840 3268 5818 850 10879 9307 11857 6889 +13980 2629 1104 2422 5721 8668 7143 8461 11760 +13981 3961 2170 950 5628 10000 8209 6989 11667 +13982 3316 480 2707 2961 9355 6519 8746 9000 +13983 4101 1111 3862 3394 10140 7150 9901 9433 +13984 319 2690 1051 3608 6358 8729 7090 9647 +13985 3008 599 2428 3827 9047 6638 8467 9866 +13986 1323 3869 1484 3590 7362 9908 7523 9629 +13987 4629 2530 5498 638 10668 8569 11537 6677 +13988 2713 1347 3035 3593 8752 7386 9074 9632 +13989 4871 2330 4758 952 10910 8369 10797 6991 +13990 672 3387 1805 4847 6711 9426 7844 10886 +13991 563 3227 1226 3362 6602 9266 7265 9401 +13992 4877 1298 4208 2343 10916 7337 10247 8382 +13993 6061 794 3874 2336 12100 6833 9913 8375 +13994 3704 1255 3078 2773 9743 7294 9117 8812 +13995 2848 4063 3537 1127 8887 10102 9576 7166 +13996 1162 3619 1481 3744 7201 9658 7520 9783 +13997 3465 3056 3287 1225 9504 9095 9326 7264 +13998 6210 2058 2521 798 12249 8097 8560 6837 +13999 4646 2003 3884 4304 10685 8042 9923 10343 +14000 1728 2738 838 4856 7767 8777 6877 10895 +14001 3013 3275 3425 1142 9052 9314 9464 7181 +14002 3925 2662 3448 1203 9964 8701 9487 7242 +14003 4979 2356 3176 1273 11018 8395 9215 7312 +14004 3350 3046 3262 539 9389 9085 9301 6578 +14005 3046 3350 3623 1335 9085 9389 9662 7374 +14006 372 2843 1876 5561 6411 8882 7915 11600 +14007 3474 2825 2720 1092 9513 8864 8759 7131 +14008 4758 2330 3550 332 10797 8369 9589 6371 +14009 2346 4665 2695 1020 8385 10704 8734 7059 +14010 1312 3406 1244 3658 7351 9445 7283 9697 +14011 1299 2799 551 3511 7338 8838 6590 9550 +14012 5919 2543 4719 1309 11958 8582 10758 7348 +14013 3402 3287 3056 567 9441 9326 9095 6606 +14014 3711 2630 6066 467 9750 8669 12105 6506 +14015 4103 968 3805 4908 10142 7007 9844 10947 +14016 3185 1181 3082 3366 9224 7220 9121 9405 +14017 554 3396 1283 3356 6593 9435 7322 9395 +14018 3219 1664 3209 1117 9258 7703 9248 7156 +14019 6172 3045 5799 2715 12211 9084 11838 8754 +14020 1362 3614 1549 4003 7401 9653 7588 10042 +14021 3327 4769 2603 222 9366 10808 8642 6261 +14022 3227 563 3193 3151 9266 6602 9232 9190 +14023 787 5726 4558 1012 6826 11765 10597 7051 +14024 1013 3434 1986 6007 7052 9473 8025 12046 +14025 5500 2397 3745 203 11539 8436 9784 6242 +14026 3100 836 4864 3101 9139 6875 10903 9140 +14027 5337 2378 2631 981 11376 8417 8670 7020 +14028 1246 3238 1182 3302 7285 9277 7221 9341 +14029 3240 1292 3077 3137 9279 7331 9116 9176 +14030 1354 3519 1187 3441 7393 9558 7226 9480 +14031 3436 3601 3182 1322 9475 9640 9221 7361 +14032 3704 3156 2849 1106 9743 9195 8888 7145 +14033 1142 3639 1313 3013 7181 9678 7352 9052 +14034 606 4068 1349 2685 6645 10107 7388 8724 +14035 5069 2344 4443 244 11108 8383 10482 6283 +14036 4687 2996 3209 1564 10726 9035 9248 7603 +14037 5061 2351 2399 1164 11100 8390 8438 7203 +14038 4553 2346 3047 603 10592 8385 9086 6642 +14039 4054 2458 4604 1320 10093 8497 10643 7359 +14040 281 2541 1170 3968 6320 8580 7209 10007 +14041 4031 1426 2870 3877 10070 7465 8909 9916 +14042 3969 1170 2541 2540 10008 7209 8580 8579 +14043 329 2994 1098 3606 6368 9033 7137 9645 +14044 4147 3210 3191 1131 10186 9249 9230 7170 +14045 5952 4428 1480 3808 11991 10467 7519 9847 +14046 4194 422 4176 2400 10233 6461 10215 8439 +14047 4999 2339 1757 474 11038 8378 7796 6513 +14048 4877 2343 4616 856 10916 8382 10655 6895 +14049 4392 3097 2687 679 10431 9136 8726 6718 +14050 4960 1746 5183 2809 10999 7785 11222 8848 +14051 4960 2809 4862 725 10999 8848 10901 6764 +14052 1818 4975 614 4149 7857 11014 6653 10188 +14053 1149 3196 1294 3203 7188 9235 7333 9242 +14054 318 4589 831 2246 6357 10628 6870 8285 +14055 3577 1276 3275 2973 9616 7315 9314 9012 +14056 5511 1629 3994 2360 11550 7668 10033 8399 +14057 3302 1182 3103 3174 9341 7221 9142 9213 +14058 527 1692 948 5382 6566 7731 6987 11421 +14059 4165 1469 3827 2428 10204 7508 9866 8467 +14060 3255 1348 3662 3794 9294 7387 9701 9833 +14061 3696 4472 2691 2109 9735 10511 8730 8148 +14062 4798 2358 3573 973 10837 8397 9612 7012 +14063 2216 6230 1696 2391 8255 12269 7735 8430 +14064 5483 1519 5243 2357 11522 7558 11282 8396 +14065 1889 5844 703 5278 7928 11883 6742 11317 +14066 3235 1165 3059 1210 9274 7204 9098 7249 +14067 5876 2735 4061 204 11915 8774 10100 6243 +14068 3775 2895 3390 1295 9814 8934 9429 7334 +14069 5703 917 5484 2352 11742 6956 11523 8391 +14070 3591 1527 3834 4306 9630 7566 9873 10345 +14071 6208 1852 4814 2432 12247 7891 10853 8471 +14072 538 3235 1254 3164 6577 9274 7293 9203 +14073 1236 3315 1324 3443 7275 9354 7363 9482 +14074 4646 1275 5109 2419 10685 7314 11148 8458 +14075 3450 354 4230 1661 9489 6393 10269 7700 +14076 5463 2953 3031 2401 11502 8992 9070 8440 +14077 646 3236 1183 3168 6685 9275 7222 9207 +14078 3239 3274 3597 551 9278 9313 9636 6590 +14079 322 3238 1246 3276 6361 9277 7285 9315 +14080 336 3749 1398 3666 6375 9788 7437 9705 +14081 2852 1039 4159 745 8891 7078 10198 6784 +14082 3598 3137 3077 1121 9637 9176 9116 7160 +14083 6037 301 3197 2953 12076 6340 9236 8992 +14084 1395 3576 1229 3634 7434 9615 7268 9673 +14085 2549 4108 4271 1249 8588 10147 10310 7288 +14086 3463 3106 3165 1176 9502 9145 9204 7215 +14087 5651 2435 3687 1252 11690 8474 9726 7291 +14088 3417 3274 3239 1247 9456 9313 9278 7286 +14089 4551 585 5103 2358 10590 6624 11142 8397 +14090 3253 317 3672 3195 9292 6356 9711 9234 +14091 3410 3015 3810 1351 9449 9054 9849 7390 +14092 3584 312 2868 2770 9623 6351 8907 8809 +14093 4554 248 4464 2498 10593 6287 10503 8537 +14094 3242 3243 3322 1235 9281 9282 9361 7274 +14095 3243 3242 3172 553 9282 9281 9211 6592 +14096 1213 3242 1235 3241 7252 9281 7274 9280 +14097 314 3158 1216 3282 6353 9197 7255 9321 +14098 3227 3253 3195 1226 9266 9292 9234 7265 +14099 3253 3227 3151 1233 9292 9266 9190 7272 +14100 3352 3249 3069 1203 9391 9288 9108 7242 +14101 1435 4126 1571 3999 7474 10165 7610 10038 +14102 5302 1784 428 5109 11341 7823 6467 11148 +14103 3258 1216 2704 3300 9297 7255 8743 9339 +14104 3424 564 3400 3086 9463 6603 9439 9125 +14105 268 4014 961 2862 6307 10053 7000 8901 +14106 1541 4539 2262 5290 7580 10578 8301 11329 +14107 5540 2392 4044 942 11579 8431 10083 6981 +14108 4490 2104 5469 894 10529 8143 11508 6933 +14109 231 3042 1288 3341 6270 9081 7327 9380 +14110 2178 5855 2139 858 8217 11894 8178 6897 +14111 6127 5327 3738 1883 12166 11366 9777 7922 +14112 5542 2351 5061 458 11581 8390 11100 6497 +14113 3989 667 5027 2119 10028 6706 11066 8158 +14114 4448 1008 3883 2562 10487 7047 9922 8601 +14115 5299 793 2886 2906 11338 6832 8925 8945 +14116 3204 3302 3174 540 9243 9341 9213 6579 +14117 819 1691 2991 4884 6858 7730 9030 10923 +14118 4860 2401 3031 582 10899 8440 9070 6621 +14119 4860 1462 3586 2401 10899 7501 9625 8440 +14120 1225 3287 1254 3311 7264 9326 7293 9350 +14121 6238 4361 1499 1902 12277 10400 7538 7941 +14122 3171 1212 3112 3279 9210 7251 9151 9318 +14123 1195 3230 562 3228 7234 9269 6601 9267 +14124 4745 2706 4775 1572 10784 8745 10814 7611 +14125 1714 5025 380 3919 7753 11064 6419 9958 +14126 4564 417 3296 987 10603 6456 9335 7026 +14127 3311 1254 3235 3233 9350 7293 9274 9272 +14128 5300 1917 4102 338 11339 7956 10141 6377 +14129 3436 3104 3204 1185 9475 9143 9243 7224 +14130 4991 2374 5859 875 11030 8413 11898 6914 +14131 1286 3180 1145 3264 7325 9219 7184 9303 +14132 1978 5475 1207 4812 8017 11514 7246 10851 +14133 692 3899 5815 3825 6731 9938 11854 9864 +14134 5108 666 3940 4155 11147 6705 9979 10194 +14135 3173 1212 3356 328 9212 7251 9395 6367 +14136 3067 1119 3042 4310 9106 7158 9081 10349 +14137 561 3027 1180 3382 6600 9066 7219 9421 +14138 3171 3279 3237 1187 9210 9318 9276 7226 +14139 1381 3309 1075 3643 7420 9348 7114 9682 +14140 3506 3892 3700 1403 9545 9931 9739 7442 +14141 3441 3821 3779 235 9480 9860 9818 6274 +14142 4285 2216 2391 861 10324 8255 8430 6900 +14143 5870 1229 3576 2526 11909 7268 9615 8565 +14144 2766 4632 293 4688 8805 10671 6332 10727 +14145 4844 4158 2090 1036 10883 10197 8129 7075 +14146 3359 1215 3339 3205 9398 7254 9378 9244 +14147 4773 3490 1479 2365 10812 9529 7518 8404 +14148 4753 1968 2171 835 10792 8007 8210 6874 +14149 564 3424 1159 3267 6603 9463 7198 9306 +14150 1670 5387 878 2487 7709 11426 6917 8526 +14151 5096 783 4042 2366 11135 6822 10081 8405 +14152 3035 1014 3012 3578 9074 7053 9051 9617 +14153 3240 3601 3436 1185 9279 9640 9475 7224 +14154 2222 3457 670 5683 8261 9496 6709 11722 +14155 3427 2982 3458 1118 9466 9021 9497 7157 +14156 2611 949 2389 3836 8650 6988 8428 9875 +14157 2265 5497 1309 6187 8304 11536 7348 12226 +14158 2745 280 1971 4303 8784 6319 8010 10342 +14159 3206 1293 3152 3328 9245 7332 9191 9367 +14160 467 6066 2653 2941 6506 12105 8692 8980 +14161 3746 1425 3688 2893 9785 7464 9727 8932 +14162 3543 2341 4746 472 9582 8380 10785 6511 +14163 5867 4382 1115 3522 11906 10421 7154 9561 +14164 4122 468 3701 2548 10161 6507 9740 8587 +14165 4122 2548 2549 1249 10161 8587 8588 7288 +14166 3238 3623 3350 1182 9277 9662 9389 7221 +14167 2365 1479 3538 5047 8404 7518 9577 11086 +14168 5403 4044 2392 205 11442 10083 8431 6244 +14169 4023 3705 2209 1592 10062 9744 8248 7631 +14170 1273 4628 279 2364 7312 10667 6318 8403 +14171 3511 1149 3664 3200 9550 7188 9703 9239 +14172 3511 3200 3281 1299 9550 9239 9320 7338 +14173 3728 2706 4745 675 9767 8745 10784 6714 +14174 1016 3505 1850 5664 7055 9544 7889 11703 +14175 539 3103 1182 3350 6578 9142 7221 9389 +14176 4499 2665 3178 569 10538 8704 9217 6608 +14177 4401 2217 694 2693 10440 8256 6733 8732 +14178 5210 935 2891 2383 11249 6974 8930 8422 +14179 1468 3785 536 2845 7507 9824 6575 8884 +14180 348 5368 965 2505 6387 11407 7004 8544 +14181 1217 2920 239 3718 7256 8959 6278 9757 +14182 485 3617 1430 3942 6524 9656 7469 9981 +14183 5507 2466 3611 1141 11546 8505 9650 7180 +14184 584 2769 1095 3651 6623 8808 7134 9690 +14185 3302 3204 3104 1246 9341 9243 9143 7285 +14186 4441 812 2136 3776 10480 6851 8175 9815 +14187 4536 2756 4944 845 10575 8795 10983 6884 +14188 2218 5502 876 5005 8257 11541 6915 11044 +14189 1216 3258 1257 3282 7255 9297 7296 9321 +14190 3054 1186 2799 3485 9093 7225 8838 9524 +14191 3437 3001 3335 1248 9476 9040 9374 7287 +14192 5047 892 4197 2365 11086 6931 10236 8404 +14193 1225 3311 313 3205 7264 9350 6352 9244 +14194 2643 3820 5632 430 8682 9859 11671 6469 +14195 1463 4043 1346 3529 7502 10082 7385 9568 +14196 662 3765 1434 4231 6701 9804 7473 10270 +14197 3420 1159 3424 3033 9459 7198 9463 9072 +14198 3067 4310 4166 1548 9106 10349 10205 7587 +14199 1322 3223 552 3436 7361 9262 6591 9475 +14200 3465 1225 3205 3339 9504 7264 9244 9378 +14201 4351 248 4554 3170 10390 6287 10593 9209 +14202 3833 3335 3001 329 9872 9374 9040 6368 +14203 5188 2385 2867 980 11227 8424 8906 7019 +14204 3376 3241 3107 328 9415 9280 9146 6367 +14205 1321 3381 1250 3484 7360 9420 7289 9523 +14206 3033 3424 3086 1237 9072 9463 9125 7276 +14207 3382 1180 3108 3107 9421 7219 9147 9146 +14208 3038 3425 2982 330 9077 9464 9021 6369 +14209 3235 538 3202 1165 9274 6577 9241 7204 +14210 5998 3647 885 5577 12037 9686 6924 11616 +14211 1240 3407 1241 3259 7279 9446 7280 9298 +14212 4727 2375 4431 703 10766 8414 10470 6742 +14213 1465 3290 1911 5557 7504 9329 7950 11596 +14214 3267 3357 3347 564 9306 9396 9386 6603 +14215 2995 3448 2662 589 9034 9487 8701 6628 +14216 5678 2447 4841 1455 11717 8486 10880 7494 +14217 3852 3498 2877 1129 9891 9537 8916 7168 +14218 1237 3086 1283 3396 7276 9125 7322 9435 +14219 49 3518 1821 50 145 9557 7860 146 +14220 5493 2376 3988 1374 11532 8415 10027 7413 +14221 3321 1722 287 3971 9360 7761 6326 10010 +14222 3683 3419 3124 1240 9722 9458 9163 7279 +14223 3873 3872 4173 953 9912 9911 10212 6992 +14224 3300 558 3403 3258 9339 6597 9442 9297 +14225 4331 2390 3719 906 10370 8429 9758 6945 +14226 1920 5167 815 4658 7959 11206 6854 10697 +14227 4773 2365 4197 688 10812 8404 10236 6727 +14228 1220 3369 1233 3151 7259 9408 7272 9190 +14229 1236 3243 553 3315 7275 9282 6592 9354 +14230 3347 3172 3242 1213 9386 9211 9281 7252 +14231 3362 3159 3361 1228 9401 9198 9400 7267 +14232 1269 2684 287 6161 7308 8723 6326 12200 +14233 4914 3116 1099 5923 10953 9155 7138 11962 +14234 2286 4762 516 5238 8325 10801 6555 11277 +14235 65 3163 2050 66 161 9202 8089 162 +14236 3136 1217 4067 3380 9175 7256 10106 9419 +14237 3243 1236 3437 3322 9282 7275 9476 9361 +14238 554 3356 1212 3171 6593 9395 7251 9210 +14239 979 3706 524 2740 7018 9745 6563 8779 +14240 3401 3089 3384 562 9440 9128 9423 6601 +14241 2329 5013 5586 623 8368 11052 11625 6662 +14242 4110 2480 2873 445 10149 8519 8912 6484 +14243 3348 3319 3414 1282 9387 9358 9453 7321 +14244 3319 3348 2554 570 9358 9387 8593 6609 +14245 3454 315 3184 3364 9493 6354 9223 9403 +14246 607 3152 1293 3531 6646 9191 7332 9570 +14247 1338 3301 462 2547 7377 9340 6501 8586 +14248 3341 4144 4035 231 9380 10183 10074 6270 +14249 6092 4626 2862 961 12131 10665 8901 7000 +14250 1461 4240 577 2889 7500 10279 6616 8928 +14251 1390 3645 1238 3391 7429 9684 7277 9430 +14252 4814 1109 2858 2601 10853 7148 8897 8640 +14253 4881 3129 320 2412 10920 9168 6359 8451 +14254 4432 2405 4927 1612 10471 8444 10966 7651 +14255 5922 5921 54 5266 11961 11960 150 11305 +14256 3364 3184 2832 1188 9403 9223 8871 7227 +14257 1291 3410 1351 3525 7330 9449 7390 9564 +14258 4176 422 3916 2844 10215 6461 9955 8883 +14259 3366 537 3159 3185 9405 6576 9198 9224 +14260 4602 2030 2624 420 10641 8069 8663 6459 +14261 3637 2832 3184 1286 9676 8871 9223 7325 +14262 3377 3168 3108 1180 9416 9207 9147 7219 +14263 3565 1171 2899 2926 9604 7210 8938 8965 +14264 1125 3924 2275 4818 7164 9963 8314 10857 +14265 4372 2992 3140 1431 10411 9031 9179 7470 +14266 3369 3564 2596 1233 9408 9603 8635 7272 +14267 1176 3165 562 3384 7215 9204 6601 9423 +14268 3438 3390 2944 238 9477 9429 8983 6277 +14269 1884 1607 2353 4912 7923 7646 8392 10951 +14270 5658 2498 4464 1444 11697 8537 10503 7483 +14271 1329 3516 1234 3580 7368 9555 7273 9619 +14272 4077 1438 5671 4295 10116 7477 11710 10334 +14273 5145 3155 474 1757 11184 9194 6513 7796 +14274 3617 2925 2914 1122 9656 8964 8953 7161 +14275 1809 6170 1017 5175 7848 12209 7056 11214 +14276 5537 2733 2643 1374 11576 8772 8682 7413 +14277 2957 3850 2403 937 8996 9889 8442 6976 +14278 4011 210 3199 2819 10050 6249 9238 8858 +14279 3433 3191 3210 1310 9472 9230 9249 7349 +14280 5647 213 3455 2310 11686 6252 9494 8349 +14281 3124 3419 3068 1204 9163 9458 9107 7243 +14282 3481 1202 2617 3492 9520 7241 8656 9531 +14283 1330 3622 1377 3803 7369 9661 7416 9842 +14284 421 5380 5954 2121 6460 11419 11993 8160 +14285 2179 4249 766 5077 8218 10288 6805 11116 +14286 1372 3186 1095 3879 7411 9225 7134 9918 +14287 984 3467 6063 5170 7023 9506 12102 11209 +14288 3737 235 4040 4386 9776 6274 10079 10425 +14289 1422 4511 2517 5857 7461 10550 8556 11896 +14290 6210 2980 382 2291 12249 9019 6421 8330 +14291 2407 5916 660 3936 8446 11955 6699 9975 +14292 2834 3882 1992 918 8873 9921 8031 6957 +14293 1650 2659 975 5148 7689 8698 7014 11187 +14294 1216 3158 1241 3407 7255 9197 7280 9446 +14295 5955 4022 1155 2539 11994 10061 7194 8578 +14296 3635 496 3545 2850 9674 6535 9584 8889 +14297 3400 1213 3241 3376 9439 7252 9280 9415 +14298 3625 2860 4113 6088 9664 8899 10152 12127 +14299 539 3262 1179 3465 6578 9301 7218 9504 +14300 1159 3440 580 3091 7198 9479 6619 9130 +14301 3507 2999 3281 532 9546 9038 9320 6571 +14302 3539 239 2920 3391 9578 6278 8959 9430 +14303 1213 3400 564 3347 7252 9439 6603 9386 +14304 578 3414 1261 3257 6617 9453 7300 9296 +14305 3451 3206 3328 237 9490 9245 9367 6276 +14306 4922 4007 1700 1325 10961 10046 7739 7364 +14307 4752 1866 4913 2613 10791 7905 10952 8652 +14308 5136 1654 4656 2674 11175 7693 10695 8713 +14309 3519 1354 3512 3167 9558 7393 9551 9206 +14310 3189 561 3322 3437 9228 6600 9361 9476 +14311 3437 1248 3089 3189 9476 7287 9128 9228 +14312 323 3616 1131 3191 6362 9655 7170 9230 +14313 4854 2694 2763 1521 10893 8733 8802 7560 +14314 5583 2887 2888 1259 11622 8926 8927 7298 +14315 4721 1117 3209 2996 10760 7156 9248 9035 +14316 4290 1167 3066 2572 10329 7206 9105 8611 +14317 2552 4012 2436 893 8591 10051 8475 6932 +14318 316 4298 1222 3148 6355 10337 7261 9187 +14319 1323 3927 303 3869 7362 9966 6342 9908 +14320 2603 4769 2024 6053 8642 10808 8063 12092 +14321 6016 477 5711 2780 12055 6516 11750 8819 +14322 3630 3233 3235 1210 9669 9272 9274 7249 +14323 3521 3451 3416 1313 9560 9490 9455 7352 +14324 1420 3560 1252 3687 7459 9599 7291 9726 +14325 210 2478 826 3199 6249 8517 6865 9238 +14326 3580 1234 3164 3402 9619 7273 9203 9441 +14327 3485 245 2773 3054 9524 6284 8812 9093 +14328 3056 3659 2846 567 9095 9698 8885 6606 +14329 2962 3549 2317 503 9001 9588 8356 6542 +14330 3487 3085 3202 538 9526 9124 9241 6577 +14331 3375 1295 3390 3438 9414 7334 9429 9477 +14332 722 5074 1777 5159 6761 11113 7816 11198 +14333 1807 4198 380 5323 7846 10237 6419 11362 +14334 5993 476 2490 2782 12032 6515 8529 8821 +14335 4047 1258 2509 3703 10086 7297 8548 9742 +14336 53 52 2100 3494 149 148 8139 9533 +14337 4660 1817 4355 862 10699 7856 10394 6901 +14338 3597 2918 3440 1294 9636 8957 9479 7333 +14339 588 2997 1330 3803 6627 9036 7369 9842 +14340 3620 1071 3390 2895 9659 7110 9429 8934 +14341 1282 3349 1256 3348 7321 9388 7295 9387 +14342 3376 328 3356 1283 9415 6367 9395 7322 +14343 3525 3416 3451 237 9564 9455 9490 6276 +14344 3106 3463 2845 536 9145 9502 8884 6575 +14345 1703 4195 353 4713 7742 10234 6392 10752 +14346 1252 3560 284 3083 7291 9599 6323 9122 +14347 1210 3059 547 3500 7249 9098 6586 9539 +14348 3363 233 3757 3944 9402 6272 9796 9983 +14349 3686 3305 3600 1364 9725 9344 9639 7403 +14350 3778 1121 3077 3423 9817 7160 9116 9462 +14351 3468 3104 3436 552 9507 9143 9475 6591 +14352 3669 2855 3379 1253 9708 8894 9418 7292 +14353 1320 3787 247 4054 7359 9826 6286 10093 +14354 739 3296 1819 4765 6778 9335 7858 10804 +14355 3266 3427 3270 1319 9305 9466 9309 7358 +14356 3199 2006 929 2819 9238 8045 6968 8858 +14357 4093 1455 2833 1044 10132 7494 8872 7083 +14358 3478 3102 3198 1153 9517 9141 9237 7192 +14359 1247 3244 323 3417 7286 9283 6362 9456 +14360 2341 3543 3226 419 8380 9582 9265 6458 +14361 6196 5784 1768 3175 12235 11823 7807 9214 +14362 3376 1283 3086 3400 9415 7322 9125 9439 +14363 4552 2611 4157 1695 10591 8650 10196 7734 +14364 2542 1587 4739 2208 8581 7626 10778 8247 +14365 3516 3244 3487 1234 9555 9283 9526 7273 +14366 1632 3105 625 4565 7671 9144 6664 10604 +14367 1623 3977 1052 3694 7662 10016 7091 9733 +14368 2281 5021 399 4866 8320 11060 6438 10905 +14369 3717 3416 3525 1351 9756 9455 9564 7390 +14370 2090 4158 367 3928 8129 10197 6406 9967 +14371 3774 2761 2565 485 9813 8800 8604 6524 +14372 4142 1795 780 4498 10181 7834 6819 10537 +14373 900 2482 353 4195 6939 8521 6392 10234 +14374 24 23 1885 3278 120 119 7924 9317 +14375 5851 1588 5234 2417 11890 7627 11273 8456 +14376 1348 3439 1296 3662 7387 9478 7335 9701 +14377 3515 554 3519 3167 9554 6593 9558 9206 +14378 6169 1869 432 2566 12208 7908 6471 8605 +14379 4972 5934 3446 1693 11011 11973 9485 7732 +14380 5766 5374 5614 2257 11805 11413 11653 8296 +14381 4283 4916 414 3079 10322 10955 6453 9118 +14382 5366 1074 2558 2434 11405 7113 8597 8473 +14383 3206 3451 3521 1228 9245 9490 9560 7267 +14384 4950 1556 4194 2400 10989 7595 10233 8439 +14385 3700 3892 3651 1352 9739 9931 9690 7391 +14386 3269 4530 2443 1347 9308 10569 8482 7386 +14387 2913 3646 6111 1125 8952 9685 12150 7164 +14388 3852 1341 3300 2704 9891 7380 9339 8743 +14389 3417 323 3191 3433 9456 6362 9230 9472 +14390 1871 4197 892 2626 7910 10236 6931 8665 +14391 3433 1302 3274 3417 9472 7341 9313 9456 +14392 6117 1460 3951 2494 12156 7499 9990 8533 +14393 4247 5350 4940 2527 10286 11389 10979 8566 +14394 4247 2527 2921 971 10286 8566 8960 7010 +14395 1296 3439 239 3539 7335 9478 6278 9578 +14396 3456 1264 2973 3461 9495 7303 9012 9500 +14397 3482 3305 3686 1292 9521 9344 9725 7331 +14398 3482 540 3600 3305 9521 6579 9639 9344 +14399 5600 2340 428 1784 11639 8379 6467 7823 +14400 4512 2756 4536 1493 10551 8795 10575 7532 +14401 1234 3487 538 3164 7273 9526 6577 9203 +14402 552 3223 1118 3458 6591 9262 7157 9497 +14403 2563 5746 1485 3839 8602 11785 7524 9878 +14404 1502 4340 1959 4563 7541 10379 7998 10602 +14405 1136 3786 1772 4846 7175 9825 7811 10885 +14406 3433 3469 2918 1302 9472 9508 8957 7341 +14407 5619 2395 1483 4207 11658 8434 7522 10246 +14408 4112 455 3708 2796 10151 6494 9747 8835 +14409 3456 3276 3468 1264 9495 9315 9507 7303 +14410 1592 4880 617 4246 7631 10919 6656 10285 +14411 917 4596 1981 2952 6956 10635 8020 8991 +14412 540 3482 1185 3204 6579 9521 7224 9243 +14413 3739 5478 4831 768 9778 11517 10870 6807 +14414 834 4803 2640 6237 6873 10842 8679 12276 +14415 3577 3458 2982 1276 9616 9497 9021 7315 +14416 835 2171 5684 5793 6874 8210 11723 11832 +14417 3297 1082 3167 3512 9336 7121 9206 9551 +14418 3509 1154 2571 2779 9548 7193 8610 8818 +14419 348 4293 1517 4432 6387 10332 7556 10471 +14420 311 4136 1507 2638 6350 10175 7546 8677 +14421 3623 3286 3642 1335 9662 9325 9681 7374 +14422 4415 489 3109 2124 10454 6528 9148 8163 +14423 4779 2237 4129 1260 10818 8276 10168 7299 +14424 3886 1301 3212 2801 9925 7340 9251 8840 +14425 381 3589 1991 3343 6420 9628 8030 9382 +14426 3100 1191 5338 836 9139 7230 11377 6875 +14427 3192 3948 3894 3858 9231 9987 9933 9897 +14428 1294 3196 551 3597 7333 9235 6590 9636 +14429 5522 5008 2892 2639 11561 11047 8931 8678 +14430 5516 1405 3550 2423 11555 7444 9589 8462 +14431 3636 3729 2966 2965 9675 9768 9005 9004 +14432 5990 1790 4513 2522 12029 7829 10552 8561 +14433 5990 2522 3792 683 12029 8561 9831 6722 +14434 5040 5523 2173 2172 11079 11562 8212 8211 +14435 3530 3306 3803 1377 9569 9345 9842 7416 +14436 1162 3744 2544 5714 7201 9783 8583 11753 +14437 1528 3027 561 3591 7567 9066 6600 9630 +14438 4312 732 4859 2022 10351 6771 10898 8061 +14439 4949 855 5616 1954 10988 6894 11655 7993 +14440 3664 3574 3409 1317 9703 9613 9448 7356 +14441 554 3171 1187 3519 6593 9210 7226 9558 +14442 5867 308 3349 2464 11906 6347 9388 8503 +14443 5200 3473 1753 2311 11239 9512 7792 8350 +14444 4555 2676 4182 224 10594 8715 10221 6263 +14445 6047 2428 3252 1199 12086 8467 9291 7238 +14446 738 3426 2411 5882 6777 9465 8450 11921 +14447 2838 3765 4634 1105 8877 9804 10673 7144 +14448 6142 2075 4439 1630 12181 8114 10478 7669 +14449 4318 1584 3047 4789 10357 7623 9086 10828 +14450 4820 2476 5673 4309 10859 8515 11712 10348 +14451 4228 560 3371 2589 10267 6599 9410 8628 +14452 5180 2105 1572 4160 11219 8144 7611 10199 +14453 1313 3639 563 3521 7352 9678 6602 9560 +14454 4139 201 5310 2545 10178 6240 11349 8584 +14455 5396 1394 2172 2173 11435 7433 8211 8212 +14456 1049 3913 250 2926 7088 9952 6289 8965 +14457 218 2534 1359 3291 6257 8573 7398 9330 +14458 2165 5168 1045 4234 8204 11207 7084 10273 +14459 322 3484 1250 3286 6361 9523 7289 9325 +14460 442 3788 2279 6221 6481 9827 8318 12260 +14461 4082 1508 4390 2062 10121 7547 10429 8101 +14462 4037 1401 3147 2353 10076 7440 9186 8392 +14463 3807 586 3673 2806 9846 6625 9712 8845 +14464 4976 2067 4532 1643 11015 8106 10571 7682 +14465 1132 3933 1712 5692 7171 9972 7751 11731 +14466 3465 3339 3103 539 9504 9378 9142 6578 +14467 3624 2671 2702 487 9663 8710 8741 6526 +14468 5887 1551 5426 2516 11926 7590 11465 8555 +14469 4497 2641 2887 222 10536 8680 8926 6261 +14470 1075 2983 498 3643 7114 9022 6537 9682 +14471 3140 523 3793 1431 9179 6562 9832 7470 +14472 5208 2502 3687 2435 11247 8541 9726 8474 +14473 6090 2656 4813 1814 12129 8695 10852 7853 +14474 2326 4350 466 3325 8365 10389 6505 9364 +14475 661 3546 2228 4809 6700 9585 8267 10848 +14476 3453 1342 3636 3454 9492 7381 9675 9493 +14477 3453 3454 3364 1251 9492 9493 9403 7290 +14478 5631 2474 3988 789 11670 8513 10027 6828 +14479 1835 5778 762 3510 7874 11817 6801 9549 +14480 2007 4791 728 4233 8046 10830 6767 10272 +14481 1307 3530 233 3363 7346 9569 6272 9402 +14482 378 5183 1746 4910 6417 11222 7785 10949 +14483 6072 943 3138 2331 12111 6982 9177 8370 +14484 3658 549 2895 3775 9697 6588 8934 9814 +14485 4592 2951 2723 559 10631 8990 8762 6598 +14486 3934 1909 5472 2816 9973 7948 11511 8855 +14487 5478 2459 362 1992 11517 8498 6401 8031 +14488 1330 3326 595 3622 7369 9365 6634 9661 +14489 4657 1457 3789 3094 10696 7496 9828 9133 +14490 4657 3094 6005 777 10696 9133 12044 6816 +14491 4174 2606 1567 5373 10213 8645 7606 11412 +14492 5418 2456 5005 876 11457 8495 11044 6915 +14493 532 3664 1317 3796 6571 9703 7356 9835 +14494 547 3352 1355 3500 6586 9391 7394 9539 +14495 3090 3599 2515 1080 9129 9638 8554 7119 +14496 554 3515 1237 3396 6593 9554 7276 9435 +14497 3587 4345 2309 214 9626 10384 8348 6253 +14498 794 2746 1695 3874 6833 8785 7734 9913 +14499 1042 3963 1232 2621 7081 10002 7271 8660 +14500 3999 2649 4704 719 10038 8688 10743 6758 +14501 1771 3756 681 4708 7810 9795 6720 10747 +14502 732 4312 1933 5529 6771 10351 7972 11568 +14503 1777 3503 933 5016 7816 9542 6972 11055 +14504 4607 744 5774 5789 10646 6783 11813 11828 +14505 3813 3359 3205 313 9852 9398 9244 6352 +14506 1737 4314 2474 5631 7776 10353 8513 11670 +14507 1483 3115 570 4207 7522 9154 6609 10246 +14508 3767 241 3137 3598 9806 6280 9176 9637 +14509 1889 3537 265 4983 7928 9576 6304 11022 +14510 1379 4343 2045 6131 7418 10382 8084 12170 +14511 3935 2168 2354 889 9974 8207 8393 6928 +14512 3484 322 3276 3456 9523 6361 9315 9495 +14513 3484 3456 3461 1321 9523 9495 9500 7360 +14514 4422 5737 5270 1736 10461 11776 11309 7775 +14515 5319 2828 4336 690 11358 8867 10375 6729 +14516 3943 2699 4213 1404 9982 8738 10252 7443 +14517 3783 2876 2874 3799 9822 8915 8913 9838 +14518 4332 2551 3763 624 10371 8590 9802 6663 +14519 5513 3021 5580 2657 11552 9060 11619 8696 +14520 3569 202 3896 1631 9608 6241 9935 7670 +14521 3813 1355 3448 2995 9852 7394 9487 9034 +14522 685 6040 2439 5487 6724 12079 8478 11526 +14523 2665 1271 2705 3178 8704 7310 8744 9217 +14524 585 4551 2292 6190 6624 10590 8331 12229 +14525 4842 707 3213 2137 10881 6746 9252 8176 +14526 4919 2743 4886 576 10958 8782 10925 6615 +14527 3878 550 3488 2758 9917 6589 9527 8797 +14528 4555 1371 4028 1988 10594 7410 10067 8027 +14529 5322 1927 4484 4706 11361 7966 10523 10745 +14530 1671 6028 6000 3514 7710 12067 12039 9553 +14531 4897 2432 4814 494 10936 8471 10853 6533 +14532 2025 6049 1421 4499 8064 12088 7460 10538 +14533 1688 6006 288 3940 7727 12045 6327 9979 +14534 5837 2857 1943 385 11876 8896 7982 6424 +14535 3807 3261 3548 1388 9846 9300 9587 7427 +14536 3539 3357 3267 1296 9578 9396 9306 7335 +14537 1934 3273 867 5966 7973 9312 6906 12005 +14538 5280 1209 3133 2667 11319 7248 9172 8706 +14539 5077 766 2206 3977 11116 6805 8245 10016 +14540 2507 4242 924 5902 8546 10281 6963 11941 +14541 4610 2446 4387 1569 10649 8485 10426 7608 +14542 5345 2453 2452 1050 11384 8492 8491 7089 +14543 242 2978 1514 4367 6281 9017 7553 10406 +14544 4878 2436 4287 632 10917 8475 10326 6671 +14545 3203 3574 3664 1149 9242 9613 9703 7188 +14546 392 5845 1999 4540 6431 11884 8038 10579 +14547 5808 4458 3052 618 11847 10497 9091 6657 +14548 5857 2517 5663 1803 11896 8556 11702 7842 +14549 4871 3181 1363 2330 10910 9220 7402 8369 +14550 3952 2707 3783 1418 9991 8746 9822 7457 +14551 3397 525 2904 3926 9436 6564 8943 9965 +14552 1348 3255 594 3721 7387 9294 6633 9760 +14553 382 5560 1858 3655 6421 11599 7897 9694 +14554 3791 3381 3015 590 9830 9420 9054 6629 +14555 2120 5964 1503 5424 8159 12003 7542 11463 +14556 2654 393 1539 3754 8693 6432 7578 9793 +14557 1386 3220 869 2590 7425 9259 6908 8629 +14558 1602 4545 772 3346 7641 10584 6811 9385 +14559 4618 882 5734 3019 10657 6921 11773 9058 +14560 1856 3464 449 4751 7895 9503 6488 10790 +14561 4659 1015 3518 2632 10698 7054 9557 8671 +14562 3697 3055 3873 953 9736 9094 9912 6992 +14563 563 3362 1228 3521 6602 9401 7267 9560 +14564 5823 2475 3727 849 11862 8514 9766 6888 +14565 3659 3056 3465 1179 9698 9095 9504 7218 +14566 3711 6065 1995 1205 9750 12104 8034 7244 +14567 4688 1391 3954 2765 10727 7430 9993 8804 +14568 5537 1374 3988 2474 11576 7413 10027 8513 +14569 3406 321 3192 3858 9445 6360 9231 9897 +14570 5476 4000 737 2020 11515 10039 6776 8059 +14571 540 3174 1215 3600 6579 9213 7254 9639 +14572 4253 504 6214 2812 10292 6543 12253 8851 +14573 4590 1063 2850 3545 10629 7102 8889 9584 +14574 2160 3759 43 42 8199 9798 139 138 +14575 5019 895 2437 2444 11058 6934 8476 8483 +14576 299 3933 2069 3074 6338 9972 8108 9113 +14577 1403 3691 1358 3506 7442 9730 7397 9545 +14578 5992 2993 3968 1993 12031 9032 10007 8032 +14579 1593 4901 763 4800 7632 10940 6802 10839 +14580 3927 979 2740 2741 9966 7018 8779 8780 +14581 549 3658 1244 3082 6588 9697 7283 9121 +14582 5815 2741 2740 2496 11854 8780 8779 8535 +14583 794 5975 1887 2746 6833 12014 7926 8785 +14584 4449 2288 2251 5797 10488 8327 8290 11836 +14585 1457 4657 1873 5052 7496 10696 7912 11091 +14586 1322 3714 1118 3223 7361 9753 7157 9262 +14587 5753 628 4242 2507 11792 6667 10281 8546 +14588 5312 334 3069 2449 11351 6373 9108 8488 +14589 5496 2959 2532 956 11535 8998 8571 6995 +14590 4357 1042 2621 1987 10396 7081 8660 8026 +14591 5571 1786 305 4729 11610 7825 6344 10768 +14592 4981 2455 4518 1389 11020 8494 10557 7428 +14593 4495 2002 4888 3123 10534 8041 10927 9162 +14594 1472 4359 645 2924 7511 10398 6684 8963 +14595 580 3662 1296 3091 6619 9701 7335 9130 +14596 1639 4793 355 2977 7678 10832 6394 9016 +14597 386 6008 1880 2722 6425 12047 7919 8761 +14598 6008 386 4108 2549 12047 6425 10147 8588 +14599 6009 2549 2548 884 12048 8588 8587 6923 +14600 5069 1104 3707 529 11108 7143 9746 6568 +14601 3810 3015 3381 1321 9849 9054 9420 7360 +14602 3391 1238 3357 3539 9430 7277 9396 9578 +14603 1337 5237 887 2599 7376 11276 6926 8638 +14604 3564 3369 3488 550 9603 9408 9527 6589 +14605 6096 2931 5904 1847 12135 8970 11943 7886 +14606 3136 3922 2920 1217 9175 9961 8959 7256 +14607 60 59 2343 4208 156 155 8382 10247 +14608 3717 579 3275 3013 9756 6618 9314 9052 +14609 2269 2583 3058 6227 8308 8622 9097 12266 +14610 979 3927 1323 2928 7018 9966 7362 8967 +14611 4181 500 4067 2721 10220 6539 10106 8760 +14612 3383 2259 977 4907 9422 8298 7016 10946 +14613 2796 1265 4672 4112 8835 7304 10711 10151 +14614 3601 3240 3137 241 9640 9279 9176 6280 +14615 579 3717 1351 3810 6618 9756 7390 9849 +14616 4762 2652 2934 516 10801 8691 8973 6555 +14617 4175 1316 3445 2486 10214 7355 9484 8525 +14618 4999 2651 4650 1658 11038 8690 10689 7697 +14619 589 3077 1292 3686 6628 9116 7331 9725 +14620 4610 3462 975 2446 10649 9501 7014 8485 +14621 1179 3944 1419 3659 7218 9983 7458 9698 +14622 2563 3839 4267 1486 8602 9878 10306 7525 +14623 5567 4799 2468 1177 11606 10838 8507 7216 +14624 3992 2804 5905 1830 10031 8843 11944 7869 +14625 5750 260 2644 5182 11789 6299 8683 11221 +14626 5819 2520 2843 1740 11858 8559 8882 7779 +14627 4646 865 2150 2003 10685 6904 8189 8042 +14628 3894 3366 3082 1244 9933 9405 9121 7283 +14629 5678 591 3207 2447 11717 6630 9246 8486 +14630 1920 3780 303 5167 7959 9819 6342 11206 +14631 5794 277 2898 2473 11833 6316 8937 8512 +14632 4685 1146 2153 2785 10724 7185 8192 8824 +14633 6037 4039 5189 2102 12076 10078 11228 8141 +14634 3012 3878 3292 1326 9051 9917 9331 7365 +14635 3878 3012 3564 550 9917 9051 9603 6589 +14636 1330 2997 1398 3749 7369 9036 7437 9788 +14637 5344 4788 5110 1231 11383 10827 11149 7270 +14638 1307 3046 1335 3742 7346 9085 7374 9781 +14639 1238 3645 553 3172 7277 9684 6592 9211 +14640 1142 3193 563 3639 7181 9232 6602 9678 +14641 67 3923 6082 68 163 9962 12121 164 +14642 3637 1286 3264 3247 9676 7325 9303 9286 +14643 5786 503 5567 2512 11825 6542 11606 8551 +14644 5603 2177 1937 363 11642 8216 7976 6402 +14645 5803 2582 2321 1223 11842 8621 8360 7262 +14646 3238 322 3286 3623 9277 6361 9325 9662 +14647 5593 2450 6076 408 11632 8489 12115 6447 +14648 3630 313 3311 3233 9669 6352 9350 9272 +14649 3758 1767 5044 901 9797 7806 11083 6940 +14650 5798 1318 6164 2451 11837 7357 12203 8490 +14651 4481 2492 2403 1011 10520 8531 8442 7050 +14652 5443 1112 2780 2490 11482 7151 8819 8529 +14653 4049 840 5637 2835 10088 6879 11676 8874 +14654 4981 470 5436 2455 11020 6509 11475 8494 +14655 5537 2474 4314 514 11576 8513 10353 6553 +14656 523 3881 1311 3793 6562 9920 7350 9832 +14657 331 3076 1112 3716 6370 9115 7151 9755 +14658 5807 2544 3744 344 11846 8583 9783 6383 +14659 3410 1291 3298 3712 9449 7330 9337 9751 +14660 1224 5941 2088 4010 7263 11980 8127 10049 +14661 3637 3247 4921 1148 9676 9286 10960 7187 +14662 2146 2619 5984 240 8185 8658 12023 6279 +14663 3794 1310 3210 3255 9833 7349 9249 9294 +14664 5704 2642 994 405 11743 8681 7033 6444 +14665 1887 3344 377 5385 7926 9383 6416 11424 +14666 4011 2391 1696 210 10050 8430 7735 6249 +14667 4875 951 2483 2484 10914 6990 8522 8523 +14668 4171 278 3536 1318 10210 6317 9575 7357 +14669 6112 1509 5420 2575 12151 7548 11459 8614 +14670 6048 1888 4351 2567 12087 7927 10390 8606 +14671 1698 3715 251 4868 7737 9754 6290 10907 +14672 3847 3222 5199 1546 9886 9261 11238 7585 +14673 3847 3549 2962 2907 9886 9588 9001 8946 +14674 4021 2815 4957 1719 10060 8854 10996 7758 +14675 1134 2682 1004 4058 7173 8721 7043 10097 +14676 3402 567 2846 3580 9441 6606 8885 9619 +14677 5064 1157 2214 2614 11103 7196 8253 8653 +14678 2325 5967 932 3771 8364 12006 6971 9810 +14679 505 4143 1088 3138 6544 10182 7127 9177 +14680 3664 532 3281 3200 9703 6571 9320 9239 +14681 3378 544 3036 3848 9417 6583 9075 9887 +14682 3929 1340 3952 3612 9968 7379 9991 9651 +14683 1054 6214 2503 6232 7093 12253 8542 12271 +14684 543 3652 1102 3991 6582 9691 7141 10030 +14685 2025 2593 858 5209 8064 8632 6897 11248 +14686 5400 2355 2677 307 11439 8394 8716 6346 +14687 4443 1491 3610 244 10482 7530 9649 6283 +14688 809 4475 1453 4029 6848 10514 7492 10068 +14689 545 3654 1240 3259 6584 9693 7279 9298 +14690 806 5640 2085 5406 6845 11679 8124 11445 +14691 4087 3331 5877 1345 10126 9370 11916 7384 +14692 5016 2463 5159 1777 11055 8502 11198 7816 +14693 4617 2501 1464 4388 10656 8540 7503 10427 +14694 4738 3540 4583 1680 10777 9579 10622 7719 +14695 5499 1983 5162 968 11538 8022 11201 7007 +14696 6017 2473 5221 877 12056 8512 11260 6916 +14697 3531 3854 3894 3948 9570 9893 9933 9987 +14698 3458 3577 3468 552 9497 9616 9507 6591 +14699 5080 2554 3348 1256 11119 8593 9387 7295 +14700 4881 2142 5853 3129 10920 8181 11892 9168 +14701 4543 5758 5551 1929 10582 11797 11590 7968 +14702 1377 3622 595 3588 7416 9661 6634 9627 +14703 4045 2720 2825 573 10084 8759 8864 6612 +14704 2964 4811 362 2459 9003 10850 6401 8498 +14705 5640 4015 260 2085 11679 10054 6299 8124 +14706 1380 3463 1176 3833 7419 9502 7215 9872 +14707 4018 3797 3847 1546 10057 9836 9886 7585 +14708 3909 1329 3580 2846 9948 7368 9619 8885 +14709 3907 310 2817 3011 9946 6349 8856 9050 +14710 5512 3272 1024 3653 11551 9311 7063 9692 +14711 5211 1001 5372 2470 11250 7040 11411 8509 +14712 5221 2473 2898 1063 11260 8512 8937 7102 +14713 4859 1875 4061 2735 10898 7914 10100 8774 +14714 4067 1412 3214 2721 10106 7451 9253 8760 +14715 1950 4102 1524 5369 7989 10141 7563 11408 +14716 4096 2713 3593 1397 10135 8752 9632 7436 +14717 2006 5014 427 4820 8045 11053 6466 10859 +14718 5275 606 2685 2475 11314 6645 8724 8514 +14719 1329 3909 599 3008 7368 9948 6638 9047 +14720 1701 5040 454 1958 7740 11079 6493 7997 +14721 3319 570 3115 3819 9358 6609 9154 9858 +14722 3923 2180 4903 6082 9962 8219 10942 12121 +14723 4550 2698 2697 4731 10589 8737 8736 10770 +14724 1997 5023 946 5688 8036 11062 6985 11727 +14725 2242 3285 495 5562 8281 9324 6534 11601 +14726 5060 5187 1945 3748 11099 11226 7984 9787 +14727 1721 1406 1681 5860 7760 7445 7720 11899 +14728 5427 927 4524 2560 11466 6966 10563 8599 +14729 342 3405 2064 5127 6381 9444 8103 11166 +14730 4427 6122 5879 2140 10466 12161 11918 8179 +14731 2922 512 2602 3304 8961 6551 8641 9343 +14732 4763 2689 2688 941 10802 8728 8727 6980 +14733 1325 3801 1633 5027 7364 9840 7672 11066 +14734 1592 4246 1370 4023 7631 10285 7409 10062 +14735 2375 5880 746 4431 8414 11919 6785 10470 +14736 4648 2508 4025 390 10687 8547 10064 6429 +14737 3881 1288 3131 3010 9920 7327 9170 9049 +14738 220 6102 2045 4223 6259 12141 8084 10262 +14739 4664 2533 983 3508 10703 8572 7022 9547 +14740 4749 6092 3337 431 10788 12131 9376 6470 +14741 4869 1526 2802 2633 10908 7565 8841 8672 +14742 3509 4562 2093 1154 9548 10601 8132 7193 +14743 6034 2763 2694 871 12073 8802 8733 6910 +14744 2904 6042 2822 1002 8943 12081 8861 7041 +14745 558 3634 1229 3403 6597 9673 7268 9442 +14746 1393 3080 361 5896 7432 9119 6400 11935 +14747 4794 1493 4536 2644 10833 7532 10575 8683 +14748 1484 3869 303 3780 7523 9908 6342 9819 +14749 2887 1357 2340 2888 8926 7396 8379 8927 +14750 3588 3665 3530 1377 9627 9704 9569 7416 +14751 3516 1329 3008 3616 9555 7368 9047 9655 +14752 1887 5385 1429 4373 7926 11424 7468 10412 +14753 5949 2018 4980 2329 11988 8057 11019 8368 +14754 1463 3529 578 4030 7502 9568 6617 10069 +14755 438 2577 2324 5138 6477 8616 8363 11177 +14756 3827 1131 3616 3008 9866 7170 9655 9047 +14757 4134 1952 5713 3910 10173 7991 11752 9949 +14758 599 3909 1419 4081 6638 9948 7458 10120 +14759 5242 1564 3209 2493 11281 7603 9248 8532 +14760 5242 2493 4204 800 11281 8532 10243 6839 +14761 1642 5098 2318 4958 7681 11137 8357 10997 +14762 5528 2991 1691 4970 11567 9030 7730 11009 +14763 5782 927 2425 2538 11821 6966 8464 8577 +14764 1823 4098 1489 4557 7862 10137 7528 10596 +14765 2222 5911 848 4684 8261 11950 6887 10723 +14766 5567 1177 3071 2512 11606 7216 9110 8551 +14767 4183 3136 3380 1218 10222 9175 9419 7257 +14768 3881 523 3102 3478 9920 6562 9141 9517 +14769 2315 449 5554 3980 8354 6488 11593 10019 +14770 4010 2783 3921 1224 10049 8822 9960 7263 +14771 3818 1343 2454 3043 9857 7382 8493 9082 +14772 3645 3777 3315 553 9684 9816 9354 6592 +14773 4810 1638 4478 2537 10849 7677 10517 8576 +14774 2968 1606 4056 4025 9007 7645 10095 10064 +14775 852 2751 1910 5693 6891 8790 7949 11732 +14776 1201 1919 939 4682 7240 7958 6978 10721 +14777 1839 5329 936 5458 7878 11368 6975 11497 +14778 1301 4188 1467 3212 7340 10227 7506 9251 +14779 4076 1352 3651 2912 10115 7391 9690 8951 +14780 4051 1085 2204 2797 10090 7124 8243 8836 +14781 5151 2623 1155 4138 11190 8662 7194 10177 +14782 3794 3469 3433 1310 9833 9508 9472 7349 +14783 1184 3943 1404 3299 7223 9982 7443 9338 +14784 3772 2199 827 5885 9811 8238 6866 11924 +14785 4303 1971 610 3528 10342 8010 6649 9567 +14786 246 3823 1192 3057 6285 9862 7231 9096 +14787 3636 1342 2753 3729 9675 7381 8792 9768 +14788 465 5408 1107 2499 6504 11447 7146 8538 +14789 3889 1253 3379 2935 9928 7292 9418 8974 +14790 5272 2220 5962 957 11311 8259 12001 6996 +14791 1106 3317 1255 3704 7145 9356 7294 9743 +14792 4188 3755 3749 336 10227 9794 9788 6375 +14793 4799 5567 503 2317 10838 11606 6542 8356 +14794 3616 323 3244 3516 9655 6362 9283 9555 +14795 673 3067 1548 4521 6712 9106 7587 10560 +14796 392 4760 857 2479 6431 10799 6896 8518 +14797 6170 1420 3687 2502 12209 7459 9726 8541 +14798 5192 2430 4107 908 11231 8469 10146 6947 +14799 3778 3149 3598 1121 9817 9188 9637 7160 +14800 4381 2880 2837 647 10420 8919 8876 6686 +14801 4313 381 5716 2803 10352 6420 11755 8842 +14802 2011 5532 2082 2515 8050 11571 8121 8554 +14803 3683 325 3068 3419 9722 6364 9107 9458 +14804 3666 1398 3791 3667 9705 7437 9830 9706 +14805 464 3413 1300 4613 6503 9452 7339 10652 +14806 5249 404 2298 4173 11288 6443 8337 10212 +14807 5804 5378 459 3122 11843 11417 6498 9161 +14808 3992 1277 3064 3248 10031 7316 9103 9287 +14809 571 3619 1162 3957 6610 9658 7201 9996 +14810 3767 3182 3601 241 9806 9221 9640 6280 +14811 3742 3306 3530 1307 9781 9345 9569 7346 +14812 5711 2950 6091 2189 11750 8989 12130 8228 +14813 5667 2530 5547 888 11706 8569 11586 6927 +14814 5665 2688 2689 1208 11704 8727 8728 7247 +14815 345 3331 1798 4755 6384 9370 7837 10794 +14816 5487 2439 844 2896 11526 8478 6883 8935 +14817 692 3825 1259 2888 6731 9864 7298 8927 +14818 5467 2674 4656 383 11506 8713 10695 6422 +14819 5751 2362 1019 3663 11790 8401 7058 9702 +14820 4984 2489 3538 1479 11023 8528 9577 7518 +14821 448 4394 2099 5051 6487 10433 8138 11090 +14822 3712 3667 3791 590 9751 9706 9830 6629 +14823 5810 2555 3966 1831 11849 8594 10005 7870 +14824 3949 387 5142 2897 9988 6426 11181 8936 +14825 1368 2955 605 4078 7407 8994 6644 10117 +14826 4354 2853 2852 745 10393 8892 8891 6784 +14827 6145 314 3474 2491 12184 6353 9513 8530 +14828 2955 5206 4993 605 8994 11245 11032 6644 +14829 4609 4123 2743 1079 10648 10162 8782 7118 +14830 4677 2625 4105 251 10716 8664 10144 6290 +14831 3998 4583 4153 1596 10037 10622 10192 7635 +14832 396 2967 969 2906 6435 9006 7008 8945 +14833 4884 1692 2109 2587 10923 7731 8148 8626 +14834 4072 1139 4720 2771 10111 7178 10759 8810 +14835 5009 2489 4984 909 11048 8528 11023 6948 +14836 1577 4937 778 3314 7616 10976 6817 9353 +14837 4697 1470 4659 2632 10736 7509 10698 8671 +14838 3044 1270 4107 2430 9083 7309 10146 8469 +14839 536 3785 1153 3198 6575 9824 7192 9237 +14840 3775 1295 3375 3217 9814 7334 9414 9256 +14841 3383 813 5179 2259 9422 6852 11218 8298 +14842 1348 3718 239 3439 7387 9757 6278 9478 +14843 5697 3697 2298 854 11736 9736 8337 6893 +14844 1912 5829 757 3321 7951 11868 6796 9360 +14845 5821 2523 2928 1323 11860 8562 8967 7362 +14846 2556 1967 5438 863 8595 8006 11477 6902 +14847 4200 2677 2813 1109 10239 8716 8852 7148 +14848 1211 3723 1183 3236 7250 9762 7222 9275 +14849 3604 1073 2865 4238 9643 7112 8904 10277 +14850 2096 5515 782 3689 8135 11554 6821 9728 +14851 761 5031 2031 5295 6800 11070 8070 11334 +14852 5333 868 2062 3846 11372 6907 8101 9885 +14853 730 2624 2030 4486 6769 8663 8069 10525 +14854 5137 2666 2437 895 11176 8705 8476 6934 +14855 513 6133 1816 2598 6552 12172 7855 8637 +14856 3712 590 3015 3410 9751 6629 9054 9449 +14857 833 5985 2202 5263 6872 12024 8241 11302 +14858 4471 3187 3280 1384 10510 9226 9319 7423 +14859 265 2578 1402 4983 6304 8617 7441 11022 +14860 1583 4784 6234 3736 7622 10823 12273 9775 +14861 520 3740 1284 3374 6559 9779 7323 9413 +14862 1013 4630 227 2805 7052 10669 6266 8844 +14863 5052 3946 2225 924 11091 9985 8264 6963 +14864 3819 1261 3414 3319 9858 7300 9453 9358 +14865 2145 3272 508 4537 8184 9311 6547 10576 +14866 5177 1523 3123 2616 11216 7562 9162 8655 +14867 3726 2989 2511 417 9765 9028 8550 6456 +14868 3531 1293 3361 3854 9570 7332 9400 9893 +14869 5347 1227 3554 3618 11386 7266 9593 9657 +14870 2157 3139 1062 5057 8196 9178 7101 11096 +14871 4204 1577 3314 5796 10243 7616 9353 11835 +14872 1035 5247 1941 6021 7074 11286 7980 12060 +14873 2028 4783 936 5329 8067 10822 6975 11368 +14874 5064 5229 259 3470 11103 11268 6298 9509 +14875 4988 1641 94 2088 11027 7680 190 8127 +14876 4181 2721 3214 1175 10220 8760 9253 7214 +14877 1376 5810 5976 4379 7415 11849 12015 10418 +14878 5547 2530 4629 1091 11586 8569 10668 7130 +14879 3972 1674 2418 4474 10011 7713 8457 10513 +14880 6190 4259 1037 3562 12229 10298 7076 9601 +14881 2908 897 2359 4198 8947 6936 8398 10237 +14882 5774 2324 816 5789 11813 8363 6855 11828 +14883 4170 1683 4252 4911 10209 7722 10291 10950 +14884 252 2795 1032 4094 6291 8834 7071 10133 +14885 4971 2173 5523 324 11010 8212 11562 6363 +14886 3544 2308 508 5450 9583 8347 6547 11489 +14887 455 3556 899 4090 6494 9595 6938 10129 +14888 1758 5479 3049 5840 7797 11518 9088 11879 +14889 6145 3802 1053 3310 12184 9841 7092 9349 +14890 870 5281 2542 2208 6909 11320 8581 8247 +14891 335 4203 1903 4703 6374 10242 7942 10742 +14892 6140 836 5338 3678 12179 6875 11377 9717 +14893 4296 807 4905 3342 10335 6846 10944 9381 +14894 1348 3721 1412 3718 7387 9760 7451 9757 +14895 2986 507 2142 5383 9025 6546 8181 11422 +14896 4081 1419 3944 3757 10120 7458 9983 9796 +14897 391 4892 818 2290 6430 10931 6857 8329 +14898 5245 574 2276 3693 11284 6613 8315 9732 +14899 4962 1904 3528 5973 11001 7943 9567 12012 +14900 1095 3643 498 3879 7134 9682 6537 9918 +14901 4394 2609 3145 1272 10433 8648 9184 7311 +14902 5348 1828 5464 2518 11387 7867 11503 8557 +14903 4004 1231 2156 3080 10043 7270 8195 9119 +14904 2566 432 4304 3884 8605 6471 10343 9923 +14905 6237 2640 5682 1998 12276 8679 11721 8037 +14906 498 2983 1193 3930 6537 9022 7232 9969 +14907 1175 3214 594 3888 7214 9253 6633 9927 +14908 1898 5677 4957 2815 7937 11716 10996 8854 +14909 5714 2544 5134 1907 11753 8583 11173 7946 +14910 2347 6194 3026 978 8386 12233 9065 7017 +14911 1848 4861 621 3095 7887 10900 6660 9134 +14912 1676 3260 218 3291 7715 9299 6257 9330 +14913 3691 321 2913 3558 9730 6360 8952 9597 +14914 3803 3306 3742 588 9842 9345 9781 6627 +14915 747 4407 3145 2609 6786 10446 9184 8648 +14916 753 4827 2134 5023 6792 10866 8173 11062 +14917 3779 3821 3237 1645 9818 9860 9276 7684 +14918 5535 3061 3654 545 11574 9100 9693 6584 +14919 2265 5333 1445 4438 8304 11372 7484 10477 +14920 1258 4047 822 2863 7297 10086 6861 8902 +14921 3974 2933 3072 278 10013 8972 9111 6317 +14922 1083 3122 459 4038 7122 9161 6498 10077 +14923 4830 698 3590 2730 10869 6737 9629 8769 +14924 3767 3598 3149 1341 9806 9637 9188 7380 +14925 3634 3778 3423 1395 9673 9817 9462 7434 +14926 452 2673 1141 4321 6491 8712 7180 10360 +14927 3926 3675 2512 1230 9965 9714 8551 7269 +14928 5748 922 4025 2508 11787 6961 10064 8547 +14929 5887 1124 2394 3065 11926 7163 8433 9104 +14930 3464 1944 5554 449 9503 7983 11593 6488 +14931 4053 4917 3815 1169 10092 10956 9854 7208 +14932 5021 2550 4272 399 11060 8589 10311 6438 +14933 3026 6194 3411 720 9065 12233 9450 6759 +14934 4930 1510 3644 2523 10969 7549 9683 8562 +14935 4186 3245 5191 1491 10225 9284 11230 7530 +14936 4716 2969 5752 2077 10755 9008 11791 8116 +14937 6047 3234 4229 343 12086 9273 10268 6382 +14938 5519 4036 882 2669 11558 10075 6921 8708 +14939 5488 2728 3493 1475 11527 8767 9532 7514 +14940 4416 1171 3565 3698 10455 7210 9604 9737 +14941 4214 2521 3542 1147 10253 8560 9581 7186 +14942 211 5930 1850 3505 6250 11969 7889 9544 +14943 1049 4744 1405 4196 7088 10783 7444 10235 +14944 5312 2526 3576 334 11351 8565 9615 6373 +14945 5959 1039 2852 3626 11998 7078 8891 9665 +14946 5877 3547 4667 1864 11916 9586 10706 7903 +14947 3832 3642 3286 1250 9871 9681 9325 7289 +14948 5436 2896 844 2455 11475 8935 6883 8494 +14949 754 4184 1622 3218 6793 10223 7661 9257 +14950 2670 5717 4917 478 8709 11756 10956 6517 +14951 5979 2702 2671 727 12018 8741 8710 6766 +14952 5536 1987 2621 4699 11575 8026 8660 10738 +14953 4114 2820 3644 1262 10153 8859 9683 7301 +14954 3696 2109 1692 527 9735 8148 7731 6566 +14955 359 4750 2153 5796 6398 10789 8192 11835 +14956 578 3798 1282 3414 6617 9837 7321 9453 +14957 3444 3777 3645 1390 9483 9816 9684 7429 +14958 1332 3020 273 4095 7371 9059 6312 10134 +14959 5471 5997 5391 1808 11510 12036 11430 7847 +14960 334 3925 1203 3069 6373 9964 7242 9108 +14961 3477 5636 4748 2083 9516 11675 10787 8122 +14962 1809 4422 786 4278 7848 10461 6825 10317 +14963 3833 1176 3384 3335 9872 7215 9423 9374 +14964 4851 2094 4061 1495 10890 8133 10100 7534 +14965 880 5515 2096 3194 6919 11554 8135 9233 +14966 5776 2540 2541 907 11815 8579 8580 6946 +14967 5376 2531 4784 1583 11415 8570 10823 7622 +14968 3917 3256 3942 1430 9956 9295 9981 7469 +14969 3526 646 3168 3377 9565 6685 9207 9416 +14970 5160 487 2702 2703 11199 6526 8741 8742 +14971 4153 4583 3540 676 10192 10622 9579 6715 +14972 5067 1409 3966 2555 11106 7448 10005 8594 +14973 5235 2073 4934 837 11274 8112 10973 6876 +14974 6077 1230 2512 3071 12116 7269 8551 9110 +14975 5338 1191 5853 2214 11377 7230 11892 8253 +14976 1411 5754 665 2642 7450 11793 6704 8681 +14977 2124 5287 686 4388 8163 11326 6725 10427 +14978 1098 4605 1612 4927 7137 10644 7651 10966 +14979 5548 1168 2745 4898 11587 7207 8784 10937 +14980 3052 2335 1370 618 9091 8374 7409 6657 +14981 3469 3794 3662 580 9508 9833 9701 6619 +14982 4192 1113 2985 4770 10231 7152 9024 10809 +14983 3911 3667 3712 3298 9950 9706 9751 9337 +14984 5756 3226 3543 1093 11795 9265 9582 7132 +14985 3245 4186 724 1492 9284 10225 6763 7531 +14986 5872 490 5976 2725 11911 6529 12015 8764 +14987 4826 619 3901 2553 10865 6658 9940 8592 +14988 996 3095 1782 2963 7035 9134 7821 9002 +14989 4088 1456 3698 3565 10127 7495 9737 9604 +14990 1587 3540 4738 4739 7626 9579 10777 10778 +14991 3916 2245 5088 1804 9955 8284 11127 7843 +14992 4281 1617 4274 4187 10320 7656 10313 10226 +14993 1861 2785 2153 4750 7900 8824 8192 10789 +14994 4467 2639 2892 357 10506 8678 8931 6396 +14995 3304 4267 3839 4152 9343 10306 9878 10191 +14996 2445 2963 223 6096 8484 9002 6262 12135 +14997 5366 2434 1484 3780 11405 8473 7523 9819 +14998 1631 3896 2471 5079 7670 9935 8510 11118 +14999 579 3810 1321 3461 6618 9849 7360 9500 +15000 5475 3084 1989 1207 11514 9123 8028 7246 +15001 1127 2678 704 4909 7166 8717 6743 10948 +15002 4043 3665 3588 1346 10082 9704 9627 7385 +15003 1880 4301 885 2722 7919 10340 6924 8761 +15004 5614 3303 639 2257 11653 9342 6678 8296 +15005 532 3796 1251 3507 6571 9835 7290 9546 +15006 3441 1187 3237 3821 9480 7226 9276 9860 +15007 573 5870 2526 3088 6612 11909 8565 9127 +15008 1791 3995 276 4587 7830 10034 6315 10626 +15009 2104 4490 2798 333 8143 10529 8837 6372 +15010 3486 2580 4226 1366 9525 8619 10265 7405 +15011 3480 1400 4187 4274 9519 7439 10226 10313 +15012 4172 1382 3557 731 10211 7421 9596 6770 +15013 1030 3528 1904 4402 7069 9567 7943 10441 +15014 5192 1786 236 2430 11231 7825 6275 8469 +15015 1016 5664 2376 4383 7055 11703 8415 10422 +15016 479 3299 1404 4243 6518 9338 7443 10282 +15017 4290 902 5580 3021 10329 6941 11619 9060 +15018 3544 5450 2708 1116 9583 11489 8747 7155 +15019 5596 3805 2287 828 11635 9844 8326 6867 +15020 5598 2646 3671 1327 11637 8685 9710 7366 +15021 373 2539 1155 5141 6412 8578 7194 11180 +15022 3848 1278 2884 3378 9887 7317 8923 9417 +15023 3881 3478 3341 1288 9920 9517 9380 7327 +15024 5270 471 3969 2540 11309 6510 10008 8579 +15025 3854 3361 3159 537 9893 9400 9198 6576 +15026 1468 4144 1153 3785 7507 10183 7192 9824 +15027 2134 4827 2004 2690 8173 10866 8043 8729 +15028 824 1739 4768 1529 6863 7778 10807 7568 +15029 4236 2768 3541 1367 10275 8807 9580 7406 +15030 2503 6214 504 3142 8542 12253 6543 9181 +15031 2747 4016 1512 709 8786 10055 7551 6748 +15032 1341 3852 1129 3767 7380 9891 7168 9806 +15033 2890 971 2921 4206 8929 7010 8960 10245 +15034 1811 4792 1025 3954 7850 10831 7064 9993 +15035 4191 3073 5748 1601 10230 9112 11787 7640 +15036 5310 1020 2695 2545 11349 7059 8734 8584 +15037 5353 3702 1992 362 11392 9741 8031 6401 +15038 911 1432 5056 2610 6950 7471 11095 8649 +15039 6031 2572 3330 1494 12070 8611 9369 7533 +15040 5389 1285 3751 2558 11428 7324 9790 8597 +15041 5134 2544 5807 1743 11173 8583 11846 7782 +15042 4602 1497 5756 2030 10641 7536 11795 8069 +15043 4414 376 2515 3599 10453 6415 8554 9638 +15044 5336 2575 3788 442 11375 8614 9827 6481 +15045 5726 2727 1512 1511 11765 8766 7551 7550 +15046 5458 4085 5370 1839 11497 10124 11409 7878 +15047 4784 2531 1033 3806 10823 8570 7072 9845 +15048 531 4209 1115 2801 6570 10248 7154 8840 +15049 4991 3117 1513 2374 11030 9156 7552 8413 +15050 945 3025 5996 5928 6984 9064 12035 11967 +15051 3978 1447 2942 3868 10017 7486 8981 9907 +15052 5068 2636 788 1793 11107 8675 6827 7832 +15053 4541 1195 3228 3229 10580 7234 9267 9268 +15054 1575 4229 1261 3819 7614 10268 7300 9858 +15055 1842 5073 904 4345 7881 11112 6943 10384 +15056 1060 1863 643 3475 7099 7902 6682 9514 +15057 5474 267 2390 4331 11513 6306 8429 10370 +15058 3254 1160 2553 3901 9293 7199 8592 9940 +15059 5375 375 3567 2637 11414 6414 9606 8676 +15060 5375 2637 4380 1637 11414 8676 10419 7676 +15061 943 6072 1673 4168 6982 12111 7712 10207 +15062 5701 2268 1984 3501 11740 8307 8023 9540 +15063 4546 436 3110 2622 10585 6475 9149 8661 +15064 3406 3858 3894 1244 9445 9897 9933 7283 +15065 4670 2830 5694 1477 10709 8869 11733 7516 +15066 595 3326 1301 3886 6634 9365 7340 9925 +15067 5274 4330 457 3559 11313 10369 6496 9598 +15068 3614 1362 3535 3857 9653 7401 9574 9896 +15069 565 3905 1160 3254 6604 9944 7199 9293 +15070 629 4698 1059 2586 6668 10737 7098 8625 +15071 2148 5403 205 4190 8187 11442 6244 10229 +15072 367 4046 1745 3928 6406 10085 7784 9967 +15073 3175 3166 3395 610 9214 9205 9434 6649 +15074 3540 1587 5913 5055 9579 7626 11952 11094 +15075 4920 5963 1488 2679 10959 12002 7527 8718 +15076 1508 4082 1939 5205 7547 10121 7978 11244 +15077 5067 2555 5194 282 11106 8594 11233 6321 +15078 4904 2651 4559 1544 10943 8690 10598 7583 +15079 5786 2597 2962 503 11825 8636 9001 6542 +15080 5194 2607 2945 282 11233 8646 8984 6321 +15081 6078 1837 4434 2559 12117 7876 10473 8598 +15082 5198 2053 838 2738 11237 8092 6877 8777 +15083 4884 2991 948 1692 10923 9030 6987 7731 +15084 796 5135 1792 4674 6835 11174 7831 10713 +15085 5888 2615 2744 296 11927 8654 8783 6335 +15086 728 4791 6195 3290 6767 10830 12234 9329 +15087 1287 4308 2233 6158 7326 10347 8272 12197 +15088 5870 573 2825 3216 11909 6612 8864 9255 +15089 5974 2628 2180 881 12013 8667 8219 6920 +15090 4283 3079 3445 1316 10322 9118 9484 7355 +15091 1773 5825 2522 4513 7812 11864 8561 10552 +15092 5261 1938 4836 406 11300 7977 10875 6445 +15093 5763 4647 1976 3541 11802 10686 8015 9580 +15094 4854 2561 3829 526 10893 8600 9868 6565 +15095 5049 1113 2871 2872 11088 7152 8910 8911 +15096 2946 5308 1854 1328 8985 11347 7893 7367 +15097 4052 1173 2656 4169 10091 7212 8695 10208 +15098 5747 1549 3614 2617 11786 7588 9653 8656 +15099 4687 2711 6176 18 10726 8750 12215 114 +15100 3366 3894 3854 537 9405 9933 9893 6576 +15101 293 3055 1685 5063 6332 9094 7724 11102 +15102 3298 565 3254 3911 9337 6604 9293 9950 +15103 2646 4690 3496 533 8685 10729 9535 6572 +15104 5315 640 4373 2567 11354 6679 10412 8606 +15105 5315 2567 4351 1581 11354 8606 10390 7620 +15106 5734 2716 252 4094 11773 8755 6291 10133 +15107 5581 1953 934 2579 11620 7992 6973 8618 +15108 6212 743 5578 2676 12251 6782 11617 8715 +15109 4920 2679 4933 1562 10959 8718 10972 7601 +15110 2418 1674 4839 4764 8457 7713 10878 10803 +15111 4671 2660 465 2244 10710 8699 6504 8283 +15112 4415 5435 318 2246 10454 11474 6357 8285 +15113 3624 903 2221 2671 9663 6942 8260 8710 +15114 5260 1568 5745 3476 11299 7607 11784 9515 +15115 3476 1108 5948 5260 9515 7147 11987 11299 +15116 1113 4192 211 2871 7152 10231 6250 8910 +15117 3991 5468 5195 543 10030 11507 11234 6582 +15118 20 3912 2348 21 116 9951 8387 117 +15119 1148 4216 326 2839 7187 10255 6365 8878 +15120 6090 633 4169 2656 12129 6672 10208 8695 +15121 388 2894 1030 4402 6427 8933 7069 10441 +15122 4712 374 5770 3221 10751 6413 11809 9260 +15123 3090 1080 3635 4008 9129 7119 9674 10047 +15124 4253 2812 2945 1156 10292 8851 8984 7195 +15125 1139 4072 1622 3859 7178 10111 7661 9898 +15126 2017 3596 782 5515 8056 9635 6821 11554 +15127 2595 3815 2200 763 8634 9854 8239 6802 +15128 213 4805 695 3455 6252 10844 6734 9494 +15129 1104 4821 1640 3707 7143 10860 7679 9746 +15130 5648 4285 1079 1555 11687 10324 7118 7594 +15131 4724 2634 2016 735 10763 8673 8055 6774 +15132 3146 4337 2668 994 9185 10376 8707 7033 +15133 313 3630 1355 3813 6352 9669 7394 9852 +15134 1278 3848 1053 3802 7317 9887 7092 9841 +15135 4971 324 5689 1140 11010 6363 11728 7179 +15136 5364 1414 4906 2316 11403 7453 10945 8355 +15137 6104 1900 3288 5244 12143 7939 9327 11283 +15138 767 2823 1357 5397 6806 8862 7396 11436 +15139 1731 3816 805 4709 7770 9855 6844 10748 +15140 642 4874 2034 3730 6681 10913 8073 9769 +15141 3888 3609 4732 1175 9927 9648 10771 7214 +15142 4011 4484 861 2391 10050 10523 6900 8430 +15143 4392 4639 3522 1597 10431 10678 9561 7636 +15144 5605 212 2779 2571 11644 6251 8818 8610 +15145 4504 291 2691 3843 10543 6330 8730 9882 +15146 3529 1346 3956 4121 9568 7385 9995 10160 +15147 4684 848 3265 5854 10723 6887 9304 11893 +15148 656 3508 1653 4718 6695 9547 7692 10757 +15149 3473 535 2409 4623 9512 6574 8448 10662 +15150 1616 5440 2943 5024 7655 11479 8982 11063 +15151 1537 4270 479 4243 7576 10309 6518 10282 +15152 4333 483 3644 2820 10372 6522 9683 8859 +15153 3791 1398 2997 3832 9830 7437 9036 9871 +15154 859 3412 6223 3411 6898 9451 12262 9450 +15155 3125 1306 3867 5065 9164 7345 9906 11104 +15156 2013 5951 1001 5846 8052 11990 7040 11885 +15157 6112 2575 5336 1034 12151 8614 11375 7073 +15158 4287 2814 3930 1490 10326 8853 9969 7529 +15159 669 4693 3030 5731 6708 10732 9069 11770 +15160 4305 2845 3463 1380 10344 8884 9502 7419 +15161 5402 4268 1304 2778 11441 10307 7343 8817 +15162 2879 4213 2699 990 8918 10252 8738 7029 +15163 6192 1611 5894 2905 12231 7650 11933 8944 +15164 3900 5925 1725 3183 9939 11964 7764 9222 +15165 5685 4494 2038 463 11724 10533 8077 6502 +15166 4752 2613 5765 1799 10791 8652 11804 7838 +15167 6070 4753 2484 2483 12109 10792 8523 8522 +15168 4215 1266 2837 2880 10254 7305 8876 8919 +15169 4726 2143 4089 1437 10765 8182 10128 7476 +15170 5630 2652 2359 897 11669 8691 8398 6936 +15171 3857 571 2617 3614 9896 6610 8656 9653 +15172 1034 5336 1618 2723 7073 11375 7657 8762 +15173 5582 823 5393 2612 11621 6862 11432 8651 +15174 4570 1363 3181 3908 10609 7402 9220 9947 +15175 433 2942 1447 4151 6472 8981 7486 10190 +15176 4163 2010 514 4694 10202 8049 6553 10733 +15177 3926 1230 6077 3397 9965 7269 12116 9436 +15178 227 3150 1836 4017 6266 9189 7875 10056 +15179 3492 3957 2955 1368 9531 9996 8994 7407 +15180 4814 2601 2437 494 10853 8640 8476 6533 +15181 4886 2743 4123 1055 10925 8782 10162 7094 +15182 2984 822 2351 5542 9023 6861 8390 11581 +15183 1908 5182 1059 4698 7947 11221 7098 10737 +15184 5885 827 2796 3708 11924 6866 8835 9747 +15185 3944 1179 3262 3363 9983 7218 9301 9402 +15186 1137 3567 2031 5031 7176 9606 8070 11070 +15187 1093 4486 2030 5756 7132 10525 8069 11795 +15188 1024 3111 1554 4655 7063 9150 7593 10694 +15189 4606 2862 4626 1827 10645 8901 10665 7866 +15190 3506 584 3651 3892 9545 6623 9690 9931 +15191 214 5772 2700 3587 6253 11811 8739 9626 +15192 5603 2328 4516 1624 11642 8367 10555 7663 +15193 1733 3656 326 4216 7772 9695 6365 10255 +15194 4987 1547 4582 3063 11026 7586 10621 9102 +15195 5459 3762 5190 1772 11498 9801 11229 7811 +15196 2108 4978 3393 2584 8147 11017 9432 8623 +15197 4660 862 2556 2922 10699 6901 8595 8961 +15198 2869 519 4887 4327 8908 6558 10926 10366 +15199 5395 2585 1691 819 11434 8624 7730 6858 +15200 3992 3248 2978 242 10031 9287 9017 6281 +15201 1454 3735 717 3967 7493 9774 6756 10006 +15202 4558 4894 3710 1012 10597 10933 9749 7051 +15203 5550 3808 4840 1990 11589 9847 10879 8029 +15204 6114 2187 5545 3900 12153 8226 11584 9939 +15205 1101 3849 1752 3632 7140 9888 7791 9671 +15206 5635 2606 4747 970 11674 8645 10786 7009 +15207 404 5458 936 2594 6443 11497 6975 8633 +15208 2016 4029 264 5442 8055 10068 6303 11481 +15209 5660 1137 5031 2774 11699 7176 11070 8813 +15210 5660 2774 4482 1738 11699 8813 10521 7777 +15211 1795 4142 370 5343 7834 10181 6409 11382 +15212 4322 2841 2170 886 10361 8880 8209 6925 +15213 4376 1441 3466 4681 10415 7480 9505 10720 +15214 1968 4872 1711 3690 8007 10911 7750 9729 +15215 1438 4093 1044 3070 7477 10132 7083 9109 +15216 4457 3179 3351 1043 10496 9218 9390 7082 +15217 4420 597 4642 2754 10459 6636 10681 8793 +15218 672 4847 1668 4453 6711 10886 7707 10492 +15219 4853 4501 5802 230 10892 10540 11841 6269 +15220 1481 3619 571 3857 7520 9658 6610 9896 +15221 3898 5680 5563 2125 9937 11719 11602 8164 +15222 4247 971 2890 2889 10286 7010 8929 8928 +15223 4807 467 2941 1057 10846 6506 8980 7096 +15224 4545 4671 2244 772 10584 10710 8283 6811 +15225 5173 2789 1783 951 11212 8828 7822 6990 +15226 4368 596 3217 3375 10407 6635 9256 9414 +15227 5499 968 4103 3024 11538 7007 10142 9063 +15228 4286 1416 3942 3256 10325 7455 9981 9295 +15229 3256 4248 4741 4286 9295 10287 10780 10325 +15230 5750 2627 2085 260 11789 8666 8124 6299 +15231 4354 997 2654 3754 10393 7036 8693 9793 +15232 4520 3360 5200 1163 10559 9399 11239 7202 +15233 5542 1369 4315 2984 11581 7408 10354 9023 +15234 882 4618 2033 2669 6921 10657 8072 8708 +15235 6153 2687 3097 1281 12192 8726 9136 7320 +15236 919 4601 2065 3074 6958 10640 8104 9113 +15237 1208 3016 1965 5665 7247 9055 8004 11704 +15238 4270 1076 3378 2884 10309 7115 9417 8923 +15239 2124 3109 1290 5287 8163 9148 7329 11326 +15240 6226 2131 2568 5091 12265 8170 8607 11130 +15241 4414 3893 4127 376 10453 9932 10166 6415 +15242 5691 718 2253 2623 11730 6757 8292 8662 +15243 4501 2752 6177 499 10540 8791 12216 6538 +15244 522 2605 1166 5003 6561 8644 7205 11042 +15245 1315 5212 1659 3680 7354 11251 7698 9719 +15246 2199 3772 230 4800 8238 9811 6269 10839 +15247 5720 1798 3331 4087 11759 7837 9370 10126 +15248 5982 2248 960 2910 12021 8287 6999 8949 +15249 6077 3071 2469 300 12116 9110 8508 6339 +15250 4037 2353 1607 208 10076 8392 7646 6247 +15251 1506 4502 1781 4595 7545 10541 7820 10634 +15252 5086 2570 787 1012 11125 8609 6826 7051 +15253 555 4510 1645 3237 6594 10549 7684 9276 +15254 3595 3480 3017 1222 9634 9519 9056 7261 +15255 5647 3005 3134 213 11686 9044 9173 6252 +15256 4677 5186 1485 2625 10716 11225 7524 8664 +15257 4546 2622 909 4984 10585 8661 6948 11023 +15258 4440 5015 825 1872 10479 11054 6864 7911 +15259 4408 942 4044 3075 10447 6981 10083 9114 +15260 4062 234 3703 3292 10101 6273 9742 9331 +15261 5464 2379 1624 4516 11503 8418 7663 10555 +15262 4516 740 2518 5464 10555 6779 8557 11503 +15263 5832 614 3960 5864 11871 6653 9999 11903 +15264 4247 2889 577 5350 10286 8928 6616 11389 +15265 1199 4030 578 3257 7238 10069 6617 9296 +15266 1533 3401 562 3230 7572 9440 6601 9269 +15267 4614 1450 2261 5685 10653 7489 8300 11724 +15268 4806 3053 2605 522 10845 9092 8644 6561 +15269 5702 604 2816 2631 11741 6643 8855 8670 +15270 4842 2137 4611 992 10881 8176 10650 7031 +15271 4979 1273 2364 2794 11018 7312 8403 8833 +15272 416 2347 978 5572 6455 8386 7017 11611 +15273 5059 456 4942 5112 11098 6495 10981 11151 +15274 4029 2016 2634 809 10068 8055 8673 6848 +15275 5264 2054 5553 2972 11303 8093 11592 9011 +15276 1214 4386 1494 3330 7253 10425 7533 9369 +15277 5735 2637 3567 1137 11774 8676 9606 7176 +15278 4605 4183 3979 1612 10644 10222 10018 7651 +15279 3832 1250 3381 3791 9871 7289 9420 9830 +15280 3523 825 5015 5416 9562 6864 11054 11455 +15281 653 5827 1959 3462 6692 11866 7998 9501 +15282 2521 4214 4117 798 8560 10253 10156 6837 +15283 4767 1531 3958 2655 10806 7570 9997 8694 +15284 2087 3653 1308 6038 8126 9692 7347 12077 +15285 4573 349 2992 4372 10612 6388 9031 10411 +15286 1800 5667 888 3368 7839 11706 6927 9407 +15287 5037 1202 3481 4755 11076 7241 9520 10794 +15288 1172 2886 793 5429 7211 8925 6832 11468 +15289 2767 843 2584 6125 8806 6882 8623 12164 +15290 6125 6135 1232 2767 12164 12174 7271 8806 +15291 1381 4071 219 3309 7420 10110 6258 9348 +15292 5209 2467 3835 255 11248 8506 9874 6294 +15293 4171 1174 3974 278 10210 7213 10013 6317 +15294 4576 3853 2859 1476 10615 9892 8898 7515 +15295 3957 3492 2617 571 9996 9531 8656 6610 +15296 6224 1208 2689 2718 12263 7247 8728 8757 +15297 85 84 2729 4825 181 180 8768 10864 +15298 1522 3638 1661 4230 7561 9677 7700 10269 +15299 4696 2968 4025 922 10735 9007 10064 6961 +15300 4779 3844 3260 1408 10818 9883 9299 7447 +15301 5799 3045 747 2609 11838 9084 6786 8648 +15302 3982 309 2822 3517 10021 6348 8861 9556 +15303 670 4064 1931 3627 6709 10103 7970 9666 +15304 1933 5121 1029 4479 7972 11160 7068 10518 +15305 6164 1318 3536 2878 12203 7357 9575 8917 +15306 5194 1376 4375 2607 11233 7415 10414 8646 +15307 1141 3611 1762 4321 7180 9650 7801 10360 +15308 5585 1156 2945 2607 11624 7195 8984 8646 +15309 2007 4233 1091 5248 8046 10272 7130 11287 +15310 6114 3900 3183 2384 12153 9939 9222 8423 +15311 3389 253 4911 4252 9428 6292 10950 10291 +15312 5362 541 1847 3513 11401 6580 7886 9552 +15313 6057 4390 846 2133 12096 10429 6885 8172 +15314 3450 1272 3145 354 9489 7311 9184 6393 +15315 1790 5463 2401 3586 7829 11502 8440 9625 +15316 1557 2989 305 3828 7596 9028 6344 9867 +15317 1101 3936 1773 3661 7140 9975 7812 9700 +15318 5334 2614 2214 507 11373 8653 8253 6546 +15319 5908 630 3073 4191 11947 6669 9112 10230 +15320 5033 1526 4830 2730 11072 7565 10869 8769 +15321 769 4998 1983 5499 6808 11037 8022 11538 +15322 5926 1557 4255 2535 11965 7596 10294 8574 +15323 5102 4943 2012 823 11141 10982 8051 6862 +15324 6045 2185 1378 4585 12084 8224 7417 10624 +15325 4062 3292 3878 1361 10101 9331 9917 7400 +15326 4941 2618 1847 541 10980 8657 7886 6580 +15327 4081 3252 2428 599 10120 9291 8467 6638 +15328 1438 4077 591 4093 7477 10116 6630 10132 +15329 5802 835 5793 2851 11841 6874 11832 8890 +15330 6231 5092 825 3523 12270 11131 6864 9562 +15331 5696 74 73 2650 11735 170 169 8689 +15332 5617 4250 1605 2971 11656 10289 7644 9010 +15333 11 10 3307 6186 107 106 9346 12225 +15334 3346 5874 435 2640 9385 11913 6474 8679 +15335 93 92 2783 4010 189 188 8822 10049 +15336 2127 4496 2040 5649 8166 10535 8079 11688 +15337 3138 5700 2261 505 9177 11739 8300 6544 +15338 6189 2842 3110 436 12228 8881 9149 6475 +15339 5494 1035 6220 2574 11533 7074 12259 8613 +15340 1396 4084 602 4008 7435 10123 6641 10047 +15341 4491 1877 403 5909 10530 7916 6442 11948 +15342 4079 270 4742 1863 10118 6309 10781 7902 +15343 4156 3978 3868 910 10195 10017 9907 6949 +15344 1854 5308 3589 6173 7893 11347 9628 12212 +15345 2886 1172 2551 4509 8925 7211 8590 10548 +15346 965 3387 1638 4810 7004 9426 7677 10849 +15347 1507 5066 925 2638 7546 11105 6964 8677 +15348 6098 2710 5918 697 12137 8749 11957 6736 +15349 4046 367 4309 5673 10085 6406 10348 11712 +15350 3939 1356 4097 506 9978 7395 10136 6545 +15351 5537 514 2010 2733 11576 6553 8049 8772 +15352 5903 1787 269 3213 11942 7826 6308 9252 +15353 3700 3948 3192 1403 9739 9987 9231 7442 +15354 4913 470 3903 3048 10952 6509 9942 9087 +15355 5598 864 4180 2646 11637 6903 10219 8685 +15356 728 5089 2089 4233 6767 11128 8128 10272 +15357 233 4043 1463 3757 6272 10082 7502 9796 +15358 4746 724 4186 1647 10785 6763 10225 7686 +15359 4165 3609 3888 1469 10204 9648 9927 7508 +15360 4165 343 4732 3609 10204 6382 10771 9648 +15361 2663 460 6060 5803 8702 6499 12099 11842 +15362 1981 4531 1454 4756 8020 10570 7493 10795 +15363 985 3395 2026 6119 7024 9434 8065 12158 +15364 2510 6050 1379 6131 8549 12089 7418 12170 +15365 6093 1766 5404 2908 12132 7805 11443 8947 +15366 1733 4921 546 3945 7772 10960 6585 9984 +15367 595 3956 1346 3588 6634 9995 7385 9627 +15368 3668 3917 3974 1174 9707 9956 10013 7213 +15369 6120 1167 4290 3021 12159 7206 10329 9060 +15370 1820 5217 2129 3743 7859 11256 8168 9782 +15371 5103 2649 3999 1571 11142 8688 10038 7610 +15372 4117 2980 6210 798 10156 9019 12249 6837 +15373 4136 3157 4339 1297 10175 9196 10378 7336 +15374 5245 2628 4582 574 11284 8667 10621 6613 +15375 3956 595 3886 3605 9995 6634 9925 9644 +15376 3605 1530 4121 3956 9644 7569 10160 9995 +15377 4959 2193 4622 1690 10998 8232 10661 7729 +15378 1448 2719 4339 4678 7487 8758 10378 10717 +15379 4790 95 94 1641 10829 191 190 7680 +15380 3486 1366 1956 6107 9525 7405 7995 12146 +15381 1735 4743 1171 4416 7774 10782 7210 10455 +15382 1383 4018 1546 4019 7422 10057 7585 10058 +15383 4384 1136 4846 2931 10423 7175 10885 8970 +15384 4599 303 3927 2741 10638 6342 9966 8780 +15385 430 5493 1374 2643 6469 11532 7413 8682 +15386 5388 384 4869 2633 11427 6423 10908 8672 +15387 4492 3090 4008 602 10531 9129 10047 6641 +15388 4492 1472 3599 3090 10531 7511 9638 9129 +15389 1835 3986 928 5357 7874 10025 6967 11396 +15390 4943 5102 420 2624 10982 11141 6459 8663 +15391 4148 1901 226 3629 10187 7940 6265 9668 +15392 3863 4369 4239 648 9902 10408 10278 6687 +15393 2066 5221 1063 4590 8105 11260 7102 10629 +15394 5509 2880 4381 1440 11548 8919 10420 7479 +15395 5129 3010 3131 600 11168 9049 9170 6639 +15396 5032 1570 4704 2649 11071 7609 10743 8688 +15397 5717 827 2199 2200 11756 6866 8238 8239 +15398 1775 4377 680 4421 7814 10416 6719 10460 +15399 5872 3014 4655 490 11911 9053 10694 6529 +15400 1733 3945 909 3657 7772 9984 6948 9696 +15401 1819 702 2135 5164 7858 6741 8174 11203 +15402 3491 1761 3094 3789 9530 7800 9133 9828 +15403 3386 1446 2656 1173 9425 7485 8695 7212 +15404 5379 311 5398 2882 11418 6350 11437 8921 +15405 4775 2706 3728 1563 10814 8745 9767 7602 +15406 5713 391 2290 3293 11752 6430 8329 9332 +15407 5227 4892 3501 1984 11266 10931 9540 8023 +15408 4228 1778 4600 4777 10267 7817 10639 10816 +15409 5618 930 4024 2661 11657 6969 10063 8700 +15410 5618 2661 4206 1665 11657 8700 10245 7704 +15411 5840 615 3638 3141 11879 6654 9677 9180 +15412 5563 3232 5001 752 11602 9271 11040 6791 +15413 1670 4828 2161 4855 7709 10867 8200 10894 +15414 35 5246 2284 36 131 11285 8323 132 +15415 4183 598 3922 3136 10222 6637 9961 9175 +15416 2722 4731 2697 386 8761 10770 8736 6425 +15417 2400 6034 871 4950 8439 12073 6910 10989 +15418 1464 4415 2124 4388 7503 10454 8163 10427 +15419 234 4062 1534 3533 6273 10101 7573 9572 +15420 4147 594 3255 3210 10186 6633 9294 9249 +15421 4503 3373 3367 2817 10542 9412 9406 8856 +15422 1126 3804 1785 3431 7165 9843 7824 9470 +15423 4790 1641 4601 2762 10829 7680 10640 8801 +15424 6224 2718 1573 4266 12263 8757 7612 10305 +15425 1467 3422 1487 4075 7506 9461 7526 10114 +15426 4694 2775 3127 1399 10733 8814 9166 7438 +15427 4086 1638 3387 4452 10125 7677 9426 10491 +15428 3700 607 3531 3948 9739 6646 9570 9987 +15429 4485 1943 6167 2985 10524 7982 12206 9024 +15430 6153 4737 4300 2687 12192 10776 10339 8726 +15431 4497 1923 759 4797 10536 7962 6798 10836 +15432 1037 4259 1303 3048 7076 10298 7342 9087 +15433 1545 3959 1521 3960 7584 9998 7560 9999 +15434 5263 2202 6016 3076 11302 8241 12055 9115 +15435 2334 4955 641 5477 8373 10994 6680 11516 +15436 1549 4088 250 4003 7588 10127 6289 10042 +15437 5540 2802 575 3751 11579 8841 6614 9790 +15438 5892 2655 4274 1617 11931 8694 10313 7656 +15439 1976 5915 1367 3541 8015 11954 7406 9580 +15440 5703 2821 4596 917 11742 8860 10635 6956 +15441 2042 5624 705 5114 8081 11663 6744 11153 +15442 5472 2660 5337 981 11511 8699 11376 7020 +15443 4320 3354 534 6088 10359 9393 6573 12127 +15444 325 3146 2357 5243 6364 9185 8396 11282 +15445 4798 973 2486 3445 10837 7012 8525 9484 +15446 4265 3057 2998 1120 10304 9096 9037 7159 +15447 5122 3760 5561 1284 11161 9799 11600 7323 +15448 5387 2658 3421 878 11426 8697 9460 6917 +15449 4660 2922 3304 4152 10699 8961 9343 10191 +15450 5721 2149 5745 750 11760 8188 11784 6789 +15451 2679 433 3946 4933 8718 6472 9985 10972 +15452 4196 3169 3913 1049 10235 9208 9952 7088 +15453 3644 1510 2805 4311 9683 7549 8844 10350 +15454 1530 3605 1115 4382 7569 9644 7154 10421 +15455 586 4109 1519 4850 6625 10148 7558 10889 +15456 1469 3888 594 4147 7508 9927 6633 10186 +15457 4275 3398 2911 1096 10314 9437 8950 7135 +15458 4967 72 71 2959 11006 168 167 8998 +15459 5029 1665 4206 2921 11068 7704 10245 8960 +15460 5029 2921 80 79 11068 8960 176 175 +15461 4474 957 5962 2592 10513 6996 12001 8631 +15462 6177 3475 2250 4875 12216 9514 8289 10914 +15463 5101 4060 3890 1365 11140 10099 9929 7404 +15464 5137 2663 5803 1223 11176 8702 11842 7262 +15465 2788 622 4261 5267 8827 6661 10300 11306 +15466 5333 2265 6187 868 11372 8304 12226 6907 +15467 5285 1625 4897 2666 11324 7664 10936 8705 +15468 5135 1304 5228 3602 11174 7343 11267 9641 +15469 4889 1421 5628 2943 10928 7460 11667 8982 +15470 1749 4392 679 4323 7788 10431 6718 10362 +15471 5239 246 3057 4265 11278 6285 9096 10304 +15472 5971 2663 5137 895 12010 8702 11176 6934 +15473 4009 4701 2786 820 10048 10740 8825 6859 +15474 4621 3845 4107 587 10660 9884 10146 6626 +15475 4858 4225 1724 891 10897 10264 7763 6930 +15476 485 3942 1416 3774 6524 9981 7455 9813 +15477 4769 3327 2342 1107 10808 9366 8381 7146 +15478 5317 3355 838 2053 11356 9394 6877 8092 +15479 1744 4131 5669 5218 7783 10170 11708 11257 +15480 4621 587 2807 5346 10660 6626 8846 11385 +15481 2924 4414 3599 1472 8963 10453 9638 7511 +15482 1435 3889 261 4126 7474 9928 6300 10165 +15483 4096 1397 3982 3517 10135 7436 10021 9556 +15484 456 3455 2693 4942 6495 9494 8732 10981 +15485 648 4133 1517 3863 6687 10172 7556 9902 +15486 4615 2793 2891 935 10654 8832 8930 6974 +15487 2669 644 4375 5519 8708 6683 10414 11558 +15488 5117 1001 5951 2724 11156 7040 11990 8763 +15489 6218 923 2370 2732 12257 6962 8409 8771 +15490 3042 231 4166 4310 9081 6270 10205 10349 +15491 4423 3358 5992 2219 10462 9397 12031 8258 +15492 3758 901 5729 3773 9797 6940 11768 9812 +15493 1750 3740 520 4675 7789 9779 6559 10714 +15494 5384 2165 5880 440 11423 8204 11919 6479 +15495 4144 3341 3478 1153 10183 9380 9517 7192 +15496 5280 2667 5866 915 11319 8706 11905 6954 +15497 5951 720 2229 2724 11990 6759 8268 8763 +15498 1456 4118 712 3698 7495 10157 6751 9737 +15499 5979 1090 2703 2702 12018 7129 8742 8741 +15500 5033 2730 3590 1484 11072 8769 9629 7523 +15501 4615 3040 4557 1489 10654 9079 10596 7528 +15502 4615 935 5210 3040 10654 6974 11249 9079 +15503 5772 1913 5439 2700 11811 7952 11478 8739 +15504 1369 3579 955 4269 7408 9618 6994 10308 +15505 4367 1151 4137 2988 10406 7190 10176 9027 +15506 4694 514 4314 2775 10733 6553 10353 8814 +15507 723 5490 3130 4019 6762 11529 9169 10058 +15508 5626 1331 3907 3011 11665 7370 9946 9050 +15509 1460 3905 565 4275 7499 9944 6604 10314 +15510 1843 3862 1111 5588 7882 9901 7150 11627 +15511 472 4746 1647 1406 6511 10785 7686 7445 +15512 4999 1658 2854 2339 11038 7697 8893 8378 +15513 2266 2701 78 77 8305 8740 174 173 +15514 4685 2785 5835 706 10724 8824 11874 6745 +15515 832 4619 2395 5619 6871 10658 8434 11658 +15516 1948 5267 4261 6035 7987 11306 10300 12074 +15517 3517 1150 3497 4096 9556 7189 9536 10135 +15518 1048 5813 2354 3842 7087 11852 8393 9881 +15519 4503 2817 310 5437 10542 8856 6349 11476 +15520 1056 5491 215 2591 7095 11530 6254 8630 +15521 5267 1948 399 4272 11306 7987 6438 10311 +15522 6095 1851 5918 2710 12134 7890 11957 8749 +15523 37 36 2284 4695 133 132 8323 10734 +15524 3566 3720 872 2305 9605 9759 6911 8344 +15525 5273 2692 3224 883 11312 8731 9263 6922 +15526 6174 3166 3175 1768 12213 9205 9214 7807 +15527 1360 2692 468 5629 7399 8731 6507 11668 +15528 4088 3565 2926 250 10127 9604 8965 6289 +15529 5776 2818 4217 1736 11815 8857 10256 7775 +15530 5057 2700 5439 804 11096 8739 11478 6843 +15531 634 4305 1380 3606 6673 10344 7419 9645 +15532 5618 2701 2266 930 11657 8740 8305 6969 +15533 5618 1665 5029 2701 11657 7704 11068 8740 +15534 4229 3234 3257 1261 10268 9273 9296 7300 +15535 3480 4274 2655 608 9519 10313 8694 6647 +15536 3772 5885 3708 1178 9811 11924 9747 7217 +15537 5007 385 1943 4485 11046 6424 7982 10524 +15538 5755 515 5305 2793 11794 6554 11344 8832 +15539 5511 396 2906 2886 11550 6435 8945 8925 +15540 3978 4156 4372 1431 10017 10195 10411 7470 +15541 4808 577 4240 3051 10847 6616 10279 9090 +15542 4099 1609 4454 4521 10138 7648 10493 10560 +15543 1217 3718 1412 4067 7256 9757 7451 10106 +15544 275 4026 1567 4140 6314 10065 7606 10179 +15545 3145 4407 5307 1662 9184 10446 11346 7701 +15546 5814 3963 6107 4488 11853 10002 12146 10527 +15547 4080 2674 5467 1279 10119 8713 11506 7318 +15548 2269 4425 1019 5779 8308 10464 7058 11818 +15549 5175 1017 2545 2695 11214 7056 8584 8734 +15550 4043 233 3530 3665 10082 6272 9569 9704 +15551 5590 1749 5307 2686 11629 7788 11346 8725 +15552 5734 882 4036 2716 11773 6921 10075 8755 +15553 5579 742 4319 3633 11618 6781 10358 9672 +15554 5830 2072 5303 497 11869 8111 11342 6536 +15555 5496 2696 4024 1626 11535 8735 10063 7665 +15556 4020 841 1865 3795 10059 6880 7904 9834 +15557 627 5940 1836 4160 6666 11979 7875 10199 +15558 5202 2696 5496 956 11241 8735 11535 6995 +15559 811 3724 1770 4022 6850 9763 7809 10061 +15560 873 4125 1760 5038 6912 10164 7799 11077 +15561 1584 4318 831 4589 7623 10357 6870 10628 +15562 3698 712 3208 4416 9737 6751 9247 10455 +15563 4483 531 2801 3212 10522 6570 8840 9251 +15564 2585 5395 1556 4950 8624 11434 7595 10989 +15565 4856 838 1881 3408 10895 6877 7920 9447 +15566 4877 2929 3955 1298 10916 8968 9994 7337 +15567 5556 904 2697 2698 11595 6943 8736 8737 +15568 1533 3834 1527 3401 7572 9873 7566 9440 +15569 5527 2771 4720 1434 11566 8810 10759 7473 +15570 5539 771 5289 1706 11578 6810 11328 7745 +15571 5013 2184 2987 5586 11052 8223 9026 11625 +15572 5764 4885 3060 309 11803 10924 9099 6348 +15573 3529 4121 3798 578 9568 10160 9837 6617 +15574 5390 2699 3943 232 11429 8738 9982 6271 +15575 5719 1004 2682 2683 11758 7043 8721 8722 +15576 4453 2960 4229 1575 10492 8999 10268 7614 +15577 372 6200 2984 4315 6411 12239 9023 10354 +15578 3770 1242 2326 3325 9809 7281 8365 9364 +15579 5873 4797 3372 2937 11912 10836 9411 8976 +15580 4368 3375 3438 1268 10407 9414 9477 7307 +15581 5049 2872 5501 675 11088 8911 11540 6714 +15582 4637 2052 1239 3572 10676 8091 7278 9611 +15583 74 5696 5708 75 170 11735 11747 171 +15584 5708 5696 930 2266 11747 11735 6969 8305 +15585 1720 4510 555 3723 7759 10549 6594 9762 +15586 6043 2009 1040 2754 12082 8048 7079 8793 +15587 5633 423 5852 2829 11672 6462 11891 8868 +15588 5945 3285 2242 1103 11984 9324 8281 7142 +15589 4016 2319 4050 1110 10055 8358 10089 7149 +15590 5242 2711 4687 1564 11281 8750 10726 7603 +15591 1684 4224 1547 4316 7723 10263 7586 10355 +15592 5365 2415 4568 2018 11404 8454 10607 8057 +15593 4716 1855 4471 2969 10755 7894 10510 9008 +15594 4097 3674 6215 1833 10136 9713 12254 7872 +15595 5237 2151 5396 887 11276 8190 11435 6926 +15596 4005 1494 4386 4040 10044 7533 10425 10079 +15597 5679 405 994 2668 11718 6444 7033 8707 +15598 5350 577 4808 2732 11389 6616 10847 8771 +15599 3911 4141 3666 3667 9950 10180 9705 9706 +15600 3497 2368 1161 5927 9536 8407 7200 11966 +15601 5565 2717 4199 1065 11604 8756 10238 7104 +15602 2664 5438 1966 6025 8703 11477 8005 12064 +15603 1857 4549 1618 5672 7896 10588 7657 11711 +15604 5117 2724 2229 1442 11156 8763 8268 7481 +15605 6139 2547 3251 1433 12178 8586 9290 7472 +15606 4710 993 5614 2728 10749 7032 11653 8767 +15607 5308 2946 5070 1021 11347 8985 11109 7060 +15608 6027 632 4287 1490 12066 6671 10326 7529 +15609 2147 5178 1776 2807 8186 11217 7815 8846 +15610 5008 630 2072 2892 11047 6669 8111 8931 +15611 4725 3293 4693 669 10764 9332 10732 6708 +15612 3978 1431 3793 1447 10017 7470 9832 7486 +15613 2916 521 2698 4550 8955 6560 8737 10589 +15614 1393 5766 2257 6147 7432 11805 8296 12186 +15615 3930 1193 3603 4344 9969 7232 9642 10383 +15616 1600 4041 1498 4235 7639 10080 7537 10274 +15617 5437 310 4199 2717 11476 6349 10238 8756 +15618 5798 3842 5495 775 11837 9881 11534 6814 +15619 4606 1090 5979 2333 10645 7129 12018 8372 +15620 5749 395 4238 2865 11788 6434 10277 8904 +15621 719 5041 991 2726 6758 11080 7030 8765 +15622 1699 5950 886 4711 7738 11989 6925 10750 +15623 1969 6150 758 4073 8008 12189 6797 10112 +15624 3769 3670 5365 989 9808 9709 11404 7028 +15625 1542 4523 2028 4934 7581 10562 8067 10973 +15626 1628 5099 2156 5282 7667 11138 8195 11321 +15627 235 3779 1646 4040 6274 9818 7685 10079 +15628 5277 2969 4471 1384 11316 9008 10510 7423 +15629 4515 3727 2475 1102 10554 9766 8514 7141 +15630 5808 1919 1201 4458 11847 7958 7240 10497 +15631 1734 5912 999 2750 7773 11951 7038 8789 +15632 1542 3470 259 4523 7581 9509 6298 10562 +15633 232 3370 1422 4326 6271 9409 7461 10365 +15634 4580 2247 3594 1726 10619 8286 9633 7765 +15635 4965 1003 2620 2749 11004 7042 8659 8788 +15636 4935 1575 3819 3115 10974 7614 9858 9154 +15637 5419 64 63 4027 11458 160 159 10066 +15638 3626 1672 6026 2076 9665 7711 12065 8115 +15639 2036 5841 2037 4649 8075 11880 8076 10688 +15640 1922 2952 411 4524 7961 8991 6450 10563 +15641 575 2802 1526 5033 6614 8841 7565 11072 +15642 1831 5297 1977 2725 7870 11336 8016 8764 +15643 2729 5174 2450 1536 8768 11213 8489 7575 +15644 5174 2729 5591 923 11213 8768 11630 6962 +15645 522 5003 1409 2864 6561 11042 7448 8903 +15646 298 1672 3626 2852 6337 7711 9665 8891 +15647 14 6078 2559 15 110 12117 8598 111 +15648 799 5541 2029 4100 6838 11580 8068 10139 +15649 318 6185 2256 4589 6357 12224 8295 10628 +15650 4017 1262 3644 4311 10056 7301 9683 10350 +15651 474 3155 1263 4559 6513 9194 7302 10598 +15652 3161 5953 2829 915 9200 11992 8868 6954 +15653 6184 3481 3492 1368 12223 9520 9531 7407 +15654 4227 1128 2737 3442 10266 7167 8776 9481 +15655 4725 1375 5713 3293 10764 7414 11752 9332 +15656 2235 5433 1853 4514 8274 11472 7892 10553 +15657 6027 1350 3023 2768 12066 7389 9062 8807 +15658 6224 5612 3016 1208 12263 11651 9055 7247 +15659 6030 1045 3835 2467 12069 7084 9874 8506 +15660 5164 497 4765 1819 11203 6536 10804 7858 +15661 1596 4153 1424 4132 7635 10192 7463 10171 +15662 4251 4681 3466 1452 10290 10720 9505 7491 +15663 4795 2001 945 5928 10834 8040 6984 11967 +15664 6043 3633 4319 2009 12082 9672 10358 8048 +15665 2421 810 2776 3502 8460 6849 8815 9541 +15666 1827 5028 488 4473 7866 11067 6527 10512 +15667 5488 3030 3452 770 11527 9069 9491 6809 +15668 1440 4381 1362 4003 7479 10420 7401 10042 +15669 1379 3246 4841 4343 7418 9285 10880 10382 +15670 3432 4292 3353 1069 9471 10331 9392 7108 +15671 5839 2756 4512 613 11878 8795 10551 6652 +15672 5839 1715 4944 2756 11878 7754 10983 8795 +15673 4724 2112 1041 3822 10763 8151 7080 9861 +15674 4850 3118 3585 1534 10889 9157 9624 7573 +15675 5802 2851 5083 230 11841 8890 11122 6269 +15676 6214 1054 2945 2812 12253 7093 8984 8851 +15677 5477 641 4213 2879 11516 6680 10252 8918 +15678 5477 2879 4663 1666 11516 8918 10702 7705 +15679 6208 2917 4200 1852 12247 8956 10239 7891 +15680 6208 959 5132 2917 12247 6998 11171 8956 +15681 83 5591 2729 84 179 11630 8768 180 +15682 5964 3851 4378 1503 12003 9890 10417 7542 +15683 4177 5311 3845 1535 10216 11350 9884 7574 +15684 681 3756 1531 4767 6720 9795 7570 10806 +15685 5527 1434 3765 2838 11566 7473 9804 8877 +15686 4001 3914 4433 1427 10040 9953 10472 7466 +15687 2780 1112 3076 6016 8819 7151 9115 12055 +15688 2270 3935 889 5340 8309 9974 6928 11379 +15689 5864 2763 6034 1891 11903 8802 12073 7930 +15690 5379 3157 4136 311 11418 9196 10175 6350 +15691 1829 4368 1268 4806 7868 10407 7307 10845 +15692 4806 1268 2734 3053 10845 7307 8773 9092 +15693 5817 1636 2516 3885 11856 7675 8555 9924 +15694 3566 1337 5193 3720 9605 7376 11232 9759 +15695 3773 5729 1720 5341 9812 11768 7759 11380 +15696 5993 2782 2781 1114 12032 8821 8820 7153 +15697 5031 761 6115 2774 11070 6800 12154 8813 +15698 4363 3570 5163 542 10402 9609 11202 6581 +15699 5398 2044 5681 2742 11437 8083 11720 8781 +15700 2154 5766 1393 5896 8193 11805 7432 11935 +15701 3911 1487 3422 4141 9950 7526 9461 10180 +15702 4320 1069 3353 3354 10359 7108 9392 9393 +15703 5565 1928 772 4212 11604 7967 6811 10251 +15704 1441 5838 339 4292 7480 11877 6378 10331 +15705 5084 854 2594 1274 11123 6893 8633 7313 +15706 3502 2776 2777 1333 9541 8815 8816 7372 +15707 1961 3318 3621 6193 8000 9357 9660 12232 +15708 2516 3695 1124 5887 8555 9734 7163 11926 +15709 5160 2703 5434 1741 11199 8742 11473 7780 +15710 2306 5789 816 6235 8345 11828 6855 12274 +15711 5777 1905 5761 4279 11816 7944 11800 10318 +15712 2258 4447 601 3817 8297 10486 6640 9856 +15713 1171 4743 486 2899 7210 10782 6525 8938 +15714 4744 1049 2926 2899 10783 7088 8965 8938 +15715 5600 2923 3899 692 11639 8962 9938 6731 +15716 57 3 56 5444 153 7 152 11483 +15717 4823 2116 306 3201 10862 8155 6345 9240 +15718 1693 3621 1000 4972 7732 9660 7039 11011 +15719 5311 908 4107 3845 11350 6947 10146 9884 +15720 6106 1383 4019 3130 12145 7422 10058 9169 +15721 1270 3044 1501 4032 7309 9083 7540 10071 +15722 4292 3432 3466 1441 10331 9471 9505 7480 +15723 926 3052 4458 5650 6965 9091 10497 11689 +15724 5468 1349 2293 3568 11507 7388 8332 9607 +15725 1224 5296 1723 3365 7263 11335 7762 9404 +15726 4764 1890 4843 2418 10803 7929 10882 8457 +15727 1444 4413 725 4862 7483 10452 6764 10901 +15728 4766 3177 4056 1606 10805 9216 10095 7645 +15729 5289 2356 460 3947 11328 8395 6499 9986 +15730 1704 4953 1981 4596 7743 10992 8020 10635 +15731 5584 1446 3386 521 11623 7485 9425 6560 +15732 3473 5200 3360 535 9512 11239 9399 6574 +15733 4982 1389 4518 3752 11021 7428 10557 9791 +15734 5694 3044 2430 236 11733 9083 8469 6275 +15735 4618 3019 3354 1407 10657 9058 9393 7446 +15736 4224 1684 4776 3679 10263 7723 10815 9718 +15737 4224 3679 2276 574 10263 9718 8315 6613 +15738 4041 1600 5124 5827 10080 7639 11163 11866 +15739 1883 3738 773 5553 7922 9777 6812 11592 +15740 4904 1544 4517 2235 10943 7583 10556 8274 +15741 947 4604 2458 3049 6986 10643 8497 9088 +15742 45 5269 1960 46 141 11308 7999 142 +15743 2228 5181 1614 4809 8267 11220 7653 10848 +15744 4995 961 4014 2919 11034 7000 10053 8958 +15745 5981 2274 3937 668 12020 8313 9976 6707 +15746 4833 438 5054 2338 10872 6477 11093 8377 +15747 5573 6206 34 33 11612 12245 130 129 +15748 586 3807 1388 4109 6625 9846 7427 10148 +15749 3528 1030 2745 4303 9567 7069 8784 10342 +15750 931 5452 1909 3934 6970 11491 7948 9973 +15751 413 5727 2140 4193 6452 11766 8179 10232 +15752 3117 4777 4600 1513 9156 10816 10639 7552 +15753 2745 1030 2894 4898 8784 7069 8933 10937 +15754 5318 2885 5096 1553 11357 8924 11135 7592 +15755 77 76 5708 2266 173 172 11747 8305 +15756 5183 1711 4862 2809 11222 7750 10901 8848 +15757 5480 3429 5585 644 11519 9468 11624 6683 +15758 5860 256 1726 3594 11899 6295 7765 9633 +15759 2691 4472 739 3838 8730 10511 6778 9877 +15760 5419 4027 4462 1924 11458 10066 10501 7963 +15761 4818 1358 3691 3558 10857 7397 9730 9597 +15762 6021 2525 6220 1035 12060 8564 12259 7074 +15763 5119 790 1984 2268 11158 6829 8023 8307 +15764 5657 4002 2564 556 11696 10041 8603 6595 +15765 1554 4627 490 4655 7593 10666 6529 10694 +15766 5154 1552 4257 1874 11193 7591 10296 7913 +15767 4987 397 4217 2818 11026 6436 10256 8857 +15768 1524 4102 1917 4260 7563 10141 7956 10299 +15769 5527 368 4072 2771 11566 6407 10111 8810 +15770 6122 844 2439 5879 12161 6883 8478 11918 +15771 5440 1616 5402 2778 11479 7655 11441 8817 +15772 4931 2833 3246 418 10970 8872 9285 6457 +15773 515 3582 2086 5305 6554 9621 8125 11344 +15774 5719 2338 5661 1004 11758 8377 11700 7043 +15775 4971 1140 4429 1290 11010 7179 10468 7329 +15776 3088 982 2517 4511 9127 7021 8556 10550 +15777 4430 3734 46 1960 10469 9773 142 7999 +15778 6159 2836 5125 1734 12198 8875 11164 7773 +15779 4898 2894 6021 1941 10937 8933 12060 7980 +15780 657 3219 1117 4434 6696 9258 7156 10473 +15781 5711 2782 2490 2780 11750 8821 8529 8819 +15782 5048 2063 729 4409 11087 8102 6768 10448 +15783 3344 5938 3022 377 9383 11977 9061 6416 +15784 4996 316 3215 3000 11035 6355 9254 9039 +15785 4920 1562 4734 3920 10959 7601 10773 9959 +15786 647 2837 972 4948 6686 8876 7011 10987 +15787 434 4571 2063 5048 6473 10610 8102 11087 +15788 5725 5835 4674 1792 11764 11874 10713 7831 +15789 249 3225 1427 4433 6288 9264 7466 10472 +15790 27 5481 28 2 123 11520 124 6 +15791 251 4105 1813 4868 6290 10144 7852 10907 +15792 3990 379 4654 4324 10029 6418 10693 10363 +15793 6196 1971 280 3771 12235 8010 6319 9810 +15794 1472 4492 1755 4359 7511 10531 7794 10398 +15795 5895 2408 864 5598 11934 8447 6903 11637 +15796 5093 3007 4073 758 11132 9046 10112 6797 +15797 1306 3125 1029 5121 7345 9164 7068 11160 +15798 2792 936 4783 5792 8831 6975 10822 11831 +15799 1594 4457 1840 4575 7633 10496 7879 10614 +15800 5126 617 4880 3081 11165 6656 10919 9120 +15801 957 3532 1578 5272 6996 9571 7617 11311 +15802 5890 2804 3992 242 11929 8843 10031 6281 +15803 5200 2311 5286 1163 11239 8350 11325 7202 +15804 5958 2211 4143 505 11997 8250 10182 6544 +15805 4257 3323 3065 664 10296 9362 9104 6703 +15806 1467 4075 619 4001 7506 10114 6658 10040 +15807 1545 5301 295 2784 7584 11340 6334 8823 +15808 4796 2840 2811 302 10835 8879 8850 6341 +15809 1550 4118 1456 4276 7589 10157 7495 10315 +15810 6042 1150 3517 2822 12081 7189 9556 8861 +15811 6044 916 5992 3358 12083 6955 12031 9397 +15812 4128 1615 4264 4445 10167 7654 10303 10484 +15813 6084 1461 2889 2890 12123 7500 8928 8929 +15814 5970 1372 3879 2814 12009 7411 9918 8853 +15815 1636 4231 1434 4232 7675 10270 7473 10271 +15816 4586 1407 3354 3353 10625 7446 9393 9392 +15817 5315 1581 3719 2790 11354 7620 9758 8829 +15818 5315 2790 4552 640 11354 8829 10591 6679 +15819 4104 4059 4305 634 10143 10098 10344 6673 +15820 5763 3181 4871 1788 11802 9220 10910 7827 +15821 5763 502 3908 3181 11802 6541 9947 9220 +15822 975 3462 1959 4340 7014 9501 7998 10379 +15823 4069 4116 2190 830 10108 10155 8229 6869 +15824 5148 5051 2099 1650 11187 11090 8138 7689 +15825 4276 1456 4088 3997 10315 7495 10127 10036 +15826 1451 3615 6222 4636 7490 9654 12261 10675 +15827 5305 2560 2891 2793 11344 8599 8930 8832 +15828 617 3628 1370 4246 6656 9667 7409 10285 +15829 2587 291 2000 4653 8626 6330 8039 10692 +15830 4314 1737 964 2775 10353 7776 7003 8814 +15831 455 4090 1178 3708 6494 10129 7217 9747 +15832 4509 2551 5171 1629 10548 8590 11210 7668 +15833 4302 557 3861 5658 10341 6596 9900 11697 +15834 586 4219 1361 3673 6625 10258 7400 9712 +15835 4403 1056 5378 5804 10442 7095 11417 11843 +15836 4732 2960 4453 1668 10771 8999 10492 7707 +15837 1441 4376 1704 5838 7480 10415 7743 11877 +15838 4035 4059 4104 1516 10074 10098 10143 7555 +15839 2043 3781 852 5693 8082 9820 6891 11732 +15840 4522 3837 5552 1694 10561 9876 11591 7733 +15841 6163 3028 5848 1841 12202 9067 11887 7880 +15842 5833 2939 492 2940 11872 8978 6531 8979 +15843 5833 2940 2576 974 11872 8979 8615 7013 +15844 6026 802 5058 2076 12065 6841 11097 8115 +15845 4188 1301 3326 3755 10227 7340 9365 9794 +15846 5749 2865 1541 3596 11788 8904 7580 9635 +15847 1612 3979 348 4432 7651 10018 6387 10471 +15848 1562 3699 777 4734 7601 9738 6816 10773 +15849 1755 4492 602 4380 7794 10531 6641 10419 +15850 4518 1834 5331 3752 10557 7873 11370 9791 +15851 4655 3014 3653 1024 10694 9053 9692 7063 +15852 6084 3338 1061 4426 12123 9377 7100 10465 +15853 2275 5914 1358 4818 8314 11953 7397 10857 +15854 5837 3224 2692 1360 11876 9263 8731 7399 +15855 5540 942 2633 2802 11579 6981 8672 8841 +15856 5838 2821 4389 339 11877 8860 10428 6378 +15857 5927 1161 2944 2826 11966 7200 8983 8865 +15858 4407 747 2686 5307 10446 6786 8725 11346 +15859 5890 1604 5146 2804 11929 7643 11185 8843 +15860 2150 5094 403 5155 8189 11133 6442 11194 +15861 5306 5858 4578 1027 11345 11897 10617 7066 +15862 5943 4418 2143 4726 11982 10457 8182 10765 +15863 335 4703 1570 3561 6374 10742 7609 9600 +15864 4258 1392 3731 3121 10297 7431 9770 9160 +15865 5953 1334 5633 2829 11992 7373 11672 8868 +15866 4468 1260 2639 4467 10507 7299 8678 10506 +15867 3209 1664 3993 461 9248 7703 10032 6500 +15868 5371 5775 3471 2147 11410 11814 9510 8186 +15869 2563 4398 664 5746 8602 10437 6703 11785 +15870 1937 2177 962 4406 7976 8216 7001 10445 +15871 5041 2861 6199 991 11080 8900 12238 7030 +15872 947 3188 1320 4604 6986 9227 7359 10643 +15873 5819 2927 4698 629 11858 8966 10737 6668 +15874 5819 1740 4269 2927 11858 7779 10308 8966 +15875 5446 4355 1817 2313 11485 10394 7856 8352 +15876 560 4149 1385 3371 6599 10188 7424 9410 +15877 5985 3618 3554 1426 12024 9657 9593 7465 +15878 5535 545 2739 2808 11574 6584 8778 8847 +15879 412 4496 1759 4400 6451 10535 7798 10439 +15880 6117 2494 1352 4076 12156 8533 7391 10115 +15881 4721 2996 17 16 10760 9035 113 112 +15882 4609 1079 4285 3472 10648 7118 10324 9511 +15883 5173 1523 5177 2789 11212 7562 11216 8828 +15884 4059 4035 4144 1468 10098 10074 10183 7507 +15885 6056 1924 4462 3467 12095 7963 10501 9506 +15886 4682 4702 556 2564 10721 10741 6595 8603 +15887 6154 1331 4333 2820 12193 7370 10372 8859 +15888 209 5440 2778 5775 6248 11479 8817 11814 +15889 839 2581 453 5655 6878 8620 6492 11694 +15890 1158 3707 1640 5797 7197 9746 7679 11836 +15891 6159 934 2278 2836 12198 6973 8317 8875 +15892 4162 5392 4132 1424 10201 11431 10171 7463 +15893 5100 2857 5837 1360 11139 8896 11876 7399 +15894 5703 1373 4389 2821 11742 7412 10428 8860 +15895 744 4607 1694 5552 6783 10646 7733 11591 +15896 5893 103 102 2836 11932 199 198 8875 +15897 6129 2818 5776 907 12168 8857 11815 6946 +15898 5379 2882 2869 1336 11418 8921 8908 7375 +15899 4770 2985 6167 699 10809 9024 12206 6738 +15900 5578 1860 4182 2676 11617 7899 10221 8715 +15901 6182 2883 4776 281 12221 8922 10815 6320 +15902 6164 2878 5011 469 12203 8917 11050 6508 +15903 2148 2934 2652 5630 8187 8973 8691 11669 +15904 4162 1424 5294 6115 10201 7463 11333 12154 +15905 4573 4541 3229 349 10612 10580 9268 6388 +15906 4483 3713 4849 531 10522 9752 10888 6570 +15907 6203 708 2964 5197 12242 6747 9003 11236 +15908 4299 677 4764 4839 10338 6716 10803 10878 +15909 1383 6106 2195 3421 7422 12145 8234 9460 +15910 6009 4477 4301 1880 12048 10516 10340 7919 +15911 2061 5075 773 5740 8100 11114 6812 11779 +15912 2457 4824 401 5712 8496 10863 6440 11751 +15913 5995 2856 4539 1541 12034 8895 10578 7580 +15914 3327 222 2887 5583 9366 6261 8926 11622 +15915 1513 4600 1028 3495 7552 10639 7067 9534 +15916 1525 5220 1952 4419 7564 11259 7991 10458 +15917 5995 1073 3483 2856 12034 7112 9522 8895 +15918 2235 4517 220 5433 8274 10556 6259 11472 +15919 4325 4074 945 2001 10364 10113 6984 8040 +15920 6012 5321 13 3613 12051 11360 109 9652 +15921 1649 792 3460 5518 7688 6831 9499 11557 +15922 4307 1528 3591 4306 10346 7567 9630 10345 +15923 6065 4807 2979 1995 12104 10846 9018 8034 +15924 4345 3587 1062 1842 10384 9626 7101 7881 +15925 1245 4571 2611 3836 7284 10610 8650 9875 +15926 978 3026 944 3345 7017 9065 6983 9384 +15927 5839 613 2084 2861 11878 6652 8123 8900 +15928 5839 2861 4203 1715 11878 8900 10242 7754 +15929 5330 1011 3496 2842 11369 7050 9535 8881 +15930 5497 446 2388 2608 11536 6485 8427 8647 +15931 4070 3303 5614 993 10109 9342 11653 7032 +15932 1541 2865 1073 5995 7580 8904 7112 12034 +15933 5757 2885 5318 62 11796 8924 11357 158 +15934 6163 406 4836 3028 12202 6445 10875 9067 +15935 4834 2971 4911 253 10873 9010 10950 6292 +15936 660 3743 1604 4676 6699 9782 7643 10715 +15937 3269 1243 3672 4530 9308 7282 9711 10569 +15938 4849 3097 4392 1597 10888 9136 10431 7636 +15939 1119 4527 600 3131 7158 10566 6639 9170 +15940 5129 3984 924 2225 11168 10023 6963 8264 +15941 4441 5190 3762 812 10480 11229 9801 6851 +15942 4322 451 5314 2841 10361 6490 11353 8880 +15943 1829 2864 2300 5226 7868 8903 8339 11265 +15944 4265 1120 3333 3958 10304 7159 9372 9997 +15945 5050 921 5848 3028 11089 6960 11887 9067 +15946 5050 3028 4836 1561 11089 9067 10875 7600 +15947 3965 6226 5091 1504 10004 12265 11130 7543 +15948 834 5222 1846 6059 6873 11261 7885 12098 +15949 18 17 2996 4687 114 113 9035 10726 +15950 5396 4548 3109 887 11435 10587 9148 6926 +15951 4866 399 1948 2409 10905 6438 7987 8448 +15952 1332 4780 963 3020 7371 10819 7002 9059 +15953 5704 405 2283 3329 11743 6444 8322 9368 +15954 4436 444 1657 2460 10475 6483 7696 8499 +15955 4239 4099 4167 648 10278 10138 10206 6687 +15956 378 3690 1711 5183 6417 9729 7750 11222 +15957 4818 3558 2913 1125 10857 9597 8952 7164 +15958 5508 228 4651 3004 11547 6267 10690 9043 +15959 899 5526 1060 2752 6938 11565 7099 8791 +15960 6228 2908 4198 1807 12267 8947 10237 7846 +15961 2554 5080 832 5619 8593 11119 6871 11658 +15962 5936 3005 5647 1599 11975 9044 11686 7638 +15963 4900 6230 5648 421 10939 12269 11687 6460 +15964 5342 972 2837 2868 11381 7011 8876 8907 +15965 5142 1135 2429 2897 11181 7174 8468 8936 +15966 1516 4166 231 4035 7555 10205 6270 10074 +15967 5354 2869 2882 1005 11393 8908 8921 7044 +15968 2890 441 3338 6084 8929 6480 9377 12123 +15969 4789 3047 2346 1020 10828 9086 8385 7059 +15970 5965 2859 3853 926 12004 8898 9892 6965 +15971 5684 2171 1968 3690 11723 8210 8007 9729 +15972 284 4446 1964 3479 6323 10485 8003 9518 +15973 1589 4594 1637 4411 7628 10633 7676 10450 +15974 1775 5606 2232 4377 7814 11645 8271 10416 +15975 2623 5151 1687 5691 8662 11190 7726 11730 +15976 5320 3570 4363 996 11359 9609 10402 7035 +15977 5340 889 2354 6022 11379 6928 8393 12061 +15978 6212 2676 4555 1988 12251 8715 10594 8027 +15979 5668 2863 822 1914 11707 8902 6861 7953 +15980 1789 4808 3051 6044 7828 10847 9090 12083 +15981 1163 2948 1558 4520 7202 8987 7597 10559 +15982 5191 2427 3610 1491 11230 8466 9649 7530 +15983 2512 3675 1002 5786 8551 9714 7041 11825 +15984 1759 4496 2127 5407 7798 10535 8166 11446 +15985 3935 342 6104 2168 9974 6381 12143 8207 +15986 4828 6098 5201 2161 10867 12137 11240 8200 +15987 4034 716 5744 5787 10073 6755 11783 11826 +15988 5081 272 5140 3087 11120 6311 11179 9126 +15989 5209 858 2139 2467 11248 6897 8178 8506 +15990 468 3430 2059 5629 6507 9469 8098 11668 +15991 445 2873 1059 5431 6484 8912 7098 11470 +15992 6011 693 3263 5204 12050 6732 9302 11243 +15993 6069 3733 1954 393 12108 9772 7993 6432 +15994 4822 5955 2539 1811 10861 11994 8578 7850 +15995 3930 4344 2866 1490 9969 10383 8905 7529 +15996 5418 876 2857 5100 11457 6915 8896 11139 +15997 5179 266 3034 2259 11218 6305 9073 8298 +15998 5501 2872 2871 1085 11540 8911 8910 7124 +15999 715 3953 1832 5597 6754 9992 7871 11636 +16000 4889 2665 4499 1421 10928 8704 10538 7460 +16001 6216 1501 2830 5662 12255 7540 8869 11701 +16002 5530 1471 2270 243 11569 7510 8309 6282 +16003 2120 6198 274 5964 8159 12237 6313 12003 +16004 3303 4070 463 2038 9342 10109 6502 8077 +16005 1804 896 4712 3221 7843 6935 10751 9260 +16006 2990 1047 2936 4879 9029 7086 8975 10918 +16007 4825 3753 86 85 10864 9792 182 181 +16008 3720 4134 3910 872 9759 10173 9949 6911 +16009 5627 2932 4871 952 11666 8971 10910 6991 +16010 4904 814 4650 2651 10943 6853 10689 8690 +16011 992 4556 1586 3811 7031 10595 7625 9850 +16012 4971 1290 3109 4548 11010 7329 9148 10587 +16013 2830 4670 419 5662 8869 10709 6458 11701 +16014 5314 950 2170 2841 11353 6989 8209 8880 +16015 4611 3207 4556 992 10650 9246 10595 7031 +16016 5423 1111 4101 3120 11462 7150 10140 9159 +16017 4277 1867 4928 5950 10316 7906 10967 11989 +16018 6201 635 4995 2919 12240 6674 11034 8958 +16019 1759 5643 866 4400 7798 11682 6905 10439 +16020 4713 2197 826 3555 10752 8236 6865 9594 +16021 3413 694 5466 1300 9452 6733 11505 7339 +16022 2026 5339 1077 4801 8065 11378 7116 10840 +16023 6213 3336 4280 1018 12252 9375 10319 7057 +16024 4586 3353 4292 339 10625 9392 10331 6378 +16025 1027 4580 2198 5306 7066 10619 8237 11345 +16026 4786 3093 3774 1416 10825 9132 9813 7455 +16027 4605 1098 2994 3295 10644 7137 9033 9334 +16028 1821 3518 1015 5994 7860 9557 7054 12033 +16029 5474 4331 2316 1729 11513 10370 8355 7768 +16030 653 4013 1576 4254 6692 10052 7615 10293 +16031 989 5949 2329 2371 7028 11988 8368 8410 +16032 4886 1055 3972 2282 10925 7094 10011 8321 +16033 4824 1737 5631 4091 10863 7776 11670 10130 +16034 5602 1037 3048 3903 11641 7076 9087 9942 +16035 5613 2883 6182 1796 11652 8922 12221 7835 +16036 1371 4866 2409 4028 7410 10905 8448 10067 +16037 5351 1744 1168 3039 11390 7783 7207 9078 +16038 2056 3250 1751 5410 8095 9289 7790 11449 +16039 4202 1515 4349 1498 10241 7554 10388 7537 +16040 5822 2916 4550 1713 11861 8955 10589 7752 +16041 5822 986 2209 2916 11861 7025 8248 8955 +16042 5509 3169 5516 566 11548 9208 11555 6605 +16043 3294 5889 1670 2487 9333 11928 7709 8526 +16044 2055 6161 287 5454 8094 12200 6326 11493 +16045 3871 517 2373 3569 9910 6556 8412 9608 +16046 1539 2853 4354 3754 7578 8892 10393 9793 +16047 1595 3301 1338 4857 7634 9340 7377 10896 +16048 5866 2667 525 3397 11905 8706 6564 9436 +16049 5611 3194 4423 1439 11650 9233 10462 7478 +16050 424 5376 1583 2902 6463 11415 7622 8941 +16051 5487 2896 5436 1866 11526 8935 11475 7905 +16052 1517 4133 1516 4104 7556 10172 7555 10143 +16053 4841 2447 1436 4385 10880 8486 7475 10424 +16054 5399 1006 2264 2902 11438 7045 8303 8941 +16055 6211 1253 3889 1435 12250 7292 9928 7474 +16056 4781 3308 2879 990 10820 9347 8918 7029 +16057 1158 5913 1587 2542 7197 11952 7626 8581 +16058 5674 3372 4797 759 11713 9411 10836 6798 +16059 4481 1011 5330 6180 10520 7050 11369 12219 +16060 47 4697 2632 48 143 10736 8671 144 +16061 5125 101 100 3135 11164 197 196 9174 +16062 3024 4103 3846 337 9063 10142 9885 6376 +16063 4358 797 5091 2568 10397 6836 11130 8607 +16064 365 4482 2181 5608 6404 10521 8220 11647 +16065 1373 5703 2352 5520 7412 11742 8391 11559 +16066 5247 3251 2547 462 11286 9290 8586 6501 +16067 4686 543 5195 3527 10725 6582 11234 9566 +16068 5506 2974 2098 1040 11545 9013 8137 7079 +16069 4282 1515 4202 351 10321 7554 10241 6390 +16070 1517 4293 1590 3863 7556 10332 7629 9902 +16071 5284 2387 5214 1967 11323 8426 11253 8006 +16072 2598 6168 1978 4812 8637 12207 8017 10851 +16073 1651 2903 597 5646 7690 8942 6636 11685 +16074 5385 3970 5104 1429 11424 10009 11143 7468 +16075 5016 3294 437 2463 11055 9333 6476 8502 +16076 6206 2936 35 34 12245 8975 131 130 +16077 829 3817 1682 5944 6868 9856 7721 11983 +16078 5252 1520 5671 2975 11291 7559 11710 9014 +16079 5397 1357 2887 2641 11436 7396 8926 8680 +16080 4386 1214 2635 3737 10425 7253 8674 9776 +16081 4885 1138 2597 3060 10924 7177 8636 9099 +16082 1572 5007 2057 4745 7611 11046 8096 10784 +16083 4561 324 5523 5790 10600 6363 11562 11829 +16084 5365 3670 1314 2415 11404 9709 7353 8454 +16085 1133 6149 516 2934 7172 12188 6555 8973 +16086 5129 600 2192 3984 11168 6639 8231 10023 +16087 1371 6137 2281 4866 7410 12176 8320 10905 +16088 415 4663 2879 3308 6454 10702 8918 9347 +16089 4374 4184 3271 1573 10413 10223 9310 7612 +16090 4184 4374 3859 1622 10223 10413 9898 7661 +16091 4600 3393 4978 1028 10639 9432 11017 7067 +16092 5277 944 5752 2969 11316 6983 11791 9008 +16093 6187 1309 4719 3676 12226 7348 10758 9715 +16094 1085 4051 1972 5501 7124 10090 8011 11540 +16095 4145 2909 2412 320 10184 8948 8451 6359 +16096 6194 2347 859 3411 12233 8386 6898 9450 +16097 3738 5327 3246 1379 9777 11366 9285 7418 +16098 6120 4996 3000 1167 12159 11035 9039 7206 +16099 5320 2445 2618 898 11359 8484 8657 6937 +16100 1829 3784 596 4368 7868 9823 6635 10407 +16101 3048 1303 2613 4913 9087 7342 8652 10952 +16102 572 4838 1397 3593 6611 10877 7436 9632 +16103 4949 5283 3741 217 10988 11322 9780 6256 +16104 6179 3799 2839 326 12218 9838 8878 6365 +16105 2905 5894 2290 818 8944 11933 8329 6857 +16106 611 5574 963 4780 6650 11613 7002 10819 +16107 4457 1594 3860 3179 10496 7633 9899 9218 +16108 4958 1134 5355 3607 10997 7173 11394 9646 +16109 5053 1458 3654 3061 11092 7497 9693 9100 +16110 35 2936 1047 5246 131 8975 7086 11285 +16111 5881 3553 2578 914 11920 9592 8617 6953 +16112 4880 986 3087 3081 10919 7025 9126 9120 +16113 5554 1550 4179 3980 11593 7589 10218 10019 +16114 103 5893 5730 104 199 11932 11769 200 +16115 16 15 2559 4721 112 111 8598 10760 +16116 1831 3966 734 5297 7870 10005 6773 11336 +16117 2989 3726 4729 305 9028 9765 10768 6344 +16118 1016 5234 1588 3007 7055 11273 7627 9046 +16119 4404 3732 2509 1258 10443 9771 8548 7297 +16120 688 3268 1480 4754 6727 9307 7519 10793 +16121 845 4819 1886 4536 6884 10858 7925 10575 +16122 2468 4799 697 5918 8507 10838 6736 11957 +16123 6201 2919 4014 1710 12240 8958 10053 7749 +16124 5206 2955 3957 1162 11245 8994 9996 7201 +16125 203 3745 1415 4440 6242 9784 7454 10479 +16126 1928 5565 1065 3987 7967 11604 7104 10026 +16127 1922 4524 927 5782 7961 10563 6966 11821 +16128 4241 4542 4393 1619 10280 10581 10432 7658 +16129 5628 950 5024 2943 11667 6989 11063 8982 +16130 6086 2416 4870 1682 12125 8455 10909 7721 +16131 4282 1609 4099 4239 10321 7648 10138 10278 +16132 782 5290 1536 3689 6821 11329 7575 9728 +16133 424 5358 3955 2929 6463 11397 9994 8968 +16134 5980 2927 4269 955 12019 8966 10308 6994 +16135 5263 3076 331 2481 11302 9115 6370 8520 +16136 4318 5841 4370 831 10357 11880 10409 6870 +16137 3701 5639 884 2548 9740 11678 6923 8587 +16138 396 5409 1723 2967 6435 11448 7762 9006 +16139 3113 3696 527 5382 9152 9735 6566 11421 +16140 5898 5343 1315 4507 11937 11382 7354 10546 +16141 5197 2964 2459 1219 11236 9003 8498 7258 +16142 5534 1568 3893 1473 11573 7607 9932 7512 +16143 648 4167 1516 4133 6687 10206 7555 10172 +16144 88 87 2262 4539 184 183 8301 10578 +16145 5089 728 3290 3385 11128 6767 9329 9424 +16146 996 2963 2445 5320 7035 9002 8484 11359 +16147 5148 975 4340 2976 11187 7014 10379 9015 +16148 5120 1821 5994 5046 11159 7860 12033 11085 +16149 1460 4275 1096 3951 7499 10314 7135 9990 +16150 3705 4813 2656 1446 9744 10852 8695 7485 +16151 1687 5151 437 5570 7726 11190 6476 11609 +16152 839 5886 1870 2581 6878 11925 7909 8620 +16153 5678 1455 4093 591 11717 7494 10132 6630 +16154 1814 3120 633 6090 7853 9159 6672 12129 +16155 6203 2958 4804 708 12242 8997 10843 6747 +16156 4925 2398 3722 5257 10964 8437 9761 11296 +16157 1516 4167 1548 4166 7555 10206 7587 10205 +16158 5108 2023 5854 3265 11147 8062 11893 9304 +16159 5891 3549 3847 3797 11930 9588 9886 9836 +16160 4668 3650 4213 641 10707 9689 10252 6680 +16161 4668 1537 4243 3650 10707 7576 10282 9689 +16162 3678 5338 2214 1157 9717 11377 8253 7196 +16163 5959 3626 2076 803 11998 9665 8115 6842 +16164 2217 4401 1580 5899 8256 10440 7619 11938 +16165 5889 3294 5016 933 11928 9333 11055 6972 +16166 5279 4154 2787 1344 11318 10193 8826 7383 +16167 6233 229 1956 1366 12272 6268 7995 7405 +16168 6075 4370 5841 2036 12114 10409 11880 8075 +16169 4995 3337 6092 961 11034 9376 12131 7000 +16170 2675 6030 2467 2139 8714 12069 8506 8178 +16171 4369 1515 4282 4239 10408 7554 10321 10278 +16172 2149 5169 3610 749 8188 11208 9649 6788 +16173 5243 1519 4109 4489 11282 7558 10148 10528 +16174 1097 5114 705 3098 7136 11153 6744 9137 +16175 4905 938 3870 3342 10944 6977 9909 9381 +16176 1594 6000 913 3860 7633 12039 6952 9899 +16177 4659 1938 5261 1015 10698 7977 11300 7054 +16178 824 1529 5984 2619 6863 7568 12023 8658 +16179 347 5718 1739 4210 6386 11757 7778 10249 +16180 3750 6148 4429 1140 9789 12187 10468 7179 +16181 1426 4031 2202 5985 7465 10070 8241 12024 +16182 6140 3678 3470 1542 12179 9717 9509 7581 +16183 1589 4411 602 4084 7628 10450 6641 10123 +16184 5149 1443 4625 3563 11188 7482 10664 9602 +16185 6051 2932 2438 701 12090 8971 8477 6740 +16186 1391 4688 293 3392 7430 10727 6332 9431 +16187 5873 2937 3776 767 11912 8976 9815 6806 +16188 2139 5855 1497 4602 8178 11894 7536 10641 +16189 5958 505 2261 3768 11997 6544 8300 9807 +16190 4882 3571 3628 3918 10921 9610 9667 9957 +16191 5252 2975 3070 360 11291 9014 9109 6399 +16192 4985 2505 965 4810 11024 8544 7004 10849 +16193 5833 2296 1087 2939 11872 8335 7126 8978 +16194 4798 3445 3079 1423 10837 9484 9118 7462 +16195 543 4686 2122 3652 6582 10725 8161 9691 +16196 5812 4205 1892 4115 11851 10244 7931 10154 +16197 5108 4155 3938 1353 11147 10194 9977 7392 +16198 6073 4570 1066 3428 12112 10609 7105 9467 +16199 4056 1607 1884 5856 10095 7646 7923 11895 +16200 1567 2958 1050 5373 7606 8997 7089 11412 +16201 5129 1311 3881 3010 11168 7350 9920 9049 +16202 1098 4927 634 3606 7137 10966 6673 9645 +16203 4041 4254 4202 1498 10080 10293 10241 7537 +16204 4537 5931 2248 976 10576 11970 8287 7015 +16205 5931 4537 508 2308 11970 10576 6547 8347 +16206 1482 3891 707 4842 7521 9930 6746 10881 +16207 5647 2310 4112 1599 11686 8349 10151 7638 +16208 1690 4622 2325 6108 7729 10661 8364 12147 +16209 5454 2381 2946 1328 11493 8420 8985 7367 +16210 1950 3147 1401 4964 7989 9186 7440 11003 +16211 1119 3067 673 5018 7158 9106 6712 11057 +16212 1561 3263 1029 5006 7600 9302 7068 11045 +16213 5654 3615 6028 1671 11693 9654 12067 7710 +16214 2735 5876 839 5655 8774 11915 6878 11694 +16215 5465 2956 4033 983 11504 8995 10072 7022 +16216 4727 703 5844 3931 10766 6742 11883 9970 +16217 326 3906 2224 6179 6365 9945 8263 12218 +16218 4221 1433 3251 5494 10260 7472 9290 11533 +16219 5494 3251 5247 1035 11533 9290 11286 7074 +16220 691 5543 1189 3009 6730 11582 7228 9048 +16221 5913 1158 5797 2251 11952 7197 11836 8290 +16222 1569 4387 1621 4364 7608 10426 7660 10403 +16223 2237 4779 1408 3583 8276 10818 7447 9622 +16224 4508 1496 5544 3840 10547 7535 11583 9879 +16225 1391 4822 1811 3954 7430 10861 7850 9993 +16226 4175 2486 2485 493 10214 8525 8524 6532 +16227 4590 3545 2415 1314 10629 9584 8454 7353 +16228 1578 3532 488 5028 7617 9571 6527 11067 +16229 5496 1626 4967 2959 11535 7665 11006 8998 +16230 2025 5209 255 6049 8064 11248 6294 12088 +16231 407 4577 1853 3890 6446 10616 7892 9929 +16232 1720 4700 1645 4510 7759 10739 7684 10549 +16233 690 4336 1267 3865 6729 10375 7306 9904 +16234 655 5402 1616 2990 6694 11441 7655 9029 +16235 5556 2698 521 3386 11595 8737 6560 9425 +16236 4985 4810 2537 649 11024 10849 8576 6688 +16237 6166 5257 3722 1535 12205 11296 9761 7574 +16238 3713 4483 4001 1427 9752 10522 10040 7466 +16239 1627 4342 1576 4294 7666 10381 7615 10333 +16240 4968 737 2252 3119 11007 6776 8291 9158 +16241 1619 4360 1566 4241 7658 10399 7605 10280 +16242 449 2315 3891 4751 6488 8354 9930 10790 +16243 75 5708 76 4 171 11747 172 8 +16244 5534 3418 5977 750 11573 9457 12016 6789 +16245 6200 1914 822 2984 12239 7953 6861 9023 +16246 5462 1735 4416 3208 11501 7774 10455 9247 +16247 5369 1524 2618 4941 11408 7563 8657 10980 +16248 1580 4401 695 2247 7619 10440 6734 8286 +16249 3338 5202 956 2276 9377 11241 6995 8315 +16250 1763 5638 1105 4634 7802 11677 7144 10673 +16251 669 3709 2550 4725 6708 9748 8589 10764 +16252 1875 4150 671 4456 7914 10189 6710 10495 +16253 4565 1697 5676 4273 10604 7736 11715 10312 +16254 1758 5840 3141 5900 7797 11879 9180 11939 +16255 5449 3483 5690 1774 11488 9522 11729 7813 +16256 2143 4418 715 5597 8182 10457 6754 11636 +16257 4844 1036 4063 2848 10883 7075 10102 8887 +16258 5420 3119 2252 1078 11459 9158 8291 7117 +16259 417 4564 709 3726 6456 10603 6748 9765 +16260 4697 47 46 3734 10736 143 142 9773 +16261 5220 3501 4892 391 11259 9540 10931 6430 +16262 5545 1775 4421 5739 11584 7814 10460 11778 +16263 5298 2389 267 3460 11337 8428 6306 9499 +16264 5354 2241 1023 3499 11393 8280 7062 9538 +16265 1878 4630 1013 3546 7917 10669 7052 9585 +16266 1672 298 2557 4740 7711 6337 8596 10779 +16267 5890 2988 4676 1604 11929 9027 10715 7643 +16268 6181 2993 5992 916 12220 9032 12031 6955 +16269 6182 281 3968 2993 12221 6320 10007 9032 +16270 5617 2971 4834 1058 11656 9010 10873 7097 +16271 4918 3680 5569 371 10957 9719 11608 6410 +16272 4986 1586 4295 3277 11025 7625 10334 9316 +16273 4894 817 5945 3710 10933 6856 11984 9749 +16274 5483 3118 4850 1519 11522 9157 10889 7558 +16275 9 1 104 5730 105 5 200 11769 +16276 4742 2091 5963 912 10781 8130 12002 6951 +16277 3771 932 5784 6196 9810 6971 11823 12235 +16278 5231 1703 4713 3555 11270 7742 10752 9594 +16279 4326 4189 6033 232 10365 10228 12072 6271 +16280 683 3792 1514 4525 6722 9831 7553 10564 +16281 4690 1410 2842 3496 10729 7449 8881 9535 +16282 4251 1452 3389 4252 10290 7491 9428 10291 +16283 5604 2977 2518 1031 11643 9016 8557 7070 +16284 724 5733 3557 1492 6763 11772 9596 7531 +16285 2319 781 2471 3896 8358 6820 8510 9935 +16286 707 2647 5903 3213 6746 8686 11942 9252 +16287 1810 6059 708 4804 7849 12098 6747 10843 +16288 363 1937 2316 4906 6402 7976 8355 10945 +16289 3981 475 3116 4914 10020 6514 9155 10953 +16290 4914 1709 4525 3981 10953 7748 10564 10020 +16291 4725 2550 5021 1375 10764 8589 11060 7414 +16292 6181 3051 4240 1796 12220 9090 10279 7835 +16293 5076 1130 2622 3110 11115 7169 8661 9149 +16294 4738 1680 4057 4281 10777 7719 10096 10320 +16295 5615 1989 3084 4679 11654 8028 9123 10718 +16296 4908 2254 446 4438 10947 8293 6485 10477 +16297 2010 4163 751 5681 8049 10202 6790 11720 +16298 6014 2986 2708 1051 12053 9025 8747 7090 +16299 5736 1336 2869 4327 11775 7375 8908 10366 +16300 1725 5712 401 3183 7764 11751 6440 9222 +16301 4667 3547 2249 920 10706 9586 8288 6959 +16302 5873 2641 4497 4797 11912 8680 10536 10836 +16303 5719 2683 2798 1951 11758 8722 8837 7990 +16304 4700 4291 3779 1645 10739 10330 9818 7684 +16305 5186 4152 3839 1485 11225 10191 9878 7524 +16306 4853 1178 2752 4501 10892 7217 8791 10540 +16307 6156 3004 4651 2048 12195 9043 10690 8087 +16308 5165 2831 5956 1392 11204 8870 11995 7431 +16309 5525 3604 4238 1754 11564 9643 10277 7793 +16310 4468 218 3260 3844 10507 6257 9299 9883 +16311 2033 4389 1373 5480 8072 10428 7412 11519 +16312 5333 3846 4103 1445 11372 9885 10142 7484 +16313 1961 5232 1289 263 8000 11271 7328 6302 +16314 859 3829 2561 3412 6898 9868 8600 9451 +16315 4921 3247 3264 546 10960 9286 9303 6585 +16316 6046 5123 5505 2402 12085 11162 11544 8441 +16317 2006 3199 826 5014 8045 9238 6865 11053 +16318 4294 4506 4405 1627 10333 10545 10444 7666 +16319 5414 3226 5756 1497 11453 9265 11795 7536 +16320 4779 1260 4468 3844 10818 7299 10507 9883 +16321 5890 242 4367 2988 11929 6281 10406 9027 +16322 809 6220 2525 4475 6848 12259 8564 10514 +16323 811 4822 1391 3392 6850 10861 7430 9431 +16324 6093 3075 4044 1766 12132 9114 10083 7805 +16325 4709 1913 5772 5451 10748 7952 11811 11490 +16326 1609 4282 351 4328 7648 10321 6390 10367 +16327 743 4520 1558 6144 6782 10559 7597 12183 +16328 6159 1734 2750 4529 12198 7773 8789 10568 +16329 3320 4931 418 2125 9359 10970 6457 8164 +16330 1615 4365 1582 4264 7654 10404 7621 10303 +16331 3004 1449 3128 5508 9043 7488 9167 11547 +16332 842 4673 2049 5868 6881 10712 8088 11907 +16333 1526 4869 1986 4830 7565 10908 8025 10869 +16334 628 3789 1457 4242 6667 9828 7496 10281 +16335 713 4179 1550 4276 6752 10218 7589 10315 +16336 1725 5072 2457 5712 7764 11111 8496 11751 +16337 1970 5845 392 3985 8009 11884 6431 10024 +16338 5181 3368 4335 1614 11220 9407 10374 7653 +16339 5181 384 5388 3368 11220 6423 11427 9407 +16340 4094 1955 3019 5734 10133 7994 9058 11773 +16341 5981 3655 5022 2274 12020 9694 11061 8313 +16342 5722 4929 2218 2384 11761 10968 8257 8423 +16343 4696 922 5748 3073 10735 6961 11787 9112 +16344 4712 896 4504 3843 10751 6935 10543 9882 +16345 1358 5914 1003 3003 7397 11953 7042 9042 +16346 4971 4548 5396 2173 11010 10587 11435 8212 +16347 5364 2316 4331 906 11403 8355 10370 6945 +16348 1963 6111 596 3784 8002 12150 6635 9823 +16349 5659 3431 1785 216 11698 9470 7824 6255 +16350 4696 5008 5522 2968 10735 11047 11561 9007 +16351 5461 865 4646 2419 11500 6904 10685 8458 +16352 4663 1663 5161 1666 10702 7702 11200 7705 +16353 3680 1659 4650 5569 9719 7698 10689 11608 +16354 5412 3763 4848 1046 11451 9802 10887 7085 +16355 3016 5612 2406 801 9055 11651 8445 6840 +16356 3875 4895 2586 1123 9914 10934 8625 7162 +16357 5872 1308 3653 3014 11911 7347 9692 9053 +16358 4098 1823 5538 4948 10137 7862 11577 10987 +16359 5524 2297 3615 1451 11563 8336 9654 7490 +16360 3337 5996 3025 431 9376 12035 9064 6470 +16361 6225 425 6227 3058 12264 6464 12266 9097 +16362 6225 3058 5725 1792 12264 9097 11764 7831 +16363 4280 2373 517 1018 10319 8412 6556 7057 +16364 5646 3032 2513 1651 11685 9071 8552 7690 +16365 1710 4014 268 5116 7749 10053 6307 11155 +16366 6112 1034 2169 3284 12151 7073 8208 9323 +16367 2166 3756 1771 6123 8205 9795 7810 12162 +16368 1894 3022 2185 5759 7933 9061 8224 11798 +16369 4999 474 4559 2651 11038 6513 10598 8690 +16370 5642 999 2513 3032 11681 7038 8552 9071 +16371 1656 4352 1655 4353 7695 10391 7694 10392 +16372 5646 597 4420 3032 11685 6636 10459 9071 +16373 1694 4759 1582 4522 7733 10798 7621 10561 +16374 4342 4202 4254 1576 10381 10241 10293 7615 +16375 5196 2080 4092 1764 11235 8119 10131 7803 +16376 5136 711 4378 4876 11175 6750 10417 10915 +16377 2215 4175 493 5030 8254 10214 6532 11069 +16378 5131 1574 5865 3271 11170 7613 11904 9310 +16379 5131 3271 4184 754 11170 9310 10223 6793 +16380 3758 400 2657 1767 9797 6439 8696 7806 +16381 6132 3862 1843 4771 12171 9901 7882 10810 +16382 95 4790 2762 96 191 10829 8801 192 +16383 4507 217 3741 5259 10546 6256 9780 11298 +16384 5852 423 5000 3037 11891 6462 11039 9076 +16385 6117 340 2552 3685 12156 6379 8591 9724 +16386 3278 5002 25 24 9317 11041 121 120 +16387 6186 5150 12 11 12225 11189 108 107 +16388 5807 344 4557 3040 11846 6383 10596 9079 +16389 5814 3747 1025 2604 11853 9786 7064 8643 +16390 850 6204 1990 4840 6889 12243 8029 10879 +16391 6044 3051 6181 916 12083 9090 12220 6955 +16392 4172 2570 5599 1382 10211 8609 11638 7421 +16393 4885 4675 2907 1138 10924 10714 8946 7177 +16394 2566 4837 853 6169 8605 10876 6892 12208 +16395 651 5525 2107 5296 6690 11564 8146 11335 +16396 839 5876 1838 5886 6878 11915 7877 11925 +16397 5498 3075 6093 638 11537 9114 12132 6677 +16398 5923 1099 2736 3050 11962 7138 8775 9089 +16399 3418 1008 4821 5977 9457 7047 10860 12016 +16400 5840 3049 2458 615 11879 9088 8497 6654 +16401 5475 304 5847 3084 11514 6343 11886 9123 +16402 5808 618 3571 4882 11847 6657 9610 10921 +16403 5741 2081 867 3273 11780 8120 6906 9312 +16404 5741 3273 30 29 11780 9312 126 125 +16405 777 3699 1873 4657 6816 9738 7912 10696 +16406 4442 659 4410 4245 10481 6698 10449 10284 +16407 2184 5013 988 6054 8223 11052 7027 12093 +16408 769 5654 2573 4998 6808 11693 8612 11037 +16409 5249 4085 5458 404 11288 10124 11497 6443 +16410 846 4390 1508 4391 6885 10429 7547 10430 +16411 4288 4567 4624 1667 10327 10606 10663 7706 +16412 5974 881 2155 3063 12013 6920 8194 9102 +16413 5905 3061 5535 1830 11944 9100 11574 7869 +16414 4857 3915 3748 290 10896 9954 9787 6329 +16415 6005 4888 4734 777 12044 10927 10773 6816 +16416 5790 5523 5040 1701 11829 11562 11079 7740 +16417 650 4424 1569 4364 6689 10463 7608 10403 +16418 1743 3967 717 5134 7782 10006 6756 11173 +16419 4702 5107 6094 1975 10741 11146 12133 8014 +16420 1007 3459 1209 4873 7046 9498 7248 10912 +16421 5887 3065 3323 1551 11926 9104 9362 7590 +16422 2980 4117 5738 1558 9019 10156 11777 7597 +16423 1423 3079 414 3682 7462 9118 6453 9721 +16424 4995 1794 5996 3337 11034 7833 12035 9376 +16425 615 4736 1661 3638 6654 10775 7700 9677 +16426 5196 1764 3782 817 11235 7803 9821 6856 +16427 344 3744 1481 4638 6383 9783 7520 10677 +16428 4925 3509 2779 741 10964 9548 8818 6780 +16429 1135 5142 2021 4178 7174 11181 8060 10217 +16430 4307 3526 3377 1528 10346 9565 9416 7567 +16431 4146 320 3129 3099 10185 6359 9168 9138 +16432 3934 2816 604 5991 9973 8855 6643 12030 +16433 4360 4444 4334 1566 10399 10483 10373 7605 +16434 2334 5477 1666 5045 8373 11516 7705 11084 +16435 5416 1754 4238 3523 11455 7793 10277 9562 +16436 5422 3405 5861 1471 11461 9444 11900 7510 +16437 5420 1509 4968 3119 11459 7548 11007 9158 +16438 37 5780 3160 38 133 11819 9199 134 +16439 5816 1581 4351 3170 11855 7620 10390 9209 +16440 3122 5800 2786 5804 9161 11839 8825 11843 +16441 5271 2514 2684 852 11310 8553 8723 6891 +16442 3435 6234 4784 674 9474 12273 10823 6713 +16443 3765 662 2369 4634 9804 6701 8408 10673 +16444 5755 1489 4098 3520 11794 7528 10137 9559 +16445 5912 3135 2513 999 11951 9174 8552 7038 +16446 5912 1734 5125 3135 11951 7773 11164 9174 +16447 5730 5893 2836 2278 11769 11932 8875 8317 +16448 4244 4369 3863 1590 10283 10408 9902 7629 +16449 4369 4244 4349 1515 10408 10283 10388 7554 +16450 649 4235 1498 4349 6688 10274 7537 10388 +16451 698 3434 1510 4930 6737 9473 7549 10969 +16452 4765 4714 3838 739 10804 10753 9877 6778 +16453 611 4271 1806 5026 6650 10310 7845 11065 +16454 715 4549 1857 3953 6754 10588 7896 9992 +16455 5081 3647 5998 272 11120 9686 12037 6311 +16456 5850 947 3049 5479 11889 6986 9088 11518 +16457 5479 2764 1200 5850 11518 8803 7239 11889 +16458 4534 492 2760 2930 10573 6531 8799 8969 +16459 5483 665 3585 3118 11522 6704 9624 9157 +16460 4128 4387 2446 350 10167 10426 8485 6389 +16461 1752 5640 806 3632 7791 11679 6845 9671 +16462 3753 4825 2729 1536 9792 10864 8768 7575 +16463 784 3932 1781 4502 6823 9971 7820 10541 +16464 668 3937 1353 3938 6707 9976 7392 9977 +16465 3891 1482 1856 4751 9930 7521 7895 10790 +16466 6222 769 5499 3024 12261 6808 11538 9063 +16467 5671 1520 5048 4409 11710 7559 11087 10448 +16468 2629 5721 750 5977 8668 11760 6789 12016 +16469 5725 3058 1064 3973 11764 9097 7103 10012 +16470 4851 1495 4508 3840 10890 7534 10547 9879 +16471 2346 3969 471 4665 8385 10008 6510 10704 +16472 4118 4399 4757 712 10157 10438 10796 6751 +16473 4970 2694 4854 526 11009 8733 10893 6565 +16474 5724 1708 5199 3222 11763 7747 11238 9261 +16475 5724 3222 3847 520 11763 9261 9886 6559 +16476 4362 673 4521 4454 10401 6712 10560 10493 +16477 3938 4155 3940 1705 9977 10194 9979 7744 +16478 4697 3734 4430 1470 10736 9773 10469 7509 +16479 5960 1274 2792 3856 11999 7313 8831 9895 +16480 5335 3868 2942 1488 11374 9907 8981 7527 +16481 2272 5133 1679 5453 8311 11172 7718 11492 +16482 1781 4651 228 4595 7820 10690 6267 10634 +16483 6019 3918 3628 617 12058 9957 9667 6656 +16484 3431 5659 2738 1728 9470 11698 8777 7767 +16485 6238 1902 6148 3750 12277 7941 12187 9789 +16486 4742 270 2610 2091 10781 6309 8649 8130 +16487 5116 268 2333 4772 11155 6307 8372 10811 +16488 2089 6124 1091 4233 8128 12163 7130 10272 +16489 840 3114 2576 2117 6879 9153 8615 8156 +16490 5442 1757 2339 4297 11481 7796 8378 10336 +16491 5607 2488 4418 1730 11646 8527 10457 7769 +16492 6213 1018 3280 3187 12252 7057 9319 9226 +16493 618 1370 3628 3571 6657 7409 9667 9610 +16494 1504 4667 920 3965 7543 10706 6959 10004 +16495 5022 3824 2055 687 11061 9863 8094 6726 +16496 1499 4361 1917 5300 7538 10400 7956 11339 +16497 4508 5636 3477 1496 10547 11675 9516 7535 +16498 1706 5019 2444 5539 7745 11058 8483 11578 +16499 3770 407 3890 4060 9809 6446 9929 10099 +16500 2143 5597 1832 4089 8182 11636 7871 10128 +16501 5166 4005 4040 1646 11205 10044 10079 7685 +16502 1862 2905 818 5489 7901 8944 6857 11528 +16503 2056 5544 1496 5432 8095 11583 7535 11471 +16504 4640 5643 1759 2114 10679 11682 7798 8153 +16505 5473 751 4163 3162 11512 6790 10202 9201 +16506 5768 3232 5563 1812 11807 9271 11602 7851 +16507 207 4994 1425 3552 6246 11033 7464 9591 +16508 4316 907 2541 5085 10355 6946 8580 11124 +16509 5777 4279 2525 388 11816 10318 8564 6427 +16510 5068 5518 3460 2636 11107 11557 9499 8675 +16511 3495 5834 2374 1513 9534 11873 8413 7552 +16512 5787 1207 1989 4034 11826 7246 8028 10073 +16513 69 4903 2532 70 165 10942 8571 166 +16514 5534 750 5745 1568 11573 6789 11784 7607 +16515 6106 3130 4990 476 12145 9169 11029 6515 +16516 4452 1483 2395 4086 10491 7522 8434 10125 +16517 5687 1265 2796 2670 11726 7304 8835 8709 +16518 1205 3201 306 2938 7244 9240 6345 8977 +16519 1698 4763 941 3715 7737 10802 6980 9754 +16520 2265 4438 446 5497 8304 10477 6485 11536 +16521 4996 4578 4298 316 11035 10617 10337 6355 +16522 5627 3141 3638 1522 11666 9180 9677 7561 +16523 5847 4325 1356 6134 11886 10364 7395 12173 +16524 4834 2206 766 3660 10873 8245 6805 9699 +16525 396 5511 2360 5409 6435 11550 8399 11448 +16526 5509 1440 3913 3169 11548 7479 9952 9208 +16527 1637 4380 602 4411 7676 10419 6641 10450 +16528 5860 1681 870 256 11899 7720 6909 6295 +16529 4570 3908 3023 1066 10609 9947 9062 7105 +16530 1062 3139 452 6130 7101 9178 6491 12169 +16531 6095 2710 933 3503 12134 8749 6972 9542 +16532 3336 1895 689 4280 9375 7934 6728 10319 +16533 4896 3887 2719 682 10935 9926 8758 6721 +16534 6076 3358 4423 408 12115 9397 10462 6447 +16535 6076 1789 6044 3358 12115 7828 12083 9397 +16536 3843 1724 4225 4712 9882 7763 10264 10751 +16537 4294 1576 4013 4424 10333 7615 10052 10463 +16538 2043 5657 556 3781 8082 11696 6595 9820 +16539 3455 695 4401 2693 9494 6734 10440 8732 +16540 4525 1514 4227 3981 10564 7553 10266 10020 +16541 4342 1627 4450 4437 10381 7666 10489 10476 +16542 2269 6227 425 4425 8308 12266 6464 10464 +16543 5533 711 4080 5954 11572 6750 10119 11993 +16544 5686 3160 5780 1678 11725 9199 11819 7717 +16545 5686 928 3986 3160 11725 6967 10025 9199 +16546 1474 3289 625 5256 7513 9328 6664 11295 +16547 3806 2100 5120 5046 9845 8139 11159 11085 +16548 5126 3081 5089 3385 11165 9120 11128 9424 +16549 4542 4588 4288 4393 10581 10627 10327 10432 +16550 6107 3963 1042 3486 12146 10002 7081 9525 +16551 1893 2791 1046 4848 7932 8830 7085 10887 +16552 5900 3141 5627 952 11939 9180 11666 6991 +16553 82 81 2527 4940 178 177 8566 10979 +16554 5075 1263 3312 2972 11114 7302 9351 9011 +16555 5933 2278 934 3307 11972 8317 6973 9346 +16556 1931 3144 4211 5983 7970 9183 10250 12022 +16557 1561 5006 2111 5050 7600 11045 8150 11089 +16558 2708 5450 508 5836 8747 11489 6547 11875 +16559 1443 3880 6100 4625 7482 9919 12139 10664 +16560 4445 1621 4387 4128 10484 7660 10426 10167 +16561 5172 204 5881 914 11211 6243 11920 6953 +16562 1535 3722 283 4177 7574 9761 6322 10216 +16563 1668 4847 500 4181 7707 10886 6539 10220 +16564 1059 5182 2644 5431 7098 11221 8683 11470 +16565 4241 1566 4442 4487 10280 7605 10481 10526 +16566 1613 5482 2164 4662 7652 11521 8203 10701 +16567 5361 865 5461 3962 11400 6904 11500 10001 +16568 1536 5290 2262 3753 7575 11329 8301 9792 +16569 4048 319 4455 4815 10087 6358 10494 10854 +16570 3730 2034 6136 911 9769 8073 12175 6950 +16571 5094 3801 5909 403 11133 9840 11948 6442 +16572 2155 5004 984 5170 8194 11043 7023 11209 +16573 5954 4080 1279 2121 11993 10119 7318 8160 +16574 4191 1601 5259 3741 10230 7640 11298 9780 +16575 4410 659 4445 4264 10449 6698 10484 10303 +16576 2471 5705 416 5079 8510 11744 6455 11118 +16577 4397 4362 4454 1610 10436 10401 10493 7649 +16578 4813 3705 4023 364 10852 9744 10062 6403 +16579 3595 1222 4298 4723 9634 7261 10337 10762 +16580 72 4967 2650 73 168 11006 8689 169 +16581 2851 5793 903 5083 8890 11832 6942 11122 +16582 5100 2059 4095 5418 11139 8098 10134 11457 +16583 3163 6056 3467 984 9202 12095 9506 7023 +16584 1727 4412 2654 997 7766 10451 8693 7036 +16585 1718 4421 680 4644 7757 10460 6719 10683 +16586 5230 1867 4277 3250 11269 7906 10316 9289 +16587 709 4564 987 2747 6748 10603 7026 8786 +16588 738 5122 1284 3426 6777 11161 7323 9465 +16589 2323 5760 2005 1100 8362 11799 8044 7139 +16590 5968 1799 6213 3187 12007 7838 12252 9226 +16591 4976 704 2152 4284 11015 6743 8191 10323 +16592 1175 4732 1668 4181 7214 10771 7707 10220 +16593 5816 3170 5364 906 11855 9209 11403 6945 +16594 5064 3470 3678 1157 11103 9509 9717 7196 +16595 2847 4909 1643 5322 8886 10948 7682 11361 +16596 5820 1642 4958 3607 11859 7681 10997 9646 +16597 2245 4194 1556 5087 8284 10233 7595 11126 +16598 4718 3837 4522 656 10757 9876 10561 6695 +16599 5047 3538 2166 892 11086 9577 8205 6931 +16600 6004 931 2193 3766 12043 6970 8232 9805 +16601 6198 1083 3162 1399 12237 7122 9201 7438 +16602 5650 4458 1201 1797 11689 10497 7240 7836 +16603 4882 3918 3990 4324 10921 9957 10029 10363 +16604 4245 4584 4487 4442 10284 10623 10526 10481 +16605 473 4089 1832 5592 6512 10128 7871 11631 +16606 5843 1822 6067 3277 11882 7861 12106 9316 +16607 5843 3277 4295 729 11882 9316 10334 6768 +16608 6029 340 2912 3186 12068 6379 8951 9225 +16609 4395 1634 4245 4410 10434 7673 10284 10449 +16610 4395 4410 4264 1582 10434 10449 10303 7621 +16611 4486 1093 3134 3005 10525 7132 9173 9044 +16612 286 4021 1719 4581 6325 10060 7758 10620 +16613 2427 5517 1598 4715 8466 11556 7637 10754 +16614 5220 1525 5701 3501 11259 7564 11740 9540 +16615 4887 3812 2672 1459 10926 9851 8711 7498 +16616 4341 820 2786 5800 10380 6859 8825 11839 +16617 5555 977 2259 3034 11594 7016 8298 9073 +16618 4609 3472 5441 346 10648 9511 11480 6385 +16619 5815 2496 1259 3825 11854 8535 7298 9864 +16620 79 78 2701 5029 175 174 8740 11068 +16621 2604 1232 3963 5814 8643 7271 10002 11853 +16622 4226 374 4712 4225 10265 6413 10751 10264 +16623 5032 3562 3561 1570 11071 9601 9600 7609 +16624 1717 5254 1935 5653 7756 11293 7974 11692 +16625 1621 4445 659 4334 7660 10484 6698 10373 +16626 5943 264 4029 3902 11982 6303 10068 9941 +16627 991 6199 4973 3211 7030 12238 11012 9250 +16628 5426 1551 3323 3324 11465 7590 9362 9363 +16629 5862 2915 2197 913 11901 8954 8236 6952 +16630 2164 5363 2106 756 8203 11402 8145 6795 +16631 5659 216 5198 2738 11698 6255 11237 8777 +16632 4610 1569 4424 4013 10649 7608 10463 10052 +16633 4013 653 3462 4610 10052 6692 9501 10649 +16634 5093 2204 211 3505 11132 8243 6250 9544 +16635 62 61 5447 5757 158 157 11486 11796 +16636 1928 3987 435 5874 7967 10026 6474 11913 +16637 796 3471 1304 5135 6835 9510 7343 11174 +16638 4521 1548 4167 4099 10560 7587 10206 10138 +16639 4583 3998 4057 1680 10622 10037 10096 7719 +16640 4598 3983 4720 1139 10637 10022 10759 7178 +16641 5342 3603 1193 2182 11381 9642 7232 8221 +16642 2274 5022 687 5897 8313 11061 6726 11936 +16643 1596 4708 681 3998 7635 10747 6720 10037 +16644 4230 5510 2438 1522 10269 11549 8477 7561 +16645 5524 427 5862 2297 11563 6466 11901 8336 +16646 5870 3216 3403 1229 11909 9255 9442 7268 +16647 4775 1563 3907 3876 10814 7602 9946 9915 +16648 4775 3876 6154 627 10814 9915 12193 6666 +16649 5430 451 4322 3575 11469 6490 10361 9614 +16650 2449 3929 982 5312 8488 9968 7021 11351 +16651 2281 5460 1375 5021 8320 11499 7414 11060 +16652 6155 3604 5525 651 12194 9643 11564 6690 +16653 4355 5446 5805 2387 10394 11485 11844 8426 +16654 5034 1741 5434 4843 11073 7780 11473 10882 +16655 734 3841 1652 4977 6773 9880 7691 11016 +16656 4352 1656 4256 4588 10391 7695 10295 10627 +16657 1627 4405 658 4450 7666 10444 6697 10489 +16658 5658 3861 813 2498 11697 9900 6852 8537 +16659 4580 1726 256 2198 10619 7765 6295 8237 +16660 5169 2422 244 3610 11208 8461 6283 9649 +16661 4384 2931 6096 223 10423 8970 12135 6262 +16662 4843 1890 2528 5034 10882 7929 8567 11073 +16663 4084 1396 2898 4593 10123 7435 8937 10632 +16664 4925 5257 4562 3509 10964 11296 10601 9548 +16665 4692 4439 2075 721 10731 10478 8114 6760 +16666 4299 4123 4609 1417 10338 10162 10648 7456 +16667 696 4612 2048 5417 6735 10651 8087 11456 +16668 6083 3231 5589 1946 12122 9270 11628 7985 +16669 5585 3429 5520 1156 11624 9468 11559 7195 +16670 6047 1199 3257 3234 12086 7238 9296 9273 +16671 5060 1339 5362 3513 11099 7378 11401 9552 +16672 4632 1196 3872 3873 10671 7235 9911 9912 +16673 1610 4328 351 4437 7649 10367 6390 10476 +16674 6095 3503 5610 358 12134 9542 11649 6397 +16675 5351 3039 3489 626 11390 9078 9528 6665 +16676 4405 4393 4288 658 10444 10432 10327 6697 +16677 4393 4405 4506 1619 10432 10444 10545 7658 +16678 1174 4171 775 3288 7213 10210 6814 9327 +16679 5677 616 2859 4957 11716 6655 8898 10996 +16680 5261 1865 6234 3435 11300 7904 12273 9474 +16681 98 5111 2513 99 194 11150 8552 195 +16682 1889 4983 1402 5844 7928 11022 7441 11883 +16683 742 5579 2524 4863 6781 11618 8563 10902 +16684 3640 815 2923 5302 9679 6854 8962 11341 +16685 946 6126 2302 5688 6985 12165 8341 11727 +16686 101 5125 2836 102 197 11164 8875 198 +16687 5506 1040 2009 3592 11545 7079 8048 9631 +16688 1178 4853 230 3772 7217 10892 6269 9811 +16689 3865 2286 1021 5070 9904 8325 7060 11109 +16690 1962 5119 201 4139 8001 11158 6240 10178 +16691 6200 3760 5122 1914 12239 9799 11161 7953 +16692 55 3504 2060 5715 151 9543 8099 11754 +16693 388 4402 1904 5777 6427 10441 7943 11816 +16694 2681 6074 1196 5773 8720 12113 7235 11812 +16695 4004 6147 2257 639 10043 12186 8296 6678 +16696 3808 1480 3268 4840 9847 7519 9307 10879 +16697 4891 880 3194 5611 10930 6919 9233 11650 +16698 5904 2931 4846 736 11943 8970 10885 6775 +16699 4364 1621 4334 4444 10403 7660 10373 10483 +16700 899 5059 5112 1801 6938 11098 11151 7840 +16701 6153 1281 3225 4737 12192 7320 9264 10776 +16702 4072 368 5078 5394 10111 6407 11117 11433 +16703 5747 2617 1202 5037 11786 8656 7241 11076 +16704 4437 351 4202 4342 10476 6390 10241 10381 +16705 5425 1608 4101 3394 11464 7647 10140 9433 +16706 3661 369 3211 4973 9700 6408 9250 11012 +16707 1136 3989 2119 3786 7175 10028 8158 9825 +16708 2428 6047 343 4165 8467 12086 6382 10204 +16709 1566 4334 659 4442 7605 10373 6698 10481 +16710 4848 3763 2551 1172 10887 9802 8590 7211 +16711 6112 3284 4289 1509 12151 9323 10328 7548 +16712 5766 2154 2788 5374 11805 8193 8827 11413 +16713 4084 4593 4926 1589 10123 10632 10965 7628 +16714 344 4638 1823 4557 6383 10677 7862 10596 +16715 685 5487 1866 4752 6724 11526 7905 10791 +16716 5716 2433 4684 5854 11755 8472 10723 11893 +16717 5184 366 4281 4187 11223 6405 10320 10226 +16718 5074 722 5017 3950 11113 6761 11056 9989 +16719 658 4288 1667 4526 6697 10327 7706 10565 +16720 5593 3689 1536 2450 11632 9728 7575 8489 +16721 660 5916 1820 3743 6699 11955 7859 9782 +16722 5971 1706 5289 3947 12010 7745 11328 9986 +16723 3563 784 3725 5149 9602 6823 9764 11188 +16724 6117 4076 2912 340 12156 10115 8951 6379 +16725 1814 4813 364 4576 7853 10852 6403 10615 +16726 3329 1411 2642 5704 9368 7450 8681 11743 +16727 1609 4328 1610 4454 7648 10367 7649 10493 +16728 631 5871 2238 4766 6670 11910 8277 10805 +16729 3285 3782 1764 2234 9324 9821 7803 8273 +16730 5796 3314 5328 359 11835 9353 11367 6398 +16731 5687 5987 2159 2012 11726 12026 8198 8051 +16732 1949 3430 468 4122 7988 9469 6507 10161 +16733 1781 5417 2048 4651 7820 11456 8087 10690 +16734 4935 4452 3387 672 10974 10491 9426 6711 +16735 3494 5266 54 53 9533 11305 150 149 +16736 4132 4730 4708 1596 10171 10769 10747 7635 +16737 3324 1552 3770 3325 9363 7591 9809 9364 +16738 5163 3570 5320 898 11202 9609 11359 6937 +16739 757 4533 1585 5025 6796 10572 7624 11064 +16740 4002 5944 2032 2564 10041 11983 8071 8603 +16741 5785 2784 1442 4852 11824 8823 7481 10891 +16742 4360 650 4364 4444 10399 6689 10403 10483 +16743 6186 3307 934 1953 12225 9346 6973 7992 +16744 660 4676 2988 4137 6699 10715 9027 10176 +16745 1648 3716 1112 5443 7687 9755 7151 11482 +16746 6145 3310 3158 314 12184 9349 9197 6353 +16747 3846 6057 4636 337 9885 12096 10675 6376 +16748 2066 6062 877 5221 8105 12101 6916 11260 +16749 1538 4505 1662 4323 7577 10544 7701 10362 +16750 5020 3671 2646 533 11059 9710 8685 6572 +16751 5556 3386 1173 2309 11595 9425 7212 8348 +16752 2142 4881 1116 5383 8181 10920 7155 11422 +16753 5607 1730 3902 3800 11646 7769 9941 9839 +16754 1425 4994 760 3688 7464 11033 6799 9727 +16755 3331 345 3547 5877 9370 6384 9586 11916 +16756 4909 2847 2848 1127 10948 8886 8887 7166 +16757 5528 3829 859 3830 11567 9868 6898 9869 +16758 4941 541 5362 3804 10980 6580 11401 9843 +16759 4898 1941 5247 5548 10937 7980 11286 11587 +16760 6156 4831 1449 3004 12195 10870 7488 9043 +16761 1306 4312 2022 3867 7345 10351 8061 9906 +16762 698 5821 1323 3590 6737 11860 7362 9629 +16763 225 3811 1586 4986 6264 9850 7625 11025 +16764 684 4460 1655 4459 6723 10499 7694 10498 +16765 4868 1813 3983 4598 10907 7852 10022 10637 +16766 4506 4294 4424 650 10545 10333 10463 6689 +16767 4347 3915 4857 1338 10386 9954 10896 7377 +16768 4826 3914 4001 619 10865 9953 10040 6658 +16769 710 5072 1725 5767 6749 11111 7764 11806 +16770 3800 3902 4029 1453 9839 9941 10068 7492 +16771 833 5263 2481 6110 6872 11302 8520 12149 +16772 4694 1399 3162 4163 10733 7438 9201 10202 +16773 1745 4705 262 4055 7784 10744 6301 10094 +16774 5691 1687 5769 3404 11730 7726 11808 9443 +16775 5691 3404 5082 718 11730 9443 11121 6757 +16776 4397 1610 4437 4450 10436 7649 10476 10489 +16777 4283 1316 689 1895 10322 7355 6728 7934 +16778 5981 2291 382 3655 12020 8330 6421 9694 +16779 4192 4770 5653 1935 10231 10809 11692 7974 +16780 1453 4475 2525 4279 7492 10514 8564 10318 +16781 520 3374 1708 5724 6559 9413 7747 11763 +16782 5299 5723 2397 1500 11338 11762 8436 7539 +16783 4322 886 5950 4928 10361 6925 11989 10967 +16784 4905 2369 662 4463 10944 8408 6701 10502 +16785 2255 4150 732 5529 8294 10189 6771 11568 +16786 5874 3346 772 1928 11913 9385 6811 7967 +16787 5938 3344 4120 1378 11977 9383 10159 7417 +16788 4175 2215 689 1316 10214 8254 6728 7355 +16789 4958 2318 905 4124 10997 8357 6944 10163 +16790 2203 3823 2489 5009 8242 9862 8528 11048 +16791 4831 3882 2834 1449 10870 9921 8873 7488 +16792 5463 4039 6037 2953 11502 10078 12076 8992 +16793 1887 5975 4120 3344 7926 12014 10159 9383 +16794 5229 3568 2293 259 11268 9607 8332 6298 +16795 4613 2146 5961 642 10652 8185 12000 6681 +16796 5520 3429 5480 1373 11559 9468 11519 7412 +16797 6049 255 4711 3961 12088 6294 10750 10000 +16798 5150 3613 13 12 11189 9652 109 108 +16799 5909 3801 1325 1700 11948 9840 7364 7739 +16800 4542 4241 4487 4493 10581 10280 10526 10532 +16801 4714 891 1724 3838 10753 6930 7763 9877 +16802 5182 1908 5980 5750 11221 7947 12019 11789 +16803 30 5309 3681 31 126 11348 9720 127 +16804 6222 3615 5654 769 12261 9654 11693 6808 +16805 5087 1556 5395 4652 11126 7595 11434 10691 +16806 4608 4356 4701 1518 10647 10395 10740 7557 +16807 4868 4598 5326 1698 10907 10637 11365 7737 +16808 1224 3365 765 5941 7263 9404 6804 11980 +16809 289 5459 1772 3786 6328 11498 7811 9825 +16810 445 5589 3231 4110 6484 11628 9270 10149 +16811 1699 4711 255 3835 7738 10750 6294 9874 +16812 603 3551 1439 5276 6642 9590 7478 11315 +16813 4982 3752 5331 257 11021 9791 11370 6296 +16814 6130 3897 1842 1062 12169 9936 7881 7101 +16815 2126 2557 298 4974 8165 8596 6337 11013 +16816 1444 4464 1888 4413 7483 10503 7927 10452 +16817 5932 900 4195 4115 11971 6939 10234 10154 +16818 3166 6174 1077 5339 9205 12213 7116 11378 +16819 4526 4397 4450 658 10565 10436 10489 6697 +16820 2282 5491 1056 4403 8321 11530 7095 10442 +16821 5792 2293 1349 4068 11831 8332 7388 10107 +16822 4826 1560 4433 3914 10865 7599 10472 9953 +16823 6197 3534 6067 1822 12236 9573 12106 7861 +16824 696 5417 1781 5811 6735 11456 7820 11850 +16825 4078 4689 920 2249 10117 10728 6959 8288 +16826 1504 5091 797 3866 7543 11130 6836 9905 +16827 5283 1280 4191 3741 11322 7319 10230 9780 +16828 3903 4956 5240 5602 9942 10995 11279 11641 +16829 5651 1252 3083 4020 11690 7291 9122 10059 +16830 5651 4020 3795 1841 11690 10059 9834 7880 +16831 4812 1207 5787 4106 10851 7246 11826 10145 +16832 5020 3850 2957 1505 11059 9889 8996 7544 +16833 4459 4493 4487 4584 10498 10532 10526 10623 +16834 5363 2164 5482 755 11402 8203 11521 6794 +16835 4947 1945 5190 4441 10986 7984 11229 10480 +16836 5273 3701 468 2692 11312 9740 6507 8731 +16837 342 5127 1900 6104 6381 11166 7939 12143 +16838 6019 3385 3290 1465 12058 9424 9329 7504 +16839 4379 4627 4036 5519 10418 10666 10075 11558 +16840 5796 2153 800 4204 11835 8192 6839 10243 +16841 1547 4224 574 4582 7586 10263 6613 10621 +16842 5926 2511 2989 1557 11965 8550 9028 7596 +16843 5866 3397 6077 2380 11905 9436 12116 8419 +16844 1619 4506 650 4360 7658 10545 6689 10399 +16845 4354 745 4159 1849 10393 6784 10198 7888 +16846 1942 4910 1746 4631 7981 10949 7785 10670 +16847 6236 292 2584 3393 12275 6331 8623 9432 +16848 6236 3393 4600 1778 12275 9432 10639 7817 +16849 1078 3788 2575 5420 7117 9827 8614 11459 +16850 5275 3856 2792 606 11314 9895 8831 6645 +16851 2830 1501 3044 5694 8869 7540 9083 11733 +16852 2226 5130 1574 5131 8265 11169 7613 11170 +16853 64 5419 3163 65 160 11458 9202 161 +16854 2352 4253 1156 5520 8391 10292 7195 11559 +16855 5695 1450 5172 914 11734 7489 11211 6953 +16856 5579 1712 4332 2524 11618 7751 10371 8563 +16857 5761 559 5607 3800 11800 6598 11646 9839 +16858 6063 3467 4462 4111 12102 9506 10501 10150 +16859 656 4522 1582 4365 6695 10561 7621 10404 +16860 3818 5425 3394 410 9857 11464 9433 6449 +16861 663 4232 1434 4720 6702 10271 7473 10759 +16862 2347 6079 3830 859 8386 12118 9869 6898 +16863 1541 5290 782 3596 7580 11329 6821 9635 +16864 4288 4588 4256 4567 10327 10627 10295 10606 +16865 4033 2956 678 6229 10072 8995 6717 12268 +16866 91 90 3483 5449 187 186 9522 11488 +16867 4038 2113 751 5473 10077 8152 6790 11512 +16868 4116 4069 5670 1635 10155 10108 11709 7674 +16869 5687 4135 4672 1265 11726 10174 10711 7304 +16870 1698 5326 609 4763 7737 11365 6648 10802 +16871 5014 826 2197 2915 11053 6865 8236 8954 +16872 4963 4237 1084 2386 11002 10276 7123 8425 +16873 5097 1683 4170 3735 11136 7722 10209 9774 +16874 4888 6005 2616 3123 10927 12044 8655 9162 +16875 4015 4794 2644 260 10054 10833 8683 6299 +16876 5453 1679 4378 3851 11492 7718 10417 9890 +16877 5811 5470 4603 696 11850 11509 10642 6735 +16878 2572 6031 902 4290 8611 12070 6941 10329 +16879 685 5968 3187 4471 6724 12007 9226 10510 +16880 3887 4896 3820 1507 9926 10935 9859 7546 +16881 1405 5516 3169 4196 7444 11555 9208 10235 +16882 4365 1615 2533 4664 10404 7654 8572 10703 +16883 6138 1707 812 3762 12177 7746 6851 9801 +16884 6100 3446 2252 356 12139 9485 8291 6395 +16885 5673 846 4391 4046 11712 6885 10430 10085 +16886 4890 4488 2681 1026 10929 10527 8720 7065 +16887 4526 1620 4362 4397 10565 7659 10401 10436 +16888 5318 1553 4462 4027 11357 7592 10501 10066 +16889 736 4846 1772 5187 6775 10885 7811 11226 +16890 3983 1813 4105 5644 10022 7852 10144 11683 +16891 5644 663 4720 3983 11683 6702 10759 10022 +16892 1457 5052 924 4242 7496 11091 6963 10281 +16893 6073 3428 4215 566 12112 9467 10254 6605 +16894 706 3973 1885 5656 6745 10012 7924 11695 +16895 5994 1015 5261 3435 12033 7054 11300 9474 +16896 4459 1655 4352 4493 10498 7694 10391 10532 +16897 5768 263 1289 3232 11807 6302 7328 9271 +16898 4804 4026 4535 1810 10843 10065 10574 7849 +16899 4878 2008 5012 4065 10917 8047 11051 10104 +16900 3916 1804 3221 3220 9955 7843 9260 9259 +16901 5046 674 4784 3806 11085 6713 10823 9845 +16902 3640 1275 4646 4304 9679 7314 10685 10343 +16903 1718 4952 1844 4717 7757 10991 7883 10756 +16904 5460 3910 5713 1375 11499 9949 11752 7414 +16905 5355 439 5820 3607 11394 6478 11859 9646 +16906 4805 1721 5860 3594 10844 7760 11899 9633 +16907 5934 1078 2252 3446 11973 7117 8291 9485 +16908 4388 686 2227 4617 10427 6725 8266 10656 +16909 5538 1481 3857 3535 11577 7520 9896 9574 +16910 6189 436 4546 3490 12228 6475 10585 9529 +16911 6189 3490 4773 1779 12228 9529 10812 7818 +16912 5654 1671 3514 2573 11693 7710 9553 8612 +16913 4620 1962 1017 5313 10659 8001 7056 11352 +16914 5300 338 3126 1500 11339 6377 9165 7539 +16915 511 5805 2688 5665 6550 11844 8727 11704 +16916 5668 4404 1258 2863 11707 10443 7297 8902 +16917 1227 5514 257 3554 7266 11553 6296 9593 +16918 678 5972 1272 3450 6717 12011 7311 9489 +16919 3959 1545 2784 5785 9998 7584 8823 11824 +16920 5775 5371 4889 209 11814 11410 10928 6248 +16921 5494 2574 389 4221 11533 8613 6428 10260 +16922 5745 2149 749 3476 11784 8188 6788 9515 +16923 4954 1200 2332 4006 10993 7239 8371 10045 +16924 1801 3692 270 4079 7840 9731 6309 10118 +16925 3446 6100 3880 1693 9485 12139 9919 7732 +16926 4145 1038 2910 2909 10184 7077 8949 8948 +16927 4267 3304 2602 810 10306 9343 8641 6849 +16928 5196 5340 6022 2080 11235 11379 12061 8119 +16929 665 5754 1164 3585 6704 11793 7203 9624 +16930 3910 5460 2281 872 9949 11499 8320 6911 +16931 4000 6036 2252 737 10039 12075 8291 6776 +16932 5208 2435 5848 921 11247 8474 11887 6960 +16933 2393 1477 2536 4997 8432 7516 8575 11036 +16934 5697 1685 3055 3697 11736 7724 9094 9736 +16935 1507 3820 2643 5066 7546 9859 8682 11105 +16936 4682 939 5107 4702 10721 6978 11146 10741 +16937 5334 3684 1591 2614 11373 9723 7630 8653 +16938 4063 1036 2211 4865 10102 7075 8250 10904 +16939 4985 649 4349 4244 11024 6688 10388 10283 +16940 5568 5195 5468 4519 11607 11234 11507 10558 +16941 2471 5382 948 5705 8510 11421 6987 11744 +16942 6145 2491 1278 3802 12184 8530 7317 9841 +16943 666 6032 1700 4007 6705 12071 7739 10046 +16944 1652 5377 946 4048 7691 11416 6985 10087 +16945 1644 5594 626 3489 7683 11633 6665 9528 +16946 5089 5140 272 2089 11128 11179 6311 8128 +16947 5089 3081 3087 5140 11128 9120 9126 11179 +16948 4352 4588 4542 4493 10391 10627 10581 10532 +16949 2260 5377 1166 5000 8299 11416 7205 11039 +16950 5834 3495 4680 429 11873 9534 10719 6468 +16951 5747 713 4276 3997 11786 6752 10315 10036 +16952 5104 3970 5095 1747 11143 10009 11134 7786 +16953 4873 2039 2829 5852 10912 8078 8868 11891 +16954 5399 3736 841 2051 11438 9775 6880 8090 +16955 6074 2294 3872 1196 12113 8333 9911 7235 +16956 566 4215 2880 5509 6605 10254 8919 11548 +16957 6197 792 1649 3534 12236 6831 7688 9573 +16958 5513 1027 4578 2404 11552 7066 10617 8443 +16959 1997 5688 2302 3527 8036 11727 8341 9566 +16960 6076 2450 5174 5223 12115 8489 11213 11262 +16961 5128 2175 900 5932 11167 8214 6939 11971 +16962 5956 285 5034 2528 11995 6324 11073 8567 +16963 5461 2419 4802 1707 11500 8458 10841 7746 +16964 1893 5429 1401 4037 7932 11468 7440 10076 +16965 5892 4057 3998 681 11931 10096 10037 6720 +16966 3592 1543 5359 5506 9631 7582 11398 11545 +16967 5441 3472 4285 861 11480 9511 10324 6900 +16968 820 5424 1503 4009 6859 11463 7542 10048 +16969 5755 3520 2182 515 11794 9559 8221 6554 +16970 383 4656 1844 4952 6422 10695 7883 10991 +16971 5602 3561 3562 1037 11641 9600 9601 7076 +16972 5830 497 5164 357 11869 6536 11203 6396 +16973 3701 5273 3150 1879 9740 11312 9189 7918 +16974 444 4406 4461 1657 6483 10445 10500 7696 +16975 458 3579 1369 5542 6497 9618 7408 11581 +16976 4108 386 2697 5666 10147 6425 8736 11705 +16977 5081 3087 986 5822 11120 9126 7025 11861 +16978 6184 345 4755 3481 12223 6384 10794 9520 +16979 2033 4586 339 4389 8072 10625 6378 10428 +16980 2210 5101 1365 3864 8249 11140 7404 9903 +16981 4545 1602 4535 5503 10584 7641 10574 11542 +16982 3986 5709 40 39 10025 11748 136 135 +16983 6045 4585 3332 506 12084 10624 9371 6545 +16984 286 4581 1797 4466 6325 10620 7836 10505 +16985 2083 4748 2255 3949 8122 10787 8294 9988 +16986 1581 5816 906 3719 7620 11855 6945 9758 +16987 3684 5334 6014 2004 9723 11373 12053 8043 +16988 4451 5332 4912 637 10490 11371 10951 6676 +16989 1675 4540 1660 4547 7714 10579 7699 10586 +16990 789 5930 1935 5254 6828 11969 7974 11293 +16991 3648 5423 4576 1476 9687 11462 10615 7515 +16992 5447 2277 2885 5757 11486 8316 8924 11796 +16993 5867 3522 4639 308 11906 9561 10678 6347 +16994 1970 3985 1097 3098 8009 10024 7136 9137 +16995 5763 3541 2768 502 11802 9580 8807 6541 +16996 473 6101 2054 5264 6512 12140 8093 11303 +16997 6146 2066 4590 4346 12185 8105 10629 10385 +16998 5353 1588 5851 3702 11392 7627 11890 9741 +16999 6128 4519 5468 3568 12167 10558 11507 9607 +17000 373 5141 2253 4867 6412 11180 8292 10906 +17001 484 5410 1751 5036 6523 11449 7790 11075 +17002 5133 2272 964 4130 11172 8311 7003 10169 +17003 398 5392 1994 5113 6437 11431 8033 11152 +17004 963 3904 1762 5622 7002 9943 7801 11661 +17005 5891 1689 2317 3549 11930 7728 8356 9588 +17006 5278 6121 3537 1889 11317 12160 9576 7928 +17007 894 5469 1944 3464 6933 11508 7983 9503 +17008 861 4484 1927 5441 6900 10523 7966 11480 +17009 5392 4162 5295 1994 11431 10201 11334 8033 +17010 5030 493 2576 3114 11069 6532 8615 9153 +17011 5856 390 4025 4056 11895 6429 10064 10095 +17012 4915 717 3735 4170 10954 6756 9774 10209 +17013 1196 4632 2766 5773 7235 10671 8805 11812 +17014 5686 1678 5430 3575 11725 7717 11469 9614 +17015 1465 5557 379 3990 7504 11596 6418 10029 +17016 1543 3592 212 5605 7582 9631 6251 11644 +17017 4817 787 2570 4172 10856 6826 8609 10211 +17018 9 5933 3307 10 105 11972 9346 106 +17019 5815 3899 4599 2741 11854 9938 10638 8780 +17020 1333 4577 2421 3502 7372 10616 8460 9541 +17021 451 5430 2284 3677 6490 11469 8323 9716 +17022 1825 3563 4625 5849 7864 9602 10664 11888 +17023 1772 5190 1945 5187 7811 11229 7984 11226 +17024 6231 3523 4238 395 12270 9562 10277 6434 +17025 68 6082 4903 69 164 12121 10942 165 +17026 4256 5360 5039 4567 10295 11399 11078 10606 +17027 5878 4065 5012 1560 11917 10104 11051 7599 +17028 2500 5576 2138 4338 8539 11615 8177 10377 +17029 5544 484 4851 3840 11583 6523 10890 9879 +17030 5285 1223 2321 3790 11324 7262 8360 9829 +17031 4365 4664 3508 656 10404 10703 9547 6695 +17032 19 6143 3912 20 115 12182 9951 116 +17033 6069 393 2654 1630 12108 6432 8693 7669 +17034 4816 1976 4647 5236 10855 8015 10686 11275 +17035 42 41 3510 2160 138 137 9549 8199 +17036 3867 453 6192 5707 9906 6492 12231 11746 +17037 768 5349 1742 3739 6807 11388 7781 9778 +17038 4283 1895 3336 4916 10322 7934 9375 10955 +17039 4228 4777 3117 560 10267 10816 9156 6599 +17040 733 5045 1666 5161 6772 11084 7705 11200 +17041 3629 5106 4069 830 9668 11145 10108 6869 +17042 5891 3797 4018 258 11930 9836 10057 6297 +17043 5415 1387 4357 1987 11454 7426 10396 8026 +17044 3604 5690 3483 1073 9643 11729 9522 7112 +17045 4875 2250 5173 951 10914 8289 11212 6990 +17046 3891 2648 2647 707 9930 8687 8686 6746 +17047 2828 5319 2381 1722 8867 11358 8420 7761 +17048 2237 5871 631 4129 8276 11910 6670 10168 +17049 3596 2017 2472 5749 9635 8056 8511 11788 +17050 622 5621 1635 5670 6661 11660 7674 11709 +17051 711 5136 2674 4080 6750 11175 8713 10119 +17052 4376 4681 4251 652 10415 10720 10290 6691 +17053 1732 4053 1169 4435 7771 10092 7208 10474 +17054 6069 4066 4633 1579 12108 10105 10672 7618 +17055 6061 4120 5975 794 12100 10159 12014 6833 +17056 5285 3790 5794 1625 11324 9829 11833 7664 +17057 5300 1500 2397 1499 11339 7539 8436 7538 +17058 5588 1111 5423 3648 11627 7150 11462 9687 +17059 5843 3581 4119 1822 11882 9620 10158 7861 +17060 4158 4844 481 1826 10197 10883 6520 7865 +17061 3996 1070 5150 5581 10035 7109 11189 11620 +17062 5581 2579 443 3996 11620 8618 6482 10035 +17063 5637 840 2117 2118 11676 6879 8156 8157 +17064 5039 5360 4939 2176 11078 11399 10978 8215 +17065 5540 3751 1285 2392 11579 9790 7324 8431 +17066 4324 4654 939 1919 10363 10693 6978 7958 +17067 4092 5132 2234 1764 10131 11171 8273 7803 +17068 1652 3841 1166 5377 7691 9880 7205 11416 +17069 5216 684 4459 4584 11255 6723 10498 10623 +17070 6190 3562 5032 585 12229 9601 11071 6624 +17071 3824 5022 3655 1858 9863 11061 9694 7897 +17072 1963 5090 450 3924 8002 11129 6489 9963 +17073 1699 3835 1045 5168 7738 9874 7084 11207 +17074 5052 1873 4933 3946 11091 7912 10972 9985 +17075 5865 1574 2361 4113 11904 7613 8400 10152 +17076 1720 3723 1211 5341 7759 9762 7250 11380 +17077 6004 3766 759 1923 12043 9805 6798 7962 +17078 5747 5037 2461 713 11786 11076 8500 6752 +17079 1667 4624 1828 5010 7706 10663 7867 11049 +17080 1827 4626 1578 5028 7866 10665 7617 11067 +17081 5569 2777 2776 371 11608 8816 8815 6410 +17082 5301 3855 2132 295 11340 9894 8171 6334 +17083 625 4218 2141 5256 6664 10257 8180 11295 +17084 5358 2264 783 3955 11397 8303 6822 9994 +17085 2183 4965 219 4071 8222 11004 6258 10110 +17086 5958 3768 5695 2123 11997 9807 11734 8162 +17087 6217 1918 6033 3671 12256 7957 12072 9710 +17088 4864 2074 2075 6142 10903 8113 8114 12181 +17089 6209 2052 670 3627 12248 8091 6709 9666 +17090 5736 776 6168 4083 11775 6815 12207 10122 +17091 742 4863 1676 6013 6781 10902 7715 12052 +17092 5960 3856 5275 1686 11999 9895 11314 7725 +17093 6225 3602 5228 425 12264 9641 11267 6464 +17094 6225 1792 5135 3602 12264 7831 11174 9641 +17095 5443 2490 476 4990 11482 8529 6515 11029 +17096 4740 863 5438 2664 10779 6902 11477 8703 +17097 5298 4119 3581 1245 11337 10158 9620 7284 +17098 5513 2404 6120 3021 11552 8443 12159 9060 +17099 5574 611 5026 3897 11613 6650 11065 9936 +17100 6212 3360 4520 743 12251 9399 10559 6782 +17101 4755 1798 2461 5037 10794 7837 8500 11076 +17102 5101 1242 3770 4060 11140 7281 9809 10099 +17103 4603 1540 5566 6041 10642 7579 11605 12080 +17104 5726 787 4817 2727 11765 6826 10856 8766 +17105 4395 352 4835 1634 10434 6391 10874 7673 +17106 5531 3809 2819 929 11570 9848 8858 6968 +17107 3689 5593 3194 2096 9728 11632 9233 8135 +17108 6146 4346 5562 495 12185 10385 11601 6534 +17109 6121 2678 1127 3537 12160 8717 7166 9576 +17110 3716 5551 5758 331 9755 11590 11797 6370 +17111 6178 1387 5415 3631 12217 7426 11454 9670 +17112 5926 702 1819 2511 11965 6741 7858 8550 +17113 5346 1996 6166 4621 11385 8035 12205 10660 +17114 5692 3633 6043 1132 11731 9672 12082 7171 +17115 828 4771 1843 5224 6867 10810 7882 11263 +17116 531 4849 1597 4209 6570 10888 7636 10248 +17117 6038 3608 1051 2087 12077 9647 7090 8126 +17118 5844 1402 5036 3931 11883 7441 11075 9970 +17119 1957 4214 1147 5325 7996 10253 7186 11364 +17120 4976 4284 764 2067 11015 10323 6803 8106 +17121 6012 3613 5150 1070 12051 9652 11189 7109 +17122 5751 3663 2144 655 11790 9702 8183 6694 +17123 586 4850 1534 4219 6625 10889 7573 10258 +17124 6027 1490 2866 1350 12066 7529 8905 7389 +17125 5985 833 5347 3618 12024 6872 11386 9657 +17126 5513 2657 4580 1027 11552 8696 10619 7066 +17127 5644 3695 2516 663 11683 9734 8555 6702 +17128 5832 4176 2844 1385 11871 10215 8883 7424 +17129 1799 5765 3336 6213 7838 11804 9375 12252 +17130 6183 1681 1406 2344 12222 7720 7445 8383 +17131 3701 1879 4476 5639 9740 7918 10515 11678 +17132 4660 4152 5186 1817 10699 10191 11225 7856 +17133 5068 1951 2798 5518 11107 7990 8837 11557 +17134 1631 5079 416 5572 7670 11118 6455 11611 +17135 5098 1642 4954 4006 11137 7681 10993 10045 +17136 5098 4006 2332 486 11137 10045 8371 6525 +17137 352 4395 1582 4759 6391 10434 7621 10798 +17138 4906 3383 4907 363 10945 9422 10946 6402 +17139 1423 4551 2358 4798 7462 10590 8397 10837 +17140 4231 4893 4463 662 10270 10932 10502 6701 +17141 4977 1652 4048 4815 11016 7691 10087 10854 +17142 4839 1055 4123 4299 10878 7094 10162 10338 +17143 4012 2552 340 6029 10051 8591 6379 12068 +17144 4170 4911 2971 1605 10209 10950 9010 7644 +17145 6201 1710 6215 3674 12240 7749 12254 9713 +17146 2241 5250 459 5620 8280 11289 6498 11659 +17147 4862 1711 4872 4302 10901 7750 10911 10341 +17148 5856 3408 1881 390 11895 9447 7920 6429 +17149 683 4525 1709 5189 6722 10564 7748 11228 +17150 6101 4733 5869 2054 12140 10772 11908 8093 +17151 4908 3805 5596 2254 10947 9844 11635 8293 +17152 5326 3859 4374 609 11365 9898 10413 6648 +17153 4789 2037 5841 4318 10828 8076 11880 10357 +17154 804 4946 1840 4528 6843 10985 7879 10567 +17155 4796 1926 2930 2840 10835 7965 8969 8879 +17156 5317 389 4724 3822 11356 6428 10763 9861 +17157 5508 3128 1448 5546 11547 9167 7487 11585 +17158 5561 3760 6200 372 11600 9799 12239 6411 +17159 5278 703 4431 5279 11317 6742 10470 11318 +17160 6236 1778 6178 3631 12275 7817 12217 9670 +17161 4958 4124 2588 1134 10997 10163 8627 7173 +17162 5555 2500 6002 977 11594 8539 12041 7016 +17163 6236 3631 5536 292 12275 9670 11575 6331 +17164 4494 5700 3138 943 10533 11739 9177 6982 +17165 335 5240 1982 5203 6374 11279 8021 11242 +17166 5881 2094 4851 3553 11920 8133 10890 9592 +17167 1877 5911 2222 5683 7916 11950 8261 11722 +17168 207 4161 1756 5405 6246 10200 7795 11444 +17169 5518 2798 4490 1649 11557 8837 10529 7688 +17170 6111 3646 3217 596 12150 9685 9256 6635 +17171 456 5059 899 3556 6495 11098 6938 9595 +17172 5442 4297 735 2016 11481 10336 6774 8055 +17173 1866 5436 470 4913 7905 11475 6509 10952 +17174 5357 928 1868 5316 11396 6967 7907 11355 +17175 5357 5316 271 2240 11396 11355 6310 8279 +17176 5072 4130 964 2457 11111 10169 7003 8496 +17177 1845 5411 752 5001 7884 11450 6791 11040 +17178 5851 918 1992 3702 11890 6957 8031 9741 +17179 5088 2000 291 4504 11127 8039 6330 10543 +17180 2239 4735 866 6188 8278 10774 6905 12227 +17181 5522 2639 1260 4129 11561 8678 7299 10168 +17182 1318 5798 775 4171 7357 11837 6814 10210 +17183 4989 4787 5744 716 11028 10826 11783 6755 +17184 5229 5064 2614 1591 11268 11103 8653 7630 +17185 5362 1339 3915 4347 11401 7378 9954 10386 +17186 5638 3764 4249 1105 11677 9803 10288 7144 +17187 3030 5488 1475 5731 9069 11527 7514 11770 +17188 1913 4709 805 5255 7952 10748 6844 11294 +17189 1613 4786 1416 4286 7652 10825 7455 10325 +17190 6190 2292 1303 4259 12229 8331 7342 10298 +17191 1727 3099 1191 3100 7766 9138 7230 9139 +17192 5758 3875 2481 331 11797 9914 8520 6370 +17193 4569 5082 3153 1802 10608 11121 9192 7841 +17194 5082 4569 2253 718 11121 10608 8292 6757 +17195 2120 4341 1083 6198 8159 10380 7122 12237 +17196 4966 4371 5199 1708 11005 10410 11238 7747 +17197 4966 821 4543 4371 11005 6860 10582 10410 +17198 5964 274 5453 3851 12003 6313 11492 9890 +17199 6075 1925 4417 4370 12114 7964 10456 10409 +17200 5187 5060 3513 736 11226 11099 9552 6775 +17201 2098 5642 3032 4420 8137 11681 9071 10459 +17202 5389 4211 3144 1285 11428 10250 9183 7324 +17203 652 4953 1704 4376 6691 10992 7743 10415 +17204 2165 5384 1699 5168 8204 11423 7738 11207 +17205 5600 1784 5302 2923 11639 7823 11341 8962 +17206 5742 26 25 3831 11781 122 121 9870 +17207 5742 3831 867 2081 11781 9870 6906 8120 +17208 5440 209 4889 2943 11479 6248 10928 8982 +17209 1224 3921 651 5296 7263 9960 6690 11335 +17210 1585 5323 380 5025 7624 11362 6419 11064 +17211 5845 1970 5149 3725 11884 8009 11188 9764 +17212 6084 4426 5613 1461 12123 10465 11652 7500 +17213 5959 2947 2970 1039 11998 8986 9009 7078 +17214 5564 2497 945 4074 11603 8536 6984 10113 +17215 5269 45 44 3941 11308 141 140 9980 +17216 669 5731 1475 3709 6708 11770 7514 9748 +17217 4485 2985 1113 6191 10524 9024 7152 12230 +17218 2019 4968 1509 4289 8058 11007 7548 10328 +17219 6201 3674 4097 635 12240 9713 10136 6674 +17220 4692 721 6074 2681 10731 6760 12113 8720 +17221 1172 5429 1893 4848 7211 11468 7932 10887 +17222 4431 1899 4154 5279 10470 7938 10193 11318 +17223 1883 5553 2054 5869 7922 11592 8093 11908 +17224 5595 4495 3123 1523 11634 10534 9162 7562 +17225 335 5203 1715 4203 6374 11242 7754 10242 +17226 5669 280 2745 5218 11708 6319 8784 11257 +17227 4385 654 4343 4841 10424 6693 10382 10880 +17228 1903 4704 1570 4703 7942 10743 7609 10742 +17229 5800 3122 1083 4341 11839 9161 7122 10380 +17230 738 5668 1914 5122 6777 11707 7953 11161 +17231 773 3738 1379 6050 6812 9777 7418 12089 +17232 6117 3685 3905 1460 12156 9724 9944 7499 +17233 5412 1046 2237 3583 11451 7085 8276 9622 +17234 2373 4961 202 3569 8412 11000 6241 9608 +17235 4961 2373 4280 689 11000 8412 10319 6728 +17236 4051 2797 1998 5682 10090 8836 8037 11721 +17237 2768 4236 632 6027 8807 10275 6671 12066 +17238 4974 298 2852 2853 11013 6337 8891 8892 +17239 1565 5897 4348 6160 7604 11936 10387 12199 +17240 5809 4895 3875 1748 11848 10934 9914 7787 +17241 5669 4131 4959 1690 11708 10170 10998 7729 +17242 6147 4004 3080 1393 12186 10043 9119 7432 +17243 1070 3975 1837 6012 7109 10014 7876 12051 +17244 2495 5620 459 5378 8534 11659 6498 11417 +17245 5978 1999 5845 3725 12017 8038 11884 9764 +17246 6000 1594 4575 3514 12039 7633 10614 9553 +17247 4563 5124 4478 254 10602 11163 10517 6293 +17248 1103 2242 3670 3769 7142 8281 9709 9808 +17249 5999 868 6187 3676 12038 6907 12226 9715 +17250 4666 5435 4415 1464 10705 11474 10454 7503 +17251 1903 4203 2861 5041 7942 10242 8900 11080 +17252 3815 4917 5717 2200 9854 10956 11756 8239 +17253 3711 467 4807 6065 9750 6506 10846 12104 +17254 5372 2271 4185 5486 11411 8310 10224 11525 +17255 5372 5486 2114 785 11411 11525 8153 6824 +17256 5944 4002 4148 829 11983 10041 10187 6868 +17257 6121 1344 2787 2678 12160 7383 8826 8717 +17258 5683 4637 3572 1877 11722 10676 9611 7916 +17259 4353 4461 4406 962 10392 10500 10445 7001 +17260 5072 710 5133 4130 11111 6749 11172 10169 +17261 2028 4523 259 4783 8067 10562 6298 10822 +17262 5530 243 4894 4558 11569 6282 10933 10597 +17263 1577 4938 2093 4937 7616 10977 8132 10976 +17264 5610 5074 3950 2186 11649 11113 9989 8225 +17265 5074 5610 3503 1777 11113 11649 9542 7816 +17266 1753 3826 226 5157 7792 9865 6265 11196 +17267 4460 4461 4353 1655 10499 10500 10392 7694 +17268 2531 5376 424 6089 8570 11415 6463 12128 +17269 4705 1745 4046 4391 10744 7784 10085 10430 +17270 5197 2070 5345 6203 11236 8109 11384 12242 +17271 6165 645 4359 3976 12204 6684 10398 10015 +17272 1918 5390 232 6033 7957 11429 6271 12072 +17273 5619 4207 570 2554 11658 10246 6609 8593 +17274 5794 3790 2321 277 11833 9829 8360 6316 +17275 5053 4337 3146 1458 11092 10376 9185 7497 +17276 2188 5076 1410 4180 8227 11115 7449 10219 +17277 5594 2937 3372 626 11633 8976 9411 6665 +17278 5366 4658 4366 1074 11405 10697 10405 7113 +17279 4658 5366 3780 1920 10697 11405 9819 7959 +17280 4300 4737 4816 5236 10339 10776 10855 11275 +17281 5236 701 2438 4300 11275 6740 8477 10339 +17282 2765 1026 2766 4688 8804 7065 8805 10727 +17283 4354 1849 4146 997 10393 7888 10185 7036 +17284 5010 355 5910 1620 11049 6394 11949 7659 +17285 6139 5156 1338 2547 12178 11195 7377 8586 +17286 5239 4265 3958 1531 11278 10304 9997 7570 +17287 4244 1590 2505 4985 10283 7629 8544 11024 +17288 4448 4449 5797 1640 10487 10488 11836 7679 +17289 4438 1445 4103 4908 10477 7484 10142 10947 +17290 5533 5954 5380 2477 11572 11993 11419 8516 +17291 833 6110 2480 5347 6872 12149 8519 11386 +17292 4469 4876 4378 1679 10508 10915 10417 7718 +17293 6234 1865 841 3736 12273 7904 6880 9775 +17294 6030 2675 4234 1045 12069 8714 10273 7084 +17295 1602 4803 1810 4535 7641 10842 7849 10574 +17296 1605 4250 605 4993 7644 10289 6644 11032 +17297 6149 1133 4064 5587 12188 7172 10103 11626 +17298 5562 4346 4590 1314 11601 10385 10629 7353 +17299 2325 3771 280 6108 8364 9810 6319 12147 +17300 4011 1428 4706 4484 10050 7467 10745 10523 +17301 4585 5801 1756 3332 10624 11840 7795 9371 +17302 5044 1646 3779 4291 11083 7685 9818 10330 +17303 2263 5215 795 5969 8302 11254 6834 12008 +17304 5971 3947 460 2663 12010 9986 6499 8702 +17305 6085 1881 838 3355 12124 7920 6877 9394 +17306 671 4508 1495 4456 6710 10547 7534 10495 +17307 2091 5335 1488 5963 8130 11374 7527 12002 +17308 5384 440 3250 4277 11423 6479 9289 10316 +17309 4768 3761 3236 646 10807 9800 9275 6685 +17310 5152 2371 2329 623 11191 8410 8368 6662 +17311 5735 3976 4359 1755 11774 10015 10398 7794 +17312 4701 4009 2477 1518 10740 10048 8516 7557 +17313 5385 377 5095 3970 11424 6416 11134 10009 +17314 5432 1496 3477 4317 11471 7535 9516 10356 +17315 1989 5291 716 4034 8028 11330 6755 10073 +17316 5292 2465 5517 592 11331 8504 11556 6631 +17317 5097 4251 4252 1683 11136 10290 10291 7722 +17318 4251 5097 4531 652 10290 11136 10570 6691 +17319 5795 5998 5577 4335 11834 12037 11616 10374 +17320 5795 4335 3368 888 11834 10374 9407 6927 +17321 5508 5546 2285 228 11547 11585 8324 6267 +17322 6099 633 3120 4101 12138 6672 9159 10140 +17323 4465 1648 3130 5490 10504 7687 9169 11529 +17324 4467 2135 218 4468 10506 8174 6257 10507 +17325 5555 3491 5576 2500 11594 9530 11615 8539 +17326 5798 2451 1048 3842 11837 8490 7087 9881 +17327 5574 3897 6130 1930 11613 9936 12169 7969 +17328 4072 5394 3218 1622 10111 11433 9257 7661 +17329 5311 4177 283 2047 11350 10216 6322 8086 +17330 4027 63 62 5318 10066 159 158 11357 +17331 5952 3808 5550 808 11991 9847 11589 6847 +17332 1735 5401 486 4743 7774 11440 6525 10782 +17333 3868 5335 2091 910 9907 11374 8130 6949 +17334 5124 1600 2537 4478 11163 7639 8576 10517 +17335 2299 5355 1134 4058 8338 11394 7173 10097 +17336 6086 1682 3817 4262 12125 7721 9856 10301 +17337 4670 1477 2393 4669 10709 7516 8432 10708 +17338 1768 5784 2377 5641 7807 11823 8416 11680 +17339 4053 1732 5988 5986 10092 7771 12027 12025 +17340 651 3921 1774 6155 6690 9960 7813 12194 +17341 4946 2071 6116 5706 10985 8110 12155 11745 +17342 2008 5915 249 5012 8047 11954 6288 11051 +17343 5738 4117 4214 1957 11777 10156 10253 7996 +17344 5991 2193 931 3934 12030 8232 6970 9973 +17345 4816 4737 3225 249 10855 10776 9264 6288 +17346 2042 5114 1097 4201 8081 11153 7136 10240 +17347 987 4472 3696 3113 7026 10511 9735 9152 +17348 5219 4631 4574 726 11258 10670 10613 6765 +17349 1940 5063 1685 5017 7979 11102 7724 11056 +17350 5482 1613 4286 4741 11521 7652 10325 10780 +17351 5657 1901 4148 4002 11696 7940 10187 10041 +17352 6165 1738 2562 3883 12204 7777 8601 9922 +17353 1532 5152 4778 2465 7571 11191 10817 8504 +17354 5965 4500 4581 1719 12004 10539 10620 7758 +17355 1640 4821 1008 4448 7679 10860 7047 10487 +17356 1841 3795 1865 6163 7880 9834 7904 12202 +17357 4614 4641 5886 1838 10653 10680 11925 7877 +17358 1856 5381 894 3464 7895 11420 6933 9503 +17359 6179 1418 3783 3799 12218 7457 9822 9838 +17360 711 5533 1503 4378 6750 11572 7542 10417 +17361 5554 1944 4757 4399 11593 7983 10796 10438 +17362 5559 816 2324 2577 11598 6855 8363 8616 +17363 1739 824 2217 4210 7778 6863 8256 10249 +17364 4727 3931 5036 1751 10766 9970 11075 7790 +17365 6196 3175 610 1971 12235 9214 6649 8010 +17366 1489 5755 2793 4615 7528 11794 8832 10654 +17367 5854 2023 2803 5716 11893 8062 8842 11755 +17368 1628 4447 2190 5099 7667 10486 8229 11138 +17369 2480 4110 1227 5347 8519 10149 7266 11386 +17370 5504 1633 5361 3962 11543 7672 11400 10001 +17371 5353 4073 3007 1588 11392 10112 9046 7627 +17372 6152 4470 912 3920 12191 10509 6951 9959 +17373 2167 4654 379 5558 8206 10693 6418 11597 +17374 4129 631 2968 5522 10168 6670 9007 11561 +17375 5680 3898 5869 4733 11719 9937 11908 10772 +17376 837 4934 2028 5421 6876 10973 8067 11460 +17377 4741 2064 755 5482 10780 8103 6794 11521 +17378 6132 410 3394 3862 12171 6449 9433 9901 +17379 5468 3991 2685 1349 11507 10030 8724 7388 +17380 1560 5012 249 4433 7599 11051 6288 10472 +17381 1544 5806 2061 4517 7583 11845 8100 10556 +17382 5205 4705 4391 1508 11244 10744 10430 7547 +17383 1769 5167 303 4599 7808 11206 6342 10638 +17384 1026 2765 3747 4890 7065 8804 9786 10929 +17385 5260 4127 3893 1568 11299 10166 9932 7607 +17386 5641 447 3340 3964 11680 6486 9379 10003 +17387 1461 5613 1796 4240 7500 11652 7835 10279 +17388 4865 265 3537 4063 10904 6304 9576 10102 +17389 962 4939 1656 4353 7001 10978 7695 10392 +17390 4833 2338 5719 1951 10872 8377 11758 7990 +17391 621 3895 1084 4883 6660 9934 7123 10922 +17392 672 4453 1575 4935 6711 10492 7614 10974 +17393 6015 1812 5563 5680 12054 7851 11602 11719 +17394 4101 1608 3816 6099 10140 7647 9855 12138 +17395 4357 1387 2590 869 10396 7426 8629 6908 +17396 4992 4574 4960 1747 11031 10613 10999 7786 +17397 4140 1567 2606 5635 10179 7606 8645 11674 +17398 5925 3900 5545 774 11964 9939 11584 6813 +17399 2057 6191 1113 5049 8096 12230 7152 11088 +17400 4004 639 4168 4829 10043 6678 10207 10868 +17401 4316 5085 4776 1684 10355 11124 10815 7723 +17402 5999 4082 2062 868 12038 10121 8101 6907 +17403 1674 3972 1055 4839 7713 10011 7094 10878 +17404 4894 243 5196 817 10933 6282 11235 6856 +17405 2282 4403 576 4886 8321 10442 6615 10925 +17406 723 5199 4371 6175 6762 11238 10410 12214 +17407 6174 3964 3340 1077 12213 10003 9379 7116 +17408 1629 5788 2065 3994 7668 11827 8104 10033 +17409 1654 4469 710 5143 7693 10508 6749 11182 +17410 2820 4114 627 6154 8859 10153 6666 12193 +17411 346 4532 2067 6068 6385 10571 8106 12107 +17412 5373 1050 2452 4174 11412 7089 8491 10213 +17413 1601 5748 2508 3154 7640 11787 8547 9193 +17414 5381 6239 3534 1649 11420 12278 9573 7688 +17415 1780 5294 1424 5304 7819 11333 7463 11343 +17416 5375 1637 4594 4100 11414 7676 10633 10139 +17417 5395 819 4653 4652 11434 6858 10692 10691 +17418 5249 4173 3872 2005 11288 10212 9911 8044 +17419 338 4102 1950 4964 6377 10141 7989 11003 +17420 5697 3950 5017 1685 11736 9989 11056 7724 +17421 676 5304 1424 4153 6715 11343 7463 10192 +17422 5668 738 5882 4404 11707 6777 11921 10443 +17423 2814 4287 2436 5970 8853 10326 8475 12009 +17424 412 4400 1947 5946 6451 10439 7986 11985 +17425 1966 5214 511 5601 8005 11253 6550 11640 +17426 4544 1982 5240 4956 10583 8021 11279 10995 +17427 5155 403 1877 3572 11194 6442 7916 9611 +17428 346 6068 4258 3121 6385 12107 10297 9160 +17429 5908 3334 2072 630 11947 9373 8111 6669 +17430 5270 5737 5175 471 11309 11776 11214 6510 +17431 4503 5437 2717 1478 10542 11476 8756 7517 +17432 4970 4969 871 2694 11009 11008 6910 8733 +17433 6038 4455 319 3608 12077 10494 6358 9647 +17434 2003 6081 1239 3884 8042 12120 7278 9923 +17435 4728 5570 2487 878 10767 11609 8526 6917 +17436 5660 3976 5735 1137 11699 10015 11774 7176 +17437 1825 5811 1781 3932 7864 11850 7820 9971 +17438 2551 4332 1712 5171 8590 10371 7751 11210 +17439 5637 2118 1926 756 11676 8157 7965 6795 +17440 5503 1980 4671 4545 11542 8019 10710 10584 +17441 5783 1808 3176 771 11822 7847 9215 6810 +17442 5465 983 2533 4566 11504 7022 8572 10605 +17443 652 4531 1981 4953 6691 10570 8020 10992 +17444 6205 5818 5113 1994 12244 11857 11152 8033 +17445 2027 4901 487 5160 8066 10940 6526 11199 +17446 1758 5900 952 4758 7797 11939 6991 10797 +17447 5612 6224 4266 297 11651 12263 10305 6336 +17448 5215 1632 4565 4273 11254 7671 10604 10312 +17449 5392 398 4730 4132 11431 6437 10769 10171 +17450 6223 4852 1442 2229 12262 10891 7481 8268 +17451 6223 3412 5785 4852 12262 9451 11824 10891 +17452 6019 1465 3990 3918 12058 7504 10029 9957 +17453 4358 2568 807 4296 10397 8607 6846 10335 +17454 1800 4408 3075 5498 7839 10447 9114 11537 +17455 5785 3412 2561 3959 11824 9451 8600 9998 +17456 5604 2192 600 4527 11643 8231 6639 10566 +17457 6154 3876 3907 1331 12193 9915 9946 7370 +17458 5934 4972 1000 2279 11973 11011 7039 8318 +17459 2393 5733 724 4669 8432 11772 6763 10708 +17460 6174 1768 5641 3964 12213 7807 11680 10003 +17461 5640 1752 4794 4015 11679 7791 10833 10054 +17462 4739 4738 4281 366 10778 10777 10320 6405 +17463 3986 1835 3510 5709 10025 7874 9549 11748 +17464 5216 1634 4835 2363 11255 7673 10874 8402 +17465 6191 2057 5007 4485 12230 8096 11046 10524 +17466 1630 2654 4412 6142 7669 8693 10451 12181 +17467 5010 1620 4526 1667 11049 7659 10565 7706 +17468 5208 4620 5313 2502 11247 10659 11352 8541 +17469 5208 1791 4587 4620 11247 7830 10626 10659 +17470 5191 592 5517 2427 11230 6631 11556 8466 +17471 6165 3883 2345 645 12204 9922 8384 6684 +17472 6097 4951 4961 689 12136 10990 11000 6728 +17473 5225 4801 2519 221 11264 10840 8558 6260 +17474 5990 683 5189 4039 12029 6722 11228 10078 +17475 5990 4039 5463 1790 12029 10078 11502 7829 +17476 4164 1742 6041 5566 10203 7781 12080 11605 +17477 5566 402 2070 4164 11605 6441 8109 10203 +17478 5942 4680 3105 1632 11981 10719 9144 7671 +17479 1786 5192 2047 4691 7825 11231 8086 10730 +17480 4960 4574 4631 1746 10999 10613 10670 7785 +17481 4984 1479 3490 4546 11023 7518 9529 10585 +17482 759 3766 2193 4959 6798 9805 8232 10998 +17483 6127 1883 5869 3898 12166 7922 11908 9937 +17484 2283 5675 806 5406 8322 11714 6845 11445 +17485 3829 5528 4970 526 9868 11567 11009 6565 +17486 3250 2056 5432 5230 9289 8095 11471 11269 +17487 5747 3997 4088 1549 11786 10036 10127 7588 +17488 5471 1663 4663 415 11510 7702 10702 6454 +17489 5894 4693 3293 2290 11933 10732 9332 8329 +17490 566 5516 2423 6073 6605 11555 8462 12112 +17491 2018 4568 2082 4980 8057 10607 8121 11019 +17492 5288 6204 6205 2031 11327 12243 12244 8070 +17493 1807 5248 1091 4629 7846 11287 7130 10668 +17494 1924 6056 3163 5419 7963 12095 9202 11458 +17495 5232 4330 5274 1289 11271 10369 11313 7328 +17496 668 3938 1705 5265 6707 9977 7744 11304 +17497 2520 5819 629 5809 8559 11858 6668 11848 +17498 4929 5653 4770 699 10968 11692 10809 6738 +17499 1543 4222 657 5359 7582 10261 6696 11398 +17500 1151 5825 1773 4137 7190 11864 7812 10176 +17501 725 5104 1747 4960 6764 11143 7786 10999 +17502 1976 4816 249 5915 8015 10855 6288 11954 +17503 4899 1824 5116 4772 10938 7863 11155 10811 +17504 5178 796 4674 4643 11217 6835 10713 10682 +17505 5178 4643 5842 1776 11217 10682 11881 7815 +17506 2165 4234 746 5880 8204 10273 6785 11919 +17507 1894 4992 1747 5095 7933 11031 7786 11134 +17508 744 4480 1921 5774 6783 10519 7960 11813 +17509 5767 774 4717 1844 11806 6813 10756 7883 +17510 6127 418 3246 5327 12166 6457 9285 11366 +17511 5687 2012 4943 4135 11726 8051 10982 10174 +17512 6069 1630 4439 4066 12108 7669 10478 10105 +17513 4051 5682 2640 435 10090 11721 8679 6474 +17514 5685 463 4641 4614 11724 6502 10680 10653 +17515 3846 2062 4390 6057 9885 8101 10429 12096 +17516 5625 1731 4052 4169 11664 7770 10091 10208 +17517 5856 1884 4856 3408 11895 7923 10895 9447 +17518 4845 726 4574 4992 10884 6765 10613 11031 +17519 4992 1894 5521 4845 11031 7933 11560 10884 +17520 4412 1727 3100 3101 10451 7766 9139 9140 +17521 5965 926 5650 4500 12004 6965 11689 10539 +17522 5094 2150 865 5361 11133 8189 6904 11400 +17523 2046 4668 641 4955 8085 10707 6680 10994 +17524 5722 4091 5254 1717 11761 10130 11293 7756 +17525 2000 5088 2245 5087 8039 11127 8284 11126 +17526 6068 2067 764 4258 12107 8106 6803 10297 +17527 2324 5774 1921 5138 8363 11813 7960 11177 +17528 4317 271 5230 5432 10356 6310 11269 11471 +17529 4256 1656 4939 5360 10295 7695 10978 11399 +17530 4928 1868 3575 4322 10967 7907 9614 10361 +17531 1356 3939 2196 6134 7395 9978 8235 12173 +17532 5044 4291 4700 901 11083 10330 10739 6940 +17533 5459 289 6138 3762 11498 6328 12177 9801 +17534 2908 6228 638 6093 8947 12267 6677 12132 +17535 5344 4829 4168 1673 11383 10868 10207 7712 +17536 5219 726 4845 4899 11258 6765 10884 10938 +17537 710 4469 1679 5133 6749 10508 7718 11172 +17538 4890 3747 5814 4488 10929 9786 11853 10527 +17539 1016 4383 2417 5234 7055 10422 8456 11273 +17540 5078 5077 3977 1623 11117 11116 10016 7662 +17541 5077 5078 368 2179 11116 11117 6407 8218 +17542 425 5228 2144 4425 6464 11267 8183 10464 +17543 4208 5447 61 60 10247 11486 157 156 +17544 4836 5204 3263 1561 10875 11243 9302 7600 +17545 2058 5265 1705 5139 8097 11304 7744 11178 +17546 466 3885 2516 5426 6505 9924 8555 11465 +17547 4296 3342 3870 1787 10335 9381 9909 7826 +17548 5087 4652 4653 2000 11126 10691 10692 8039 +17549 848 5911 1877 4491 6887 11950 7916 10530 +17550 1749 4323 1662 5307 7788 10362 7701 11346 +17551 438 5138 1921 5054 6477 11177 7960 11093 +17552 4799 5201 6098 697 10838 11240 12137 6736 +17553 4799 2317 1689 5201 10838 8356 7728 11240 +17554 6080 1336 5736 4083 12119 7375 11775 10122 +17555 4083 1816 3157 6080 10122 7855 9196 12119 +17556 1415 3745 969 4936 7454 9784 7008 10975 +17557 5294 1780 2288 5608 11333 7819 8327 11647 +17558 6002 6018 4907 977 12041 12057 10946 7016 +17559 743 6144 2420 5578 6782 12183 8459 11617 +17560 4856 5332 4451 1728 10895 11371 10490 7767 +17561 5827 653 4254 4041 11866 6692 10293 10080 +17562 5666 1806 4271 4108 11705 7845 10310 10147 +17563 4608 1518 2477 5380 10647 7557 8516 11419 +17564 779 5759 1833 6215 6818 11798 7872 12254 +17565 5722 401 4824 4091 11761 6440 10863 10130 +17566 5402 655 2144 4268 11441 6694 8183 10307 +17567 1494 4005 902 6031 7533 10044 6941 12070 +17568 4947 4441 3776 1644 10986 10480 9815 7683 +17569 5925 774 5767 1725 11964 6813 11806 7764 +17570 5566 1540 4000 5476 11605 7579 10039 11515 +17571 5566 5476 2453 402 11605 11515 8492 6441 +17572 5752 944 3026 2013 11791 6983 9065 8052 +17573 6152 4495 5595 643 12191 10534 11634 6682 +17574 4924 741 6001 4591 10963 6780 12040 10630 +17575 2234 5132 959 5253 8273 11171 6998 11292 +17576 6192 453 2581 3452 12231 6492 8620 9491 +17577 2007 5323 1585 4791 8046 11362 7624 10830 +17578 5115 6024 5601 1965 11154 12063 11640 8004 +17579 1882 5115 1965 5356 7921 11154 8004 11395 +17580 4189 5895 5598 1327 10228 11934 11637 7366 +17581 5895 4189 4326 1803 11934 10228 10365 7842 +17582 2095 5828 1413 4683 8134 11867 7452 10722 +17583 3245 5935 592 5191 9284 11974 6631 11230 +17584 5801 4120 6061 1756 11840 10159 12100 7795 +17585 5060 3748 3915 1339 11099 9787 9954 7378 +17586 3395 5973 3528 610 9434 12012 9567 6649 +17587 1974 2602 512 5884 8013 8641 6551 11923 +17588 4000 1540 4645 6036 10039 7579 10684 12075 +17589 1593 5083 903 3624 7632 11122 6942 9663 +17590 5489 818 4892 5227 11528 6857 10931 11266 +17591 3769 989 2371 5492 9808 7028 8410 11531 +17592 5634 5684 3690 378 11673 11723 9729 6417 +17593 1862 5707 6192 2905 7901 11746 12231 8944 +17594 4759 1694 4607 6162 10798 7733 10646 12201 +17595 5936 4672 4135 730 11975 10711 10174 6769 +17596 4726 1437 3155 5145 10765 7476 9194 11184 +17597 1058 5645 2280 5617 7097 11684 8319 11656 +17598 359 5328 1776 5842 6398 11367 7815 11881 +17599 2471 781 3113 5382 8510 6820 9152 11421 +17600 5571 4729 2569 583 11610 10768 8608 6622 +17601 5030 6097 689 2215 11069 12136 6728 8254 +17602 2420 6144 1558 5738 8459 12183 7597 11777 +17603 2071 4946 804 5439 8110 10985 6843 11478 +17604 5706 426 3514 4575 11745 6465 9553 10614 +17605 5548 4560 3039 1168 11587 10599 9078 7207 +17606 4563 1959 5827 5124 10602 7998 11866 11163 +17607 1973 5058 1882 5233 8012 11097 7921 11272 +17608 4230 354 4505 5510 10269 6393 10544 11549 +17609 5892 1617 4281 4057 11931 7656 10320 10096 +17610 5617 2280 605 4250 11656 8319 6644 10289 +17611 6135 292 5536 4699 12174 6331 11575 10738 +17612 4065 5878 2553 893 10104 11917 8592 6932 +17613 6011 5204 4836 1938 12050 11243 10875 7977 +17614 4888 2002 3920 4734 10927 8041 9959 10773 +17615 4435 5901 5989 1732 10474 11940 12028 7771 +17616 5104 725 4413 4597 11143 6764 10452 10636 +17617 4106 5787 5744 2015 10145 11826 11783 8054 +17618 2331 4055 262 6064 8370 10094 6301 12103 +17619 748 4427 2140 5268 6787 10466 8179 11307 +17620 6239 225 6067 3534 12278 6264 12106 9573 +17621 4138 1770 5159 2463 10177 7809 11198 8502 +17622 2463 437 5151 4138 8502 6476 11190 10177 +17623 5127 4248 3668 1900 11166 10287 9707 7939 +17624 5388 2633 942 4408 11427 8672 6981 10447 +17625 2115 4982 257 5514 8154 11021 6296 11553 +17626 4361 6238 3750 542 10400 12277 9789 6581 +17627 6169 4211 5389 1869 12208 10250 11428 7908 +17628 748 5699 1834 4427 6787 11738 7873 10466 +17629 464 5112 4942 3413 6503 11151 10981 9452 +17630 4961 4951 4050 202 11000 10990 10089 6241 +17631 4977 4815 4455 1977 11016 10854 10494 8016 +17632 5695 3768 2261 1450 11734 9807 8300 7489 +17633 4874 3814 3230 1195 10913 9853 9269 7234 +17634 852 3781 1975 5271 6891 9820 8014 11310 +17635 4932 5055 5913 2251 10971 11094 11952 8290 +17636 5828 4111 5917 1413 11867 10150 11956 7452 +17637 2185 6045 1833 5759 8224 12084 7872 11798 +17638 5810 1831 2725 5976 11849 7870 8764 12015 +17639 2057 5049 675 4745 8096 11088 6714 10784 +17640 5628 1421 6049 3961 11667 7460 12088 10000 +17641 5243 4489 3068 325 11282 10528 9107 6364 +17642 2240 5778 1835 5357 8279 11817 7874 11396 +17643 6058 4707 4054 247 12097 10746 10093 6286 +17644 1847 5904 736 3513 7886 11943 6775 9552 +17645 4347 1785 3804 5362 10386 7824 9843 11401 +17646 359 5842 1861 4750 6398 11881 7900 10789 +17647 1315 5343 370 5212 7354 11382 6409 11251 +17648 6115 5294 5608 2181 12154 11333 11647 8220 +17649 4534 5241 2940 492 10573 11280 8979 6531 +17650 1039 2970 1038 4159 7078 9009 7077 10198 +17651 4113 297 4266 5865 10152 6336 10305 11904 +17652 907 4316 1547 6129 6946 10355 7586 12168 +17653 4915 4993 5206 1907 10954 11032 11245 7946 +17654 4993 4915 4170 1605 11032 10954 10209 7644 +17655 6074 721 1100 2294 12113 6760 7139 8333 +17656 837 5421 1839 5370 6876 11460 7878 11409 +17657 4932 676 3540 5055 10971 6715 9579 11094 +17658 802 5115 1882 5058 6841 11154 7921 11097 +17659 2126 5884 512 2557 8165 11923 6551 8596 +17660 4573 4372 4156 1432 10612 10411 10195 7471 +17661 2061 6102 220 4517 8100 12141 6259 10556 +17662 4717 5739 4421 1718 10756 11778 10460 7757 +17663 5920 1143 6086 4262 11959 7182 12125 10301 +17664 1844 4656 1654 5143 7883 10695 7693 11182 +17665 4991 875 2367 4975 11030 6914 8406 11014 +17666 4975 1818 3117 4991 11014 7857 9156 11030 +17667 5674 759 4959 4131 11713 6798 10998 10170 +17668 5554 4399 4118 1550 11593 10438 10157 7589 +17669 4924 4591 3291 1359 10963 10630 9330 7398 +17670 6202 4350 938 2301 12241 10389 6977 8340 +17671 5772 214 4052 5451 11811 6253 10091 11490 +17672 5216 4584 4245 1634 11255 10623 10284 7673 +17673 4408 1800 3368 5388 10447 7839 9407 11427 +17674 2616 266 2789 5177 8655 6305 8828 11216 +17675 6035 1089 3473 4623 12074 7128 9512 10662 +17676 6229 2304 1653 4033 12268 8343 7692 10072 +17677 5136 4876 4469 1654 11175 10915 10508 7693 +17678 5952 2364 279 4428 11991 8403 6318 10467 +17679 1385 4149 614 5832 7424 10188 6653 11871 +17680 6233 4633 4066 229 12272 10672 10105 6268 +17681 2191 5331 1834 5699 8230 11370 7873 11738 +17682 5728 2106 5422 1471 11767 8145 11461 7510 +17683 1710 5116 1824 4722 7749 11155 7863 10761 +17684 627 4114 1262 5940 6666 10153 7301 11979 +17685 1905 4592 559 5761 7944 10631 6598 11800 +17686 6177 4875 2484 499 12216 10914 8523 6538 +17687 1823 4638 1481 5538 7862 10677 7520 11577 +17688 6212 1988 535 3360 12251 8027 6574 9399 +17689 6160 4348 1328 1854 12199 10387 7367 7893 +17690 269 4832 2210 4263 6308 10871 8249 10302 +17691 4696 3073 630 5008 10735 9112 6669 11047 +17692 5986 478 4917 4053 12025 6517 10956 10092 +17693 5679 5217 2283 405 11718 11256 8322 6444 +17694 5217 5679 2668 2129 11256 11718 8707 8168 +17695 2553 5878 1560 4826 8592 11917 7599 10865 +17696 5344 1673 6064 4788 11383 7712 12103 10827 +17697 1779 4773 688 5213 7818 10812 6727 11252 +17698 6023 799 4100 4594 12062 6838 10139 10633 +17699 1697 5118 294 6141 7736 11157 6333 12180 +17700 4963 1688 4007 4922 11002 7727 10046 10961 +17701 5445 1942 4631 5219 11484 7981 10670 11258 +17702 2307 4835 352 5710 8346 10874 6391 11749 +17703 6063 4111 5828 1702 12102 10150 11867 7741 +17704 2128 5213 688 4754 8167 11252 6727 10793 +17705 2193 5991 604 4622 8232 12030 6643 10661 +17706 1803 4326 1422 5857 7842 10365 7461 11896 +17707 1593 3624 487 4901 7632 9663 6526 10940 +17708 5920 4262 3817 601 11959 10301 9856 6640 +17709 5676 795 5215 4273 11715 6834 11254 10312 +17710 1757 5442 264 5145 7796 11481 6303 11184 +17711 1906 5268 2140 5727 7945 11307 8179 11766 +17712 1803 5663 2408 5895 7842 11702 8447 11934 +17713 5157 5147 2311 1753 11196 11186 8350 7792 +17714 2655 5892 681 4767 8694 11931 6720 10806 +17715 5282 4719 2543 1628 11321 10758 8582 7667 +17716 5864 1891 4176 5832 11903 7930 10215 11871 +17717 5026 1806 5666 5073 11065 7845 11705 11112 +17718 5073 1842 3897 5026 11112 7881 9936 11065 +17719 1849 4145 320 4146 7888 10184 6359 10185 +17720 2015 5744 2285 5546 8054 11783 8324 11585 +17721 5658 1444 4862 4302 11697 7483 10901 10341 +17722 2140 5879 2439 4193 8179 11918 8478 10232 +17723 5303 847 1979 4858 11342 6886 8018 10897 +17724 5823 4538 5485 1686 11862 10577 11524 7725 +17725 719 4704 1903 5041 6758 10743 7942 11080 +17726 5367 4811 2964 1846 11406 10850 9003 7885 +17727 4811 5367 5353 362 10850 11406 11392 6401 +17728 5543 691 5615 4679 11582 6730 11654 10718 +17729 2223 4333 1331 5626 8262 10372 7370 11665 +17730 5344 1231 4004 4829 11383 7270 10043 10868 +17731 5720 4087 2648 940 11759 10126 8687 6979 +17732 5219 4899 4772 1896 11258 10938 10811 7935 +17733 1997 5568 753 5023 8036 11607 6792 11062 +17734 5586 2987 1598 4778 11625 9026 7637 10817 +17735 5867 2464 1530 4382 11906 8503 7569 10421 +17736 2607 4375 644 5585 8646 10414 6683 11624 +17737 5572 978 3345 3871 11611 7017 9384 9910 +17738 6211 582 3669 1253 12250 6621 9708 7292 +17739 4883 1084 4237 5042 10922 7123 10276 11081 +17740 3005 5936 730 4486 9044 11975 6769 10525 +17741 792 6197 1822 4119 6831 12236 7861 10158 +17742 5224 1843 5588 5071 11263 7882 11627 11110 +17743 6192 3452 3030 1611 12231 9491 9069 7650 +17744 5624 2042 4330 5232 11663 8081 10369 11271 +17745 2243 5910 355 4793 8282 11949 6394 10832 +17746 1578 4749 2220 5272 7617 10788 8259 11311 +17747 4926 6023 4594 1589 10965 12062 10633 7628 +17748 5670 4069 5106 1716 11709 10108 11145 7755 +17749 2152 5901 764 4284 8191 11940 6803 10323 +17750 1660 4540 1999 4989 7699 10579 8038 11028 +17751 4645 1540 4603 5470 10684 7579 10642 11509 +17752 5282 2156 1231 5110 11321 8195 7270 11149 +17753 4317 3477 762 5778 10356 9516 6801 11817 +17754 2930 1926 2118 4534 8969 7965 8157 10573 +17755 1382 5599 5292 2414 7421 11638 11331 8453 +17756 1132 6043 2754 4642 7171 12082 8793 10681 +17757 271 5316 1867 5230 6310 11355 7906 11269 +17758 5947 4436 2460 1206 11986 10475 8499 7245 +17759 6032 666 5108 3265 12071 6705 11147 9304 +17760 6169 853 5983 4211 12208 6892 12022 10250 +17761 4730 398 2626 6123 10769 6437 8665 12162 +17762 4189 1327 3671 6033 10228 7366 9710 12072 +17763 5590 4639 4392 1749 11629 10678 10431 7788 +17764 1366 4226 1979 6233 7405 10265 8018 12272 +17765 6115 761 5295 4162 12154 6800 11334 10201 +17766 5950 1699 5384 4277 11989 7738 11423 10316 +17767 6081 5155 3572 1239 12120 11194 9611 7278 +17768 5568 1997 3527 5195 11607 8036 9566 11234 +17769 5937 4366 432 1869 11976 10405 6471 7908 +17770 1987 5536 3631 5415 8026 11575 9670 11454 +17771 6121 5278 5279 1344 12160 11317 11318 7383 +17772 1760 5054 1921 5038 7799 11093 7960 11077 +17773 6132 4771 828 2287 12171 10810 6867 8326 +17774 5783 1663 5471 1808 11822 7702 11510 7847 +17775 1946 4544 714 6083 7985 10583 6753 12122 +17776 4973 6199 2861 2084 11012 12238 8900 8123 +17777 5978 4787 4989 1999 12017 10826 11028 8038 +17778 4787 5978 4502 1506 10826 12017 10541 7545 +17779 4669 2341 419 4670 10708 8380 6458 10709 +17780 929 4309 367 5531 6968 10348 6406 11570 +17781 2138 5576 628 5753 8177 11615 6667 11792 +17782 5630 897 2908 5404 11669 6936 8947 11443 +17783 1853 5433 220 4223 7892 11472 6259 10262 +17784 1859 4220 1858 5560 7898 10259 7897 11599 +17785 4313 6173 3589 381 10352 12212 9628 6420 +17786 676 4932 1780 5304 6715 10971 7819 11343 +17787 6186 1953 5581 5150 12225 7992 11620 11189 +17788 4822 811 4022 5955 10861 6850 10061 11994 +17789 4612 696 4603 6041 10651 6735 10642 12080 +17790 1846 5222 1969 5367 7885 11261 8008 11406 +17791 5158 636 5282 5110 11197 6675 11321 11149 +17792 4409 729 4295 5671 10448 6768 10334 11710 +17793 1796 6182 2993 6181 7835 12221 9032 12220 +17794 5847 304 4074 4325 11886 6343 10113 10364 +17795 5282 636 3676 4719 11321 6675 9715 10758 +17796 6175 4465 5490 723 12214 10504 11529 6762 +17797 6175 1929 5551 4465 12214 7968 11590 10504 +17798 1020 5310 2037 4789 7059 11349 8076 10828 +17799 585 5032 2649 5103 6624 11071 8688 11142 +17800 5503 4535 4026 275 11542 10574 10065 6314 +17801 3413 4942 2693 694 9452 10981 8732 6733 +17802 4366 5937 2558 1074 10405 11976 8597 7113 +17803 384 6007 1986 4869 6423 12046 8025 10908 +17804 5346 5328 3314 1996 11385 11367 9353 8035 +17805 5328 5346 2807 1776 11367 11385 8846 7815 +17806 6097 5030 3114 1305 12136 11069 9153 7344 +17807 4412 3101 4864 6142 10451 9140 10903 12181 +17808 1660 4989 716 5291 7699 11028 6755 11330 +17809 1555 4919 576 4356 7594 10958 6615 10395 +17810 5186 4677 2313 1817 11225 10716 8352 7856 +17811 5648 1555 4356 4608 11687 7594 10395 10647 +17812 4805 3594 2247 695 10844 9633 8286 6734 +17813 6038 1308 1977 4455 12077 7347 8016 10494 +17814 2947 5959 803 6171 8986 11998 6842 12210 +17815 2061 5740 2510 6102 8100 11779 8549 12141 +17816 779 4722 1824 5521 6818 10761 7863 11560 +17817 5568 4519 3684 753 11607 10558 9723 6792 +17818 2766 1026 2681 5773 8805 7065 8720 11812 +17819 5683 670 2052 4637 11722 6709 8091 10676 +17820 4422 1809 5175 5737 10461 7848 11214 11776 +17821 5426 3324 3325 466 11465 9363 9364 6505 +17822 448 5799 2609 4394 6487 11838 8648 10433 +17823 1778 4228 2589 6178 7817 10267 8628 12217 +17824 3920 2002 4495 6152 9959 8041 10534 12191 +17825 1715 5203 1982 4944 7754 11242 8021 10983 +17826 4740 2664 6026 1672 10779 8703 12065 7711 +17827 3710 5945 1103 6157 9749 11984 7142 12196 +17828 5764 1750 4675 4885 11803 7789 10714 10924 +17829 4974 5616 855 2126 11013 11655 6894 8165 +17830 1910 6151 2043 5693 7949 12190 8082 11732 +17831 1867 5316 1868 4928 7906 11355 7907 10967 +17832 2314 4661 714 6071 8353 10700 6753 12110 +17833 1675 4760 392 4540 7714 10799 6431 10579 +17834 5531 1826 481 3809 11570 7865 6520 9848 +17835 1828 5348 355 5010 7867 11387 6394 11049 +17836 2473 6017 1625 5794 8512 12056 7664 11833 +17837 1682 4870 2032 5944 7721 10909 8071 11983 +17838 4723 4298 4578 5858 10762 10337 10617 11897 +17839 414 4916 3336 5765 6453 10955 9375 11804 +17840 4709 5451 4052 1731 10748 11490 10091 7770 +17841 4560 5548 5247 462 10599 11587 11286 6501 +17842 4692 229 4066 4439 10731 6268 10105 10478 +17843 1660 5615 691 4547 7699 11654 6730 10586 +17844 6058 4923 4718 1653 12097 10962 10757 7692 +17845 1544 4559 1263 5806 7583 10598 7302 11845 +17846 1809 4278 1420 6170 7848 10317 7459 12209 +17847 6045 506 4097 1833 12084 6545 10136 7872 +17848 5457 5456 5638 1763 11496 11495 11677 7802 +17849 4906 1414 4554 3383 10945 7453 10593 9422 +17850 1917 5163 898 4260 7956 11202 6937 10299 +17851 5936 1599 4112 4672 11975 7638 10151 10711 +17852 5976 490 4627 4379 12015 6529 10666 10418 +17853 4782 240 4306 3834 10821 6279 10345 9873 +17854 6133 513 4678 4339 12172 6552 10717 10378 +17855 5170 5176 397 2155 11209 11215 6436 8194 +17856 5274 5001 3232 1289 11313 11040 9271 7328 +17857 5001 5274 3559 1845 11040 11313 9598 7884 +17858 5580 902 4005 5166 11619 6941 10044 11205 +17859 5901 4435 5165 764 11940 10474 11204 6803 +17860 1872 5428 203 4440 7911 11467 6242 10479 +17861 5662 419 3226 5414 11701 6458 9265 11453 +17862 2555 5810 1376 5194 8594 11849 7415 11233 +17863 757 5829 1911 4533 6796 11868 7950 10572 +17864 5960 1686 5485 5144 11999 7725 11524 11183 +17865 5176 5170 6063 1702 11215 11209 12102 7741 +17866 2217 5899 347 4210 8256 11938 6386 10249 +17867 4858 891 4714 5303 10897 6930 10753 11342 +17868 5351 5674 4131 1744 11390 11713 10170 7783 +17869 1855 6040 685 4471 7894 12079 6724 10510 +17870 2344 5069 529 6183 8383 11108 6568 12222 +17871 5386 5224 5071 1898 11425 11263 11110 7937 +17872 6133 4339 3157 1816 12172 10378 9196 7855 +17873 4639 5590 3349 308 10678 11629 9388 6347 +17874 4680 5942 2263 429 10719 11981 8302 6468 +17875 764 5165 1392 4258 6803 11204 7431 10297 +17876 254 4619 1502 4563 6293 10658 7541 10602 +17877 5650 1797 4581 4500 11689 7836 10620 10539 +17878 1851 4538 5823 849 7890 10577 11862 6888 +17879 5043 5042 4237 1765 11082 11081 10276 7804 +17880 1942 5634 378 4910 7981 11673 6417 10949 +17881 5947 788 2636 5474 11986 6827 8675 11513 +17882 5495 5244 3288 775 11534 11283 9327 6814 +17883 1913 5255 2071 5439 7952 11294 8110 11478 +17884 5225 2169 985 6119 11264 8208 7024 12158 +17885 4543 1748 3875 5758 10582 7787 9914 11797 +17886 2028 5329 1839 5421 8067 11368 7878 11460 +17887 5552 2289 4480 744 11591 8328 10519 6783 +17888 5768 1812 6015 5062 11807 7851 12054 11101 +17889 1897 5293 2303 509 7936 11332 8342 6548 +17890 6095 358 5144 5485 12134 6397 11183 11524 +17891 741 4924 2398 4925 6780 10963 8437 10964 +17892 1223 5285 2666 5137 7262 11324 8705 11176 +17893 5643 4640 6188 866 11682 10679 12227 6905 +17894 2260 6126 946 5377 8299 12165 6985 11416 +17895 5899 3773 5341 347 11938 9812 11380 6386 +17896 5570 4728 5769 1687 11609 10767 11808 7726 +17897 4949 1954 3733 5283 10988 7993 9772 11322 +17898 4891 6185 4666 1559 10930 12224 10705 7598 +17899 693 6011 1470 4430 6732 12050 7509 10469 +17900 6175 4371 4543 1929 12214 10410 10582 7968 +17901 6122 4518 2455 844 12161 10557 8494 6883 +17902 1874 4257 664 4398 7913 10296 6703 10437 +17903 5185 1400 3480 3595 11224 7439 9519 9634 +17904 6222 3024 337 4636 12261 9063 6376 10675 +17905 4296 1787 5903 4358 10335 7826 11942 10397 +17906 6125 2584 292 6135 12164 8623 6331 12174 +17907 5559 788 5947 4902 11598 6827 11986 10941 +17908 3405 342 3935 5861 9444 6381 9974 11900 +17909 6051 701 5236 4647 12090 6740 11275 10686 +17910 2005 5760 4085 5249 8044 11799 10124 11288 +17911 791 5053 3061 5905 6830 11092 9100 11944 +17912 686 5287 1290 4429 6725 11326 7329 10468 +17913 6185 4891 5611 2256 12224 10930 11650 8295 +17914 3935 2270 1471 5861 9974 8309 7510 11900 +17915 5559 4902 6235 816 11598 10941 12274 6855 +17916 6233 1979 847 4633 12272 8018 6886 10672 +17917 6048 1429 5104 4597 12087 7468 11143 10636 +17918 6048 4597 4413 1888 12087 10636 10452 7927 +17919 4533 1911 3290 6195 10572 7950 9329 12234 +17920 4533 6195 4791 1585 10572 12234 10830 7624 +17921 6078 5321 6012 1837 12117 11360 12051 7876 +17922 6128 1591 3684 4519 12167 7630 9723 10558 +17923 5521 1824 4899 4845 11560 7863 10938 10884 +17924 2580 4357 869 5770 8619 10396 6908 11809 +17925 4585 1378 4120 5801 10624 7417 10159 11840 +17926 5789 2306 6162 4607 11828 8345 12201 10646 +17927 4427 1834 4518 6122 10466 7873 10557 12161 +17928 1415 4936 1754 5416 7454 10975 7793 11455 +17929 6100 356 5849 4625 12139 6395 11888 10664 +17930 6159 4529 2579 934 12198 10568 8618 6973 +17931 6073 2423 1363 4570 12112 8462 7402 10609 +17932 2228 6007 384 5181 8267 12046 6423 11220 +17933 2163 5676 1697 6141 8202 11715 7736 12180 +17934 5733 2393 731 3557 11772 8432 6770 9596 +17935 4946 5706 4575 1840 10985 11745 10614 7879 +17936 442 5672 1618 5336 6481 11711 7657 11375 +17937 2024 5408 465 5324 8063 11447 6504 11363 +17938 1433 5198 216 6139 7472 11237 6255 12178 +17939 1242 4832 3870 2326 7281 10871 9909 8365 +17940 5455 4348 5897 687 11494 10387 11936 6726 +17941 2681 1956 229 4692 8720 7995 6268 10731 +17942 5770 374 4226 2580 11809 6413 10265 8619 +17943 6035 4261 1716 1089 12074 10300 7755 7128 +17944 2628 5974 3063 4582 8667 12013 9102 10621 +17945 2231 4860 582 6211 8270 10899 6621 12250 +17946 6138 289 5504 3962 12177 6328 11543 10001 +17947 5443 4990 3130 1648 11482 11029 9169 7687 +17948 5901 2152 2787 5989 11940 8191 8826 12028 +17949 910 5056 1432 4156 6949 11095 7471 10195 +17950 1905 4962 985 4592 7944 11001 7024 10631 +17951 5528 3830 948 2991 11567 9869 6987 9030 +17952 37 4695 1678 5780 133 10734 7717 11819 +17953 486 5401 2318 5098 6525 11440 8357 11137 +17954 5842 4643 4674 1861 11881 10682 10713 7900 +17955 5127 2064 4741 4248 11166 8103 10780 10287 +17956 6172 5080 1256 3045 12211 11119 7295 9084 +17957 622 5670 1716 4261 6661 11709 7755 10300 +17958 356 4645 1825 5849 6395 10684 7864 11888 +17959 2371 5152 1532 5153 8410 11191 7571 11192 +17960 1471 5530 1511 5728 7510 11569 7550 11767 +17961 1807 5323 2007 5248 7846 11362 8046 11287 +17962 4674 5835 2785 1861 10713 11874 8824 7900 +17963 4473 488 4843 5434 10512 6527 10882 11473 +17964 5648 4608 5380 421 11687 10647 11419 6460 +17965 6099 5625 4169 633 12138 11664 10208 6672 +17966 5471 415 2957 5997 11510 6454 8996 12036 +17967 1603 5689 324 4561 7642 11728 6363 10600 +17968 6053 6004 1923 2603 12092 12043 7962 8642 +17969 4082 5999 5158 1939 10121 12038 11197 7978 +17970 4872 1968 4753 6070 10911 8007 10792 12109 +17971 5812 700 2504 4205 11851 6739 8543 10244 +17972 4856 1884 4912 5332 10895 7923 10951 11371 +17973 5791 727 5762 5445 11830 6766 11801 11484 +17974 5545 5739 4717 774 11584 11778 10756 6813 +17975 5404 1766 4044 5403 11443 7805 10083 11442 +17976 5403 2148 5630 5404 11442 8187 11669 11443 +17977 4498 6085 3355 1041 10537 12124 9394 7080 +17978 1659 5212 1658 4650 7698 11251 7697 10689 +17979 1912 5557 1911 5829 7951 11596 7950 11868 +17980 4070 993 4710 6003 10109 7032 10749 12042 +17981 6070 557 4302 4872 12109 6596 10341 10911 +17982 5416 5015 4440 1415 11455 11054 10479 7454 +17983 950 5314 2201 5024 6989 11353 8240 11063 +17984 5894 1611 3030 4693 11933 7650 9069 10732 +17985 5886 4641 6003 1870 11925 10680 12042 7909 +17986 5862 913 6000 6028 11901 6952 12039 12067 +17987 5760 2323 5370 4085 11799 8362 11409 10124 +17988 1529 4768 646 3526 7568 10807 6685 9565 +17989 4504 896 1804 5088 10543 6935 7843 11127 +17990 9 5730 2278 5933 105 11769 8317 11972 +17991 4508 671 4748 5636 10547 6710 10787 11675 +17992 5652 4817 4172 731 11691 10856 10211 6770 +17993 1989 5615 1660 5291 8028 11654 7699 11330 +17994 2027 5160 1741 5623 8066 11199 7780 11662 +17995 1967 5214 1966 5438 8006 11253 8005 11477 +17996 1925 6075 620 5193 7964 12114 6659 11232 +17997 1838 5172 1450 4614 7877 11211 7489 10653 +17998 2500 4338 2328 6002 8539 10377 8367 12041 +17999 6166 1535 3845 4621 12205 7574 9884 10660 +18000 6151 1910 5147 5157 12190 7949 11186 11196 +18001 223 5043 1765 4384 6262 11082 7804 10423 +18002 2386 6006 1688 4963 8425 12045 7727 11002 +18003 5573 4879 2936 6206 11612 10918 8975 12245 +18004 6171 803 1973 5505 12210 6842 8012 11544 +18005 285 5623 1741 5034 6324 11662 7780 11073 +18006 779 5521 1894 5759 6818 11560 7933 11798 +18007 1807 4629 638 6228 7846 10668 6677 12267 +18008 6107 1956 2681 4488 12146 7995 8720 10527 +18009 6041 1742 5349 4612 12080 7781 11388 10651 +18010 700 5812 1703 5231 6739 11851 7742 11270 +18011 770 4710 2728 5488 6809 10749 8767 11527 +18012 2331 6064 1673 6072 8370 12103 7712 12111 +18013 5653 4929 5722 1717 11692 10968 11761 7756 +18014 6207 1657 4461 4460 12246 7696 10500 10499 +18015 1754 4936 2107 5525 7793 10975 8146 11564 +18016 785 5407 2127 5609 6824 11446 8166 11648 +18017 5817 4893 4231 1636 11856 10932 10270 7675 +18018 4723 5858 3524 1815 10762 11897 9563 7854 +18019 4706 481 2847 5322 10745 6520 8886 11361 +18020 616 5677 1898 5071 6655 11716 7937 11110 +18021 5084 2273 2186 6055 11123 8312 8225 12094 +18022 5084 6055 5697 854 11123 12094 11736 6893 +18023 5582 2612 1899 5258 11621 8651 7938 11297 +18024 5883 569 3178 4032 11922 6608 9217 10071 +18025 6064 262 5929 4788 12103 6301 11968 10827 +18026 5361 1633 3801 5094 11400 7672 9840 11133 +18027 6051 4647 5763 1788 12090 10686 11802 7827 +18028 6152 643 1863 4470 12191 6682 7902 10509 +18029 5213 6180 5330 1779 11252 12219 11369 7818 +18030 5213 2128 4481 6180 11252 8167 10520 12219 +18031 1844 5143 710 5767 7883 11182 6749 11806 +18032 5817 2301 4463 4893 11856 8340 10502 10932 +18033 5241 2117 2576 2940 11280 8156 8615 8979 +18034 2041 5386 1898 5448 8080 11425 7937 11487 +18035 2013 5846 2077 5752 8052 11885 8116 11791 +18036 6060 460 2356 4979 12099 6499 8395 11018 +18037 4979 2794 1985 6060 11018 8833 8024 12099 +18038 2483 5575 557 6070 8522 11614 6596 12109 +18039 5906 276 3125 5065 11945 6315 9164 11104 +18040 4922 667 4237 4963 10961 6706 10276 11002 +18041 959 6208 2432 4572 6998 12247 8471 10611 +18042 1801 5112 464 3692 7840 11151 6503 9731 +18043 5481 5741 29 28 11520 11780 125 124 +18044 5481 27 26 5742 11520 123 122 11781 +18045 5742 2081 5741 5481 11781 8120 11780 11520 +18046 2465 5292 5599 1532 8504 11331 11638 7571 +18047 5715 2060 4616 5444 11754 8099 10655 11483 +18048 5444 56 55 5715 11483 152 151 11754 +18049 1126 4451 637 6118 7165 10490 6676 12157 +18050 5835 5725 3973 706 11874 11764 10012 6745 +18051 685 4752 1799 5968 6724 10791 7838 12007 +18052 4837 6209 5983 853 10876 12248 12022 6892 +18053 5452 5324 5472 1909 11491 11363 11511 7948 +18054 473 5592 2035 6101 6512 11631 8074 12140 +18055 4795 5928 5996 1794 10834 11967 12035 7833 +18056 1832 5105 2035 5592 7871 11144 8074 11631 +18057 1944 5469 2103 4757 7983 11508 8142 10796 +18058 2287 5162 410 6132 8326 11201 6449 12171 +18059 4855 2161 5201 258 10894 8200 11240 6297 +18060 4707 6058 1653 2304 10746 12097 7692 8343 +18061 2859 5965 1719 4957 8898 12004 7758 10996 +18062 1934 5966 2269 5779 7973 12005 8308 11818 +18063 5086 6157 5492 341 11125 12196 11531 6380 +18064 1670 5889 933 4828 7709 11928 6972 10867 +18065 5718 1211 3236 3761 11757 7250 9275 9800 +18066 5616 4974 2853 1539 11655 11013 8892 7578 +18067 5778 2240 271 4317 11817 8279 6310 10356 +18068 4970 1691 2585 4969 11009 7730 8624 11008 +18069 1783 2789 266 5179 7822 8828 6305 11218 +18070 4613 1300 2619 2146 10652 7339 8658 8185 +18071 5011 5831 2858 469 11050 11870 8897 6508 +18072 5831 5011 3649 1932 11870 11050 9688 7971 +18073 5812 4115 4195 1703 11851 10154 10234 7742 +18074 6116 2454 1343 5824 12155 8493 7382 11863 +18075 1892 5467 383 5128 7931 11506 6422 11167 +18076 2029 5541 808 5550 8068 11580 6847 11589 +18077 5413 624 3763 5412 11452 6663 9802 11451 +18078 5685 2261 5700 4494 11724 8300 11739 10533 +18079 5732 6207 4460 684 11771 12246 10499 6723 +18080 5276 2219 5992 1993 11315 8258 12031 8032 +18081 5770 869 3220 3221 11809 6908 9259 9260 +18082 4749 1578 4626 6092 10788 7617 10665 12131 +18083 4914 5923 3050 1709 10953 11962 9089 7748 +18084 5288 375 5375 5743 11327 6414 11414 11782 +18085 5603 363 4907 6018 11642 6402 10946 12057 +18086 706 5656 2348 4685 6745 11695 8387 10724 +18087 2523 5821 698 4930 8562 11860 6737 10969 +18088 6101 2035 5875 4733 12140 8074 11914 10772 +18089 2106 5728 1511 394 8145 11767 7550 6433 +18090 6123 1771 4708 4730 12162 7810 10747 10769 +18091 5454 1328 4348 5455 11493 7367 10387 11494 +18092 2022 4859 2735 5655 8061 10898 8774 11694 +18093 5582 5258 746 2110 11621 11297 6785 8149 +18094 1767 5166 1646 5044 7806 11205 7685 11083 +18095 5412 3583 1408 5413 11451 9622 7447 11452 +18096 5157 226 1901 6151 11196 6265 7940 12190 +18097 5811 1825 4645 5470 11850 7864 10684 11509 +18098 1629 5511 2886 4509 7668 11550 8925 10548 +18099 5474 2636 3460 267 11513 8675 9499 6306 +18100 2061 5806 1263 5075 8100 11845 7302 11114 +18101 6039 3837 4718 4923 12078 9876 10757 10962 +18102 4832 269 1787 3870 10871 6308 7826 9909 +18103 2267 4954 1642 5820 8306 10993 7681 11859 +18104 6160 1854 6173 4313 12199 7893 12212 10352 +18105 5005 2456 2187 6114 11044 8495 8226 12153 +18106 6114 2384 2218 5005 12153 8423 8257 11044 +18107 6171 5505 5123 1897 12210 11544 11162 7936 +18108 2416 6086 1143 4761 8455 12125 7182 10800 +18109 5907 1280 5283 3733 11946 7319 11322 9772 +18110 834 6059 1810 4803 6873 12098 7849 10842 +18111 1649 4490 894 5381 7688 10529 6933 11420 +18112 1532 5599 2570 5153 7571 11638 8609 11192 +18113 6160 4313 2803 1565 12199 10352 8842 7604 +18114 6231 2472 1559 5092 12270 8511 7598 11131 +18115 5219 1896 5791 5445 11258 7935 11830 11484 +18116 6025 6024 5115 802 12064 12063 11154 6841 +18117 5500 6020 6148 1902 11539 12059 12187 7941 +18118 779 6215 1710 4722 6818 12254 7749 10761 +18119 5768 5062 5698 263 11807 11101 11737 6302 +18120 5475 5564 4074 304 11514 11603 10113 6343 +18121 5475 1978 2497 5564 11514 8017 8536 11603 +18122 2732 4808 1789 6218 8771 10847 7828 12257 +18123 4759 6162 5710 352 10798 12201 11749 6391 +18124 6237 4945 5222 834 12276 10984 11261 6873 +18125 6237 1998 6150 4945 12276 8037 12189 10984 +18126 5836 508 3272 5512 11875 6547 9311 11551 +18127 5836 5512 3653 2087 11875 11551 9692 8126 +18128 6217 4781 5390 1918 12256 10820 11429 7957 +18129 6217 1505 3308 4781 12256 7544 9347 10820 +18130 5393 2159 5986 5988 11432 8198 12025 12027 +18131 5710 6235 4902 2307 11749 12274 10941 8346 +18132 2432 4897 1625 6017 8471 10936 7664 12056 +18133 5652 731 2393 4997 11691 6770 8432 11036 +18134 2010 5681 2044 5549 8049 11720 8083 11588 +18135 4016 394 1511 1512 10055 6433 7550 7551 +18136 5822 1713 3647 5081 11861 7752 9686 11120 +18137 1162 5714 1907 5206 7201 11753 7946 11245 +18138 6230 2216 4285 5648 12269 8255 10324 11687 +18139 2242 5562 1314 3670 8281 11601 7353 9709 +18140 6185 318 5435 4666 12224 6357 11474 10705 +18141 5720 940 6052 1677 11759 6979 12091 7716 +18142 2296 5833 974 6105 8335 11872 7013 12144 +18143 5113 5818 3268 1871 11152 11857 9307 7910 +18144 2163 5924 795 5676 8202 11963 6834 11715 +18145 6023 4926 277 2321 12062 10965 6316 8360 +18146 6039 4923 6058 247 12078 10962 12097 6286 +18147 592 5935 2414 5292 6631 11974 8453 11331 +18148 704 4976 1643 4909 6743 11015 7682 10948 +18149 5185 5184 4187 1400 11224 11223 10226 7439 +18150 5907 3733 6069 1579 11946 9772 12108 7618 +18151 4817 5652 5571 583 10856 11691 11610 6622 +18152 5674 5351 626 3372 11713 11390 6665 9411 +18153 5790 1701 1958 4861 11829 7740 7997 10900 +18154 6001 1676 3291 4591 12040 7715 9330 10630 +18155 5826 2835 2106 394 11865 8874 8145 6433 +18156 3569 1631 5572 3871 9608 7670 11611 9910 +18157 895 5019 1706 5971 6934 11058 7745 12010 +18158 2104 5352 905 5251 8143 11391 6944 11290 +18159 2127 5649 1906 5609 8166 11688 7945 11648 +18160 4883 5042 5043 1782 10922 11081 11082 7821 +18161 5196 243 2270 5340 11235 6282 8309 11379 +18162 842 5868 2068 5105 6881 11907 8107 11144 +18163 1736 5270 2540 5776 7775 11309 8579 11815 +18164 6235 5710 6162 2306 12274 11749 12201 8345 +18165 5918 1851 849 2468 11957 7890 6888 8507 +18166 5422 755 2064 3405 11461 6794 8103 9444 +18167 1001 5211 2077 5846 7040 11250 8116 11885 +18168 6071 714 4544 4956 12110 6753 10583 10995 +18169 5705 6079 2347 416 11744 12118 8386 6455 +18170 6134 4679 3084 5847 12173 10718 9123 11886 +18171 5993 1114 3404 5769 12032 7153 9443 11808 +18172 5993 5769 4728 2195 12032 11808 10767 8234 +18173 5898 4507 5259 2130 11937 10546 11298 8169 +18174 2577 1793 788 5559 8616 7832 6827 11598 +18175 4418 5943 3902 1730 10457 11982 9941 7769 +18176 5826 394 4016 1110 11865 6433 10055 7149 +18177 5624 6193 3621 705 11663 12232 9660 6744 +18178 225 4986 3277 6067 6264 11025 9316 12106 +18179 5155 6081 2003 2150 11194 12120 8042 8189 +18180 5908 5907 1579 3334 11947 11946 7618 9373 +18181 6119 2026 4801 5225 12158 8065 10840 11264 +18182 2475 5823 1686 5275 8514 11862 7725 11314 +18183 5265 2058 6210 2291 11304 8097 12249 8330 +18184 6150 1969 5222 4945 12189 8008 11261 10984 +18185 5960 5144 358 2273 11999 11183 6397 8312 +18186 1591 6128 3568 5229 7630 12167 9607 11268 +18187 5276 1993 4553 603 11315 8032 10592 6642 +18188 5586 4778 5152 623 11625 10817 11191 6662 +18189 1110 4050 1305 4049 7149 10089 7344 10088 +18190 5414 2178 6216 5662 11453 8217 12255 11701 +18191 2818 6129 1547 4987 8857 12168 7586 11026 +18192 2422 5169 2149 5721 8461 11208 8188 11760 +18193 5868 5698 5062 2068 11907 11737 11101 8107 +18194 5265 2291 5981 668 11304 8330 12020 6707 +18195 5552 3837 6039 2289 11591 9876 12078 8328 +18196 5909 1700 6032 4491 11948 7739 12071 10530 +18197 3385 6019 617 5126 9424 12058 6656 11165 +18198 5943 4726 5145 264 11982 10765 11184 6303 +18199 5818 6205 6204 850 11857 12244 12243 6889 +18200 5961 1533 3230 3814 12000 7572 9269 9853 +18201 5110 4788 5929 5158 11149 10827 11968 11197 +18202 2263 5942 1632 5215 8302 11981 7671 11254 +18203 6148 6020 5428 2227 12187 12059 11467 8266 +18204 3885 6202 2301 5817 9924 12241 8340 11856 +18205 937 6109 2078 5391 6976 12148 8117 11430 +18206 2363 5732 684 5216 8402 11771 6723 11255 +18207 6209 4837 1239 2052 12248 10876 7278 8091 +18208 5386 2041 2254 5596 11425 8080 8293 11635 +18209 1869 5389 2558 5937 7908 11428 8597 11976 +18210 5795 2442 272 5998 11834 8481 6311 12037 +18211 5456 6226 3965 409 11495 12265 10004 6448 +18212 6226 5456 5457 2131 12265 11495 11496 8170 +18213 1906 5649 748 5268 7945 11688 6787 11307 +18214 5875 2068 5062 6015 11914 8107 11101 12054 +18215 6216 5883 4032 1501 12255 11922 10071 7540 +18216 5634 1942 5445 5762 11673 7981 11484 11801 +18217 1990 5743 2029 5550 8029 11782 8068 11589 +18218 1690 6108 280 5669 7729 12147 6319 11708 +18219 2080 6022 2355 5400 8119 12061 8394 11439 +18220 5862 6028 3615 2297 11901 12067 9654 8336 +18221 1505 6217 3671 5020 7544 12256 9710 11059 +18222 6120 2404 4578 4996 12159 8443 10617 11035 +18223 2119 5027 1633 5504 8158 11066 7672 11543 +18224 4079 5526 899 1801 10118 11565 6938 7840 +18225 299 5788 1629 5171 6338 11827 7668 11210 +18226 6156 2048 4612 5349 12195 8087 10651 11388 +18227 5080 6172 2715 832 11119 12211 8754 6871 +18228 5128 5932 4115 1892 11167 11971 10154 7931 +18229 5208 921 3995 1791 11247 6960 10034 7830 +18230 5824 426 5706 6116 11863 6465 11745 12155 +18231 5907 5908 4191 1280 11946 11947 10230 7319 +18232 1975 6094 2514 5271 8014 12133 8553 11310 +18233 5349 768 4831 6156 11388 6807 10870 12195 +18234 4358 5903 2647 797 10397 11942 8686 6836 +18235 6076 5223 6218 1789 12115 11262 12257 7828 +18236 2056 5410 484 5544 8095 11449 6523 11583 +18237 1882 6087 510 5233 7921 12126 6549 11272 +18238 2034 4874 1195 4541 8073 10913 7234 10580 +18239 5808 4882 4324 1919 11847 10921 10363 7958 +18240 6188 5859 2374 2239 12227 11898 8413 8278 +18241 5859 6188 4640 2132 11898 12227 10679 8171 +18242 2110 5102 823 5582 8149 11141 6862 11621 +18243 6053 2024 5324 5452 12092 8063 11363 11491 +18244 5596 828 5224 5386 11635 6867 11263 11425 +18245 4534 2118 2117 5241 10573 8157 8156 11280 +18246 4861 1848 4561 5790 10900 7887 10600 11829 +18247 5452 931 6004 6053 11491 6970 12043 12092 +18248 862 4355 2387 5284 6901 10394 8426 11323 +18249 2074 4864 2073 5235 8113 10903 8112 11274 +18250 1841 5848 2435 5651 7880 11887 8474 11690 +18251 5158 5929 5205 1939 11197 11968 11244 7978 +18252 5891 258 5201 1689 11930 6297 11240 7728 +18253 6078 14 13 5321 12117 110 109 11360 +18254 1647 4186 1491 4443 7686 10225 7530 10482 +18255 4226 4225 4858 1979 10265 10264 10897 8018 +18256 4350 6202 3885 466 10389 12241 9924 6505 +18257 6183 529 2542 5281 12222 6568 8581 11320 +18258 2549 6009 1880 6008 8588 12048 7919 12047 +18259 6097 1305 4050 4951 12136 7344 10089 10990 +18260 6219 5262 2519 890 12258 11301 8558 6929 +18261 6219 2020 737 5262 12258 8059 6776 11301 +18262 6218 5223 5174 923 12257 11262 11213 6962 +18263 2333 5979 727 5791 8372 12018 6766 11830 +18264 5185 3595 4723 1815 11224 9634 10762 7854 +18265 5921 5922 6089 2236 11960 11961 12128 8275 +18266 2035 5105 2068 5875 8074 11144 8107 11914 +18267 1336 6080 3157 5379 7375 12119 9196 11418 +18268 2336 5405 1756 6061 8375 11444 7795 12100 +18269 5868 2049 3318 5698 11907 8088 9357 11737 +18270 201 5701 1525 4649 6240 11740 7564 10688 +18271 1912 5558 379 5557 7951 11597 6418 11596 +18272 1738 6165 3976 5660 7777 12204 10015 11699 +18273 1012 3710 6157 5086 7051 9749 12196 11125 +18274 6204 5288 5743 1990 12243 11327 11782 8029 +18275 6230 4900 2504 1696 12269 10939 8543 7735 +18276 1994 5295 2031 6205 8033 11334 8070 12244 +18277 2510 5740 773 6050 8549 11779 6812 12089 +18278 1779 5330 2842 6189 7818 11369 8881 12228 +18279 6166 778 4562 5257 12205 6817 10601 11296 +18280 2045 6102 2510 6131 8084 12141 8549 12170 +18281 2011 6054 988 5532 8050 12093 7027 11571 +18282 2184 6054 2011 5948 8223 12093 8050 11987 +18283 407 3770 1552 5154 6446 9809 7591 11193 +18284 5489 5906 5065 1862 11528 11945 11104 7901 +18285 5984 4307 4306 240 12023 10346 10345 6279 +18286 6095 5485 4538 1851 12134 11524 10577 7890 +18287 1712 5579 3633 5692 7751 11618 9672 11731 +18288 1951 5068 1793 4833 7990 11107 7832 10872 +18289 6216 2593 569 5883 12255 8632 6608 11922 +18290 2164 4796 302 4662 8203 10835 6341 10701 +18291 412 5946 2349 5771 6451 11985 8388 11810 +18292 5920 5919 2608 1143 11959 11958 8647 7182 +18293 5988 206 2612 5393 12027 6245 8651 11432 +18294 5875 6015 5680 4733 11914 12054 11719 10772 +18295 5929 262 4705 5205 11968 6301 10744 11244 +18296 1863 4742 912 4470 7902 10781 6951 10509 +18297 1091 6124 2442 5547 7130 12163 8481 11586 +18298 1943 5502 2218 6167 7982 11541 8257 12206 +18299 2040 5699 748 5649 8079 11738 6787 11688 +18300 1905 5777 1904 4962 7944 11816 7943 11001 +18301 6099 3816 1731 5625 12138 9855 7770 11664 +18302 5558 1912 3321 5781 11597 7951 9360 11820 +18303 1110 4049 2835 5826 7149 10088 8874 11865 +18304 2570 5086 341 5153 8609 11125 6380 11192 +18305 5961 4782 3834 1533 12000 10821 9873 7572 +18306 5530 4558 5726 1511 11569 10597 11765 7550 +18307 5732 2460 1657 6207 11771 8499 7696 12246 +18308 6193 5624 5232 1961 12232 11663 11271 8000 +18309 5454 5455 687 2055 11493 11494 6726 8094 +18310 2066 6146 2322 6062 8105 12185 8361 12101 +18311 1774 5690 3604 6155 7813 11729 9643 12194 +18312 5977 4821 1104 2629 12016 10860 7143 8668 +18313 6136 2034 4541 4573 12175 8073 10580 10612 +18314 1707 6138 3962 5461 7746 12177 10001 11500 +18315 5474 1729 4436 5947 11513 7768 10475 11986 +18316 3475 6177 2752 1060 9514 12216 8791 7099 +18317 5603 6018 6002 2328 11642 12057 12041 8367 +18318 5526 4079 1863 1060 11565 10118 7902 7099 +18319 767 5397 2641 5873 6806 11436 8680 11912 +18320 5762 2221 5684 5634 11801 8260 11723 11673 +18321 464 4613 642 3730 6503 10652 6681 9769 +18322 5343 5898 780 1795 11382 11937 6819 7834 +18323 948 3830 6079 5705 6987 9869 12118 11744 +18324 2163 6141 2189 6091 8202 12180 8228 12130 +18325 6104 5244 5495 2168 12143 11283 11534 8207 +18326 5500 203 5428 6020 11539 6242 11467 12059 +18327 1300 5466 824 2619 7339 11505 6863 8658 +18328 6139 216 1785 5156 12178 6255 7824 11195 +18329 6143 6176 2711 2194 12182 12215 8750 8233 +18330 6143 19 18 6176 12182 115 114 12215 +18331 2154 5896 1635 5621 8193 11935 7674 11660 +18332 5906 5489 5227 2092 11945 11528 11266 8131 +18333 5558 5781 851 2167 11597 11820 6890 8206 +18334 1950 5369 1126 6118 7989 11408 7165 12157 +18335 347 5341 1211 5718 6386 11380 7250 11757 +18336 901 4700 1720 5729 6940 10739 7759 11768 +18337 2104 5251 2103 5469 8143 11290 8142 11508 +18338 817 3782 3285 5945 6856 9821 9324 11984 +18339 2250 5595 1523 5173 8289 11634 7562 11212 +18340 5303 4714 4765 497 11342 10753 10804 6536 +18341 5963 4920 3920 912 12002 10959 9959 6951 +18342 6171 1897 509 2947 12210 7936 6548 8986 +18343 6025 1966 5601 6024 12064 8005 11640 12063 +18344 2159 5987 478 5986 8198 12026 6517 12025 +18345 4573 1432 911 6136 10612 7471 6950 12175 +18346 341 5492 2371 5153 6380 11531 8410 11192 +18347 5899 1580 3758 3773 11938 7619 9797 9812 +18348 2162 6013 1676 6001 8201 12052 7715 12040 +18349 5919 5920 601 2543 11958 11959 6640 8582 +18350 5166 1767 2657 5580 11205 7806 8696 11619 +18351 206 5988 1732 5989 6245 12027 7771 12028 +18352 989 5365 2018 5949 7028 11404 8057 11988 +18353 5381 1856 225 6239 11420 7895 6264 12278 +18354 5984 1529 3526 4307 12023 7568 9565 10346 +18355 5718 3761 4768 1739 11757 9800 10807 7778 +18356 5185 1815 2208 5184 11224 7854 8247 11223 +18357 5306 2198 3524 5858 11345 8237 9563 11897 +18358 5961 3814 4874 642 12000 9853 10913 6681 +18359 4997 2536 5571 5652 11036 8575 11610 11691 +18360 2106 5363 755 5422 8145 11402 6794 11461 +18361 5961 2146 240 4782 12000 8185 6279 10821 +18362 2664 6025 802 6026 8703 12064 6841 12065 +18363 4220 612 2751 1269 10259 6651 8790 7308 +18364 2421 1486 4267 810 8460 7525 10306 6849 +$EndElements diff --git a/doc/UserManual.pdf b/doc/UserManual.pdf index cc06686ef490c1373ad1830d90830c1bd27f8004..013d54620fd8021ea12692898bf2d3a6081178d3 100644 GIT binary patch delta 285252 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

WIw=Z1} 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%0AVH9q*n_N02hI>ay)^MXM%IP1<}^l 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

-M)f^bZisMw==iK_>ysZ_GDvFeiuo-x-beCkb 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%0A~Dn5;?g?=vIH%pSW%ox2sC5-Mj%jCPesi-?F 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�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