move UT for cube planner algorithm to IT
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d581766b Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d581766b Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d581766b Branch: refs/heads/master Commit: d581766b5cee610be9f1c538e9a0f0e155fe4f95 Parents: 658353a Author: Zhong <nju_y...@apache.org> Authored: Sat Sep 23 21:32:42 2017 +0800 Committer: Zhong <nju_y...@apache.org> Committed: Sat Sep 23 23:23:57 2017 +0800 ---------------------------------------------------------------------- .../cuboid/algorithm/AlgorithmTestBase.java | 310 -- .../cuboid/algorithm/CuboidStatsUtilTest.java | 2 +- .../cuboid/algorithm/GeneticAlgorithmTest.java | 57 - .../cuboid/algorithm/GreedyAlgorithmTest.java | 58 - core-cube/src/test/resources/statistics.txt | 4092 ------------------ .../cuboid/algorithm/ITAlgorithmTestBase.java | 310 ++ .../algorithm/ITGeneticAlgorithmTest.java | 57 + .../cuboid/algorithm/ITGreedyAlgorithmTest.java | 58 + kylin-it/src/test/resources/statistics.txt | 4092 ++++++++++++++++++ 9 files changed, 4518 insertions(+), 4518 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/AlgorithmTestBase.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/AlgorithmTestBase.java b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/AlgorithmTestBase.java deleted file mode 100755 index 02927c3..0000000 --- a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/AlgorithmTestBase.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -package org.apache.kylin.cube.cuboid.algorithm; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.kylin.cube.cuboid.TreeCuboidScheduler.CuboidCostComparator; -import org.apache.kylin.cube.cuboid.TreeCuboidScheduler.CuboidTree; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; - -public class AlgorithmTestBase { - - public CuboidStats cuboidStats; - - private Set<Long> mandatoryCuboids; - - @Before - public void setUp() throws Exception { - - mandatoryCuboids = Sets.newHashSet(); - mandatoryCuboids.add(3000L); - mandatoryCuboids.add(1888L); - mandatoryCuboids.add(88L); - cuboidStats = new CuboidStats.Builder("test", 4095L, simulateCount(), simulateSpaceSize()) - .setMandatoryCuboids(mandatoryCuboids).setHitFrequencyMap(simulateHitFrequency()) - .setScanCountSourceMap(simulateScanCount()).build(); - } - - @After - public void after() throws Exception { - } - - @Test - public void testMandatoryRowCountEstimation() { - for (long mandatoryCuboid : mandatoryCuboids) { - System.out.println("Cuboid id: " + mandatoryCuboid + "; Row Count: " - + cuboidStats.getStatistics().get(mandatoryCuboid)); - } - } - - /** better if closer to 1, worse if closer to 0*/ - public double getQueryCostRatio(CuboidStats cuboidStats, List<Long> recommendList) { - CuboidTree cuboidTree = CuboidTree.createFromCuboids(recommendList, - new CuboidCostComparator(cuboidStats.getStatistics())); - double queryCostBest = 0; - for (Long cuboidId : cuboidStats.getAllCuboidsForSelection()) { - if (cuboidStats.getCuboidQueryCost(cuboidId) != null) { - queryCostBest += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidCount(cuboidId); - // queryCostBest += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidQueryCost(cuboidId); - } - } - - double queryCost = 0; - for (Long cuboidId : cuboidStats.getAllCuboidsForSelection()) { - long matchCuboidId = cuboidTree.findBestMatchCuboid(cuboidId); - if (cuboidStats.getCuboidQueryCost(matchCuboidId) != null) { - queryCost += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidCount(matchCuboidId); - // queryCost += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidQueryCost(matchCuboidId); - } - } - - return queryCostBest / queryCost; - } - - protected Map<Long, Long> simulateCount() { - Map<Long, Long> countMap = Maps.newHashMap(); - BufferedReader br = null; - - try { - - String sCurrentLine; - - br = new BufferedReader(new FileReader("src/test/resources/statistics.txt")); - - while ((sCurrentLine = br.readLine()) != null) { - String[] statPair = sCurrentLine.split(" "); - countMap.put(Long.valueOf(statPair[0]), Long.valueOf(statPair[1])); - } - - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - if (br != null) - br.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - - return countMap; - } - - protected Map<Long, Double> simulateSpaceSize() { - Map<Long, Double> sizeMap = Maps.newHashMap(); - Map<Long, Long> countMap = simulateCount(); - for (Map.Entry<Long, Long> entry : countMap.entrySet()) { - sizeMap.put(entry.getKey(), entry.getValue() * 1.0); - } - return sizeMap; - } - - protected Map<Long, Long> simulateHitFrequency() { - Map<Long, Long> hitFrequencyMap = Maps.newHashMap(); - - hitFrequencyMap.put(4095L, 10L); - hitFrequencyMap.put(3849L, 15L); - hitFrequencyMap.put(3780L, 31L); - - hitFrequencyMap.put(3459L, 16L); - hitFrequencyMap.put(3145L, 29L); - - hitFrequencyMap.put(2861L, 21L); - hitFrequencyMap.put(2768L, 40L); - - hitFrequencyMap.put(1528L, 10L); - hitFrequencyMap.put(1440L, 9L); - hitFrequencyMap.put(1152L, 21L); - - hitFrequencyMap.put(256L, 23L); - - hitFrequencyMap.put(128L, 7L); - hitFrequencyMap.put(272L, 8L); - hitFrequencyMap.put(288L, 10L); - hitFrequencyMap.put(384L, 2L); - hitFrequencyMap.put(320L, 3L); - hitFrequencyMap.put(432L, 5L); - hitFrequencyMap.put(258L, 8L); - hitFrequencyMap.put(336L, 10L); - hitFrequencyMap.put(274L, 22L); - hitFrequencyMap.put(488L, 41L); - hitFrequencyMap.put(352L, 10L); - - hitFrequencyMap.put(16L, 1L); - hitFrequencyMap.put(32L, 5L); - hitFrequencyMap.put(34L, 1L); - - hitFrequencyMap.put(2L, 21L); - - return hitFrequencyMap; - } - - protected Map<Long, Map<Long, Long>> simulateScanCount() { - Map<Long, Map<Long, Long>> scanCountMap = Maps.newLinkedHashMap(); - scanCountMap.put(4094L, new HashMap<Long, Long>() { - { - put(4095L, 1833041L); - } - }); - scanCountMap.put(3849L, new HashMap<Long, Long>() { - { - put(3849L, 276711L); - } - }); - scanCountMap.put(3780L, new HashMap<Long, Long>() { - { - put(3780L, 129199L); - } - }); - scanCountMap.put(3459L, new HashMap<Long, Long>() { - { - put(3459L, 168109L); - } - }); - scanCountMap.put(3145L, new HashMap<Long, Long>() { - { - put(3145L, 299991L); - } - }); - scanCountMap.put(2861L, new HashMap<Long, Long>() { - { - put(2861L, 2121L); - } - }); - scanCountMap.put(2768L, new HashMap<Long, Long>() { - { - put(2768L, 40231L); - } - }); - scanCountMap.put(256L, new HashMap<Long, Long>() { - { - put(256L, 1L); - } - }); - scanCountMap.put(16L, new HashMap<Long, Long>() { - { - put(16L, 1L); - } - }); - scanCountMap.put(32L, new HashMap<Long, Long>() { - { - put(32L, 2L); - } - }); - scanCountMap.put(128L, new HashMap<Long, Long>() { - { - put(128L, 3L); - } - }); - scanCountMap.put(272L, new HashMap<Long, Long>() { - { - put(272L, 2L); - } - }); - scanCountMap.put(288L, new HashMap<Long, Long>() { - { - put(288L, 3L); - } - }); - scanCountMap.put(2L, new HashMap<Long, Long>() { - { - put(2L, 1L); - } - }); - scanCountMap.put(384L, new HashMap<Long, Long>() { - { - put(384L, 2L); - } - }); - scanCountMap.put(320L, new HashMap<Long, Long>() { - { - put(320L, 3L); - } - }); - scanCountMap.put(432L, new HashMap<Long, Long>() { - { - put(432L, 5L); - } - }); - scanCountMap.put(1152L, new HashMap<Long, Long>() { - { - put(1152L, 21L); - } - }); - scanCountMap.put(258L, new HashMap<Long, Long>() { - { - put(258L, 2L); - } - }); - scanCountMap.put(1440L, new HashMap<Long, Long>() { - { - put(1440L, 9L); - } - }); - scanCountMap.put(336L, new HashMap<Long, Long>() { - { - put(336L, 2L); - } - }); - scanCountMap.put(336L, new HashMap<Long, Long>() { - { - put(336L, 2L); - } - }); - scanCountMap.put(274L, new HashMap<Long, Long>() { - { - put(274L, 1L); - } - }); - scanCountMap.put(488L, new HashMap<Long, Long>() { - { - put(488L, 16L); - } - }); - scanCountMap.put(352L, new HashMap<Long, Long>() { - { - put(352L, 3L); - } - }); - scanCountMap.put(1528L, new HashMap<Long, Long>() { - { - put(1528L, 21L); - } - }); - scanCountMap.put(34L, new HashMap<Long, Long>() { - { - put(34L, 1L); - } - }); - - return scanCountMap; - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/CuboidStatsUtilTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/CuboidStatsUtilTest.java b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/CuboidStatsUtilTest.java index cb2b699..ba8833a 100644 --- a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/CuboidStatsUtilTest.java +++ b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/CuboidStatsUtilTest.java @@ -137,7 +137,7 @@ public class CuboidStatsUtilTest { private Set<Long> generateMassCuboidSet() { Set<Long> cuboidSet = Sets.newHashSet(); - long maxCuboid = (1L << 16); + long maxCuboid = (1L << 15); for (long i = 1; i < maxCuboid; i++) { cuboidSet.add(i); } http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GeneticAlgorithmTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GeneticAlgorithmTest.java b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GeneticAlgorithmTest.java deleted file mode 100755 index 4cefbd4..0000000 --- a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GeneticAlgorithmTest.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -package org.apache.kylin.cube.cuboid.algorithm; - -import java.util.List; - -import org.apache.kylin.cube.cuboid.algorithm.generic.GeneticAlgorithm; -import org.junit.Test; - -public class GeneticAlgorithmTest extends AlgorithmTestBase { - - @Test - public void testBPUSCalculator() { - BenefitPolicy benefitPolicy = new BPUSCalculator(cuboidStats); - GeneticAlgorithm algorithm = new GeneticAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by BPUSCalculator: " + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } - - @Test - public void testPBPUSCalculator() { - BenefitPolicy benefitPolicy = new PBPUSCalculator(cuboidStats); - GeneticAlgorithm algorithm = new GeneticAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by PBPUSCalculator:" + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } - - @Test - public void testSPBPUSCalculator() { - BenefitPolicy benefitPolicy = new SPBPUSCalculator(cuboidStats); - GeneticAlgorithm algorithm = new GeneticAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by SPBPUSCalculator:" + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } -} http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GreedyAlgorithmTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GreedyAlgorithmTest.java b/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GreedyAlgorithmTest.java deleted file mode 100755 index 0c9fbae..0000000 --- a/core-cube/src/test/java/org/apache/kylin/cube/cuboid/algorithm/GreedyAlgorithmTest.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. -*/ - -package org.apache.kylin.cube.cuboid.algorithm; - -import java.util.List; - -import org.apache.kylin.cube.cuboid.algorithm.greedy.GreedyAlgorithm; -import org.junit.Test; - -public class GreedyAlgorithmTest extends AlgorithmTestBase { - - @Test - public void testBPUSCalculator() { - BenefitPolicy benefitPolicy = new BPUSCalculator(cuboidStats); - GreedyAlgorithm algorithm = new GreedyAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by BPUSCalculator: " + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } - - @Test - public void testPBPUSCalculator() { - BenefitPolicy benefitPolicy = new PBPUSCalculator(cuboidStats); - GreedyAlgorithm algorithm = new GreedyAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by PBPUSCalculator:" + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } - - @Test - public void testSPBPUSCalculator() { - BenefitPolicy benefitPolicy = new SPBPUSCalculator(cuboidStats); - GreedyAlgorithm algorithm = new GreedyAlgorithm(-1, benefitPolicy, cuboidStats); - - List<Long> recommendList = algorithm.recommend(10); - System.out.println("recommendList by SPBPUSCalculator:" + recommendList); - System.out.println("Cost evaluated for each query: " + getQueryCostRatio(cuboidStats, recommendList)); - } - -} http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/core-cube/src/test/resources/statistics.txt ---------------------------------------------------------------------- diff --git a/core-cube/src/test/resources/statistics.txt b/core-cube/src/test/resources/statistics.txt deleted file mode 100644 index 35f69fc..0000000 --- a/core-cube/src/test/resources/statistics.txt +++ /dev/null @@ -1,4092 +0,0 @@ -1 5408 -2 12 -3 59114 -4 5393 -5 13545958 -6 59352 -7 48900622 -8 234 -9 622632 -10 2513 -11 2684805 -12 661703 -13 51457071 -14 3003220 -15 87905334 -16 4 -17 20057 -18 48 -19 185091 -20 21381 -21 27129912 -22 196464 -23 67684891 -24 905 -25 1409380 -26 8032 -27 5367438 -28 1540851 -29 66914540 -30 5780199 -31 102382118 -32 5 -33 26824 -34 60 -35 250433 -36 26763 -37 30256052 -38 261493 -39 69394709 -40 387 -41 665893 -42 2849 -43 2954813 -44 707431 -45 61390587 -46 3240484 -47 97487859 -48 16 -49 78962 -50 189 -51 648097 -52 80270 -53 46703642 -54 675226 -55 85512868 -56 1138 -57 1463428 -58 8619 -59 5848317 -60 1577917 -61 77312551 -62 6472745 -63 111122050 -64 14 -65 42855 -66 144 -67 337000 -68 44890 -69 33660047 -70 361045 -71 73187752 -72 427 -73 715905 -74 3192 -75 3277233 -76 765421 -77 66688961 -78 3649848 -79 100898382 -80 40 -81 116673 -82 404 -83 846531 -84 123061 -85 51207630 -86 908398 -87 89543966 -89 1645138 -90 9255 -91 6589067 -92 1780584 -93 83045129 -94 7349741 -95 113014051 -96 54 -97 170610 -98 585 -99 1112616 -100 182519 -101 46860213 -102 1270670 -103 83382182 -104 596 -105 823678 -106 3734 -107 3900149 -108 884212 -109 74220549 -110 4350663 -111 106240989 -112 149 -113 407851 -114 1495 -115 2349130 -116 436830 -117 63626889 -118 2661185 -119 98988611 -120 1491 -121 1871944 -122 10494 -123 7619644 -124 2048333 -125 89765741 -126 8703141 -127 117905202 -128 6 -129 31335 -130 72 -131 278154 -132 32528 -133 33299431 -134 289515 -135 72241688 -136 628 -137 671628 -138 3798 -139 2945467 -140 728973 -141 64709349 -142 3205057 -143 99730017 -144 19 -145 86296 -146 217 -147 704603 -148 87692 -149 50352721 -150 728318 -151 89072848 -152 1169 -153 1468982 -154 8697 -155 5821059 -156 1602799 -157 82438973 -158 6402424 -159 113177011 -160 22 -161 111200 -162 263 -163 821474 -164 113822 -165 41785539 -166 872073 -167 76702603 -168 734 -169 753231 -170 4143 -171 3512464 -172 809672 -173 71693751 -174 3856651 -175 104344446 -176 67 -177 273672 -178 744 -179 1742709 -180 285398 -181 57385824 -182 1920352 -183 91758819 -184 1332 -185 1689133 -186 9413 -187 6897407 -188 1821788 -189 88978769 -190 7611629 -191 116410794 -192 51 -193 171884 -194 560 -195 1169383 -196 183414 -197 49288586 -198 1305325 -199 85851630 -200 815 -201 842521 -202 4624 -203 4010811 -204 907399 -205 77349281 -206 4354569 -207 109042390 -208 144 -209 415680 -210 1523 -211 2475079 -212 441787 -213 66734849 -214 2864972 -215 100470889 -216 1505 -217 1871044 -218 10528 -219 7754601 -220 2042714 -221 93029295 -222 8834572 -223 117923381 -224 160 -225 454208 -226 1684 -227 2583569 -228 503525 -229 57311428 -230 2989675 -231 90863923 -232 1048 -233 1140000 -234 6050 -235 5382389 -236 1238979 -237 84241270 -238 6191583 -239 114362710 -240 428 -241 972308 -242 4150 -243 4729682 -244 1089252 -245 72065430 -246 5730712 -247 104402615 -248 1939 -249 2462027 -250 13624 -251 10071894 -252 2712730 -253 97601168 -254 11673557 -255 122190940 -256 2 -257 9498 -258 24 -259 79945 -260 10752 -261 14258615 -262 107239 -263 50856457 -264 452 -265 697726 -266 4490 -267 2822825 -268 932822 -269 53639060 -270 3662872 -271 90489596 -272 8 -273 29798 -274 95 -275 223957 -276 41341 -277 28442950 -278 332878 -279 68930124 -280 1699 -281 1531510 -282 13519 -283 5635662 -284 1989662 -285 69678635 -286 6989874 -287 103854924 -288 10 -289 38592 -290 120 -291 295819 -292 51637 -293 31369690 -294 434324 -295 70938987 -296 671 -297 721499 -298 5038 -299 3147896 -300 968177 -301 64784337 -302 4035226 -303 98482649 -304 32 -305 101297 -306 365 -307 712465 -308 143822 -309 48962693 -310 1050839 -311 88025320 -312 2013 -313 1585225 -314 14261 -315 6129197 -316 2060910 -317 81099274 -318 7634802 -319 111395308 -320 27 -321 57497 -322 257 -323 380724 -324 79504 -325 34879820 -326 587405 -327 76210771 -328 734 -329 789662 -330 5397 -331 3524986 -332 1088152 -333 68215167 -334 4691841 -335 104893830 -336 75 -337 143289 -338 703 -339 925065 -340 214788 -341 53155396 -342 1384457 -343 93315403 -344 2163 -345 1777001 -346 15550 -347 6864447 -348 2381043 -349 85018646 -350 8861967 -351 114587784 -352 103 -353 203441 -354 1031 -355 1216511 -356 296217 -357 48144102 -358 1789235 -359 86052906 -360 965 -361 908466 -362 6345 -363 4128921 -364 1268319 -365 76413089 -366 5553302 -367 108727635 -368 273 -369 459035 -370 2568 -371 2479945 -372 676543 -373 65867786 -374 3570437 -375 101630311 -376 2507 -377 1987608 -378 17331 -379 7980360 -380 2679601 -381 92363718 -382 10275128 -383 117942645 -384 12 -385 45711 -386 143 -387 332427 -388 63139 -389 34188123 -390 513289 -391 74310480 -392 1060 -393 744405 -394 6322 -395 3144421 -396 998196 -397 67000938 -398 4092455 -399 102479781 -400 37 -401 112496 -402 405 -403 801759 -404 159812 -405 51596478 -406 1182427 -407 90983246 -408 2029 -409 1581472 -410 14290 -411 6061271 -412 2047019 -413 84461228 -414 7742372 -415 112474685 -416 43 -417 136352 -418 496 -419 902897 -420 198401 -421 43850605 -422 1324526 -423 78791391 -424 1186 -425 829942 -426 6923 -427 3727578 -428 1138486 -429 73609409 -430 4872398 -431 107810620 -432 126 -433 314911 -434 1339 -435 1863528 -436 460075 -437 59860345 -438 2628087 -439 95065035 -440 2255 -441 1797843 -442 15594 -443 7234754 -444 2398192 -445 90382853 -446 9184313 -447 118024610 -448 100 -449 204678 -450 1013 -451 1288671 -452 311368 -453 51461477 -454 1940945 -455 88461722 -456 1319 -457 913332 -458 7819 -459 4144085 -460 1279201 -461 79110460 -462 5635626 -463 110369460 -464 273 -465 477392 -466 2657 -467 2622297 -468 712921 -469 69125337 -470 3764291 -471 101922838 -472 2531 -473 2001102 -474 17156 -475 8011737 -476 2725091 -477 95464996 -478 10557559 -479 121667004 -480 302 -481 514289 -482 2955 -483 2727750 -484 764150 -485 57613471 -486 3864725 -487 91514836 -488 1671 -489 1216475 -490 10000 -491 5622217 -492 1711059 -493 87066187 -494 7699073 -495 115145694 -496 770 -497 1059840 -498 7002 -499 4971895 -500 1543099 -501 73147277 -502 6992897 -503 105256346 -504 3194 -505 2628403 -506 22318 -507 10634614 -508 3581598 -509 99591089 -510 13694936 -511 123805801 -512 97 -513 438583 -514 1082 -515 2709770 -516 467793 -517 62233795 -518 3236365 -519 92864138 -520 873 -521 1201180 -522 4916 -523 5992226 -524 1295951 -525 89881852 -526 6821855 -527 116111968 -528 290 -529 1027455 -530 3181 -531 5372086 -532 1118502 -533 76874973 -534 6477401 -535 106174660 -536 1934 -537 2683421 -538 13540 -539 11305324 -540 2991570 -541 103334266 -542 13295977 -543 124348132 -544 270 -545 1071956 -546 3026 -547 5786650 -548 1181191 -549 67812072 -550 7082943 -551 98196271 -552 1181 -553 1726665 -554 7259 -555 8291732 -556 1877832 -557 93139506 -558 10029949 -559 119823816 -560 789 -561 2302526 -562 8328 -563 9912121 -564 2601558 -565 82274208 -566 12455751 -567 110555733 -568 2644 -569 3732049 -570 19144 -571 15286252 -572 4134722 -573 106709277 -574 18281589 -575 128436771 -576 528 -577 1488216 -578 5508 -579 7357343 -580 1692952 -581 70505609 -582 9163234 -583 99934902 -584 1509 -585 2198656 -586 9779 -587 10127264 -588 2482129 -589 97628745 -590 12274594 -591 122862474 -592 1472 -593 3124699 -594 14405 -595 12289082 -596 3626702 -597 83834130 -598 15663342 -599 112128796 -600 3392 -601 4553823 -602 24896 -603 17313176 -604 5234246 -605 110223356 -606 21393439 -607 129849677 -608 1706 -609 2983727 -610 15499 -611 12215091 -612 3493957 -613 74709369 -614 15524952 -615 102572764 -616 2894 -617 3633552 -618 20698 -619 14875112 -620 4164119 -621 99922065 -622 18698435 -623 125227448 -624 4256 -625 5549352 -626 36184 -627 18803250 -628 6673860 -629 87286090 -630 24874079 -631 115575487 -632 6459 -633 7016394 -634 47556 -635 23976463 -636 8150783 -637 112752491 -638 30924190 -639 133441422 -640 266 -641 1207316 -642 3052 -643 6636130 -644 1300828 -645 69384103 -646 8156139 -647 98959683 -648 1398 -649 1923357 -650 8325 -651 9397687 -652 2082573 -653 95659787 -654 11220516 -655 119557748 -656 796 -657 2638421 -658 8734 -659 11505399 -660 2920808 -661 82860830 -662 14608740 -663 110360653 -664 2664 -665 4175381 -666 19534 -667 16801270 -668 4630930 -669 108806369 -670 20353452 -671 130528080 -672 939 -673 2827946 -674 10260 -675 12029336 -676 3182512 -677 73512155 -678 15772458 -679 102756341 -680 2344 -681 3476032 -682 16025 -683 14821628 -684 3912061 -685 100378233 -686 18580297 -687 124831025 -688 2621 -689 5304217 -690 25764 -691 18836482 -692 6247823 -693 86432297 -694 24530141 -695 115054234 -696 4916 -697 6820121 -698 37208 -699 24204404 -700 7854361 -701 110867598 -702 30209819 -703 135122998 -704 1604 -705 3317097 -706 15294 -707 13997817 -708 3885042 -709 75085038 -710 17901482 -711 103964100 -712 3112 -713 3999443 -714 21348 -715 16609940 -716 4647775 -717 100722007 -718 21008944 -719 127918093 -720 4244 -721 6276421 -722 36834 -723 21104546 -724 7602232 -725 88383830 -726 27954151 -727 116964820 -728 6670 -729 7958519 -730 48705 -731 26741535 -732 9310460 -733 114567332 -734 34012957 -735 137067139 -736 5334 -737 6688120 -738 45994 -739 21913788 -740 8199538 -741 78744048 -742 28615773 -743 108064945 -744 7301 -745 7374315 -746 51827 -747 24569184 -748 8975876 -749 104718633 -750 31172497 -751 131132532 -752 12668 -753 11226730 -754 98340 -755 30834996 -756 14086985 -757 93251462 -758 40453981 -759 120846110 -760 15512 -761 12738469 -762 110887 -763 36298409 -764 15874117 -765 115913270 -766 45644274 -767 138038027 -768 192 -769 494272 -770 2101 -771 2924324 -772 764314 -773 64313489 -774 4326195 -775 97104611 -776 1311 -777 1305415 -778 8457 -779 6165294 -780 1901623 -781 90611558 -782 8669189 -783 118554901 -784 577 -785 1147131 -786 5889 -787 5536938 -788 1721834 -789 78132034 -790 8046126 -791 108884068 -792 3229 -793 2866087 -794 22554 -795 11657118 -796 4013420 -797 105254429 -798 15495349 -799 127470105 -800 538 -801 1181321 -802 5741 -803 6020531 -804 1803671 -805 69690385 -806 8449098 -807 98671282 -808 1814 -809 1877892 -810 12291 -811 8754810 -812 2759541 -813 97772121 -814 12082368 -815 120788386 -816 1528 -817 2450462 -818 15039 -819 10372968 -820 3544857 -821 83722940 -822 14334373 -823 110816273 -824 4330 -825 3972188 -826 31649 -827 15765886 -828 5545733 -829 109234519 -830 20713321 -831 130127499 -832 1002 -833 1577814 -834 9545 -835 7576178 -836 2439206 -837 71766071 -838 10915295 -839 100458148 -840 2343 -841 2328703 -842 16180 -843 10483353 -844 3441733 -845 99813101 -846 14611780 -847 121316162 -848 2715 -849 3241664 -850 23634 -851 12808809 -852 4752410 -853 85834475 -854 17805351 -855 113391766 -856 5600 -857 4757337 -858 40361 -859 18190693 -860 6739328 -861 112781190 -862 24058555 -863 133824858 -864 2874 -865 3159084 -866 24521 -867 12492065 -868 4494122 -869 76201036 -870 17726844 -871 102131562 -872 4475 -873 3832627 -874 32005 -875 15438631 -876 5410669 -877 103092393 -878 21025747 -879 124629007 -880 7014 -881 5815341 -882 54957 -883 19411364 -884 8002622 -885 88589435 -886 26878537 -887 118293969 -888 10339 -889 7377283 -890 72321 -891 24837882 -892 10041432 -893 114001415 -894 33362816 -895 134556926 -896 528 -897 1302023 -898 5874 -899 6916181 -900 2002364 -901 70992688 -902 9738517 -903 99824048 -904 2204 -905 2060794 -906 13912 -907 9725899 -908 2976365 -909 97543583 -910 13193140 -911 121717746 -912 1564 -913 2787402 -914 15871 -915 12101312 -916 3938817 -917 85048610 -918 16807580 -919 113186566 -920 4445 -921 4309356 -922 32492 -923 17342856 -924 5976510 -925 110425493 -926 23151915 -927 129144702 -928 1707 -929 2935631 -930 17601 -931 12430272 -932 4154926 -933 73795002 -934 17277433 -935 104447950 -936 3748 -937 3655594 -938 26258 -939 15269699 -940 5086842 -941 102039383 -942 20774859 -943 125357623 -944 4693 -945 5489921 -946 42290 -947 19427124 -948 7514459 -949 87672236 -950 26451367 -951 115013581 -952 8006 -953 7124350 -954 60434 -955 24593613 -956 9513495 -957 114569527 -958 33288566 -959 134472524 -960 2900 -961 3466345 -962 25122 -963 14315270 -964 4969555 -965 77208126 -966 19818490 -967 105788076 -968 4990 -969 4221110 -970 33871 -971 17255470 -972 5969058 -973 102263401 -974 23737233 -975 128807532 -976 7382 -977 6537423 -978 58610 -979 21948136 -980 8919704 -981 90888626 -982 30390361 -983 119051840 -984 10928 -985 8203126 -986 76521 -987 27633249 -988 11140419 -989 114440012 -990 36992653 -991 135276469 -992 8907 -993 6923754 -994 70349 -995 22454011 -996 9467754 -997 80151964 -998 31126922 -999 110226875 -1000 11535 -1001 7690684 -1002 80056 -1003 25245134 -1004 10480355 -1005 107198218 -1006 34288000 -1007 129185160 -1008 20582 -1009 11741125 -1010 146083 -1011 32064284 -1012 15900178 -1013 93412095 -1014 42446327 -1015 122663267 -1016 24255 -1017 13339271 -1018 166816 -1019 36578306 -1020 18058472 -1021 118691906 -1022 49121357 -1023 140113432 -1024 31 -1025 150413 -1026 366 -1027 1158644 -1028 157542 -1029 51738914 -1030 1251433 -1031 87564031 -1032 872 -1033 842251 -1034 4476 -1035 4113036 -1036 900240 -1037 78408308 -1038 4567962 -1039 111542416 -1040 93 -1041 402568 -1042 1086 -1043 2554935 -1044 431312 -1045 67925585 -1046 2942411 -1047 102916480 -1048 1527 -1049 1896622 -1050 10210 -1051 8192965 -1052 2063099 -1053 93601052 -1054 9265168 -1055 121858401 -1056 88 -1057 370225 -1058 1025 -1059 2417970 -1060 396557 -1061 61259477 -1062 2777133 -1063 93660336 -1064 1045 -1065 1001241 -1066 5311 -1067 5111023 -1068 1082547 -1069 85511233 -1070 5672325 -1071 116016162 -1072 265 -1073 895954 -1074 2848 -1075 4821805 -1076 995465 -1077 75619690 -1078 5751715 -1079 107422928 -1080 1819 -1081 2306325 -1082 11993 -1083 9782219 -1084 2516472 -1085 100548867 -1086 11462175 -1087 125532977 -1088 192 -1089 629408 -1090 1986 -1091 3545722 -1092 706626 -1093 63252380 -1094 4511461 -1095 95363459 -1096 1256 -1097 1406524 -1098 7031 -1099 6598640 -1100 1581968 -1101 89406248 -1102 7921177 -1103 117127451 -1104 546 -1105 1500980 -1106 5318 -1107 6740546 -1108 1748642 -1109 77488092 -1110 8648849 -1111 107904509 -1112 2351 -1113 3158581 -1114 16590 -1115 12308887 -1116 3591894 -1117 103824241 -1118 15157568 -1119 124572802 -1120 528 -1121 1293488 -1122 5225 -1123 6207972 -1124 1503400 -1125 68975282 -1126 7991050 -1127 97278780 -1128 1646 -1129 1936460 -1130 10057 -1131 8990579 -1132 2211374 -1133 93764350 -1134 10894996 -1135 118538464 -1136 1422 -1137 2711838 -1138 13151 -1139 10697510 -1140 3240677 -1141 82089910 -1142 13911964 -1143 112665340 -1144 3216 -1145 4105046 -1146 23032 -1147 15785201 -1148 4793386 -1149 106967458 -1150 19875798 -1151 128446296 -1152 40 -1153 192297 -1154 475 -1155 1396806 -1156 202836 -1157 52637774 -1158 1606679 -1159 89369726 -1160 902 -1161 828488 -1162 4563 -1163 4057633 -1164 892115 -1165 78947682 -1166 4628052 -1167 111422777 -1168 120 -1169 516183 -1170 1391 -1171 3097751 -1172 564017 -1173 69601145 -1174 3637734 -1175 102905271 -1176 1546 -1177 1933969 -1178 10305 -1179 8269340 -1180 2104002 -1181 95781245 -1182 9426626 -1183 120561698 -1184 89 -1185 369612 -1186 1026 -1187 2408796 -1188 397318 -1189 59904945 -1190 2820020 -1191 94660030 -1192 1045 -1193 999782 -1194 5330 -1195 5094626 -1196 1093516 -1197 86313767 -1198 5690937 -1199 114097583 -1200 267 -1201 891221 -1202 2816 -1203 4842290 -1204 987372 -1205 75279605 -1206 5732936 -1207 105857115 -1208 1809 -1209 2307523 -1210 12149 -1211 9964552 -1212 2526404 -1213 100760890 -1214 11414974 -1215 123666639 -1216 274 -1217 755065 -1218 2729 -1219 3977942 -1220 870519 -1221 64659605 -1222 5120758 -1223 96933647 -1224 1278 -1225 1396320 -1226 7119 -1227 6565673 -1228 1557192 -1229 90355168 -1230 7938956 -1231 115782522 -1232 774 -1233 1720285 -1234 7329 -1235 7194896 -1236 2048618 -1237 78967236 -1238 9406784 -1239 107980362 -1240 2353 -1241 3123420 -1242 16670 -1243 12183951 -1244 3583355 -1245 103563328 -1246 15079836 -1247 124974132 -1248 525 -1249 1315885 -1250 5228 -1251 6242417 -1252 1522222 -1253 68808113 -1254 8105522 -1255 97128744 -1256 1671 -1257 1934414 -1258 10089 -1259 8992037 -1260 2195395 -1261 92646810 -1262 10827707 -1263 120784730 -1264 1418 -1265 2700373 -1266 13078 -1267 10786324 -1268 3231141 -1269 83046435 -1270 13975930 -1271 111979610 -1272 3220 -1273 4102509 -1274 23118 -1275 15607046 -1276 4771277 -1277 106799854 -1278 19520816 -1279 128796256 -1280 62 -1281 184096 -1282 708 -1283 1226094 -1284 286421 -1285 53802398 -1286 1996014 -1287 90620362 -1288 1357 -1289 924841 -1290 7488 -1291 4331679 -1292 1321421 -1293 81221055 -1294 6008660 -1295 111894723 -1296 186 -1297 458807 -1298 2043 -1299 2766075 -1300 720141 -1301 71253190 -1302 4155892 -1303 103750216 -1304 2519 -1305 2084785 -1306 17022 -1307 8646435 -1308 2851706 -1309 98202027 -1310 11287111 -1311 122619487 -1312 176 -1313 420756 -1314 1880 -1315 2561851 -1316 659248 -1317 61062843 -1318 3869343 -1319 95103270 -1320 1599 -1321 1108260 -1322 8792 -1323 5326849 -1324 1588410 -1325 87430404 -1326 7470599 -1327 115919794 -1328 505 -1329 981712 -1330 5058 -1331 5136174 -1332 1520407 -1333 78164384 -1334 7319615 -1335 107199735 -1336 2967 -1337 2463767 -1338 20121 -1339 10261048 -1340 3464105 -1341 100962295 -1342 13606407 -1343 122701080 -1344 364 -1345 701750 -1346 3503 -1347 3800034 -1348 1137022 -1349 64795529 -1350 5848348 -1351 96736498 -1352 1994 -1353 1526157 -1354 11745 -1355 6964018 -1356 2305917 -1357 91172102 -1358 9880389 -1359 119077644 -1360 1013 -1361 1622751 -1362 9579 -1363 7019881 -1364 2523931 -1365 80951123 -1366 10428309 -1367 109408699 -1368 3941 -1369 3277940 -1370 27831 -1371 12852475 -1372 4758310 -1373 106022332 -1374 17495641 -1375 126719249 -1376 972 -1377 1399891 -1378 8883 -1379 6522581 -1380 2149418 -1381 69594418 -1382 9537448 -1383 100195532 -1384 2646 -1385 2075924 -1386 16513 -1387 9174104 -1388 3073036 -1389 96008133 -1390 13150409 -1391 120614695 -1392 2544 -1393 2847171 -1394 21947 -1395 11133816 -1396 4270758 -1397 84317788 -1398 15877777 -1399 112157213 -1400 5329 -1401 4394623 -1402 37521 -1403 16359478 -1404 6221391 -1405 108191440 -1406 22252708 -1407 129282760 -1408 80 -1409 233598 -1410 919 -1411 1529897 -1412 372629 -1413 54941648 -1414 2403095 -1415 93082547 -1416 1405 -1417 931537 -1418 7578 -1419 4290188 -1420 1319386 -1421 81636241 -1422 6049584 -1423 111209518 -1424 239 -1425 588606 -1426 2633 -1427 3298108 -1428 944159 -1429 72146846 -1430 4961109 -1431 105176126 -1432 2542 -1433 2085325 -1434 16845 -1435 8528145 -1436 2872494 -1437 97299053 -1438 11408785 -1439 122170761 -1440 175 -1441 428398 -1442 1857 -1443 2577017 -1444 672969 -1445 62750644 -1446 3850272 -1447 93736662 -1448 1602 -1449 1130498 -1450 8813 -1451 5381949 -1452 1619208 -1453 89143817 -1454 7451329 -1455 115301172 -1456 503 -1457 997074 -1458 5019 -1459 5067096 -1460 1515936 -1461 77314474 -1462 7324790 -1463 107872289 -1464 2949 -1465 2504573 -1466 19777 -1467 10264209 -1468 3491214 -1469 101733794 -1470 13764677 -1471 126159667 -1472 519 -1473 828924 -1474 4847 -1475 4166168 -1476 1340404 -1477 66334297 -1478 6439460 -1479 96008951 -1480 2005 -1481 1507150 -1482 11846 -1483 6968586 -1484 2282402 -1485 91127119 -1486 9843793 -1487 118194925 -1488 1424 -1489 1831180 -1490 12770 -1491 7605776 -1492 2883433 -1493 80125968 -1494 11202391 -1495 109486787 -1496 3918 -1497 3307601 -1498 27919 -1499 12955575 -1500 4738709 -1501 103773671 -1502 17275804 -1503 127329438 -1504 969 -1505 1422291 -1506 8909 -1507 6507932 -1508 2178852 -1509 70387439 -1510 9624012 -1511 101004435 -1512 2633 -1513 2073074 -1514 16450 -1515 9257057 -1516 3095246 -1517 96744708 -1518 13164609 -1519 120792891 -1520 2537 -1521 2849173 -1522 21678 -1523 11126753 -1524 4214940 -1525 83496541 -1526 16227929 -1527 111759246 -1528 5282 -1529 4327984 -1530 36901 -1531 16352366 -1532 6228279 -1533 109868812 -1534 22306845 -1535 128783268 -1536 613 -1537 2730648 -1538 7248 -1539 13278299 -1540 3049614 -1541 79907265 -1542 17488876 -1543 107021427 -1544 2039 -1545 3426089 -1546 13111 -1547 15894701 -1548 3779090 -1549 103817282 -1550 20610011 -1551 127619132 -1552 1850 -1553 5750197 -1554 20084 -1555 21326501 -1556 6829385 -1557 90140817 -1558 29179696 -1559 119891574 -1560 4089 -1561 7286104 -1562 31998 -1563 26759490 -1564 8364412 -1565 116915755 -1566 34853541 -1567 135295601 -1568 1947 -1569 5418503 -1570 20958 -1571 20571143 -1572 6344275 -1573 81816479 -1574 27592777 -1575 108579191 -1576 3733 -1577 6083457 -1578 28179 -1579 23099311 -1580 7149218 -1581 108603139 -1582 30825252 -1583 131097109 -1584 5443 -1585 10100080 -1586 53275 -1587 30137763 -1588 12414498 -1589 94443293 -1590 40499460 -1591 122045858 -1592 8237 -1593 11475670 -1594 66003 -1595 35381710 -1596 13907552 -1597 119123389 -1598 47110549 -1599 139272771 -1600 4061 -1601 7127017 -1602 36882 -1603 24401845 -1604 8922688 -1605 84138449 -1606 33420425 -1607 112205558 -1608 5886 -1609 7772691 -1610 44202 -1611 27042921 -1612 9659516 -1613 108984786 -1614 36408983 -1615 130079215 -1616 10558 -1617 12691029 -1618 91335 -1619 34920030 -1620 16478557 -1621 96095309 -1622 46744861 -1623 123508848 -1624 13624 -1625 14030341 -1626 102580 -1627 39459290 -1628 17864280 -1629 121671572 -1630 53134291 -1631 140735841 -1632 11493 -1633 12014204 -1634 95520 -1635 33843551 -1636 15393515 -1637 86890246 -1638 44868182 -1639 114698301 -1640 14164 -1641 12661312 -1642 102269 -1643 37646637 -1644 16290134 -1645 112225670 -1646 49119976 -1647 135335977 -1648 27272 -1649 19243478 -1650 206764 -1651 45579973 -1652 25651324 -1653 98142216 -1654 58063137 -1655 126425142 -1656 31033 -1657 21408777 -1658 224421 -1659 49646834 -1660 27595106 -1661 122883998 -1662 63969490 -1663 144683259 -1664 617 -1665 2679240 -1666 7142 -1667 13283653 -1668 2952028 -1669 80788327 -1670 17722175 -1671 107927325 -1672 2063 -1673 3445371 -1674 13272 -1675 16066069 -1676 3812631 -1677 103282457 -1678 20565602 -1679 125650673 -1680 1844 -1681 5774665 -1682 20286 -1683 21770311 -1684 6799693 -1685 91092592 -1686 28744229 -1687 119392777 -1688 4083 -1689 7211377 -1690 32261 -1691 26442435 -1692 8343834 -1693 115077456 -1694 35234902 -1695 136484876 -1696 1945 -1697 5426386 -1698 21077 -1699 20802936 -1700 6367298 -1701 82046460 -1702 27747469 -1703 110219853 -1704 3779 -1705 6155539 -1706 28029 -1707 23546836 -1708 7168340 -1709 106466176 -1710 30803094 -1711 131112257 -1712 5341 -1713 10034176 -1714 53170 -1715 30473019 -1716 12384347 -1717 94382900 -1718 40983184 -1719 123154627 -1720 8178 -1721 11463619 -1722 66948 -1723 35258213 -1724 13885331 -1725 115631945 -1726 46896987 -1727 138729236 -1728 4027 -1729 7036632 -1730 36665 -1731 24385441 -1732 8812806 -1733 83382945 -1734 33703350 -1735 111467501 -1736 5937 -1737 7981053 -1738 43270 -1739 27665655 -1740 9770689 -1741 108871177 -1742 35993072 -1743 133627510 -1744 10501 -1745 12708057 -1746 91780 -1747 34599617 -1748 16286618 -1749 94619754 -1750 46654440 -1751 124234980 -1752 13604 -1753 14157541 -1754 104051 -1755 40103516 -1756 17871019 -1757 119564746 -1758 51707472 -1759 141461884 -1760 11643 -1761 12067915 -1762 96253 -1763 34014423 -1764 15465732 -1765 86580327 -1766 45226540 -1767 116041041 -1768 13865 -1769 12746628 -1770 103219 -1771 36241695 -1772 16213272 -1773 111309833 -1774 48414814 -1775 135449250 -1776 27000 -1777 19411950 -1778 205500 -1779 44434714 -1780 25714325 -1781 99059044 -1782 57678269 -1783 126866168 -1784 30973 -1785 21102620 -1786 222239 -1787 50330284 -1788 27371928 -1789 122497188 -1790 64093612 -1791 143298155 -1792 1240 -1793 2924331 -1794 13496 -1795 13631199 -1796 4468294 -1797 80097158 -1798 20106155 -1799 108928714 -1800 3282 -1801 3649010 -1802 22380 -1803 16781603 -1804 5388194 -1805 106628403 -1806 23564226 -1807 128033285 -1808 3618 -1809 6021472 -1810 37198 -1811 22156554 -1812 8609761 -1813 93378196 -1814 31350349 -1815 121356005 -1816 6988 -1817 7594121 -1818 54875 -1819 27270994 -1820 10590865 -1821 117257800 -1822 37828233 -1823 136596579 -1824 3646 -1825 5656922 -1826 36404 -1827 21482255 -1828 7994317 -1829 83454123 -1830 30351318 -1831 109286465 -1832 6270 -1833 6425176 -1834 46201 -1835 23962566 -1836 8980191 -1837 107620761 -1838 33626199 -1839 132733059 -1840 9921 -1841 10458528 -1842 88975 -1843 30993855 -1844 14208475 -1845 95250681 -1846 42769354 -1847 123650134 -1848 13975 -1849 11857235 -1850 106420 -1851 36574084 -1852 16257651 -1853 118851270 -1854 50121180 -1855 140997664 -1856 7158 -1857 7372328 -1858 61335 -1859 25408870 -1860 10522563 -1861 84490786 -1862 35395854 -1863 113763173 -1864 9770 -1865 8320083 -1866 70997 -1867 28165783 -1868 11750214 -1869 109864335 -1870 39198261 -1871 132867109 -1872 18628 -1873 13071342 -1874 147439 -1875 35759298 -1876 18399007 -1877 96994118 -1878 49414422 -1879 125529665 -1880 22337 -1881 14802666 -1882 165092 -1883 41444909 -1884 20532132 -1885 121596514 -1886 54883602 -1887 141485763 -1889 12520099 -1890 145714 -1891 35424339 -1892 17663868 -1893 88137185 -1894 47167541 -1895 116264847 -1896 22685 -1897 13224942 -1898 156980 -1899 37818236 -1900 18457151 -1901 113678427 -1902 51664666 -1903 134162002 -1904 44355 -1905 19805951 -1906 310302 -1907 46353216 -1908 28026476 -1909 100495308 -1910 59486731 -1911 127948851 -1912 49058 -1913 21725542 -1914 329641 -1915 51218460 -1916 30049289 -1917 124537971 -1918 66983942 -1919 144770570 -1920 1227 -1921 2928344 -1922 13437 -1923 13616235 -1924 4444041 -1925 80096207 -1926 19749563 -1927 107817260 -1928 3278 -1929 3626551 -1930 22244 -1931 16535803 -1932 5412984 -1933 106282543 -1934 23433780 -1935 126540705 -1936 3683 -1937 6086630 -1938 37432 -1939 22284984 -1940 8580463 -1941 93622551 -1942 31617410 -1943 121838198 -1944 7043 -1945 7673323 -1946 54983 -1947 27831814 -1948 10704915 -1949 117534939 -1950 37519581 -1951 138812008 -1952 3659 -1953 5702609 -1954 36759 -1955 21267091 -1956 8048006 -1957 83274001 -1958 30193501 -1959 110759141 -1960 6207 -1961 6453541 -1962 47072 -1963 24071255 -1964 8976310 -1965 108266609 -1966 33115615 -1967 132031002 -1968 9967 -1969 10220194 -1970 88636 -1971 31213580 -1972 14434863 -1973 96789994 -1974 42471936 -1975 123722116 -1976 14046 -1977 11895366 -1978 106772 -1979 36685350 -1980 16121825 -1981 118751144 -1982 49926109 -1983 140689183 -1984 7189 -1985 7527179 -1986 61452 -1987 25329724 -1988 10616607 -1989 84677617 -1990 36118985 -1991 112532106 -1992 9835 -1993 8251387 -1994 71885 -1995 28035767 -1996 11715520 -1997 110480934 -1998 38941603 -1999 131575707 -2000 18790 -2001 13144752 -2002 146177 -2003 36022195 -2004 18497284 -2005 97131033 -2006 48509887 -2007 125631086 -2008 22669 -2009 14660464 -2010 164199 -2011 40959811 -2012 20388574 -2013 121600974 -2014 55479463 -2015 143099953 -2016 19157 -2017 12698361 -2018 148484 -2019 34577209 -2020 17790461 -2021 87213355 -2022 47476392 -2023 115442622 -2024 22629 -2025 13179261 -2026 154089 -2027 37538204 -2028 18377556 -2029 114492629 -2030 50854718 -2031 136212446 -2032 44950 -2033 20224756 -2034 313127 -2035 46192224 -2036 28234029 -2037 99809422 -2038 60251012 -2039 128322426 -2040 48643 -2041 21659921 -2042 333423 -2043 51327747 -2044 29698685 -2045 125287720 -2046 65541052 -2047 143363712 -2048 7442 -2049 16865576 -2050 86014 -2051 58493528 -2052 11942184 -2053 89632581 -2054 33477680 -2055 114775367 -2056 963389 -2057 62981401 -2058 4060470 -2059 106535613 -2060 36534798 -2061 117901650 -2062 61611213 -2063 136609704 -2064 28157 -2065 32701475 -2066 266899 -2067 80002045 -2068 20605052 -2069 103283230 -2070 44954693 -2071 126825626 -2072 2250088 -2073 83828002 -2074 8204614 -2075 122431797 -2076 48724593 -2077 127569021 -2078 74101651 -2079 147219073 -2080 36778 -2081 36023749 -2082 365157 -2083 80885359 -2084 22836215 -2085 102704007 -2086 46195873 -2087 124924944 -2088 1007977 -2089 73640279 -2090 4400657 -2091 116541566 -2092 42983632 -2093 123015751 -2094 68629830 -2095 141542925 -2096 107596 -2097 55596098 -2098 928674 -2099 100144751 -2100 32428219 -2101 114069321 -2102 56315717 -2103 132896191 -2104 2301083 -2105 95488907 -2106 8992628 -2107 129755866 -2108 55800262 -2109 133664018 -2110 81270095 -2111 148867980 -2112 60818 -2113 39478388 -2114 496621 -2115 87346550 -2116 24864797 -2117 104142521 -2118 49324042 -2119 127890693 -2120 1085707 -2121 80954470 -2122 5077239 -2123 120109435 -2124 46621404 -2125 125315012 -2126 72216620 -2127 144409677 -2128 172981 -2129 58845074 -2130 1246896 -2131 104330868 -2132 35009260 -2133 116873522 -2134 59436855 -2135 135497858 -2136 2545438 -2137 100546572 -2138 10140144 -2139 135715986 -2140 59536760 -2141 135964268 -2142 85499041 -2143 150029514 -2144 238274 -2145 54642555 -2146 1714172 -2147 98350715 -2148 33013034 -2149 113006861 -2150 56919070 -2151 131203018 -2152 1251207 -2153 89232062 -2154 5957049 -2155 126359432 -2156 51413519 -2157 129235200 -2158 76044270 -2159 144135646 -2160 582156 -2161 75540121 -2162 3578468 -2163 115717529 -2164 43538840 -2165 122547316 -2166 66733129 -2167 138354560 -2168 2911859 -2169 108527925 -2170 11952963 -2171 142266931 -2172 63800323 -2173 140744598 -2174 89649673 -2175 152470976 -2176 43383 -2177 39263661 -2178 411002 -2179 84492190 -2180 24470845 -2181 102456000 -2182 47457739 -2183 126078295 -2184 1013394 -2185 77029197 -2186 4471597 -2187 118855872 -2188 45135873 -2189 125474980 -2190 69892571 -2191 143710048 -2192 115293 -2193 59576930 -2194 995537 -2195 103955764 -2196 34743010 -2197 116341158 -2198 58239452 -2199 136542962 -2200 2302542 -2201 98978702 -2202 8995018 -2203 134284290 -2204 56939156 -2205 134830244 -2206 82705434 -2207 148793193 -2208 150765 -2209 48730052 -2210 1230270 -2211 90512132 -2212 29259164 -2213 107583767 -2214 51446486 -2215 128433785 -2216 1150230 -2217 86816160 -2218 5371747 -2219 123057095 -2220 49396563 -2221 129127656 -2222 74946901 -2223 145933533 -2224 376709 -2225 67879848 -2226 2621339 -2227 106379416 -2228 38951539 -2229 119842421 -2230 62513965 -2231 135958284 -2232 2553200 -2233 106883629 -2234 10619260 -2235 140153140 -2236 61563673 -2237 137448424 -2238 87265684 -2239 149279657 -2240 239491 -2241 57218391 -2242 1766295 -2243 100559934 -2244 34305465 -2245 113606780 -2246 56959277 -2247 132035577 -2248 1261494 -2249 94129845 -2250 5967315 -2251 128412455 -2252 53604191 -2253 129929026 -2254 77263888 -2255 147354036 -2256 583224 -2257 76647238 -2258 3802573 -2259 115801104 -2260 45163854 -2261 123675005 -2262 68379476 -2263 138755787 -2264 2899890 -2265 112476388 -2266 12054541 -2267 141710858 -2268 65930021 -2269 141958107 -2270 91062705 -2271 154106165 -2272 653772 -2273 65588601 -2274 4109532 -2275 104064264 -2276 39061480 -2277 117016055 -2278 63426813 -2279 135467580 -2280 1676456 -2281 99519583 -2282 8403088 -2283 133865809 -2284 57083022 -2285 132631333 -2286 82256852 -2287 149832018 -2288 1424066 -2289 83066825 -2290 7765505 -2291 120475696 -2292 49679924 -2293 126938414 -2294 74105398 -2295 140801362 -2296 3718454 -2297 119135433 -2298 15946010 -2299 146224736 -2300 70148221 -2301 142104933 -2302 96908839 -2303 154958056 -2304 14668 -2305 17710389 -2306 152339 -2307 61146735 -2308 13732533 -2309 90835174 -2310 35444430 -2311 116466781 -2312 1260616 -2313 64410707 -2314 4937216 -2315 108449199 -2316 38277941 -2317 117443097 -2318 64843607 -2319 138452662 -2320 52176 -2321 34204242 -2322 436722 -2323 82606724 -2324 22573114 -2325 103729882 -2326 47080639 -2327 126436720 -2328 2682015 -2329 85118611 -2330 9435654 -2331 125944194 -2332 50647240 -2333 129778613 -2334 76996849 -2335 146263652 -2336 69377 -2337 37104209 -2338 588663 -2339 83520402 -2340 24475142 -2341 103244272 -2342 47687296 -2343 127559194 -2344 1331598 -2345 75930140 -2346 5415786 -2347 117728924 -2348 45678017 -2349 124174235 -2350 71183471 -2351 143058177 -2352 186071 -2353 56437806 -2354 1367660 -2355 103700761 -2356 34386372 -2357 117161023 -2358 59736175 -2359 133747983 -2360 2858417 -2361 97791974 -2362 10391163 -2363 131898874 -2364 58101536 -2365 132432762 -2366 82522443 -2367 151687672 -2368 104359 -2369 41456194 -2370 790346 -2371 88686821 -2372 26691937 -2373 107021017 -2374 50531362 -2375 127309226 -2376 1461417 -2377 82359184 -2378 6191439 -2379 120544277 -2380 48268200 -2381 128982575 -2382 74479582 -2383 143907328 -2384 278912 -2385 62650843 -2386 1788613 -2387 109484800 -2388 37529899 -2389 117701107 -2390 61337841 -2391 136051612 -2392 3231099 -2393 103832323 -2394 11985510 -2395 136039587 -2396 62632023 -2397 135123916 -2398 86208609 -2399 148586372 -2400 376683 -2401 55664253 -2402 2317046 -2403 99899322 -2404 34438393 -2405 112967205 -2406 57994305 -2407 131627917 -2408 1676250 -2409 90463878 -2410 7227855 -2411 127804117 -2412 53805431 -2413 132103563 -2414 78104919 -2415 143270132 -2416 850466 -2417 76920281 -2418 4586905 -2419 116840045 -2420 45485855 -2421 125698265 -2422 69907656 -2423 139989131 -2424 3591859 -2425 112044567 -2426 13888317 -2427 142815326 -2428 66150096 -2429 139567154 -2430 90548743 -2431 150276135 -2432 81959 -2433 40935625 -2434 685066 -2435 85795329 -2436 26541294 -2437 105937421 -2438 49369198 -2439 125730879 -2440 1355339 -2441 80048870 -2442 5384137 -2443 121983603 -2444 47467062 -2445 125698043 -2446 71882909 -2447 140770178 -2448 203883 -2449 61333524 -2450 1543202 -2451 106667809 -2452 36254418 -2453 117017362 -2454 60228564 -2455 136240589 -2456 2854305 -2457 102273023 -2458 10466497 -2459 134877724 -2460 59565228 -2461 137242153 -2462 84018620 -2463 150521373 -2464 256442 -2465 50477471 -2466 1753857 -2467 91888278 -2468 30925017 -2469 108011562 -2470 54282398 -2471 130166879 -2472 1508218 -2473 89534853 -2474 6544535 -2475 126685269 -2476 51444446 -2477 130666832 -2478 75895272 -2479 141711293 -2480 592086 -2481 68911784 -2482 3429824 -2483 109141967 -2484 40924396 -2485 120240847 -2486 65368053 -2487 135068011 -2488 3247228 -2489 108343400 -2490 12296645 -2491 139200103 -2492 64253946 -2493 139464434 -2494 90144018 -2495 150933892 -2496 387203 -2497 60112680 -2498 2471124 -2499 101364240 -2500 36060090 -2501 113115258 -2502 59092846 -2503 133660255 -2504 1688067 -2505 95166867 -2506 7464938 -2507 130201426 -2508 55435813 -2509 131378360 -2510 80339270 -2511 144343901 -2512 891695 -2513 79403496 -2514 4846349 -2515 117591013 -2516 46701564 -2517 127372321 -2518 71594029 -2519 139752761 -2520 3585107 -2521 114633188 -2522 14060404 -2523 142634270 -2524 68291733 -2525 141838947 -2526 92319322 -2527 154201069 -2528 930345 -2529 66936301 -2530 5057724 -2531 108112438 -2532 41230837 -2533 117236757 -2534 63114220 -2535 134889085 -2536 2264842 -2537 102766997 -2538 10189124 -2539 134349467 -2540 59607139 -2541 136132248 -2542 84365276 -2543 145396604 -2544 1934988 -2545 87496829 -2546 8963586 -2547 123821148 -2548 51594867 -2549 126583574 -2550 75453026 -2551 143429208 -2552 4688291 -2553 121133074 -2554 18369851 -2555 146651284 -2556 71294421 -2557 144513528 -2558 98980071 -2559 156474703 -2560 574681 -2561 72013501 -2562 4170731 -2563 108740256 -2564 42160291 -2565 118802622 -2566 65199657 -2567 134318813 -2568 1711436 -2569 106364466 -2570 9377548 -2571 136089932 -2572 61781874 -2573 136063027 -2574 85955728 -2575 149722927 -2576 1460336 -2577 90368418 -2578 8479930 -2579 123461144 -2580 52938120 -2581 127696495 -2582 77264195 -2583 140512222 -2584 4006765 -2585 123742005 -2586 17570016 -2587 149293906 -2588 74254766 -2589 142980282 -2590 99639510 -2591 155578996 -2592 1511044 -2593 78158991 -2594 9250811 -2595 113168463 -2596 47728382 -2597 121344153 -2598 72033721 -2599 140215256 -2600 2570305 -2601 111183745 -2602 13333752 -2603 139295086 -2604 65791739 -2605 139747945 -2606 91745662 -2607 150998682 -2608 3444869 -2609 95018873 -2610 16736273 -2611 129851414 -2612 59218692 -2613 131000976 -2614 84000432 -2615 145265002 -2616 5672362 -2617 129042313 -2618 24831279 -2619 154064778 -2620 79250112 -2621 148089275 -2622 105806379 -2623 159746592 -2624 2109900 -2625 81321389 -2626 11843659 -2627 115581441 -2628 51249627 -2629 121796815 -2630 74697826 -2631 140540844 -2632 3240333 -2633 114853705 -2634 16467288 -2635 141781340 -2636 68579437 -2637 140809504 -2638 94904134 -2639 155028084 -2640 4586544 -2641 99753752 -2642 20819775 -2643 130425050 -2644 63177958 -2645 133283733 -2646 89252057 -2647 148817311 -2648 7053685 -2649 132802587 -2650 29207405 -2651 157030973 -2652 82807923 -2653 147127777 -2654 108975046 -2655 159194852 -2656 4445525 -2657 87538245 -2658 20784213 -2659 118896880 -2660 57340871 -2661 126578306 -2662 82097782 -2663 143862076 -2664 5584146 -2665 118805371 -2666 25221541 -2667 147671549 -2668 74271136 -2669 143730494 -2670 101333431 -2671 159741857 -2672 8851766 -2673 106132315 -2674 33077565 -2675 135998977 -2676 69673935 -2677 138169687 -2678 97158858 -2679 152019357 -2680 11056251 -2681 137568589 -2682 41686204 -2683 158704164 -2684 88686482 -2685 153232585 -2686 119340173 -2687 166854230 -2688 1636939 -2689 79441694 -2690 10758207 -2691 114454589 -2692 48997170 -2693 121025473 -2694 73788585 -2695 140017108 -2696 2803974 -2697 113091943 -2698 15035959 -2699 143213303 -2700 67542300 -2701 139865148 -2702 94357868 -2703 151251593 -2704 3949896 -2705 96756463 -2706 19757814 -2707 127100039 -2708 61307563 -2709 133125189 -2710 86228962 -2711 148212827 -2712 6212546 -2713 131017681 -2714 27930582 -2715 151134460 -2716 82373955 -2717 146627678 -2718 108157839 -2719 161615558 -2720 4214631 -2721 85948560 -2722 20705208 -2723 119264661 -2724 55552169 -2725 124259355 -2726 81871855 -2727 142802420 -2728 5277704 -2729 118871743 -2730 25065926 -2731 145881513 -2732 73629648 -2733 144891803 -2734 101051234 -2735 156434054 -2736 8345645 -2737 103642148 -2738 33131740 -2739 135995086 -2740 69281917 -2741 139691917 -2742 95699348 -2743 155369212 -2744 10648845 -2745 137233318 -2746 41054643 -2747 161076108 -2748 89238030 -2749 153490810 -2750 116768211 -2751 165921864 -2752 4930729 -2753 89048703 -2754 23605140 -2755 120634134 -2756 58062708 -2757 128107941 -2758 83936018 -2759 144465779 -2760 6018705 -2761 121923012 -2762 27889312 -2763 146495022 -2764 77138497 -2765 144984094 -2766 104193266 -2767 157293335 -2768 10010204 -2769 104420755 -2770 37849428 -2771 138752421 -2772 72704805 -2773 139749859 -2774 100078206 -2775 154595744 -2776 12221109 -2777 139139719 -2778 45853920 -2779 162191363 -2780 92493968 -2781 155114895 -2782 120804768 -2783 166649637 -2784 10508975 -2785 95266740 -2786 37787523 -2787 126247609 -2788 67366579 -2789 131265716 -2790 94198384 -2791 149777177 -2792 11574993 -2793 127074826 -2794 42907803 -2795 154953176 -2796 85512056 -2797 149108134 -2798 112059991 -2799 163299205 -2800 18591730 -2801 113565050 -2802 54596835 -2803 142248590 -2804 82610665 -2805 147555374 -2806 109980262 -2807 161349248 -2808 20935997 -2809 146140513 -2810 62193161 -2811 167341203 -2812 100511596 -2813 161199461 -2814 132696320 -2815 173113372 -2816 932098 -2817 73705793 -2818 5502116 -2819 109501785 -2820 43830184 -2821 119884101 -2822 67377838 -2823 135458192 -2824 2433685 -2825 108299931 -2826 11187411 -2827 138677489 -2828 63177309 -2829 135039974 -2830 88575169 -2831 148462632 -2832 2099186 -2833 91644863 -2834 10402545 -2835 123438153 -2836 55789068 -2837 128257948 -2838 79511331 -2839 143224007 -2840 5180676 -2841 126794604 -2842 20185085 -2843 149019808 -2844 75889862 -2845 147076860 -2846 100530181 -2847 156047939 -2848 2189646 -2849 80418880 -2850 10974090 -2851 114024031 -2852 49385284 -2853 120984582 -2854 73806199 -2855 137143764 -2856 3487905 -2857 113058554 -2858 15835036 -2859 142433293 -2860 67052820 -2861 139186514 -2862 93483191 -2863 152104699 -2864 4460768 -2865 97221285 -2866 18890399 -2867 129429882 -2868 60588477 -2869 131574867 -2870 85670376 -2871 147281730 -2872 7220349 -2873 131534709 -2874 27590271 -2875 154379106 -2876 82133206 -2877 146742055 -2878 107964112 -2879 160865797 -2880 2918655 -2881 83271649 -2882 13792791 -2883 116183089 -2884 52800211 -2885 124907760 -2886 77753669 -2887 141152439 -2888 4324336 -2889 116738096 -2890 18630462 -2891 144629016 -2892 70294035 -2893 139799710 -2894 97193310 -2895 152565537 -2896 5872337 -2897 100103262 -2898 23077597 -2899 131420534 -2900 63762812 -2901 134538502 -2902 89113924 -2903 149626971 -2904 8898348 -2905 133046197 -2906 31919716 -2907 155554649 -2908 84411661 -2909 150932008 -2910 110315168 -2911 160806197 -2912 5586151 -2913 88394234 -2914 22724402 -2915 120775622 -2916 58559218 -2917 125781349 -2918 83317030 -2919 144643371 -2920 6824151 -2921 119523033 -2922 27518088 -2923 147717490 -2924 74961984 -2925 143160327 -2926 104434713 -2927 154217660 -2928 10316210 -2929 106559793 -2930 34746065 -2931 137142638 -2932 72468402 -2933 138578200 -2934 97381392 -2935 152493106 -2936 13102378 -2937 138696090 -2938 44108163 -2939 158160891 -2940 91667921 -2941 155595728 -2942 119431285 -2943 169130090 -2944 2459776 -2945 82018742 -2946 12619666 -2947 114673305 -2948 51264060 -2949 121450095 -2950 75216592 -2951 140219369 -2952 3832509 -2953 114922638 -2954 17685242 -2955 142659030 -2956 69266767 -2957 139779462 -2958 94511031 -2959 153169181 -2960 5075213 -2961 98753536 -2962 21902697 -2963 130770037 -2964 62594333 -2965 133307792 -2966 88148296 -2967 149733699 -2968 7890118 -2969 133358775 -2970 30457713 -2971 154517030 -2972 82694085 -2973 149085761 -2974 110386899 -2975 162252240 -2976 5259600 -2977 87806906 -2978 22507445 -2979 119466498 -2980 57691083 -2981 127707815 -2982 82756572 -2983 144327024 -2984 6629992 -2985 120842226 -2986 27524276 -2987 149509918 -2988 75671990 -2989 143701181 -2990 101564735 -2991 158538548 -2992 9864960 -2993 105532019 -2994 35020301 -2995 134985234 -2996 71764499 -2997 139833958 -2998 98352927 -2999 155659614 -3001 139895979 -3002 44146910 -3003 160456800 -3004 91124233 -3005 154702227 -3006 118797971 -3007 165294928 -3008 6120589 -3009 89990599 -3010 26066681 -3011 121371393 -3012 59895248 -3013 128435485 -3014 85609465 -3015 145632698 -3016 7508838 -3017 124043698 -3018 30719698 -3019 148239576 -3020 78652923 -3021 145656165 -3022 105904822 -3023 158329638 -3024 11695663 -3025 108843684 -3026 40286674 -3027 139249337 -3028 74942420 -3029 140565207 -3030 102277201 -3031 155999482 -3032 14623104 -3033 141133804 -3034 48692746 -3035 163882184 -3036 95294425 -3037 156150093 -3038 121729991 -3039 167797321 -3040 12291581 -3041 97604203 -3042 40110999 -3043 127700624 -3044 68699258 -3045 134376636 -3046 94907005 -3047 150694435 -3048 13187179 -3049 129803067 -3050 44804540 -3051 156295692 -3052 86093792 -3053 150835451 -3054 114573263 -3055 162880486 -3056 20622931 -3057 113878196 -3058 56577971 -3059 145053366 -3060 84172186 -3061 145584375 -3062 110457617 -3063 161543161 -3064 23289574 -3065 148412254 -3066 63970562 -3067 169267050 -3068 103908901 -3069 161167731 -3070 131329206 -3071 175230378 -3072 201255 -3073 59731483 -3074 1689145 -3075 101838541 -3076 35442161 -3077 115374765 -3078 59385205 -3079 132757681 -3080 1249145 -3081 93840481 -3082 6199928 -3083 131414132 -3084 53647983 -3085 131373452 -3086 78174796 -3087 148119850 -3088 542664 -3089 79621263 -3090 3876917 -3091 119105159 -3092 46586724 -3093 123445850 -3094 69698852 -3095 138814459 -3096 2850905 -3097 114957027 -3098 12531555 -3099 144048258 -3100 66681331 -3101 139011208 -3102 91800004 -3103 154175942 -3104 501443 -3105 69259471 -3106 3722407 -3107 106654913 -3108 40997621 -3109 118200849 -3110 64188238 -3111 137675699 -3112 1486697 -3113 102261156 -3114 7674235 -3115 134328787 -3116 58868707 -3117 134984447 -3118 83082004 -3119 146802999 -3120 1265809 -3121 88129789 -3122 7583345 -3123 122704229 -3124 51159928 -3125 126733648 -3126 75364346 -3127 142255862 -3128 3467852 -3129 121589303 -3130 15482688 -3131 147039130 -3132 71066829 -3133 143951449 -3134 96175217 -3135 153034960 -3136 861281 -3137 72392234 -3138 5834356 -3139 108865563 -3140 43268392 -3141 118524644 -3142 66502263 -3143 137807945 -3144 2045323 -3145 104683309 -3146 10566776 -3147 137770224 -3148 60762343 -3149 136609754 -3150 85098922 -3151 150234894 -3152 2140794 -3153 91492088 -3154 11452116 -3155 124736891 -3156 54407860 -3157 129707429 -3158 79445660 -3159 143893689 -3160 4684592 -3161 123585345 -3162 20155767 -3163 147059328 -3164 74657088 -3165 145920539 -3166 99082967 -3167 157018711 -3168 1874244 -3169 79482608 -3170 10525107 -3171 114509845 -3172 47568341 -3173 121695906 -3174 73006780 -3175 139854248 -3176 2865098 -3177 112490058 -3178 14492926 -3179 138201457 -3180 65175254 -3181 139228334 -3182 89368342 -3183 151098033 -3184 4027295 -3185 96408561 -3186 18317287 -3187 128917773 -3188 60302029 -3189 132214740 -3190 85437184 -3191 147411661 -3192 6261812 -3193 129089675 -3194 26541042 -3195 153457383 -3196 79407235 -3197 147375924 -3198 105540174 -3199 158537902 -3200 254560 -3201 61140942 -3202 2079586 -3203 102273493 -3204 36013453 -3205 114946694 -3206 59477294 -3207 132402234 -3208 1267132 -3209 94864402 -3210 6231016 -3211 128860857 -3212 55510689 -3213 134523471 -3214 79469469 -3215 144267066 -3216 689334 -3217 80999563 -3218 4741176 -3219 120298631 -3220 46729942 -3221 124911553 -3222 71283833 -3223 142858323 -3224 2917360 -3225 113050357 -3226 12637530 -3227 143188891 -3228 65947496 -3229 141674174 -3230 91921576 -3231 149943922 -3232 510696 -3233 69603870 -3234 3712297 -3235 107292850 -3236 40932153 -3237 119204847 -3238 63187269 -3239 134164175 -3240 1487970 -3241 102514083 -3242 7748745 -3243 133204930 -3244 58322635 -3245 135192943 -3246 83430319 -3247 146396759 -3248 1232255 -3249 87574417 -3250 7651678 -3251 122299134 -3252 51608729 -3253 128652865 -3254 75676785 -3255 142815163 -3256 3468854 -3257 117844144 -3258 15560264 -3259 147203671 -3260 71250379 -3261 143672438 -3262 96002950 -3263 155727097 -3264 1048655 -3265 74155079 -3266 6499011 -3267 110034194 -3268 43914601 -3269 118867445 -3270 67227351 -3271 135365814 -3272 2023563 -3273 105774570 -3274 10504641 -3275 135348409 -3276 60849890 -3277 135709282 -3278 86824366 -3279 150693829 -3280 2469269 -3281 90725508 -3282 12271089 -3283 124976308 -3284 55447798 -3285 129375506 -3286 79498401 -3287 144975788 -3288 4690572 -3289 123486373 -3290 19895041 -3291 149404708 -3292 75273636 -3293 147424425 -3294 101025328 -3295 156058249 -3296 1821572 -3297 79106703 -3298 10467740 -3299 112424288 -3300 48199031 -3301 120802354 -3302 71647258 -3303 138326952 -3304 2832315 -3305 111856440 -3306 14662727 -3307 141361472 -3308 64370479 -3309 139523791 -3310 90738322 -3311 150851981 -3312 4065794 -3313 98065847 -3314 18544144 -3315 129932639 -3316 60550138 -3317 132351196 -3318 85055106 -3319 147011736 -3320 6176123 -3321 127322362 -3322 26055854 -3323 151150982 -3324 78358984 -3325 149599777 -3326 106664741 -3327 161191718 -3328 350593 -3329 62615146 -3330 2475087 -3331 105515755 -3332 37175376 -3333 115242950 -3334 60368793 -3335 132396982 -3336 1699513 -3337 95617775 -3338 7787453 -3339 133223916 -3340 56259828 -3341 133484737 -3342 81377286 -3343 149232501 -3344 858869 -3345 82127696 -3346 5179638 -3347 120611324 -3348 47840005 -3349 125486557 -3350 71196706 -3351 139346777 -3352 3698770 -3353 117057797 -3354 15010389 -3355 145651686 -3356 68464703 -3357 142337481 -3358 94123522 -3359 152664625 -3360 810868 -3361 71435120 -3362 4884725 -3363 108137227 -3364 42669279 -3365 118935892 -3366 65940242 -3367 133387634 -3368 2087068 -3369 103438507 -3370 9642219 -3371 134688226 -3372 59815905 -3373 136729236 -3374 84315427 -3375 148160277 -3376 1834089 -3377 90884068 -3378 9333392 -3379 124007072 -3380 53305703 -3381 128876427 -3382 77547121 -3383 143821763 -3384 4505074 -3385 123088299 -3386 17648934 -3387 146362250 -3388 73780102 -3389 143504508 -3390 98199359 -3391 157873555 -3392 1337048 -3393 74881950 -3394 7264025 -3395 109793559 -3396 45830866 -3397 120901486 -3398 67681752 -3399 138388219 -3400 2816706 -3401 107402506 -3402 12765570 -3403 137283378 -3404 62752866 -3405 138156137 -3406 88580702 -3407 148944346 -3408 2987142 -3409 92819040 -3410 13096788 -3411 127400556 -3412 56565901 -3413 130756832 -3414 79908377 -3415 143567227 -3416 6082836 -3417 124942291 -3418 22532602 -3419 151346490 -3420 76952048 -3421 144749367 -3422 102343617 -3423 160225164 -3424 2627108 -3425 79629865 -3426 12164042 -3427 115416910 -3428 49005476 -3429 120791323 -3430 74641972 -3431 141840413 -3432 3821445 -3433 112556854 -3434 16913159 -3435 142643053 -3436 67970843 -3437 139957281 -3438 92610573 -3439 152762121 -3440 5183868 -3441 99146577 -3442 20499242 -3443 130410802 -3444 62158814 -3445 131570277 -3446 87977786 -3447 146079192 -3448 7860273 -3449 131888627 -3450 29380094 -3451 153231401 -3452 82532063 -3453 149181432 -3454 108077797 -3455 160061719 -3456 448558 -3457 63997628 -3458 3051379 -3459 106948567 -3460 38635225 -3461 116580574 -3462 62407879 -3463 133515235 -3464 1708070 -3465 95151317 -3466 7819865 -3467 131643934 -3468 55533763 -3469 131034853 -3470 81019985 -3471 149347855 -3472 1089455 -3473 84404068 -3474 6209900 -3475 120399838 -3476 48719388 -3477 128661147 -3478 73019135 -3479 141018145 -3480 3707767 -3481 116847386 -3482 14903533 -3483 143973354 -3484 69185726 -3485 142333567 -3486 94771167 -3487 150723344 -3488 817452 -3489 71396363 -3490 4931212 -3491 110286309 -3492 42883103 -3493 119084740 -3494 64387696 -3495 136636787 -3496 2055186 -3497 103627193 -3498 9500925 -3499 135086433 -3500 60041609 -3501 134632091 -3502 84624888 -3503 148490588 -3504 1858365 -3505 89686444 -3506 9305349 -3507 124344509 -3508 53413734 -3509 128872221 -3510 78558083 -3511 142207216 -3512 4491162 -3513 121922352 -3514 17784671 -3515 148211704 -3516 72578771 -3517 146768726 -3518 97314728 -3519 157049318 -3520 1580102 -3521 75159932 -3522 7962971 -3523 111114388 -3524 45461001 -3525 120296287 -3526 68775879 -3527 137697161 -3528 2869451 -3529 107741463 -3530 12607076 -3531 137331688 -3532 62805277 -3533 138370160 -3534 88923323 -3535 150257590 -3536 3335540 -3537 93223854 -3538 14000270 -3539 127710180 -3540 56658490 -3541 129786341 -3542 81952551 -3543 143096923 -3544 6000400 -3545 125142371 -3546 22581786 -3547 149624640 -3548 76611832 -3549 145766276 -3550 102217662 -3551 157994443 -3552 2575183 -3553 80831058 -3554 12200074 -3555 114103951 -3556 49804376 -3557 124017676 -3558 73639089 -3559 140005200 -3560 3884995 -3561 114574972 -3562 16723532 -3563 141109021 -3564 66556403 -3565 140322656 -3566 93046065 -3567 152324952 -3568 5168347 -3569 97021723 -3570 20559333 -3571 131608906 -3572 61290469 -3573 133579343 -3574 86967466 -3575 148169247 -3576 7875825 -3577 130424793 -3578 29377930 -3579 152507544 -3580 81322755 -3581 149718803 -3582 109354073 -3583 160127036 -3584 3726135 -3585 91888578 -3586 22805448 -3587 122842903 -3588 59706806 -3589 130232409 -3590 87703611 -3591 142673584 -3592 4872154 -3593 122704994 -3594 26785682 -3595 149257786 -3596 78509420 -3597 145061395 -3598 103470785 -3599 158630687 -3600 8794472 -3601 111443442 -3602 38080921 -3603 139507784 -3604 74551970 -3605 141079438 -3606 101812836 -3607 156351010 -3608 11476360 -3609 142926106 -3610 46322583 -3611 161946524 -3612 94719905 -3613 157007824 -3614 121211705 -3615 165873804 -3616 8188726 -3617 99290499 -3618 36625361 -3619 127939220 -3620 68270127 -3621 133202894 -3622 93523749 -3623 150951776 -3624 9182722 -3625 128432957 -3626 40984717 -3627 153625950 -3628 84549231 -3629 150253640 -3630 111900940 -3631 161050892 -3632 16209191 -3633 114985361 -3634 54419135 -3635 147726743 -3636 83483363 -3637 146137758 -3638 111762010 -3639 161710373 -3640 18336638 -3641 148728085 -3642 63205736 -3643 168326815 -3644 102105951 -3645 160896705 -3646 132399544 -3647 174609400 -3648 10714844 -3649 101869528 -3650 42693587 -3651 130497073 -3652 72196740 -3653 132499698 -3654 98929648 -3655 153139228 -3656 11926795 -3657 131041879 -3658 47612221 -3659 156795719 -3660 88459247 -3661 150765295 -3662 117091664 -3663 165541260 -3664 21111486 -3665 119884532 -3666 61555467 -3667 147577354 -3668 89493423 -3669 149441682 -3670 116510728 -3671 164060933 -3672 23041575 -3673 152359899 -3674 71426527 -3675 169450215 -3676 107145617 -3677 163121178 -3678 136452524 -3679 177584037 -3680 19328205 -3681 107805060 -3682 59719884 -3683 136212434 -3684 80650901 -3685 138835798 -3686 108352478 -3687 157489665 -3688 20802749 -3689 138228385 -3690 63967180 -3691 162472890 -3692 98479953 -3693 155841859 -3694 127950472 -3695 172055482 -3696 33743981 -3697 127576808 -3698 78051912 -3699 154280783 -3700 99061038 -3701 155764227 -3702 125692192 -3703 169270871 -3704 35480592 -3705 157438506 -3706 86461028 -3707 178810281 -3708 118409088 -3709 170976241 -3710 145852243 -3711 183822189 -3712 3735859 -3713 91686737 -3714 22895422 -3715 123688127 -3716 59775111 -3717 127487333 -3718 86088421 -3719 145517426 -3720 4898731 -3721 123414169 -3722 26582530 -3723 150339150 -3724 75899398 -3725 146300399 -3726 104432363 -3727 157670963 -3728 8855984 -3729 110673280 -3730 39149334 -3731 139460356 -3732 74793328 -3733 138165158 -3734 101512017 -3735 158630201 -3736 11141718 -3737 142118103 -3738 47434191 -3739 162686098 -3740 93208144 -3741 155014052 -3742 124793588 -3743 169404304 -3744 8186836 -3745 97763296 -3746 36170716 -3747 128470561 -3748 67106265 -3749 132354207 -3750 95264332 -3751 150705101 -3752 9231275 -3753 129105020 -3754 40848945 -3755 153322838 -3756 85578785 -3757 148962913 -3758 111322308 -3759 159842536 -3760 16372892 -3761 116748506 -3762 54446528 -3763 143690555 -3764 83618046 -3765 146427155 -3766 113319840 -3767 161963596 -3768 18477817 -3769 147449384 -3770 62683945 -3771 167252968 -3772 102779223 -3773 161514717 -3774 132380572 -3775 172394265 -3776 10956812 -3777 101102074 -3778 43002053 -3779 130205756 -3780 71299226 -3781 133920023 -3782 99038459 -3783 151777016 -3784 12088141 -3785 132592265 -3786 47608058 -3787 158079280 -3788 88290584 -3789 151867427 -3790 116615227 -3791 162490543 -3792 20850605 -3793 118248660 -3794 62870898 -3795 149571216 -3796 89090723 -3797 148092040 -3798 114054838 -3799 163913391 -3800 23445531 -3801 149794142 -3802 70882460 -3803 171875921 -3804 107900818 -3805 163115546 -3806 135721673 -3807 180067125 -3808 19699492 -3809 108070773 -3810 59910687 -3811 135935221 -3812 80568288 -3813 141276298 -3814 108819382 -3815 157845656 -3816 20514116 -3817 137746409 -3818 63866545 -3819 161378691 -3820 97766135 -3821 157558868 -3822 127330397 -3823 171548999 -3824 33555620 -3825 124700332 -3826 77630536 -3827 155131475 -3828 98890344 -3829 155391062 -3830 126564270 -3831 170709292 -3832 35510149 -3833 159262817 -3834 86808777 -3835 179591788 -3836 119007141 -3837 171607763 -3838 145185651 -3839 179584537 -3840 5248834 -3841 94381395 -3842 25142684 -3843 125029977 -3844 62374088 -3845 128849043 -3846 87871804 -3847 144188233 -3848 6665412 -3849 127671610 -3850 29784285 -3851 149529628 -3852 79920105 -3853 144288880 -3854 106776349 -3855 157779438 -3856 10815298 -3857 113220237 -3858 40445543 -3859 140762877 -3860 75773653 -3861 140632143 -3862 103623603 -3863 157234398 -3864 13664172 -3865 141496529 -3866 49047139 -3867 164327348 -3868 96423815 -3869 156918208 -3870 123983494 -3871 169639736 -3872 9955276 -3873 98929189 -3874 38782591 -3875 129402611 -3876 69690028 -3877 132179393 -3878 96671076 -3879 149545854 -3880 11299540 -3881 131048249 -3882 43683026 -3883 153593878 -3884 86980793 -3885 150579225 -3886 113721479 -3887 163433378 -3888 18288118 -3889 117626580 -3890 57268114 -3891 147686268 -3892 85663912 -3893 149237379 -3894 114987586 -3895 161312153 -3896 21048857 -3897 148158173 -3898 65424235 -3899 169280130 -3900 103771906 -3901 161537030 -3902 134288168 -3903 173792979 -3904 12960511 -3905 102519133 -3906 45369427 -3907 130691609 -3908 74068241 -3909 134680537 -3910 100765318 -3911 154124084 -3912 14381256 -3913 132503803 -3914 50468497 -3915 155422899 -3916 89987601 -3917 153357094 -3918 119133919 -3919 164333818 -3920 23082249 -3921 119365524 -3922 64705274 -3923 151757145 -3924 90824050 -3925 152245676 -3926 115777440 -3927 163515343 -3928 26156712 -3929 150905780 -3930 73560531 -3931 172536320 -3932 108057388 -3933 165768765 -3934 141263878 -3935 176260371 -3936 21942088 -3937 107555201 -3938 62268749 -3939 138199607 -3940 82465961 -3941 140193308 -3942 110310594 -3943 157889133 -3944 22933325 -3945 142090051 -3946 66132058 -3947 161192310 -3948 99645335 -3949 157021730 -3950 128658914 -3951 171411723 -3952 35270945 -3953 127187831 -3954 80057312 -3955 156845398 -3956 101331709 -3957 156490842 -3958 128083673 -3959 170342057 -3960 38086484 -3961 160501835 -3962 89844274 -3963 177897904 -3964 120122911 -3965 170382486 -3966 148410215 -3967 184966002 -3968 5237981 -3969 93411871 -3970 25319643 -3971 123864599 -3972 62432373 -3973 126750787 -3974 87295995 -3975 143712293 -3976 6594523 -3977 123879692 -3978 29920319 -3979 149917197 -3980 78206479 -3981 147166497 -3982 106047644 -3983 157156928 -3984 10859551 -3985 111691920 -3986 40631403 -3987 140513806 -3988 76634426 -3989 139063133 -3990 103771092 -3991 153582149 -3992 13641885 -3993 143790093 -3994 49695303 -3995 163514194 -3996 96529521 -3997 155556407 -3998 123318955 -3999 169289615 -4000 10112943 -4001 98439518 -4002 38567208 -4003 129333738 -4004 69035501 -4005 133651770 -4006 96969489 -4007 150635675 -4008 11249013 -4009 131233435 -4010 43363397 -4011 156228080 -4012 86040917 -4013 151548517 -4014 114912316 -4015 160874557 -4016 18240181 -4017 118555607 -4018 56463158 -4019 147103894 -4020 85801277 -4021 146905477 -4022 114321362 -4023 162251141 -4024 21145968 -4025 146676116 -4026 65586396 -4027 169390668 -4028 102946385 -4029 160439373 -4030 132905650 -4031 173373924 -4032 12954347 -4033 102563760 -4034 45569611 -4035 131327590 -4036 72940525 -4037 134777311 -4038 101461656 -4039 152372568 -4040 14264745 -4041 132941325 -4042 50226554 -4043 156912202 -4044 90498278 -4045 153052604 -4046 118498746 -4047 166768968 -4048 23284733 -4049 120538340 -4050 64549010 -4051 150848894 -4052 90680852 -4053 147981786 -4054 117662854 -4055 164602162 -4056 26085488 -4057 152423406 -4058 73920499 -4059 170538392 -4060 109528224 -4061 167335477 -4062 137072713 -4063 175327679 -4064 21847541 -4065 108696160 -4066 61227549 -4067 136930815 -4068 83359820 -4069 141490316 -4070 110275654 -4071 158333630 -4072 23189254 -4073 139009910 -4074 64714534 -4075 164912506 -4076 101215697 -4077 157685236 -4078 128683417 -4079 171643294 -4080 35611916 -4081 129566457 -4082 79616243 -4083 153844045 -4084 101873461 -4085 157591516 -4086 127786211 -4087 172202256 -4088 38748208 -4089 159566906 -4090 87797284 -4091 176448362 -4092 120944029 -4093 171350081 -4094 146605383 -4095 183301627 http://git-wip-us.apache.org/repos/asf/kylin/blob/d581766b/kylin-it/src/test/java/org/apache/kylin/cube/cuboid/algorithm/ITAlgorithmTestBase.java ---------------------------------------------------------------------- diff --git a/kylin-it/src/test/java/org/apache/kylin/cube/cuboid/algorithm/ITAlgorithmTestBase.java b/kylin-it/src/test/java/org/apache/kylin/cube/cuboid/algorithm/ITAlgorithmTestBase.java new file mode 100755 index 0000000..d8cc4e8 --- /dev/null +++ b/kylin-it/src/test/java/org/apache/kylin/cube/cuboid/algorithm/ITAlgorithmTestBase.java @@ -0,0 +1,310 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +package org.apache.kylin.cube.cuboid.algorithm; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.kylin.cube.cuboid.TreeCuboidScheduler.CuboidCostComparator; +import org.apache.kylin.cube.cuboid.TreeCuboidScheduler.CuboidTree; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; + +public class ITAlgorithmTestBase { + + public CuboidStats cuboidStats; + + private Set<Long> mandatoryCuboids; + + @Before + public void setUp() throws Exception { + + mandatoryCuboids = Sets.newHashSet(); + mandatoryCuboids.add(3000L); + mandatoryCuboids.add(1888L); + mandatoryCuboids.add(88L); + cuboidStats = new CuboidStats.Builder("test", 4095L, simulateCount(), simulateSpaceSize()) + .setMandatoryCuboids(mandatoryCuboids).setHitFrequencyMap(simulateHitFrequency()) + .setScanCountSourceMap(simulateScanCount()).build(); + } + + @After + public void after() throws Exception { + } + + @Test + public void testMandatoryRowCountEstimation() { + for (long mandatoryCuboid : mandatoryCuboids) { + System.out.println("Cuboid id: " + mandatoryCuboid + "; Row Count: " + + cuboidStats.getStatistics().get(mandatoryCuboid)); + } + } + + /** better if closer to 1, worse if closer to 0*/ + public double getQueryCostRatio(CuboidStats cuboidStats, List<Long> recommendList) { + CuboidTree cuboidTree = CuboidTree.createFromCuboids(recommendList, + new CuboidCostComparator(cuboidStats.getStatistics())); + double queryCostBest = 0; + for (Long cuboidId : cuboidStats.getAllCuboidsForSelection()) { + if (cuboidStats.getCuboidQueryCost(cuboidId) != null) { + queryCostBest += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidCount(cuboidId); + // queryCostBest += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidQueryCost(cuboidId); + } + } + + double queryCost = 0; + for (Long cuboidId : cuboidStats.getAllCuboidsForSelection()) { + long matchCuboidId = cuboidTree.findBestMatchCuboid(cuboidId); + if (cuboidStats.getCuboidQueryCost(matchCuboidId) != null) { + queryCost += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidCount(matchCuboidId); + // queryCost += cuboidStats.getCuboidHitProbability(cuboidId) * cuboidStats.getCuboidQueryCost(matchCuboidId); + } + } + + return queryCostBest / queryCost; + } + + protected Map<Long, Long> simulateCount() { + Map<Long, Long> countMap = Maps.newHashMap(); + BufferedReader br = null; + + try { + + String sCurrentLine; + + br = new BufferedReader(new FileReader("src/test/resources/statistics.txt")); + + while ((sCurrentLine = br.readLine()) != null) { + String[] statPair = sCurrentLine.split(" "); + countMap.put(Long.valueOf(statPair[0]), Long.valueOf(statPair[1])); + } + + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (br != null) + br.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + return countMap; + } + + protected Map<Long, Double> simulateSpaceSize() { + Map<Long, Double> sizeMap = Maps.newHashMap(); + Map<Long, Long> countMap = simulateCount(); + for (Map.Entry<Long, Long> entry : countMap.entrySet()) { + sizeMap.put(entry.getKey(), entry.getValue() * 1.0); + } + return sizeMap; + } + + protected Map<Long, Long> simulateHitFrequency() { + Map<Long, Long> hitFrequencyMap = Maps.newHashMap(); + + hitFrequencyMap.put(4095L, 10L); + hitFrequencyMap.put(3849L, 15L); + hitFrequencyMap.put(3780L, 31L); + + hitFrequencyMap.put(3459L, 16L); + hitFrequencyMap.put(3145L, 29L); + + hitFrequencyMap.put(2861L, 21L); + hitFrequencyMap.put(2768L, 40L); + + hitFrequencyMap.put(1528L, 10L); + hitFrequencyMap.put(1440L, 9L); + hitFrequencyMap.put(1152L, 21L); + + hitFrequencyMap.put(256L, 23L); + + hitFrequencyMap.put(128L, 7L); + hitFrequencyMap.put(272L, 8L); + hitFrequencyMap.put(288L, 10L); + hitFrequencyMap.put(384L, 2L); + hitFrequencyMap.put(320L, 3L); + hitFrequencyMap.put(432L, 5L); + hitFrequencyMap.put(258L, 8L); + hitFrequencyMap.put(336L, 10L); + hitFrequencyMap.put(274L, 22L); + hitFrequencyMap.put(488L, 41L); + hitFrequencyMap.put(352L, 10L); + + hitFrequencyMap.put(16L, 1L); + hitFrequencyMap.put(32L, 5L); + hitFrequencyMap.put(34L, 1L); + + hitFrequencyMap.put(2L, 21L); + + return hitFrequencyMap; + } + + protected Map<Long, Map<Long, Long>> simulateScanCount() { + Map<Long, Map<Long, Long>> scanCountMap = Maps.newLinkedHashMap(); + scanCountMap.put(4094L, new HashMap<Long, Long>() { + { + put(4095L, 1833041L); + } + }); + scanCountMap.put(3849L, new HashMap<Long, Long>() { + { + put(3849L, 276711L); + } + }); + scanCountMap.put(3780L, new HashMap<Long, Long>() { + { + put(3780L, 129199L); + } + }); + scanCountMap.put(3459L, new HashMap<Long, Long>() { + { + put(3459L, 168109L); + } + }); + scanCountMap.put(3145L, new HashMap<Long, Long>() { + { + put(3145L, 299991L); + } + }); + scanCountMap.put(2861L, new HashMap<Long, Long>() { + { + put(2861L, 2121L); + } + }); + scanCountMap.put(2768L, new HashMap<Long, Long>() { + { + put(2768L, 40231L); + } + }); + scanCountMap.put(256L, new HashMap<Long, Long>() { + { + put(256L, 1L); + } + }); + scanCountMap.put(16L, new HashMap<Long, Long>() { + { + put(16L, 1L); + } + }); + scanCountMap.put(32L, new HashMap<Long, Long>() { + { + put(32L, 2L); + } + }); + scanCountMap.put(128L, new HashMap<Long, Long>() { + { + put(128L, 3L); + } + }); + scanCountMap.put(272L, new HashMap<Long, Long>() { + { + put(272L, 2L); + } + }); + scanCountMap.put(288L, new HashMap<Long, Long>() { + { + put(288L, 3L); + } + }); + scanCountMap.put(2L, new HashMap<Long, Long>() { + { + put(2L, 1L); + } + }); + scanCountMap.put(384L, new HashMap<Long, Long>() { + { + put(384L, 2L); + } + }); + scanCountMap.put(320L, new HashMap<Long, Long>() { + { + put(320L, 3L); + } + }); + scanCountMap.put(432L, new HashMap<Long, Long>() { + { + put(432L, 5L); + } + }); + scanCountMap.put(1152L, new HashMap<Long, Long>() { + { + put(1152L, 21L); + } + }); + scanCountMap.put(258L, new HashMap<Long, Long>() { + { + put(258L, 2L); + } + }); + scanCountMap.put(1440L, new HashMap<Long, Long>() { + { + put(1440L, 9L); + } + }); + scanCountMap.put(336L, new HashMap<Long, Long>() { + { + put(336L, 2L); + } + }); + scanCountMap.put(336L, new HashMap<Long, Long>() { + { + put(336L, 2L); + } + }); + scanCountMap.put(274L, new HashMap<Long, Long>() { + { + put(274L, 1L); + } + }); + scanCountMap.put(488L, new HashMap<Long, Long>() { + { + put(488L, 16L); + } + }); + scanCountMap.put(352L, new HashMap<Long, Long>() { + { + put(352L, 3L); + } + }); + scanCountMap.put(1528L, new HashMap<Long, Long>() { + { + put(1528L, 21L); + } + }); + scanCountMap.put(34L, new HashMap<Long, Long>() { + { + put(34L, 1L); + } + }); + + return scanCountMap; + } +}