From 2c964b254b0687c7a34fa6afb1a911b83c307fd1 Mon Sep 17 00:00:00 2001 From: ValueOn AG Date: Tue, 6 Jan 2026 20:11:57 +0100 Subject: [PATCH] AI Iteration tests with 1000 test runs completed --- modules/services/serviceAi/merge_1.txt | 10320 +--------------- .../renderers/rendererDocx.py | 260 +- modules/shared/jsonContinuation.py | 75 +- .../test14_json_continuation_context.py | 373 + 4 files changed, 1230 insertions(+), 9798 deletions(-) create mode 100644 tests/functional/test14_json_continuation_context.py diff --git a/modules/services/serviceAi/merge_1.txt b/modules/services/serviceAi/merge_1.txt index 4244a9f1..66a859a7 100644 --- a/modules/services/serviceAi/merge_1.txt +++ b/modules/services/serviceAi/merge_1.txt @@ -1,4914 +1,110 @@ ================================================================================ JSON MERGE OPERATION #1 ================================================================================ -Timestamp: 2026-01-06T17:45:29.992030 +Timestamp: 2026-01-06T20:08:23.213372 INPUT: - Accumulated length: 92801 chars - New Fragment length: 39761 chars - Accumulated: 4831 lines (showing first 5 and last 5) + Accumulated length: 33682 chars + New Fragment length: 27012 chars + Accumulated: 306 lines (showing first 5 and last 5) { "elements": [ { "type": "table", "content": { - ... (4821 lines omitted) ... - "37907", - "37951", - "37957" - ], - ["37963", "37967", "37987", "37991", "37993", " - New Fragment: 410 lines (showing first 5 and last 5) + ... (296 lines omitted) ... + [" 26821", " 26833", " 26839", " 26849", " 26861", " 26863", " 26879", " 26881", " 26891", " 26893"], + [" 26903", " 26921", " 26927", " 26947", " 26951", " 26953", " 26959", " 26981", " 26987", " 26993"], + [" 27011", " 27017", " 27031", " 27043", " 27059", " 27061", " 27067", " 27073", " 27077", " 27091"], + [" 27103", " 27107", " 27109", " 27127", " 27143", " 27179", " 27191", " 27197", " 27211", " 27239"], + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", + New Fragment: 248 lines (showing first 5 and last 5) ```json - { - "elements": [ - { - "type": "table", - ... (400 lines omitted) ... - ["37529", "37537", "37547", "37549", "37561", "37567", "37571", "37573", "37579", "37589"], - ["37591", "37607", "37619", "37633", "37643", "37649", "37657", "37663", "37691", "37693"], - ["37699", "37717", "37747", "37781", "37783", "37799", "37811", "37813", "37831", "37847"], - ["37853", "37861", "37871", "37879", "37889", "37897", "37907", "37951", "37957", "37963"], - ["37967", "37987", "37991", "37993", "379 + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", " 27299", " 27329", " 27337"], + [" 27361", " 27367", " 27397", " 27407", " 27409", " 27427", " 27431", " 27437", " 27449", " 27457"], + [" 27479", " 27481", " 27487", " 27509", " 27527", " 27529", " 27539", " 27541", " 27551", " 27581"], + [" 27583", " 27611", " 27617", " 27631", " 27647", " 27653", " 27673", " 27689", " 27691", " 27697"], + ... (238 lines omitted) ... + } + } + ] + } + ``` - Normalized Accumulated (92801 chars) - (showing first 5 and last 5 of 4831 lines) + Normalized Accumulated (33682 chars) + (showing first 5 and last 5 of 306 lines) { "elements": [ { "type": "table", "content": { - ... (4821 lines omitted) ... - "37907", - "37951", - "37957" - ], - ["37963", "37967", "37987", "37991", "37993", " + ... (296 lines omitted) ... + [" 26821", " 26833", " 26839", " 26849", " 26861", " 26863", " 26879", " 26881", " 26891", " 26893"], + [" 26903", " 26921", " 26927", " 26947", " 26951", " 26953", " 26959", " 26981", " 26987", " 26993"], + [" 27011", " 27017", " 27031", " 27043", " 27059", " 27061", " 27067", " 27073", " 27077", " 27091"], + [" 27103", " 27107", " 27109", " 27127", " 27143", " 27179", " 27191", " 27197", " 27211", " 27239"], + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", - Normalized New Fragment (39753 chars) - (showing first 5 and last 5 of 409 lines) - { - "elements": [ - { - "type": "table", - "content": { - ... (399 lines omitted) ... - ["37529", "37537", "37547", "37549", "37561", "37567", "37571", "37573", "37579", "37589"], - ["37591", "37607", "37619", "37633", "37643", "37649", "37657", "37663", "37691", "37693"], - ["37699", "37717", "37747", "37781", "37783", "37799", "37811", "37813", "37831", "37847"], - ["37853", "37861", "37871", "37879", "37889", "37897", "37907", "37951", "37957", "37963"], - ["37967", "37987", "37991", "37993", "379 + Normalized New Fragment (27000 chars) + (showing first 5 and last 5 of 246 lines) + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", " 27299", " 27329", " 27337"], + [" 27361", " 27367", " 27397", " 27407", " 27409", " 27427", " 27431", " 27437", " 27449", " 27457"], + [" 27479", " 27481", " 27487", " 27509", " 27527", " 27529", " 27539", " 27541", " 27551", " 27581"], + [" 27583", " 27611", " 27617", " 27631", " 27647", " 27653", " 27673", " 27689", " 27691", " 27697"], + [" 27701", " 27733", " 27737", " 27739", " 27743", " 27749", " 27751", " 27763", " 27767", " 27773"], + ... (236 lines omitted) ... + ] + } + } + ] + } STEP: PHASE 1 Description: Finding overlap between JSON strings ⏳ In progress... - Overlap Detection (string): - Overlap length: 0 - ⚠️ No overlap detected - appending all + Overlap Detection (string (exact)): + Overlap length: 70 + ✅ Found overlap of 70 chars + Accumulated suffix (COMPLETE, 70 chars): + ============================================================================ + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", + ============================================================================ + Fragment prefix (70 chars, 1 lines) + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", - ⚠️ NO OVERLAP FOUND - This indicates iterations should stop - Closing JSON and returning final result + Overlap found (70 chars): + Accumulated suffix: [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", + Fragment prefix: [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", +STEP: PHASE 2 + Description: Merging strings (overlap: 70 chars) + ⏳ In progress... - Closed JSON (92808 chars): - ============================================================================== + + Merged String (60612 chars) + (showing first 5 and last 5 of 551 lines) { "elements": [ { "type": "table", "content": { - "headers": [ - "Spalte 1", - "Spalte 2", - "Spalte 3", - "Spalte 4", - "Spalte 5", - "Spalte 6", - "Spalte 7", - "Spalte 8", - "Spalte 9", - "Spalte 10" - ], - "rows": [ - [ - "2", - "3", - "5", - "7", - "11", - "13", - "17", - "19", - "23", - "29" - ], - [ - "31", - "37", - "41", - "43", - "47", - "53", - "59", - "61", - "67", - "71" - ], - [ - "73", - "79", - "83", - "89", - "97", - "101", - "103", - "107", - "109", - "113" - ], - [ - "127", - "131", - "137", - "139", - "149", - "151", - "157", - "163", - "167", - "173" - ], - [ - "179", - "181", - "191", - "193", - "197", - "199", - "211", - "223", - "227", - "229" - ], - [ - "233", - "239", - "241", - "251", - "257", - "263", - "269", - "271", - "277", - "281" - ], - [ - "283", - "293", - "307", - "311", - "313", - "317", - "331", - "337", - "347", - "349" - ], - [ - "353", - "359", - "367", - "373", - "379", - "383", - "389", - "397", - "401", - "409" - ], - [ - "419", - "421", - "431", - "433", - "439", - "443", - "449", - "457", - "461", - "463" - ], - [ - "467", - "479", - "487", - "491", - "499", - "503", - "509", - "521", - "523", - "541" - ], - [ - "547", - "557", - "563", - "569", - "571", - "577", - "587", - "593", - "599", - "601" - ], - [ - "607", - "613", - "617", - "619", - "631", - "641", - "643", - "647", - "653", - "659" - ], - [ - "661", - "673", - "677", - "683", - "691", - "701", - "709", - "719", - "727", - "733" - ], - [ - "739", - "743", - "751", - "757", - "761", - "769", - "773", - "787", - "797", - "809" - ], - [ - "811", - "821", - "823", - "827", - "829", - "839", - "853", - "857", - "859", - "863" - ], - [ - "877", - "881", - "883", - "887", - "907", - "911", - "919", - "929", - "937", - "941" - ], - [ - "947", - "953", - "967", - "971", - "977", - "983", - "991", - "997", - "1009", - "1013" - ], - [ - "1019", - "1021", - "1031", - "1033", - "1039", - "1049", - "1051", - "1061", - "1063", - "1069" - ], - [ - "1087", - "1091", - "1093", - "1097", - "1103", - "1109", - "1117", - "1123", - "1129", - "1151" - ], - [ - "1153", - "1163", - "1171", - "1181", - "1187", - "1193", - "1201", - "1213", - "1217", - "1223" - ], - [ - "1229", - "1231", - "1237", - "1249", - "1259", - "1277", - "1279", - "1283", - "1289", - "1291" - ], - [ - "1297", - "1301", - "1303", - "1307", - "1319", - "1321", - "1327", - "1361", - "1367", - "1373" - ], - [ - "1381", - "1399", - "1409", - "1423", - "1427", - "1429", - "1433", - "1439", - "1447", - "1451" - ], - [ - "1453", - "1459", - "1471", - "1481", - "1483", - "1487", - "1489", - "1493", - "1499", - "1511" - ], - [ - "1523", - "1531", - "1543", - "1549", - "1553", - "1559", - "1567", - "1571", - "1579", - "1583" - ], - [ - "1597", - "1601", - "1607", - "1609", - "1613", - "1619", - "1621", - "1627", - "1637", - "1657" - ], - [ - "1663", - "1667", - "1669", - "1693", - "1697", - "1699", - "1709", - "1721", - "1723", - "1733" - ], - [ - "1741", - "1747", - "1753", - "1759", - "1777", - "1783", - "1787", - "1789", - "1801", - "1811" - ], - [ - "1823", - "1831", - "1847", - "1861", - "1867", - "1871", - "1873", - "1877", - "1879", - "1889" - ], - [ - "1901", - "1907", - "1913", - "1931", - "1933", - "1949", - "1951", - "1973", - "1979", - "1987" - ], - [ - "1993", - "1997", - "1999", - "2003", - "2011", - "2017", - "2027", - "2029", - "2039", - "2053" - ], - [ - "2063", - "2069", - "2081", - "2083", - "2087", - "2089", - "2099", - "2111", - "2113", - "2129" - ], - [ - "2131", - "2137", - "2141", - "2143", - "2153", - "2161", - "2179", - "2203", - "2207", - "2213" - ], - [ - "2221", - "2237", - "2239", - "2243", - "2251", - "2267", - "2269", - "2273", - "2281", - "2287" - ], - [ - "2293", - "2297", - "2309", - "2311", - "2333", - "2339", - "2341", - "2347", - "2351", - "2357" - ], - [ - "2371", - "2377", - "2381", - "2383", - "2389", - "2393", - "2399", - "2411", - "2417", - "2423" - ], - [ - "2437", - "2441", - "2447", - "2459", - "2467", - "2473", - "2477", - "2503", - "2521", - "2531" - ], - [ - "2539", - "2543", - "2549", - "2551", - "2557", - "2579", - "2591", - "2593", - "2609", - "2617" - ], - [ - "2621", - "2633", - "2647", - "2657", - "2659", - "2663", - "2671", - "2677", - "2683", - "2687" - ], - [ - "2689", - "2693", - "2699", - "2707", - "2711", - "2713", - "2719", - "2729", - "2731", - "2741" - ], - [ - "2749", - "2753", - "2767", - "2777", - "2789", - "2791", - "2797", - "2801", - "2803", - "2819" - ], - [ - "2833", - "2837", - "2843", - "2851", - "2857", - "2861", - "2879", - "2887", - "2897", - "2903" - ], - [ - "2909", - "2917", - "2927", - "2939", - "2953", - "2957", - "2963", - "2969", - "2971", - "2999" - ], - [ - "3001", - "3011", - "3019", - "3023", - "3037", - "3041", - "3049", - "3061", - "3067", - "3079" - ], - [ - "3083", - "3089", - "3109", - "3119", - "3121", - "3137", - "3163", - "3167", - "3169", - "3181" - ], - [ - "3187", - "3191", - "3203", - "3209", - "3217", - "3221", - "3229", - "3251", - "3253", - "3257" - ], - [ - "3259", - "3271", - "3299", - "3301", - "3307", - "3313", - "3319", - "3323", - "3329", - "3331" - ], - [ - "3343", - "3347", - "3359", - "3361", - "3371", - "3373", - "3389", - "3391", - "3407", - "3413" - ], - [ - "3433", - "3449", - "3457", - "3461", - "3463", - "3467", - "3469", - "3491", - "3499", - "3511" - ], - [ - "3517", - "3527", - "3529", - "3533", - "3539", - "3541", - "3547", - "3557", - "3559", - "3571" - ], - [ - "3581", - "3583", - "3593", - "3607", - "3613", - "3617", - "3623", - "3631", - "3637", - "3643" - ], - [ - "3659", - "3671", - "3673", - "3677", - "3691", - "3697", - "3701", - "3709", - "3719", - "3727" - ], - [ - "3733", - "3739", - "3761", - "3767", - "3769", - "3779", - "3793", - "3797", - "3803", - "3821" - ], - [ - "3823", - "3833", - "3847", - "3851", - "3853", - "3863", - "3877", - "3881", - "3889", - "3907" - ], - [ - "3911", - "3917", - "3919", - "3923", - "3929", - "3931", - "3943", - "3947", - "3967", - "3989" - ], - [ - "4001", - "4003", - "4007", - "4013", - "4019", - "4021", - "4027", - "4049", - "4051", - "4057" - ], - [ - "4073", - "4079", - "4091", - "4093", - "4099", - "4111", - "4127", - "4129", - "4133", - "4139" - ], - [ - "4153", - "4157", - "4159", - "4177", - "4201", - "4211", - "4217", - "4219", - "4229", - "4231" - ], - [ - "4241", - "4243", - "4253", - "4259", - "4261", - "4271", - "4273", - "4283", - "4289", - "4297" - ], - [ - "4327", - "4337", - "4339", - "4349", - "4357", - "4363", - "4373", - "4391", - "4397", - "4409" - ], - [ - "4421", - "4423", - "4441", - "4447", - "4451", - "4457", - "4463", - "4481", - "4483", - "4493" - ], - [ - "4507", - "4513", - "4517", - "4519", - "4523", - "4547", - "4549", - "4561", - "4567", - "4583" - ], - [ - "4591", - "4597", - "4603", - "4621", - "4637", - "4639", - "4643", - "4649", - "4651", - "4657" - ], - [ - "4663", - "4673", - "4679", - "4691", - "4703", - "4721", - "4723", - "4729", - "4733", - "4751" - ], - [ - "4759", - "4783", - "4787", - "4789", - "4793", - "4799", - "4801", - "4813", - "4817", - "4831" - ], - [ - "4861", - "4871", - "4877", - "4889", - "4903", - "4909", - "4919", - "4931", - "4933", - "4937" - ], - [ - "4943", - "4951", - "4957", - "4967", - "4969", - "4973", - "4987", - "4993", - "4999", - "5003" - ], - [ - "5009", - "5011", - "5021", - "5023", - "5039", - "5051", - "5059", - "5077", - "5081", - "5087" - ], - [ - "5099", - "5101", - "5107", - "5113", - "5119", - "5147", - "5153", - "5167", - "5171", - "5179" - ], - [ - "5189", - "5197", - "5209", - "5227", - "5231", - "5233", - "5237", - "5261", - "5273", - "5279" - ], - [ - "5281", - "5297", - "5303", - "5309", - "5323", - "5333", - "5347", - "5351", - "5381", - "5387" - ], - [ - "5393", - "5399", - "5407", - "5413", - "5417", - "5419", - "5431", - "5437", - "5441", - "5443" - ], - [ - "5449", - "5471", - "5477", - "5479", - "5483", - "5501", - "5503", - "5507", - "5519", - "5521" - ], - [ - "5527", - "5531", - "5557", - "5563", - "5569", - "5573", - "5581", - "5591", - "5623", - "5639" - ], - [ - "5641", - "5647", - "5651", - "5653", - "5657", - "5659", - "5669", - "5683", - "5689", - "5693" - ], - [ - "5701", - "5711", - "5717", - "5737", - "5741", - "5743", - "5749", - "5779", - "5783", - "5791" - ], - [ - "5801", - "5807", - "5813", - "5821", - "5827", - "5839", - "5843", - "5849", - "5851", - "5857" - ], - [ - "5861", - "5867", - "5869", - "5879", - "5881", - "5897", - "5903", - "5923", - "5927", - "5939" - ], - [ - "5953", - "5981", - "5987", - "6007", - "6011", - "6029", - "6037", - "6043", - "6047", - "6053" - ], - [ - "6067", - "6073", - "6079", - "6089", - "6091", - "6101", - "6113", - "6121", - "6131", - "6133" - ], - [ - "6143", - "6151", - "6163", - "6173", - "6197", - "6199", - "6203", - "6211", - "6217", - "6221" - ], - [ - "6229", - "6247", - "6257", - "6263", - "6269", - "6271", - "6277", - "6287", - "6299", - "6301" - ], - [ - "6311", - "6317", - "6323", - "6329", - "6337", - "6343", - "6353", - "6359", - "6361", - "6367" - ], - [ - "6373", - "6379", - "6389", - "6397", - "6421", - "6427", - "6449", - "6451", - "6469", - "6473" - ], - [ - "6481", - "6491", - "6521", - "6529", - "6547", - "6551", - "6553", - "6563", - "6569", - "6571" - ], - [ - "6577", - "6581", - "6599", - "6607", - "6619", - "6637", - "6653", - "6659", - "6661", - "6673" - ], - [ - "6679", - "6689", - "6691", - "6701", - "6703", - "6709", - "6719", - "6733", - "6737", - "6761" - ], - [ - "6763", - "6779", - "6781", - "6791", - "6793", - "6803", - "6823", - "6827", - "6829", - "6833" - ], - [ - "6841", - "6857", - "6863", - "6869", - "6871", - "6883", - "6899", - "6907", - "6911", - "6917" - ], - [ - "6947", - "6949", - "6959", - "6961", - "6967", - "6971", - "6977", - "6983", - "6991", - "6997" - ], - [ - "7001", - "7013", - "7019", - "7027", - "7039", - "7043", - "7057", - "7069", - "7079", - "7103" - ], - [ - "7109", - "7121", - "7127", - "7129", - "7151", - "7159", - "7177", - "7187", - "7193", - "7207" - ], - [ - "7211", - "7213", - "7219", - "7229", - "7237", - "7243", - "7247", - "7253", - "7283", - "7297" - ], - [ - "7307", - "7309", - "7321", - "7331", - "7333", - "7349", - "7351", - "7369", - "7393", - "7411" - ], - [ - "7417", - "7433", - "7451", - "7457", - "7459", - "7477", - "7481", - "7487", - "7489", - "7499" - ], - [ - "7507", - "7517", - "7523", - "7529", - "7537", - "7541", - "7547", - "7549", - "7559", - "7561" - ], - [ - "7573", - "7577", - "7583", - "7589", - "7591", - "7603", - "7607", - "7621", - "7639", - "7643" - ], - [ - "7649", - "7669", - "7673", - "7681", - "7687", - "7691", - "7699", - "7703", - "7717", - "7723" - ], - [ - "7727", - "7741", - "7753", - "7757", - "7759", - "7789", - "7793", - "7817", - "7823", - "7829" - ], - [ - "7841", - "7853", - "7867", - "7873", - "7877", - "7879", - "7883", - "7901", - "7907", - "7919" - ], - [ - "7927", - "7933", - "7937", - "7949", - "7951", - "7963", - "7993", - "8009", - "8011", - "8017" - ], - [ - "8039", - "8053", - "8059", - "8069", - "8081", - "8087", - "8089", - "8093", - "8101", - "8111" - ], - [ - "8117", - "8123", - "8147", - "8161", - "8167", - "8171", - "8179", - "8191", - "8209", - "8219" - ], - [ - "8221", - "8231", - "8233", - "8237", - "8243", - "8263", - "8269", - "8273", - "8287", - "8291" - ], - [ - "8293", - "8297", - "8311", - "8317", - "8329", - "8353", - "8363", - "8369", - "8377", - "8387" - ], - [ - "8389", - "8419", - "8423", - "8429", - "8431", - "8443", - "8447", - "8461", - "8467", - "8501" - ], - [ - "8513", - "8521", - "8527", - "8537", - "8539", - "8543", - "8563", - "8573", - "8581", - "8597" - ], - [ - "8599", - "8609", - "8623", - "8627", - "8629", - "8641", - "8647", - "8663", - "8669", - "8677" - ], - [ - "8681", - "8689", - "8693", - "8699", - "8707", - "8713", - "8719", - "8731", - "8737", - "8741" - ], - [ - "8747", - "8753", - "8761", - "8779", - "8783", - "8803", - "8807", - "8819", - "8821", - "8831" - ], - [ - "8837", - "8839", - "8849", - "8861", - "8863", - "8867", - "8887", - "8893", - "8923", - "8929" - ], - [ - "8933", - "8941", - "8951", - "8963", - "8969", - "8971", - "8999", - "9001", - "9007", - "9011" - ], - [ - "9013", - "9029", - "9041", - "9043", - "9049", - "9059", - "9067", - "9091", - "9103", - "9109" - ], - [ - "9127", - "9133", - "9137", - "9151", - "9157", - "9161", - "9173", - "9181", - "9187", - "9199" - ], - [ - "9203", - "9209", - "9221", - "9227", - "9239", - "9241", - "9257", - "9277", - "9281", - "9283" - ], - [ - "9293", - "9311", - "9319", - "9323", - "9337", - "9341", - "9343", - "9349", - "9371", - "9377" - ], - [ - "9391", - "9397", - "9403", - "9413", - "9419", - "9421", - "9431", - "9433", - "9437", - "9439" - ], - [ - "9461", - "9463", - "9467", - "9473", - "9479", - "9491", - "9497", - "9511", - "9521", - "9533" - ], - [ - "9539", - "9547", - "9551", - "9587", - "9601", - "9613", - "9619", - "9623", - "9629", - "9631" - ], - [ - "9643", - "9649", - "9661", - "9677", - "9679", - "9689", - "9697", - "9719", - "9721", - "9733" - ], - [ - "9739", - "9743", - "9749", - "9767", - "9769", - "9781", - "9787", - "9791", - "9803", - "9811" - ], - [ - "9817", - "9829", - "9833", - "9839", - "9851", - "9857", - "9859", - "9871", - "9883", - "9887" - ], - [ - "9901", - "9907", - "9923", - "9929", - "9931", - "9941", - "9949", - "9967", - "9973", - "10007" - ], - [ - "10009", - "10037", - "10039", - "10061", - "10067", - "10069", - "10079", - "10091", - "10093", - "10099" - ], - [ - "10103", - "10111", - "10133", - "10139", - "10141", - "10151", - "10159", - "10163", - "10169", - "10177" - ], - [ - "10181", - "10193", - "10211", - "10223", - "10243", - "10247", - "10253", - "10259", - "10267", - "10271" - ], - [ - "10273", - "10289", - "10301", - "10303", - "10313", - "10321", - "10331", - "10333", - "10337", - "10343" - ], - [ - "10357", - "10369", - "10391", - "10399", - "10427", - "10429", - "10433", - "10453", - "10457", - "10459" - ], - [ - "10463", - "10477", - "10487", - "10499", - "10501", - "10513", - "10529", - "10531", - "10559", - "10567" - ], - [ - "10589", - "10597", - "10601", - "10607", - "10613", - "10627", - "10631", - "10639", - "10651", - "10657" - ], - [ - "10663", - "10667", - "10687", - "10691", - "10709", - "10711", - "10723", - "10729", - "10733", - "10739" - ], - [ - "10753", - "10771", - "10781", - "10789", - "10799", - "10831", - "10837", - "10847", - "10853", - "10859" - ], - [ - "10861", - "10867", - "10883", - "10889", - "10891", - "10903", - "10909", - "10937", - "10939", - "10949" - ], - [ - "10957", - "10973", - "10979", - "10987", - "10993", - "11003", - "11027", - "11047", - "11057", - "11059" - ], - [ - "11069", - "11071", - "11083", - "11087", - "11093", - "11113", - "11117", - "11119", - "11131", - "11149" - ], - [ - "11159", - "11161", - "11171", - "11173", - "11177", - "11197", - "11213", - "11239", - "11243", - "11251" - ], - [ - "11257", - "11261", - "11273", - "11279", - "11287", - "11299", - "11311", - "11317", - "11321", - "11329" - ], - [ - "11351", - "11353", - "11369", - "11383", - "11393", - "11399", - "11411", - "11423", - "11437", - "11443" - ], - [ - "11447", - "11467", - "11471", - "11483", - "11489", - "11491", - "11497", - "11503", - "11519", - "11527" - ], - [ - "11549", - "11551", - "11579", - "11587", - "11593", - "11597", - "11617", - "11621", - "11633", - "11657" - ], - [ - "11677", - "11681", - "11689", - "11699", - "11701", - "11717", - "11719", - "11731", - "11743", - "11777" - ], - [ - "11779", - "11783", - "11789", - "11801", - "11807", - "11813", - "11821", - "11827", - "11831", - "11833" - ], - [ - "11839", - "11863", - "11867", - "11887", - "11897", - "11903", - "11909", - "11923", - "11927", - "11933" - ], - [ - "11939", - "11941", - "11953", - "11959", - "11969", - "11971", - "11981", - "11987", - "12007", - "12011" - ], - [ - "12037", - "12041", - "12043", - "12049", - "12071", - "12073", - "12097", - "12101", - "12107", - "12109" - ], - [ - "12113", - "12119", - "12143", - "12149", - "12157", - "12161", - "12163", - "12197", - "12203", - "12211" - ], - [ - "12227", - "12239", - "12241", - "12251", - "12253", - "12263", - "12269", - "12277", - "12281", - "12289" - ], - [ - "12301", - "12323", - "12329", - "12343", - "12347", - "12373", - "12377", - "12379", - "12391", - "12401" - ], - [ - "12409", - "12413", - "12421", - "12433", - "12437", - "12451", - "12457", - "12473", - "12479", - "12487" - ], - [ - "12491", - "12497", - "12503", - "12511", - "12517", - "12527", - "12539", - "12541", - "12547", - "12553" - ], - [ - "12569", - "12577", - "12583", - "12589", - "12601", - "12611", - "12613", - "12619", - "12637", - "12641" - ], - [ - "12647", - "12653", - "12659", - "12671", - "12689", - "12697", - "12703", - "12713", - "12721", - "12739" - ], - [ - "12743", - "12757", - "12763", - "12781", - "12791", - "12799", - "12809", - "12821", - "12823", - "12829" - ], - [ - "12841", - "12853", - "12889", - "12893", - "12899", - "12907", - "12911", - "12917", - "12919", - "12923" - ], - [ - "12941", - "12953", - "12959", - "12967", - "12973", - "12979", - "12983", - "13001", - "13003", - "13007" - ], - [ - "13009", - "13033", - "13037", - "13043", - "13049", - "13063", - "13093", - "13099", - "13103", - "13109" - ], - [ - "13121", - "13127", - "13147", - "13151", - "13159", - "13163", - "13171", - "13177", - "13183", - "13187" - ], - [ - "13217", - "13219", - "13229", - "13241", - "13249", - "13259", - "13267", - "13291", - "13297", - "13309" - ], - [ - "13313", - "13327", - "13331", - "13337", - "13339", - "13367", - "13381", - "13397", - "13399", - "13411" - ], - [ - "13417", - "13421", - "13441", - "13451", - "13457", - "13463", - "13469", - "13477", - "13487", - "13499" - ], - [ - "13513", - "13523", - "13537", - "13553", - "13567", - "13577", - "13591", - "13597", - "13613", - "13619" - ], - [ - "13627", - "13633", - "13649", - "13669", - "13679", - "13681", - "13687", - "13691", - "13693", - "13697" - ], - [ - "13709", - "13711", - "13721", - "13723", - "13729", - "13751", - "13757", - "13759", - "13763", - "13781" - ], - [ - "13789", - "13799", - "13807", - "13829", - "13831", - "13841", - "13859", - "13873", - "13877", - "13879" - ], - [ - "13883", - "13901", - "13903", - "13907", - "13913", - "13921", - "13931", - "13933", - "13963", - "13967" - ], - [ - "13997", - "13999", - "14009", - "14011", - "14029", - "14033", - "14051", - "14057", - "14071", - "14081" - ], - [ - "14083", - "14087", - "14107", - "14143", - "14149", - "14153", - "14159", - "14173", - "14177", - "14197" - ], - [ - "14207", - "14221", - "14243", - "14249", - "14251", - "14281", - "14293", - "14303", - "14321", - "14323" - ], - [ - "14327", - "14341", - "14347", - "14369", - "14387", - "14389", - "14401", - "14407", - "14411", - "14419" - ], - [ - "14423", - "14431", - "14437", - "14447", - "14449", - "14461", - "14479", - "14489", - "14503", - "14519" - ], - [ - "14533", - "14537", - "14543", - "14549", - "14551", - "14557", - "14561", - "14563", - "14591", - "14593" - ], - [ - "14621", - "14627", - "14629", - "14633", - "14639", - "14653", - "14657", - "14669", - "14683", - "14699" - ], - [ - "14713", - "14717", - "14723", - "14731", - "14737", - "14741", - "14747", - "14753", - "14759", - "14767" - ], - [ - "14771", - "14779", - "14783", - "14797", - "14813", - "14821", - "14827", - "14831", - "14843", - "14851" - ], - [ - "14867", - "14869", - "14879", - "14887", - "14891", - "14897", - "14923", - "14929", - "14939", - "14947" - ], - [ - "14951", - "14957", - "14969", - "14983", - "15013", - "15017", - "15031", - "15053", - "15061", - "15073" - ], - [ - "15077", - "15083", - "15091", - "15101", - "15107", - "15121", - "15131", - "15137", - "15139", - "15149" - ], - [ - "15161", - "15173", - "15187", - "15193", - "15199", - "15217", - "15227", - "15233", - "15241", - "15259" - ], - [ - "15263", - "15269", - "15271", - "15277", - "15287", - "15289", - "15299", - "15307", - "15313", - "15319" - ], - [ - "15329", - "15331", - "15349", - "15359", - "15361", - "15373", - "15377", - "15383", - "15391", - "15401" - ], - [ - "15413", - "15427", - "15439", - "15443", - "15451", - "15461", - "15467", - "15473", - "15493", - "15497" - ], - [ - "15511", - "15527", - "15541", - "15551", - "15559", - "15569", - "15581", - "15583", - "15601", - "15607" - ], - [ - "15619", - "15629", - "15641", - "15643", - "15647", - "15649", - "15661", - "15667", - "15671", - "15679" - ], - [ - "15683", - "15727", - "15731", - "15733", - "15737", - "15739", - "15749", - "15761", - "15767", - "15773" - ], - [ - "15787", - "15791", - "15797", - "15803", - "15809", - "15817", - "15823", - "15859", - "15877", - "15881" - ], - [ - "15887", - "15889", - "15901", - "15907", - "15913", - "15919", - "15923", - "15937", - "15959", - "15971" - ], - [ - "15973", - "15991", - "16001", - "16007", - "16033", - "16057", - "16061", - "16063", - "16067", - "16069" - ], - [ - "16073", - "16087", - "16091", - "16097", - "16103", - "16111", - "16127", - "16139", - "16141", - "16183" - ], - [ - "16187", - "16189", - "16193", - "16217", - "16223", - "16229", - "16231", - "16249", - "16253", - "16267" - ], - [ - "16273", - "16301", - "16319", - "16333", - "16339", - "16349", - "16361", - "16363", - "16369", - "16381" - ], - [ - "16411", - "16417", - "16421", - "16427", - "16433", - "16447", - "16451", - "16453", - "16477", - "16481" - ], - [ - "16487", - "16493", - "16519", - "16529", - "16547", - "16553", - "16561", - "16567", - "16573", - "16603" - ], - [ - "16607", - "16619", - "16631", - "16633", - "16649", - "16651", - "16657", - "16661", - "16673", - "16691" - ], - [ - "16693", - "16699", - "16703", - "16729", - "16741", - "16747", - "16759", - "16763", - "16787", - "16811" - ], - [ - "16823", - "16829", - "16831", - "16843", - "16871", - "16879", - "16883", - "16889", - "16901", - "16903" - ], - [ - "16921", - "16927", - "16931", - "16937", - "16943", - "16963", - "16979", - "16981", - "16987", - "16993" - ], - [ - "17011", - "17021", - "17027", - "17029", - "17033", - "17041", - "17047", - "17053", - "17077", - "17093" - ], - [ - "17099", - "17107", - "17117", - "17123", - "17137", - "17159", - "17167", - "17183", - "17189", - "17191" - ], - [ - "17203", - "17207", - "17209", - "17231", - "17239", - "17257", - "17291", - "17293", - "17299", - "17317" - ], - [ - "17321", - "17327", - "17333", - "17341", - "17351", - "17359", - "17377", - "17383", - "17387", - "17389" - ], - [ - "17393", - "17401", - "17417", - "17419", - "17431", - "17443", - "17449", - "17467", - "17471", - "17477" - ], - [ - "17483", - "17489", - "17491", - "17497", - "17509", - "17519", - "17539", - "17551", - "17569", - "17573" - ], - [ - "17579", - "17581", - "17597", - "17599", - "17609", - "17623", - "17627", - "17657", - "17659", - "17669" - ], - [ - "17681", - "17683", - "17707", - "17713", - "17729", - "17737", - "17747", - "17749", - "17761", - "17783" - ], - [ - "17789", - "17791", - "17807", - "17827", - "17837", - "17839", - "17851", - "17863", - "17881", - "17891" - ], - [ - "17903", - "17909", - "17911", - "17921", - "17923", - "17929", - "17939", - "17957", - "17959", - "17971" - ], - [ - "17977", - "17981", - "17987", - "17989", - "18013", - "18041", - "18043", - "18047", - "18049", - "18059" - ], - [ - "18061", - "18077", - "18089", - "18097", - "18119", - "18121", - "18127", - "18131", - "18133", - "18143" - ], - [ - "18149", - "18169", - "18181", - "18191", - "18199", - "18211", - "18217", - "18223", - "18229", - "18233" - ], - [ - "18251", - "18253", - "18257", - "18269", - "18287", - "18289", - "18301", - "18307", - "18311", - "18313" - ], - [ - "18329", - "18341", - "18353", - "18367", - "18371", - "18379", - "18397", - "18401", - "18413", - "18427" - ], - [ - "18433", - "18439", - "18443", - "18451", - "18457", - "18461", - "18481", - "18493", - "18503", - "18517" - ], - [ - "18521", - "18523", - "18539", - "18541", - "18553", - "18583", - "18587", - "18593", - "18617", - "18637" - ], - [ - "18661", - "18671", - "18679", - "18691", - "18701", - "18713", - "18719", - "18731", - "18743", - "18749" - ], - [ - "18757", - "18773", - "18787", - "18793", - "18797", - "18803", - "18839", - "18859", - "18869", - "18899" - ], - [ - "18911", - "18913", - "18917", - "18919", - "18947", - "18959", - "18973", - "18979", - "19001", - "19009" - ], - [ - "19013", - "19031", - "19037", - "19051", - "19069", - "19073", - "19079", - "19081", - "19087", - "19121" - ], - [ - "19139", - "19141", - "19157", - "19163", - "19181", - "19183", - "19207", - "19211", - "19213", - "19219" - ], - [ - "19231", - "19237", - "19249", - "19259", - "19267", - "19273", - "19289", - "19301", - "19309", - "19319" - ], - [ - "19333", - "19373", - "19379", - "19381", - "19387", - "19391", - "19403", - "19417", - "19421", - "19423" - ], - [ - "19427", - "19429", - "19433", - "19441", - "19447", - "19457", - "19463", - "19469", - "19471", - "19477" - ], - [ - "19483", - "19501", - "19507", - "19531", - "19541", - "19543", - "19553", - "19559", - "19571", - "19577" - ], - [ - "19583", - "19597", - "19603", - "19609", - "19661", - "19681", - "19687", - "19697", - "19699", - "19709" - ], - [ - "19717", - "19727", - "19739", - "19751", - "19753", - "19759", - "19763", - "19777", - "19793", - "19801" - ], - [ - "19813", - "19819", - "19841", - "19843", - "19853", - "19861", - "19867", - "19889", - "19891", - "19913" - ], - [ - "19919", - "19927", - "19937", - "19949", - "19961", - "19963", - "19973", - "19979", - "19991", - "19993" - ], - [ - "19997", - "20011", - "20021", - "20023", - "20029", - "20047", - "20051", - "20063", - "20071", - "20089" - ], - [ - "20101", - "20107", - "20113", - "20117", - "20123", - "20129", - "20143", - "20147", - "20149", - "20161" - ], - [ - "20173", - "20177", - "20183", - "20201", - "20219", - "20231", - "20233", - "20249", - "20261", - "20269" - ], - [ - "20287", - "20297", - "20323", - "20327", - "20333", - "20341", - "20347", - "20353", - "20357", - "20359" - ], - [ - "20369", - "20389", - "20393", - "20399", - "20407", - "20411", - "20431", - "20441", - "20443", - "20477" - ], - [ - "20479", - "20483", - "20507", - "20509", - "20521", - "20533", - "20543", - "20549", - "20551", - "20563" - ], - [ - "20593", - "20599", - "20611", - "20627", - "20639", - "20641", - "20663", - "20681", - "20693", - "20707" - ], - [ - "20717", - "20719", - "20731", - "20743", - "20747", - "20749", - "20753", - "20759", - "20771", - "20773" - ], - [ - "20789", - "20807", - "20809", - "20849", - "20857", - "20873", - "20879", - "20887", - "20897", - "20899" - ], - [ - "20903", - "20921", - "20929", - "20939", - "20947", - "20959", - "20963", - "20981", - "20983", - "21001" - ], - [ - "21011", - "21013", - "21017", - "21019", - "21023", - "21031", - "21059", - "21061", - "21067", - "21089" - ], - [ - "21101", - "21107", - "21121", - "21139", - "21143", - "21149", - "21157", - "21163", - "21169", - "21179" - ], - [ - "21187", - "21191", - "21193", - "21211", - "21221", - "21227", - "21247", - "21269", - "21277", - "21283" - ], - [ - "21313", - "21317", - "21319", - "21323", - "21341", - "21347", - "21377", - "21379", - "21383", - "21391" - ], - [ - "21397", - "21401", - "21407", - "21419", - "21433", - "21467", - "21481", - "21487", - "21491", - "21493" - ], - [ - "21499", - "21503", - "21517", - "21521", - "21523", - "21529", - "21557", - "21559", - "21563", - "21569" - ], - [ - "21577", - "21587", - "21589", - "21599", - "21601", - "21611", - "21613", - "21617", - "21647", - "21649" - ], - [ - "21661", - "21673", - "21683", - "21701", - "21713", - "21727", - "21737", - "21739", - "21751", - "21757" - ], - [ - "21767", - "21773", - "21787", - "21799", - "21803", - "21817", - "21821", - "21839", - "21841", - "21851" - ], - [ - "21859", - "21863", - "21871", - "21881", - "21893", - "21911", - "21929", - "21937", - "21943", - "21961" - ], - [ - "21977", - "21991", - "21997", - "22003", - "22013", - "22027", - "22031", - "22037", - "22039", - "22051" - ], - [ - "22063", - "22067", - "22073", - "22079", - "22091", - "22093", - "22109", - "22111", - "22123", - "22129" - ], - [ - "22133", - "22147", - "22153", - "22157", - "22159", - "22171", - "22189", - "22193", - "22229", - "22247" - ], - [ - "22259", - "22271", - "22273", - "22277", - "22279", - "22283", - "22291", - "22303", - "22307", - "22343" - ], - [ - "22349", - "22367", - "22369", - "22381", - "22391", - "22397", - "22409", - "22433", - "22441", - "22447" - ], - [ - "22453", - "22469", - "22481", - "22483", - "22501", - "22511", - "22531", - "22541", - "22543", - "22549" - ], - [ - "22567", - "22571", - "22573", - "22613", - "22619", - "22621", - "22637", - "22639", - "22643", - "22651" - ], - [ - "22669", - "22679", - "22691", - "22697", - "22699", - "22709", - "22717", - "22721", - "22727", - "22739" - ], - [ - "22741", - "22751", - "22769", - "22777", - "22783", - "22787", - "22807", - "22811", - "22817", - "22853" - ], - [ - "22859", - "22861", - "22871", - "22877", - "22901", - "22907", - "22921", - "22937", - "22943", - "22961" - ], - [ - "22963", - "22973", - "22993", - "23003", - "23011", - "23017", - "23021", - "23027", - "23029", - "23039" - ], - [ - "23041", - "23053", - "23057", - "23059", - "23063", - "23071", - "23081", - "23087", - "23099", - "23117" - ], - [ - "23131", - "23143", - "23159", - "23167", - "23173", - "23189", - "23197", - "23201", - "23203", - "23209" - ], - [ - "23227", - "23251", - "23269", - "23279", - "23291", - "23293", - "23297", - "23311", - "23321", - "23327" - ], - [ - "23333", - "23339", - "23357", - "23369", - "23371", - "23399", - "23417", - "23431", - "23447", - "23459" - ], - [ - "23473", - "23497", - "23509", - "23531", - "23537", - "23539", - "23549", - "23557", - "23561", - "23563" - ], - [ - "23567", - "23581", - "23593", - "23599", - "23603", - "23609", - "23623", - "23627", - "23629", - "23633" - ], - [ - "23663", - "23669", - "23671", - "23677", - "23687", - "23689", - "23719", - "23741", - "23743", - "23747" - ], - [ - "23753", - "23761", - "23767", - "23773", - "23789", - "23801", - "23813", - "23819", - "23827", - "23831" - ], - [ - "23833", - "23857", - "23869", - "23873", - "23879", - "23887", - "23893", - "23899", - "23909", - "23911" - ], - [ - "23917", - "23929", - "23957", - "23971", - "23977", - "23981", - "23993", - "24001", - "24007", - "24019" - ], - [ - "24023", - "24029", - "24043", - "24049", - "24061", - "24071", - "24077", - "24083", - "24091", - "24097" - ], - [ - "24103", - "24107", - "24109", - "24113", - "24121", - "24133", - "24137", - "24151", - "24169", - "24179" - ], - [ - "24181", - "24197", - "24203", - "24223", - "24229", - "24239", - "24247", - "24251", - "24281", - "24317" - ], - [ - "24329", - "24337", - "24359", - "24371", - "24373", - "24379", - "24391", - "24407", - "24413", - "24419" - ], - [ - "24421", - "24439", - "24443", - "24469", - "24473", - "24481", - "24499", - "24509", - "24517", - "24527" - ], - [ - "24533", - "24547", - "24551", - "24571", - "24593", - "24611", - "24623", - "24631", - "24659", - "24671" - ], - [ - "24677", - "24683", - "24691", - "24697", - "24709", - "24733", - "24749", - "24763", - "24767", - "24781" - ], - [ - "24793", - "24799", - "24809", - "24821", - "24841", - "24847", - "24851", - "24859", - "24877", - "24889" - ], - [ - "24907", - "24917", - "24919", - "24923", - "24943", - "24953", - "24967", - "24971", - "24977", - "24979" - ], - [ - "24989", - "25013", - "25031", - "25033", - "25037", - "25057", - "25073", - "25087", - "25097", - "25111" - ], - [ - "25117", - "25121", - "25127", - "25147", - "25153", - "25163", - "25169", - "25171", - "25183", - "25189" - ], - [ - "25219", - "25229", - "25237", - "25243", - "25247", - "25253", - "25261", - "25301", - "25303", - "25307" - ], - [ - "25309", - "25321", - "25339", - "25343", - "25349", - "25357", - "25367", - "25373", - "25391", - "25409" - ], - [ - "25411", - "25423", - "25439", - "25447", - "25453", - "25457", - "25463", - "25469", - "25471", - "25523" - ], - [ - "25537", - "25541", - "25561", - "25577", - "25579", - "25583", - "25589", - "25601", - "25603", - "25609" - ], - [ - "25621", - "25633", - "25639", - "25643", - "25657", - "25667", - "25673", - "25679", - "25693", - "25703" - ], - [ - "25717", - "25733", - "25741", - "25747", - "25759", - "25763", - "25771", - "25793", - "25799", - "25801" - ], - [ - "25819", - "25841", - "25847", - "25849", - "25867", - "25873", - "25889", - "25903", - "25913", - "25919" - ], - [ - "25931", - "25933", - "25939", - "25943", - "25951", - "25969", - "25981", - "25997", - "25999", - "26003" - ], - [ - "26017", - "26021", - "26029", - "26041", - "26053", - "26083", - "26099", - "26107", - "26111", - "26113" - ], - [ - "26119", - "26141", - "26153", - "26161", - "26171", - "26177", - "26183", - "26189", - "26203", - "26209" - ], - [ - "26227", - "26237", - "26249", - "26251", - "26261", - "26263", - "26267", - "26293", - "26297", - "26309" - ], - [ - "26317", - "26321", - "26339", - "26347", - "26357", - "26371", - "26387", - "26393", - "26399", - "26407" - ], - [ - "26417", - "26423", - "26431", - "26437", - "26449", - "26459", - "26479", - "26489", - "26497", - "26501" - ], - [ - "26513", - "26539", - "26557", - "26561", - "26573", - "26591", - "26597", - "26627", - "26633", - "26641" - ], - [ - "26647", - "26669", - "26681", - "26683", - "26687", - "26693", - "26699", - "26701", - "26711", - "26713" - ], - [ - "26717", - "26723", - "26729", - "26731", - "26737", - "26759", - "26777", - "26783", - "26801", - "26813" - ], - [ - "26821", - "26833", - "26839", - "26849", - "26861", - "26863", - "26879", - "26881", - "26891", - "26893" - ], - [ - "26903", - "26921", - "26927", - "26947", - "26951", - "26953", - "26959", - "26981", - "26987", - "26993" - ], - [ - "27011", - "27017", - "27031", - "27043", - "27059", - "27061", - "27067", - "27073", - "27077", - "27091" - ], - [ - "27103", - "27107", - "27109", - "27127", - "27143", - "27179", - "27191", - "27197", - "27211", - "27239" - ], - [ - "27241", - "27253", - "27259", - "27271", - "27277", - "27281", - "27283", - "27299", - "27329", - "27337" - ], - [ - "27361", - "27367", - "27397", - "27407", - "27409", - "27427", - "27431", - "27437", - "27449", - "27457" - ], - [ - "27479", - "27481", - "27487", - "27509", - "27527", - "27529", - "27539", - "27541", - "27551", - "27581" - ], - [ - "27583", - "27611", - "27617", - "27631", - "27647", - "27653", - "27673", - "27689", - "27691", - "27697" - ], - [ - "27701", - "27733", - "27737", - "27739", - "27743", - "27749", - "27751", - "27763", - "27767", - "27773" - ], - [ - "27779", - "27791", - "27793", - "27799", - "27803", - "27809", - "27817", - "27823", - "27827", - "27847" - ], - [ - "27851", - "27883", - "27893", - "27901", - "27917", - "27919", - "27941", - "27943", - "27947", - "27953" - ], - [ - "27961", - "27967", - "27983", - "27997", - "28001", - "28019", - "28027", - "28031", - "28051", - "28057" - ], - [ - "28069", - "28081", - "28087", - "28097", - "28099", - "28109", - "28111", - "28123", - "28151", - "28163" - ], - [ - "28181", - "28183", - "28201", - "28211", - "28219", - "28229", - "28277", - "28279", - "28283", - "28289" - ], - [ - "28297", - "28307", - "28309", - "28319", - "28349", - "28351", - "28387", - "28393", - "28403", - "28409" - ], - [ - "28411", - "28429", - "28433", - "28439", - "28447", - "28463", - "28477", - "28493", - "28499", - "28513" - ], - [ - "28517", - "28537", - "28541", - "28547", - "28549", - "28559", - "28571", - "28573", - "28579", - "28591" - ], - [ - "28597", - "28603", - "28607", - "28619", - "28621", - "28627", - "28631", - "28643", - "28649", - "28657" - ], - [ - "28661", - "28663", - "28669", - "28687", - "28697", - "28703", - "28711", - "28723", - "28729", - "28751" - ], - [ - "28753", - "28759", - "28771", - "28789", - "28793", - "28807", - "28813", - "28817", - "28837", - "28843" - ], - [ - "28859", - "28867", - "28871", - "28879", - "28901", - "28909", - "28921", - "28927", - "28933", - "28949" - ], - [ - "28961", - "28979", - "29009", - "29017", - "29021", - "29023", - "29027", - "29033", - "29059", - "29063" - ], - [ - "29077", - "29101", - "29123", - "29129", - "29131", - "29137", - "29147", - "29153", - "29167", - "29173" - ], - [ - "29179", - "29191", - "29201", - "29207", - "29209", - "29221", - "29231", - "29243", - "29251", - "29269" - ], - [ - "29287", - "29297", - "29303", - "29311", - "29327", - "29333", - "29339", - "29347", - "29363", - "29383" - ], - [ - "29387", - "29389", - "29399", - "29401", - "29411", - "29423", - "29429", - "29437", - "29443", - "29453" - ], - [ - "29473", - "29483", - "29501", - "29527", - "29531", - "29537", - "29567", - "29569", - "29573", - "29581" - ], - [ - "29587", - "29599", - "29611", - "29629", - "29633", - "29641", - "29663", - "29669", - "29671", - "29683" - ], - [ - "29717", - "29723", - "29741", - "29753", - "29759", - "29761", - "29789", - "29803", - "29819", - "29833" - ], - [ - "29837", - "29851", - "29863", - "29867", - "29873", - "29879", - "29881", - "29917", - "29921", - "29927" - ], - [ - "29947", - "29959", - "29983", - "29989", - "30011", - "30013", - "30029", - "30047", - "30059", - "30071" - ], - [ - "30089", - "30091", - "30097", - "30103", - "30109", - "30113", - "30119", - "30133", - "30137", - "30139" - ], - [ - "30161", - "30169", - "30181", - "30187", - "30197", - "30203", - "30211", - "30223", - "30241", - "30253" - ], - [ - "30259", - "30269", - "30271", - "30293", - "30307", - "30313", - "30319", - "30323", - "30341", - "30347" - ], - [ - "30367", - "30389", - "30391", - "30403", - "30427", - "30431", - "30449", - "30467", - "30469", - "30491" - ], - [ - "30493", - "30497", - "30509", - "30517", - "30529", - "30539", - "30553", - "30557", - "30559", - "30577" - ], - [ - "30593", - "30631", - "30637", - "30643", - "30649", - "30661", - "30671", - "30677", - "30689", - "30697" - ], - [ - "30703", - "30707", - "30713", - "30727", - "30757", - "30763", - "30773", - "30781", - "30803", - "30809" - ], - [ - "30817", - "30829", - "30839", - "30841", - "30851", - "30853", - "30859", - "30869", - "30871", - "30881" - ], - [ - "30893", - "30911", - "30931", - "30937", - "30941", - "30949", - "30971", - "30977", - "30983", - "31013" - ], - [ - "31019", - "31033", - "31039", - "31051", - "31063", - "31069", - "31079", - "31081", - "31091", - "31121" - ], - [ - "31123", - "31139", - "31147", - "31151", - "31153", - "31159", - "31177", - "31181", - "31183", - "31189" - ], - [ - "31193", - "31219", - "31223", - "31231", - "31237", - "31247", - "31249", - "31253", - "31259", - "31267" - ], - [ - "31271", - "31277", - "31307", - "31319", - "31321", - "31327", - "31333", - "31337", - "31357", - "31379" - ], - [ - "31387", - "31391", - "31393", - "31397", - "31469", - "31477", - "31481", - "31489", - "31511", - "31513" - ], - [ - "31517", - "31531", - "31541", - "31543", - "31547", - "31567", - "31573", - "31583", - "31601", - "31607" - ], - [ - "31627", - "31643", - "31649", - "31657", - "31663", - "31667", - "31687", - "31699", - "31721", - "31723" - ], - [ - "31727", - "31729", - "31741", - "31751", - "31769", - "31771", - "31793", - "31799", - "31817", - "31847" - ], - [ - "31849", - "31859", - "31873", - "31883", - "31891", - "31907", - "31957", - "31963", - "31973", - "31981" - ], - [ - "31991", - "32003", - "32009", - "32027", - "32029", - "32051", - "32057", - "32059", - "32063", - "32069" - ], - [ - "32077", - "32083", - "32089", - "32099", - "32117", - "32119", - "32141", - "32143", - "32159", - "32173" - ], - [ - "32183", - "32189", - "32191", - "32203", - "32213", - "32233", - "32237", - "32251", - "32257", - "32261" - ], - [ - "32297", - "32299", - "32303", - "32309", - "32321", - "32323", - "32327", - "32341", - "32353", - "32359" - ], - [ - "32363", - "32369", - "32371", - "32377", - "32381", - "32401", - "32411", - "32413", - "32423", - "32429" - ], - [ - "32441", - "32443", - "32467", - "32479", - "32491", - "32497", - "32503", - "32507", - "32531", - "32533" - ], - [ - "32537", - "32561", - "32563", - "32569", - "32573", - "32579", - "32587", - "32603", - "32609", - "32611" - ], - [ - "32621", - "32633", - "32647", - "32653", - "32687", - "32693", - "32707", - "32713", - "32717", - "32719" - ], - [ - "32749", - "32771", - "32779", - "32783", - "32789", - "32797", - "32801", - "32803", - "32831", - "32833" - ], - [ - "32839", - "32843", - "32869", - "32887", - "32909", - "32911", - "32917", - "32933", - "32939", - "32941" - ], - [ - "32957", - "32969", - "32971", - "32983", - "32987", - "32993", - "32999", - "33013", - "33023", - "33029" - ], - [ - "33037", - "33049", - "33053", - "33071", - "33073", - "33083", - "33091", - "33107", - "33113", - "33119" - ], - [ - "33149", - "33151", - "33161", - "33179", - "33181", - "33191", - "33199", - "33203", - "33211", - "33223" - ], - [ - "33247", - "33287", - "33289", - "33301", - "33311", - "33317", - "33329", - "33331", - "33343", - "33347" - ], - [ - "33349", - "33353", - "33359", - "33377", - "33391", - "33403", - "33409", - "33413", - "33427", - "33457" - ], - [ - "33461", - "33469", - "33479", - "33487", - "33493", - "33503", - "33521", - "33529", - "33533", - "33547" - ], - [ - "33563", - "33569", - "33577", - "33581", - "33587", - "33589", - "33599", - "33601", - "33613", - "33617" - ], - [ - "33619", - "33623", - "33629", - "33637", - "33641", - "33647", - "33679", - "33703", - "33713", - "33721" - ], - [ - "33739", - "33749", - "33751", - "33757", - "33767", - "33769", - "33773", - "33791", - "33797", - "33809" - ], - [ - "33811", - "33827", - "33829", - "33851", - "33857", - "33863", - "33871", - "33889", - "33893", - "33911" - ], - [ - "33923", - "33931", - "33937", - "33941", - "33961", - "33967", - "33997", - "34019", - "34031", - "34033" - ], - [ - "34039", - "34057", - "34061", - "34123", - "34127", - "34129", - "34141", - "34147", - "34157", - "34159" - ], - [ - "34171", - "34183", - "34211", - "34213", - "34217", - "34231", - "34253", - "34259", - "34261", - "34267" - ], - [ - "34273", - "34283", - "34297", - "34301", - "34303", - "34313", - "34319", - "34327", - "34337", - "34351" - ], - [ - "34361", - "34367", - "34369", - "34381", - "34403", - "34421", - "34429", - "34439", - "34457", - "34469" - ], - [ - "34471", - "34483", - "34487", - "34499", - "34501", - "34511", - "34513", - "34519", - "34537", - "34543" - ], - [ - "34549", - "34583", - "34589", - "34591", - "34603", - "34607", - "34613", - "34631", - "34649", - "34651" - ], - [ - "34667", - "34673", - "34679", - "34687", - "34693", - "34703", - "34721", - "34729", - "34739", - "34747" - ], - [ - "34757", - "34759", - "34763", - "34781", - "34807", - "34819", - "34841", - "34843", - "34847", - "34849" - ], - [ - "34871", - "34877", - "34883", - "34897", - "34913", - "34919", - "34939", - "34949", - "34961", - "34963" - ], - [ - "34981", - "35023", - "35027", - "35051", - "35053", - "35059", - "35069", - "35081", - "35083", - "35089" - ], - [ - "35099", - "35107", - "35111", - "35117", - "35129", - "35141", - "35149", - "35153", - "35159", - "35171" - ], - [ - "35201", - "35221", - "35227", - "35251", - "35257", - "35267", - "35279", - "35281", - "35291", - "35311" - ], - [ - "35317", - "35323", - "35327", - "35339", - "35353", - "35363", - "35381", - "35393", - "35401", - "35407" - ], - [ - "35419", - "35423", - "35437", - "35447", - "35449", - "35461", - "35491", - "35507", - "35509", - "35521" - ], - [ - "35527", - "35531", - "35533", - "35537", - "35543", - "35569", - "35573", - "35591", - "35593", - "35597" - ], - [ - "35603", - "35617", - "35671", - "35677", - "35729", - "35731", - "35747", - "35753", - "35759", - "35771" - ], - [ - "35797", - "35801", - "35803", - "35809", - "35831", - "35837", - "35839", - "35851", - "35863", - "35869" - ], - [ - "35879", - "35897", - "35899", - "35911", - "35923", - "35933", - "35951", - "35963", - "35969", - "35977" - ], - [ - "35983", - "35993", - "35999", - "36007", - "36011", - "36013", - "36017", - "36037", - "36061", - "36067" - ], - [ - "36073", - "36083", - "36097", - "36107", - "36109", - "36131", - "36137", - "36151", - "36161", - "36187" - ], - [ - "36191", - "36209", - "36217", - "36229", - "36241", - "36251", - "36263", - "36269", - "36277", - "36293" - ], - [ - "36299", - "36307", - "36313", - "36319", - "36341", - "36343", - "36353", - "36373", - "36383", - "36389" - ], - [ - "36433", - "36451", - "36457", - "36467", - "36469", - "36473", - "36479", - "36493", - "36497", - "36523" - ], - [ - "36527", - "36529", - "36541", - "36551", - "36559", - "36563", - "36571", - "36583", - "36587", - "36599" - ], - [ - "36607", - "36629", - "36637", - "36643", - "36653", - "36671", - "36677", - "36683", - "36691", - "36697" - ], - [ - "36709", - "36713", - "36721", - "36739", - "36749", - "36761", - "36767", - "36779", - "36781", - "36787" - ], - [ - "36791", - "36793", - "36809", - "36821", - "36833", - "36847", - "36857", - "36871", - "36877", - "36887" - ], - [ - "36899", - "36901", - "36913", - "36919", - "36923", - "36929", - "36931", - "36943", - "36947", - "36973" - ], - [ - "36979", - "36997", - "37003", - "37013", - "37019", - "37021", - "37039", - "37049", - "37057", - "37061" - ], - [ - "37087", - "37097", - "37117", - "37123", - "37139", - "37159", - "37171", - "37181", - "37189", - "37199" - ], - [ - "37201", - "37217", - "37223", - "37243", - "37253", - "37273", - "37277", - "37307", - "37309", - "37313" - ], - [ - "37321", - "37337", - "37339", - "37357", - "37361", - "37363", - "37369", - "37379", - "37397", - "37409" - ], - [ - "37423", - "37441", - "37447", - "37463", - "37483", - "37489", - "37493", - "37501", - "37507", - "37511" - ], - [ - "37517", - "37529", - "37537", - "37547", - "37549", - "37561", - "37567", - "37571", - "37573", - "37579" - ], - [ - "37589", - "37591", - "37607", - "37619", - "37633", - "37643", - "37649", - "37657", - "37663", - "37691" - ], - [ - "37693", - "37699", - "37717", - "37747", - "37781", - "37783", - "37799", - "37811", - "37813", - "37831" - ], - [ - "37847", - "37853", - "37861", - "37871", - "37879", - "37889", - "37897", - "37907", - "37951", - "37957" - ], - ["37963", "37967", "37987", "37991", "37993", ""]]}}]} - ============================================================================== + ... (541 lines omitted) ... + ] + } + } + ] + } +STEP: PHASE 3 + Description: Returning merged string (may be unclosed) + ⏳ In progress... + + + Returning merged string (preserving incomplete element at end for next iteration) ================================================================================ MERGE RESULT: ✅ SUCCESS ================================================================================ -Final result length: 92808 chars +Final result length: 60612 chars Final result (COMPLETE): ================================================================================ { @@ -4916,4830 +112,550 @@ Final result (COMPLETE): { "type": "table", "content": { - "headers": [ - "Spalte 1", - "Spalte 2", - "Spalte 3", - "Spalte 4", - "Spalte 5", - "Spalte 6", - "Spalte 7", - "Spalte 8", - "Spalte 9", - "Spalte 10" - ], + "headers": ["Spalte 1", "Spalte 2", "Spalte 3", "Spalte 4", "Spalte 5", "Spalte 6", "Spalte 7", "Spalte 8", "Spalte 9", "Spalte 10"], "rows": [ - [ - "2", - "3", - "5", - "7", - "11", - "13", - "17", - "19", - "23", - "29" - ], - [ - "31", - "37", - "41", - "43", - "47", - "53", - "59", - "61", - "67", - "71" - ], - [ - "73", - "79", - "83", - "89", - "97", - "101", - "103", - "107", - "109", - "113" - ], - [ - "127", - "131", - "137", - "139", - "149", - "151", - "157", - "163", - "167", - "173" - ], - [ - "179", - "181", - "191", - "193", - "197", - "199", - "211", - "223", - "227", - "229" - ], - [ - "233", - "239", - "241", - "251", - "257", - "263", - "269", - "271", - "277", - "281" - ], - [ - "283", - "293", - "307", - "311", - "313", - "317", - "331", - "337", - "347", - "349" - ], - [ - "353", - "359", - "367", - "373", - "379", - "383", - "389", - "397", - "401", - "409" - ], - [ - "419", - "421", - "431", - "433", - "439", - "443", - "449", - "457", - "461", - "463" - ], - [ - "467", - "479", - "487", - "491", - "499", - "503", - "509", - "521", - "523", - "541" - ], - [ - "547", - "557", - "563", - "569", - "571", - "577", - "587", - "593", - "599", - "601" - ], - [ - "607", - "613", - "617", - "619", - "631", - "641", - "643", - "647", - "653", - "659" - ], - [ - "661", - "673", - "677", - "683", - "691", - "701", - "709", - "719", - "727", - "733" - ], - [ - "739", - "743", - "751", - "757", - "761", - "769", - "773", - "787", - "797", - "809" - ], - [ - "811", - "821", - "823", - "827", - "829", - "839", - "853", - "857", - "859", - "863" - ], - [ - "877", - "881", - "883", - "887", - "907", - "911", - "919", - "929", - "937", - "941" - ], - [ - "947", - "953", - "967", - "971", - "977", - "983", - "991", - "997", - "1009", - "1013" - ], - [ - "1019", - "1021", - "1031", - "1033", - "1039", - "1049", - "1051", - "1061", - "1063", - "1069" - ], - [ - "1087", - "1091", - "1093", - "1097", - "1103", - "1109", - "1117", - "1123", - "1129", - "1151" - ], - [ - "1153", - "1163", - "1171", - "1181", - "1187", - "1193", - "1201", - "1213", - "1217", - "1223" - ], - [ - "1229", - "1231", - "1237", - "1249", - "1259", - "1277", - "1279", - "1283", - "1289", - "1291" - ], - [ - "1297", - "1301", - "1303", - "1307", - "1319", - "1321", - "1327", - "1361", - "1367", - "1373" - ], - [ - "1381", - "1399", - "1409", - "1423", - "1427", - "1429", - "1433", - "1439", - "1447", - "1451" - ], - [ - "1453", - "1459", - "1471", - "1481", - "1483", - "1487", - "1489", - "1493", - "1499", - "1511" - ], - [ - "1523", - "1531", - "1543", - "1549", - "1553", - "1559", - "1567", - "1571", - "1579", - "1583" - ], - [ - "1597", - "1601", - "1607", - "1609", - "1613", - "1619", - "1621", - "1627", - "1637", - "1657" - ], - [ - "1663", - "1667", - "1669", - "1693", - "1697", - "1699", - "1709", - "1721", - "1723", - "1733" - ], - [ - "1741", - "1747", - "1753", - "1759", - "1777", - "1783", - "1787", - "1789", - "1801", - "1811" - ], - [ - "1823", - "1831", - "1847", - "1861", - "1867", - "1871", - "1873", - "1877", - "1879", - "1889" - ], - [ - "1901", - "1907", - "1913", - "1931", - "1933", - "1949", - "1951", - "1973", - "1979", - "1987" - ], - [ - "1993", - "1997", - "1999", - "2003", - "2011", - "2017", - "2027", - "2029", - "2039", - "2053" - ], - [ - "2063", - "2069", - "2081", - "2083", - "2087", - "2089", - "2099", - "2111", - "2113", - "2129" - ], - [ - "2131", - "2137", - "2141", - "2143", - "2153", - "2161", - "2179", - "2203", - "2207", - "2213" - ], - [ - "2221", - "2237", - "2239", - "2243", - "2251", - "2267", - "2269", - "2273", - "2281", - "2287" - ], - [ - "2293", - "2297", - "2309", - "2311", - "2333", - "2339", - "2341", - "2347", - "2351", - "2357" - ], - [ - "2371", - "2377", - "2381", - "2383", - "2389", - "2393", - "2399", - "2411", - "2417", - "2423" - ], - [ - "2437", - "2441", - "2447", - "2459", - "2467", - "2473", - "2477", - "2503", - "2521", - "2531" - ], - [ - "2539", - "2543", - "2549", - "2551", - "2557", - "2579", - "2591", - "2593", - "2609", - "2617" - ], - [ - "2621", - "2633", - "2647", - "2657", - "2659", - "2663", - "2671", - "2677", - "2683", - "2687" - ], - [ - "2689", - "2693", - "2699", - "2707", - "2711", - "2713", - "2719", - "2729", - "2731", - "2741" - ], - [ - "2749", - "2753", - "2767", - "2777", - "2789", - "2791", - "2797", - "2801", - "2803", - "2819" - ], - [ - "2833", - "2837", - "2843", - "2851", - "2857", - "2861", - "2879", - "2887", - "2897", - "2903" - ], - [ - "2909", - "2917", - "2927", - "2939", - "2953", - "2957", - "2963", - "2969", - "2971", - "2999" - ], - [ - "3001", - "3011", - "3019", - "3023", - "3037", - "3041", - "3049", - "3061", - "3067", - "3079" - ], - [ - "3083", - "3089", - "3109", - "3119", - "3121", - "3137", - "3163", - "3167", - "3169", - "3181" - ], - [ - "3187", - "3191", - "3203", - "3209", - "3217", - "3221", - "3229", - "3251", - "3253", - "3257" - ], - [ - "3259", - "3271", - "3299", - "3301", - "3307", - "3313", - "3319", - "3323", - "3329", - "3331" - ], - [ - "3343", - "3347", - "3359", - "3361", - "3371", - "3373", - "3389", - "3391", - "3407", - "3413" - ], - [ - "3433", - "3449", - "3457", - "3461", - "3463", - "3467", - "3469", - "3491", - "3499", - "3511" - ], - [ - "3517", - "3527", - "3529", - "3533", - "3539", - "3541", - "3547", - "3557", - "3559", - "3571" - ], - [ - "3581", - "3583", - "3593", - "3607", - "3613", - "3617", - "3623", - "3631", - "3637", - "3643" - ], - [ - "3659", - "3671", - "3673", - "3677", - "3691", - "3697", - "3701", - "3709", - "3719", - "3727" - ], - [ - "3733", - "3739", - "3761", - "3767", - "3769", - "3779", - "3793", - "3797", - "3803", - "3821" - ], - [ - "3823", - "3833", - "3847", - "3851", - "3853", - "3863", - "3877", - "3881", - "3889", - "3907" - ], - [ - "3911", - "3917", - "3919", - "3923", - "3929", - "3931", - "3943", - "3947", - "3967", - "3989" - ], - [ - "4001", - "4003", - "4007", - "4013", - "4019", - "4021", - "4027", - "4049", - "4051", - "4057" - ], - [ - "4073", - "4079", - "4091", - "4093", - "4099", - "4111", - "4127", - "4129", - "4133", - "4139" - ], - [ - "4153", - "4157", - "4159", - "4177", - "4201", - "4211", - "4217", - "4219", - "4229", - "4231" - ], - [ - "4241", - "4243", - "4253", - "4259", - "4261", - "4271", - "4273", - "4283", - "4289", - "4297" - ], - [ - "4327", - "4337", - "4339", - "4349", - "4357", - "4363", - "4373", - "4391", - "4397", - "4409" - ], - [ - "4421", - "4423", - "4441", - "4447", - "4451", - "4457", - "4463", - "4481", - "4483", - "4493" - ], - [ - "4507", - "4513", - "4517", - "4519", - "4523", - "4547", - "4549", - "4561", - "4567", - "4583" - ], - [ - "4591", - "4597", - "4603", - "4621", - "4637", - "4639", - "4643", - "4649", - "4651", - "4657" - ], - [ - "4663", - "4673", - "4679", - "4691", - "4703", - "4721", - "4723", - "4729", - "4733", - "4751" - ], - [ - "4759", - "4783", - "4787", - "4789", - "4793", - "4799", - "4801", - "4813", - "4817", - "4831" - ], - [ - "4861", - "4871", - "4877", - "4889", - "4903", - "4909", - "4919", - "4931", - "4933", - "4937" - ], - [ - "4943", - "4951", - "4957", - "4967", - "4969", - "4973", - "4987", - "4993", - "4999", - "5003" - ], - [ - "5009", - "5011", - "5021", - "5023", - "5039", - "5051", - "5059", - "5077", - "5081", - "5087" - ], - [ - "5099", - "5101", - "5107", - "5113", - "5119", - "5147", - "5153", - "5167", - "5171", - "5179" - ], - [ - "5189", - "5197", - "5209", - "5227", - "5231", - "5233", - "5237", - "5261", - "5273", - "5279" - ], - [ - "5281", - "5297", - "5303", - "5309", - "5323", - "5333", - "5347", - "5351", - "5381", - "5387" - ], - [ - "5393", - "5399", - "5407", - "5413", - "5417", - "5419", - "5431", - "5437", - "5441", - "5443" - ], - [ - "5449", - "5471", - "5477", - "5479", - "5483", - "5501", - "5503", - "5507", - "5519", - "5521" - ], - [ - "5527", - "5531", - "5557", - "5563", - "5569", - "5573", - "5581", - "5591", - "5623", - "5639" - ], - [ - "5641", - "5647", - "5651", - "5653", - "5657", - "5659", - "5669", - "5683", - "5689", - "5693" - ], - [ - "5701", - "5711", - "5717", - "5737", - "5741", - "5743", - "5749", - "5779", - "5783", - "5791" - ], - [ - "5801", - "5807", - "5813", - "5821", - "5827", - "5839", - "5843", - "5849", - "5851", - "5857" - ], - [ - "5861", - "5867", - "5869", - "5879", - "5881", - "5897", - "5903", - "5923", - "5927", - "5939" - ], - [ - "5953", - "5981", - "5987", - "6007", - "6011", - "6029", - "6037", - "6043", - "6047", - "6053" - ], - [ - "6067", - "6073", - "6079", - "6089", - "6091", - "6101", - "6113", - "6121", - "6131", - "6133" - ], - [ - "6143", - "6151", - "6163", - "6173", - "6197", - "6199", - "6203", - "6211", - "6217", - "6221" - ], - [ - "6229", - "6247", - "6257", - "6263", - "6269", - "6271", - "6277", - "6287", - "6299", - "6301" - ], - [ - "6311", - "6317", - "6323", - "6329", - "6337", - "6343", - "6353", - "6359", - "6361", - "6367" - ], - [ - "6373", - "6379", - "6389", - "6397", - "6421", - "6427", - "6449", - "6451", - "6469", - "6473" - ], - [ - "6481", - "6491", - "6521", - "6529", - "6547", - "6551", - "6553", - "6563", - "6569", - "6571" - ], - [ - "6577", - "6581", - "6599", - "6607", - "6619", - "6637", - "6653", - "6659", - "6661", - "6673" - ], - [ - "6679", - "6689", - "6691", - "6701", - "6703", - "6709", - "6719", - "6733", - "6737", - "6761" - ], - [ - "6763", - "6779", - "6781", - "6791", - "6793", - "6803", - "6823", - "6827", - "6829", - "6833" - ], - [ - "6841", - "6857", - "6863", - "6869", - "6871", - "6883", - "6899", - "6907", - "6911", - "6917" - ], - [ - "6947", - "6949", - "6959", - "6961", - "6967", - "6971", - "6977", - "6983", - "6991", - "6997" - ], - [ - "7001", - "7013", - "7019", - "7027", - "7039", - "7043", - "7057", - "7069", - "7079", - "7103" - ], - [ - "7109", - "7121", - "7127", - "7129", - "7151", - "7159", - "7177", - "7187", - "7193", - "7207" - ], - [ - "7211", - "7213", - "7219", - "7229", - "7237", - "7243", - "7247", - "7253", - "7283", - "7297" - ], - [ - "7307", - "7309", - "7321", - "7331", - "7333", - "7349", - "7351", - "7369", - "7393", - "7411" - ], - [ - "7417", - "7433", - "7451", - "7457", - "7459", - "7477", - "7481", - "7487", - "7489", - "7499" - ], - [ - "7507", - "7517", - "7523", - "7529", - "7537", - "7541", - "7547", - "7549", - "7559", - "7561" - ], - [ - "7573", - "7577", - "7583", - "7589", - "7591", - "7603", - "7607", - "7621", - "7639", - "7643" - ], - [ - "7649", - "7669", - "7673", - "7681", - "7687", - "7691", - "7699", - "7703", - "7717", - "7723" - ], - [ - "7727", - "7741", - "7753", - "7757", - "7759", - "7789", - "7793", - "7817", - "7823", - "7829" - ], - [ - "7841", - "7853", - "7867", - "7873", - "7877", - "7879", - "7883", - "7901", - "7907", - "7919" - ], - [ - "7927", - "7933", - "7937", - "7949", - "7951", - "7963", - "7993", - "8009", - "8011", - "8017" - ], - [ - "8039", - "8053", - "8059", - "8069", - "8081", - "8087", - "8089", - "8093", - "8101", - "8111" - ], - [ - "8117", - "8123", - "8147", - "8161", - "8167", - "8171", - "8179", - "8191", - "8209", - "8219" - ], - [ - "8221", - "8231", - "8233", - "8237", - "8243", - "8263", - "8269", - "8273", - "8287", - "8291" - ], - [ - "8293", - "8297", - "8311", - "8317", - "8329", - "8353", - "8363", - "8369", - "8377", - "8387" - ], - [ - "8389", - "8419", - "8423", - "8429", - "8431", - "8443", - "8447", - "8461", - "8467", - "8501" - ], - [ - "8513", - "8521", - "8527", - "8537", - "8539", - "8543", - "8563", - "8573", - "8581", - "8597" - ], - [ - "8599", - "8609", - "8623", - "8627", - "8629", - "8641", - "8647", - "8663", - "8669", - "8677" - ], - [ - "8681", - "8689", - "8693", - "8699", - "8707", - "8713", - "8719", - "8731", - "8737", - "8741" - ], - [ - "8747", - "8753", - "8761", - "8779", - "8783", - "8803", - "8807", - "8819", - "8821", - "8831" - ], - [ - "8837", - "8839", - "8849", - "8861", - "8863", - "8867", - "8887", - "8893", - "8923", - "8929" - ], - [ - "8933", - "8941", - "8951", - "8963", - "8969", - "8971", - "8999", - "9001", - "9007", - "9011" - ], - [ - "9013", - "9029", - "9041", - "9043", - "9049", - "9059", - "9067", - "9091", - "9103", - "9109" - ], - [ - "9127", - "9133", - "9137", - "9151", - "9157", - "9161", - "9173", - "9181", - "9187", - "9199" - ], - [ - "9203", - "9209", - "9221", - "9227", - "9239", - "9241", - "9257", - "9277", - "9281", - "9283" - ], - [ - "9293", - "9311", - "9319", - "9323", - "9337", - "9341", - "9343", - "9349", - "9371", - "9377" - ], - [ - "9391", - "9397", - "9403", - "9413", - "9419", - "9421", - "9431", - "9433", - "9437", - "9439" - ], - [ - "9461", - "9463", - "9467", - "9473", - "9479", - "9491", - "9497", - "9511", - "9521", - "9533" - ], - [ - "9539", - "9547", - "9551", - "9587", - "9601", - "9613", - "9619", - "9623", - "9629", - "9631" - ], - [ - "9643", - "9649", - "9661", - "9677", - "9679", - "9689", - "9697", - "9719", - "9721", - "9733" - ], - [ - "9739", - "9743", - "9749", - "9767", - "9769", - "9781", - "9787", - "9791", - "9803", - "9811" - ], - [ - "9817", - "9829", - "9833", - "9839", - "9851", - "9857", - "9859", - "9871", - "9883", - "9887" - ], - [ - "9901", - "9907", - "9923", - "9929", - "9931", - "9941", - "9949", - "9967", - "9973", - "10007" - ], - [ - "10009", - "10037", - "10039", - "10061", - "10067", - "10069", - "10079", - "10091", - "10093", - "10099" - ], - [ - "10103", - "10111", - "10133", - "10139", - "10141", - "10151", - "10159", - "10163", - "10169", - "10177" - ], - [ - "10181", - "10193", - "10211", - "10223", - "10243", - "10247", - "10253", - "10259", - "10267", - "10271" - ], - [ - "10273", - "10289", - "10301", - "10303", - "10313", - "10321", - "10331", - "10333", - "10337", - "10343" - ], - [ - "10357", - "10369", - "10391", - "10399", - "10427", - "10429", - "10433", - "10453", - "10457", - "10459" - ], - [ - "10463", - "10477", - "10487", - "10499", - "10501", - "10513", - "10529", - "10531", - "10559", - "10567" - ], - [ - "10589", - "10597", - "10601", - "10607", - "10613", - "10627", - "10631", - "10639", - "10651", - "10657" - ], - [ - "10663", - "10667", - "10687", - "10691", - "10709", - "10711", - "10723", - "10729", - "10733", - "10739" - ], - [ - "10753", - "10771", - "10781", - "10789", - "10799", - "10831", - "10837", - "10847", - "10853", - "10859" - ], - [ - "10861", - "10867", - "10883", - "10889", - "10891", - "10903", - "10909", - "10937", - "10939", - "10949" - ], - [ - "10957", - "10973", - "10979", - "10987", - "10993", - "11003", - "11027", - "11047", - "11057", - "11059" - ], - [ - "11069", - "11071", - "11083", - "11087", - "11093", - "11113", - "11117", - "11119", - "11131", - "11149" - ], - [ - "11159", - "11161", - "11171", - "11173", - "11177", - "11197", - "11213", - "11239", - "11243", - "11251" - ], - [ - "11257", - "11261", - "11273", - "11279", - "11287", - "11299", - "11311", - "11317", - "11321", - "11329" - ], - [ - "11351", - "11353", - "11369", - "11383", - "11393", - "11399", - "11411", - "11423", - "11437", - "11443" - ], - [ - "11447", - "11467", - "11471", - "11483", - "11489", - "11491", - "11497", - "11503", - "11519", - "11527" - ], - [ - "11549", - "11551", - "11579", - "11587", - "11593", - "11597", - "11617", - "11621", - "11633", - "11657" - ], - [ - "11677", - "11681", - "11689", - "11699", - "11701", - "11717", - "11719", - "11731", - "11743", - "11777" - ], - [ - "11779", - "11783", - "11789", - "11801", - "11807", - "11813", - "11821", - "11827", - "11831", - "11833" - ], - [ - "11839", - "11863", - "11867", - "11887", - "11897", - "11903", - "11909", - "11923", - "11927", - "11933" - ], - [ - "11939", - "11941", - "11953", - "11959", - "11969", - "11971", - "11981", - "11987", - "12007", - "12011" - ], - [ - "12037", - "12041", - "12043", - "12049", - "12071", - "12073", - "12097", - "12101", - "12107", - "12109" - ], - [ - "12113", - "12119", - "12143", - "12149", - "12157", - "12161", - "12163", - "12197", - "12203", - "12211" - ], - [ - "12227", - "12239", - "12241", - "12251", - "12253", - "12263", - "12269", - "12277", - "12281", - "12289" - ], - [ - "12301", - "12323", - "12329", - "12343", - "12347", - "12373", - "12377", - "12379", - "12391", - "12401" - ], - [ - "12409", - "12413", - "12421", - "12433", - "12437", - "12451", - "12457", - "12473", - "12479", - "12487" - ], - [ - "12491", - "12497", - "12503", - "12511", - "12517", - "12527", - "12539", - "12541", - "12547", - "12553" - ], - [ - "12569", - "12577", - "12583", - "12589", - "12601", - "12611", - "12613", - "12619", - "12637", - "12641" - ], - [ - "12647", - "12653", - "12659", - "12671", - "12689", - "12697", - "12703", - "12713", - "12721", - "12739" - ], - [ - "12743", - "12757", - "12763", - "12781", - "12791", - "12799", - "12809", - "12821", - "12823", - "12829" - ], - [ - "12841", - "12853", - "12889", - "12893", - "12899", - "12907", - "12911", - "12917", - "12919", - "12923" - ], - [ - "12941", - "12953", - "12959", - "12967", - "12973", - "12979", - "12983", - "13001", - "13003", - "13007" - ], - [ - "13009", - "13033", - "13037", - "13043", - "13049", - "13063", - "13093", - "13099", - "13103", - "13109" - ], - [ - "13121", - "13127", - "13147", - "13151", - "13159", - "13163", - "13171", - "13177", - "13183", - "13187" - ], - [ - "13217", - "13219", - "13229", - "13241", - "13249", - "13259", - "13267", - "13291", - "13297", - "13309" - ], - [ - "13313", - "13327", - "13331", - "13337", - "13339", - "13367", - "13381", - "13397", - "13399", - "13411" - ], - [ - "13417", - "13421", - "13441", - "13451", - "13457", - "13463", - "13469", - "13477", - "13487", - "13499" - ], - [ - "13513", - "13523", - "13537", - "13553", - "13567", - "13577", - "13591", - "13597", - "13613", - "13619" - ], - [ - "13627", - "13633", - "13649", - "13669", - "13679", - "13681", - "13687", - "13691", - "13693", - "13697" - ], - [ - "13709", - "13711", - "13721", - "13723", - "13729", - "13751", - "13757", - "13759", - "13763", - "13781" - ], - [ - "13789", - "13799", - "13807", - "13829", - "13831", - "13841", - "13859", - "13873", - "13877", - "13879" - ], - [ - "13883", - "13901", - "13903", - "13907", - "13913", - "13921", - "13931", - "13933", - "13963", - "13967" - ], - [ - "13997", - "13999", - "14009", - "14011", - "14029", - "14033", - "14051", - "14057", - "14071", - "14081" - ], - [ - "14083", - "14087", - "14107", - "14143", - "14149", - "14153", - "14159", - "14173", - "14177", - "14197" - ], - [ - "14207", - "14221", - "14243", - "14249", - "14251", - "14281", - "14293", - "14303", - "14321", - "14323" - ], - [ - "14327", - "14341", - "14347", - "14369", - "14387", - "14389", - "14401", - "14407", - "14411", - "14419" - ], - [ - "14423", - "14431", - "14437", - "14447", - "14449", - "14461", - "14479", - "14489", - "14503", - "14519" - ], - [ - "14533", - "14537", - "14543", - "14549", - "14551", - "14557", - "14561", - "14563", - "14591", - "14593" - ], - [ - "14621", - "14627", - "14629", - "14633", - "14639", - "14653", - "14657", - "14669", - "14683", - "14699" - ], - [ - "14713", - "14717", - "14723", - "14731", - "14737", - "14741", - "14747", - "14753", - "14759", - "14767" - ], - [ - "14771", - "14779", - "14783", - "14797", - "14813", - "14821", - "14827", - "14831", - "14843", - "14851" - ], - [ - "14867", - "14869", - "14879", - "14887", - "14891", - "14897", - "14923", - "14929", - "14939", - "14947" - ], - [ - "14951", - "14957", - "14969", - "14983", - "15013", - "15017", - "15031", - "15053", - "15061", - "15073" - ], - [ - "15077", - "15083", - "15091", - "15101", - "15107", - "15121", - "15131", - "15137", - "15139", - "15149" - ], - [ - "15161", - "15173", - "15187", - "15193", - "15199", - "15217", - "15227", - "15233", - "15241", - "15259" - ], - [ - "15263", - "15269", - "15271", - "15277", - "15287", - "15289", - "15299", - "15307", - "15313", - "15319" - ], - [ - "15329", - "15331", - "15349", - "15359", - "15361", - "15373", - "15377", - "15383", - "15391", - "15401" - ], - [ - "15413", - "15427", - "15439", - "15443", - "15451", - "15461", - "15467", - "15473", - "15493", - "15497" - ], - [ - "15511", - "15527", - "15541", - "15551", - "15559", - "15569", - "15581", - "15583", - "15601", - "15607" - ], - [ - "15619", - "15629", - "15641", - "15643", - "15647", - "15649", - "15661", - "15667", - "15671", - "15679" - ], - [ - "15683", - "15727", - "15731", - "15733", - "15737", - "15739", - "15749", - "15761", - "15767", - "15773" - ], - [ - "15787", - "15791", - "15797", - "15803", - "15809", - "15817", - "15823", - "15859", - "15877", - "15881" - ], - [ - "15887", - "15889", - "15901", - "15907", - "15913", - "15919", - "15923", - "15937", - "15959", - "15971" - ], - [ - "15973", - "15991", - "16001", - "16007", - "16033", - "16057", - "16061", - "16063", - "16067", - "16069" - ], - [ - "16073", - "16087", - "16091", - "16097", - "16103", - "16111", - "16127", - "16139", - "16141", - "16183" - ], - [ - "16187", - "16189", - "16193", - "16217", - "16223", - "16229", - "16231", - "16249", - "16253", - "16267" - ], - [ - "16273", - "16301", - "16319", - "16333", - "16339", - "16349", - "16361", - "16363", - "16369", - "16381" - ], - [ - "16411", - "16417", - "16421", - "16427", - "16433", - "16447", - "16451", - "16453", - "16477", - "16481" - ], - [ - "16487", - "16493", - "16519", - "16529", - "16547", - "16553", - "16561", - "16567", - "16573", - "16603" - ], - [ - "16607", - "16619", - "16631", - "16633", - "16649", - "16651", - "16657", - "16661", - "16673", - "16691" - ], - [ - "16693", - "16699", - "16703", - "16729", - "16741", - "16747", - "16759", - "16763", - "16787", - "16811" - ], - [ - "16823", - "16829", - "16831", - "16843", - "16871", - "16879", - "16883", - "16889", - "16901", - "16903" - ], - [ - "16921", - "16927", - "16931", - "16937", - "16943", - "16963", - "16979", - "16981", - "16987", - "16993" - ], - [ - "17011", - "17021", - "17027", - "17029", - "17033", - "17041", - "17047", - "17053", - "17077", - "17093" - ], - [ - "17099", - "17107", - "17117", - "17123", - "17137", - "17159", - "17167", - "17183", - "17189", - "17191" - ], - [ - "17203", - "17207", - "17209", - "17231", - "17239", - "17257", - "17291", - "17293", - "17299", - "17317" - ], - [ - "17321", - "17327", - "17333", - "17341", - "17351", - "17359", - "17377", - "17383", - "17387", - "17389" - ], - [ - "17393", - "17401", - "17417", - "17419", - "17431", - "17443", - "17449", - "17467", - "17471", - "17477" - ], - [ - "17483", - "17489", - "17491", - "17497", - "17509", - "17519", - "17539", - "17551", - "17569", - "17573" - ], - [ - "17579", - "17581", - "17597", - "17599", - "17609", - "17623", - "17627", - "17657", - "17659", - "17669" - ], - [ - "17681", - "17683", - "17707", - "17713", - "17729", - "17737", - "17747", - "17749", - "17761", - "17783" - ], - [ - "17789", - "17791", - "17807", - "17827", - "17837", - "17839", - "17851", - "17863", - "17881", - "17891" - ], - [ - "17903", - "17909", - "17911", - "17921", - "17923", - "17929", - "17939", - "17957", - "17959", - "17971" - ], - [ - "17977", - "17981", - "17987", - "17989", - "18013", - "18041", - "18043", - "18047", - "18049", - "18059" - ], - [ - "18061", - "18077", - "18089", - "18097", - "18119", - "18121", - "18127", - "18131", - "18133", - "18143" - ], - [ - "18149", - "18169", - "18181", - "18191", - "18199", - "18211", - "18217", - "18223", - "18229", - "18233" - ], - [ - "18251", - "18253", - "18257", - "18269", - "18287", - "18289", - "18301", - "18307", - "18311", - "18313" - ], - [ - "18329", - "18341", - "18353", - "18367", - "18371", - "18379", - "18397", - "18401", - "18413", - "18427" - ], - [ - "18433", - "18439", - "18443", - "18451", - "18457", - "18461", - "18481", - "18493", - "18503", - "18517" - ], - [ - "18521", - "18523", - "18539", - "18541", - "18553", - "18583", - "18587", - "18593", - "18617", - "18637" - ], - [ - "18661", - "18671", - "18679", - "18691", - "18701", - "18713", - "18719", - "18731", - "18743", - "18749" - ], - [ - "18757", - "18773", - "18787", - "18793", - "18797", - "18803", - "18839", - "18859", - "18869", - "18899" - ], - [ - "18911", - "18913", - "18917", - "18919", - "18947", - "18959", - "18973", - "18979", - "19001", - "19009" - ], - [ - "19013", - "19031", - "19037", - "19051", - "19069", - "19073", - "19079", - "19081", - "19087", - "19121" - ], - [ - "19139", - "19141", - "19157", - "19163", - "19181", - "19183", - "19207", - "19211", - "19213", - "19219" - ], - [ - "19231", - "19237", - "19249", - "19259", - "19267", - "19273", - "19289", - "19301", - "19309", - "19319" - ], - [ - "19333", - "19373", - "19379", - "19381", - "19387", - "19391", - "19403", - "19417", - "19421", - "19423" - ], - [ - "19427", - "19429", - "19433", - "19441", - "19447", - "19457", - "19463", - "19469", - "19471", - "19477" - ], - [ - "19483", - "19501", - "19507", - "19531", - "19541", - "19543", - "19553", - "19559", - "19571", - "19577" - ], - [ - "19583", - "19597", - "19603", - "19609", - "19661", - "19681", - "19687", - "19697", - "19699", - "19709" - ], - [ - "19717", - "19727", - "19739", - "19751", - "19753", - "19759", - "19763", - "19777", - "19793", - "19801" - ], - [ - "19813", - "19819", - "19841", - "19843", - "19853", - "19861", - "19867", - "19889", - "19891", - "19913" - ], - [ - "19919", - "19927", - "19937", - "19949", - "19961", - "19963", - "19973", - "19979", - "19991", - "19993" - ], - [ - "19997", - "20011", - "20021", - "20023", - "20029", - "20047", - "20051", - "20063", - "20071", - "20089" - ], - [ - "20101", - "20107", - "20113", - "20117", - "20123", - "20129", - "20143", - "20147", - "20149", - "20161" - ], - [ - "20173", - "20177", - "20183", - "20201", - "20219", - "20231", - "20233", - "20249", - "20261", - "20269" - ], - [ - "20287", - "20297", - "20323", - "20327", - "20333", - "20341", - "20347", - "20353", - "20357", - "20359" - ], - [ - "20369", - "20389", - "20393", - "20399", - "20407", - "20411", - "20431", - "20441", - "20443", - "20477" - ], - [ - "20479", - "20483", - "20507", - "20509", - "20521", - "20533", - "20543", - "20549", - "20551", - "20563" - ], - [ - "20593", - "20599", - "20611", - "20627", - "20639", - "20641", - "20663", - "20681", - "20693", - "20707" - ], - [ - "20717", - "20719", - "20731", - "20743", - "20747", - "20749", - "20753", - "20759", - "20771", - "20773" - ], - [ - "20789", - "20807", - "20809", - "20849", - "20857", - "20873", - "20879", - "20887", - "20897", - "20899" - ], - [ - "20903", - "20921", - "20929", - "20939", - "20947", - "20959", - "20963", - "20981", - "20983", - "21001" - ], - [ - "21011", - "21013", - "21017", - "21019", - "21023", - "21031", - "21059", - "21061", - "21067", - "21089" - ], - [ - "21101", - "21107", - "21121", - "21139", - "21143", - "21149", - "21157", - "21163", - "21169", - "21179" - ], - [ - "21187", - "21191", - "21193", - "21211", - "21221", - "21227", - "21247", - "21269", - "21277", - "21283" - ], - [ - "21313", - "21317", - "21319", - "21323", - "21341", - "21347", - "21377", - "21379", - "21383", - "21391" - ], - [ - "21397", - "21401", - "21407", - "21419", - "21433", - "21467", - "21481", - "21487", - "21491", - "21493" - ], - [ - "21499", - "21503", - "21517", - "21521", - "21523", - "21529", - "21557", - "21559", - "21563", - "21569" - ], - [ - "21577", - "21587", - "21589", - "21599", - "21601", - "21611", - "21613", - "21617", - "21647", - "21649" - ], - [ - "21661", - "21673", - "21683", - "21701", - "21713", - "21727", - "21737", - "21739", - "21751", - "21757" - ], - [ - "21767", - "21773", - "21787", - "21799", - "21803", - "21817", - "21821", - "21839", - "21841", - "21851" - ], - [ - "21859", - "21863", - "21871", - "21881", - "21893", - "21911", - "21929", - "21937", - "21943", - "21961" - ], - [ - "21977", - "21991", - "21997", - "22003", - "22013", - "22027", - "22031", - "22037", - "22039", - "22051" - ], - [ - "22063", - "22067", - "22073", - "22079", - "22091", - "22093", - "22109", - "22111", - "22123", - "22129" - ], - [ - "22133", - "22147", - "22153", - "22157", - "22159", - "22171", - "22189", - "22193", - "22229", - "22247" - ], - [ - "22259", - "22271", - "22273", - "22277", - "22279", - "22283", - "22291", - "22303", - "22307", - "22343" - ], - [ - "22349", - "22367", - "22369", - "22381", - "22391", - "22397", - "22409", - "22433", - "22441", - "22447" - ], - [ - "22453", - "22469", - "22481", - "22483", - "22501", - "22511", - "22531", - "22541", - "22543", - "22549" - ], - [ - "22567", - "22571", - "22573", - "22613", - "22619", - "22621", - "22637", - "22639", - "22643", - "22651" - ], - [ - "22669", - "22679", - "22691", - "22697", - "22699", - "22709", - "22717", - "22721", - "22727", - "22739" - ], - [ - "22741", - "22751", - "22769", - "22777", - "22783", - "22787", - "22807", - "22811", - "22817", - "22853" - ], - [ - "22859", - "22861", - "22871", - "22877", - "22901", - "22907", - "22921", - "22937", - "22943", - "22961" - ], - [ - "22963", - "22973", - "22993", - "23003", - "23011", - "23017", - "23021", - "23027", - "23029", - "23039" - ], - [ - "23041", - "23053", - "23057", - "23059", - "23063", - "23071", - "23081", - "23087", - "23099", - "23117" - ], - [ - "23131", - "23143", - "23159", - "23167", - "23173", - "23189", - "23197", - "23201", - "23203", - "23209" - ], - [ - "23227", - "23251", - "23269", - "23279", - "23291", - "23293", - "23297", - "23311", - "23321", - "23327" - ], - [ - "23333", - "23339", - "23357", - "23369", - "23371", - "23399", - "23417", - "23431", - "23447", - "23459" - ], - [ - "23473", - "23497", - "23509", - "23531", - "23537", - "23539", - "23549", - "23557", - "23561", - "23563" - ], - [ - "23567", - "23581", - "23593", - "23599", - "23603", - "23609", - "23623", - "23627", - "23629", - "23633" - ], - [ - "23663", - "23669", - "23671", - "23677", - "23687", - "23689", - "23719", - "23741", - "23743", - "23747" - ], - [ - "23753", - "23761", - "23767", - "23773", - "23789", - "23801", - "23813", - "23819", - "23827", - "23831" - ], - [ - "23833", - "23857", - "23869", - "23873", - "23879", - "23887", - "23893", - "23899", - "23909", - "23911" - ], - [ - "23917", - "23929", - "23957", - "23971", - "23977", - "23981", - "23993", - "24001", - "24007", - "24019" - ], - [ - "24023", - "24029", - "24043", - "24049", - "24061", - "24071", - "24077", - "24083", - "24091", - "24097" - ], - [ - "24103", - "24107", - "24109", - "24113", - "24121", - "24133", - "24137", - "24151", - "24169", - "24179" - ], - [ - "24181", - "24197", - "24203", - "24223", - "24229", - "24239", - "24247", - "24251", - "24281", - "24317" - ], - [ - "24329", - "24337", - "24359", - "24371", - "24373", - "24379", - "24391", - "24407", - "24413", - "24419" - ], - [ - "24421", - "24439", - "24443", - "24469", - "24473", - "24481", - "24499", - "24509", - "24517", - "24527" - ], - [ - "24533", - "24547", - "24551", - "24571", - "24593", - "24611", - "24623", - "24631", - "24659", - "24671" - ], - [ - "24677", - "24683", - "24691", - "24697", - "24709", - "24733", - "24749", - "24763", - "24767", - "24781" - ], - [ - "24793", - "24799", - "24809", - "24821", - "24841", - "24847", - "24851", - "24859", - "24877", - "24889" - ], - [ - "24907", - "24917", - "24919", - "24923", - "24943", - "24953", - "24967", - "24971", - "24977", - "24979" - ], - [ - "24989", - "25013", - "25031", - "25033", - "25037", - "25057", - "25073", - "25087", - "25097", - "25111" - ], - [ - "25117", - "25121", - "25127", - "25147", - "25153", - "25163", - "25169", - "25171", - "25183", - "25189" - ], - [ - "25219", - "25229", - "25237", - "25243", - "25247", - "25253", - "25261", - "25301", - "25303", - "25307" - ], - [ - "25309", - "25321", - "25339", - "25343", - "25349", - "25357", - "25367", - "25373", - "25391", - "25409" - ], - [ - "25411", - "25423", - "25439", - "25447", - "25453", - "25457", - "25463", - "25469", - "25471", - "25523" - ], - [ - "25537", - "25541", - "25561", - "25577", - "25579", - "25583", - "25589", - "25601", - "25603", - "25609" - ], - [ - "25621", - "25633", - "25639", - "25643", - "25657", - "25667", - "25673", - "25679", - "25693", - "25703" - ], - [ - "25717", - "25733", - "25741", - "25747", - "25759", - "25763", - "25771", - "25793", - "25799", - "25801" - ], - [ - "25819", - "25841", - "25847", - "25849", - "25867", - "25873", - "25889", - "25903", - "25913", - "25919" - ], - [ - "25931", - "25933", - "25939", - "25943", - "25951", - "25969", - "25981", - "25997", - "25999", - "26003" - ], - [ - "26017", - "26021", - "26029", - "26041", - "26053", - "26083", - "26099", - "26107", - "26111", - "26113" - ], - [ - "26119", - "26141", - "26153", - "26161", - "26171", - "26177", - "26183", - "26189", - "26203", - "26209" - ], - [ - "26227", - "26237", - "26249", - "26251", - "26261", - "26263", - "26267", - "26293", - "26297", - "26309" - ], - [ - "26317", - "26321", - "26339", - "26347", - "26357", - "26371", - "26387", - "26393", - "26399", - "26407" - ], - [ - "26417", - "26423", - "26431", - "26437", - "26449", - "26459", - "26479", - "26489", - "26497", - "26501" - ], - [ - "26513", - "26539", - "26557", - "26561", - "26573", - "26591", - "26597", - "26627", - "26633", - "26641" - ], - [ - "26647", - "26669", - "26681", - "26683", - "26687", - "26693", - "26699", - "26701", - "26711", - "26713" - ], - [ - "26717", - "26723", - "26729", - "26731", - "26737", - "26759", - "26777", - "26783", - "26801", - "26813" - ], - [ - "26821", - "26833", - "26839", - "26849", - "26861", - "26863", - "26879", - "26881", - "26891", - "26893" - ], - [ - "26903", - "26921", - "26927", - "26947", - "26951", - "26953", - "26959", - "26981", - "26987", - "26993" - ], - [ - "27011", - "27017", - "27031", - "27043", - "27059", - "27061", - "27067", - "27073", - "27077", - "27091" - ], - [ - "27103", - "27107", - "27109", - "27127", - "27143", - "27179", - "27191", - "27197", - "27211", - "27239" - ], - [ - "27241", - "27253", - "27259", - "27271", - "27277", - "27281", - "27283", - "27299", - "27329", - "27337" - ], - [ - "27361", - "27367", - "27397", - "27407", - "27409", - "27427", - "27431", - "27437", - "27449", - "27457" - ], - [ - "27479", - "27481", - "27487", - "27509", - "27527", - "27529", - "27539", - "27541", - "27551", - "27581" - ], - [ - "27583", - "27611", - "27617", - "27631", - "27647", - "27653", - "27673", - "27689", - "27691", - "27697" - ], - [ - "27701", - "27733", - "27737", - "27739", - "27743", - "27749", - "27751", - "27763", - "27767", - "27773" - ], - [ - "27779", - "27791", - "27793", - "27799", - "27803", - "27809", - "27817", - "27823", - "27827", - "27847" - ], - [ - "27851", - "27883", - "27893", - "27901", - "27917", - "27919", - "27941", - "27943", - "27947", - "27953" - ], - [ - "27961", - "27967", - "27983", - "27997", - "28001", - "28019", - "28027", - "28031", - "28051", - "28057" - ], - [ - "28069", - "28081", - "28087", - "28097", - "28099", - "28109", - "28111", - "28123", - "28151", - "28163" - ], - [ - "28181", - "28183", - "28201", - "28211", - "28219", - "28229", - "28277", - "28279", - "28283", - "28289" - ], - [ - "28297", - "28307", - "28309", - "28319", - "28349", - "28351", - "28387", - "28393", - "28403", - "28409" - ], - [ - "28411", - "28429", - "28433", - "28439", - "28447", - "28463", - "28477", - "28493", - "28499", - "28513" - ], - [ - "28517", - "28537", - "28541", - "28547", - "28549", - "28559", - "28571", - "28573", - "28579", - "28591" - ], - [ - "28597", - "28603", - "28607", - "28619", - "28621", - "28627", - "28631", - "28643", - "28649", - "28657" - ], - [ - "28661", - "28663", - "28669", - "28687", - "28697", - "28703", - "28711", - "28723", - "28729", - "28751" - ], - [ - "28753", - "28759", - "28771", - "28789", - "28793", - "28807", - "28813", - "28817", - "28837", - "28843" - ], - [ - "28859", - "28867", - "28871", - "28879", - "28901", - "28909", - "28921", - "28927", - "28933", - "28949" - ], - [ - "28961", - "28979", - "29009", - "29017", - "29021", - "29023", - "29027", - "29033", - "29059", - "29063" - ], - [ - "29077", - "29101", - "29123", - "29129", - "29131", - "29137", - "29147", - "29153", - "29167", - "29173" - ], - [ - "29179", - "29191", - "29201", - "29207", - "29209", - "29221", - "29231", - "29243", - "29251", - "29269" - ], - [ - "29287", - "29297", - "29303", - "29311", - "29327", - "29333", - "29339", - "29347", - "29363", - "29383" - ], - [ - "29387", - "29389", - "29399", - "29401", - "29411", - "29423", - "29429", - "29437", - "29443", - "29453" - ], - [ - "29473", - "29483", - "29501", - "29527", - "29531", - "29537", - "29567", - "29569", - "29573", - "29581" - ], - [ - "29587", - "29599", - "29611", - "29629", - "29633", - "29641", - "29663", - "29669", - "29671", - "29683" - ], - [ - "29717", - "29723", - "29741", - "29753", - "29759", - "29761", - "29789", - "29803", - "29819", - "29833" - ], - [ - "29837", - "29851", - "29863", - "29867", - "29873", - "29879", - "29881", - "29917", - "29921", - "29927" - ], - [ - "29947", - "29959", - "29983", - "29989", - "30011", - "30013", - "30029", - "30047", - "30059", - "30071" - ], - [ - "30089", - "30091", - "30097", - "30103", - "30109", - "30113", - "30119", - "30133", - "30137", - "30139" - ], - [ - "30161", - "30169", - "30181", - "30187", - "30197", - "30203", - "30211", - "30223", - "30241", - "30253" - ], - [ - "30259", - "30269", - "30271", - "30293", - "30307", - "30313", - "30319", - "30323", - "30341", - "30347" - ], - [ - "30367", - "30389", - "30391", - "30403", - "30427", - "30431", - "30449", - "30467", - "30469", - "30491" - ], - [ - "30493", - "30497", - "30509", - "30517", - "30529", - "30539", - "30553", - "30557", - "30559", - "30577" - ], - [ - "30593", - "30631", - "30637", - "30643", - "30649", - "30661", - "30671", - "30677", - "30689", - "30697" - ], - [ - "30703", - "30707", - "30713", - "30727", - "30757", - "30763", - "30773", - "30781", - "30803", - "30809" - ], - [ - "30817", - "30829", - "30839", - "30841", - "30851", - "30853", - "30859", - "30869", - "30871", - "30881" - ], - [ - "30893", - "30911", - "30931", - "30937", - "30941", - "30949", - "30971", - "30977", - "30983", - "31013" - ], - [ - "31019", - "31033", - "31039", - "31051", - "31063", - "31069", - "31079", - "31081", - "31091", - "31121" - ], - [ - "31123", - "31139", - "31147", - "31151", - "31153", - "31159", - "31177", - "31181", - "31183", - "31189" - ], - [ - "31193", - "31219", - "31223", - "31231", - "31237", - "31247", - "31249", - "31253", - "31259", - "31267" - ], - [ - "31271", - "31277", - "31307", - "31319", - "31321", - "31327", - "31333", - "31337", - "31357", - "31379" - ], - [ - "31387", - "31391", - "31393", - "31397", - "31469", - "31477", - "31481", - "31489", - "31511", - "31513" - ], - [ - "31517", - "31531", - "31541", - "31543", - "31547", - "31567", - "31573", - "31583", - "31601", - "31607" - ], - [ - "31627", - "31643", - "31649", - "31657", - "31663", - "31667", - "31687", - "31699", - "31721", - "31723" - ], - [ - "31727", - "31729", - "31741", - "31751", - "31769", - "31771", - "31793", - "31799", - "31817", - "31847" - ], - [ - "31849", - "31859", - "31873", - "31883", - "31891", - "31907", - "31957", - "31963", - "31973", - "31981" - ], - [ - "31991", - "32003", - "32009", - "32027", - "32029", - "32051", - "32057", - "32059", - "32063", - "32069" - ], - [ - "32077", - "32083", - "32089", - "32099", - "32117", - "32119", - "32141", - "32143", - "32159", - "32173" - ], - [ - "32183", - "32189", - "32191", - "32203", - "32213", - "32233", - "32237", - "32251", - "32257", - "32261" - ], - [ - "32297", - "32299", - "32303", - "32309", - "32321", - "32323", - "32327", - "32341", - "32353", - "32359" - ], - [ - "32363", - "32369", - "32371", - "32377", - "32381", - "32401", - "32411", - "32413", - "32423", - "32429" - ], - [ - "32441", - "32443", - "32467", - "32479", - "32491", - "32497", - "32503", - "32507", - "32531", - "32533" - ], - [ - "32537", - "32561", - "32563", - "32569", - "32573", - "32579", - "32587", - "32603", - "32609", - "32611" - ], - [ - "32621", - "32633", - "32647", - "32653", - "32687", - "32693", - "32707", - "32713", - "32717", - "32719" - ], - [ - "32749", - "32771", - "32779", - "32783", - "32789", - "32797", - "32801", - "32803", - "32831", - "32833" - ], - [ - "32839", - "32843", - "32869", - "32887", - "32909", - "32911", - "32917", - "32933", - "32939", - "32941" - ], - [ - "32957", - "32969", - "32971", - "32983", - "32987", - "32993", - "32999", - "33013", - "33023", - "33029" - ], - [ - "33037", - "33049", - "33053", - "33071", - "33073", - "33083", - "33091", - "33107", - "33113", - "33119" - ], - [ - "33149", - "33151", - "33161", - "33179", - "33181", - "33191", - "33199", - "33203", - "33211", - "33223" - ], - [ - "33247", - "33287", - "33289", - "33301", - "33311", - "33317", - "33329", - "33331", - "33343", - "33347" - ], - [ - "33349", - "33353", - "33359", - "33377", - "33391", - "33403", - "33409", - "33413", - "33427", - "33457" - ], - [ - "33461", - "33469", - "33479", - "33487", - "33493", - "33503", - "33521", - "33529", - "33533", - "33547" - ], - [ - "33563", - "33569", - "33577", - "33581", - "33587", - "33589", - "33599", - "33601", - "33613", - "33617" - ], - [ - "33619", - "33623", - "33629", - "33637", - "33641", - "33647", - "33679", - "33703", - "33713", - "33721" - ], - [ - "33739", - "33749", - "33751", - "33757", - "33767", - "33769", - "33773", - "33791", - "33797", - "33809" - ], - [ - "33811", - "33827", - "33829", - "33851", - "33857", - "33863", - "33871", - "33889", - "33893", - "33911" - ], - [ - "33923", - "33931", - "33937", - "33941", - "33961", - "33967", - "33997", - "34019", - "34031", - "34033" - ], - [ - "34039", - "34057", - "34061", - "34123", - "34127", - "34129", - "34141", - "34147", - "34157", - "34159" - ], - [ - "34171", - "34183", - "34211", - "34213", - "34217", - "34231", - "34253", - "34259", - "34261", - "34267" - ], - [ - "34273", - "34283", - "34297", - "34301", - "34303", - "34313", - "34319", - "34327", - "34337", - "34351" - ], - [ - "34361", - "34367", - "34369", - "34381", - "34403", - "34421", - "34429", - "34439", - "34457", - "34469" - ], - [ - "34471", - "34483", - "34487", - "34499", - "34501", - "34511", - "34513", - "34519", - "34537", - "34543" - ], - [ - "34549", - "34583", - "34589", - "34591", - "34603", - "34607", - "34613", - "34631", - "34649", - "34651" - ], - [ - "34667", - "34673", - "34679", - "34687", - "34693", - "34703", - "34721", - "34729", - "34739", - "34747" - ], - [ - "34757", - "34759", - "34763", - "34781", - "34807", - "34819", - "34841", - "34843", - "34847", - "34849" - ], - [ - "34871", - "34877", - "34883", - "34897", - "34913", - "34919", - "34939", - "34949", - "34961", - "34963" - ], - [ - "34981", - "35023", - "35027", - "35051", - "35053", - "35059", - "35069", - "35081", - "35083", - "35089" - ], - [ - "35099", - "35107", - "35111", - "35117", - "35129", - "35141", - "35149", - "35153", - "35159", - "35171" - ], - [ - "35201", - "35221", - "35227", - "35251", - "35257", - "35267", - "35279", - "35281", - "35291", - "35311" - ], - [ - "35317", - "35323", - "35327", - "35339", - "35353", - "35363", - "35381", - "35393", - "35401", - "35407" - ], - [ - "35419", - "35423", - "35437", - "35447", - "35449", - "35461", - "35491", - "35507", - "35509", - "35521" - ], - [ - "35527", - "35531", - "35533", - "35537", - "35543", - "35569", - "35573", - "35591", - "35593", - "35597" - ], - [ - "35603", - "35617", - "35671", - "35677", - "35729", - "35731", - "35747", - "35753", - "35759", - "35771" - ], - [ - "35797", - "35801", - "35803", - "35809", - "35831", - "35837", - "35839", - "35851", - "35863", - "35869" - ], - [ - "35879", - "35897", - "35899", - "35911", - "35923", - "35933", - "35951", - "35963", - "35969", - "35977" - ], - [ - "35983", - "35993", - "35999", - "36007", - "36011", - "36013", - "36017", - "36037", - "36061", - "36067" - ], - [ - "36073", - "36083", - "36097", - "36107", - "36109", - "36131", - "36137", - "36151", - "36161", - "36187" - ], - [ - "36191", - "36209", - "36217", - "36229", - "36241", - "36251", - "36263", - "36269", - "36277", - "36293" - ], - [ - "36299", - "36307", - "36313", - "36319", - "36341", - "36343", - "36353", - "36373", - "36383", - "36389" - ], - [ - "36433", - "36451", - "36457", - "36467", - "36469", - "36473", - "36479", - "36493", - "36497", - "36523" - ], - [ - "36527", - "36529", - "36541", - "36551", - "36559", - "36563", - "36571", - "36583", - "36587", - "36599" - ], - [ - "36607", - "36629", - "36637", - "36643", - "36653", - "36671", - "36677", - "36683", - "36691", - "36697" - ], - [ - "36709", - "36713", - "36721", - "36739", - "36749", - "36761", - "36767", - "36779", - "36781", - "36787" - ], - [ - "36791", - "36793", - "36809", - "36821", - "36833", - "36847", - "36857", - "36871", - "36877", - "36887" - ], - [ - "36899", - "36901", - "36913", - "36919", - "36923", - "36929", - "36931", - "36943", - "36947", - "36973" - ], - [ - "36979", - "36997", - "37003", - "37013", - "37019", - "37021", - "37039", - "37049", - "37057", - "37061" - ], - [ - "37087", - "37097", - "37117", - "37123", - "37139", - "37159", - "37171", - "37181", - "37189", - "37199" - ], - [ - "37201", - "37217", - "37223", - "37243", - "37253", - "37273", - "37277", - "37307", - "37309", - "37313" - ], - [ - "37321", - "37337", - "37339", - "37357", - "37361", - "37363", - "37369", - "37379", - "37397", - "37409" - ], - [ - "37423", - "37441", - "37447", - "37463", - "37483", - "37489", - "37493", - "37501", - "37507", - "37511" - ], - [ - "37517", - "37529", - "37537", - "37547", - "37549", - "37561", - "37567", - "37571", - "37573", - "37579" - ], - [ - "37589", - "37591", - "37607", - "37619", - "37633", - "37643", - "37649", - "37657", - "37663", - "37691" - ], - [ - "37693", - "37699", - "37717", - "37747", - "37781", - "37783", - "37799", - "37811", - "37813", - "37831" - ], - [ - "37847", - "37853", - "37861", - "37871", - "37879", - "37889", - "37897", - "37907", - "37951", - "37957" - ], - ["37963", "37967", "37987", "37991", "37993", ""]]}}]} + [" 2", " 3", " 5", " 7", " 11", " 13", " 17", " 19", " 23", " 29"], + [" 31", " 37", " 41", " 43", " 47", " 53", " 59", " 61", " 67", " 71"], + [" 73", " 79", " 83", " 89", " 97", " 101", " 103", " 107", " 109", " 113"], + [" 127", " 131", " 137", " 139", " 149", " 151", " 157", " 163", " 167", " 173"], + [" 179", " 181", " 191", " 193", " 197", " 199", " 211", " 223", " 227", " 229"], + [" 233", " 239", " 241", " 251", " 257", " 263", " 269", " 271", " 277", " 281"], + [" 283", " 293", " 307", " 311", " 313", " 317", " 331", " 337", " 347", " 349"], + [" 353", " 359", " 367", " 373", " 379", " 383", " 389", " 397", " 401", " 409"], + [" 419", " 421", " 431", " 433", " 439", " 443", " 449", " 457", " 461", " 463"], + [" 467", " 479", " 487", " 491", " 499", " 503", " 509", " 521", " 523", " 541"], + [" 547", " 557", " 563", " 569", " 571", " 577", " 587", " 593", " 599", " 601"], + [" 607", " 613", " 617", " 619", " 631", " 641", " 643", " 647", " 653", " 659"], + [" 661", " 673", " 677", " 683", " 691", " 701", " 709", " 719", " 727", " 733"], + [" 739", " 743", " 751", " 757", " 761", " 769", " 773", " 787", " 797", " 809"], + [" 811", " 821", " 823", " 827", " 829", " 839", " 853", " 857", " 859", " 863"], + [" 877", " 881", " 883", " 887", " 907", " 911", " 919", " 929", " 937", " 941"], + [" 947", " 953", " 967", " 971", " 977", " 983", " 991", " 997", " 1009", " 1013"], + [" 1019", " 1021", " 1031", " 1033", " 1039", " 1049", " 1051", " 1061", " 1063", " 1069"], + [" 1087", " 1091", " 1093", " 1097", " 1103", " 1109", " 1117", " 1123", " 1129", " 1151"], + [" 1153", " 1163", " 1171", " 1181", " 1187", " 1193", " 1201", " 1213", " 1217", " 1223"], + [" 1229", " 1231", " 1237", " 1249", " 1259", " 1277", " 1279", " 1283", " 1289", " 1291"], + [" 1297", " 1301", " 1303", " 1307", " 1319", " 1321", " 1327", " 1361", " 1367", " 1373"], + [" 1381", " 1399", " 1409", " 1423", " 1427", " 1429", " 1433", " 1439", " 1447", " 1451"], + [" 1453", " 1459", " 1471", " 1481", " 1483", " 1487", " 1489", " 1493", " 1499", " 1511"], + [" 1523", " 1531", " 1543", " 1549", " 1553", " 1559", " 1567", " 1571", " 1579", " 1583"], + [" 1597", " 1601", " 1607", " 1609", " 1613", " 1619", " 1621", " 1627", " 1637", " 1657"], + [" 1663", " 1667", " 1669", " 1693", " 1697", " 1699", " 1709", " 1721", " 1723", " 1733"], + [" 1741", " 1747", " 1753", " 1759", " 1777", " 1783", " 1787", " 1789", " 1801", " 1811"], + [" 1823", " 1831", " 1847", " 1861", " 1867", " 1871", " 1873", " 1877", " 1879", " 1889"], + [" 1901", " 1907", " 1913", " 1931", " 1933", " 1949", " 1951", " 1973", " 1979", " 1987"], + [" 1993", " 1997", " 1999", " 2003", " 2011", " 2017", " 2027", " 2029", " 2039", " 2053"], + [" 2063", " 2069", " 2081", " 2083", " 2087", " 2089", " 2099", " 2111", " 2113", " 2129"], + [" 2131", " 2137", " 2141", " 2143", " 2153", " 2161", " 2179", " 2203", " 2207", " 2213"], + [" 2221", " 2237", " 2239", " 2243", " 2251", " 2267", " 2269", " 2273", " 2281", " 2287"], + [" 2293", " 2297", " 2309", " 2311", " 2333", " 2339", " 2341", " 2347", " 2351", " 2357"], + [" 2371", " 2377", " 2381", " 2383", " 2389", " 2393", " 2399", " 2411", " 2417", " 2423"], + [" 2437", " 2441", " 2447", " 2459", " 2467", " 2473", " 2477", " 2503", " 2521", " 2531"], + [" 2539", " 2543", " 2549", " 2551", " 2557", " 2579", " 2591", " 2593", " 2609", " 2617"], + [" 2621", " 2633", " 2647", " 2657", " 2659", " 2663", " 2671", " 2677", " 2683", " 2687"], + [" 2689", " 2693", " 2699", " 2707", " 2711", " 2713", " 2719", " 2729", " 2731", " 2741"], + [" 2749", " 2753", " 2767", " 2777", " 2789", " 2791", " 2797", " 2801", " 2803", " 2819"], + [" 2833", " 2837", " 2843", " 2851", " 2857", " 2861", " 2879", " 2887", " 2897", " 2903"], + [" 2909", " 2917", " 2927", " 2939", " 2953", " 2957", " 2963", " 2969", " 2971", " 2999"], + [" 3001", " 3011", " 3019", " 3023", " 3037", " 3041", " 3049", " 3061", " 3067", " 3079"], + [" 3083", " 3089", " 3109", " 3119", " 3121", " 3137", " 3163", " 3167", " 3169", " 3181"], + [" 3187", " 3191", " 3203", " 3209", " 3217", " 3221", " 3229", " 3251", " 3253", " 3257"], + [" 3259", " 3271", " 3299", " 3301", " 3307", " 3313", " 3319", " 3323", " 3329", " 3331"], + [" 3343", " 3347", " 3359", " 3361", " 3371", " 3373", " 3389", " 3391", " 3407", " 3413"], + [" 3433", " 3449", " 3457", " 3461", " 3463", " 3467", " 3469", " 3491", " 3499", " 3511"], + [" 3517", " 3527", " 3529", " 3533", " 3539", " 3541", " 3547", " 3557", " 3559", " 3571"], + [" 3581", " 3583", " 3593", " 3607", " 3613", " 3617", " 3623", " 3631", " 3637", " 3643"], + [" 3659", " 3671", " 3673", " 3677", " 3691", " 3697", " 3701", " 3709", " 3719", " 3727"], + [" 3733", " 3739", " 3761", " 3767", " 3769", " 3779", " 3793", " 3797", " 3803", " 3821"], + [" 3823", " 3833", " 3847", " 3851", " 3853", " 3863", " 3877", " 3881", " 3889", " 3907"], + [" 3911", " 3917", " 3919", " 3923", " 3929", " 3931", " 3943", " 3947", " 3967", " 3989"], + [" 4001", " 4003", " 4007", " 4013", " 4019", " 4021", " 4027", " 4049", " 4051", " 4057"], + [" 4073", " 4079", " 4091", " 4093", " 4099", " 4111", " 4127", " 4129", " 4133", " 4139"], + [" 4153", " 4157", " 4159", " 4177", " 4201", " 4211", " 4217", " 4219", " 4229", " 4231"], + [" 4241", " 4243", " 4253", " 4259", " 4261", " 4271", " 4273", " 4283", " 4289", " 4297"], + [" 4327", " 4337", " 4339", " 4349", " 4357", " 4363", " 4373", " 4391", " 4397", " 4409"], + [" 4421", " 4423", " 4441", " 4447", " 4451", " 4457", " 4463", " 4481", " 4483", " 4493"], + [" 4507", " 4513", " 4517", " 4519", " 4523", " 4547", " 4549", " 4561", " 4567", " 4583"], + [" 4591", " 4597", " 4603", " 4621", " 4637", " 4639", " 4643", " 4649", " 4651", " 4657"], + [" 4663", " 4673", " 4679", " 4691", " 4703", " 4721", " 4723", " 4729", " 4733", " 4751"], + [" 4759", " 4783", " 4787", " 4789", " 4793", " 4799", " 4801", " 4813", " 4817", " 4831"], + [" 4861", " 4871", " 4877", " 4889", " 4903", " 4909", " 4919", " 4931", " 4933", " 4937"], + [" 4943", " 4951", " 4957", " 4967", " 4969", " 4973", " 4987", " 4993", " 4999", " 5003"], + [" 5009", " 5011", " 5021", " 5023", " 5039", " 5051", " 5059", " 5077", " 5081", " 5087"], + [" 5099", " 5101", " 5107", " 5113", " 5119", " 5147", " 5153", " 5167", " 5171", " 5179"], + [" 5189", " 5197", " 5209", " 5227", " 5231", " 5233", " 5237", " 5261", " 5273", " 5279"], + [" 5281", " 5297", " 5303", " 5309", " 5323", " 5333", " 5347", " 5351", " 5381", " 5387"], + [" 5393", " 5399", " 5407", " 5413", " 5417", " 5419", " 5431", " 5437", " 5441", " 5443"], + [" 5449", " 5471", " 5477", " 5479", " 5483", " 5501", " 5503", " 5507", " 5519", " 5521"], + [" 5527", " 5531", " 5557", " 5563", " 5569", " 5573", " 5581", " 5591", " 5623", " 5639"], + [" 5641", " 5647", " 5651", " 5653", " 5657", " 5659", " 5669", " 5683", " 5689", " 5693"], + [" 5701", " 5711", " 5717", " 5737", " 5741", " 5743", " 5749", " 5779", " 5783", " 5791"], + [" 5801", " 5807", " 5813", " 5821", " 5827", " 5839", " 5843", " 5849", " 5851", " 5857"], + [" 5861", " 5867", " 5869", " 5879", " 5881", " 5897", " 5903", " 5923", " 5927", " 5939"], + [" 5953", " 5981", " 5987", " 6007", " 6011", " 6029", " 6037", " 6043", " 6047", " 6053"], + [" 6067", " 6073", " 6079", " 6089", " 6091", " 6101", " 6113", " 6121", " 6131", " 6133"], + [" 6143", " 6151", " 6163", " 6173", " 6197", " 6199", " 6203", " 6211", " 6217", " 6221"], + [" 6229", " 6247", " 6257", " 6263", " 6269", " 6271", " 6277", " 6287", " 6299", " 6301"], + [" 6311", " 6317", " 6323", " 6329", " 6337", " 6343", " 6353", " 6359", " 6361", " 6367"], + [" 6373", " 6379", " 6389", " 6397", " 6421", " 6427", " 6449", " 6451", " 6469", " 6473"], + [" 6481", " 6491", " 6521", " 6529", " 6547", " 6551", " 6553", " 6563", " 6569", " 6571"], + [" 6577", " 6581", " 6599", " 6607", " 6619", " 6637", " 6653", " 6659", " 6661", " 6673"], + [" 6679", " 6689", " 6691", " 6701", " 6703", " 6709", " 6719", " 6733", " 6737", " 6761"], + [" 6763", " 6779", " 6781", " 6791", " 6793", " 6803", " 6823", " 6827", " 6829", " 6833"], + [" 6841", " 6857", " 6863", " 6869", " 6871", " 6883", " 6899", " 6907", " 6911", " 6917"], + [" 6947", " 6949", " 6959", " 6961", " 6967", " 6971", " 6977", " 6983", " 6991", " 6997"], + [" 7001", " 7013", " 7019", " 7027", " 7039", " 7043", " 7057", " 7069", " 7079", " 7103"], + [" 7109", " 7121", " 7127", " 7129", " 7151", " 7159", " 7177", " 7187", " 7193", " 7207"], + [" 7211", " 7213", " 7219", " 7229", " 7237", " 7243", " 7247", " 7253", " 7283", " 7297"], + [" 7307", " 7309", " 7321", " 7331", " 7333", " 7349", " 7351", " 7369", " 7393", " 7411"], + [" 7417", " 7433", " 7451", " 7457", " 7459", " 7477", " 7481", " 7487", " 7489", " 7499"], + [" 7507", " 7517", " 7523", " 7529", " 7537", " 7541", " 7547", " 7549", " 7559", " 7561"], + [" 7573", " 7577", " 7583", " 7589", " 7591", " 7603", " 7607", " 7621", " 7639", " 7643"], + [" 7649", " 7669", " 7673", " 7681", " 7687", " 7691", " 7699", " 7703", " 7717", " 7723"], + [" 7727", " 7741", " 7753", " 7757", " 7759", " 7789", " 7793", " 7817", " 7823", " 7829"], + [" 7841", " 7853", " 7867", " 7873", " 7877", " 7879", " 7883", " 7901", " 7907", " 7919"], + [" 7927", " 7933", " 7937", " 7949", " 7951", " 7963", " 7993", " 8009", " 8011", " 8017"], + [" 8039", " 8053", " 8059", " 8069", " 8081", " 8087", " 8089", " 8093", " 8101", " 8111"], + [" 8117", " 8123", " 8147", " 8161", " 8167", " 8171", " 8179", " 8191", " 8209", " 8219"], + [" 8221", " 8231", " 8233", " 8237", " 8243", " 8263", " 8269", " 8273", " 8287", " 8291"], + [" 8293", " 8297", " 8311", " 8317", " 8329", " 8353", " 8363", " 8369", " 8377", " 8387"], + [" 8389", " 8419", " 8423", " 8429", " 8431", " 8443", " 8447", " 8461", " 8467", " 8501"], + [" 8513", " 8521", " 8527", " 8537", " 8539", " 8543", " 8563", " 8573", " 8581", " 8597"], + [" 8599", " 8609", " 8623", " 8627", " 8629", " 8641", " 8647", " 8663", " 8669", " 8677"], + [" 8681", " 8689", " 8693", " 8699", " 8707", " 8713", " 8719", " 8731", " 8737", " 8741"], + [" 8747", " 8753", " 8761", " 8779", " 8783", " 8803", " 8807", " 8819", " 8821", " 8831"], + [" 8837", " 8839", " 8849", " 8861", " 8863", " 8867", " 8887", " 8893", " 8923", " 8929"], + [" 8933", " 8941", " 8951", " 8963", " 8969", " 8971", " 8999", " 9001", " 9007", " 9011"], + [" 9013", " 9029", " 9041", " 9043", " 9049", " 9059", " 9067", " 9091", " 9103", " 9109"], + [" 9127", " 9133", " 9137", " 9151", " 9157", " 9161", " 9173", " 9181", " 9187", " 9199"], + [" 9203", " 9209", " 9221", " 9227", " 9239", " 9241", " 9257", " 9277", " 9281", " 9283"], + [" 9293", " 9311", " 9319", " 9323", " 9337", " 9341", " 9343", " 9349", " 9371", " 9377"], + [" 9391", " 9397", " 9403", " 9413", " 9419", " 9421", " 9431", " 9433", " 9437", " 9439"], + [" 9461", " 9463", " 9467", " 9473", " 9479", " 9491", " 9497", " 9511", " 9521", " 9533"], + [" 9539", " 9547", " 9551", " 9587", " 9601", " 9613", " 9619", " 9623", " 9629", " 9631"], + [" 9643", " 9649", " 9661", " 9677", " 9679", " 9689", " 9697", " 9719", " 9721", " 9733"], + [" 9739", " 9743", " 9749", " 9767", " 9769", " 9781", " 9787", " 9791", " 9803", " 9811"], + [" 9817", " 9829", " 9833", " 9839", " 9851", " 9857", " 9859", " 9871", " 9883", " 9887"], + [" 9901", " 9907", " 9923", " 9929", " 9931", " 9941", " 9949", " 9967", " 9973", " 10007"], + [" 10009", " 10037", " 10039", " 10061", " 10067", " 10069", " 10079", " 10091", " 10093", " 10099"], + [" 10103", " 10111", " 10133", " 10139", " 10141", " 10151", " 10159", " 10163", " 10169", " 10177"], + [" 10181", " 10193", " 10211", " 10223", " 10243", " 10247", " 10253", " 10259", " 10267", " 10271"], + [" 10273", " 10289", " 10301", " 10303", " 10313", " 10321", " 10331", " 10333", " 10337", " 10343"], + [" 10357", " 10369", " 10391", " 10399", " 10427", " 10429", " 10433", " 10453", " 10457", " 10459"], + [" 10463", " 10477", " 10487", " 10499", " 10501", " 10513", " 10529", " 10531", " 10559", " 10567"], + [" 10589", " 10597", " 10601", " 10607", " 10613", " 10627", " 10631", " 10639", " 10651", " 10657"], + [" 10663", " 10667", " 10687", " 10691", " 10709", " 10711", " 10723", " 10729", " 10733", " 10739"], + [" 10753", " 10771", " 10781", " 10789", " 10799", " 10831", " 10837", " 10847", " 10853", " 10859"], + [" 10861", " 10867", " 10883", " 10889", " 10891", " 10903", " 10909", " 10937", " 10939", " 10949"], + [" 10957", " 10973", " 10979", " 10987", " 10993", " 11003", " 11027", " 11047", " 11057", " 11059"], + [" 11069", " 11071", " 11083", " 11087", " 11093", " 11113", " 11117", " 11119", " 11131", " 11149"], + [" 11159", " 11161", " 11171", " 11173", " 11177", " 11197", " 11213", " 11239", " 11243", " 11251"], + [" 11257", " 11261", " 11273", " 11279", " 11287", " 11299", " 11311", " 11317", " 11321", " 11329"], + [" 11351", " 11353", " 11369", " 11383", " 11393", " 11399", " 11411", " 11423", " 11437", " 11443"], + [" 11447", " 11467", " 11471", " 11483", " 11489", " 11491", " 11497", " 11503", " 11519", " 11527"], + [" 11549", " 11551", " 11579", " 11587", " 11593", " 11597", " 11617", " 11621", " 11633", " 11657"], + [" 11677", " 11681", " 11689", " 11699", " 11701", " 11717", " 11719", " 11731", " 11743", " 11777"], + [" 11779", " 11783", " 11789", " 11801", " 11807", " 11813", " 11821", " 11827", " 11831", " 11833"], + [" 11839", " 11863", " 11867", " 11887", " 11897", " 11903", " 11909", " 11923", " 11927", " 11933"], + [" 11939", " 11941", " 11953", " 11959", " 11969", " 11971", " 11981", " 11987", " 12007", " 12011"], + [" 12037", " 12041", " 12043", " 12049", " 12071", " 12073", " 12097", " 12101", " 12107", " 12109"], + [" 12113", " 12119", " 12143", " 12149", " 12157", " 12161", " 12163", " 12197", " 12203", " 12211"], + [" 12227", " 12239", " 12241", " 12251", " 12253", " 12263", " 12269", " 12277", " 12281", " 12289"], + [" 12301", " 12323", " 12329", " 12343", " 12347", " 12373", " 12377", " 12379", " 12391", " 12401"], + [" 12409", " 12413", " 12421", " 12433", " 12437", " 12451", " 12457", " 12473", " 12479", " 12487"], + [" 12491", " 12497", " 12503", " 12511", " 12517", " 12527", " 12539", " 12541", " 12547", " 12553"], + [" 12569", " 12577", " 12583", " 12589", " 12601", " 12611", " 12613", " 12619", " 12637", " 12641"], + [" 12647", " 12653", " 12659", " 12671", " 12689", " 12697", " 12703", " 12713", " 12721", " 12739"], + [" 12743", " 12757", " 12763", " 12781", " 12791", " 12799", " 12809", " 12821", " 12823", " 12829"], + [" 12841", " 12853", " 12889", " 12893", " 12899", " 12907", " 12911", " 12917", " 12919", " 12923"], + [" 12941", " 12953", " 12959", " 12967", " 12973", " 12979", " 12983", " 13001", " 13003", " 13007"], + [" 13009", " 13033", " 13037", " 13043", " 13049", " 13063", " 13093", " 13099", " 13103", " 13109"], + [" 13121", " 13127", " 13147", " 13151", " 13159", " 13163", " 13171", " 13177", " 13183", " 13187"], + [" 13217", " 13219", " 13229", " 13241", " 13249", " 13259", " 13267", " 13291", " 13297", " 13309"], + [" 13313", " 13327", " 13331", " 13337", " 13339", " 13367", " 13381", " 13397", " 13399", " 13411"], + [" 13417", " 13421", " 13441", " 13451", " 13457", " 13463", " 13469", " 13477", " 13487", " 13499"], + [" 13513", " 13523", " 13537", " 13553", " 13567", " 13577", " 13591", " 13597", " 13613", " 13619"], + [" 13627", " 13633", " 13649", " 13669", " 13679", " 13681", " 13687", " 13691", " 13693", " 13697"], + [" 13709", " 13711", " 13721", " 13723", " 13729", " 13751", " 13757", " 13759", " 13763", " 13781"], + [" 13789", " 13799", " 13807", " 13829", " 13831", " 13841", " 13859", " 13873", " 13877", " 13879"], + [" 13883", " 13901", " 13903", " 13907", " 13913", " 13921", " 13931", " 13933", " 13963", " 13967"], + [" 13997", " 13999", " 14009", " 14011", " 14029", " 14033", " 14051", " 14057", " 14071", " 14081"], + [" 14083", " 14087", " 14107", " 14143", " 14149", " 14153", " 14159", " 14173", " 14177", " 14197"], + [" 14207", " 14221", " 14243", " 14249", " 14251", " 14281", " 14293", " 14303", " 14321", " 14323"], + [" 14327", " 14341", " 14347", " 14369", " 14387", " 14389", " 14401", " 14407", " 14411", " 14419"], + [" 14423", " 14431", " 14437", " 14447", " 14449", " 14461", " 14479", " 14489", " 14503", " 14519"], + [" 14533", " 14537", " 14543", " 14549", " 14551", " 14557", " 14561", " 14563", " 14591", " 14593"], + [" 14621", " 14627", " 14629", " 14633", " 14639", " 14653", " 14657", " 14669", " 14683", " 14699"], + [" 14713", " 14717", " 14723", " 14731", " 14737", " 14741", " 14747", " 14753", " 14759", " 14767"], + [" 14771", " 14779", " 14783", " 14797", " 14813", " 14821", " 14827", " 14831", " 14843", " 14851"], + [" 14867", " 14869", " 14879", " 14887", " 14891", " 14897", " 14923", " 14929", " 14939", " 14947"], + [" 14951", " 14957", " 14969", " 14983", " 15013", " 15017", " 15031", " 15053", " 15061", " 15073"], + [" 15077", " 15083", " 15091", " 15101", " 15107", " 15121", " 15131", " 15137", " 15139", " 15149"], + [" 15161", " 15173", " 15187", " 15193", " 15199", " 15217", " 15227", " 15233", " 15241", " 15259"], + [" 15263", " 15269", " 15271", " 15277", " 15287", " 15289", " 15299", " 15307", " 15313", " 15319"], + [" 15329", " 15331", " 15349", " 15359", " 15361", " 15373", " 15377", " 15383", " 15391", " 15401"], + [" 15413", " 15427", " 15439", " 15443", " 15451", " 15461", " 15467", " 15473", " 15493", " 15497"], + [" 15511", " 15527", " 15541", " 15551", " 15559", " 15569", " 15581", " 15583", " 15601", " 15607"], + [" 15619", " 15629", " 15641", " 15643", " 15647", " 15649", " 15661", " 15667", " 15671", " 15679"], + [" 15683", " 15727", " 15731", " 15733", " 15737", " 15739", " 15749", " 15761", " 15767", " 15773"], + [" 15787", " 15791", " 15797", " 15803", " 15809", " 15817", " 15823", " 15859", " 15877", " 15881"], + [" 15887", " 15889", " 15901", " 15907", " 15913", " 15919", " 15923", " 15937", " 15959", " 15971"], + [" 15973", " 15991", " 16001", " 16007", " 16033", " 16057", " 16061", " 16063", " 16067", " 16069"], + [" 16073", " 16087", " 16091", " 16097", " 16103", " 16111", " 16127", " 16139", " 16141", " 16183"], + [" 16187", " 16189", " 16193", " 16217", " 16223", " 16229", " 16231", " 16249", " 16253", " 16267"], + [" 16273", " 16301", " 16319", " 16333", " 16339", " 16349", " 16361", " 16363", " 16369", " 16381"], + [" 16411", " 16417", " 16421", " 16427", " 16433", " 16447", " 16451", " 16453", " 16477", " 16481"], + [" 16487", " 16493", " 16519", " 16529", " 16547", " 16553", " 16561", " 16567", " 16573", " 16603"], + [" 16607", " 16619", " 16631", " 16633", " 16649", " 16651", " 16657", " 16661", " 16673", " 16691"], + [" 16693", " 16699", " 16703", " 16729", " 16741", " 16747", " 16759", " 16763", " 16787", " 16811"], + [" 16823", " 16829", " 16831", " 16843", " 16871", " 16879", " 16883", " 16889", " 16901", " 16903"], + [" 16921", " 16927", " 16931", " 16937", " 16943", " 16963", " 16979", " 16981", " 16987", " 16993"], + [" 17011", " 17021", " 17027", " 17029", " 17033", " 17041", " 17047", " 17053", " 17077", " 17093"], + [" 17099", " 17107", " 17117", " 17123", " 17137", " 17159", " 17167", " 17183", " 17189", " 17191"], + [" 17203", " 17207", " 17209", " 17231", " 17239", " 17257", " 17291", " 17293", " 17299", " 17317"], + [" 17321", " 17327", " 17333", " 17341", " 17351", " 17359", " 17377", " 17383", " 17387", " 17389"], + [" 17393", " 17401", " 17417", " 17419", " 17431", " 17443", " 17449", " 17467", " 17471", " 17477"], + [" 17483", " 17489", " 17491", " 17497", " 17509", " 17519", " 17539", " 17551", " 17569", " 17573"], + [" 17579", " 17581", " 17597", " 17599", " 17609", " 17623", " 17627", " 17657", " 17659", " 17669"], + [" 17681", " 17683", " 17707", " 17713", " 17729", " 17737", " 17747", " 17749", " 17761", " 17783"], + [" 17789", " 17791", " 17807", " 17827", " 17837", " 17839", " 17851", " 17863", " 17881", " 17891"], + [" 17903", " 17909", " 17911", " 17921", " 17923", " 17929", " 17939", " 17957", " 17959", " 17971"], + [" 17977", " 17981", " 17987", " 17989", " 18013", " 18041", " 18043", " 18047", " 18049", " 18059"], + [" 18061", " 18077", " 18089", " 18097", " 18119", " 18121", " 18127", " 18131", " 18133", " 18143"], + [" 18149", " 18169", " 18181", " 18191", " 18199", " 18211", " 18217", " 18223", " 18229", " 18233"], + [" 18251", " 18253", " 18257", " 18269", " 18287", " 18289", " 18301", " 18307", " 18311", " 18313"], + [" 18329", " 18341", " 18353", " 18367", " 18371", " 18379", " 18397", " 18401", " 18413", " 18427"], + [" 18433", " 18439", " 18443", " 18451", " 18457", " 18461", " 18481", " 18493", " 18503", " 18517"], + [" 18521", " 18523", " 18539", " 18541", " 18553", " 18583", " 18587", " 18593", " 18617", " 18637"], + [" 18661", " 18671", " 18679", " 18691", " 18701", " 18713", " 18719", " 18731", " 18743", " 18749"], + [" 18757", " 18773", " 18787", " 18793", " 18797", " 18803", " 18839", " 18859", " 18869", " 18899"], + [" 18911", " 18913", " 18917", " 18919", " 18947", " 18959", " 18973", " 18979", " 19001", " 19009"], + [" 19013", " 19031", " 19037", " 19051", " 19069", " 19073", " 19079", " 19081", " 19087", " 19121"], + [" 19139", " 19141", " 19157", " 19163", " 19181", " 19183", " 19207", " 19211", " 19213", " 19219"], + [" 19231", " 19237", " 19249", " 19259", " 19267", " 19273", " 19289", " 19301", " 19309", " 19319"], + [" 19333", " 19373", " 19379", " 19381", " 19387", " 19391", " 19403", " 19417", " 19421", " 19423"], + [" 19427", " 19429", " 19433", " 19441", " 19447", " 19457", " 19463", " 19469", " 19471", " 19477"], + [" 19483", " 19501", " 19507", " 19531", " 19541", " 19543", " 19553", " 19559", " 19571", " 19577"], + [" 19583", " 19597", " 19603", " 19609", " 19661", " 19681", " 19687", " 19697", " 19699", " 19709"], + [" 19717", " 19727", " 19739", " 19751", " 19753", " 19759", " 19763", " 19777", " 19793", " 19801"], + [" 19813", " 19819", " 19841", " 19843", " 19853", " 19861", " 19867", " 19889", " 19891", " 19913"], + [" 19919", " 19927", " 19937", " 19949", " 19961", " 19963", " 19973", " 19979", " 19991", " 19993"], + [" 19997", " 20011", " 20021", " 20023", " 20029", " 20047", " 20051", " 20063", " 20071", " 20089"], + [" 20101", " 20107", " 20113", " 20117", " 20123", " 20129", " 20143", " 20147", " 20149", " 20161"], + [" 20173", " 20177", " 20183", " 20201", " 20219", " 20231", " 20233", " 20249", " 20261", " 20269"], + [" 20287", " 20297", " 20323", " 20327", " 20333", " 20341", " 20347", " 20353", " 20357", " 20359"], + [" 20369", " 20389", " 20393", " 20399", " 20407", " 20411", " 20431", " 20441", " 20443", " 20477"], + [" 20479", " 20483", " 20507", " 20509", " 20521", " 20533", " 20543", " 20549", " 20551", " 20563"], + [" 20593", " 20599", " 20611", " 20627", " 20639", " 20641", " 20663", " 20681", " 20693", " 20707"], + [" 20717", " 20719", " 20731", " 20743", " 20747", " 20749", " 20753", " 20759", " 20771", " 20773"], + [" 20789", " 20807", " 20809", " 20849", " 20857", " 20873", " 20879", " 20887", " 20897", " 20899"], + [" 20903", " 20921", " 20929", " 20939", " 20947", " 20959", " 20963", " 20981", " 20983", " 21001"], + [" 21011", " 21013", " 21017", " 21019", " 21023", " 21031", " 21059", " 21061", " 21067", " 21089"], + [" 21101", " 21107", " 21121", " 21139", " 21143", " 21149", " 21157", " 21163", " 21169", " 21179"], + [" 21187", " 21191", " 21193", " 21211", " 21221", " 21227", " 21247", " 21269", " 21277", " 21283"], + [" 21313", " 21317", " 21319", " 21323", " 21341", " 21347", " 21377", " 21379", " 21383", " 21391"], + [" 21397", " 21401", " 21407", " 21419", " 21433", " 21467", " 21481", " 21487", " 21491", " 21493"], + [" 21499", " 21503", " 21517", " 21521", " 21523", " 21529", " 21557", " 21559", " 21563", " 21569"], + [" 21577", " 21587", " 21589", " 21599", " 21601", " 21611", " 21613", " 21617", " 21647", " 21649"], + [" 21661", " 21673", " 21683", " 21701", " 21713", " 21727", " 21737", " 21739", " 21751", " 21757"], + [" 21767", " 21773", " 21787", " 21799", " 21803", " 21817", " 21821", " 21839", " 21841", " 21851"], + [" 21859", " 21863", " 21871", " 21881", " 21893", " 21911", " 21929", " 21937", " 21943", " 21961"], + [" 21977", " 21991", " 21997", " 22003", " 22013", " 22027", " 22031", " 22037", " 22039", " 22051"], + [" 22063", " 22067", " 22073", " 22079", " 22091", " 22093", " 22109", " 22111", " 22123", " 22129"], + [" 22133", " 22147", " 22153", " 22157", " 22159", " 22171", " 22189", " 22193", " 22229", " 22247"], + [" 22259", " 22271", " 22273", " 22277", " 22279", " 22283", " 22291", " 22303", " 22307", " 22343"], + [" 22349", " 22367", " 22369", " 22381", " 22391", " 22397", " 22409", " 22433", " 22441", " 22447"], + [" 22453", " 22469", " 22481", " 22483", " 22501", " 22511", " 22531", " 22541", " 22543", " 22549"], + [" 22567", " 22571", " 22573", " 22613", " 22619", " 22621", " 22637", " 22639", " 22643", " 22651"], + [" 22669", " 22679", " 22691", " 22697", " 22699", " 22709", " 22717", " 22721", " 22727", " 22739"], + [" 22741", " 22751", " 22769", " 22777", " 22783", " 22787", " 22807", " 22811", " 22817", " 22853"], + [" 22859", " 22861", " 22871", " 22877", " 22901", " 22907", " 22921", " 22937", " 22943", " 22961"], + [" 22963", " 22973", " 22993", " 23003", " 23011", " 23017", " 23021", " 23027", " 23029", " 23039"], + [" 23041", " 23053", " 23057", " 23059", " 23063", " 23071", " 23081", " 23087", " 23099", " 23117"], + [" 23131", " 23143", " 23159", " 23167", " 23173", " 23189", " 23197", " 23201", " 23203", " 23209"], + [" 23227", " 23251", " 23269", " 23279", " 23291", " 23293", " 23297", " 23311", " 23321", " 23327"], + [" 23333", " 23339", " 23357", " 23369", " 23371", " 23399", " 23417", " 23431", " 23447", " 23459"], + [" 23473", " 23497", " 23509", " 23531", " 23537", " 23539", " 23549", " 23557", " 23561", " 23563"], + [" 23567", " 23581", " 23593", " 23599", " 23603", " 23609", " 23623", " 23627", " 23629", " 23633"], + [" 23663", " 23669", " 23671", " 23677", " 23687", " 23689", " 23719", " 23741", " 23743", " 23747"], + [" 23753", " 23761", " 23767", " 23773", " 23789", " 23801", " 23813", " 23819", " 23827", " 23831"], + [" 23833", " 23857", " 23869", " 23873", " 23879", " 23887", " 23893", " 23899", " 23909", " 23911"], + [" 23917", " 23929", " 23957", " 23971", " 23977", " 23981", " 23993", " 24001", " 24007", " 24019"], + [" 24023", " 24029", " 24043", " 24049", " 24061", " 24071", " 24077", " 24083", " 24091", " 24097"], + [" 24103", " 24107", " 24109", " 24113", " 24121", " 24133", " 24137", " 24151", " 24169", " 24179"], + [" 24181", " 24197", " 24203", " 24223", " 24229", " 24239", " 24247", " 24251", " 24281", " 24317"], + [" 24329", " 24337", " 24359", " 24371", " 24373", " 24379", " 24391", " 24407", " 24413", " 24419"], + [" 24421", " 24439", " 24443", " 24469", " 24473", " 24481", " 24499", " 24509", " 24517", " 24527"], + [" 24533", " 24547", " 24551", " 24571", " 24593", " 24611", " 24623", " 24631", " 24659", " 24671"], + [" 24677", " 24683", " 24691", " 24697", " 24709", " 24733", " 24749", " 24763", " 24767", " 24781"], + [" 24793", " 24799", " 24809", " 24821", " 24841", " 24847", " 24851", " 24859", " 24877", " 24889"], + [" 24907", " 24917", " 24919", " 24923", " 24943", " 24953", " 24967", " 24971", " 24977", " 24979"], + [" 24989", " 25013", " 25031", " 25033", " 25037", " 25057", " 25073", " 25087", " 25097", " 25111"], + [" 25117", " 25121", " 25127", " 25147", " 25153", " 25163", " 25169", " 25171", " 25183", " 25189"], + [" 25219", " 25229", " 25237", " 25243", " 25247", " 25253", " 25261", " 25301", " 25303", " 25307"], + [" 25309", " 25321", " 25339", " 25343", " 25349", " 25357", " 25367", " 25373", " 25391", " 25409"], + [" 25411", " 25423", " 25439", " 25447", " 25453", " 25457", " 25463", " 25469", " 25471", " 25523"], + [" 25537", " 25541", " 25561", " 25577", " 25579", " 25583", " 25589", " 25601", " 25603", " 25609"], + [" 25621", " 25633", " 25639", " 25643", " 25657", " 25667", " 25673", " 25679", " 25693", " 25703"], + [" 25717", " 25733", " 25741", " 25747", " 25759", " 25763", " 25771", " 25793", " 25799", " 25801"], + [" 25819", " 25841", " 25847", " 25849", " 25867", " 25873", " 25889", " 25903", " 25913", " 25919"], + [" 25931", " 25933", " 25939", " 25943", " 25951", " 25969", " 25981", " 25997", " 25999", " 26003"], + [" 26017", " 26021", " 26029", " 26041", " 26053", " 26083", " 26099", " 26107", " 26111", " 26113"], + [" 26119", " 26141", " 26153", " 26161", " 26171", " 26177", " 26183", " 26189", " 26203", " 26209"], + [" 26227", " 26237", " 26249", " 26251", " 26261", " 26263", " 26267", " 26293", " 26297", " 26309"], + [" 26317", " 26321", " 26339", " 26347", " 26357", " 26371", " 26387", " 26393", " 26399", " 26407"], + [" 26417", " 26423", " 26431", " 26437", " 26449", " 26459", " 26479", " 26489", " 26497", " 26501"], + [" 26513", " 26539", " 26557", " 26561", " 26573", " 26591", " 26597", " 26627", " 26633", " 26641"], + [" 26647", " 26669", " 26681", " 26683", " 26687", " 26693", " 26699", " 26701", " 26711", " 26713"], + [" 26717", " 26723", " 26729", " 26731", " 26737", " 26759", " 26777", " 26783", " 26801", " 26813"], + [" 26821", " 26833", " 26839", " 26849", " 26861", " 26863", " 26879", " 26881", " 26891", " 26893"], + [" 26903", " 26921", " 26927", " 26947", " 26951", " 26953", " 26959", " 26981", " 26987", " 26993"], + [" 27011", " 27017", " 27031", " 27043", " 27059", " 27061", " 27067", " 27073", " 27077", " 27091"], + [" 27103", " 27107", " 27109", " 27127", " 27143", " 27179", " 27191", " 27197", " 27211", " 27239"], + [" 27241", " 27253", " 27259", " 27271", " 27277", " 27281", " 27283", " 27299", " 27329", " 27337"], + [" 27361", " 27367", " 27397", " 27407", " 27409", " 27427", " 27431", " 27437", " 27449", " 27457"], + [" 27479", " 27481", " 27487", " 27509", " 27527", " 27529", " 27539", " 27541", " 27551", " 27581"], + [" 27583", " 27611", " 27617", " 27631", " 27647", " 27653", " 27673", " 27689", " 27691", " 27697"], + [" 27701", " 27733", " 27737", " 27739", " 27743", " 27749", " 27751", " 27763", " 27767", " 27773"], + [" 27779", " 27791", " 27793", " 27799", " 27803", " 27809", " 27817", " 27823", " 27827", " 27847"], + [" 27851", " 27883", " 27893", " 27901", " 27917", " 27919", " 27941", " 27943", " 27947", " 27953"], + [" 27961", " 27967", " 27983", " 27997", " 28001", " 28019", " 28027", " 28031", " 28051", " 28057"], + [" 28069", " 28081", " 28087", " 28097", " 28099", " 28109", " 28111", " 28123", " 28151", " 28163"], + [" 28181", " 28183", " 28201", " 28211", " 28219", " 28229", " 28277", " 28279", " 28283", " 28289"], + [" 28297", " 28307", " 28309", " 28319", " 28349", " 28351", " 28387", " 28393", " 28403", " 28409"], + [" 28411", " 28429", " 28433", " 28439", " 28447", " 28463", " 28477", " 28493", " 28499", " 28513"], + [" 28517", " 28537", " 28541", " 28547", " 28549", " 28559", " 28571", " 28573", " 28579", " 28591"], + [" 28597", " 28603", " 28607", " 28619", " 28621", " 28627", " 28631", " 28643", " 28649", " 28657"], + [" 28661", " 28663", " 28669", " 28687", " 28697", " 28703", " 28711", " 28723", " 28729", " 28751"], + [" 28753", " 28759", " 28771", " 28789", " 28793", " 28807", " 28813", " 28817", " 28837", " 28843"], + [" 28859", " 28867", " 28871", " 28879", " 28901", " 28909", " 28921", " 28927", " 28933", " 28949"], + [" 28961", " 28979", " 29009", " 29017", " 29021", " 29023", " 29027", " 29033", " 29059", " 29063"], + [" 29077", " 29101", " 29123", " 29129", " 29131", " 29137", " 29147", " 29153", " 29167", " 29173"], + [" 29179", " 29191", " 29201", " 29207", " 29209", " 29221", " 29231", " 29243", " 29251", " 29269"], + [" 29287", " 29297", " 29303", " 29311", " 29327", " 29333", " 29339", " 29347", " 29363", " 29383"], + [" 29387", " 29389", " 29399", " 29401", " 29411", " 29423", " 29429", " 29437", " 29443", " 29453"], + [" 29473", " 29483", " 29501", " 29527", " 29531", " 29537", " 29567", " 29569", " 29573", " 29581"], + [" 29587", " 29599", " 29611", " 29629", " 29633", " 29641", " 29663", " 29669", " 29671", " 29683"], + [" 29717", " 29723", " 29741", " 29753", " 29759", " 29761", " 29789", " 29803", " 29819", " 29833"], + [" 29837", " 29851", " 29863", " 29867", " 29873", " 29879", " 29881", " 29917", " 29921", " 29927"], + [" 29947", " 29959", " 29983", " 29989", " 30011", " 30013", " 30029", " 30047", " 30059", " 30071"], + [" 30089", " 30091", " 30097", " 30103", " 30109", " 30113", " 30119", " 30133", " 30137", " 30139"], + [" 30161", " 30169", " 30181", " 30187", " 30197", " 30203", " 30211", " 30223", " 30241", " 30253"], + [" 30259", " 30269", " 30271", " 30293", " 30307", " 30313", " 30319", " 30323", " 30341", " 30347"], + [" 30367", " 30389", " 30391", " 30403", " 30427", " 30431", " 30449", " 30467", " 30469", " 30491"], + [" 30493", " 30497", " 30509", " 30517", " 30529", " 30539", " 30553", " 30557", " 30559", " 30577"], + [" 30593", " 30631", " 30637", " 30643", " 30649", " 30661", " 30671", " 30677", " 30689", " 30697"], + [" 30703", " 30707", " 30713", " 30727", " 30757", " 30763", " 30773", " 30781", " 30803", " 30809"], + [" 30817", " 30829", " 30839", " 30841", " 30851", " 30853", " 30859", " 30869", " 30871", " 30881"], + [" 30893", " 30911", " 30931", " 30937", " 30941", " 30949", " 30971", " 30977", " 30983", " 31013"], + [" 31019", " 31033", " 31039", " 31051", " 31063", " 31069", " 31079", " 31081", " 31091", " 31121"], + [" 31123", " 31139", " 31147", " 31151", " 31153", " 31159", " 31177", " 31181", " 31183", " 31189"], + [" 31193", " 31219", " 31223", " 31231", " 31237", " 31247", " 31249", " 31253", " 31259", " 31267"], + [" 31271", " 31277", " 31307", " 31319", " 31321", " 31327", " 31333", " 31337", " 31357", " 31379"], + [" 31387", " 31391", " 31393", " 31397", " 31469", " 31477", " 31481", " 31489", " 31511", " 31513"], + [" 31517", " 31531", " 31541", " 31543", " 31547", " 31567", " 31573", " 31583", " 31601", " 31607"], + [" 31627", " 31643", " 31649", " 31657", " 31663", " 31667", " 31687", " 31699", " 31721", " 31723"], + [" 31727", " 31729", " 31741", " 31751", " 31769", " 31771", " 31793", " 31799", " 31817", " 31847"], + [" 31849", " 31859", " 31873", " 31883", " 31891", " 31907", " 31957", " 31963", " 31973", " 31981"], + [" 31991", " 32003", " 32009", " 32027", " 32029", " 32051", " 32057", " 32059", " 32063", " 32069"], + [" 32077", " 32083", " 32089", " 32099", " 32117", " 32119", " 32141", " 32143", " 32159", " 32173"], + [" 32183", " 32189", " 32191", " 32203", " 32213", " 32233", " 32237", " 32251", " 32257", " 32261"], + [" 32297", " 32299", " 32303", " 32309", " 32321", " 32323", " 32327", " 32341", " 32353", " 32359"], + [" 32363", " 32369", " 32371", " 32377", " 32381", " 32401", " 32411", " 32413", " 32423", " 32429"], + [" 32441", " 32443", " 32467", " 32479", " 32491", " 32497", " 32503", " 32507", " 32531", " 32533"], + [" 32537", " 32561", " 32563", " 32569", " 32573", " 32579", " 32587", " 32603", " 32609", " 32611"], + [" 32621", " 32633", " 32647", " 32653", " 32687", " 32693", " 32707", " 32713", " 32717", " 32719"], + [" 32749", " 32771", " 32779", " 32783", " 32789", " 32797", " 32801", " 32803", " 32831", " 32833"], + [" 32839", " 32843", " 32869", " 32887", " 32909", " 32911", " 32917", " 32933", " 32939", " 32941"], + [" 32957", " 32969", " 32971", " 32983", " 32987", " 32993", " 32999", " 33013", " 33023", " 33029"], + [" 33037", " 33049", " 33053", " 33071", " 33073", " 33083", " 33091", " 33107", " 33113", " 33119"], + [" 33149", " 33151", " 33161", " 33179", " 33181", " 33191", " 33199", " 33203", " 33211", " 33223"], + [" 33247", " 33287", " 33289", " 33301", " 33311", " 33317", " 33329", " 33331", " 33343", " 33347"], + [" 33349", " 33353", " 33359", " 33377", " 33391", " 33403", " 33409", " 33413", " 33427", " 33457"], + [" 33461", " 33469", " 33479", " 33487", " 33493", " 33503", " 33521", " 33529", " 33533", " 33547"], + [" 33563", " 33569", " 33577", " 33581", " 33587", " 33589", " 33599", " 33601", " 33613", " 33617"], + [" 33619", " 33623", " 33629", " 33637", " 33641", " 33647", " 33679", " 33703", " 33713", " 33721"], + [" 33739", " 33749", " 33751", " 33757", " 33767", " 33769", " 33773", " 33791", " 33797", " 33809"], + [" 33811", " 33827", " 33829", " 33851", " 33857", " 33863", " 33871", " 33889", " 33893", " 33911"], + [" 33923", " 33931", " 33937", " 33941", " 33961", " 33967", " 33997", " 34019", " 34031", " 34033"], + [" 34039", " 34057", " 34061", " 34123", " 34127", " 34129", " 34141", " 34147", " 34157", " 34159"], + [" 34171", " 34183", " 34211", " 34213", " 34217", " 34231", " 34253", " 34259", " 34261", " 34267"], + [" 34273", " 34283", " 34297", " 34301", " 34303", " 34313", " 34319", " 34327", " 34337", " 34351"], + [" 34361", " 34367", " 34369", " 34381", " 34403", " 34421", " 34429", " 34439", " 34457", " 34469"], + [" 34471", " 34483", " 34487", " 34499", " 34501", " 34511", " 34513", " 34519", " 34537", " 34543"], + [" 34549", " 34583", " 34589", " 34591", " 34603", " 34607", " 34613", " 34631", " 34649", " 34651"], + [" 34667", " 34673", " 34679", " 34687", " 34693", " 34703", " 34721", " 34729", " 34739", " 34747"], + [" 34757", " 34759", " 34763", " 34781", " 34807", " 34819", " 34841", " 34843", " 34847", " 34849"], + [" 34871", " 34877", " 34883", " 34897", " 34913", " 34919", " 34939", " 34949", " 34961", " 34963"], + [" 34981", " 35023", " 35027", " 35051", " 35053", " 35059", " 35069", " 35081", " 35083", " 35089"], + [" 35099", " 35107", " 35111", " 35117", " 35129", " 35141", " 35149", " 35153", " 35159", " 35171"], + [" 35201", " 35221", " 35227", " 35251", " 35257", " 35267", " 35279", " 35281", " 35291", " 35311"], + [" 35317", " 35323", " 35327", " 35339", " 35353", " 35363", " 35381", " 35393", " 35401", " 35407"], + [" 35419", " 35423", " 35437", " 35447", " 35449", " 35461", " 35491", " 35507", " 35509", " 35521"], + [" 35527", " 35531", " 35533", " 35537", " 35543", " 35569", " 35573", " 35591", " 35593", " 35597"], + [" 35603", " 35617", " 35671", " 35677", " 35729", " 35731", " 35747", " 35753", " 35759", " 35771"], + [" 35797", " 35801", " 35803", " 35809", " 35831", " 35837", " 35839", " 35851", " 35863", " 35869"], + [" 35879", " 35897", " 35899", " 35911", " 35923", " 35933", " 35951", " 35963", " 35969", " 35977"], + [" 35983", " 35993", " 35999", " 36007", " 36011", " 36013", " 36017", " 36037", " 36061", " 36067"], + [" 36073", " 36083", " 36097", " 36107", " 36109", " 36131", " 36137", " 36151", " 36161", " 36187"], + [" 36191", " 36209", " 36217", " 36229", " 36241", " 36251", " 36263", " 36269", " 36277", " 36293"], + [" 36299", " 36307", " 36313", " 36319", " 36341", " 36343", " 36353", " 36373", " 36383", " 36389"], + [" 36433", " 36451", " 36457", " 36467", " 36469", " 36473", " 36479", " 36493", " 36497", " 36523"], + [" 36527", " 36529", " 36541", " 36551", " 36559", " 36563", " 36571", " 36583", " 36587", " 36599"], + [" 36607", " 36629", " 36637", " 36643", " 36653", " 36671", " 36677", " 36683", " 36691", " 36697"], + [" 36709", " 36713", " 36721", " 36739", " 36749", " 36761", " 36767", " 36779", " 36781", " 36787"], + [" 36791", " 36793", " 36809", " 36821", " 36833", " 36847", " 36857", " 36871", " 36877", " 36887"], + [" 36899", " 36901", " 36913", " 36919", " 36923", " 36929", " 36931", " 36943", " 36947", " 36973"], + [" 36979", " 36997", " 37003", " 37013", " 37019", " 37021", " 37039", " 37049", " 37057", " 37061"], + [" 37087", " 37097", " 37117", " 37123", " 37139", " 37159", " 37171", " 37181", " 37189", " 37199"], + [" 37201", " 37217", " 37223", " 37243", " 37253", " 37273", " 37277", " 37307", " 37309", " 37313"], + [" 37321", " 37337", " 37339", " 37357", " 37361", " 37363", " 37369", " 37379", " 37397", " 37409"], + [" 37423", " 37441", " 37447", " 37463", " 37483", " 37489", " 37493", " 37501", " 37507", " 37511"], + [" 37517", " 37529", " 37537", " 37547", " 37549", " 37561", " 37567", " 37571", " 37573", " 37579"], + [" 37589", " 37591", " 37607", " 37619", " 37633", " 37643", " 37649", " 37657", " 37663", " 37691"], + [" 37693", " 37699", " 37717", " 37747", " 37781", " 37783", " 37799", " 37811", " 37813", " 37831"], + [" 37847", " 37853", " 37861", " 37871", " 37879", " 37889", " 37897", " 37907", " 37951", " 37957"], + [" 37963", " 37967", " 37987", " 37991", " 37993", " 37997", " 38011", " 38039", " 38047", " 38053"], + [" 38069", " 38083", " 38113", " 38119", " 38149", " 38153", " 38167", " 38177", " 38183", " 38189"], + [" 38197", " 38201", " 38219", " 38231", " 38237", " 38239", " 38261", " 38273", " 38281", " 38287"], + [" 38299", " 38303", " 38317", " 38321", " 38327", " 38329", " 38333", " 38351", " 38371", " 38377"], + [" 38393", " 38431", " 38447", " 38449", " 38453", " 38459", " 38461", " 38501", " 38543", " 38557"], + [" 38561", " 38567", " 38569", " 38593", " 38603", " 38609", " 38611", " 38629", " 38639", " 38651"], + [" 38653", " 38669", " 38671", " 38677", " 38693", " 38699", " 38707", " 38711", " 38713", " 38723"], + [" 38729", " 38737", " 38747", " 38749", " 38767", " 38783", " 38791", " 38803", " 38821", " 38833"], + [" 38839", " 38851", " 38861", " 38867", " 38873", " 38891", " 38903", " 38917", " 38921", " 38923"], + [" 38933", " 38953", " 38959", " 38971", " 38977", " 38993", " 39019", " 39023", " 39041", " 39043"], + [" 39047", " 39079", " 39089", " 39097", " 39103", " 39107", " 39113", " 39119", " 39133", " 39139"], + [" 39157", " 39161", " 39163", " 39181", " 39191", " 39199", " 39209", " 39217", " 39227", " 39229"], + [" 39233", " 39239", " 39241", " 39251", " 39293", " 39301", " 39313", " 39317", " 39323", " 39341"], + [" 39343", " 39359", " 39367", " 39371", " 39373", " 39383", " 39397", " 39409", " 39419", " 39439"], + [" 39443", " 39451", " 39461", " 39499", " 39503", " 39509", " 39511", " 39521", " 39541", " 39551"], + [" 39563", " 39569", " 39581", " 39607", " 39619", " 39623", " 39631", " 39659", " 39667", " 39671"], + [" 39679", " 39703", " 39709", " 39719", " 39727", " 39733", " 39749", " 39761", " 39769", " 39779"], + [" 39791", " 39799", " 39821", " 39827", " 39829", " 39839", " 39841", " 39847", " 39857", " 39863"], + [" 39869", " 39877", " 39883", " 39887", " 39901", " 39929", " 39937", " 39953", " 39971", " 39979"], + [" 39983", " 39989", " 40009", " 40013", " 40031", " 40037", " 40039", " 40063", " 40087", " 40093"], + [" 40099", " 40111", " 40123", " 40127", " 40129", " 40151", " 40153", " 40163", " 40169", " 40177"], + [" 40189", " 40193", " 40213", " 40231", " 40237", " 40241", " 40253", " 40277", " 40283", " 40289"], + [" 40343", " 40351", " 40357", " 40361", " 40387", " 40423", " 40427", " 40429", " 40433", " 40459"], + [" 40471", " 40483", " 40487", " 40493", " 40499", " 40507", " 40519", " 40529", " 40531", " 40543"], + [" 40559", " 40577", " 40583", " 40591", " 40597", " 40609", " 40627", " 40637", " 40639", " 40693"], + [" 40697", " 40699", " 40709", " 40739", " 40751", " 40759", " 40763", " 40771", " 40787", " 40801"], + [" 40813", " 40819", " 40823", " 40829", " 40841", " 40847", " 40849", " 40853", " 40867", " 40879"], + [" 40883", " 40897", " 40903", " 40927", " 40933", " 40939", " 40949", " 40961", " 40973", " 40993"], + [" 41011", " 41017", " 41023", " 41039", " 41047", " 41051", " 41057", " 41077", " 41081", " 41113"], + [" 41117", " 41131", " 41141", " 41143", " 41149", " 41161", " 41177", " 41179", " 41183", " 41189"], + [" 41201", " 41203", " 41213", " 41221", " 41227", " 41231", " 41233", " 41243", " 41257", " 41263"], + [" 41269", " 41281", " 41299", " 41333", " 41341", " 41351", " 41357", " 41381", " 41387", " 41389"], + [" 41399", " 41411", " 41413", " 41443", " 41453", " 41467", " 41479", " 41491", " 41507", " 41513"], + [" 41519", " 41521", " 41539", " 41543", " 41549", " 41579", " 41593", " 41597", " 41603", " 41609"], + [" 41611", " 41617", " 41621", " 41627", " 41641", " 41647", " 41651", " 41659", " 41669", " 41681"], + [" 41687", " 41719", " 41729", " 41737", " 41759", " 41761", " 41771", " 41777", " 41801", " 41809"], + [" 41813", " 41843", " 41849", " 41851", " 41863", " 41879", " 41887", " 41893", " 41897", " 41903"], + [" 41911", " 41927", " 41941", " 41947", " 41953", " 41957", " 41959", " 41969", " 41981", " 41983"], + [" 41999", " 42013", " 42017", " 42019", " 42023", " 42043", " 42061", " 42071", " 42073", " 42083"], + [" 42089", " 42101", " 42131", " 42139", " 42157", " 42169", " 42179", " 42181", " 42187", " 42193"], + [" 42197", " 42209", " 42221", " 42223", " 42227", " 42239", " 42257", " 42281", " 42283", " 42293"], + [" 42299", " 42307", " 42323", " 42331", " 42337", " 42349", " 42359", " 42373", " 42379", " 42391"], + [" 42397", " 42403", " 42407", " 42409", " 42433", " 42437", " 42443", " 42451", " 42457", " 42461"], + [" 42463", " 42467", " 42473", " 42487", " 42491", " 42499", " 42509", " 42533", " 42557", " 42569"], + [" 42571", " 42577", " 42589", " 42611", " 42641", " 42643", " 42649", " 42667", " 42677", " 42683"], + [" 42689", " 42697", " 42701", " 42703", " 42709", " 42719", " 42727", " 42737", " 42743", " 42751"], + [" 42767", " 42773", " 42787", " 42793", " 42797", " 42821", " 42829", " 42839", " 42841", " 42853"], + [" 42859", " 42863", " 42899", " 42901", " 42923", " 42929", " 42937", " 42943", " 42953", " 42961"], + [" 42967", " 42979", " 42989", " 43003", " 43013", " 43019", " 43037", " 43049", " 43051", " 43063"], + [" 43067", " 43093", " 43103", " 43117", " 43133", " 43151", " 43159", " 43177", " 43189", " 43201"], + [" 43207", " 43223", " 43237", " 43261", " 43271", " 43283", " 43291", " 43313", " 43319", " 43321"], + [" 43331", " 43391", " 43397", " 43399", " 43403", " 43411", " 43427", " 43441", " 43451", " 43457"], + [" 43481", " 43487", " 43499", " 43517", " 43541", " 43543", " 43573", " 43577", " 43579", " 43591"], + [" 43597", " 43607", " 43609", " 43613", " 43627", " 43633", " 43649", " 43651", " 43661", " 43669"], + [" 43691", " 43711", " 43717", " 43721", " 43753", " 43759", " 43777", " 43781", " 43783", " 43787"], + [" 43789", " 43793", " 43801", " 43853", " 43867", " 43889", " 43891", " 43913", " 43933", " 43943"], + [" 43951", " 43961", " 43963", " 43969", " 43973", " 43987", " 43991", " 43997", " 44017", " 44021"], + [" 44027", " 44029", " 44041", " 44053", " 44059", " 44071", " 44087", " 44089", " 44101", " 44111"], + [" 44119", " 44123", " 44129", " 44131", " 44159", " 44171", " 44179", " 44189", " 44201", " 44203"], + [" 44207", " 44221", " 44249", " 44257", " 44263", " 44267", " 44269", " 44273", " 44279", " 44281"], + [" 44293", " 44351", " 44357", " 44371", " 44381", " 44383", " 44389", " 44417", " 44449", " 44453"], + [" 44483", " 44491", " 44497", " 44501", " 44507", " 44519", " 44531", " 44533", " 44537", " 44543"], + [" 44549", " 44563", " 44579", " 44587", " 44617", " 44621", " 44623", " 44633", " 44641", " 44647"], + [" 44651", " 44657", " 44683", " 44687", " 44699", " 44701", " 44711", " 44729", " 44741", " 44753"], + [" 44771", " 44773", " 44777", " 44789", " 44797", " 44809", " 44819", " 44839", " 44843", " 44851"], + [" 44867", " 44879", " 44887", " 44893", " 44909", " 44917", " 44927", " 44939", " 44953", " 44959"], + [" 44963", " 44971", " 44983", " 44987", " 45007", " 45013", " 45053", " 45061", " 45077", " 45083"], + [" 45119", " 45121", " 45127", " 45131", " 45137", " 45139", " 45161", " 45179", " 45181", " 45191"], + [" 45197", " 45233", " 45247", " 45259", " 45263", " 45281", " 45289", " 45293", " 45307", " 45317"], + [" 45319", " 45329", " 45337", " 45341", " 45343", " 45361", " 45377", " 45389", " 45403", " 45413"], + [" 45427", " 45433", " 45439", " 45481", " 45491", " 45497", " 45503", " 45523", " 45533", " 45541"], + [" 45553", " 45557", " 45569", " 45587", " 45589", " 45599", " 45613", " 45631", " 45641", " 45659"], + [" 45667", " 45673", " 45677", " 45691", " 45697", " 45707", " 45737", " 45751", " 45757", " 45763"], + [" 45767", " 45779", " 45817", " 45821", " 45823", " 45827", " 45833", " 45841", " 45853", " 45863"], + [" 45869", " 45887", " 45893", " 45943", " 45949", " 45953", " 45959", " 45971", " 45979", " 45989"], + [" 46021", " 46027", " 46049", " 46051", " 46061", " 46073", " 46091", " 46093", " 46099", " 46103"], + [" 46133", " 46141", " 46147", " 46153", " 46171", " 46181", " 46183", " 46187", " 46199", " 46219"], + [" 46229", " 46237", " 46261", " 46271", " 46273", " 46279", " 46301", " 46307", " 46309", " 46327"], + [" 46337", " 46349", " 46351", " 46381", " 46399", " 46411", " 46439", " 46441", " 46447", " 46451"], + [" 46457", " 46471", " 46477", " 46489", " 46499", " 46507", " 46511", " 46523", " 46549", " 46559"], + [" 46567", " 46573", " 46589", " 46591", " 46601", " 46619", " 46633", " 46639", " 46643", " 46649"], + [" 46663", " 46679", " 46681", " 46687", " 46691", " 46703", " 46723", " 46727", " 46747", " 46751"], + [" 46757", " 46769", " 46771", " 46807", " 46811", " 46817", " 46819", " 46829", " 46831", " 46853"], + [" 46861", " 46867", " 46877", " 46889", " 46901", " 46919", " 46933", " 46957", " 46993", " 46997"], + [" 47017", " 47041", " 47051", " 47057", " 47059", " 47087", " 47093", " 47111", " 47119", " 47123"], + [" 47129", " 47137", " 47143", " 47147", " 47149", " 47161", " 47189", " 47207", " 47221", " 47237"], + [" 47251", " 47269", " 47279", " 47287", " 47293", " 47297", " 47303", " 47309", " 47317", " 47339"], + [" 47351", " 47353", " 47363", " 47381", " 47387", " 47389", " 47407", " 47417", " 47419", " 47431"], + [" 47441", " 47459", " 47491", " 47497", " 47501", " 47507", " 47513", " 47521", " 47527", " 47533"], + [" 47543", " 47563", " 47569", " 47581", " 47591", " 47599", " 47609", " 47623", " 47629", " 47639"], + [" 47653", " 47657", " 47659", " 47681", " 47699", " 47701", " 47711", " 47713", " 47717", " 47737"], + [" 47741", " 47743", " 47777", " 47779", " 47791", " 47797", " 47807", " 47809", " 47819", " 47837"], + [" 47843", " 47857", " 47869", " 47881", " 47903", " 47911", " 47917", " 47933", " 47939", " 47947"], + [" 47951", " 47963", " 47969", " 47977", " 47981", " 48017", " 48023", " 48029", " 48049", " 48073"], + [" 48079", " 48091", " 48109", " 48119", " 48121", " 48131", " 48157", " 48163", " 48179", " 48187"], + [" 48193", " 48197", " 48221", " 48239", " 48247", " 48259", " 48271", " 48281", " 48299", " 48311"], + [" 48313", " 48337", " 48341", " 48353", " 48371", " 48383", " 48397", " 48407", " 48409", " 48413"], + [" 48437", " 48449", " 48463", " 48473", " 48479", " 48481", " 48487", " 48491", " 48497", " 48523"], + [" 48527", " 48533", " 48539", " 48541", " 48563", " 48571", " 48589", " 48593", " 48611", " 48619"], + [" 48623", " 48647", " 48649", " 48661", " 48673", " 48677", " 48679", " 48731", " 48733", " 48751"], + [" 48757", " 48761", " 48767", " 48779", " 48781", " 48787", " 48799", " 48809", " 48817", " 48821"], + [" 48823", " 48847", " 48857", " 48869", " 48871", " 48883", " 48889", " 48907", " 48947", " 48953"], + [" 48973", " 48989", " 48991", " 49003", " 49009", " 49019", " 49031", " 49033", " 49037", " 49043"], + [" 49057", " 49069", " 49081", " 49103", " 49109", " 49117", " 49121", " 49123", " 49139", " 49157"], + [" 49169", " 49171", " 49177", " 49193", " 49199", " 49201", " 49207", " 49211", " 49223", " 49253"], + [" 49261", " 49277", " 49279", " 49297", " 49307", " 49331", " 49333", " 49339", " 49363", " 49367"], + [" 49369", " 49391", " 49393", " 49409", " 49411", " 49417", " 49429", " 49433", " 49451", " 49459"], + [" 49463", " 49477", " 49481", " 49499", " 49523", " 49529", " 49531", " 49537", " 49547", " 49549"], + [" 49559", " 49597", " 49603", " 49613", " 49627", " 49633", " 49639", " 49663", " 49667", " 49669"], + [" 49681", " 49697", " 49711", " 49727", " 49739", " 49741", " 49747", " 49757", " 49783", " 49787"], + [" 49789", " 49801", " 49807", " 49811", " 49823", " 49831", " 49843", " 49853", " 49871", " 49877"], + [" 49891", " 49919", " 49921", " 49927", " 49937", " 49939", " 49943", " 49957", " 49991", " 49993"], + [" 49999", " 50021", " 50023", " 50033", " 50047", " 50051", " 50053", " 50069", " 50077", " 50087"], + [" 50093", " 50101", " 50111", " 50119", " 50123", " 50129", " 50131", " 50147", " 50153", " 50159"], + [" 50177", " 50207", " 50221", " 50227", " 50231", " 50261", " 50263", " 50273", " 50287", " 50291"], + [" 50311", " 50321", " 50329", " 50333", " 50341", " 50359", " 50363", " 50377", " 50383", " 50387"], + [" 50411", " 50417", " 50423", " 50441", " 50459", " 50461", " 50497", " 50503", " 50513", " 50527"], + [" 50539", " 50543", " 50549", " 50551", " 50581", " 50587", " 50591", " 50593", " 50599", " 50627"], + [" 50647", " 50651", " 50671", " 50683", " 50707", " 50723", " 50741", " 50753", " 50767", " 50773"], + [" 50777", " 50789", " 50821", " 50833", " 50839", " 50849", " 50857", " 50867", " 50873", " 50891"], + [" 50893", " 50909", " 50923", " 50929", " 50951", " 50957", " 50969", " 50971", " 50989", " 50993"], + [" 51001", " 51031", " 51043", " 51047", " 51059", " 51061", " 51071", " 51109", " 51131", " 51133"], + [" 51137", " 51151", " 51157", " 51169", " 51193", " 51197", " 51199", " 51203", " 51217", " 51229"], + [" 51239", " 51241", " 51257", " 51263", " 51283", " 51287", " 51307", " 51329", " 51341", " 51343"], + [" 51347", " 51349", " 51361", " 51383", " 51407", " 51413", " 51419", " 51421", " 51427", " 51431"], + [" 51437", " 51439", " 51449", " 51461", " 51473", " 51479", " 51481", " 51487", " 51503", " 51511"], + [" 51517", " 51521", " 51539", " 51551", " 51563", " 51577", " 51581", " 51593", " 51599", " 51607"], + [" 51613", " 51631", " 51637", " 51647", " 51659", " 51673", " 51679", " 51683", " 51691", " 51713"], + [" 51719", " 51721", " 51749", " 51767", " 51769", " 51787", " 51797", " 51803", " 51817", " 51827"], + [" 51829", " 51839", " 51853", " 51859", " 51869", " 51871", " 51893", " 51899", " 51907", " 51913"], + [" 51929", " 51941", " 51949", " 51971", " 51973", " 51977", " 51991", " 52009", " 52021", " 52027"], + [" 52051", " 52057", " 52067", " 52069", " 52081", " 52103", " 52121", " 52127", " 52147", " 52153"], + [" 52163", " 52177", " 52181", " 52183", " 52189", " 52201", " 52223", " 52237", " 52249", " 52253"], + [" 52259", " 52267", " 52289", " 52291", " 52301", " 52313", " 52321", " 52361", " 52363", " 52369"], + [" 52379", " 52387", " 52391", " 52433", " 52453", " 52457", " 52489", " 52501", " 52511", " 52517"], + [" 52529", " 52541", " 52543", " 52553", " 52561", " 52567", " 52571", " 52579", " 52583", " 52609"], + [" 52627", " 52631", " 52639", " 52667", " 52673", " 52691", " 52697", " 52709", " 52711", " 52721"], + [" 52727", " 52733", " 52747", " 52757", " 52769", " 52783", " 52807", " 52813", " 52817"] + ] + } + } + ] +} ================================================================================ diff --git a/modules/services/serviceGeneration/renderers/rendererDocx.py b/modules/services/serviceGeneration/renderers/rendererDocx.py index 4f1c568f..398816c1 100644 --- a/modules/services/serviceGeneration/renderers/rendererDocx.py +++ b/modules/services/serviceGeneration/renderers/rendererDocx.py @@ -410,13 +410,17 @@ class RendererDocx(BaseRenderer): """ Render a JSON table to DOCX using AI-generated styles. - PERFORMANCE OPTIMIZATIONS (addressed 6.2 cells/s bottleneck): - 1. Headers: Create paragraph/run directly instead of cell.text = str() followed by access - 2. Cells: Only create paragraph/run when styling needed, use cell.text for unstyled cells - 3. Background: Pre-calculate hex color string, use _setCellBackgroundFast() to avoid RGBColor unpacking - 4. Avoid double paragraph/run creation by clearing existing paragraphs before creating new ones + PERFORMANCE OPTIMIZATION: Uses direct XML manipulation via lxml instead of + python-docx high-level API. This bypasses the slow cell.text assignment + which creates multiple XML operations per cell. - Expected performance improvement: 100-1000x faster (from 6.2 to 1000+ cells/s) + The key insight: python-docx's cell.text setter is slow because it: + 1. Clears existing content (XML manipulation) + 2. Creates a new paragraph element + 3. Creates a new run element + 4. Sets text value + + By building the XML directly, we achieve 100-1000x faster performance. """ import time table_start = time.time() @@ -431,96 +435,176 @@ class RendererDocx(BaseRenderer): if not headers or not rows: return - self.logger.debug(f"_renderJsonTable: Starting table render - {len(rows)} rows × {len(headers)} columns = {len(rows) * len(headers)} cells") + totalRows = len(rows) + totalCols = len(headers) + totalCells = totalRows * totalCols - # Create table - create_start = time.time() - table = doc.add_table(rows=len(rows) + 1, cols=len(headers)) - table.alignment = WD_TABLE_ALIGNMENT.CENTER + self.logger.debug(f"_renderJsonTable: Starting FAST table render - {totalRows} rows x {totalCols} columns = {totalCells} cells") - # Apply predefined table style for fast rendering (no per-cell styling needed) - border_style = styles["table_border"]["style"] - if border_style == "grid": - table.style = 'Light Grid Accent 1' # Predefined style with header styling - elif border_style == "horizontal_only": - table.style = 'Light List Accent 1' # Predefined style with horizontal lines - else: - table.style = 'Light List' # Minimal predefined style - - self.logger.debug(f"_renderJsonTable: Table created in {time.time() - create_start:.2f}s") - - # Add headers - FAST PATH: Use predefined style, just set text - header_start = time.time() - header_row = table.rows[0] - - for i, header in enumerate(headers): - if i < len(header_row.cells): - # Fastest path: just set text, predefined style handles formatting - header_row.cells[i].text = str(header) - - header_total_time = time.time() - header_start - self.logger.debug(f"_renderJsonTable: Headers rendered in {header_total_time:.2f}s") - - # Add data rows - FAST PATH: Use predefined style, just set text - rows_start = time.time() - total_cells = len(rows) * len(headers) - log_interval = max(1, total_cells // 20) # Log every 5% progress - - # KPI tracking for rows - text_assign_time = 0.0 - row_access_time = 0.0 - - for row_idx, row_data in enumerate(rows): - row_start = time.time() - if row_idx + 1 < len(table.rows): - row_access_start = time.time() - table_row = table.rows[row_idx + 1] - row_access_time += time.time() - row_access_start - - for col_idx, cell_data in enumerate(row_data): - if col_idx < len(table_row.cells): - # Fastest path: just set text, predefined style handles formatting - text_start = time.time() - table_row.cells[col_idx].text = str(cell_data) - text_assign_time += time.time() - text_start - - # Log progress for large tables with detailed KPIs - if (row_idx + 1) % log_interval == 0 or row_idx == len(rows) - 1: - elapsed = time.time() - rows_start - progress = ((row_idx + 1) / len(rows)) * 100 - cells_processed = (row_idx + 1) * len(headers) - rate = cells_processed / elapsed if elapsed > 0 else 0 - row_time = time.time() - row_start - avg_row_time = elapsed / (row_idx + 1) if row_idx > 0 else row_time - - # Calculate percentages - total_op_time = text_assign_time + row_access_time - if total_op_time > 0: - text_pct = (text_assign_time / total_op_time) * 100 - access_pct = (row_access_time / total_op_time) * 100 - - self.logger.debug(f"_renderJsonTable: Progress {progress:.1f}% ({row_idx + 1}/{len(rows)} rows, {cells_processed}/{total_cells} cells) - Rate: {rate:.1f} cells/s, Elapsed: {elapsed:.2f}s, Avg row: {avg_row_time*1000:.2f}ms - Breakdown: text_assign={text_pct:.1f}%, row_access={access_pct:.1f}%") - else: - self.logger.debug(f"_renderJsonTable: Progress {progress:.1f}% ({row_idx + 1}/{len(rows)} rows, {cells_processed}/{total_cells} cells) - Rate: {rate:.1f} cells/s, Elapsed: {elapsed:.2f}s, Avg row: {avg_row_time*1000:.2f}ms") - - # Log first few rows with detailed timing - if row_idx < 3: - row_time = time.time() - row_start - self.logger.debug(f"_renderJsonTable: Row {row_idx+1}/{len(rows)} rendered in {row_time*1000:.2f}ms ({len(headers)} cells)") + # Use fast XML-based table rendering + self._renderTableFastXml(doc, headers, rows, styles) total_time = time.time() - table_start - rows_time = time.time() - rows_start - - # Final KPI summary - total_op_time = text_assign_time + row_access_time - if total_op_time > 0: - self.logger.info(f"_renderJsonTable: Table rendering completed in {total_time:.2f}s ({len(rows)} rows × {len(headers)} cols = {total_cells} cells) - Rows: {rows_time:.2f}s - Breakdown: text_assign={text_assign_time:.2f}s ({text_assign_time/total_op_time*100:.1f}%), row_access={row_access_time:.2f}s ({row_access_time/total_op_time*100:.1f}%)") - else: - self.logger.info(f"_renderJsonTable: Table rendering completed in {total_time:.2f}s ({len(rows)} rows × {len(headers)} cols = {total_cells} cells) - Rows: {rows_time:.2f}s") + rate = totalCells / total_time if total_time > 0 else 0 + self.logger.info(f"_renderJsonTable: Table completed in {total_time:.2f}s ({totalRows} rows x {totalCols} cols = {totalCells} cells) - Rate: {rate:.0f} cells/s") except Exception as e: self.logger.error(f"Error rendering table: {str(e)}", exc_info=True) + def _renderTableFastXml(self, doc: Document, headers: List[str], rows: List[List[Any]], styles: Dict[str, Any]) -> None: + """ + High-performance table rendering using direct XML manipulation. + + This bypasses python-docx's slow high-level API and builds the table + XML structure directly using lxml, which is 100-1000x faster. + """ + import time + from docx.oxml.shared import OxmlElement, qn + from docx.oxml.ns import nsmap + from lxml import etree + + create_start = time.time() + + # Get the document body element + body = doc._body._body + + # Create table element + tbl = OxmlElement('w:tbl') + + # Add table properties + tblPr = OxmlElement('w:tblPr') + + # Table style + border_style = styles.get("table_border", {}).get("style", "grid") + tblStyle = OxmlElement('w:tblStyle') + if border_style == "grid": + tblStyle.set(qn('w:val'), 'LightGridAccent1') + elif border_style == "horizontal_only": + tblStyle.set(qn('w:val'), 'LightListAccent1') + else: + tblStyle.set(qn('w:val'), 'LightList') + tblPr.append(tblStyle) + + # Table width - auto + tblW = OxmlElement('w:tblW') + tblW.set(qn('w:type'), 'auto') + tblW.set(qn('w:w'), '0') + tblPr.append(tblW) + + # Center alignment + jc = OxmlElement('w:jc') + jc.set(qn('w:val'), 'center') + tblPr.append(jc) + + tbl.append(tblPr) + + # Create table grid (column definitions) + tblGrid = OxmlElement('w:tblGrid') + for _ in range(len(headers)): + gridCol = OxmlElement('w:gridCol') + tblGrid.append(gridCol) + tbl.append(tblGrid) + + self.logger.debug(f"_renderTableFastXml: Table structure created in {time.time() - create_start:.3f}s") + + # Build all rows using fast XML + rows_start = time.time() + + # Header row + headerRow = self._createTableRowXml(headers, isHeader=True) + tbl.append(headerRow) + + header_time = time.time() - rows_start + self.logger.debug(f"_renderTableFastXml: Header row created in {header_time:.3f}s") + + # Data rows - batch process for performance + data_start = time.time() + rowCount = len(rows) + + for idx, rowData in enumerate(rows): + # Convert all cells to strings + cellTexts = [str(cell) if cell is not None else '' for cell in rowData] + # Pad if needed + while len(cellTexts) < len(headers): + cellTexts.append('') + + row = self._createTableRowXml(cellTexts, isHeader=False) + tbl.append(row) + + # Log progress every 10% + if rowCount > 100 and (idx + 1) % (rowCount // 10) == 0: + elapsed = time.time() - data_start + rate = (idx + 1) * len(headers) / elapsed if elapsed > 0 else 0 + self.logger.debug(f"_renderTableFastXml: Progress {((idx + 1) / rowCount * 100):.0f}% ({idx + 1}/{rowCount} rows) - Rate: {rate:.0f} cells/s") + + data_time = time.time() - data_start + + # Append table to document body + body.append(tbl) + + total_time = time.time() - create_start + totalCells = (rowCount + 1) * len(headers) + rate = totalCells / total_time if total_time > 0 else 0 + + self.logger.debug(f"_renderTableFastXml: All rows created in {data_time:.2f}s, total: {total_time:.2f}s, rate: {rate:.0f} cells/s") + + def _createTableRowXml(self, cells: List[str], isHeader: bool = False) -> Any: + """ + Create a table row XML element with cells. + + This is the core fast-path: builds the row XML directly without + going through python-docx's slow cell.text assignment. + """ + from docx.oxml.shared import OxmlElement, qn + + tr = OxmlElement('w:tr') + + # Row properties for header + if isHeader: + trPr = OxmlElement('w:trPr') + tblHeader = OxmlElement('w:tblHeader') + trPr.append(tblHeader) + tr.append(trPr) + + for cellText in cells: + # Create cell + tc = OxmlElement('w:tc') + + # Cell properties (minimal) + tcPr = OxmlElement('w:tcPr') + tcW = OxmlElement('w:tcW') + tcW.set(qn('w:type'), 'auto') + tcW.set(qn('w:w'), '0') + tcPr.append(tcW) + tc.append(tcPr) + + # Paragraph with text + p = OxmlElement('w:p') + + # Add run with text + r = OxmlElement('w:r') + + # Bold for headers + if isHeader: + rPr = OxmlElement('w:rPr') + b = OxmlElement('w:b') + rPr.append(b) + r.append(rPr) + + # Text element + t = OxmlElement('w:t') + # Preserve spaces if text starts/ends with whitespace + if cellText and (cellText[0] == ' ' or cellText[-1] == ' '): + t.set('{http://www.w3.org/XML/1998/namespace}space', 'preserve') + t.text = cellText + r.append(t) + + p.append(r) + tc.append(p) + tr.append(tc) + + return tr + def _applyHorizontalBordersOnly(self, table) -> None: """Apply only horizontal borders to the table (no vertical borders).""" try: diff --git a/modules/shared/jsonContinuation.py b/modules/shared/jsonContinuation.py index a0ea2ea5..a2d42fce 100644 --- a/modules/shared/jsonContinuation.py +++ b/modules/shared/jsonContinuation.py @@ -1490,7 +1490,13 @@ class JsonAnalyzer: return '\n'.join(parts) def _renderArrayV3(self, node: dict, depth: int, allocation: BudgetAllocation) -> str: - """Render array - summary mode non-path arrays become .""" + """Render array - summary mode non-path arrays become . + + For arrays ON the path with many children, show: + - First few children (for context) + - ... (N items omitted) ... + - Last N children (closest to cut point) + """ indentStr = " " * depth innerIndent = " " * (depth + 1) @@ -1516,15 +1522,68 @@ class JsonAnalyzer: parts = [f"{keyPrefix}["] - for i, child in enumerate(children): - childRendered = self._renderNodeV3(child, depth + 1, allocation) - isLast = (i == len(children) - 1) - isTruncated = child.get('type') == 'truncated_value' + # For arrays ON PATH with many children (e.g. table rows): + # Show first 3, then "...", then last N children (from bottom up, using budget) + # This ensures we see context near the cut point + if isOnPath and len(children) > 10 and allocation.summary_mode: + showFirst = 3 # Show first 3 for context + # Calculate how many from the end we can show within budget + # Estimate ~80 chars per row for tables + estimatedCharsPerChild = 80 + budgetForEnd = max(500, self.budgetLimit // 2) # Use half budget for end children + showLast = max(5, budgetForEnd // estimatedCharsPerChild) + showLast = min(showLast, len(children) - showFirst - 1) # Don't overlap with first - if isLast or isTruncated: - parts.append(f"{innerIndent}{childRendered}") - else: + # Create a modified allocation that includes these children on path + # so they don't get rendered as + childrenToShow = set() + for i in range(min(showFirst, len(children))): + childrenToShow.add(id(children[i])) + startIdx = len(children) - showLast + for i in range(startIdx, len(children)): + childrenToShow.add(id(children[i])) + + # Temporarily add children to path_node_ids + originalPathIds = allocation.path_node_ids + extendedPathIds = originalPathIds | childrenToShow + allocation.path_node_ids = extendedPathIds + + # Render first N children + for i in range(min(showFirst, len(children))): + child = children[i] + childRendered = self._renderNodeV3(child, depth + 1, allocation) parts.append(f"{innerIndent}{childRendered},") + + # Add ellipsis if there are omitted items + omittedCount = len(children) - showFirst - showLast + if omittedCount > 0: + parts.append(f"{innerIndent}// ... ({omittedCount} items omitted) ...") + + # Render last N children (closest to cut) + for i in range(startIdx, len(children)): + child = children[i] + childRendered = self._renderNodeV3(child, depth + 1, allocation) + isLast = (i == len(children) - 1) + isTruncated = child.get('type') == 'truncated_value' + + if isLast or isTruncated: + parts.append(f"{innerIndent}{childRendered}") + else: + parts.append(f"{innerIndent}{childRendered},") + + # Restore original path_node_ids + allocation.path_node_ids = originalPathIds + else: + # Standard rendering for small arrays or non-path arrays + for i, child in enumerate(children): + childRendered = self._renderNodeV3(child, depth + 1, allocation) + isLast = (i == len(children) - 1) + isTruncated = child.get('type') == 'truncated_value' + + if isLast or isTruncated: + parts.append(f"{innerIndent}{childRendered}") + else: + parts.append(f"{innerIndent}{childRendered},") if node.get('complete'): parts.append(f"{indentStr}]") diff --git a/tests/functional/test14_json_continuation_context.py b/tests/functional/test14_json_continuation_context.py new file mode 100644 index 00000000..805e2ae7 --- /dev/null +++ b/tests/functional/test14_json_continuation_context.py @@ -0,0 +1,373 @@ +#!/usr/bin/env python3 +# Copyright (c) 2025 Patrick Motsch +# All rights reserved. +""" +JSON Continuation Context Test 14 - Tests getContexts() with a specific cut JSON from debug prompts. +Reads a real AI response that was cut and analyzes the continuation contexts. +""" + +import asyncio +import json +import sys +import os +from typing import Dict, Any, Optional + +# Add the gateway to path (go up 2 levels from tests/functional/) +_gateway_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +if _gateway_path not in sys.path: + sys.path.insert(0, _gateway_path) + +# Import jsonContinuation +from modules.shared.jsonContinuation import getContexts + + +class JsonContinuationContextTester14: + def __init__(self): + self.testResults = {} + self.logBuffer = [] + self.logFile = None + + def _log(self, message: str): + """Add message to log buffer.""" + self.logBuffer.append(message) + print(message) + + def _readDebugFile(self, fileName: str) -> Optional[str]: + """Read a debug prompt file from local/debug/prompts/.""" + try: + filePath = os.path.join( + os.path.dirname(__file__), "..", "..", "..", "local", "debug", "prompts", + fileName + ) + with open(filePath, 'r', encoding='utf-8') as f: + return f.read() + except Exception as e: + self._log(f"Error reading file {fileName}: {e}") + return None + + def _extractJsonFromResponse(self, content: str) -> str: + """Extract JSON from response content (remove markdown code fences if present).""" + jsonContent = content.strip() + + # Remove markdown code block markers + if jsonContent.startswith('```json'): + jsonContent = jsonContent[7:] + elif jsonContent.startswith('```'): + jsonContent = jsonContent[3:] + + jsonContent = jsonContent.strip() + + if jsonContent.endswith('```'): + jsonContent = jsonContent[:-3] + + return jsonContent.strip() + + async def testSpecificCutJson(self, fileName: str) -> Dict[str, Any]: + """Test getContexts() with a specific cut JSON file.""" + self._log("") + self._log("=" * 80) + self._log(f"TESTING CUT JSON FROM: {fileName}") + self._log("=" * 80) + + # Read the file + content = self._readDebugFile(fileName) + if content is None: + return {"success": False, "error": f"Could not read file: {fileName}"} + + # Extract JSON + jsonContent = self._extractJsonFromResponse(content) + + self._log("") + self._log("=" * 80) + self._log("INPUT JSON (CUT)") + self._log("=" * 80) + self._log(f"Total length: {len(jsonContent)} characters") + self._log("") + + # Show first and last parts + lines = jsonContent.split('\n') + if len(lines) > 40: + self._log("First 20 lines:") + for line in lines[:20]: + self._log(f" {line}") + self._log(f" ... ({len(lines) - 40} lines omitted) ...") + self._log("Last 20 lines:") + for line in lines[-20:]: + self._log(f" {line}") + else: + for line in lines: + self._log(f" {line}") + + # Call getContexts() + self._log("") + self._log("=" * 80) + self._log("CALLING getContexts()") + self._log("=" * 80) + + try: + contexts = getContexts(jsonContent) + except Exception as e: + self._log(f"ERROR calling getContexts(): {e}") + import traceback + self._log(traceback.format_exc()) + return {"success": False, "error": str(e)} + + # Log results + self._log("") + self._log("=" * 80) + self._log("RESULTS FROM getContexts()") + self._log("=" * 80) + + # jsonParsingSuccess + self._log("") + self._log(f"jsonParsingSuccess: {contexts.jsonParsingSuccess}") + + # overlapContext + self._log("") + self._log("=" * 80) + self._log("overlapContext:") + self._log("=" * 80) + self._log(f"Length: {len(contexts.overlapContext)} characters") + if contexts.overlapContext == "": + self._log(" (empty - JSON is complete, no cut point)") + else: + overlapLines = contexts.overlapContext.split('\n') + if len(overlapLines) > 20: + for line in overlapLines[:10]: + self._log(f" {line}") + self._log(f" ... ({len(overlapLines) - 20} lines omitted) ...") + for line in overlapLines[-10:]: + self._log(f" {line}") + else: + for line in overlapLines: + self._log(f" {line}") + + # hierarchyContext + self._log("") + self._log("=" * 80) + self._log("hierarchyContext (for merging - should be exact input JSON):") + self._log("=" * 80) + self._log(f"Length: {len(contexts.hierarchyContext)} characters") + + # Verify hierarchyContext equals input + if contexts.hierarchyContext == jsonContent: + self._log(" ✅ hierarchyContext == input JSON (CORRECT)") + else: + self._log(" ❌ hierarchyContext != input JSON (BUG!)") + self._log(f" Input length: {len(jsonContent)}, hierarchyContext length: {len(contexts.hierarchyContext)}") + # Show difference at the end + if len(contexts.hierarchyContext) > 0 and len(jsonContent) > 0: + minLen = min(len(contexts.hierarchyContext), len(jsonContent)) + for i in range(minLen): + if contexts.hierarchyContext[i] != jsonContent[i]: + self._log(f" First difference at position {i}") + self._log(f" Input: ...{repr(jsonContent[max(0,i-20):i+20])}...") + self._log(f" Hierarchy: ...{repr(contexts.hierarchyContext[max(0,i-20):i+20])}...") + break + + # hierarchyContextForPrompt + self._log("") + self._log("=" * 80) + self._log("hierarchyContextForPrompt (for AI prompt with budget/placeholders):") + self._log("=" * 80) + self._log(f"Length: {len(contexts.hierarchyContextForPrompt)} characters") + hierarchyPromptLines = contexts.hierarchyContextForPrompt.split('\n') + if len(hierarchyPromptLines) > 40: + for line in hierarchyPromptLines[:20]: + self._log(f" {line}") + self._log(f" ... ({len(hierarchyPromptLines) - 40} lines omitted) ...") + for line in hierarchyPromptLines[-20:]: + self._log(f" {line}") + else: + for line in hierarchyPromptLines: + self._log(f" {line}") + + # completePart + self._log("") + self._log("=" * 80) + self._log("completePart (closed JSON for parsing):") + self._log("=" * 80) + self._log(f"Length: {len(contexts.completePart)} characters") + + # Try to parse completePart + try: + parsed = json.loads(contexts.completePart) + self._log(" ✅ completePart is valid JSON") + self._log(f" Parsed type: {type(parsed).__name__}") + if isinstance(parsed, dict): + self._log(f" Keys: {list(parsed.keys())}") + elif isinstance(parsed, list): + self._log(f" List length: {len(parsed)}") + except json.JSONDecodeError as e: + self._log(f" ❌ completePart is NOT valid JSON: {e}") + + completeLines = contexts.completePart.split('\n') + if len(completeLines) > 40: + self._log("") + self._log("First 20 lines:") + for line in completeLines[:20]: + self._log(f" {line}") + self._log(f" ... ({len(completeLines) - 40} lines omitted) ...") + self._log("Last 20 lines:") + for line in completeLines[-20:]: + self._log(f" {line}") + else: + for line in completeLines: + self._log(f" {line}") + + # Summary + self._log("") + self._log("=" * 80) + self._log("SUMMARY") + self._log("=" * 80) + self._log(f" Input JSON length: {len(jsonContent)} chars") + self._log(f" jsonParsingSuccess: {contexts.jsonParsingSuccess}") + self._log(f" overlapContext length: {len(contexts.overlapContext)} chars") + self._log(f" overlapContext empty: {contexts.overlapContext == ''}") + self._log(f" hierarchyContext length: {len(contexts.hierarchyContext)} chars") + self._log(f" hierarchyContext == input: {contexts.hierarchyContext == jsonContent}") + self._log(f" hierarchyContextForPrompt length: {len(contexts.hierarchyContextForPrompt)} chars") + self._log(f" completePart length: {len(contexts.completePart)} chars") + + return { + "success": True, + "fileName": fileName, + "inputLength": len(jsonContent), + "jsonParsingSuccess": contexts.jsonParsingSuccess, + "overlapContextLength": len(contexts.overlapContext), + "overlapContextEmpty": contexts.overlapContext == "", + "hierarchyContextLength": len(contexts.hierarchyContext), + "hierarchyContextEqualsInput": contexts.hierarchyContext == jsonContent, + "hierarchyContextForPromptLength": len(contexts.hierarchyContextForPrompt), + "completePartLength": len(contexts.completePart), + "contexts": { + "overlapContext": contexts.overlapContext, + "hierarchyContext": contexts.hierarchyContext[:500] + "..." if len(contexts.hierarchyContext) > 500 else contexts.hierarchyContext, + "hierarchyContextForPrompt": contexts.hierarchyContextForPrompt[:500] + "..." if len(contexts.hierarchyContextForPrompt) > 500 else contexts.hierarchyContextForPrompt, + "completePart": contexts.completePart[:500] + "..." if len(contexts.completePart) > 500 else contexts.completePart, + } + } + + def _writeLogFile(self): + """Write log buffer to file.""" + logDir = os.path.join(os.path.dirname(__file__), "..", "..", "..", "local", "debug") + os.makedirs(logDir, exist_ok=True) + logFilePath = os.path.join(logDir, "test14_json_continuation_context_results.txt") + + with open(logFilePath, 'w', encoding='utf-8') as f: + f.write('\n'.join(self.logBuffer)) + + self.logFile = logFilePath + print(f"\n📝 Detailed log written to: {logFilePath}") + + async def runTest(self): + """Run the complete test.""" + self._log("=" * 80) + self._log("JSON CONTINUATION CONTEXT TEST 14") + self._log("=" * 80) + self._log("Testing getContexts() with specific cut JSON from debug prompts") + + results = {} + + # Test files to analyze + testFiles = [ + # The first AI response (iteration 1) - this is the cut JSON + "20260106-173342-020-chapter_1_section_section_2_response.txt", + ] + + # Also try to find today's response files dynamically + debugDir = os.path.join( + os.path.dirname(__file__), "..", "..", "..", "local", "debug", "prompts" + ) + if os.path.exists(debugDir): + for fileName in os.listdir(debugDir): + if "section_2_response" in fileName and fileName.endswith(".txt"): + if fileName not in testFiles: + testFiles.append(fileName) + + # Limit to first 3 files + testFiles = testFiles[:3] + + for fileName in testFiles: + try: + result = await self.testSpecificCutJson(fileName) + results[fileName] = result + except Exception as e: + import traceback + self._log(f"\n❌ Error testing {fileName}: {str(e)}") + self._log(traceback.format_exc()) + results[fileName] = { + "success": False, + "error": str(e), + "traceback": traceback.format_exc() + } + + # Write log file + self._writeLogFile() + + # Summary + print("\n" + "=" * 80) + print("TEST SUMMARY") + print("=" * 80) + + successCount = 0 + for fileName, result in results.items(): + if result.get("success"): + successCount += 1 + hierarchyMatch = result.get("hierarchyContextEqualsInput", False) + overlapEmpty = result.get("overlapContextEmpty", False) + jsonSuccess = result.get("jsonParsingSuccess", False) + + status = "✅" if hierarchyMatch else "⚠️" + print(f"{status} {fileName}") + print(f" hierarchyContext == input: {hierarchyMatch}") + print(f" overlapContext empty: {overlapEmpty}") + print(f" jsonParsingSuccess: {jsonSuccess}") + else: + print(f"❌ {fileName}: {result.get('error', 'Unknown error')}") + + print(f"\nResults: {successCount}/{len(results)} successful") + + self.testResults = { + "success": successCount == len(results), + "totalFiles": len(results), + "successCount": successCount, + "results": results + } + + return self.testResults + + +async def main(): + """Run JSON continuation context test 14.""" + tester = JsonContinuationContextTester14() + results = await tester.runTest() + + # Print final results as JSON for easy parsing + print("\n" + "=" * 80) + print("FINAL RESULTS (JSON)") + print("=" * 80) + + # Create a simplified version for printing (contexts are too large) + printableResults = { + "success": results.get("success"), + "totalFiles": results.get("totalFiles"), + "successCount": results.get("successCount"), + "files": {} + } + for fileName, result in results.get("results", {}).items(): + printableResults["files"][fileName] = { + "success": result.get("success"), + "inputLength": result.get("inputLength"), + "jsonParsingSuccess": result.get("jsonParsingSuccess"), + "overlapContextLength": result.get("overlapContextLength"), + "overlapContextEmpty": result.get("overlapContextEmpty"), + "hierarchyContextEqualsInput": result.get("hierarchyContextEqualsInput"), + "completePartLength": result.get("completePartLength"), + } + + print(json.dumps(printableResults, indent=2, default=str)) + + +if __name__ == "__main__": + asyncio.run(main())